{
    "tiddlers": {
        "$:/Acknowledgements": {
            "title": "$:/Acknowledgements",
            "type": "text/vnd.tiddlywiki",
            "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 © Jeremy Ruston 2004-2007\nCopyright © UnaMesa Association 2007-2015\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of the UnaMesa Association nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n"
        },
        "$:/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/advanced-search-button": {
            "title": "$:/core/images/advanced-search-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-advanced-search-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M74.5651535,87.9848361 C66.9581537,93.0488876 57.8237115,96 48,96 C21.490332,96 0,74.509668 0,48 C0,21.490332 21.490332,0 48,0 C74.509668,0 96,21.490332 96,48 C96,57.8541369 93.0305793,67.0147285 87.9377231,74.6357895 L122.284919,108.982985 C125.978897,112.676963 125.973757,118.65366 122.284271,122.343146 C118.593975,126.033442 112.613238,126.032921 108.92411,122.343793 L74.5651535,87.9848361 Z M48,80 C65.673112,80 80,65.673112 80,48 C80,30.326888 65.673112,16 48,16 C30.326888,16 16,30.326888 16,48 C16,65.673112 30.326888,80 48,80 Z\"></path>\n        <circle cx=\"48\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"28\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"68\" cy=\"48\" r=\"8\"></circle>\n    </g>\n</svg>"
        },
        "$:/core/images/blank": {
            "title": "$:/core/images/blank",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\"></svg>"
        },
        "$:/core/images/cancel-button": {
            "title": "$:/core/images/cancel-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n\t<g fill-rule=\"evenodd\">\n\t    <path d=\"M64,76.3137085 L47.0294734,93.2842351 C43.9038742,96.4098343 38.8399231,96.4084656 35.7157288,93.2842712 C32.5978915,90.166434 32.5915506,85.0947409 35.7157649,81.9705266 L52.6862915,65 L35.7157649,48.0294734 C32.5901657,44.9038742 32.5915344,39.8399231 35.7157288,36.7157288 C38.833566,33.5978915 43.9052591,33.5915506 47.0294734,36.7157649 L64,53.6862915 L80.9705266,36.7157649 C84.0961258,33.5901657 89.1600769,33.5915344 92.2842712,36.7157288 C95.4021085,39.833566 95.4084494,44.9052591 92.2842351,48.0294734 L75.3137085,65 L92.2842351,81.9705266 C95.4098343,85.0961258 95.4084656,90.1600769 92.2842712,93.2842712 C89.166434,96.4021085 84.0947409,96.4084494 80.9705266,93.2842351 L64,76.3137085 Z M64,129 C99.346224,129 128,100.346224 128,65 C128,29.653776 99.346224,1 64,1 C28.653776,1 1.13686838e-13,29.653776 1.13686838e-13,65 C1.13686838e-13,100.346224 28.653776,129 64,129 Z M64,113 C90.509668,113 112,91.509668 112,65 C112,38.490332 90.509668,17 64,17 C37.490332,17 16,38.490332 16,65 C16,91.509668 37.490332,113 64,113 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-down": {
            "title": "$:/core/images/chevron-down",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-down tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 40.500000) rotate(-270.000000) translate(-64.000000, -40.500000) translate(-22.500000, -26.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/chevron-left": {
            "title": "$:/core/images/chevron-left",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-left tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" version=\"1.1\">\n    <g fill-rule=\"evenodd\" transform=\"translate(92.500000, 64.000000) rotate(-180.000000) translate(-92.500000, -64.000000) translate(6.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-right": {
            "title": "$:/core/images/chevron-right",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-right tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-48.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-up": {
            "title": "$:/core/images/chevron-up",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-up tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 89.500000) rotate(-90.000000) translate(-64.000000, -89.500000) translate(-22.500000, 22.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/clone-button": {
            "title": "$:/core/images/clone-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-clone-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M32.2650915,96 L32.2650915,120.002359 C32.2650915,124.419334 35.8432884,128 40.2627323,128 L120.002359,128 C124.419334,128 128,124.421803 128,120.002359 L128,40.2627323 C128,35.8457573 124.421803,32.2650915 120.002359,32.2650915 L96,32.2650915 L96,48 L108.858899,48 C110.519357,48 111.853018,49.3405131 111.853018,50.9941198 L111.853018,108.858899 C111.853018,110.519357 110.512505,111.853018 108.858899,111.853018 L50.9941198,111.853018 C49.333661,111.853018 48,110.512505 48,108.858899 L48,96 L32.2650915,96 Z\"></path>\n        <path d=\"M40,56 L32.0070969,56 C27.5881712,56 24,52.418278 24,48 C24,43.5907123 27.5848994,40 32.0070969,40 L40,40 L40,32.0070969 C40,27.5881712 43.581722,24 48,24 C52.4092877,24 56,27.5848994 56,32.0070969 L56,40 L63.9929031,40 C68.4118288,40 72,43.581722 72,48 C72,52.4092877 68.4151006,56 63.9929031,56 L56,56 L56,63.9929031 C56,68.4118288 52.418278,72 48,72 C43.5907123,72 40,68.4151006 40,63.9929031 L40,56 Z M7.9992458,0 C3.58138434,0 0,3.5881049 0,7.9992458 L0,88.0007542 C0,92.4186157 3.5881049,96 7.9992458,96 L88.0007542,96 C92.4186157,96 96,92.4118951 96,88.0007542 L96,7.9992458 C96,3.58138434 92.4118951,0 88.0007542,0 L7.9992458,0 Z M19.0010118,16 C17.3435988,16 16,17.336731 16,19.0010118 L16,76.9989882 C16,78.6564012 17.336731,80 19.0010118,80 L76.9989882,80 C78.6564012,80 80,78.663269 80,76.9989882 L80,19.0010118 C80,17.3435988 78.663269,16 76.9989882,16 L19.0010118,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-all-button": {
            "title": "$:/core/images/close-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-close-all-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-23.000000, -23.000000)\">\n        <path d=\"M43,131 L22.9976794,131 C18.5827987,131 15,127.418278 15,123 C15,118.590712 18.5806831,115 22.9976794,115 L43,115 L43,94.9976794 C43,90.5827987 46.581722,87 51,87 C55.4092877,87 59,90.5806831 59,94.9976794 L59,115 L79.0023206,115 C83.4172013,115 87,118.581722 87,123 C87,127.409288 83.4193169,131 79.0023206,131 L59,131 L59,151.002321 C59,155.417201 55.418278,159 51,159 C46.5907123,159 43,155.419317 43,151.002321 L43,131 Z\" transform=\"translate(51.000000, 123.000000) rotate(-45.000000) translate(-51.000000, -123.000000) \"></path>\n        <path d=\"M43,59 L22.9976794,59 C18.5827987,59 15,55.418278 15,51 C15,46.5907123 18.5806831,43 22.9976794,43 L43,43 L43,22.9976794 C43,18.5827987 46.581722,15 51,15 C55.4092877,15 59,18.5806831 59,22.9976794 L59,43 L79.0023206,43 C83.4172013,43 87,46.581722 87,51 C87,55.4092877 83.4193169,59 79.0023206,59 L59,59 L59,79.0023206 C59,83.4172013 55.418278,87 51,87 C46.5907123,87 43,83.4193169 43,79.0023206 L43,59 Z\" transform=\"translate(51.000000, 51.000000) rotate(-45.000000) translate(-51.000000, -51.000000) \"></path>\n        <path d=\"M115,59 L94.9976794,59 C90.5827987,59 87,55.418278 87,51 C87,46.5907123 90.5806831,43 94.9976794,43 L115,43 L115,22.9976794 C115,18.5827987 118.581722,15 123,15 C127.409288,15 131,18.5806831 131,22.9976794 L131,43 L151.002321,43 C155.417201,43 159,46.581722 159,51 C159,55.4092877 155.419317,59 151.002321,59 L131,59 L131,79.0023206 C131,83.4172013 127.418278,87 123,87 C118.590712,87 115,83.4193169 115,79.0023206 L115,59 Z\" transform=\"translate(123.000000, 51.000000) rotate(-45.000000) translate(-123.000000, -51.000000) \"></path>\n        <path d=\"M115,131 L94.9976794,131 C90.5827987,131 87,127.418278 87,123 C87,118.590712 90.5806831,115 94.9976794,115 L115,115 L115,94.9976794 C115,90.5827987 118.581722,87 123,87 C127.409288,87 131,90.5806831 131,94.9976794 L131,115 L151.002321,115 C155.417201,115 159,118.581722 159,123 C159,127.409288 155.419317,131 151.002321,131 L131,131 L131,151.002321 C131,155.417201 127.418278,159 123,159 C118.590712,159 115,155.419317 115,151.002321 L115,131 Z\" transform=\"translate(123.000000, 123.000000) rotate(-45.000000) translate(-123.000000, -123.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-button": {
            "title": "$:/core/images/close-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M65.0864256,75.4091629 L14.9727349,125.522854 C11.8515951,128.643993 6.78104858,128.64922 3.65685425,125.525026 C0.539017023,122.407189 0.5336324,117.334539 3.65902635,114.209145 L53.7727171,64.0954544 L3.65902635,13.9817637 C0.537886594,10.8606239 0.532659916,5.79007744 3.65685425,2.6658831 C6.77469148,-0.451954124 11.8473409,-0.457338747 14.9727349,2.66805521 L65.0864256,52.7817459 L115.200116,2.66805521 C118.321256,-0.453084553 123.391803,-0.458311231 126.515997,2.6658831 C129.633834,5.78372033 129.639219,10.8563698 126.513825,13.9817637 L76.4001341,64.0954544 L126.513825,114.209145 C129.634965,117.330285 129.640191,122.400831 126.515997,125.525026 C123.39816,128.642863 118.32551,128.648248 115.200116,125.522854 L65.0864256,75.4091629 L65.0864256,75.4091629 Z\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/close-others-button": {
            "title": "$:/core/images/close-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-others-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z M64,96 C81.673112,96 96,81.673112 96,64 C96,46.326888 81.673112,32 64,32 C46.326888,32 32,46.326888 32,64 C32,81.673112 46.326888,96 64,96 Z M64,80 C72.836556,80 80,72.836556 80,64 C80,55.163444 72.836556,48 64,48 C55.163444,48 48,55.163444 48,64 C48,72.836556 55.163444,80 64,80 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/delete-button": {
            "title": "$:/core/images/delete-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\" transform=\"translate(12.000000, 0.000000)\">\n        <rect x=\"0\" y=\"11\" width=\"105\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"28\" y=\"0\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"112\" width=\"88\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"56\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/done-button": {
            "title": "$:/core/images/done-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M3.52445141,76.8322939 C2.07397484,75.3828178 1.17514421,73.3795385 1.17514421,71.1666288 L1.17514421,23.1836596 C1.17514421,18.7531992 4.75686621,15.1751442 9.17514421,15.1751442 C13.5844319,15.1751442 17.1751442,18.7606787 17.1751442,23.1836596 L17.1751442,63.1751442 L119.173716,63.1751442 C123.590457,63.1751442 127.175144,66.7568662 127.175144,71.1751442 C127.175144,75.5844319 123.592783,79.1751442 119.173716,79.1751442 L9.17657227,79.1751442 C6.96796403,79.1751442 4.9674142,78.279521 3.51911285,76.8315312 Z\" id=\"Rectangle-285\" transform=\"translate(64.175144, 47.175144) rotate(-45.000000) translate(-64.175144, -47.175144) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/down-arrow": {
            "title": "$:/core/images/down-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <path d=\"M109.35638,81.3533152 C107.923899,82.7869182 105.94502,83.6751442 103.759224,83.6751442 L24.5910645,83.6751442 C20.225873,83.6751442 16.6751442,80.1307318 16.6751442,75.7584775 C16.6751442,71.3951199 20.2192225,67.8418109 24.5910645,67.8418109 L95.8418109,67.8418109 L95.8418109,-3.40893546 C95.8418109,-7.77412698 99.3862233,-11.3248558 103.758478,-11.3248558 C108.121835,-11.3248558 111.675144,-7.78077754 111.675144,-3.40893546 L111.675144,75.7592239 C111.675144,77.9416955 110.789142,79.9205745 109.356651,81.3538862 Z\" transform=\"translate(64.175144, 36.175144) rotate(45.000000) translate(-64.175144, -36.175144) \"></path>\n</svg>"
        },
        "$:/core/images/download-button": {
            "title": "$:/core/images/download-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-download-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path class=\"tc-image-download-button-ring\" d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"/><path d=\"M34.3496823,66.4308767 L61.2415823,93.634668 C63.0411536,95.4551107 65.9588502,95.4551107 67.7584215,93.634668 L94.6503215,66.4308767 C96.4498928,64.610434 96.4498928,61.6588981 94.6503215,59.8384554 C93.7861334,58.9642445 92.6140473,58.4731195 91.3919019,58.4731195 L82.9324098,58.4731195 C80.3874318,58.4731195 78.3243078,56.3860674 78.3243078,53.8115729 L78.3243078,38.6615466 C78.3243078,36.0870521 76.2611837,34 73.7162058,34 L55.283798,34 C52.7388201,34 50.675696,36.0870521 50.675696,38.6615466 L50.675696,38.6615466 L50.675696,53.8115729 C50.675696,56.3860674 48.612572,58.4731195 46.0675941,58.4731195 L37.608102,58.4731195 C35.063124,58.4731195 33,60.5601716 33,63.134666 C33,64.3709859 33.4854943,65.5566658 34.3496823,66.4308767 L34.3496823,66.4308767 Z\"/></g></svg>"
        },
        "$:/core/images/edit-button": {
            "title": "$:/core/images/edit-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M116.870058,45.3431458 L108.870058,45.3431458 L108.870058,45.3431458 L108.870058,61.3431458 L116.870058,61.3431458 L116.870058,45.3431458 Z M124.870058,45.3431458 L127.649881,45.3431458 C132.066101,45.3431458 135.656854,48.9248678 135.656854,53.3431458 C135.656854,57.7524334 132.07201,61.3431458 127.649881,61.3431458 L124.870058,61.3431458 L124.870058,45.3431458 Z M100.870058,45.3431458 L15.6638275,45.3431458 C15.5064377,45.3431458 15.3501085,45.3476943 15.1949638,45.3566664 L15.1949638,45.3566664 C15.0628002,45.3477039 14.928279,45.3431458 14.7913977,45.3431458 C6.68160973,45.3431458 -8.34314575,53.3431458 -8.34314575,53.3431458 C-8.34314575,53.3431458 6.85614548,61.3431458 14.7913977,61.3431458 C14.9266533,61.3431458 15.0596543,61.3384973 15.190398,61.3293588 C15.3470529,61.3385075 15.5049057,61.3431458 15.6638275,61.3431458 L100.870058,61.3431458 L100.870058,45.3431458 L100.870058,45.3431458 Z\" transform=\"translate(63.656854, 53.343146) rotate(-45.000000) translate(-63.656854, -53.343146) \"></path>\n        <path d=\"M35.1714596,124.189544 C41.9594858,123.613403 49.068777,121.917633 58.85987,118.842282 C60.6854386,118.268877 62.4306907,117.705515 65.1957709,116.802278 C81.1962861,111.575575 87.0734839,109.994907 93.9414474,109.655721 C102.29855,109.242993 107.795169,111.785371 111.520478,118.355045 C112.610163,120.276732 115.051363,120.951203 116.97305,119.861518 C118.894737,118.771832 119.569207,116.330633 118.479522,114.408946 C113.146151,105.003414 104.734907,101.112919 93.5468356,101.66546 C85.6716631,102.054388 79.4899908,103.716944 62.7116783,109.197722 C59.9734132,110.092199 58.2519873,110.64787 56.4625698,111.20992 C37.002649,117.322218 25.6914684,118.282267 16.8654804,112.957098 C14.9739614,111.815848 12.5154166,112.424061 11.3741667,114.31558 C10.2329168,116.207099 10.84113,118.665644 12.7326489,119.806894 C19.0655164,123.627836 26.4866335,124.926678 35.1714596,124.189544 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/export-button": {
            "title": "$:/core/images/export-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-export-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00348646,127.999999 C8.00464867,128 8.00581094,128 8.00697327,128 L119.993027,128 C122.205254,128 124.207939,127.101378 125.657096,125.651198 L125.656838,125.65759 C127.104563,124.210109 128,122.21009 128,119.999949 L128,56.0000511 C128,51.5817449 124.409288,48 120,48 C115.581722,48 112,51.5797863 112,56.0000511 L112,112 L16,112 L16,56.0000511 C16,51.5817449 12.4092877,48 8,48 C3.581722,48 7.10542736e-15,51.5797863 7.10542736e-15,56.0000511 L7.10542736e-15,119.999949 C7.10542736e-15,124.418255 3.59071231,128 8,128 C8.00116233,128 8.0023246,128 8.00348681,127.999999 Z M56.6235633,27.3113724 L47.6580188,36.2769169 C44.5333664,39.4015692 39.4634864,39.4061295 36.339292,36.2819351 C33.2214548,33.1640979 33.2173444,28.0901742 36.3443103,24.9632084 L58.9616908,2.34582788 C60.5248533,0.782665335 62.5748436,0.000361191261 64.624516,2.38225238e-14 L64.6193616,0.00151809229 C66.6695374,0.000796251595 68.7211167,0.781508799 70.2854358,2.34582788 L92.9028163,24.9632084 C96.0274686,28.0878607 96.0320289,33.1577408 92.9078345,36.2819351 C89.7899973,39.3997724 84.7160736,39.4038827 81.5891078,36.2769169 L72.6235633,27.3113724 L72.6235633,88.5669606 C72.6235633,92.9781015 69.0418413,96.5662064 64.6235633,96.5662064 C60.2142756,96.5662064 56.6235633,92.984822 56.6235633,88.5669606 L56.6235633,27.3113724 L56.6235633,27.3113724 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/full-screen-button": {
            "title": "$:/core/images/full-screen-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-full-screen-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g>\n        <g>\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 104.000000) rotate(-180.000000) translate(-104.000000, -104.000000) translate(80.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(24.000000, 104.000000) rotate(-90.000000) translate(-24.000000, -104.000000) translate(0.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 24.000000) rotate(90.000000) translate(-104.000000, -24.000000) translate(80.000000, 0.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/github": {
            "title": "$:/core/images/github",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-github tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n        <g fill-rule=\"evenodd\">\n            <path d=\"M63.9383506,1.60695328 C28.6017227,1.60695328 -0.055756057,30.2970814 -0.055756057,65.6906208 C-0.055756057,94.003092 18.2804728,118.019715 43.7123154,126.493393 C46.9143781,127.083482 48.0812647,125.104717 48.0812647,123.405261 C48.0812647,121.886765 48.02626,117.85449 47.9948287,112.508284 C30.1929317,116.379268 26.4368926,103.916587 26.4368926,103.916587 C23.5255693,96.5129372 19.3294921,94.5420399 19.3294921,94.5420399 C13.5186324,90.5687739 19.7695302,90.6474524 19.7695302,90.6474524 C26.1933001,91.099854 29.5721638,97.2525155 29.5721638,97.2525155 C35.2808718,107.044059 44.5531024,104.215566 48.1991321,102.575118 C48.7806109,98.4366275 50.4346826,95.612068 52.2616263,94.0109598 C38.0507543,92.3941159 23.1091047,86.8944862 23.1091047,62.3389152 C23.1091047,55.3443933 25.6039634,49.6205298 29.6978889,45.1437211 C29.0378318,43.5229433 26.8415704,37.0044266 30.3265147,28.1845627 C30.3265147,28.1845627 35.6973364,26.4615028 47.9241083,34.7542205 C53.027764,33.330139 58.5046663,32.6220321 63.9462084,32.5944947 C69.3838216,32.6220321 74.856795,33.330139 79.9683085,34.7542205 C92.1872225,26.4615028 97.5501864,28.1845627 97.5501864,28.1845627 C101.042989,37.0044266 98.8467271,43.5229433 98.190599,45.1437211 C102.292382,49.6205298 104.767596,55.3443933 104.767596,62.3389152 C104.767596,86.9574291 89.8023734,92.3744463 75.5482834,93.9598188 C77.8427675,95.9385839 79.8897303,99.8489072 79.8897303,105.828476 C79.8897303,114.392635 79.8111521,121.304544 79.8111521,123.405261 C79.8111521,125.120453 80.966252,127.114954 84.2115327,126.489459 C109.623731,117.996111 127.944244,93.9952241 127.944244,65.6906208 C127.944244,30.2970814 99.2867652,1.60695328 63.9383506,1.60695328\"></path>\n        </g>\n    </svg>\n"
        },
        "$:/core/images/globe": {
            "title": "$:/core/images/globe",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-globe tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M72.8111354,37.1275855 C72.8111354,37.9789875 72.8111354,38.8303894 72.8111354,39.6817913 C72.8111354,41.8784743 73.7885604,46.5631866 72.8111354,48.5143758 C71.3445471,51.4420595 68.1617327,52.0543531 66.4170946,54.3812641 C65.2352215,55.9575873 61.7987417,64.9821523 62.7262858,67.3005778 C66.6959269,77.2228204 74.26087,70.4881886 80.6887657,76.594328 C81.5527211,77.415037 83.5758191,78.8666631 83.985137,79.8899578 C87.2742852,88.1128283 76.4086873,94.8989524 87.7419325,106.189751 C88.9872885,107.430443 91.555495,102.372895 91.8205061,101.575869 C92.6726866,99.0129203 98.5458765,96.1267309 100.908882,94.5234439 C102.928056,93.1534443 105.782168,91.8557166 107.236936,89.7775886 C109.507391,86.5342557 108.717505,82.2640435 110.334606,79.0328716 C112.473794,74.7585014 114.163418,69.3979002 116.332726,65.0674086 C120.230862,57.2857361 121.054075,67.1596684 121.400359,67.5059523 C121.757734,67.8633269 122.411167,67.5059523 122.916571,67.5059523 C123.011132,67.5059523 124.364019,67.6048489 124.432783,67.5059523 C125.0832,66.5705216 123.390209,49.5852316 123.114531,48.2089091 C121.710578,41.1996597 116.17083,32.4278331 111.249523,27.7092761 C104.975994,21.6942076 104.160516,11.5121686 92.9912146,12.7547535 C92.7872931,12.7774397 87.906794,22.9027026 85.2136766,26.2672064 C81.486311,30.9237934 82.7434931,22.1144904 78.6876623,22.1144904 C78.6065806,22.1144904 77.5045497,22.0107615 77.4353971,22.1144904 C76.8488637,22.9942905 75.9952305,26.0101404 75.1288269,26.5311533 C74.8635477,26.6906793 73.4071369,26.2924966 73.2826811,26.5311533 C71.0401728,30.8313939 81.5394677,28.7427264 79.075427,34.482926 C76.7225098,39.9642538 72.747373,32.4860199 72.747373,43.0434079\"></path>\n        <path d=\"M44.4668556,7.01044608 C54.151517,13.1403033 45.1489715,19.2084878 47.1611905,23.2253896 C48.8157833,26.5283781 51.4021933,28.6198851 48.8753629,33.038878 C46.8123257,36.6467763 42.0052989,37.0050492 39.251679,39.7621111 C36.2115749,42.8060154 33.7884281,48.7028116 32.4624592,52.6732691 C30.8452419,57.5158356 47.0088721,59.5388126 44.5246867,63.6811917 C43.1386839,65.9923513 37.7785192,65.1466282 36.0880227,63.8791519 C34.9234453,63.0059918 32.4946425,63.3331166 31.6713597,62.0997342 C29.0575851,58.1839669 29.4107339,54.0758543 28.0457962,49.9707786 C27.1076833,47.1493864 21.732611,47.8501656 20.2022714,49.3776393 C19.6790362,49.8998948 19.8723378,51.1703278 19.8723378,51.8829111 C19.8723378,57.1682405 26.9914913,55.1986414 26.9914913,58.3421973 C26.9914913,72.9792302 30.9191897,64.8771867 38.1313873,69.6793121 C48.1678018,76.3618966 45.9763926,76.981595 53.0777543,84.0829567 C56.7511941,87.7563965 60.8192437,87.7689005 62.503478,93.3767069 C64.1046972,98.7081071 53.1759798,98.7157031 50.786754,100.825053 C49.663965,101.816317 47.9736094,104.970571 46.5680513,105.439676 C44.7757187,106.037867 43.334221,105.93607 41.6242359,107.219093 C39.1967302,109.040481 37.7241465,112.151588 37.6034934,112.030935 C35.4555278,109.88297 34.0848666,96.5511248 33.7147244,93.7726273 C33.1258872,89.3524817 28.1241923,88.2337027 26.7275443,84.7420826 C25.1572737,80.8164061 28.2518481,75.223612 25.599097,70.9819941 C19.0797019,60.557804 13.7775712,56.4811506 10.2493953,44.6896152 C9.3074899,41.5416683 13.5912267,38.1609942 15.1264825,35.8570308 C17.0029359,33.0410312 17.7876232,30.0028946 19.8723378,27.2224065 C22.146793,24.1888519 40.8551166,9.46076832 43.8574051,8.63490613 L44.4668556,7.01044608 Z\"></path>\n        <path d=\"M64,126 C98.2416545,126 126,98.2416545 126,64 C126,29.7583455 98.2416545,2 64,2 C29.7583455,2 2,29.7583455 2,64 C2,98.2416545 29.7583455,126 64,126 Z M64,120 C94.927946,120 120,94.927946 120,64 C120,33.072054 94.927946,8 64,8 C33.072054,8 8,33.072054 8,64 C8,94.927946 33.072054,120 64,120 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/help": {
            "title": "$:/core/images/help",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-help tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M36.0548906,111.44117 C30.8157418,115.837088 20.8865444,118.803477 9.5,118.803477 C7.86465619,118.803477 6.25937294,118.742289 4.69372699,118.624467 C12.612543,115.984876 18.7559465,110.02454 21.0611049,102.609942 C8.74739781,92.845129 1.04940554,78.9359851 1.04940554,63.5 C1.04940554,33.9527659 29.2554663,10 64.0494055,10 C98.8433448,10 127.049406,33.9527659 127.049406,63.5 C127.049406,93.0472341 98.8433448,117 64.0494055,117 C53.9936953,117 44.48824,114.999337 36.0548906,111.44117 L36.0548906,111.44117 Z M71.4042554,77.5980086 C71.406883,77.2865764 71.4095079,76.9382011 71.4119569,76.5610548 C71.4199751,75.3262169 71.4242825,74.0811293 71.422912,72.9158546 C71.4215244,71.736154 71.4143321,70.709635 71.4001396,69.8743525 C71.4078362,68.5173028 71.9951951,67.7870427 75.1273009,65.6385471 C75.2388969,65.5619968 76.2124091,64.8981068 76.5126553,64.6910879 C79.6062455,62.5580654 81.5345849,60.9050204 83.2750652,58.5038955 C85.6146327,55.2762841 86.8327108,51.426982 86.8327108,46.8554323 C86.8327108,33.5625756 76.972994,24.9029551 65.3778484,24.9029551 C54.2752771,24.9029551 42.8794554,34.5115163 41.3121702,47.1975534 C40.9043016,50.4989536 43.2499725,53.50591 46.5513726,53.9137786 C49.8527728,54.3216471 52.8597292,51.9759763 53.2675978,48.6745761 C54.0739246,42.1479456 60.2395837,36.9492759 65.3778484,36.9492759 C70.6427674,36.9492759 74.78639,40.5885487 74.78639,46.8554323 C74.78639,50.4892974 73.6853224,52.008304 69.6746221,54.7736715 C69.4052605,54.9593956 68.448509,55.6118556 68.3131127,55.7047319 C65.6309785,57.5445655 64.0858213,58.803255 62.6123358,60.6352315 C60.5044618,63.2559399 59.3714208,66.3518252 59.3547527,69.9487679 C59.3684999,70.8407274 59.3752803,71.8084521 59.3765995,72.9300232 C59.3779294,74.0607297 59.3737237,75.2764258 59.36589,76.482835 C59.3634936,76.8518793 59.3609272,77.1924914 59.3583633,77.4963784 C59.3568319,77.6778944 59.3556368,77.8074256 59.3549845,77.8730928 C59.3219814,81.1994287 61.9917551,83.9227111 65.318091,83.9557142 C68.644427,83.9887173 71.3677093,81.3189435 71.4007124,77.9926076 C71.4014444,77.9187458 71.402672,77.7856841 71.4042554,77.5980086 Z M65.3778489,102.097045 C69.5359735,102.097045 72.9067994,98.7262189 72.9067994,94.5680944 C72.9067994,90.4099698 69.5359735,87.0391439 65.3778489,87.0391439 C61.2197243,87.0391439 57.8488984,90.4099698 57.8488984,94.5680944 C57.8488984,98.7262189 61.2197243,102.097045 65.3778489,102.097045 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/home-button": {
            "title": "$:/core/images/home-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M112.9847,119.501583 C112.99485,119.336814 113,119.170705 113,119.003406 L113,67.56802 C116.137461,70.5156358 121.076014,70.4518569 124.133985,67.3938855 C127.25818,64.2696912 127.260618,59.2068102 124.131541,56.0777326 L70.3963143,2.34250601 C68.8331348,0.779326498 66.7828947,-0.000743167069 64.7337457,1.61675364e-05 C62.691312,-0.00409949529 60.6426632,0.777559815 59.077717,2.34250601 L33,28.420223 L33,28.420223 L33,8.00697327 C33,3.58484404 29.4092877,0 25,0 C20.581722,0 17,3.59075293 17,8.00697327 L17,44.420223 L5.3424904,56.0777326 C2.21694607,59.2032769 2.22220878,64.2760483 5.34004601,67.3938855 C8.46424034,70.5180798 13.5271213,70.5205187 16.6561989,67.3914411 L17,67.04764 L17,119.993027 C17,119.994189 17.0000002,119.995351 17.0000007,119.996514 C17.0000002,119.997675 17,119.998838 17,120 C17,124.418278 20.5881049,128 24.9992458,128 L105.000754,128 C109.418616,128 113,124.409288 113,120 C113,119.832611 112.99485,119.666422 112.9847,119.501583 Z M97,112 L97,51.5736087 L97,51.5736087 L64.7370156,19.3106244 L33,51.04764 L33,112 L97,112 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/import-button": {
            "title": "$:/core/images/import-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-import-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M105.449437,94.2138951 C105.449437,94.2138951 110.049457,94.1897106 110.049457,99.4026111 C110.049457,104.615512 105.163246,104.615511 105.163246,104.615511 L45.0075072,105.157833 C45.0075072,105.157833 0.367531803,106.289842 0.367532368,66.6449212 C0.367532934,27.0000003 45.0428249,27.0000003 45.0428249,27.0000003 L105.532495,27.0000003 C105.532495,27.0000003 138.996741,25.6734987 138.996741,55.1771866 C138.996741,84.6808745 105.727102,82.8457535 105.727102,82.8457535 L56.1735087,82.8457535 C56.1735087,82.8457535 22.6899229,85.1500223 22.6899229,66.0913753 C22.6899229,47.0327282 56.1735087,49.3383013 56.1735087,49.3383013 L105.727102,49.3383013 C105.727102,49.3383013 111.245209,49.3383024 111.245209,54.8231115 C111.245209,60.3079206 105.727102,60.5074524 105.727102,60.5074524 L56.1735087,60.5074524 C56.1735087,60.5074524 37.48913,60.5074528 37.48913,66.6449195 C37.48913,72.7823862 56.1735087,71.6766023 56.1735087,71.6766023 L105.727102,71.6766029 C105.727102,71.6766029 127.835546,73.1411469 127.835546,55.1771866 C127.835546,35.5304025 105.727102,38.3035317 105.727102,38.3035317 L45.0428249,38.3035317 C45.0428249,38.3035317 11.5287276,38.3035313 11.5287276,66.6449208 C11.5287276,94.9863103 45.0428244,93.9579678 45.0428244,93.9579678 L105.449437,94.2138951 Z\" transform=\"translate(69.367532, 66.000000) rotate(-45.000000) translate(-69.367532, -66.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/info-button": {
            "title": "$:/core/images/info-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <g transform=\"translate(0.049406, 0.000000)\">\n            <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"></path>\n            <circle cx=\"64\" cy=\"32\" r=\"8\"></circle>\n            <rect x=\"56\" y=\"48\" width=\"16\" height=\"56\" rx=\"8\"></rect>\n        </g>\n    </g>\n    </g>\n</svg>"
        },
        "$:/core/images/left-arrow": {
            "created": "20150315234410875",
            "modified": "20150315235324760",
            "tags": "$:/tags/Image",
            "title": "$:/core/images/left-arrow",
            "text": "<svg class=\"tc-image-left-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path transform=\"rotate(135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25075c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056z\"/>\n</svg>\n"
        },
        "$:/core/images/locked-padlock": {
            "title": "$:/core/images/locked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-locked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M96.4723753,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L32.0000269,64 C32.0028554,48.2766389 32.3030338,16.2688026 64.1594984,16.2688041 C95.9543927,16.2688056 96.4648869,48.325931 96.4723753,64 Z M80.5749059,64 L48.4413579,64 C48.4426205,47.71306 48.5829272,31.9999996 64.1595001,31.9999996 C79.8437473,31.9999996 81.1369461,48.1359182 80.5749059,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/mail": {
            "title": "$:/core/images/mail",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mail tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M122.826782,104.894066 C121.945525,105.22777 120.990324,105.41043 119.993027,105.41043 L8.00697327,105.41043 C7.19458381,105.41043 6.41045219,105.289614 5.67161357,105.064967 L5.67161357,105.064967 L39.8346483,70.9019325 L60.6765759,91.7438601 C61.6118278,92.679112 62.8865166,93.0560851 64.0946097,92.8783815 C65.2975108,93.0473238 66.5641085,92.6696979 67.4899463,91.7438601 L88.5941459,70.6396605 C88.6693095,70.7292352 88.7490098,70.8162939 88.8332479,70.9005321 L122.826782,104.894066 Z M127.903244,98.6568194 C127.966933,98.2506602 128,97.8343714 128,97.4103789 L128,33.410481 C128,32.7414504 127.917877,32.0916738 127.763157,31.4706493 L94.2292399,65.0045665 C94.3188145,65.0797417 94.4058701,65.1594458 94.4901021,65.2436778 L127.903244,98.6568194 Z M0.205060636,99.2178117 C0.0709009529,98.6370366 0,98.0320192 0,97.4103789 L0,33.410481 C0,32.694007 0.0944223363,31.9995312 0.27147538,31.3387595 L0.27147538,31.3387595 L34.1777941,65.2450783 L0.205060636,99.2178117 L0.205060636,99.2178117 Z M5.92934613,25.6829218 C6.59211333,25.5051988 7.28862283,25.4104299 8.00697327,25.4104299 L119.993027,25.4104299 C120.759109,25.4104299 121.500064,25.5178649 122.201605,25.7184927 L122.201605,25.7184927 L64.0832611,83.8368368 L5.92934613,25.6829218 L5.92934613,25.6829218 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/menu-button": {
            "title": "$:/core/images/menu-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <rect x=\"0\" y=\"16\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"56\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"96\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n</svg>"
        },
        "$:/core/images/new-button": {
            "title": "$:/core/images/new-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <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>"
        },
        "$:/core/images/new-here-button": {
            "title": "$:/core/images/new-here-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-here-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n    \t<g transform=\"translate(52.233611, 64.389922) rotate(75.000000) translate(-52.233611, -64.389922) translate(-7.734417, 3.702450)\">\n\t        <path d=\"M18.9270186,45.959338 L18.9080585,49.6521741 C18.8884833,53.4648378 21.0574548,58.7482162 23.7526408,61.4434022 L78.5671839,116.257945 C81.2617332,118.952495 85.6348701,118.950391 88.3334363,116.251825 L115.863237,88.7220241 C118.555265,86.0299959 118.564544,81.6509578 115.869358,78.9557717 L61.0548144,24.1412286 C58.3602652,21.4466794 53.0787224,19.2788426 49.2595808,19.3006519 L25.9781737,19.4336012 C22.1633003,19.4553862 19.0471195,22.5673232 19.0275223,26.3842526 L18.9871663,34.2443819 C19.0818862,34.255617 19.1779758,34.2665345 19.2754441,34.2771502 C22.6891275,34.6489512 27.0485594,34.2348566 31.513244,33.2285542 C31.7789418,32.8671684 32.075337,32.5211298 32.4024112,32.1940556 C34.8567584,29.7397084 38.3789778,29.0128681 41.4406288,30.0213822 C41.5958829,29.9543375 41.7503946,29.8866669 41.9041198,29.8183808 L42.1110981,30.2733467 C43.1114373,30.6972371 44.0473796,31.3160521 44.8614145,32.1300869 C48.2842088,35.5528813 48.2555691,41.130967 44.7974459,44.5890903 C41.4339531,47.952583 36.0649346,48.0717177 32.6241879,44.9262969 C27.8170558,45.8919233 23.0726921,46.2881596 18.9270186,45.959338 Z\"></path>\n\t        <path d=\"M45.4903462,38.8768094 C36.7300141,42.6833154 26.099618,44.7997354 18.1909048,43.9383587 C7.2512621,42.7468685 1.50150083,35.8404432 4.66865776,24.7010202 C7.51507386,14.6896965 15.4908218,6.92103848 24.3842626,4.38423012 C34.1310219,1.60401701 42.4070208,6.15882777 42.4070209,16.3101169 L34.5379395,16.310117 C34.5379394,11.9285862 31.728784,10.3825286 26.5666962,11.8549876 C20.2597508,13.6540114 14.3453742,19.4148216 12.2444303,26.8041943 C10.4963869,32.9523565 12.6250796,35.5092726 19.0530263,36.2093718 C25.5557042,36.9176104 35.0513021,34.9907189 42.7038419,31.5913902 L42.7421786,31.6756595 C44.3874154,31.5384763 47.8846101,37.3706354 45.9274416,38.6772897 L45.9302799,38.6835285 C45.9166992,38.6895612 45.9031139,38.6955897 45.8895238,38.7016142 C45.8389288,38.7327898 45.7849056,38.7611034 45.7273406,38.7863919 C45.6506459,38.8200841 45.571574,38.8501593 45.4903462,38.8768094 Z\"></path>\n        </g>\n        <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n    </g>\n    </g>\n</svg>"
        },
        "$:/core/images/new-journal-button": {
            "title": "$:/core/images/new-journal-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-journal-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M102.545455,112.818182 L102.545455,124.636364 L102.545455,124.636364 L102.545455,124.636364 C102.545455,125.941761 103.630828,127 104.969697,127 L111.030303,127 C112.369172,127 113.454545,125.941761 113.454545,124.636364 L113.454545,112.818182 L125.575758,112.818182 C126.914626,112.818182 128,111.759982 128,110.454545 L128,104.545455 C128,103.240018 126.914626,102.181818 125.575758,102.181818 L113.454545,102.181818 L113.454545,90.3636364 C113.454545,89.0582 112.369172,88 111.030303,88 L104.969697,88 L104.969697,88 C103.630828,88 102.545455,89.0582 102.545455,90.3636364 L102.545455,102.181818 L90.4242424,102.181818 L90.4242424,102.181818 C89.0853705,102.181818 88,103.240018 88,104.545455 L88,110.454545 L88,110.454545 L88,110.454545 C88,111.759982 89.0853705,112.818182 90.4242424,112.818182 L102.545455,112.818182 Z\"></path>\n        <g transform=\"translate(59.816987, 64.316987) rotate(30.000000) translate(-59.816987, -64.316987) translate(20.316987, 12.816987)\">\n            <g transform=\"translate(0.000000, 0.000000)\">\n                <path d=\"M9.99631148,0 C4.4755011,0 -2.27373675e-13,4.48070044 -2.27373675e-13,9.99759461 L-2.27373675e-13,91.6128884 C-2.27373675e-13,97.1344074 4.46966773,101.610483 9.99631148,101.610483 L68.9318917,101.610483 C74.4527021,101.610483 78.9282032,97.1297826 78.9282032,91.6128884 L78.9282032,9.99759461 C78.9282032,4.47607557 74.4585355,0 68.9318917,0 L9.99631148,0 Z M20.8885263,26 C24.2022348,26 26.8885263,23.3137085 26.8885263,20 C26.8885263,16.6862915 24.2022348,14 20.8885263,14 C17.5748178,14 14.8885263,16.6862915 14.8885263,20 C14.8885263,23.3137085 17.5748178,26 20.8885263,26 Z M57.3033321,25.6783342 C60.6170406,25.6783342 63.3033321,22.9920427 63.3033321,19.6783342 C63.3033321,16.3646258 60.6170406,13.6783342 57.3033321,13.6783342 C53.9896236,13.6783342 51.3033321,16.3646258 51.3033321,19.6783342 C51.3033321,22.9920427 53.9896236,25.6783342 57.3033321,25.6783342 Z\"></path>\n                <text font-family=\"Helvetica\" font-size=\"47.1724138\" font-weight=\"bold\" fill=\"#FFFFFF\">\n                    <tspan x=\"42\" y=\"77.4847912\" text-anchor=\"middle\"><<now \"DD\">></tspan>\n                </text>\n            </g>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/open-window": {
            "title": "$:/core/images/open-window",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-open-window tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M16,112 L104.993898,112 C108.863261,112 112,115.590712 112,120 C112,124.418278 108.858091,128 104.993898,128 L7.00610161,128 C3.13673853,128 0,124.409288 0,120 C0,119.998364 4.30952878e-07,119.996727 1.29273572e-06,119.995091 C4.89579306e-07,119.993456 0,119.99182 0,119.990183 L0,24.0098166 C0,19.586117 3.59071231,16 8,16 C12.418278,16 16,19.5838751 16,24.0098166 L16,112 Z\"></path>\n        <path d=\"M96,43.1959595 L96,56 C96,60.418278 99.581722,64 104,64 C108.418278,64 112,60.418278 112,56 L112,24 C112,19.5907123 108.415101,16 103.992903,16 L72.0070969,16 C67.5881712,16 64,19.581722 64,24 C64,28.4092877 67.5848994,32 72.0070969,32 L84.5685425,32 L48.2698369,68.2987056 C45.1421332,71.4264093 45.1434327,76.4904296 48.267627,79.614624 C51.3854642,82.7324612 56.4581306,82.7378289 59.5835454,79.6124141 L96,43.1959595 Z M32,7.9992458 C32,3.58138434 35.5881049,0 39.9992458,0 L120.000754,0 C124.418616,0 128,3.5881049 128,7.9992458 L128,88.0007542 C128,92.4186157 124.411895,96 120.000754,96 L39.9992458,96 C35.5813843,96 32,92.4118951 32,88.0007542 L32,7.9992458 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/options-button": {
            "title": "$:/core/images/options-button",
            "tags": "$:/tags/Image",
            "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>\n    </g>\n</svg>"
        },
        "$:/core/images/palette": {
            "title": "$:/core/images/palette",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-palette tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.2470434,39.1821571 C75.0645698,38.2680897 69.6261555,37.7814854 64.0193999,37.7814854 C28.6624616,37.7814854 0,57.1324214 0,81.0030106 C0,90.644534 4.67604329,99.5487133 12.5805659,106.738252 C23.5031767,91.1899067 26.3405471,72.3946229 36.8885698,63.5622337 C52.0716764,50.8486559 63.4268694,55.7343343 63.4268694,55.7343343 L80.2470434,39.1821571 Z M106.781666,48.8370714 C119.830962,56.749628 128.0388,68.229191 128.0388,81.0030106 C128.0388,90.3534932 128.557501,98.4142085 116.165191,106.082518 C105.367708,112.763955 112.341384,99.546808 104.321443,95.1851533 C96.3015017,90.8234987 84.3749007,96.492742 86.1084305,103.091059 C89.3087234,115.272303 105.529892,114.54645 92.4224435,119.748569 C79.3149955,124.950687 74.2201582,124.224536 64.0193999,124.224536 C56.1979176,124.224536 48.7040365,123.277578 41.7755684,121.544216 C51.620343,117.347916 69.6563669,109.006202 75.129737,102.088562 C82.7876655,92.4099199 87.3713218,80.0000002 83.3235694,72.4837191 C83.1303943,72.1250117 94.5392656,60.81569 106.781666,48.8370714 Z M1.13430476,123.866563 C0.914084026,123.867944 0.693884185,123.868637 0.473712455,123.868637 C33.9526848,108.928928 22.6351223,59.642592 59.2924543,59.6425917 C59.6085574,61.0606542 59.9358353,62.5865065 60.3541977,64.1372318 C34.4465025,59.9707319 36.7873124,112.168427 1.13429588,123.866563 L1.13430476,123.866563 Z M1.84669213,123.859694 C40.7185279,123.354338 79.9985412,101.513051 79.9985401,79.0466836 C70.7284906,79.0466835 65.9257264,75.5670082 63.1833375,71.1051511 C46.585768,64.1019718 32.81846,116.819636 1.84665952,123.859695 L1.84669213,123.859694 Z M67.1980193,59.8524981 C62.748213,63.9666823 72.0838429,76.2846822 78.5155805,71.1700593 C89.8331416,59.8524993 112.468264,37.2173758 123.785825,25.8998146 C135.103386,14.5822535 123.785825,3.26469247 112.468264,14.5822535 C101.150703,25.8998144 78.9500931,48.9868127 67.1980193,59.8524981 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permalink-button": {
            "title": "$:/core/images/permalink-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permalink-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.4834582,48 L73.0956761,80 L73.0956761,80 L47.5165418,80 L54.9043239,48 L80.4834582,48 Z M84.1773493,32 L89.8007299,7.64246248 C90.7941633,3.33942958 95.0918297,0.64641956 99.3968675,1.64031585 C103.693145,2.63218977 106.385414,6.93288901 105.390651,11.2416793 L100.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L96.9043239,48 L89.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L85.8226507,96 L80.1992701,120.357538 C79.2058367,124.66057 74.9081703,127.35358 70.6031325,126.359684 C66.3068546,125.36781 63.6145865,121.067111 64.6093491,116.758321 L69.401785,96 L43.8226507,96 L38.1992701,120.357538 C37.2058367,124.66057 32.9081703,127.35358 28.6031325,126.359684 C24.3068546,125.36781 21.6145865,121.067111 22.6093491,116.758321 L27.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L31.0956761,80 L38.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L42.1773493,32 L47.8007299,7.64246248 C48.7941633,3.33942958 53.0918297,0.64641956 57.3968675,1.64031585 C61.6931454,2.63218977 64.3854135,6.93288901 63.3906509,11.2416793 L58.598215,32 L84.1773493,32 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permaview-button": {
            "title": "$:/core/images/permaview-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permaview-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M81.4834582,48 L79.6365127,56 L79.6365127,56 L74.0573784,56 L75.9043239,48 L81.4834582,48 Z M85.1773493,32 L90.8007299,7.64246248 C91.7941633,3.33942958 96.0918297,0.64641956 100.396867,1.64031585 C104.693145,2.63218977 107.385414,6.93288901 106.390651,11.2416793 L101.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L97.9043239,48 L96.0573784,56 L104.000754,56 C108.411895,56 112,59.581722 112,64 C112,68.4092877 108.418616,72 104.000754,72 L92.3634873,72 L90.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L86.8226507,96 L81.1992701,120.357538 C80.2058367,124.66057 75.9081703,127.35358 71.6031325,126.359684 C67.3068546,125.36781 64.6145865,121.067111 65.6093491,116.758321 L70.401785,96 L64.8226507,96 L59.1992701,120.357538 C58.2058367,124.66057 53.9081703,127.35358 49.6031325,126.359684 C45.3068546,125.36781 42.6145865,121.067111 43.6093491,116.758321 L48.401785,96 L42.8226507,96 L37.1992701,120.357538 C36.2058367,124.66057 31.9081703,127.35358 27.6031325,126.359684 C23.3068546,125.36781 20.6145865,121.067111 21.6093491,116.758321 L26.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L30.0956761,80 L31.9426216,72 L23.9992458,72 C19.5881049,72 16,68.418278 16,64 C16,59.5907123 19.5813843,56 23.9992458,56 L35.6365127,56 L37.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L41.1773493,32 L46.8007299,7.64246248 C47.7941633,3.33942958 52.0918297,0.64641956 56.3968675,1.64031585 C60.6931454,2.63218977 63.3854135,6.93288901 62.3906509,11.2416793 L57.598215,32 L63.1773493,32 L68.8007299,7.64246248 C69.7941633,3.33942958 74.0918297,0.64641956 78.3968675,1.64031585 C82.6931454,2.63218977 85.3854135,6.93288901 84.3906509,11.2416793 L79.598215,32 L85.1773493,32 Z M53.9043239,48 L52.0573784,56 L57.6365127,56 L59.4834582,48 L53.9043239,48 Z M75.9426216,72 L74.0956761,80 L74.0956761,80 L68.5165418,80 L70.3634873,72 L75.9426216,72 L75.9426216,72 Z M48.3634873,72 L46.5165418,80 L52.0956761,80 L53.9426216,72 L48.3634873,72 L48.3634873,72 Z\"></path>\n    </g>\n</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\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M61.2072232,68.1369825 C56.8829239,70.9319564 54.2082892,74.793177 54.2082892,79.0581634 C54.2082892,86.9638335 63.3980995,93.4821994 75.2498076,94.3940006 C77.412197,98.2964184 83.8475284,101.178858 91.5684735,101.403106 C86.4420125,100.27851 82.4506393,97.6624107 80.9477167,94.3948272 C92.8046245,93.4861461 102,86.9662269 102,79.0581634 C102,70.5281905 91.3014611,63.6132813 78.1041446,63.6132813 C71.5054863,63.6132813 65.5315225,65.3420086 61.2072232,68.1369825 Z M74.001066,53.9793443 C69.6767667,56.7743182 63.7028029,58.5030456 57.1041446,58.5030456 C54.4851745,58.5030456 51.9646095,58.2307276 49.6065315,57.7275105 C46.2945155,59.9778212 41.2235699,61.4171743 35.5395922,61.4171743 C35.4545771,61.4171743 35.3696991,61.4168523 35.2849622,61.4162104 C39.404008,60.5235193 42.7961717,58.6691298 44.7630507,56.286533 C37.8379411,53.5817651 33.2082892,48.669413 33.2082892,43.0581634 C33.2082892,34.5281905 43.9068281,27.6132812 57.1041446,27.6132812 C70.3014611,27.6132812 81,34.5281905 81,43.0581634 C81,47.3231498 78.3253653,51.1843704 74.001066,53.9793443 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</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\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M40.3972881,76.4456988 L40.3972881,95.3404069 L54.5170166,95.3404069 L54.5170166,95.3404069 C54.5165526,95.3385183 54.516089,95.3366295 54.515626,95.3347404 C54.6093153,95.3385061 54.7034848,95.3404069 54.7980982,95.3404069 C58.6157051,95.3404069 61.710487,92.245625 61.710487,88.4280181 C61.710487,86.6197822 61.01617,84.9737128 59.8795929,83.7418666 L59.8795929,83.7418666 C59.8949905,83.7341665 59.9104102,83.7265043 59.925852,83.7188798 C58.8840576,82.5086663 58.2542926,80.9336277 58.2542926,79.2114996 C58.2542926,75.3938927 61.3490745,72.2991108 65.1666814,72.2991108 C68.9842884,72.2991108 72.0790703,75.3938927 72.0790703,79.2114996 C72.0790703,81.1954221 71.2432806,82.9841354 69.9045961,84.2447446 L69.9045961,84.2447446 C69.9333407,84.2629251 69.9619885,84.281245 69.9905383,84.2997032 L69.9905383,84.2997032 C69.1314315,85.4516923 68.6228758,86.8804654 68.6228758,88.4280181 C68.6228758,91.8584969 71.1218232,94.7053153 74.3986526,95.2474079 C74.3913315,95.2784624 74.3838688,95.3094624 74.3762652,95.3404069 L95.6963988,95.3404069 L95.6963988,75.5678578 L95.6963988,75.5678578 C95.6466539,75.5808558 95.5967614,75.5934886 95.5467242,75.6057531 C95.5504899,75.5120637 95.5523907,75.4178943 95.5523907,75.3232809 C95.5523907,71.505674 92.4576088,68.4108921 88.6400019,68.4108921 C86.831766,68.4108921 85.1856966,69.105209 83.9538504,70.2417862 L83.9538504,70.2417862 C83.9461503,70.2263886 83.938488,70.2109688 83.9308636,70.1955271 C82.7206501,71.2373215 81.1456115,71.8670865 79.4234834,71.8670865 C75.6058765,71.8670865 72.5110946,68.7723046 72.5110946,64.9546976 C72.5110946,61.1370907 75.6058765,58.0423088 79.4234834,58.0423088 C81.4074059,58.0423088 83.1961192,58.8780985 84.4567284,60.2167829 L84.4567284,60.2167829 C84.4749089,60.1880383 84.4932288,60.1593906 84.511687,60.1308407 L84.511687,60.1308407 C85.6636761,60.9899475 87.0924492,61.4985032 88.6400019,61.4985032 C92.0704807,61.4985032 94.9172991,58.9995558 95.4593917,55.7227265 C95.538755,55.7414363 95.6177614,55.761071 95.6963988,55.7816184 L95.6963988,40.0412962 L74.3762652,40.0412962 L74.3762652,40.0412962 C74.3838688,40.0103516 74.3913315,39.9793517 74.3986526,39.9482971 L74.3986526,39.9482971 C71.1218232,39.4062046 68.6228758,36.5593862 68.6228758,33.1289073 C68.6228758,31.5813547 69.1314315,30.1525815 69.9905383,29.0005925 C69.9619885,28.9821342 69.9333407,28.9638143 69.9045961,28.9456339 C71.2432806,27.6850247 72.0790703,25.8963113 72.0790703,23.9123888 C72.0790703,20.0947819 68.9842884,17 65.1666814,17 C61.3490745,17 58.2542926,20.0947819 58.2542926,23.9123888 C58.2542926,25.6345169 58.8840576,27.2095556 59.925852,28.419769 L59.925852,28.419769 C59.9104102,28.4273935 59.8949905,28.4350558 59.8795929,28.4427558 C61.01617,29.674602 61.710487,31.3206715 61.710487,33.1289073 C61.710487,36.9465143 58.6157051,40.0412962 54.7980982,40.0412962 C54.7034848,40.0412962 54.6093153,40.0393953 54.515626,40.0356296 L54.515626,40.0356296 C54.516089,40.0375187 54.5165526,40.0394075 54.5170166,40.0412962 L40.3972881,40.0412962 L40.3972881,52.887664 L40.3972881,52.887664 C40.4916889,53.3430132 40.5412962,53.8147625 40.5412962,54.2980982 C40.5412962,58.1157051 37.4465143,61.210487 33.6289073,61.210487 C32.0813547,61.210487 30.6525815,60.7019313 29.5005925,59.8428245 C29.4821342,59.8713744 29.4638143,59.9000221 29.4456339,59.9287667 C28.1850247,58.5900823 26.3963113,57.7542926 24.4123888,57.7542926 C20.5947819,57.7542926 17.5,60.8490745 17.5,64.6666814 C17.5,68.4842884 20.5947819,71.5790703 24.4123888,71.5790703 C26.134517,71.5790703 27.7095556,70.9493053 28.919769,69.9075109 L28.919769,69.9075109 C28.9273935,69.9229526 28.9350558,69.9383724 28.9427558,69.95377 C30.174602,68.8171928 31.8206715,68.1228758 33.6289073,68.1228758 C37.4465143,68.1228758 40.5412962,71.2176578 40.5412962,75.0352647 C40.5412962,75.5186004 40.4916889,75.9903496 40.3972881,76.4456988 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</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\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M29.4078519,91.4716406 L51.4693474,69.4101451 L51.4646675,69.4054652 C50.5969502,68.5377479 50.5929779,67.1348725 51.4693474,66.2585029 C52.3396494,65.3882009 53.7499654,65.3874786 54.6163097,66.2538229 L64.0805963,75.7181095 C64.9483136,76.5858268 64.9522859,77.9887022 64.0759163,78.8650718 C63.2056143,79.7353737 61.7952984,79.736096 60.9289541,78.8697517 L60.9242741,78.8650718 L60.9242741,78.8650718 L38.8627786,100.926567 C36.2518727,103.537473 32.0187578,103.537473 29.4078519,100.926567 C26.796946,98.3156614 26.796946,94.0825465 29.4078519,91.4716406 Z M60.8017407,66.3810363 C58.3659178,63.6765806 56.3370667,61.2899536 54.9851735,59.5123615 C48.1295381,50.4979488 44.671561,55.2444054 40.7586738,59.5123614 C36.8457866,63.7803174 41.789473,67.2384487 38.0759896,70.2532832 C34.3625062,73.2681177 34.5917646,74.3131575 28.3243876,68.7977024 C22.0570105,63.2822473 21.6235306,61.7636888 24.5005999,58.6166112 C27.3776691,55.4695337 29.7823103,60.4247912 35.6595047,54.8320442 C41.5366991,49.2392972 36.5996215,44.2825646 36.5996215,44.2825646 C36.5996215,44.2825646 48.8365511,19.267683 65.1880231,21.1152173 C81.5394952,22.9627517 59.0022276,18.7228947 53.3962199,38.3410355 C50.9960082,46.7405407 53.8429162,44.7613399 58.3941742,48.3090467 C59.7875202,49.3951602 64.4244828,52.7100463 70.1884353,56.9943417 L90.8648751,36.3179019 L92.4795866,31.5515482 L100.319802,26.8629752 L103.471444,30.0146174 L98.782871,37.8548326 L94.0165173,39.4695441 L73.7934912,59.6925702 C86.4558549,69.2403631 102.104532,81.8392557 102.104532,86.4016913 C102.104533,93.6189834 99.0337832,97.9277545 92.5695848,95.5655717 C87.8765989,93.8506351 73.8015497,80.3744087 63.8173444,69.668717 L60.9242741,72.5617873 L57.7726319,69.4101451 L60.8017407,66.3810363 L60.8017407,66.3810363 Z M63.9533761,1.42108547e-13 L118.512977,32 L118.512977,96 L63.9533761,128 L9.39377563,96 L9.39377563,32 L63.9533761,1.42108547e-13 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/refresh-button": {
            "title": "$:/core/images/refresh-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-refresh-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M106.369002,39.4325143 C116.529932,60.3119371 112.939592,86.1974934 95.5979797,103.539105 C73.7286194,125.408466 38.2713806,125.408466 16.4020203,103.539105 C-5.46734008,81.6697449 -5.46734008,46.2125061 16.4020203,24.3431458 C19.5262146,21.2189514 24.5915344,21.2189514 27.7157288,24.3431458 C30.8399231,27.4673401 30.8399231,32.5326599 27.7157288,35.6568542 C12.0947571,51.2778259 12.0947571,76.6044251 27.7157288,92.2253967 C43.3367004,107.846368 68.6632996,107.846368 84.2842712,92.2253967 C97.71993,78.7897379 99.5995262,58.1740623 89.9230597,42.729491 L83.4844861,54.9932839 C81.4307001,58.9052072 76.5945372,60.4115251 72.682614,58.3577391 C68.7706907,56.3039532 67.2643728,51.4677903 69.3181587,47.555867 L84.4354914,18.7613158 C86.4966389,14.8353707 91.3577499,13.3347805 95.273202,15.415792 L124.145886,30.7612457 C128.047354,32.8348248 129.52915,37.6785572 127.455571,41.5800249 C125.381992,45.4814927 120.53826,46.9632892 116.636792,44.8897102 L106.369002,39.4325143 Z M98.1470904,27.0648707 C97.9798954,26.8741582 97.811187,26.6843098 97.6409651,26.4953413 L98.6018187,26.1987327 L98.1470904,27.0648707 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/right-arrow": {
            "title": "$:/core/images/right-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-right-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M80.3563798,109.353315 C78.9238993,110.786918 76.9450203,111.675144 74.7592239,111.675144 L-4.40893546,111.675144 C-8.77412698,111.675144 -12.3248558,108.130732 -12.3248558,103.758478 C-12.3248558,99.3951199 -8.78077754,95.8418109 -4.40893546,95.8418109 L66.8418109,95.8418109 L66.8418109,24.5910645 C66.8418109,20.225873 70.3862233,16.6751442 74.7584775,16.6751442 C79.1218352,16.6751442 82.6751442,20.2192225 82.6751442,24.5910645 L82.6751442,103.759224 C82.6751442,105.941695 81.7891419,107.920575 80.3566508,109.353886 Z\" transform=\"translate(35.175144, 64.175144) rotate(-45.000000) translate(-35.175144, -64.175144) \"></path>\n</svg>"
        },
        "$:/core/images/save-button": {
            "title": "$:/core/images/save-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-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>"
        },
        "$:/core/images/star-filled": {
            "title": "$:/core/images/star-filled",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-star-filled tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M61.8361286,96.8228569 L99.1627704,124.110219 C101.883827,126.099427 105.541968,123.420868 104.505636,120.198072 L90.2895569,75.9887263 L89.0292911,79.8977279 L126.314504,52.5528988 C129.032541,50.5595011 127.635256,46.2255025 124.273711,46.2229134 L78.1610486,46.1873965 L81.4604673,48.6032923 L67.1773543,4.41589688 C66.1361365,1.19470104 61.6144265,1.19470104 60.5732087,4.41589688 L46.2900957,48.6032923 L49.5895144,46.1873965 L3.47685231,46.2229134 C0.115307373,46.2255025 -1.28197785,50.5595011 1.43605908,52.5528988 L38.7212719,79.8977279 L37.4610061,75.9887263 L23.2449266,120.198072 C22.2085954,123.420868 25.8667356,126.099427 28.5877926,124.110219 L65.9144344,96.8228569 L61.8361286,96.8228569 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-classic": {
            "title": "$:/core/images/storyview-classic",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-classic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-pop": {
            "title": "$:/core/images/storyview-pop",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-pop tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M16.0098166,56 C11.586117,56 8,59.5776607 8,63.9924054 L8,80.0075946 C8,84.4216782 11.5838751,88 16.0098166,88 L111.990183,88 C116.413883,88 120,84.4223393 120,80.0075946 L120,63.9924054 C120,59.5783218 116.416125,56 111.990183,56 L16.0098166,56 L16.0098166,56 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-zoomin": {
            "title": "$:/core/images/storyview-zoomin",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-zoomin tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.578055 16,24.0085154 L16,71.9914846 C16,76.4144655 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.421945 112,71.9914846 L112,24.0085154 C112,19.5855345 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/tag-button": {
            "title": "$:/core/images/tag-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tag-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M18.1643182,47.6600756 L18.1677196,51.7651887 C18.1708869,55.5878829 20.3581578,60.8623899 23.0531352,63.5573673 L84.9021823,125.406414 C87.5996731,128.103905 91.971139,128.096834 94.6717387,125.396234 L125.766905,94.3010679 C128.473612,91.5943612 128.472063,87.2264889 125.777085,84.5315115 L63.9280381,22.6824644 C61.2305472,19.9849735 55.9517395,17.801995 52.1318769,17.8010313 L25.0560441,17.7942007 C21.2311475,17.7932358 18.1421354,20.8872832 18.1452985,24.7049463 L18.1535504,34.6641936 C18.2481119,34.6754562 18.3439134,34.6864294 18.4409623,34.6971263 C22.1702157,35.1081705 26.9295004,34.6530132 31.806204,33.5444844 C32.1342781,33.0700515 32.5094815,32.6184036 32.9318197,32.1960654 C35.6385117,29.4893734 39.5490441,28.718649 42.94592,29.8824694 C43.0432142,29.8394357 43.1402334,29.7961748 43.2369683,29.7526887 L43.3646982,30.0368244 C44.566601,30.5115916 45.6933052,31.2351533 46.6655958,32.2074439 C50.4612154,36.0030635 50.4663097,42.1518845 46.6769742,45.94122 C43.0594074,49.5587868 37.2914155,49.7181264 33.4734256,46.422636 C28.1082519,47.5454734 22.7987486,48.0186448 18.1643182,47.6600756 Z\"></path>\n        <path d=\"M47.6333528,39.5324628 L47.6562932,39.5834939 C37.9670934,43.9391617 26.0718874,46.3819521 17.260095,45.4107025 C5.27267473,44.0894301 -1.02778744,36.4307276 2.44271359,24.0779512 C5.56175386,12.9761516 14.3014034,4.36129832 24.0466405,1.54817001 C34.7269254,-1.53487574 43.7955833,3.51606438 43.7955834,14.7730751 L35.1728168,14.7730752 C35.1728167,9.91428944 32.0946059,8.19982862 26.4381034,9.83267419 C19.5270911,11.8276553 13.046247,18.2159574 10.7440788,26.4102121 C8.82861123,33.2280582 11.161186,36.0634845 18.2047888,36.8398415 C25.3302805,37.6252244 35.7353482,35.4884477 44.1208333,31.7188498 L44.1475077,31.7781871 C44.159701,31.7725635 44.1718402,31.7671479 44.1839238,31.7619434 C45.9448098,31.0035157 50.4503245,38.3109156 47.7081571,39.5012767 C47.6834429,39.512005 47.6585061,39.5223987 47.6333528,39.5324628 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/theme-button": {
            "title": "$:/core/images/theme-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-theme-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M55.854113,66.9453198 C54.3299482,65.1432292 53.0133883,63.518995 51.9542746,62.1263761 C40.8899947,47.578055 35.3091807,55.2383404 28.9941893,62.1263758 C22.6791979,69.0144112 30.6577916,74.5954741 24.6646171,79.4611023 C18.6714426,84.3267304 19.0414417,86.0133155 8.92654943,77.1119468 C-1.18834284,68.2105781 -1.88793412,65.7597832 2.7553553,60.6807286 C7.39864472,55.601674 11.2794845,63.5989423 20.7646627,54.5728325 C30.2498409,45.5467226 22.2819131,37.5470737 22.2819131,37.5470737 C22.2819131,37.5470737 42.0310399,-2.82433362 68.4206088,0.157393922 C94.8101776,3.13912147 58.4373806,-3.70356506 49.3898693,27.958066 C45.5161782,41.5139906 50.1107906,38.3197672 57.4560458,44.0453955 C59.1625767,45.3756367 63.8839488,48.777453 70.127165,53.3625321 C63.9980513,59.2416709 58.9704753,64.0315459 55.854113,66.9453198 Z M67.4952439,79.8919946 C83.5082212,96.9282402 105.237121,117.617674 112.611591,120.312493 C123.044132,124.12481 128.000001,117.170903 128,105.522947 C127.999999,98.3705516 104.170675,78.980486 84.0760493,63.7529565 C76.6683337,70.9090328 70.7000957,76.7055226 67.4952439,79.8919946 Z\"></path>\n        <path d=\"M58.2852966,138.232794 L58.2852966,88.3943645 C56.318874,88.3923153 54.7254089,86.7952906 54.7254089,84.8344788 C54.7254089,82.8684071 56.3175932,81.2745911 58.2890859,81.2745911 L79.6408336,81.2745911 C81.608998,81.2745911 83.2045105,82.8724076 83.2045105,84.8344788 C83.2045105,86.7992907 81.614366,88.3923238 79.6446228,88.3943645 L79.6446228,88.3943646 L79.6446228,138.232794 C79.6446228,144.131009 74.8631748,148.912457 68.9649597,148.912457 C63.0667446,148.912457 58.2852966,144.131009 58.2852966,138.232794 Z M65.405072,-14.8423767 L72.5248474,-14.8423767 L76.0847351,-0.690681892 L72.5248474,6.51694947 L72.5248474,81.2745911 L65.405072,81.2745911 L65.405072,6.51694947 L61.8451843,-0.690681892 L65.405072,-14.8423767 Z\" transform=\"translate(68.964960, 67.035040) rotate(45.000000) translate(-68.964960, -67.035040) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/tip": {
            "title": "$:/core/images/tip",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tip tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128.241818 C99.346224,128.241818 128,99.5880417 128,64.2418177 C128,28.8955937 99.346224,0.241817675 64,0.241817675 C28.653776,0.241817675 0,28.8955937 0,64.2418177 C0,99.5880417 28.653776,128.241818 64,128.241818 Z M75.9358659,91.4531941 C75.3115438,95.581915 70.2059206,98.8016748 64,98.8016748 C57.7940794,98.8016748 52.6884562,95.581915 52.0641341,91.4531941 C54.3299053,94.0502127 58.8248941,95.8192805 64,95.8192805 C69.1751059,95.8192805 73.6700947,94.0502127 75.9358659,91.4531941 L75.9358659,91.4531941 Z M75.9358659,95.9453413 C75.3115438,100.074062 70.2059206,103.293822 64,103.293822 C57.7940794,103.293822 52.6884562,100.074062 52.0641341,95.9453413 C54.3299053,98.5423599 58.8248941,100.311428 64,100.311428 C69.1751059,100.311428 73.6700947,98.5423599 75.9358659,95.9453413 L75.9358659,95.9453413 Z M75.9358659,100.40119 C75.3115438,104.529911 70.2059206,107.74967 64,107.74967 C57.7940794,107.74967 52.6884562,104.529911 52.0641341,100.40119 C54.3299053,102.998208 58.8248941,104.767276 64,104.767276 C69.1751059,104.767276 73.6700947,102.998208 75.9358659,100.40119 L75.9358659,100.40119 Z M75.9358659,104.893337 C75.3115438,109.022058 70.2059206,112.241818 64,112.241818 C57.7940794,112.241818 52.6884562,109.022058 52.0641341,104.893337 C54.3299053,107.490356 58.8248941,109.259423 64,109.259423 C69.1751059,109.259423 73.6700947,107.490356 75.9358659,104.893337 L75.9358659,104.893337 Z M64.3010456,24.2418177 C75.9193117,24.2418188 88.0000013,32.0619847 88,48.4419659 C87.9999987,64.8219472 75.9193018,71.7540963 75.9193021,83.5755932 C75.9193022,89.4486648 70.0521957,92.8368862 63.9999994,92.8368862 C57.947803,92.8368862 51.9731007,89.8295115 51.9731007,83.5755932 C51.9731007,71.1469799 39.9999998,65.4700602 40,48.4419647 C40.0000002,31.4138691 52.6827796,24.2418166 64.3010456,24.2418177 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/twitter": {
            "title": "$:/core/images/twitter",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-twitter tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M41.6263422,115.803477 C27.0279663,115.803477 13.4398394,111.540813 1.99987456,104.234833 C4.02221627,104.472643 6.08004574,104.594302 8.16644978,104.594302 C20.277456,104.594302 31.4238403,100.47763 40.270894,93.5715185 C28.9590538,93.3635501 19.4123842,85.9189246 16.1230832,75.6885328 C17.7011365,75.9892376 19.320669,76.1503787 20.9862896,76.1503787 C23.344152,76.1503787 25.6278127,75.8359011 27.7971751,75.247346 C15.9709927,72.8821073 7.06079851,62.4745062 7.06079851,49.9982394 C7.06079851,49.8898938 7.06079851,49.7820074 7.06264203,49.67458 C10.5482779,51.6032228 14.5339687,52.7615103 18.7717609,52.8951059 C11.8355159,48.277565 7.2714207,40.3958845 7.2714207,31.4624258 C7.2714207,26.7434257 8.54621495,22.3200804 10.7713439,18.5169676 C23.5211299,34.0957738 42.568842,44.3472839 64.0532269,45.4210985 C63.6126256,43.5365285 63.3835682,41.5711584 63.3835682,39.5529928 C63.3835682,25.3326379 74.95811,13.8034766 89.2347917,13.8034766 C96.6697089,13.8034766 103.387958,16.930807 108.103682,21.9353619 C113.991886,20.780288 119.52429,18.6372496 124.518847,15.6866694 C122.588682,21.6993889 118.490075,26.7457211 113.152623,29.9327334 C118.381769,29.3102055 123.363882,27.926045 127.999875,25.8780385 C124.534056,31.0418981 120.151087,35.5772616 115.100763,39.2077561 C115.150538,40.3118708 115.175426,41.4224128 115.175426,42.538923 C115.175426,76.5663154 89.1744164,115.803477 41.6263422,115.803477\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/unlocked-padlock": {
            "title": "$:/core/images/unlocked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unlocked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M48.6266053,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L30.136303,64 C19.6806213,51.3490406 2.77158986,28.2115132 25.8366966,8.85759246 C50.4723026,-11.8141335 71.6711028,13.2108337 81.613302,25.0594855 C91.5555012,36.9081373 78.9368488,47.4964439 69.1559674,34.9513593 C59.375086,22.4062748 47.9893192,10.8049522 35.9485154,20.9083862 C23.9077117,31.0118202 34.192312,43.2685325 44.7624679,55.8655518 C47.229397,58.805523 48.403443,61.5979188 48.6266053,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/up-arrow": {
            "created": "20150316000544368",
            "modified": "20150316000831867",
            "tags": "$:/tags/Image",
            "title": "$:/core/images/up-arrow",
            "text": "<svg class=\"tc-image-up-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n<path transform=\"rotate(-135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25074c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056l0.00001,-0.00001z\" />\n</svg>\n \n"
        },
        "$:/core/images/video": {
            "title": "$:/core/images/video",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-video tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,12 C29.0909091,12 8.72727273,14.9166667 5.81818182,17.8333333 C2.90909091,20.75 1.93784382e-15,41.1666667 0,64.5 C1.93784382e-15,87.8333333 2.90909091,108.25 5.81818182,111.166667 C8.72727273,114.083333 29.0909091,117 64,117 C98.9090909,117 119.272727,114.083333 122.181818,111.166667 C125.090909,108.25 128,87.8333333 128,64.5 C128,41.1666667 125.090909,20.75 122.181818,17.8333333 C119.272727,14.9166667 98.9090909,12 64,12 Z M54.9161194,44.6182253 C51.102648,42.0759111 48.0112186,43.7391738 48.0112186,48.3159447 L48.0112186,79.6840553 C48.0112186,84.2685636 51.109784,85.9193316 54.9161194,83.3817747 L77.0838806,68.6032672 C80.897352,66.0609529 80.890216,61.9342897 77.0838806,59.3967328 L54.9161194,44.6182253 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/warning": {
            "title": "$:/core/images/warning",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-warning tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M57.0717968,11 C60.1509982,5.66666667 67.8490018,5.66666667 70.9282032,11 L126.353829,107 C129.433031,112.333333 125.584029,119 119.425626,119 L8.57437416,119 C2.41597129,119 -1.43303051,112.333333 1.64617093,107 L57.0717968,11 Z M64,37 C59.581722,37 56,40.5820489 56,44.9935776 L56,73.0064224 C56,77.4211534 59.5907123,81 64,81 C68.418278,81 72,77.4179511 72,73.0064224 L72,44.9935776 C72,40.5788466 68.4092877,37 64,37 Z M64,104 C68.418278,104 72,100.418278 72,96 C72,91.581722 68.418278,88 64,88 C59.581722,88 56,91.581722 56,96 C56,100.418278 59.581722,104 64,104 Z\"></path>\n    </g>\n</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/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/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 files"
        },
        "$:/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/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/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/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/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "theme"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Choose the display theme"
        },
        "$:/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/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Basics"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Use &#91;&#91;double square brackets&#93;&#93; 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/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Tags for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Number of overridden shadow tiddlers:"
        },
        "$:/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/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/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/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Install plugins from the official library"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Get more plugins"
        },
        "$:/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/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/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/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/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/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/Heading": {
            "title": "$:/language/ControlPanel/Saving/Heading",
            "text": "Saving"
        },
        "$:/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/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Backups"
        },
        "$:/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/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": "Automatically save changes during editing"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Settings"
        },
        "$:/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/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/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/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Story View"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Current view:"
        },
        "$:/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"
        },
        "$:/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  "
        },
        "$:/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"
        },
        "$:/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/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Animations that may be used with the RevealWidget."
        },
        "$:/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/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Operands for the ''is'' filter operator."
        },
        "$:/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/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/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/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/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 is an external tiddler stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
        },
        "$:/language/EditTemplate/Body/Hint": {
            "title": "$:/language/EditTemplate/Body/Hint",
            "text": "Use [[wiki text|http://tiddlywiki.com/static/WikiText.html]] to add formatting, images, and dynamic features"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Type the text for this tiddler"
        },
        "$:/language/EditTemplate/Body/Preview/Button/Hide": {
            "title": "$:/language/EditTemplate/Body/Preview/Button/Hide",
            "text": "hide preview"
        },
        "$:/language/EditTemplate/Body/Preview/Button/Show": {
            "title": "$:/language/EditTemplate/Body/Preview/Button/Show",
            "text": "show preview"
        },
        "$:/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/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "add"
        },
        "$:/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 will override the default version"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "This is a modified shadow tiddler. You can revert to the default version by deleting this tiddler"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "tag name"
        },
        "$:/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/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/hack-to-give-us-something-to-compare-against": {
            "title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
            "text": "A temporary storage field used in [[$:/core/templates/static.content]]"
        },
        "$:/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": "If set to \"yes\" indicates that a tiddler should be saved as a JavaScript library"
        },
        "$:/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"
        },
        "$:/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/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "The unique name of a tiddler"
        },
        "$:/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/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/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "System tags"
        },
        "$:/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 important to make sure that you can reliably save changes. See http://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-text 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/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/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/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/load": {
            "title": "$:/language/Help/load",
            "description": "Load tiddlers from a file",
            "text": "Load tiddlers from 2.x.x TiddlyWiki files (`.html`), `.tiddler`, `.tid`, `.json` or other files \n\n```\n--load <filepath>\n```\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"
        },
        "$:/language/Help/rendertiddler": {
            "title": "$:/language/Help/rendertiddler",
            "description": "Render an individual tiddler as a specified ContentType",
            "text": "Render an individual tiddler as a specified ContentType, defaults to `text/html` and save it to the specified filename:\n\n```\n--rendertiddler <title> <filename> [<type>]\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/rendertiddlers": {
            "title": "$:/language/Help/rendertiddlers",
            "description": "Render tiddlers matching a filter to a specified ContentType",
            "text": "Render 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\" parameter is specified. The target directory is recursively created if it is missing.\n"
        },
        "$:/language/Help/savetiddler": {
            "title": "$:/language/Help/savetiddler",
            "description": "Saves a raw tiddler to a file",
            "text": "Saves 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": "Saves a group of tiddlers in their raw text or binary format to the specified directory. \n\n```\n--savetiddlers <filter> <pathname>\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 missing directories in the pathname are automatically created.\n"
        },
        "$:/language/Help/server": {
            "title": "$:/language/Help/server",
            "description": "Provides an HTTP server interface to TiddlyWiki",
            "text": "The server built in to TiddlyWiki5 is very simple. Although compatible with TiddlyWeb it doesn't support many of the features needed for robust Internet-facing usage.\n\nAt the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.\n\n```\n--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>\n```\n\nThe parameters are:\n\n* ''port'' - port number to serve from (defaults to \"8080\")\n* ''roottiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\") \n* ''rendertype'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''servetype'' - 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* ''pathprefix'' - optional prefix for paths\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 isn't suitable for general use.\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--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.\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* ''type'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n\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/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/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>>  being older 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/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Migrated theme tweak from <$text text=<<from>>/>"
        },
        "$:/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 http://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/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/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "New Tiddler"
        },
        "$:/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/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/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" - click {{$:/core/images/edit-button}} to create"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Official ~TiddlyWiki Plugin Library"
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to plugins to take effect"
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DDth MMM YYYY"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "This is a system tiddler"
        },
        "$:/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/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Info"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Tag"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "You have unsaved changes in TiddlyWiki"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Download changes",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://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",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Save your work",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://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/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "text": "Journal"
        },
        "$:/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/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|http://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/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/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/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": "References"
        },
        "$:/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"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON data",
            "name": "application/json",
            "group": "Developer"
        },
        "$:/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"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF image",
            "name": "image/gif",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG image",
            "name": "image/jpeg",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG image",
            "name": "image/png",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "Structured Vector Graphics image",
            "name": "image/svg+xml",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO format icon file",
            "name": "image/x-icon",
            "group": "Image"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Developer"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML markup",
            "name": "text/html",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Plain text",
            "name": "text/plain",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki Classic",
            "name": "text/x-tiddlywiki",
            "group": "Text"
        },
        "$:/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": {
            "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/*\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\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\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",
            "title": "$:/core/modules/commander.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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",
            "title": "$:/core/modules/commands/build.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/clearpassword.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/editions.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/help.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/init.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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\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 ext = path.extname(self.params[0]);\n\tfs.readFile(this.params[0],$tw.utils.getTypeEncoding(ext),function(err,data) {\n\t\tif (err) {\n\t\t\tself.callback(err);\n\t\t} else {\n\t\t\tvar fields = {title: self.params[0]},\n\t\t\t\ttype = path.extname(self.params[0]);\n\t\t\tvar tiddlers = self.commander.wiki.deserializeTiddlers(type,data,fields);\n\t\t\tif(!tiddlers) {\n\t\t\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t\t\t} else {\n\t\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddlers[t]));\n\t\t\t\t}\n\t\t\t\tself.callback(null);\t\n\t\t\t}\n\t\t}\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/load.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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 = fs.readdirSync(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 = fs.readdirSync(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\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));\n\tcollectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));\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},null,$tw.config.preferences.jsonSpaces)\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/makelibrary.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/output.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/password.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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$tw.utils.createFileDirectories(filename);\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/rendertiddler.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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] || \"\") != \"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",
            "title": "$:/core/modules/commands/rendertiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\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.getTiddlerData(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,null,$tw.config.preferences.jsonSpaces),\"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\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,{text: undefined, readme: readmeContent, icon: iconContent}));\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",
            "title": "$:/core/modules/commands/savelibrarytiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t$tw.utils.createFileDirectories(filename);\n\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/savetiddler.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.deleteDirectory(pathname);\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",
            "title": "$:/core/modules/commands/savetiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/server.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\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.browser) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\thttp = require(\"http\");\n}\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\n/*\nA simple HTTP server with regexp-based routes\n*/\nfunction SimpleServer(options) {\n\tthis.routes = options.routes || [];\n\tthis.wiki = options.wiki;\n\tthis.variables = options.variables || {};\n}\n\nSimpleServer.prototype.set = function(obj) {\n\tvar self = this;\n\t$tw.utils.each(obj,function(value,name) {\n\t\tself.variables[name] = value;\n\t});\n};\n\nSimpleServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nSimpleServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nSimpleServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"pathprefix\") || \"\";\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(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(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\nSimpleServer.prototype.checkCredentials = function(request,incomingUsername,incomingPassword) {\n\tvar header = request.headers.authorization || \"\",\n\t\ttoken = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tusername = parts[0],\n\t\tpassword = parts[1];\n\tif(incomingUsername === username && incomingPassword === password) {\n\t\treturn \"ALLOWED\";\n\t} else {\n\t\treturn \"DENIED\";\n\t}\n};\n\nSimpleServer.prototype.listen = function(port,host) {\n\tvar self = this;\n\thttp.createServer(function(request,response) {\n\t\t// Compose the state object\n\t\tvar state = {};\n\t\tstate.wiki = self.wiki;\n\t\tstate.server = self;\n\t\tstate.urlInfo = url.parse(request.url);\n\t\t// Find the route that matches this path\n\t\tvar route = self.findMatchingRoute(request,state);\n\t\t// Check for the username and password if we've got one\n\t\tvar username = self.get(\"username\"),\n\t\t\tpassword = self.get(\"password\");\n\t\tif(username && password) {\n\t\t\t// Check they match\n\t\t\tif(self.checkCredentials(request,username,password) !== \"ALLOWED\") {\n\t\t\t\tvar servername = state.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\";\n\t\t\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + servername + '\"'\n\t\t\t\t});\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// Return a 404 if we didn't find a route\n\t\tif(!route) {\n\t\t\tresponse.writeHead(404);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t\t// Set the encoding for the incoming request\n\t\t// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers\n\t\trequest.setEncoding(\"utf8\");\n\t\t// Dispatch the appropriate method\n\t\tswitch(request.method) {\n\t\t\tcase \"GET\": // Intentional fall-through\n\t\t\tcase \"DELETE\":\n\t\t\t\troute.handler(request,response,state);\n\t\t\t\tbreak;\n\t\t\tcase \"PUT\":\n\t\t\t\tvar data = \"\";\n\t\t\t\trequest.on(\"data\",function(chunk) {\n\t\t\t\t\tdata += chunk.toString();\n\t\t\t\t});\n\t\t\t\trequest.on(\"end\",function() {\n\t\t\t\t\tstate.data = data;\n\t\t\t\t\troute.handler(request,response,state);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}).listen(port,host);\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n\t// Set up server\n\tthis.server = new SimpleServer({\n\t\twiki: this.commander.wiki\n\t});\n\t// Add route handlers\n\tthis.server.addRoute({\n\t\tmethod: \"PUT\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\tfields = JSON.parse(state.data);\n\t\t\t// Pull up any subfields in the `fields` object\n\t\t\tif(fields.fields) {\n\t\t\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\t\t\tfields[name] = field;\n\t\t\t\t});\n\t\t\t\tdelete fields.fields;\n\t\t\t}\n\t\t\t// Remove any revision field\n\t\t\tif(fields.revision) {\n\t\t\t\tdelete fields.revision;\n\t\t\t}\n\t\t\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title}));\n\t\t\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\t\t\tresponse.writeHead(204, \"OK\",{\n\t\t\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"DELETE\",\n\t\tpath: /^\\/bags\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]);\n\t\t\tstate.wiki.deleteTiddler(title);\n\t\t\tresponse.writeHead(204, \"OK\", {\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": state.server.get(\"serveType\")});\n\t\t\tvar text = state.wiki.renderTiddler(state.server.get(\"renderType\"),state.server.get(\"rootTiddler\"));\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/status$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar text = JSON.stringify({\n\t\t\t\tusername: state.server.get(\"username\"),\n\t\t\t\tspace: {\n\t\t\t\t\trecipe: \"default\"\n\t\t\t\t},\n\t\t\t\ttiddlywiki_version: $tw.version\n\t\t\t});\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/favicon.ico$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\t\t\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\t\t\tresponse.end(buffer,\"base64\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers.json$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar tiddlers = [];\n\t\t\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\t\t\tvar tiddlerFields = {};\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tif(name !== \"text\") {\n\t\t\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\ttiddlers.push(tiddlerFields);\n\t\t\t});\n\t\t\tvar text = JSON.stringify(tiddlers);\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\ttiddler = state.wiki.getTiddler(title),\n\t\t\t\ttiddlerFields = {},\n\t\t\t\tknownFields = [\n\t\t\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t\t\t];\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\t\t\ttiddlerFields[name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t\t\t} else {\n\t\t\t\tresponse.writeHead(404);\n\t\t\t\tresponse.end();\n\t\t\t}\n\t\t}\n\t});\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\tvar port = this.params[0] || \"8080\",\n\t\trootTiddler = this.params[1] || \"$:/core/save/all\",\n\t\trenderType = this.params[2] || \"text/plain\",\n\t\tserveType = this.params[3] || \"text/html\",\n\t\tusername = this.params[4],\n\t\tpassword = this.params[5],\n\t\thost = this.params[6] || \"127.0.0.1\",\n\t\tpathprefix = this.params[7];\n\tthis.server.set({\n\t\trootTiddler: rootTiddler,\n\t\trenderType: renderType,\n\t\tserveType: serveType,\n\t\tusername: username,\n\t\tpassword: password,\n\t\tpathprefix: pathprefix\n\t});\n\tthis.server.listen(port,host);\n\tconsole.log(\"Serving on \" + host + \":\" + port);\n\tconsole.log(\"(press ctrl-C to exit)\");\n\t// Warn if required plugins are missing\n\tif($tw.boot.wikiInfo.plugins.indexOf(\"tiddlywiki/tiddlyweb\") === -1 || $tw.boot.wikiInfo.plugins.indexOf(\"tiddlywiki/filesystem\") === -1) {\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\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/server.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/setfield.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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.getTiddlerData(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",
            "title": "$:/core/modules/commands/unpackplugin.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/verbose.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/commands/version.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/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",
            "title": "$:/core/modules/config.js",
            "type": "application/javascript",
            "module-type": "config"
        },
        "$:/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 = JSON.parse(text),\n\t\tresults = [];\n\tif($tw.utils.isArray(incoming)) {\n\t\tfor(var t=0; t<incoming.length; t++) {\n\t\t\tvar incomingFields = incoming[t],\n\t\t\t\tfields = {};\n\t\t\tfor(var f in incomingFields) {\n\t\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t\t}\n\t\t\t}\n\t\t\tresults.push(fields);\n\t\t}\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",
            "title": "$:/core/modules/deserializers.js",
            "type": "application/javascript",
            "module-type": "tiddlerdeserializer"
        },
        "$:/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",
            "title": "$:/core/modules/filters/addprefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/addsuffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/after.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/all/current.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/all/missing.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/all/orphans.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/all/shadows.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/all/tiddlers.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/all.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/backlinks.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/before.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/commands.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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\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\t\tvalues = {};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value;\n\t\t\tif((operator.operand === \"\") || (operator.operand === \"title\")) {\n\t\t\t\tvalue = title;\n\t\t\t} else {\n\t\t\t\tvalue = tiddler.getFieldString(operator.operand);\n\t\t\t}\n\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\tvalues[value] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/each.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/eachday.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/editiondescription.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/editions.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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 = [],\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\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",
            "title": "$:/core/modules/filters/field.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.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",
            "title": "$:/core/modules/filters/fields.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/get.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/getindex.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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\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\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand) || tiddler.fields[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(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && tiddler.fields[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",
            "title": "$:/core/modules/filters/has.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/haschanged.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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.getTiddlerData(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",
            "title": "$:/core/modules/filters/indexes.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/current.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/image.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/missing.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/orphan.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/shadow.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/system.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/tag.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/is/tiddler.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/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\tvar isFilterOperator = isFilterOperators[operator.operand];\n\tif(isFilterOperator) {\n\t\treturn isFilterOperator(source,operator.prefix,options);\n\t} else {\n\t\treturn [\"Filter Error: Unknown operand for the 'is' filter operator\"];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/limit.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/links.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/list.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/listed.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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/*\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 = parseInt(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 = parseInt(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 = parseInt(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 = parseInt(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 = parseInt(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",
            "title": "$:/core/modules/filters/listops.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/modules.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/moduletypes.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/next.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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.getTiddlerData(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",
            "title": "$:/core/modules/filters/plugintiddlers.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/prefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/previous.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/regexp.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/removeprefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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.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",
            "title": "$:/core/modules/filters/removesuffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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\tvar isSameDay = function(dateField) {\n\t\t\treturn (new Date(dateField)).setHours(0,0,0,0) === targetDate;\n\t\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tif(isSameDay($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/sameday.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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.suffix) {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: operator.suffix\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",
            "title": "$:/core/modules/filters/search.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/shadowsource.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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.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",
            "title": "$:/core/modules/filters/sort.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/splitbefore.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/storyviews.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/suffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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 = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && !tiddler.hasTag(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(tiddler && tiddler.hasTag(operator.operand)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tag.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/tagging.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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 results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\t$tw.utils.pushTop(results,tiddler.fields.tags);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tags.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/title.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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",
            "title": "$:/core/modules/filters/untagged.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/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 operator, operand, bracketPos, curlyBracketPos;\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\tvar nextBracketPos = 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\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\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\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\t\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 = /((?:\\+|\\-)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\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 \"Syntax error in filter expression\";\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++;\n\t\t\t}\n\t\t\tif(match[2]) { // 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[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\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.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 [\"Filter error: \" + 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 operand = operator.operand,\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\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\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: operand,\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\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\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\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 function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\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\",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 = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
            "title": "$:/core/modules/filters.js",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/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() {\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\treturn infoTiddlerFields;\n};\n\n})();\n",
            "title": "$:/core/modules/info/platform.js",
            "type": "application/javascript",
            "module-type": "info"
        },
        "$:/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 single 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\nexports.Language = Language;\n\n})();\n",
            "title": "$:/core/modules/language.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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",
            "title": "$:/core/modules/macros/changecount.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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",
            "title": "$:/core/modules/macros/contrastcolour.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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",
            "title": "$:/core/modules/macros/csvtiddlers.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/dumpvariables.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/dumpvariables.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to dump all active variable values\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 = \"dumpvariables\";\n\nexports.params = [\n];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\tvar output = [\"|!Variable |!Value |\"],\n\t\tvariables = [], variable;\n\tfor(variable in this.variables) {\n\t\tvariables.push(variable);\n\t}\n\tvariables.sort();\n\tfor(var index=0; index<variables.length; index++) {\n\t\tvar variable = variables[index];\n\t\toutput.push(\"|\" + variable + \" |<input size=50 value=<<\" + variable + \">>/> |\")\n\t}\n\treturn output.join(\"\\n\");\n};\n\n})();\n",
            "title": "$:/core/modules/macros/dumpvariables.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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];\n\n/*\nRun the macro\n*/\nexports.run = function(filter) {\n\tvar tiddlers = this.wiki.filterTiddlers(filter),\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.wiki.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,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/jsontiddlers.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/makedatauri.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert the content of a tiddler 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];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\treturn $tw.utils.makeDataUri(text,type);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/makedatauri.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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",
            "title": "$:/core/modules/macros/now.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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",
            "title": "$:/core/modules/macros/qualify.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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",
            "title": "$:/core/modules/macros/resolvepath.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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",
            "title": "$:/core/modules/macros/version.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/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}\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",
            "title": "$:/core/modules/parsers/audioparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/csvparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/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: \"sandbox\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/htmlparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/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\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.tag = \"embed\";\n\t\t}\n\t} else if(text) {\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t\t\telement.tag = \"embed\";\n\t\t} else if(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[\"application/pdf\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/imageparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/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 node = {\n\t\ttype: \"whitespace\",\n\t\tstart: pos\n\t};\n\tvar re = /(\\s)+/g;\n\tre.lastIndex = pos;\n\tvar match = re.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t}\n\treturn null;\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar whitespace = $tw.utils.parseWhiteSpace(source,pos);\n\tif(whitespace) {\n\t\treturn whitespace.end;\n\t}\n\treturn pos;\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\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 an indirect value\n\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\tif(indirectValue) {\n\t\t\t\tpos = indirectValue.end;\n\t\t\t\tnode.type = \"indirect\";\n\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for a unquoted value\n\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\tif(unquotedValue) {\n\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = \"true\";\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",
            "title": "$:/core/modules/utils/parseutils.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/textparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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 ? \"&ndash;\" : \"&mdash;\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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: &copy;\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",
            "title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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: http://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},\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",
            "title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\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",
            "title": "$:/core/modules/parsers/wikiparser/rules/html.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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[http://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [http://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [http://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|http://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",
            "title": "$:/core/modules/parsers/wikiparser/rules/image.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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: \"p\"}\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",
            "title": "$:/core/modules/parsers/wikiparser/rules/list.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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: \"macrodef\",\n\t\tname: this.match[1],\n\t\tparams: params,\n\t\ttext: text\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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[http://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|http://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\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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},\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",
            "title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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 = /~?\\$:\\/[a-zA-Z/.-]+/mg;\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})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/table.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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// 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",
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/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\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\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}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\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// 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 = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\tthis.tree.push.apply(this.tree,this.parseInlineRun());\n\t} else {\n\t\tthis.tree.push.apply(this.tree,this.parseBlocks());\n\t}\n\t// Return the parse tree\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 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\ttree.push.apply(tree,nextMatch.rule.parse());\n\t}\n\treturn tree;\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\ttree.push({type: \"text\", text: 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\ttree.push({type: \"text\", text: 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\ttree.push({type: \"text\", text: 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\ttree.push({type: \"text\", text: 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\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\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 keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\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(!keepFilter(ruleArray[t].rule.name)) {\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",
            "title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/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",
            "title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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\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\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// 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};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
            "title": "$:/core/modules/pluginswitcher.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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.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\tthis.numChanges = 0;\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(callback) {\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\tcallback(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\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(\"Error while saving:\\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// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\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\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
            "title": "$:/core/modules/saver-handler.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\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// Save the file\n\twindow.twi.saveFile(pathname,text);\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\"]\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",
            "title": "$:/core/modules/savers/andtidwiki.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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\tfilename = 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\tlink.setAttribute(\"target\",\"_blank\");\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\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 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",
            "title": "$:/core/modules/savers/download.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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",
            "title": "$:/core/modules/savers/fsosaver.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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",
            "title": "$:/core/modules/savers/manualdownload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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",
            "title": "$:/core/modules/savers/msdownload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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 (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/tiddlyfox.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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",
            "title": "$:/core/modules/savers/tiddlyie.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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(\"Error saving to TWEdit: \" + 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",
            "title": "$:/core/modules/savers/twedit.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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(\"Error:\" + 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",
            "title": "$:/core/modules/savers/upload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/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\t\tiframeInfo = {\n\t\t\t\turl: url,\n\t\t\t\tstatus: \"loading\",\n\t\t\t\tdomNode: iframe\n\t\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\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\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(\"Error loading plugin library: \" + 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$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(\"Error loading plugin library: \" + 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\tconsole.log(\"browser-messaging: \",document.location.toString())\n\t\tconsole.log(\"browser-messaging: Received message from\",event.origin);\n\t\tconsole.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",
            "title": "$:/core/modules/browser-messaging.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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",
            "title": "$:/core/modules/startup/commands.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/startup/favicon.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin\n\tvar fields = {\n\t\ttitle: \"$:/temp/info-plugin\",\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo();\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
            "title": "$:/core/modules/startup/info.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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.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",
            "title": "$:/core/modules/startup/load-modules.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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",
            "title": "$:/core/modules/startup/password.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar DRAFT_TIDDLER_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});\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})();\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.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\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 drafts have changed\n\t\tvar onlyDraftsHaveChanged = 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\")) {\n\t\t\t\tonlyDraftsHaveChanged = 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(onlyDraftsHaveChanged) {\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 = DRAFT_TIDDLER_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};\n\n})();\n",
            "title": "$:/core/modules/startup/render.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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});\n\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);\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\tif(document[fullscreen._fullscreenElement]) {\n\t\t\t\tdocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\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",
            "title": "$:/core/modules/startup/rootwidget.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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 = false;\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t}\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance(PERFORMANCE_INSTRUMENTATION);\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-US\"\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// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\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\tif($tw.browser) {\n\t\t$tw.rootWidget = new widget.widget({\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},{\n\t\t\twiki: $tw.wiki,\n\t\t\tdocument: document\n\t\t});\n\t}\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({wiki: $tw.wiki, dirtyTracking: !$tw.syncadaptor});\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",
            "title": "$:/core/modules/startup.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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\"\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers();\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 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]);\t\t\t\t\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: \"permalink\",\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});\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: \"permaview\",\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});\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\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 might 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// If a target tiddler was specified add it to the history stack\n\tif(target && target !== \"\") {\n\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t}\n\t\t$tw.wiki.addToHistory(target);\n\t} else if(storyList.length > 0) {\n\t\t$tw.wiki.addToHistory(storyList[0]);\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.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\tif(options.updateAddressBar !== \"no\") {\n\t\t// Get the story and the history stack\n\t\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\t\ttargetTiddler = \"\";\n\t\tif(options.targetTiddler) {\n\t\t\ttargetTiddler = options.targetTiddler;\n\t\t} else {\n\t\t\t// The target tiddler is the one at the top of the stack\n\t\t\tif(historyList.length > 0) {\n\t\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t\t}\n\t\t\t// Blank the target tiddler if it isn't present in the story\n\t\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\t\ttargetTiddler = \"\";\n\t\t\t}\n\t\t}\n\t\t// Assemble the location hash\n\t\tif(options.updateAddressBar === \"permalink\") {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t} else {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t}\n\t\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\t\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\t\tif(options.updateHistory === \"yes\") {\n\t\t\t\t// Assign the location hash so that history is updated\n\t\t\t\twindow.location.hash = $tw.locationHash;\n\t\t\t} else {\n\t\t\t\t// We use replace so that browser history isn't affected\n\t\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t\t}\n\t\t}\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/startup/story.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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)\nvar 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\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// Open the window\n\t\tvar srcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\twindows[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 = title;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete 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\",{document: $tw.fakeDocument}),\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: {currentTiddler: title}});\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\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(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
            "title": "$:/core/modules/startup/windows.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/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 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\nClassicStoryView.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// Get the current height of the tiddler\n\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Reset the margin 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{marginBottom: \"\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\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: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nClassicStoryView.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// Get the current height of the tiddler\n\tvar currWidth = targetElement.offsetWidth,\n\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Remove the dom nodes of the widget 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: \"translateX(0px)\"},\n\t\t{marginBottom:  currMarginBottom + \"px\"},\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 \" + easing + \", \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
            "title": "$:/core/modules/storyviews/classic.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/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},duration);\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.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",
            "title": "$:/core/modules/storyviews/pop.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/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.getTiddlerData(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",
            "title": "$:/core/modules/storyviews/zoomin.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/syncer.js": {
            "text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved 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 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\tthis.syncadaptor = options.syncadaptor;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\"));\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\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Browser event handlers\n\tif($tw.browser) {\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() {\n\t\t\tself.handleLoginEvent();\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}\n\t// Listen out for lazyLoad events\n\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\tself.handleLazyLoadEvent(title);\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/*\nConstants\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\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.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\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\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields.revision,\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\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\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\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) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\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(this.wiki.getTiddler(tiddlerFields.title),tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\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) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t} else {\n\t\t\t\tself.wiki.deleteTiddler(self.titleUserName);\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\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger the next sync\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\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(\"Error retrieving skinny tiddler list:\",err);\n\t\t\t\treturn;\n\t\t\t}\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.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// 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// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = Date.now(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Queue up a sync task to load this tiddler\n\tthis.enqueueSyncTask({\n\t\ttype: \"load\",\n\t\ttitle: title\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(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: \"Login to TiddlySpace\",\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\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(null,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/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = Date.now();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tif(!$tw.utils.hop(this.tiddlerInfo,task.title)) {\n\t\tthis.tiddlerInfo[task.title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1\n\t\t};\n\t}\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t\tthis.updateDirtyStatus();\n\t}\n\t// Process the queue\n\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\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},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif(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(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = Date.now();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t},{\n\t\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.log(\" Not Dispatching 'save' task:\",task.title,\"tiddler does not exist\");\n\t\t\treturn callback(null);\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tdelete self.tiddlerInfo[task.title];\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
            "title": "$:/core/modules/syncer.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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 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\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.push(field + \": \" + this.getFieldString(field));\n\t\t\t}\n\t\t}\n\t}\n\treturn fields.join(\"\\n\");\n};\n\n/*\nCompare two tiddlers for equality\ntiddler: the tiddler to compare\nexcludeFields: array of field names to exclude from the comparison\n*/\nexports.isEqual = function(tiddler,excludeFields) {\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\treturn false;\n\t}\n\texcludeFields = excludeFields || [];\n\tvar self = this,\n\t\tdifferences = []; // Fields that have differences\n\t// Add to the differences array\n\tfunction addDifference(fieldName) {\n\t\t// Check for this field being excluded\n\t\tif(excludeFields.indexOf(fieldName) === -1) {\n\t\t\t// Save the field as a difference\n\t\t\t$tw.utils.pushTop(differences,fieldName);\n\t\t}\n\t}\n\t// Returns true if the two values of this field are equal\n\tfunction isFieldValueEqual(fieldName) {\n\t\tvar valueA = self.fields[fieldName],\n\t\t\tvalueB = tiddler.fields[fieldName];\n\t\t// Check for identical string values\n\t\tif(typeof(valueA) === \"string\" && typeof(valueB) === \"string\" && valueA === valueB) {\n\t\t\treturn true;\n\t\t}\n\t\t// Check for identical array values\n\t\tif($tw.utils.isArray(valueA) && $tw.utils.isArray(valueB) && $tw.utils.isArrayEqual(valueA,valueB)) {\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise the fields must be different\n\t\treturn false;\n\t}\n\t// Compare our fields\n\tfor(var fieldName in this.fields) {\n\t\tif(!isFieldValueEqual(fieldName)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// There's a difference for every field in the other tiddler that we don't have\n\tfor(fieldName in tiddler.fields) {\n\t\tif(!(fieldName in this.fields)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// Return whether there were any differences\n\treturn differences.length === 0;\n};\n\n})();\n",
            "title": "$:/core/modules/tiddler.js",
            "type": "application/javascript",
            "module-type": "tiddlermethod"
        },
        "$:/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\"] && incomingTiddler.version) {\n\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\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\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\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",
            "title": "$:/core/modules/upgraders/plugins.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/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/\"];\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\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}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/upgraders/system.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/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.getTiddlerData(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",
            "title": "$:/core/modules/upgraders/themetweaks.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/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",
            "title": "$:/core/modules/utils/crypto.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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",
            "title": "$:/core/modules/utils/dom/animations/slide.js",
            "type": "application/javascript",
            "module-type": "animation"
        },
        "$:/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",
            "title": "$:/core/modules/utils/dom/animator.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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(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",
            "title": "$:/core/modules/utils/dom/browser.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/csscolorparser.js": {
            "text": "// (c) Dean McNamee <[email protected]>, 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",
            "title": "$:/core/modules/utils/dom/csscolorparser.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = 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 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() {\n\tif(\"scrollX\" in window) {\n\t\treturn {x: window.scrollX, y: window.scrollY};\n\t} else {\n\t\treturn {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};\n\t}\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(),\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\ttry {\n\t\tif(window.localStorage) {\n\t\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t\t}\n\t} catch(e) {\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\ttry {\n\t\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\n\t} catch(e) {\n\t\treturn \"\";\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\n})();\n",
            "title": "$:/core/modules/utils/dom.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\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\tdata = results.join(\"&\");\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.responseText,this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback(\"XMLHttpRequest error code: \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.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 && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\trequest.send(data);\n\treturn request;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/http.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/keyboard.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"enter\": 13,\n\t\"escape\": 27\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}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nexports.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};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase();\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\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(namedKeys[s]) {\n\t\t\tinfo.keyCode = namedKeys[s];\n\t\t}\n\t}\n\treturn info;\n};\n\nexports.checkKeyDescriptor = function(event,keyInfo) {\n\tvar metaKeyStatus = !!keyInfo.metaKey; // Using a temporary variable to keep JSHint happy\n\treturn event.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 === metaKeyStatus;\t\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/keyboard.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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\");\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\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({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = document.createElement(\"div\"),\n\t\tmodalBackdrop = document.createElement(\"div\"),\n\t\tmodalWrapper = document.createElement(\"div\"),\n\t\tmodalHeader = document.createElement(\"div\"),\n\t\theaderTitle = document.createElement(\"h3\"),\n\t\tmodalBody = document.createElement(\"div\"),\n\t\tmodalLink = document.createElement(\"a\"),\n\t\tmodalFooter = document.createElement(\"div\"),\n\t\tmodalFooterHelp = document.createElement(\"span\"),\n\t\tmodalFooterButtons = document.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\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\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: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\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: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\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(document.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.appendChild(document.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: \"Close\"\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\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(\" + window.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\twindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tdocument.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(\" + (-window.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tdocument.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\tif($tw.pageContainer) {\n\t\t$tw.utils.toggleClass($tw.pageContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/modal.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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,{parentWidget: $tw.rootWidget, document: document, variables: variables});\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",
            "title": "$:/core/modules/utils/dom/notifier.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === options.title) {\n\t\t\tindex = t;\n\t\t}\n\t}\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.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\t// Store the popup details\n\tthis.popups.push({\n\t\ttitle: options.title,\n\t\twiki: options.wiki,\n\t\tdomNode: options.domNode\n\t});\n\t// Set the state tiddler\n\toptions.wiki.setTextReference(options.title,\n\t\t\t\"(\" + options.domNode.offsetLeft + \",\" + options.domNode.offsetTop + \",\" + \n\t\t\t\toptions.domNode.offsetWidth + \",\" + options.domNode.offsetHeight + \")\");\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\tpopup.wiki.deleteTiddler(popup.title);\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",
            "title": "$:/core/modules/utils/dom/popup.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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.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 an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\t// Now get ready to scroll the body\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = $tw.utils.getScrollPosition();\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar clientBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\ttop: clientBounds.top + scrollPosition.y,\n\t\t\twidth: clientBounds.width,\n\t\t\theight: clientBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t// targetPos/targetSize - position and size of the target element\n\t// currentPos/currentSize - position and size of the current scroll viewport\n\t// returns: new position of the scroll viewport\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to it's top/left\n\t\t\tif(targetPos <= currentPos) {\n\t\t\t\tnewPos = 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\tnewPos = 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\tnewPos = targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\tnewPos = currentPos;\n\t\t\t}\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\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,window.innerWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,window.innerHeight);\n\t// Only scroll if the position has changed\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\twindow.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(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/scroller.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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",
            "title": "$:/core/modules/utils/edition-info.js",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/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_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text;\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.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, \"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, \"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(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}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get textContent on a raw TW_Element\";\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\tthrow \"Cannot get formattedTextContent on a raw TW_Element\";\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",
            "title": "$:/core/modules/utils/fakedom.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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/*\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 = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\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 = new Buffer(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})();\n",
            "title": "$:/core/modules/utils/filesystem.js",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/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) {\n\tthis.componentName = componentName || \"\";\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)));\n\t}\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\t// Prepare the text of the alert\n\tvar text = Array.prototype.join.call(arguments,\" \");\n\t// Create alert tiddlers in the browser\n\tif($tw.browser) {\n\t\t// Check if there is an existing alert with the same text and the same component\n\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\talertFields,\n\t\t\texistingCount,\n\t\t\tself = this;\n\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\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\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t}\n\t\t});\n\t\tif(alertFields) {\n\t\t\texistingCount = alertFields.count || 1;\n\t\t} else {\n\t\t\talertFields = {\n\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\ttext: text,\n\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\tcomponent: this.componentName\n\t\t\t};\n\t\t\texistingCount = 0;\n\t\t}\n\t\talertFields.modified = new Date();\n\t\tif(++existingCount > 1) {\n\t\t\talertFields.count = existingCount;\n\t\t} else {\n\t\t\talertFields.count = undefined;\n\t\t}\n\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t// Log the alert as well\n\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t} else {\n\t\t// Print an orange message to the console if not in the browser\n\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
            "title": "$:/core/modules/utils/logger.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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})();\n",
            "title": "$:/core/modules/utils/parsetree.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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 of current values of measurements\n\tthis.logger = new $tw.utils.Logger(\"performance\");\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\tself.measures = {};\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) + \"ms\");\n\t\t\tfor(var m in self.measures) {\n\t\t\t\tself.logger.log(\"+\" + m + \": \" + self.measures[m] + \"ms\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\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\t\tvalue = self.measures[name] || 0;\n\t\t\tself.measures[name] = value + $tw.utils.timer(startTime);\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",
            "title": "$:/core/modules/utils/performance.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/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 + \"\\nError: \" + 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",
            "title": "$:/core/modules/utils/pluginmaker.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\tconsole.log($tw.node ? \"\\x1b[1;33m\" + text + \"\\x1b[0m\" : text);\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\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\tvar s = 0;\n\t$tw.utils.each(object,function() {s++;});\n\treturn s;\n};\n\n/*\nCheck if an array is equal by value and by reference.\n*/\nexports.isArrayEqual = function(array1,array2) {\n\tif(array1 === array2) {\n\t\treturn true;\n\t}\n\tarray1 = array1 || [];\n\tarray2 = array2 || [];\n\tif(array1.length !== array2.length) {\n\t\treturn false;\n\t}\n\treturn array1.every(function(value,index) {\n\t\treturn value === array2[index];\n\t});\n};\n\n/*\nPush entries onto an array, removing them first if they already exist in the array\n\tarray: array to modify (assumed to be free of duplicates)\n\tvalue: a single value to push or an array of values to push\n*/\nexports.pushTop = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\t// Remove any array entries that are duplicated in the new values\n\t\tif(value.length !== 0) {\n\t\t\tif(array.length !== 0) {\n\t\t\t\tif(value.length < array.length) {\n\t\t\t\t\tfor(t=0; t<value.length; t++) {\n\t\t\t\t\t\tp = array.indexOf(value[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(p,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor(t=array.length-1; t>=0; t--) {\n\t\t\t\t\t\tp = value.indexOf(array[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(t,1);\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\t// Push the values on top of the main array\n\t\t\tarray.push.apply(array,value);\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\tarray.push(value);\n\t}\n\treturn array;\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.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.getYearForWeekNo(date);\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 date.getFullYear();\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[/^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[/^[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\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();\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 n = Math.floor((dt.getTime()-new Date(dt.getFullYear(),0,1) + 3600000) / 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 \"&amp;\", < to \"&lt;\", > to \"&gt;\", \" to \"&quot;\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&amp;\").replace(/</mg,\"&lt;\").replace(/>/mg,\"&gt;\").replace(/\\\"/mg,\"&quot;\");\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 e = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(1),10));\n\t\t}\n\t} else {\n\t\tvar c = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn String.fromCharCode(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) {\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\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(/[\\x80-\\uFFFF]/g, exports.escape); // 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);\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\tif($tw.browser) {\n\t\t// TODO\n\t\tthrow \"$tw.utils.base64Decode() doesn't work in the browser\";\n\t} else {\n\t\treturn (new Buffer(string64,\"base64\")).toString();\n\t}\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();\t\t\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) {\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\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n})();",
            "title": "$:/core/modules/utils/utils.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/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\tif(this.actionField) {\n\t\tremoveFields[this.actionField] = undefined;\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}\n\t\t});\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,removeFields));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-deletefield.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/action-deletetiddler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\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",
            "title": "$:/core/modules/widgets/action-navigate.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-sendmessage.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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};\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\tif(typeof this.actionValue === \"string\") {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue);\t\t\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);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-setfield.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\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,function(tiddlerFieldsArray) {\n\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\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.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\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",
            "title": "$:/core/modules/widgets/browse.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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// 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 = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = this.popup && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif(this.set && 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// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(this,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) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\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// 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.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = 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});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\t$tw.popup.triggerPopup({\n\t\tdomNode: this.domNodes[0],\n\t\ttitle: this.popup,\n\t\twiki: this.wiki\n\t});\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\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[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\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*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup])) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/button.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\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 = tiddler.fields[this.checkboxField] || 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\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\tvar value = checked ? this.checkboxChecked : this.checkboxUnchecked;\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\tif(hasChanged) {\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\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.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\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\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.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\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})();",
            "title": "$:/core/modules/widgets/checkbox.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/codeblock.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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 = undefined;\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",
            "title": "$:/core/modules/widgets/count.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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 = \"tc-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"}\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};\n\nDropZoneWidget.prototype.enterDrag = function() {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// We count enter/leave events\n\tthis.dragEnterCount = (this.dragEnterCount || 0) + 1;\n\t// If we're entering for the first time we need to apply highlighting\n\tif(this.dragEnterCount === 1) {\n\t\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.leaveDrag = function() {\n\t// Reduce the enter count\n\tthis.dragEnterCount = (this.dragEnterCount || 0) - 1;\n\t// Remove highlighting if we're leaving externally\n\tif(this.dragEnterCount <= 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent  = function(event) {\n\tthis.enterDrag();\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();\n};\n\nDropZoneWidget.prototype.handleDropEvent  = function(event) {\n\tthis.leaveDrag();\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// Reset the enter count\n\tthis.dragEnterCount = 0;\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 = this.wiki.readFiles(dataTransfer.files,function(tiddlerFieldsArray) {\n\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t});\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\tthis.importData(dataTransfer);\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.importData = function(dataTransfer) {\n\t// Try each provided data type in turn\n\tfor(var t=0; t<this.importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || this.importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = this.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.convertToFields(data);\n\t\t\t\tif(!tiddlerFields.title) {\n\t\t\t\t\ttiddlerFields.title = this.wiki.generateNewTitle(\"Untitled\");\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nDropZoneWidget.prototype.importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, convertToFields: function(data) {\n\t\treturn JSON.parse(data);\n\t}},\n\t{type: \"URL\", IECompatible: true, convertToFields: function(data) {\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 JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, convertToFields: function(data) {\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 JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/plain\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"Text\", IECompatible: true, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}}\n];\n\nDropZoneWidget.prototype.handlePasteEvent  = function(event) {\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) {\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(),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} 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])});\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\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\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/dropzone.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\";\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// Construct the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}]);\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",
            "title": "$:/core/modules/widgets/edit-binary.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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 = 300,\n\tDEFAULT_IMAGE_HEIGHT = 185;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\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 our element\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\tthis.widthDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor-width\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleWidthChangeEvent\"\n\t\t}]\n\t});\n\tthis.heightDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor-height\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleHeightChangeEvent\"\n\t\t}]\n\t});\n\t// Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tparent.insertBefore(this.widthDomNode,nextSibling);\n\tparent.insertBefore(this.heightDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode,this.widthDomNode,this.heightDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\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};\n\n/*\nNote that the bitmap editor intentionally doesn't try to refresh itself because it would be confusing to have the image changing spontaneously while editting it\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\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.updateSize();\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.updateSize();\n\t};\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\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** Update the input boxes with the actual size of the canvas\n*/\nEditBitmapWidget.prototype.updateSize = function() {\n\tthis.widthDomNode.value = this.currCanvas.width;\n\tthis.heightDomNode.value = this.currCanvas.height;\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\nEditBitmapWidget.prototype.handleWidthChangeEvent = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(this.widthDomNode.value,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newWidth !== this.currCanvas.width) {\n\t\tthis.changeCanvasSize(newWidth,this.currCanvas.height);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleHeightChangeEvent = function(event) {\n\t// Get the new width\n\tvar newHeight = parseInt(this.heightDomNode.value,10);\n\t// Update if necessary\n\tif(newHeight > 0 && newHeight !== this.currCanvas.height) {\n\t\tthis.changeCanvasSize(this.currCanvas.width,newHeight);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\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.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseInt(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"),10);\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);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type,1.0),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,update));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-bitmap.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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 DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditTextWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditTextWidget.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 our element\n\tvar editInfo = this.getEditInfo(),\n\t\ttag = this.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tif(this.editType) {\n\t\tdomNode.setAttribute(\"type\",this.editType);\n\t}\n\tif(editInfo.value === \"\" && this.editPlaceholder) {\n\t\tdomNode.setAttribute(\"placeholder\",this.editPlaceholder);\n\t}\n\tif(this.editSize) {\n\t\tdomNode.setAttribute(\"size\",this.editSize);\n\t}\n\t// Assign classes\n\tif(this.editClass) {\n\t\tdomNode.className = this.editClass;\n\t}\n\t// Set the text\n\tif(this.editTag === \"textarea\") {\n\t\tdomNode.appendChild(this.document.createTextNode(editInfo.value));\n\t} else {\n\t\tdomNode.value = editInfo.value;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(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\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n\t// Fix height\n\tthis.fixHeight();\n\t// Focus field\n\tif(this.editFocus === \"true\") {\n\t\tif(domNode.focus && domNode.select) {\n\t\t\tdomNode.focus();\n\t\t\tdomNode.select();\t\t\t\n\t\t}\n\t}\n};\n\n/*\nGet the tiddler being edited and current value\n*/\nEditTextWidget.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/*\nCompute the internal state of the widget\n*/\nEditTextWidget.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.editDefault = this.getAttribute(\"default\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editSize = this.getAttribute(\"size\");\n\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",\"yes\") === \"yes\";\n\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\tthis.editFocus = this.getAttribute(\"focus\");\n\t// Get the editor element tag and type\n\tvar tag,type;\n\tif(this.editField === \"text\") {\n\t\ttag = \"textarea\";\n\t} else {\n\t\ttag = \"input\";\n\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\ttag = fieldModule.editTag;\n\t\t}\n\t\tif(fieldModule && fieldModule.editType) {\n\t\t\ttype = fieldModule.editType;\n\t\t}\n\t\ttype = type || \"text\";\n\t}\n\t// Get the rest of our parameters\n\tthis.editTag = this.getAttribute(\"tag\",tag);\n\tthis.editType = this.getAttribute(\"type\",type);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\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\tthis.updateEditor(this.getEditInfo().value);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/*\nUpdate the editor with new text. This method is separate from updateEditorDomNode()\nso that subclasses can override updateEditor() and still use updateEditorDomNode()\n*/\nEditTextWidget.prototype.updateEditor = function(text) {\n\tthis.updateEditorDomNode(text);\n};\n\n/*\nUpdate the editor dom node with new text\n*/\nEditTextWidget.prototype.updateEditorDomNode = function(text) {\n\t// Replace the edit value if the tiddler we're editing has changed\n\tvar domNode = this.domNodes[0];\n\tif(!domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.document.activeElement !== domNode) {\n\t\t\tdomNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nFix the height of textareas to fit their content\n*/\nEditTextWidget.prototype.fixHeight = function() {\n\tvar self = this,\n\t\tdomNode = this.domNodes[0];\n\tif(this.editAutoHeight && domNode && !domNode.isTiddlyWikiFakeDom && this.editTag === \"textarea\") {\n\t\t// Resize the textarea to fit its content, preserving scroll position\n\t\tvar scrollPosition = $tw.utils.getScrollPosition(),\n\t\t\tscrollTop = scrollPosition.y;\n\t\t// Measure the specified minimum height\n\t\tdomNode.style.height = self.editMinHeight;\n\t\tvar minHeight = domNode.offsetHeight;\n\t\t// Set its height to auto so that it snaps to the correct height\n\t\tdomNode.style.height = \"auto\";\n\t\t// Calculate the revised height\n\t\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,minHeight);\n\t\t// Only try to change the height if it has changed\n\t\tif(newHeight !== domNode.offsetHeight) {\n\t\t\tdomNode.style.height =  newHeight + \"px\";\n\t\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t\t$tw.utils.forceLayout(domNode);\n\t\t\t// Check that the scroll position is still visible before trying to scroll back to it\n\t\t\tscrollTop = Math.min(scrollTop,self.document.body.scrollHeight - window.innerHeight);\n\t\t\twindow.scrollTo(scrollPosition.x,scrollTop);\n\t\t}\n\t}\n};\n\n/*\nHandle a dom \"input\" event\n*/\nEditTextWidget.prototype.handleInputEvent = function(event) {\n\tthis.saveChanges(this.domNodes[0].value);\n\tthis.fixHeight();\n\treturn true;\n};\n\nEditTextWidget.prototype.handleFocusEvent = function(event) {\n\tif(this.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.editFocusPopup,\n\t\t\twiki: this.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\nEditTextWidget.prototype.saveChanges = function(text) {\n\tvar editInfo = this.getEditInfo();\n\tif(text !== editInfo.value) {\n\t\teditInfo.update(text);\n\t}\n};\n\nexports[\"edit-text\"] = EditTextWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-text.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\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: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t}\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 || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\tvar domNode = this.document.createElementNS(this.namespace,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/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\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.parseTreeNode.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// 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*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/element.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/encrypt.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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.execute();\n\tvar textNode = this.document.createTextNode($tw.utils.entityDecode(this.parseTreeNode.entity));\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\treturn false;\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/entity.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tvar modification = this.wiki.getModificationFields();\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\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\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tvar modification = this.wiki.getModificationFields();\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}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/fieldmangler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = row.replace(\"$name$\",fieldName);\n\t\t\t\trow = row.replace(\"$value$\",value);\n\t\t\t\trow = row.replace(\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row);\n\t\t\t}\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 || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/fields.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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}\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",
            "title": "$:/core/modules/widgets/image.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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 self = this;\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\tvar widgetStackStart,widgetStackEnd;\n\tfunction addWidgetNode(widgetNode) {\n\t\tif(widgetNode) {\n\t\t\tif(!widgetStackStart && !widgetStackEnd) {\n\t\t\t\twidgetStackStart = widgetNode;\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t} else {\n\t\t\t\twidgetStackEnd.children = [widgetNode];\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = self.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\taddWidgetNode({\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});\n\t\t\t\tparseTreeNode = parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\t// Add our own children to the end of the pile\n\tvar parseTreeNodes;\n\tif(widgetStackStart && widgetStackEnd) {\n\t\tparseTreeNodes = [widgetStackStart];\n\t\twidgetStackEnd.children = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = this.parseTreeNode.children;\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*/\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",
            "title": "$:/core/modules/widgets/importvariables.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\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.utils.checkKeyDescriptor(event,self.keyInfo)) {\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\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\t// Get attributes\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.keyInfo = $tw.utils.parseKeyDescriptor(this.key);\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*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/keyboard.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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// Render the link if required\n\tif(useWikiLinks) {\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 domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.linkClasses) {\n\t\tclasses.push(this.linkClasses);\n\t}\n\tclasses.push(\"tc-tiddlylink\");\n\tif(this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t}\n\tif(this.isMissing && !this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t} else {\n\t\tif(!this.isMissing) {\n\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t}\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Set an href\n\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\",\n\t\twikiLinkText = wikiLinkTemplate.replace(\"$uri_encoded$\",encodeURIComponent(this.to));\n\twikiLinkText = wikiLinkText.replace(\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\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\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragstart\", handlerObject: this, handlerMethod: \"handleDragStartEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\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});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n};\n\nLinkWidget.prototype.handleDragStartEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\tif(this.to) {\n\t\t\t$tw.dragInProgress = true;\n\t\t\t// Set the dragging class on the element being dragged\n\t\t\t$tw.utils.addClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t\t// Create the drag image elements\n\t\t\tthis.dragImage = this.document.createElement(\"div\");\n\t\t\tthis.dragImage.className = \"tc-tiddler-dragger\";\n\t\t\tvar inner = this.document.createElement(\"div\");\n\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\tinner.appendChild(this.document.createTextNode(this.to));\n\t\t\tthis.dragImage.appendChild(inner);\n\t\t\tthis.document.body.appendChild(this.dragImage);\n\t\t\t// Astoundingly, we need to cover the dragger up: http://www.kryogenix.org/code/browser/custom-drag-image.html\n\t\t\tvar cover = this.document.createElement(\"div\");\n\t\t\tcover.className = \"tc-tiddler-dragger-cover\";\n\t\t\tcover.style.left = (inner.offsetLeft - 16) + \"px\";\n\t\t\tcover.style.top = (inner.offsetTop - 16) + \"px\";\n\t\t\tcover.style.width = (inner.offsetWidth + 32) + \"px\";\n\t\t\tcover.style.height = (inner.offsetHeight + 32) + \"px\";\n\t\t\tthis.dragImage.appendChild(cover);\n\t\t\t// Set the data transfer properties\n\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t// First the image\n\t\t\tdataTransfer.effectAllowed = \"copy\";\n\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\tdataTransfer.setDragImage(this.dragImage.firstChild,-16,-16);\n\t\t\t}\n\t\t\t// Then the data\n\t\t\tdataTransfer.clearData();\n\t\t\tvar jsonData = this.wiki.getTiddlerAsJson(this.to),\n\t\t\t\ttextData = this.wiki.getTiddlerText(this.to,\"\"),\n\t\t\t\ttitle = (new RegExp(\"^\" + $tw.config.textPrimitives.wikiLink + \"$\",\"mg\")).exec(this.to) ? this.to : \"[[\" + this.to + \"]]\";\n\t\t\t// IE doesn't like these content types\n\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\tdataTransfer.setData(\"text/plain\",title);\n\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t}\n\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\tdataTransfer.setData(\"Text\",title);\n\t\t\tevent.stopPropagation();\n\t\t} else {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\nLinkWidget.prototype.handleDragEndEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\t$tw.dragInProgress = false;\n\t\t// Remove the dragging class on the element being dragged\n\t\t$tw.utils.removeClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t// Delete the drag image element\n\t\tif(this.dragImage) {\n\t\t\tthis.dragImage.parentNode.removeChild(this.dragImage);\n\t\t}\n\t}\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.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\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*/\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",
            "title": "$:/core/modules/widgets/link.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\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*/\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.catchTo) {\n\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.catchMessage && this.parentWidget) {\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: this.catchMessage,\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\tif(this.catchSet) {\n\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/linkcatcher.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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(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 emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\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.getTiddlerData(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})();",
            "title": "$:/core/modules/widgets/list.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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 text = this.getVariable(this.parseTreeNode.name || this.getAttribute(\"$name\"),{params: params}),\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\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\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",
            "title": "$:/core/modules/widgets/macrocall.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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]);\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\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);\t\t\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\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList}\n\t));\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tvar p = storyList.indexOf(title);\n\twhile(p !== -1) {\n\t\tstoryList.splice(p,1);\n\t\tp = storyList.indexOf(title);\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tvar pos = storyList.indexOf(oldTitle);\n\tif(pos !== -1) {\n\t\tstoryList[pos] = newTitle;\n\t\tdo {\n\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\tif(pos !== -1) {\n\t\t\t\tstoryList.splice(pos,1);\n\t\t\t}\n\t\t} while(pos !== -1);\n\t} else {\n\t\tstoryList.splice(0,0,newTitle);\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tvar storyList = this.getStoryList();\n\t// Quit if we cannot get hold of the story list\n\tif(!storyList) {\n\t\treturn;\n\t}\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(title);\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(fromTitle);\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(this.getAttribute(\"openLinkFromInsideRiver\",\"below\")) {\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(this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"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,title);\n\t// Save the story\n\tthis.saveStoryList(storyList);\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.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(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 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\tdraftTitle = draftTiddler.fields.title,\n\t\tstoryList = this.getStoryList();\n\tthis.removeTitleFromStory(storyList,draftTitle);\n\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\tthis.saveStoryList(storyList);\n\treturn false;\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\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\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Delete this 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\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\tvar c = 0,\n\t\tdraftTitle;\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\";\n\t\tc++;\n\t} while(this.wiki.tiddlerExists(draftTitle));\n\treturn draftTitle;\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// Save the draft tiddler as the real tiddler\n\t\t\t\tthis.wiki.addTiddler(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\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// Replace the draft in the story with the original\n\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\tthis.saveStoryList(storyList);\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\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(originalTiddler) {\n\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t} else {\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t}\n\t\t\tthis.saveStoryList(storyList);\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\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// 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\texistingTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\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.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\t\t\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\tvar self = this;\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\t\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\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\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}\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\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\t\t\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.getTiddlerData(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push(\"The following tiddlers were imported:\\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\tself.wiki.addTiddler(new $tw.Tiddler(tiddlerFields));\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.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: IMPORT_TITLE,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([IMPORT_TITLE]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/navigator.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/password.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/radio.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nRadio widget\n\nWill set a field to the selected value:\n\n```\n\t<$radio field=\"myfield\" value=\"check 1\">one</$radio>\n\t<$radio field=\"myfield\" value=\"check 2\">two</$radio>\n\t<$radio field=\"myfield\" value=\"check 3\">three</$radio>\n```\n\n|Parameter |Description |h\n|tiddler |Name of the tiddler in which the field should be set. Defaults to current tiddler |\n|field |The name of the field to be set |\n|value |The value to set |\n|class |Optional class name(s) |\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 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\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.radioClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(this.getValue() == this.radioValue) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"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 tiddler = this.wiki.getTiddler(this.radioTitle);\n\treturn tiddler && tiddler.getFieldString(this.radioField);\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioField) {\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({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};\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.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tif(this.radioClass !== \"\") {\n\t\tthis.radioClass += \" \";\n\t}\n\tthis.radioClass += \"tc-radio\";\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(changedAttributes.tiddler || changedAttributes.field || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/radio.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/raw.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\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\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tdomNode.style.left = (this.popup.left - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t}\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[\"class\"] = this.getAttribute(\"class\",\"\");\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\t// Compute the title of the state tiddler and read it\n\tthis.stateTitle = this.state;\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 = this.stateTitle ? this.wiki.getTextReference(this.stateTitle,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\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.readMatchState(state);\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.readMatchState(state);\n\t\t\tthis.isOpen = !this.isOpen;\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.readMatchState = function(state) {\n\tthis.isOpen = state === this.text;\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\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[\"default\"] || changedAttributes.animate) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false,\n\t\t\tcurrentlyOpen = 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\trefreshed = true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\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\tdomNode.setAttribute(\"hidden\",\"true\");\n        }});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/reveal.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tthis.scrollIntoView(event.target);\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\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(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\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",
            "title": "$:/core/modules/widgets/scrollable.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tvar value = this.getSelectDomNode().value;\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\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);\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\tvar domNode = this.getSelectDomNode();\n\tif(domNode.value !== value) {\n\t\tdomNode.value = value;\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/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\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\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\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) {\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",
            "title": "$:/core/modules/widgets/select.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tvar value = this.setValue;\n\tif(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(!this.setValue) {\n\t\t\tvalue = $tw.utils.stringifyList(results);\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t}\n\tthis.setVariable(this.setName,value,this.parseTreeNode.params);\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*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.value || changedAttributes.emptyValue) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/set.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/text.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/tiddler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\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\tthis.setVariable(\"transclusion\",recursionMarker);\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: \"Recursive transclusion error in transclude widget\"}\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",
            "title": "$:/core/modules/widgets/transclude.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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",
            "title": "$:/core/modules/widgets/vars.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified();\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() {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\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",
            "title": "$:/core/modules/widgets/view.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\tif(arguments.length > 0) {\n\t\tthis.initialise(parseTreeNode,options);\n\t}\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\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\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\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\n*/\nWidget.prototype.setVariable = function(name,value,params) {\n\tthis.variables[name] = {value: value, params: params};\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*/\nWidget.prototype.getVariable = 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\tvalue = variable.value;\n\t\t// Substitute any parameters specified in the definition\n\t\tvalue = this.substituteVariableParameters(value,variable.params,actualParams);\n\t\tvalue = this.substituteVariableReferences(value);\n\t\treturn value;\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn this.evaluateMacroModule(name,actualParams,options.defaultValue);\n};\n\nWidget.prototype.substituteVariableParameters = function(text,formalParams,actualParams) {\n\tif(formalParams) {\n\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\tparamInfo, paramValue;\n\t\t// Step through each of the parameters in the macro definition\n\t\tfor(var p=0; p<formalParams.length; p++) {\n\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\tparamInfo = formalParams[p];\n\t\t\tparamValue = undefined;\n\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\tnextAnonParameter++;\n\t\t\t}\n\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t}\n\t\t\t// If we've still not got a value, use the default, if any\n\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t// Replace any instances of this parameter\n\t\t\ttext = text.replace(new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(paramInfo.name) + \"\\\\$\",\"mg\"),paramValue);\n\t\t}\n\t}\n\treturn text;\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\tname = name || \"transclusion\";\n\tvar output = [],\n\t\tnode = this;\n\twhile(node && node.parentWidget) {\n\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\toutput.push(node.getVariable(name));\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn $tw.utils.hashString(output.join(\"\"));\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 === \"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\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.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\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 self = this,\n\t\trefreshed = false;\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\trefreshed = childWidget.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 && child.invokeAction(triggeringWidget,event)) {\n\t\t\thandled = true;\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\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
            "title": "$:/core/modules/widgets/widget.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/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\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) {\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\tdata[index] = value;\n\t\tthis.setTiddlerData(title,data,this.getModificationFields());\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(tiddler,fields,this.getModificationFields()));\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.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn 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\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\tvar fields = {\n\t\t\tcreated: new Date()\n\t\t},\n\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\tif(creator) {\n\t\tfields.creator = creator;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tvar fields = Object.create(null),\n\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\tfields.modified = new Date();\n\tif(modifier) {\n\t\tfields.modifier = modifier;\n\t}\n\treturn fields;\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) {\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                        (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 {\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 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\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\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\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\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\tvar self = this;\n\treturn this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\tvar tagmap = self.getTagMap();\n\t\treturn self.sortByList(tagmap[tag],tag);\n\t});\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 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\tvar currPos = titles.indexOf(title),\n\t\t\t\tnewPos = -1,\n\t\t\t\ttiddler = this.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(beforeTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(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\tif(newPos === -1) {\n\t\t\t\t\tnewPos = currPos;\n\t\t\t\t}\n\t\t\t\tif(newPos !== currPos) {\n\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t}\n\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerData(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\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*/\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.getTiddlerData(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\n// Temporarily disable caching so that tweakParseTreeNode() works\nreturn initializer();\n\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\nexports.clearCache = function(title) {\n\tthis.caches = this.caches || Object.create(null);\n\tif($tw.utils.hop(this.caches,title)) {\n\t\tdelete this.caches[title];\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};\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.old_parseText = function(type,text,options) {\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.old_parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"newInlineParseTree\" : \"newBlockParseTree\",\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.old_parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nvar tweakMacroDefinition = function(nodeList) {\n\tif(nodeList && nodeList[0] && nodeList[0].type === \"macrodef\") {\n\t\tnodeList[0].type = \"set\";\n\t\tnodeList[0].attributes = {\n\t\t\tname: {type: \"string\", value: nodeList[0].name},\n\t\t\tvalue: {type: \"string\", value: nodeList[0].text}\n\t\t};\n\t\tnodeList[0].children = nodeList.slice(1);\n\t\tnodeList.splice(1,nodeList.length-1);\n\t\ttweakMacroDefinition(nodeList[0].children);\n\t}\n};\n\nvar tweakParser = function(parser) {\n\t// Move any macro definitions to contain the body tree\n\ttweakMacroDefinition(parser.tree);\n};\n\nexports.parseText = function(type,text,options) {\n\tvar parser = this.old_parseText(type,text,options);\n\tif(parser) {\n\t\ttweakParser(parser);\n\t}\n\treturn parser;\n};\n\nexports.parseTiddler = function(title,options) {\n\tvar parser = this.old_parseTiddler(title,options);\n\tif(parser) {\n\t\ttweakParser(parser);\n\t}\n\treturn parser;\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 || \"text/vnd.tiddlywiki\",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.children: optional array of children for the transclude widget\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTree = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"transclude\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttiddler: {\n\t\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: title}},\n\t\t\t\tisBlock: !options.parseAsInline}]}\n\t]};\n\tif(options.field) {\n\t\tparseTree.tree[0].children[0].attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTree.tree[0].children[0].attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTree.tree[0].children[0].children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTree,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\tliteral: If true, searches for literal string, rather than separate search terms\n\tfield: If specified, restricts the search to the specified field\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\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + $tw.utils.escapeRegExp(text) + \")\",flags)];\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(\"(\" + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\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 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\tmatch;\n\t\tfor(var t=0; t<searchTermsRegExps.length; t++) {\n\t\t\tmatch = false;\n\t\t\tif(options.field) {\n\t\t\t\tmatch = searchTermsRegExps[t].test(tiddler.getFieldString(options.field));\n\t\t\t} else {\n\t\t\t\t// Search title, tags and body\n\t\t\t\tif(contentTypeInfo.encoding === \"utf8\") {\n\t\t\t\t\tmatch = match || searchTermsRegExps[t].test(tiddler.fields.text);\n\t\t\t\t}\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.join(\"\\0\") : \"\";\n\t\t\t\tmatch = match || searchTermsRegExps[t].test(tags) || searchTermsRegExps[t].test(tiddler.fields.title);\n\t\t\t}\n\t\t\tif(!match) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\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.fields.text !== undefined) {\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/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,callback) {\n\tvar result = [],\n\t\toutstanding = files.length;\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],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\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,callback) {\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// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\t// Deserialise the file contents\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\t// Are we binary?\n\t\tif(isBinary) {\n\t\t\t// The base64 section starts after the first comma in the data URI\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttiddlerFields.text = text.substr(commaPos+1);\n\t\t\t\tcallback([tiddlerFields]);\n\t\t\t}\n\t\t} else {\n\t\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\t\tif(encryptedJson) {\n\t\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields));\n\t\t\t}\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\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\"]);\n\tif(!origTiddler) {\n\t\treturn tiddler.fields.text !== \"\";\n\t}\n\treturn tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"] || !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\thistoryTitle = historyTitle || \"$:/HistoryList\";\n\tvar titles = $tw.utils.isArray(title) ? title : [title];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.getTiddlerData(historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: fromPageRect});\n\t});\n\tthis.setTiddlerData(historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\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})();\n",
            "title": "$:/core/modules/wiki.js",
            "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\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\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\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\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\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/DarkPhotos": {
            "created": "20150402111612188",
            "description": "Good with dark photo backgrounds",
            "modified": "20150402112344080",
            "name": "DarkPhotos",
            "tags": "$:/tags/Palette",
            "title": "$:/palettes/DarkPhotos",
            "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\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/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\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\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/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\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\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\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"
        },
        "$:/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)http://tiddlywiki.com -->&#13;&#10;"
        },
        "$:/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/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": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/JsonFile": {
            "title": "$:/core/templates/exporters/JsonFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/JsonFile}}",
            "extension": ".json",
            "text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\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\">\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<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<<renderContent>>\n</$importvariables>\n"
        },
        "$:/core/templates/exporters/TidFile": {
            "title": "$:/core/templates/exporters/TidFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/TidFile}}",
            "extension": ".tid",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\"><<renderContent>></$importvariables>"
        },
        "$:/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/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/save/all": {
            "title": "$:/core/save/all",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/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/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-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{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/templates/single.tiddler.window": {
            "title": "$:/core/templates/single.tiddler.window",
            "text": "<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"tempCurrentTiddler\" value=<<currentTiddler>>>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=<<tempCurrentTiddler>>>\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</$importvariables>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\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{{$:/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"
        },
        "$:/core/templates/static.content": {
            "title": "$:/core/templates/static.content",
            "type": "text/vnd.tiddlywiki",
            "text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|http://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=\"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`<!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=\"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\">\n`<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>\n</$importvariables>`\n</section>\n</body>\n</html>\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`</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": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\t\t<!-- Force IE standards mode for Intranet and HTA - should be the first meta -->\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\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=\"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</head>\n<body class=\"tc-body\">\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</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/AdvancedSearch/Filter": {
            "title": "$:/core/ui/AdvancedSearch/Filter",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Filter/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n</div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"nomatch\" text=\"\" default=\"\">\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</$reveal>\n</div>\n\n</$linkcatcher>\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}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Shadows": {
            "title": "$:/core/ui/AdvancedSearch/Shadows",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Shadows/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\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]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\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<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\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}}/>\n</$list>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/System": {
            "title": "$:/core/ui/AdvancedSearch/System",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/System/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\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]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\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<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
        },
        "$:/core/ui/AlertTemplate": {
            "title": "$:/core/ui/AlertTemplate",
            "text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button message=\"tm-delete-tiddler\" class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">(count: <$view field=\"count\"/>)</span></$reveal>\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<div class=\"tc-binary-warning\">\n\n<<lingo Prompt>>\n\n</div>\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<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\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<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\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=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\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-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\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/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Tags\" default=\"\" tag=\"input\"/> |\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<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\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 lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define install-plugin-button()\n<$button>\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"install\"\"\">\nreinstall\n</$list>\n</$button>\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-small-icon\">\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/right-arrow}}\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/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\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\">\n<h1><$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</div>\n<div class=\"tc-plugin-info-chunk\">\n<<install-plugin-button>>\n</div>\n</div>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"This plugin is not currently installed\"\"\">\n<em>\nThis plugin is already installed at version <$text text=<<installedVersion>>/>\n</em>\n</$list>\n</div>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\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}} open plugin library\n</$button>\n\\end\n\n\\define display-server-assets(type)\nSearch: <$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{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\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<<tabs \"[[$:/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</$list>\n\\end\n\n\\define plugin-library-listing()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<div class=\"tc-plugin-library\">\n\n!! <$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link>\n\n//<$view field=\"url\"/>//\n\n<$transclude/>\n\n<<display-server-connection>>\n</div>\n</$list>\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<div>\n<<plugin-library-listing>>\n</div>\n\n</$importvariables>\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{{$:/snippets/paletteeditor}}\n\n</$reveal>\n\n"
        },
        "$:/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/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 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)\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\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/right-arrow}}\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/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\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\">\n<h1>\n''<$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-table(type)\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">>>\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$\">>\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$\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<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<$reveal type=\"nomatch\" text=\"\" state=\"!!list\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList={{!!list}} default=\"readme\" template=\"$:/core/ui/PluginInfo\"/>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=\"!!list\">\nNo information provided\n</$reveal>\n</div>\n</div>\n</$reveal>\n</$set>\n</$list>\n</$set>\n\\end\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green\" style=\"background:blue;\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
        },
        "$:/core/ui/ControlPanel/Saving": {
            "title": "$:/core/ui/ControlPanel/Saving",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Saving/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\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! <<lingo TiddlySpot/Heading>>\n\n<<lingo TiddlySpot/Description>>\n\n|<<lingo TiddlySpot/UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Password>> |<$password name=\"upload\"/> |\n|<<lingo TiddlySpot/Backups>> |<<backupLink>> |\n\n''<<lingo TiddlySpot/Advanced/Heading>>''\n\n|<<lingo TiddlySpot/ServerURL>>  |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo TiddlySpot/UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo TiddlySpot/BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
        },
        "$:/core/ui/ControlPanel/Settings/AutoSave": {
            "title": "$:/core/ui/ControlPanel/Settings/AutoSave",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/AutoSave/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/AutoSave/\n\n<$link to=\"$:/config/AutoSave\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo Disabled/Description>> </$radio>\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/DefaultSidebarTab": {
            "caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
            "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/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/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/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/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\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\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<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\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\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\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<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\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\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\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<$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>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\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<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/ControlPanel": {
            "title": "$:/ControlPanel",
            "icon": "$:/core/images/options-button",
            "color": "#bbb",
            "text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
        },
        "$:/core/ui/DefaultSearchResultList": {
            "title": "$:/core/ui/DefaultSearchResultList",
            "tags": "$:/tags/SearchResults",
            "caption": "{{$:/language/Search/DefaultResults/Caption}}",
            "text": "\\define searchResultList()\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search{$(searchTiddler)$}]\"/>\"\"\">\n\n{{$:/language/Search/Matches}}\n\n</$set>\n\n//<small>Title matches:</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>All matches:</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\\end\n<<searchResultList>>\n"
        },
        "$:/core/ui/EditTemplate/body": {
            "title": "$:/core/ui/EditTemplate/body",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Body/\n<$list filter=\"[is[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\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[is[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<em class=\"tc-edit\"><<lingo Hint>></em> <$button type=\"set\" set=\"$:/state/showeditpreview\" setTo=\"no\"><<lingo Preview/Button/Hide>></$button>\n\n<div class=\"tc-tiddler-preview\">\n<div class=\"tc-tiddler-preview-preview\">\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n</div>\n\n<div class=\"tc-tiddler-preview-edit\">\n<$edit field=\"text\" class=\"tc-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<em class=\"tc-edit\"><<lingo Hint>></em> <$button type=\"set\" set=\"$:/state/showeditpreview\" setTo=\"yes\"><<lingo Preview/Button/Show>></$button>\n<$edit field=\"text\" class=\"tc-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\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 new-field-inner()\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button>\n<$action-sendmessage $message=\"tm-add-field\" $name=<<name>> $value=<<value>>/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\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\\end\n\n\\define new-field()\n<$set name=\"name\" value={{$:/temp/newfieldname}}>\n<$set name=\"value\" value={{$:/temp/newfieldvalue}}>\n<<new-field-inner>>\n</$set>\n</$set>\n\\end\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\">\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<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\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>>/>\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\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</span>\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" 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<$linkcatcher to=\"$:/temp/newfieldname\">\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$list filter=\"[!is[shadow]!is[system]fields[]sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\"  variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\"/>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n\n"
        },
        "$:/core/ui/EditTemplate/shadow": {
            "title": "$:/core/ui/EditTemplate/shadow",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$list>\n"
        },
        "$:/core/ui/EditTemplate/tags": {
            "title": "$:/core/ui/EditTemplate/tags",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\n\\end\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\"><$set name=\"backgroundColor\" value={{!!color}}><span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">&times;</$button></span>\n</$set>\n</$list>\n\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\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> <span class=\"tc-add-tag-button\">\n<$button message=\"tm-add-tag\" param={{$:/temp/NewTagName}} set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n<<lingo Tags/Add/Button>>\n</$button>\n</span>\n</div>\n\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\">\n<$linkcatcher set=\"$:/temp/NewTagName\" setTo=\"\" message=\"tm-add-tag\">\n<$list filter=\"[tags[]!is[system]search:title{$:/temp/NewTagName}sort[]]\">\n{{||$:/core/ui/Components/tag-link}}\n</$list>\n<hr>\n<$list filter=\"[tags[]is[system]search:title{$:/temp/NewTagName}sort[]]\">\n{{||$:/core/ui/Components/tag-link}}\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n</$fieldmangler>\n</div>"
        },
        "$:/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=\"true\"/>"
        },
        "$:/core/ui/EditTemplate/type": {
            "title": "$:/core/ui/EditTemplate/type",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-popup-handle\"/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" 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}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\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]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>"
        },
        "$:/core/ui/EditTemplate": {
            "title": "$:/core/ui/EditTemplate",
            "text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>>>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key=\"escape\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"ctrl+enter\" message=\"tm-save-tiddler\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n</$list>\n</$keyboard>\n</$keyboard>\n</$set>\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": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/delete": {
            "title": "$:/core/ui/Buttons/delete",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
            "description": "{{$:/language/Buttons/Delete/Hint}}",
            "text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/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": "<$button message=\"tm-save-tiddler\" tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/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/ShadowTiddlers": {
            "title": "$:/core/Filters/ShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows]sort[title]]",
            "description": "{{$:/language/Filters/ShadowTiddlers}}",
            "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\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n<table>\n<tbody>\n<tr>\n<th>\n<<lingo Listing/Select/Caption>>\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>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>>>\n<$transclude subtiddler=<<payloadTiddler>> mode=\"block\"/>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ListItemTemplate": {
            "title": "$:/core/ui/ListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>"
        },
        "$:/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/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/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/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": "\\define control-panel-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>prefix[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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=<<control-panel-button>>>\n<<control-panel-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>prefix[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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": "\\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>prefix[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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": "<$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>prefix[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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>prefix[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
        },
        "$:/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/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>prefix[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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>prefix[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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>prefix[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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": "\\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>prefix[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<$list filter=\"[<tv-config-toolbar-text>prefix[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 tc-drop-down-language-chooser\">\n<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$link>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/language\" text=<<currentTiddler>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/language\" text=<<currentTiddler>>>\n&nbsp;\n</$reveal>\n</span>\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</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/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>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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<$transclude tiddler=<<listItem>> mode=\"inline\"/>\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-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": "\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=\"$(journalTags)$\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<<journalButton>>\n</$set></$set>"
        },
        "$:/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": "<$button message=\"tm-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>prefix[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/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": "<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>prefix[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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>"
        },
        "$:/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>prefix[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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 message=\"tm-save-wiki\" param={{$:/config/SaveWikiButton/Template}} tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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": "\\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>prefix[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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<$linkcatcher to=\"$:/view\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$link to=<<storyview>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/view\" text=<<storyview>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/view\" text=<<storyview>>>\n&nbsp;\n</$reveal>\n</span>\n<$transclude tiddler=<<icon>>/>\n<$text text=<<storyview>>/></$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/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": "\\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>prefix[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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": "<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>prefix[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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<$list filter=\"[plugin-type[theme]sort[title]]\" variable=\"themeTitle\">\n<$link to=<<themeTitle>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/theme\" text=<<themeTitle>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/theme\" text=<<themeTitle>>>\n&nbsp;\n</$reveal>\n</span>\n<$view tiddler=<<themeTitle>> field=\"name\"/>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/PageTemplate/pagecontrols": {
            "title": "$:/core/ui/PageTemplate/pagecontrols",
            "text": "\\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<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$reveal>\n</$list>\n</div>\n\n"
        },
        "$:/core/ui/PageStylesheet": {
            "title": "$:/core/ui/PageStylesheet",
            "text": "<$importvariables filter=\"[[$:/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\n</$importvariables>\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/pluginreloadwarning": {
            "title": "$:/core/ui/PageTemplate/pluginreloadwarning",
            "tags": "$:/tags/PageTemplate",
            "text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[has[plugin-type]haschanged[]!plugin-type[import]limit[1]]\">\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": "<$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\">\n\n<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n\n<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n\n{{||$:/core/ui/PageTemplate/pagecontrols}}\n\n<$transclude tiddler=\"$:/core/ui/SideBarLists\" mode=\"inline\"/>\n\n</$reveal>\n\n</div>\n\n</$scrollable>"
        },
        "$:/core/ui/PageTemplate/story": {
            "title": "$:/core/ui/PageTemplate/story",
            "tags": "$:/tags/PageTemplate",
            "text": "<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=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/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\">\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\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate": {
            "title": "$:/core/ui/PageTemplate",
            "text": "\\define containerClasses()\ntc-page-container tc-page-view-$(themeTitle)$ tc-language-$(languageTitle)$\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=\"\">\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}}>\n\n<$dropzone>\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</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$importvariables>\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<$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\">\nNo ''\"<$text text=<<currentTab>>/>\"'' found\n</$transclude>\n</$transclude>\n</$transclude>\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<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\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<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Tags\" \"$:/state/tab/moresidebar\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/core/ui/SideBar/Open": {
            "title": "$:/core/ui/SideBar/Open",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Open/Caption}}",
            "text": "\\define lingo-base() $:/language/CloseAll/\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" storyview=\"pop\">\n\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">&times;</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\n\n</$list>\n\n<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\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;\">\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": "<div class=\"tc-sidebar-lists\">\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" 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 state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n{{$:/core/ui/SearchResults}}\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" />\n\n</$reveal>\n\n</div>\n"
        },
        "$:/TagManager": {
            "title": "$:/TagManager",
            "icon": "$:/core/images/tag-button",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\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<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/icon/$title$\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/icon/$title$\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$title$!!icon\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define qualifyTitle(title)\n$title$$(currentTiddler)$\n\\end\n\\define toggleButton(state)\n<$reveal state=\"$state$\" type=\"match\" text=\"closed\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal state=\"$state$\" type=\"match\" text=\"open\" default=\"closed\">\n<$button set=\"$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<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><$transclude tiddler=\"$:/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=<<qualifyTitle \"$:/state/tag-manager/\">> /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal state=<<qualifyTitle \"$:/state/tag-manager/\">> 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>\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/TagTemplate": {
            "title": "$:/core/ui/TagTemplate",
            "text": "\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB)\n<$set name=\"foregroundColor\" value=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">>>\n<$set name=\"backgroundColor\" value=\"\"\"$colour$\"\"\">\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-tag-label\" style=<<tag-styles>>>\n<$transclude tiddler={{!!icon}}/> <$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\"><div class=\"tc-drop-down\"><$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]tagging[]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</$set>\n</$set>\n\\end\n\n\\define tag-body(colour,palette)\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}}/>\n</span>\n\\end\n\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}}/>\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<$transclude tiddler=<<listItem>>/>\n\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>\n"
        },
        "$:/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": "<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
        },
        "$:/core/ui/TopBar/menu": {
            "title": "$:/core/ui/TopBar/menu",
            "tags": "$:/tags/TopRightBar",
            "text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$reveal>\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": "<div class=\"tc-tiddler-body\">\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</div>\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<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n{{||$:/core/ui/ImportListing}}\n\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\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/plugin": {
            "title": "$:/core/ui/ViewTemplate/plugin",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n\n{{||$:/core/ui/TiddlerInfo/Advanced/PluginInfo}}\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/subtitle": {
            "title": "$:/core/ui/ViewTemplate/subtitle",
            "tags": "$:/tags/ViewTemplate",
            "text": "<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"relativedate\"/>\n</div>\n"
        },
        "$:/core/ui/ViewTemplate/tags": {
            "title": "$:/core/ui/ViewTemplate/tags",
            "tags": "$:/tags/ViewTemplate",
            "text": "<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n"
        },
        "$:/core/ui/ViewTemplate/title": {
            "title": "$:/core/ui/ViewTemplate/title",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\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\"><$transclude tiddler=<<listItem>>/></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}/>\n</span>\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<$transclude tiddler=\"$:/core/ui/TiddlerInfo\"/>\n\n</$reveal>\n</div>"
        },
        "$:/core/ui/ViewTemplate": {
            "title": "$:/core/ui/ViewTemplate",
            "text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$\n\\end\n<$set name=\"storyTiddler\" value=<<currentTiddler>>><$set name=\"tiddlerInfoState\" value=<<qualify \"$:/state/popup/tiddler-info\">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$tiddler></$set></$set>\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": "<$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>prefix[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Clone/Caption}}/></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": "<$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>prefix[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseOthers/Caption}}/></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": "<$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>prefix[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Close/Caption}}/></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": "<$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>prefix[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Edit/Caption}}/></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/info": {
            "title": "$:/core/ui/Buttons/info",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
            "description": "{{$:/language/Buttons/Info/Hint}}",
            "text": "<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Info/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/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": "\\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>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[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/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\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": "\\define newHereButtonTags()\n[[$(currentTiddler)$]]\n\\end\n\\define newHereButton()\n<$button tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<newHereButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewHere/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>"
        },
        "$:/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": "\\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<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournalHere/Caption}}/></span>\n</$list>\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></$set></$set>"
        },
        "$:/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": "<$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>prefix[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/OpenWindow/Caption}}/></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": "<$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>prefix[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permalink/Caption}}/></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": "<$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>prefix[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permaview/Caption}}/></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/AutoSave": {
            "title": "$:/config/AutoSave",
            "text": "yes"
        },
        "$:/config/BitmapEditor/Colour": {
            "title": "$:/config/BitmapEditor/Colour",
            "text": "#ff0"
        },
        "$:/config/BitmapEditor/LineWidth": {
            "title": "$:/config/BitmapEditor/LineWidth",
            "text": "3"
        },
        "$:/config/DefaultSidebarTab": {
            "title": "$:/config/DefaultSidebarTab",
            "text": "$:/core/ui/SideBar/Open"
        },
        "$:/config/Drafts/TypingTimeout": {
            "title": "$:/config/Drafts/TypingTimeout",
            "text": "400"
        },
        "$:/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/EditorTypeMappings/image/gif": {
            "title": "$:/config/EditorTypeMappings/image/gif",
            "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/Navigation/UpdateAddressBar": {
            "title": "$:/config/Navigation/UpdateAddressBar",
            "text": "no"
        },
        "$:/config/Navigation/UpdateHistory": {
            "title": "$:/config/Navigation/UpdateHistory",
            "text": "no"
        },
        "$:/config/OfficialPluginLibrary": {
            "title": "$:/config/OfficialPluginLibrary",
            "tags": "$:/tags/PluginLibrary",
            "url": "http://tiddlywiki.com/library/v5.1.9/index.html",
            "caption": "{{$:/language/OfficialPluginLibrary}}",
            "text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team.\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/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/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/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/storyview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
            "text": "hide"
        },
        "$:/config/SaveWikiButton/Template": {
            "title": "$:/config/SaveWikiButton/Template",
            "text": "$:/core/save/all"
        },
        "$:/config/SaverFilter": {
            "title": "$:/config/SaverFilter",
            "text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state]] -[prefix[$:/temp]]"
        },
        "$:/config/Search/AutoFocus": {
            "title": "$:/config/Search/AutoFocus",
            "text": "true"
        },
        "$:/config/SearchResults/Default": {
            "title": "$:/config/SearchResults/Default",
            "text": "$:/core/ui/DefaultSearchResultList"
        },
        "$:/config/SyncFilter": {
            "title": "$:/config/SyncFilter",
            "text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status]] -[prefix[$:/state]] -[prefix[$:/temp]]"
        },
        "$:/config/TiddlerInfo/Default": {
            "title": "$:/config/TiddlerInfo/Default",
            "text": "$:/core/ui/TiddlerInfo/Fields"
        },
        "$:/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"
        },
        "$:/snippets/currpalettepreview": {
            "title": "$:/snippets/currpalettepreview",
            "text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch(colour)\n<$set name=\"swatchColour\" value={{##$colour$}}>\n<div class=\"tc-swatch\" style=<<swatchStyle>>/>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\">\n<<swatch foreground>>\n<<swatch background>>\n<<swatch muted-foreground>>\n<<swatch primary>>\n<<swatch page-background>>\n<<swatch tab-background>>\n<<swatch tiddler-info-background>>\n</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": "{{$:/language/ControlPanel/Basics/Language/Prompt}} <$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/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>\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 datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\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"
        },
        "$:/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\">\n<$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>prefix[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\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</div>\n</$reveal>\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:\"\")\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\">\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"
        },
        "$:/core/macros/tabs": {
            "title": "$:/core/macros/tabs",
            "tags": "$:/tags/Macro",
            "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n<$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$set>\n</$button>\n</$list>\n</div><div class=\"tc-tab-divider $class$\"/><div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\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\\end\n"
        },
        "$:/core/macros/tag": {
            "title": "$:/core/macros/tag",
            "tags": "$:/tags/Macro",
            "text": "\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
        },
        "$:/core/macros/thumbails": {
            "title": "$:/core/macros/thumbails",
            "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></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": {
            "created": "20141212105914482",
            "modified": "20141212110330815",
            "tags": "$:/tags/Macro",
            "title": "$:/core/macros/timeline",
            "type": "text/vnd.tiddlywiki",
            "text": "\\define timeline-title()\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}}>\n<<timeline-title>>\n</$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(rootTag,tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc\">\n<$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\"\"\">\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n<<toc-caption>>\n</$list>\n<$list filter=\"\"\"[all[current]] -[[$rootTag$]]\"\"\">\n<$macrocall $name=\"toc-body\" rootTag=\"\"\"$rootTag$\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$list>\n</li>\n</$set>\n</$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter)\n<<toc-body rootTag:\"\"\"$tag$\"\"\" tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc toc-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<<toc-linked-expandable-body tag:'$tag$' sort:'$sort$' itemClassFilter:'$itemClassFilter$'>>\">\n<<toc-unlinked-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n</$list>\n</$list>\n</ol>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</$list>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]tagging[]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\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n</$list>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"\"\"toc-selective-expandable\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc toc-selective-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=\"<<toc-linked-selective-expandable-body tag:'$tag$' sort:'$sort$' itemClassFilter:'$itemClassFilter$'>>\">\n<<toc-unlinked-selective-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"$itemClassFilter$\"\"\">>\n</$list>\n</$list>\n</ol>\n\\end\n\n\\define toc-tabbed-selected-item-filter(selectedTiddler)\n[all[current]field:title{$selectedTiddler$}]\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{$selectedTiddler$}}>\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=<<toc-tabbed-selected-item-filter selectedTiddler:\"\"\"$selectedTiddler$\"\"\">>/>\n</div>\n</$linkcatcher>\n<div class=\"tc-tabbed-table-of-contents-content\">\n<$reveal state=\"\"\"$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 state=\"\"\"$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"
        },
        "$:/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": "\\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<$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<table>\n<tbody>\n<$list filter=\"[all[current]indexes[]]\" variable=\"colourName\">\n<tr>\n<td>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<$edit-text index=<<colourName>> tag=\"input\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n</$set>\n"
        },
        "$:/snippets/palettepreview": {
            "title": "$:/snippets/palettepreview",
            "text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n<$transclude tiddler=\"$:/snippets/currpalettepreview\"/>\n</$set>\n"
        },
        "$:/snippets/paletteswitcher": {
            "title": "$:/snippets/paletteswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n<div class=\"tc-prompt\">\n<<lingo Prompt>> <$view tiddler={{$:/palette}} field=\"name\"/>\n</div>\n\n<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[description]]\"><div class=\"tc-chooser-item\"><$link to={{!!title}}><div><$reveal state=\"$:/palette\" type=\"match\" text={{!!title}}>&bull;</$reveal><$reveal state=\"$:/palette\" type=\"nomatch\" text={{!!title}}>&nbsp;</$reveal> ''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/></div><$transclude tiddler=\"$:/snippets/currpalettepreview\"/></$link></div>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/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/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/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]]",
            "text": ""
        },
        "$:/tags/PageControls": {
            "title": "$:/tags/PageControls",
            "list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/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/full-screen]] [[$:/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/SideBar": {
            "title": "$:/tags/SideBar",
            "list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
            "text": ""
        },
        "$:/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/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/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]]"
        },
        "$:/snippets/themeswitcher": {
            "title": "$:/snippets/themeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$view tiddler={{$:/theme}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\"><div><$reveal state=\"$:/theme\" type=\"match\" text={{!!title}}>&bull;</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}>&nbsp;</$reveal> <$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$list>\n</$linkcatcher>"
        },
        "$:/core/wiki/title": {
            "title": "$:/core/wiki/title",
            "type": "text/vnd.tiddlywiki",
            "text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
        },
        "$:/view": {
            "title": "$:/view",
            "text": "classic"
        },
        "$:/snippets/viewswitcher": {
            "title": "$:/snippets/viewswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/StoryView/\n<<lingo Prompt>> <$select tiddler=\"$:/view\">\n<$list filter=\"[storyviews[]]\">\n<option><$view field=\"title\"/></option>\n</$list>\n</$select>"
        }
    }
}
[[Table of Contents]]
no
David Fisco's Study Wiki for The Sketch Book of Geoffrey Crayon, Gent.
The Sketch Book of Geoffrey Crayon, Gent: Personal Wiki
$:/core/ui/SideBar/Recent

The Sketch Book of Geoffrey Crayon, Gent: Personal Wiki by [[David Fisco|http://www.davidfisco.com]]

* [[The Sketch Book of Geoffrey Crayon, Gent: Personal Wiki Homepage|http://personal-wikis.davidfisco.com/sketch-book-of-geoffrey-crayon/]]
* Feedback: [[Email David Fisco|mailto:[email protected]?subject=Crayon+Sketch+Book+Personal+Wiki+Feedback]]
* [[TiddlyWiki Homepage|http://tiddlywiki.com/]]
* [[TiddlyWiki Markdown|http://tiddlywiki.com/#WikiText]]
{
    "tiddlers": {
        "$:/info/browser": {
            "title": "$:/info/browser",
            "text": "yes"
        },
        "$:/info/node": {
            "title": "$:/info/node",
            "text": "no"
        }
    }
}


{
    "tiddlers": {
        "$:/themes/tiddlywiki/snowwhite/base": {
            "title": "$:/themes/tiddlywiki/snowwhite/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\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: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\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\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-displayed {\n\t<<filter \"blur(4px)\">>\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-divider {\n\t<<background-linear-gradient \"left, rgb(216,216,216) 0%, rgb(236,236,236) 250px\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(224,224,224) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(248,248,248) 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": "Theme Tweaks",
            "text": "\\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<$linkcatcher to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\">\n<$link to=\"\">\n(none)\n</$link>\n<hr>\n<$list filter=\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[sort[title]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n</$linkcatcher>\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\">Scroll with tiddlers</option>\n<option value=\"fixed\">Fixed to window</option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\">Auto</option>\n<option value=\"cover\">Cover</option>\n<option value=\"contain\">Contain</option>\n</$select>\n\\end\n\nYou can tweak certain aspects of the ''Vanilla'' theme.\n\n! Options\n\n|[[Sidebar layout|$:/themes/tiddlywiki/vanilla/options/sidebarlayout]] |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\">Fixed story, fluid sidebar</option><option value=\"fluid-fixed\">Fluid story, fixed sidebar</option></$select> |\n|[[Sticky titles|$:/themes/tiddlywiki/vanilla/options/stickytitles]]<br>//Causes tiddler titles to \"stick\" to the top of the browser window. Caution: Does not work at all with Chrome, and causes some layout issues in Firefox// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">No</option><option value=\"yes\">Yes</option></$select> |\n\n! Settings\n\n|[[Font family|$:/themes/tiddlywiki/vanilla/settings/fontfamily]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|[[Code font family|$:/themes/tiddlywiki/vanilla/settings/codefontfamily]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|[[Page background image|$:/themes/tiddlywiki/vanilla/settings/backgroundimage]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|[[Page background image attachment |$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment]] |<<backgroundimageattachment-dropdown>> | |\n|[[Page background image size |$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize]] |<<backgroundimagesize-dropdown>> | |\n\n! Sizes\n\n|[[Font size|$:/themes/tiddlywiki/vanilla/metrics/fontsize]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|[[Line height|$:/themes/tiddlywiki/vanilla/metrics/lineheight]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|[[Font size for tiddler body|$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|[[Line height for tiddler body|$:/themes/tiddlywiki/vanilla/metrics/bodylineheight]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|[[Story left position|$:/themes/tiddlywiki/vanilla/metrics/storyleft]]<br>//how far the left margin of the story river<br>(tiddler area) is from the left of the page// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|[[Story top position|$:/themes/tiddlywiki/vanilla/metrics/storytop]]<br>//how far the top margin of the story river<br>is from the top of the page// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|[[Story right|$:/themes/tiddlywiki/vanilla/metrics/storyright]]<br>//how far the left margin of the sidebar <br>is from the left of the page// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|[[Story width|$:/themes/tiddlywiki/vanilla/metrics/storywidth]]<br>//the overall width of the story river// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|[[Tiddler width|$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth]]<br>//within the story river//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|[[Sidebar breakpoint|$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint]]<br>//the minimum page width at which the story<br>river and sidebar will appear side by side// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|[[Sidebar width|$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth]]<br>//the width of the sidebar in fluid-fixed layout// |^<$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 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\\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\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\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\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: pre;\n\twhite-space: pre-wrap;\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    white-space: pre-wrap;\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}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\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/*\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}\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: normal;\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/*\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\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/*\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 {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\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.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\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-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\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\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\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: 300;\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-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\tfill: <<colour tag-foreground>>;\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\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.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.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-search-results {\n\tpadding-top: 14px;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\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.tc-search svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.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: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\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}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/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\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: auto;\n\t}\n\n\">>\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: 28px;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\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.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: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/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.2em;\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}\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-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\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\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\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 input.tc-edit-texteditor, .tc-tiddler-frame textarea.tc-edit-texteditor {\n\twidth: 100%;\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\tmargin: 4px 0 4px 0;\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\n.tc-tiddler-frame input.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\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-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** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/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-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-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-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: 48%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 3px 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n.tc-tiddler-preview-edit {\n\twidth: 48%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\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 {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\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-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/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 foreground>>;\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-language-chooser img {\n\twidth: 2em;\n\tvertical-align: baseline;\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-prompt {\n\tpadding: 0 14px;\t\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}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\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:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\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}\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** 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\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}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\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}\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}\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-buttons button {\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-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\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}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/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** 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: block;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground-colour: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\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 svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-plugin-info-chunk h1 {\n\tfont-size: 1em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk h2 {\n\tfont-size: 0.8em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk div {\n\tfont-size: 0.7em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info img, .tc-plugin-info svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-plugin-info.tc-small-icon img, .tc-plugin-info.tc-small-icon svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\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 1em 1em;\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/*\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: 1px solid <<colour table-border>>;\n}\n\n.tc-chooser-item {\n\tborder: 8px;\n\tpadding: 2px 4px;\n}\n\n.tc-chooser-item a.tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-foreground>>;\n\tbackground-color: <<colour tiddler-link-background>>;\n}\n\n.tc-chooser-item a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\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\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 a {\n\tfont-weight: bold;\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/*\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    text-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    min-width: 100%;\n    min-height: 100%;\n    max-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** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\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/reset": {
            "title": "$:/themes/tiddlywiki/vanilla/reset",
            "type": "text/plain",
            "text": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9.\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `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\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
            "text": "\"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", \"DejaVu Sans\", sans-serif"
        },
        "$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
            "text": "Monaco, Consolas, \"Lucida Console\", \"DejaVu Sans Mono\", 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</$reveal>\n"
        }
    }
}
[img[images/0136m.jpg]]

"""
Though your body be confined
And soft love a prisoner bound,
Yet the beauty of your mind
Neither check nor chain hath found.
Look out nobly, then, and dare
Even the fetters that you wear.
FLETCHER.
"""

[img[images/9136m.jpg]]

ON a soft sunny morning in the genial month of May I made an excursion to
Windsor Castle. It is a place full of storied and poetical associations.
The very external aspect of the proud old pile is enough to inspire high
thought. It rears its irregular walls and massive towers, like a mural
crown around the brow of a lofty ridge, waves its royal banner in the
clouds, and looks down with a lordly air upon the surrounding world.

On this morning, the weather was of that voluptuous vernal kind which
calls forth all the latent romance of a man's temperament, filling his
mind with music, and disposing him to quote poetry and dream of beauty. In
wandering through the magnificent saloons and long echoing galleries of
the castle I passed with indifference by whole rows of portraits of
warriors and statesmen, but lingered in the chamber where hang the
likenesses of the beauties which graced the gay court of Charles the
Second; and as I gazed upon them, depicted with amorous, half-dishevelled
tresses, and the sleepy eye of love, I blessed the pencil of Sir Peter
Lely, which had thus enabled me to bask in the reflected rays of beauty.
In traversing also the "large green courts," with sunshine beaming on the
gray walls and glancing along the velvet turf, my mind was engrossed with
the image of the tender, the gallant, but hapless Surrey, and his account
of his loiterings about them in his stripling days, when enamoured of the
Lady Geraldine&mdash;

"""
"With eyes cast up unto the maiden's tower,
With easie sighs, such as men draw in love."
"""

In this mood of mere poetical susceptibility, I visited the ancient keep
of the castle, where James the First of Scotland, the pride and theme of
Scottish poets and historians, was for many years of his youth detained a
prisoner of state. It is a large gray tower, that has stood the brunt of
ages, and is still in good preservation. It stands on a mound which
elevates it above the other parts of the castle, and a great flight of
steps leads to the interior. In the armory, a Gothic hall furnished with
weapons of various kinds and ages, I was shown a coat of armor hanging
against the wall, which had once belonged to James. Hence I was conducted
up a staircase to a suite of apartments, of faded magnificence, hung with
storied tapestry, which formed his prison, and the scene of that
passionate and fanciful amour, which has woven into the web of his story
the magical hues of poetry and fiction.

[img[images/0138m.jpg]]

The whole history of this amiable but unfortunate prince is highly
romantic. At the tender age of eleven, he was sent from home by his
father, Robert III., and destined for the French court, to be reared under
the eye of the French monarch, secure from the treachery and danger that
surrounded the royal house of Scotland. It was his mishap, in the course
of his voyage, to fall into the hands of the English, and he was detained
prisoner by Henry IV., notwithstanding that a truce existed between the
two countries.

The intelligence of his capture, coming in the train of many sorrows and
disasters, proved fatal to his unhappy father. "The news," we are told,
"was brought to him while at supper, and did so overwhelm him with grief
that he was almost ready to give up the ghost into the hands of the
servants that attended him. But being carried to his bedchamber, he
abstained from all food, and in three days died of hunger and grief at
Rothesay."*

"""
* Buchanan.
"""

James was detained in captivity above eighteen years; but, though deprived
of personal liberty, he was treated with the respect due to his rank. Care
was taken to instruct him in all the branches of useful knowledge
cultivated at that period, and to give him those mental and personal
accomplishments deemed proper for a prince. Perhaps in this respect his
imprisonment was an advantage, as it enabled him to apply himself the more
exclusively to his improvement, and quietly to imbibe that rich fund of
knowledge and to cherish those elegant tastes which have given such a
lustre to his memory. The picture drawn of him in early life by the
Scottish historians is highly captivating, and seems rather the
description of a hero of romance than of a character in real history. He
was well learnt, we are told, "to fight with the sword, to joust, to
tourney, to wrestle, to sing and dance; he was an expert mediciner, right
crafty in playing both of lute and harp, and sundry other instruments of
music, and was expert in grammar, oratory, and poetry."*

"""
* Ballenden's translation of Hector Boyce.
"""

With this combination of manly and delicate accomplishments, fitting him
to shine both in active and elegant life, and calculated to give him an
intense relish for joyous existence, it must have been a severe trial, in
an age of bustle and chivalry, to pass the spring-time of his years in
monotonous captivity. It was the good fortune of James, however, to be
gifted with a powerful poetic fancy, and to be visited in his prison by
the choicest inspirations of the muse. Some minds corrode, and grow
inactive, under the loss of personal liberty; others grow morbid and
irritable; but it is the nature of the poet to become tender and
imaginative in the loneliness of confinement. He banquets upon the honey
of his own thoughts, and, like the captive bird, pours forth his soul in
melody.

"""
Have you not seen the nightingale,
A pilgrim coop'd into a cage,
How doth she chant her wonted tale,
In that her lonely hermitage!
Even there her charming melody doth prove
That all her boughs are trees, her cage a grove.+

+ Roger L'Estrange.
"""

Indeed, it is the divine attribute of the imagination, that it is
irrepressible, unconfinable&mdash;that when the real world is shut out, it
can create a world for itself, and, with a necromantic power, can conjure
up glorious shapes and forms and brilliant visions, to make solitude
populous, and irradiate the gloom of the dungeon. Such was the world of
pomp and pageant that lived round Tasso in his dismal cell at Ferrara,
when he conceived the splendid scenes of his Jerusalem; and we may
consider The King's Quair,* composed by James during his captivity at
Windsor, as another of those beautiful breakings forth of the soul from
the restraint and gloom of the prison-house.

The subject of the poem is his love for the lady Jane Beaufort, daughter
of the Earl of Somerset, and a princess of the blood-royal of England, of
whom he became enamoured in the course of his captivity. What gives it a
peculiar value, is, that it may be considered a transcript of the royal
bard's true feelings, and the story of his real loves and fortunes. It is
not often that sovereigns write poetry or that poets deal in fact. It is
gratifying to the pride of a common man, to find a monarch thus suing, as
it were, for admission into his closet, and seeking to win his favor by
administering to his pleasures. It is a proof of the honest equality of
intellectual competition, which strips off all the trappings of factitious
dignity, brings the candidate down to a level with his fellow-men, and
obliges him to depend on his own native powers for distinction. It is
curious, too, to get at the history of a monarch's heart, and to find the
simple affections of human nature throbbing under the ermine. But James
had learnt to be a poet before he was a king; he was schooled in
adversity, and reared in the company of his own thoughts. Monarchs have
seldom time to parley with their hearts or to meditate their minds into
poetry; and had James been brought up amidst the adulation and gayety of a
court, we should never, in all probability, have had such a poem as the
Quair.

"""
* Quair, an old term for book.
"""

I have been particularly interested by those parts of the poem which
breathe his immediate thoughts concerning his situation, or which are
connected with the apartment in the Tower. They have thus a personal and
local charm, and are given with such circumstantial truth as to make the
reader present with the captive in his prison and the companion of his
meditations.

Such is the account which he gives of his weariness of spirit, and of the
incident which first suggested the idea of writing the poem. It was the
still mid-watch of a clear moonlight night; the stars, he says, were
twinkling as fire in the high vault of heaven, and "Cynthia rinsing her
golden locks in Aquarius." He lay in bed wakeful and restless, and took a
book to beguile the tedious hours. The book he chose was Boetius'
Consolations of Philosophy, a work popular among the writers of that day,
and which had been translated by his great prototype, Chaucer. From the
high eulogium in which he indulges, it is evident this was one of his
favorite volumes while in prison; and indeed it is an admirable text-book
for meditation under adversity. It is the legacy of a noble and enduring
spirit, purified by sorrow and suffering, bequeathing to its successors in
calamity the maxims of sweet morality, and the trains of eloquent but
simple reasoning, by which it was enabled to bear up against the various
ills of life. It is a talisman, which the unfortunate may treasure up in
his bosom, or, like the good King James, lay upon his nightly pillow.

After closing the volume he turns its contents over in his mind, and
gradually falls into a fit of musing on the fickleness of fortune, the
vicissitudes of his own life, and the evils that had overtaken him even in
his tender youth. Suddenly he hears the bell ringing to matins, but its
sound, chiming in with his melancholy fancies, seems to him like a voice
exhorting him to write his story. In the spirit of poetic errantry he
determines to comply with this intimation; he therefore takes pen in hand,
makes with it a sign of the cross to implore a benediction, and sallies
forth into the fairy-land of poetry. There is something extremely fanciful
in all this, and it is interesting as furnishing a striking and beautiful
instance of the simple manner in which whole trains of poetical thought
are sometimes awakened and literary enterprises suggested to the mind.

In the course of his poem, he more than once bewails the peculiar hardness
of his fate, thus doomed to lonely and inactive life, and shut up from the
freedom and pleasure of the world in which the meanest animal indulges
unrestrained. There is a sweetness, however, in his very complaints; they
are the lamentations of an amiable and social spirit at being denied the
indulgence of its kind and generous propensities; there is nothing in them
harsh nor exaggerated; they flow with a natural and touching pathos, and
are perhaps rendered more touching by their simple brevity. They contrast
finely with those elaborate and iterated repinings which we sometimes meet
with in poetry, the effusions of morbid minds sickening under miseries of
their own creating, and venting their bitterness upon an unoffending
world. James speaks of his privations with acute sensibility, but having
mentioned them passes on, as if his manly mind disdained to brood over
unavoidable calamities. When such a spirit breaks forth into complaint,
however brief, we are aware how great must be the suffering that extorts
the murmur. We sympathize with James, a romantic, active, and accomplished
prince, cut off in the lustihood of youth from all the enterprise, the
noble uses, and vigorous delights of life, as we do with Milton, alive to
all the beauties of nature and glories of art, when he breathes forth
brief but deep-toned lamentations over his perpetual blindness.

Had not James evinced a deficiency of poetic artifice, we might almost
have suspected that these lowerings of gloomy reflection were meant as
preparative to the brightest scene of his story, and to contrast with that
refulgence of light and loveliness, that exhilarating accompaniment of
bird and song, and foliage and flower, and all the revel of, the year,
with which he ushers in the lady of his heart. It is this scene, in
particular, which throws all the magic of romance about the old castle
keep. He had risen, he says, at daybreak, according to custom, to escape
from the dreary meditations of a sleepless pillow. "Bewailing in his
chamber thus alone," despairing of all joy and remedy, "for, tired of
thought, and woe-begone," he had wandered to the window to indulge the
captive's miserable solace, of gazing wistfully upon the world from which
he is excluded. The window looked forth upon a small garden which lay at
the foot of the tower. It was a quiet, sheltered spot, adorned with arbors
and green alleys, and protected from the passing gaze by trees and
hawthorn hedges.

"""
Now was there made fast by the tower's wall,
A garden faire, and in the corners set
An arbour green with wandis long and small
Railed about, and so with leaves beset
Was all the place and hawthorn hedges knet,
That lyf* was none, walkyng there forbye,
That might within scarce any wight espye.

So thick the branches and the leves grene,
Beshaded all the alleys that there were,
And midst of every arbour might be seen,
The sharpe, grene, swete juniper,
Growing so fair with branches here and there,
That as it seemed to a lyf without,
The boughs did spread the arbour all about.

And on the small grene twistis+ set
The lytel swete nightingales, and sung
So loud and clear, the hymnis consecrate
Of lovis use, now soft, now loud among,
That all the garden and the wallis rung
Right of their song&mdash;&mdash;

* Lyf, Person.

+ Twistis, small boughs or twigs. NOTE&mdash;The language of the
quotations is generally modernized.
"""

It was the month of May, when every thing was in bloom, and he interprets
the song of the nightingale into the language of his enamoured feeling:

"""
Worship, all ye that lovers be, this May;
For of your bliss the kalends are begun,
And sing with us, Away, winter, away.
Come, summer, come, the sweet season and sun.
"""

As he gazes on the scene, and listens to the notes of the birds, he
gradually relapses into one of those tender and undefinable reveries,
which fill the youthful bosom in this delicious season. He wonders what
this love may be of which he has so often read, and which thus seems
breathed forth in the quickening breath of May, and melting all nature
into ecstasy and song. If it really be so great a felicity, and if it be a
boon thus generally dispensed to the most insignificant beings, why is he
alone cut off from its enjoyments?

"""
Oft would I think, O Lord, what may this be,
That love is of such noble myght and kynde?
Loving his folke, and such prosperitee,
Is it of him, as we in books do find;
May he oure hertes setten* and unbynd:
Hath he upon oure hertes such maistrye?
Or is all this but feynit fantasye?

For giff he be of so grete excellence
That he of every wight hath care and charge,
What have I gilt+ to him, or done offense,
That I am thral'd, and birdis go at large?

* Setten, incline.

+ Gilt, what injury have I done, etc.
"""

In the midst of his musing, as he casts his eye downward, he beholds "the
fairest and the freshest young floure" that ever he had seen. It is the
lovely Lady Jane, walking in the garden to enjoy the beauty of that "fresh
May morrowe." Breaking thus suddenly upon his sight in a moment of
loneliness and excited susceptibility, she at once captivates the fancy of
the romantic prince, and becomes the object of his wandering wishes, the
sovereign of his ideal world.

[img[images/0146m.jpg]]

There is, in this charming scene, an evident resemblance to the early part
of Chaucer's Knight's Tale, where Palamon and Arcite fall in love with
Emilia, whom they see walking in the garden of their prison. Perhaps the
similarity of the actual fact to the incident which he had read in Chaucer
may have induced James to dwell on it in his poem. His description of the
Lady Jane is given in the picturesque and minute manner of his master,
and, being doubtless taken from the life, is a perfect portrait of a
beauty of that day. He dwells with the fondness of a lover on every
article of her apparel, from the net of pearl, splendent with emeralds and
sapphires, that confined her golden hair, even to the "goodly chaine of
small orfeverye"* about her neck, whereby there hung a ruby in shape of a
heart, that seemed, he says, like a spark of fire burning upon her white
bosom. Her dress of white tissue was looped up to enable her to walk with
more freedom. She was accompanied by two female attendants, and about her
sported a little hound decorated with bells, probably the small Italian
hound of exquisite symmetry which was a parlor favorite and pet among the
fashionable dames of ancient times. James closes his description by a
burst of general eulogium:

"""
In her was youth, beauty, with humble port,
Bounty, richesse, and womanly feature:
God better knows than my pen can report,
Wisdom, largesse,+ estate,++ and cunning&amp; sure.
In every point so guided her measure,
In word, in deed, in shape, in countenance,
That nature might no more her child advance.

* Wrought gold.

+ Largesse, bounty.

++ Estate, dignity.

&amp; Cunning, discretion.
"""

The departure of the Lady Jane from the garden puts an end to this
transient riot of the heart. With her departs the amorous illusion that
had shed a temporary charm over the scene of his captivity, and he
relapses into loneliness, now rendered tenfold more intolerable by this
passing beam of unattainable beauty. Through the long and weary day he
repines at his unhappy lot, and when evening approaches, and Phoebus, as
he beautifully expresses it, had "bade farewell to every leaf and flower,"
he still lingers at the window, and, laying his head upon the cold stone,
gives vent to a mingled flow of love and sorrow, until, gradually lulled
by the mute melancholy of the twilight hour, he lapses, "half-sleeping,
half swoon," into a vision, which occupies the remainder of the poem, and
in which is allegorically shadowed out the history of his passion.

[img[images/0148m.jpg]]

When he wakes from his trance, he rises from his stony pillow, and, pacing
his apartment, full of dreary reflections, questions his spirit, whither
it has been wandering; whether, indeed, all that has passed before his
dreaming fancy has been conjured up by preceding circumstances, or whether
it is a vision intended to comfort and assure him in his despondency. If
the latter, he prays that some token may be sent to confirm the promise of
happier days, given him in his slumbers. Suddenly, a turtledove of the
purest whiteness comes flying in at the window, and alights upon his hand,
bearing in her bill a branch of red gilliflower, on the leaves of which is
written, in letters of gold, the following sentence:

"""
Awake! Awake! I bring, lover, I bring
The newis glad, that blissful is and sure
Of thy comfort; now laugh, and play, and sing,
For in the heaven decretit is thy cure.
"""

He receives the branch with mingled hope and dread; reads it with rapture;
and this he says was the first token of his succeeding happiness. Whether
this is a mere poetic fiction, or whether the Lady Jane did actually send
him a token of her favor in this romantic way, remains to be determined
according to the fate or fancy of the reader. He concludes his poem by
intimating that the promise conveyed in the vision and by the flower, is
fulfilled by his being restored to liberty, and made happy in the
possession of the sovereign of his heart.

Such is the poetical account given by James of his love adventures in
Windsor Castle. How much of it is absolute fact, and how much the
embellishment of fancy, it is fruitless to conjecture; let us not,
however, reject every romantic incident as incompatible with real life,
but let us sometimes take a poet at his word. I have noticed merely those
parts of the poem immediately connected with the tower, and have passed
over a large part which was in the allegorical vein, so much cultivated at
that day. The language, of course, is quaint and antiquated, so that the
beauty of many of its golden phrases will scarcely be perceived at the
present day, but it is impossible not to be charmed with the genuine
sentiment, the delightful artlessness and urbanity, which prevail
throughout it. The descriptions of Nature too, with which it is
embellished, are given with a truth, a discrimination, and a freshness,
worthy of the most cultivated periods of the art.

As an amatory poem, it is edifying, in these days of coarser thinking, to
notice the nature, refinement, and exquisite delicacy which pervade it;
banishing every gross thought, or immodest expression, and presenting
female loveliness, clothed in all its chivalrous attributes of almost
supernatural purity and grace.

James flourished nearly about the time of Chaucer and Gower, and was
evidently an admirer and studier of their writings. Indeed, in one of his
stanzas he acknowledges them as his masters; and in some parts of his poem
we find traces of similarity to their productions, more especially to
those of Chaucer. There are always, however, general features of
resemblance in the works of contemporary authors, which are not so much
borrowed from each other as from the times. Writers, like bees, toll their
sweets in the wide world; they incorporate with their own conceptions, the
anecdotes and thoughts current in society; and thus each generation has
some features in common, characteristic of the age in which it lives.

James belongs to one of the most brilliant eras of our literary history,
and establishes the claims of his country to a participation in its
primitive honors. Whilst a small cluster of English writers are constantly
cited as the fathers of our verse, the name of their great Scottish
compeer is apt to be passed over in silence; but he is evidently worthy of
being enrolled in that little constellation of remote but never-failing
luminaries who shine in the highest firmament of literature, and who, like
morning stars, sang together at the bright dawning of British poesy.

Such of my readers as may not be familiar with Scottish history (though
the manner in which it has of late been woven with captivating fiction has
made it a universal study) may be curious to learn something of the
subsequent history of James and the fortunes of his love. His passion for
the Lady Jane, as it was the solace of his captivity, so it facilitated
his release, it being imagined by the Court that a connection with the
blood-royal of England would attach him to its own interests. He was
ultimately restored to his liberty and crown, having previously espoused
the Lady Jane, who accompanied him to Scotland, and made him a most tender
and devoted wife.

He found his kingdom in great confusion, the feudal chieftains having
taken advantage of the troubles and irregularities of a long interregnum,
to strengthen themselves in their possessions, and place themselves above
the power of the laws. James sought to found the basis of his power in the
affections of his people. He attached the lower orders to him by the
reformation of abuses, the temperate and equable administration of
justice, the encouragement of the arts of peace, and the promotion of
every thing that could diffuse comfort, competency, and innocent enjoyment
through the humblest ranks of society. He mingled occasionally among the
common people in disguise; visited their firesides; entered into their
cares, their pursuits, and their amusements; informed himself of the
mechanical arts, and how they could best be patronized and improved; and
was thus an all-pervading spirit, watching with a benevolent eye over the
meanest of his subjects. Having in this generous manner made himself
strong in the hearts of the common people, he turned himself to curb the
power of the factious nobility; to strip them of those dangerous
immunities which they had usurped; to punish such as had been guilty of
flagrant offences; and to bring the whole into proper obedience to the
Crown. For some time they bore this with outward submission, but with
secret impatience and brooding resentment. A conspiracy was at length
formed against his life, at the head of which was his own uncle, Robert
Stewart, Earl of Athol, who, being too old himself for the perpetration of
the deed of blood, instigated his grandson, Sir Robert Stewart, together
with Sir Robert Graham, and others of less note, to commit the deed. They
broke into his bedchamber at the Dominican convent near Perth, where he
was residing, and barbarously murdered him by oft-repeated wounds. His
faithful queen, rushing to throw her tender body between him and the
sword, was twice wounded in the ineffectual attempt to shield him from the
assassin; and it was not until she had been forcibly torn from his person,
that the murder was accomplished.

It was the recollection of this romantic tale of former times, and of the
golden little poem, which had its birthplace in this tower, that made me
visit the old pile with more than common interest. The suit of armor
hanging up in the hall, richly gilt and embellished, as if to figure in
the tourney, brought the image of the gallant and romantic prince vividly
before my imagination. I paced the deserted chambers where he had composed
his poem; I leaned upon the window, and endeavored to persuade myself it
was the very one where he had been visited by his vision; I looked out
upon the spot where he had first seen the Lady Jane. It was the same
genial and joyous month; the birds were again vying with each other in
strains of liquid melody; every thing was bursting into vegetation, and
budding forth the tender promise of the year. Time, which delights to
obliterate the sterner memorials of human pride, seems to have passed
lightly over this little scene of poetry and love, and to have withheld
his desolating hand. Several centuries have gone by, yet the garden still
flourishes at the foot of the tower. It occupies what was once the moat of
the keep; and, though some parts have been separated by dividing walls,
yet others have still their arbors and shaded walks, as in the days of
James, and the whole is sheltered, blooming, and retired. There is a charm
about the spot that has been printed by the footsteps of departed beauty,
and consecrated by the inspirations of the poet, which is heightened,
rather than impaired, by the lapse of ages. It is, indeed, the gift of
poetry, to hallow every place in which it moves; to breathe around nature
an odor more exquisite than the perfume of the rose, and to shed over it a
tint more magical than the blush of morning.

Others may dwell on the illustrious deeds of James as a warrior and a
legislator; but I have delighted to view him merely as the companion of
his fellow-men, the benefactor of the human heart, stooping from his high
estate to sow the sweet flowers of poetry and song in the paths of common
life. He was the first to cultivate the vigorous and hardy plant of
Scottish genius, which has since become so prolific of the most wholesome
and highly flavored fruit. He carried with him into the sterner regions of
the north, all the fertilizing arts of southern refinement. He did every
thing in his power to win his countrymen to the gay, the elegant, and
gentle arts, which soften and refine the character of a people, and
wreathe a grace round the loftiness of a proud and warlike spirit. He
wrote many poems, which, unfortunately for the fulness of his fame, are
now lost to the world; one, which is still preserved, called "Christ's
Kirk of the Green," shows how diligently he had made himself acquainted
with the rustic sports and pastimes, which constitute such a source of
kind and social feeling among the Scottish peasantry; and with what simple
and happy humor he could enter into their enjoyments. He contributed
greatly to improve the national music; and traces of his tender sentiment
and elegant taste are said to exist in those witching airs, still piped
among the wild mountains and lonely glens of Scotland. He has thus
connected his image with whatever is most gracious and endearing in the
national character; he has embalmed his memory in song, and floated his
name to after-ages in the rich streams of Scottish melody. The
recollection of these things was kindling at my heart, as I paced the
silent scene of his imprisonment. I have visited Vaucluse with as much
enthusiasm as a pilgrim would visit the shrine at Loretto; but I have
never felt more poetical devotion than when contemplating the old tower
and the little garden at Windsor, and musing over the romantic loves of
the Lady Jane, and the Royal Poet of Scotland.

[img[images/0154m.jpg]]
"""
* Part of a sketch omitted in the preceding editions.
"""

[img[images/9174m.jpg]]

IN a preceding paper I have spoken of an English Sunday in the country and
its tranquillizing effect upon the landscape; but where is its sacred
influence more strikingly apparent than in the very heart of that great
Babel, London? On this sacred day the gigantic monster is charmed into
repose. The intolerable din and struggle of the week are at an end. The
shops are shut. The fires of forges and manufactories are extinguished,
and the sun, no longer obscured by murky clouds of smoke, pours down a
sober yellow radiance into the quiet streets. The few pedestrians we meet,
instead of hurrying forward with anxious countenances, move leisurely
along; their brows are smoothed from the wrinkles of business and care;
they have put on their Sunday looks and Sunday manners with their Sunday
clothes, and are cleansed in mind as well as in person.

And now the melodious clangor of bells from church towers summons their
several flocks to the fold. Forth issues from his mansion the family of
the decent tradesman, the small children in the advance; then the citizen
and his comely spouse, followed by the grown-up daughters, with small
morocco-bound prayer-books laid in the folds of their
pocket-handkerchiefs. The housemaid looks after them from the window,
admiring the finery of the family, and receiving, perhaps, a nod and smile
from her young mistresses, at whose toilet she has assisted.

Now rumbles along the carriage of some magnate of the city, peradventure
an alderman or a sheriff, and now the patter of many feet announces it
procession of charity scholars in uniforms of antique cut, and each with a
prayer-book under his arm.

The ringing of bells is at an end; the rumbling of the carriage has
ceased; the pattering of feet is heard no more; the flocks are folded in
ancient churches, cramped up in by-lanes and corners of the crowded city,
where the vigilant beadle keeps watch, like the shepherd's dog, round the
threshold of the sanctuary. For a time everything is hushed, but soon is
heard the deep, pervading sound of the organ, rolling and vibrating
through the empty lanes and courts, and the sweet chanting of the choir
making them resound with melody and praise. Never have I been more
sensible of the sanctifying effect of church music than when I have heard
it thus poured forth, like a river of joy, through the inmost recesses of
this great metropolis, elevating it, as it were, from all the sordid
pollutions of the week, and bearing the poor world-worn soul on a tide of
triumphant harmony to heaven.

The morning service is at an end. The streets are again alive with the
congregations returning to their homes, but soon again relapse into
silence. Now comes on the Sunday dinner, which, to the city tradesman, is
a meal of some importance. There is more leisure for social enjoyment at
the board. Members of the family can now gather together, who are
separated by the laborious occupations of the week. A school-boy may be
permitted on that day to come to the paternal home; an old friend of the
family takes his accustomed Sunday seat at the board, tells over his
well-known stories, and rejoices young and old with his well-known jokes.

On Sunday afternoon the city pours forth its lesions to breathe the fresh
air and enjoy the sunshine of the parks and rural environs. Satirists may
say what they please about the rural enjoyments of a London citizen on
Sunday, but to me there is something delightful in beholding the poor
prisoner of the crowded and dusty city enabled thus to come forth once a
week and throw himself upon the green bosom of nature. He is like a child
restored to the mother's breast; and they who first spread out these noble
parks and magnificent pleasure-grounds which surround this huge metropolis
have done at least as much for its health and morality as if they had
expended the amount of cost in hospitals, prisons, and penitentiaries.
[img[images/0291m.jpg]]

"""
Dark and dull night, flie hence away,
And give the honor to this day
That sees December turn'd to May.
.  .  .  .  .  .  .
Why does the chilling winter's morne
Smile like a field beset with corn?
Or smell like to a meade new-shorne,
Thus on the sudden?&mdash;come and see
The cause why things thus fragrant be.
HERRICK.
"""

[img[images/9292m.jpg]]

WHEN I woke the next morning it seemed as if all the events of the
preceding evening had been a dream, and nothing but the identity of the
ancient chamber convinced me of their reality. While I lay musing on my
pillow I heard the sound of little feet pattering outside of the door, and
a whispering consultation. Presently a choir of small voices chanted forth
an old Christmas carol, the burden of which was&mdash;

"""
Rejoice, our Saviour he was born
On Christmas Day in the morning.
"""

I rose softly, slipt on my clothes, opened the door suddenly, and beheld
one of the most beautiful little fairy groups that a painter could
imagine. It consisted of a boy and two girls, the eldest not more than
six, and lovely as seraphs. They were going the rounds of the house and
singing at every chamber door, but my sudden appearance frightened them
into mute bashfulness. They remained for a moment playing on their lips
with their fingers, and now and then stealing a shy glance from under
their eyebrows, until, as if by one impulse, they scampered away, and as
they turned an angle of the gallery I heard them laughing in triumph at
their escape.

[img[images/0293m.jpg]]

Everything conspired to produce kind and happy feelings in this stronghold
of old-fashioned hospitality. The window of my chamber looked out upon
what in summer would have been a beautiful landscape. There was a sloping
lawn, a fine stream winding at the foot of it, and a tract of park beyond,
with noble clumps of trees and herds of deer. At a distance was a neat
hamlet, with the smoke from the cottage chimneys hanging over it, and a
church with its dark spire in strong relief against the clear cold sky.
The house was surrounded with evergreens, according to the English custom,
which would have given almost an appearance of summer; but the morning was
extremely frosty; the light vapor of the preceding evening had been
precipitated by the cold, and covered all the trees and every blade of
grass with its fine crystalizations. The rays of a bright morning sun had
a dazzling effect among the glittering foliage. A robin, perched upon the
top of a mountain-ash that hung its clusters of red berries just before my
window, was basking himself in the sunshine and piping a few querulous
notes, and a peacock was displaying all the glories of his train and
strutting with the pride and gravity of a Spanish grandee on the terrace
walk below.

I had scarcely dressed myself when a servant appeared to invite me to
family prayers. He showed me the way to a small chapel in the old wing of
the house, where I found the principal part of the family already
assembled in a kind of gallery furnished with cushions, hassocks, and
large prayer-books; the servants were seated on benches below. The old
gentleman read prayers from a desk in front of the gallery, and Master
Simon acted as clerk and made the responses; and I must do him the justice
to say that he acquitted himself with great gravity and decorum.

The service was followed by a Christmas carol, which Mr. Bracebridge
himself had constructed from a poem of his favorite author, Herrick, and
it had been adapted to an old church melody by Master Simon. As there were
several good voices among the household, the effect was extremely
pleasing, but I was particularly gratified by the exaltation of heart and
sudden sally of grateful feeling with which the worthy squire delivered
one stanza, his eye glistening and his voice rambling out of all the
bounds of time and tune:

"""
"'Tis Thou that crown'st my glittering hearth
With guiltless mirth,
And givest me Wassaile bowles to drink
Spiced to the brink;
Lord, 'tis Thy plenty-dropping hand
That soiles my land:
And giv'st me for my bushell sowne,
Twice ten for one."
"""

I afterwards understood that early morning service was read on every
Sunday and saint's day throughout the year, either by Mr. Bracebridge or
by some member of the family. It was once almost universally the case at
the seats of the nobility and gentry of England, and it is much to be
regretted that the custom is falling into neglect; for the dullest
observer must be sensible of the order and serenity prevalent in those
households where the occasional exercise of a beautiful form of worship in
the morning gives, as it were, the keynote to every temper for the day and
attunes every spirit to harmony.

Our breakfast consisted of what the squire denominated true old English
fare. He indulged in some bitter lamentations over modern breakfasts of
tea and toast, which he censured as among the causes of modern effeminacy
and weak nerves and the decline of old English heartiness; and, though he
admitted them to his table to suit the palates of his guests, yet there
was a brave display of cold meats, wine, and ale on the sideboard.

After breakfast I walked about the grounds with Frank Bracebridge and
Master Simon, or Mr. Simon, as he was called by everybody but the squire.
We were escorted by a number of gentlemanlike dogs, that seemed loungers
about the establishment, from the frisking spaniel to the steady old
stag-hound, the last of which was of a race that had been in the family
time out of mind; they were all obedient to a dog-whistle which hung to
Master Simon's buttonhole, and in the midst of their gambols would glance
an eye occasionally upon a small switch he carried in his hand.

The old mansion had a still more venerable look in the yellow sunshine
than by pale moonlight; and I could not but feel the force of the squire's
idea that the formal terraces, heavily moulded balustrades, and clipped
yew trees carried with them an air of proud aristocracy. There appeared to
be an unusual number of peacocks about the place, and I was making some
remarks upon what I termed a flock of them that were basking under a sunny
wall, when I was gently corrected in my phraseology by Master Simon, who
told me that according to the most ancient and approved treatise on
hunting I must say a muster of peacocks. "In the same way," added he, with
a slight air of pedantry, "we say a flight of doves or swallows, a bevy of
quails, a herd of deer, of wrens, or cranes, a skulk of foxes, or a
building of rooks." He went on to inform me that, according to Sir Anthony
Fitzherbert, we ought to ascribe to this bird "both understanding and
glory; for, being praised, he will presently set up his tail, chiefly
against the sun, to the intent you may the better behold the beauty
thereof. But at the fall of the leaf, when his tail falleth, he will mourn
and hide himself in corners till his tail come again as it was."

I could not help smiling at this display of small erudition on so
whimsical a subject; but I found that the peacocks were birds of some
consequence at the hall, for Frank Bracebridge informed me that they were
great favorites with his father, who was extremely careful to keep up the
breed; partly because they belonged to chivalry, and were in great request
at the stately banquets of the olden time, and partly because they had a
pomp and magnificence about them highly becoming an old family mansion.
Nothing, he was accustomed to say, had an air of greater state and dignity
than a peacock perched upon an antique stone balustrade.

Master Simon had now to hurry off, having an appointment at the parish
church with the village choristers, who were to perform some music of his
selection. There was something extremely agreeable in the cheerful flow of
animal spirits of the little man; and I confess I had been somewhat
surprised at his apt quotations from authors who certainly were not in the
range of every-day reading. I mentioned this last circumstance to Frank
Bracebridge, who told me with a smile that Master Simon's whole stock of
erudition was confined to some half a dozen old authors, which the squire
had put into his hands, and which he read over and over whenever he had a
studious fit, as he sometimes had on a rainy day or a long winter evening.
Sir Anthony Fitzherbert's Book of Husbandry, Markham's Country
Contentments, the Tretyse of Hunting, by Sir Thomas Cockayne, Knight,
Isaac Walton's Angler, and two or three more such ancient worthies of the
pen were his standard authorities; and, like all men who know but a few
books, he looked up to them with a kind of idolatry and quoted them on all
occasions. As to his songs, they were chiefly picked out of old books in
the squire's library, and adapted to tunes that were popular among the
choice spirits of the last century. His practical application of scraps of
literature, however, had caused him to be looked upon as a prodigy of
book-knowledge by all the grooms, huntsmen, and small sportsmen of the
neighborhood.

While we were talking we heard the distant toll of the village bell, and I
was told that the squire was a little particular in having his household
at church on a Christmas morning, considering it a day of pouring out of
thanks and rejoicing; for, as old Tusser observed,&mdash;

"""
"At Christmas be merry, and thankful withal,
And feast thy poor neighbors, the great with the small."
"""

"If you are disposed to go to church," said Frank Bracebridge, "I can
promise you a specimen of my cousin Simon's musical achievements. As the
church is destitute of an organ, he has formed a band from the village
amateurs, and established a musical club for their improvement; he has
also sorted a choir, as he sorted my father's pack of hounds, according to
the directions of Jervaise Markham in his Country Contentments: for the
bass he has sought out all the 'deep, solemn mouths,' and for the tenor
the 'loud-ringing mouths,' among the country bumpkins, and for
'sweet-mouths,' he has culled-with curious taste among the prettiest
lasses in the neighborhood; though these last, he affirms, are the most
difficult to keep in tune, your pretty female singer being exceedingly
wayward and capricious, and very liable to accident."

[img[images/0299m.jpg]]

As the morning, though frosty, was remarkably fine and clear, the most of
the family walked to the church, which was a very old building of gray
stone, and stood near a village about half a mile from the park gate.
Adjoining it was a low snug parsonage which seemed coeval with the church.
The front of it was perfectly matted with a yew tree that had been trained
against its walls, through the dense foliage of which apertures had been
formed to admit light into the small antique lattices. As we passed this
sheltered nest the parson issued forth and preceded us.

I had expected to see a sleek well-conditioned pastor, such as is often
found in a snug living in the vicinity of a rich patron's table, but I was
disappointed. The parson was a little, meagre, black-looking man, with a
grizzled wig that was too wide and stood off from each ear; so that his
head seemed to have shrunk away within it, like a dried filbert in its
shell. He wore a rusty coat, with great skirts and pockets that would have
held the church Bible and prayer-book: and his small legs seemed still
smaller from being planted in large shoes decorated with enormous buckles.

I was informed by Frank Bracebridge that the parson had been a chum of his
father's at Oxford, and had received this living shortly after the latter
had come to his estate. He was a complete black-letter hunter, and would
scarcely read a work printed in the Roman character. The editions of
Caxton and Wynkyn de Worde were his delight, and he was indefatigable in
his researches after such old English writers as have fallen into oblivion
from their worthlessness. In deference, perhaps, to the notions of Mr.
Bracebridge he had made diligent investigations into the festive rites and
holiday customs of former times, and had been as zealous in the inquiry as
if he had been a boon companion; but it was merely with that plodding
spirit with which men of adust temperament follow up any track of study,
merely because it is denominated learning; indifferent to its intrinsic
nature, whether it be the illustration of the wisdom or of the ribaldry
and obscenity of antiquity. He had pored over these old volumes so
intensely that they seemed to have been reflected into his countenance;
which, if the face be indeed an index of the mind, might be compared to a
title-page of black-letter.

On reaching the church-porch we found the parson rebuking the gray-headed
sexton for having used mistletoe among the greens with which the church
was decorated. It was, he observed, an unholy plant, profaned by having
been used by the Druids in their mystic ceremonies; and, though it might
be innocently employed in the festive ornamenting of halls and kitchens,
yet it had been deemed by the Fathers of the Church as unhallowed and
totally unfit for sacred purposes. So tenacious was he on this point that
the poor sexton was obliged to strip down a great part of the humble
trophies of his taste before the parson would consent to enter upon the
service of the day.

The interior of the church was venerable, but simple; on the walls were
several mural monuments of the Bracebridges, and just beside the altar was
a tomb of ancient workmanship, on which lay the effigy of a warrior in
armor with his legs crossed, a sign of his having been a crusader. I was
told it was one of the family who had signalized himself in the Holy Land,
and the same whose picture hung over the fireplace in the hall.

During service Master Simon stood up in the pew and repeated the responses
very audibly, evincing that kind of ceremonious devotion punctually
observed by a gentleman of the old school and a man of old family
connections. I observed too that he turned over the leaves of a folio
prayer-book with something of a flourish; possibly to show off an enormous
seal-ring which enriched one of his fingers and which had the look of a
family relic. But he was evidently most solicitous about the musical part
of the service, keeping his eye fixed intently on the choir, and beating
time with much gesticulation and emphasis.

The orchestra was in a small gallery, and presented a most whimsical
grouping of heads piled one above the other, among which I particularly
noticed that of the village tailor, a pale fellow with a retreating
forehead and chin, who played on the clarinet, and seemed to have blown
his face to a point; and there was another, a short pursy man, stooping
and laboring at a bass-viol, so as to show nothing but the top of a round
bald head, like the egg of an ostrich. There were two or three pretty
faces among the female singers, to which the keen air of a frosty morning
had given a bright rosy tint; but the gentlemen choristers had evidently
been chosen, like old Cremona fiddles, more for tone than looks; and as
several had to sing from the same book, there were clusterings of odd
physiognomies not unlike those groups of cherubs we sometimes see on
country tombstones.

The usual services of the choir were managed tolerably well, the vocal
parts generally lagging a little behind the instrumental, and some
loitering fiddler now and then making up for lost time by travelling over
a passage with prodigious celerity and clearing more bars than the keenest
fox-hunter to be in at the death. But the great trial was an anthem that
had been prepared and arranged by Master Simon, and on which he had
founded great expectation. Unluckily, there was a blunder at the very
outset: the musicians became flurried; Master Simon was in a fever;
everything went on lamely and irregularly until they came to a chorus
beginning, "Now let us sing with one accord," which seemed to be a signal
for parting company: all became discord and confusion: each shifted for
himself, and got to the end as well&mdash;or, rather, as soon&mdash;as he
could, excepting one old chorister in a pair of horn spectacles bestriding
and pinching a long sonorous nose, who happened to stand a little apart,
and, being wrapped up in his own melody, kept on a quavering course,
wriggling his head, ogling his book, and winding all up by a nasal solo of
at least three bars' duration.

The parson gave us a most erudite sermon on the rites and ceremonies of
Christmas, and the propriety of observing it not merely as a day of
thanksgiving but of rejoicing, supporting the correctness of his opinions
by the earliest usages of the Church, and enforcing them by the
authorities of Theophilus of Caesarea, St. Cyprian, St. Chrysostom, St.
Augustine, and a cloud more of saints and fathers, from whom he made
copious quotations. I was a little at a loss to perceive the necessity of
such a mighty array of forces to maintain a point which no one present
seemed inclined to dispute; but I soon found that the good man had a
legion of ideal adversaries to contend with, having in the course of his
researches on the subject of Christmas got completely embroiled in the
sectarian controversies of the Revolution, when the Puritans made such a
fierce assault upon the ceremonies of the Church, and poor old Christmas
was driven out of the land by proclamation of Parliament.* The worthy
parson lived but with times past, and knew but little of the present.

Shut up among worm-eaten tomes in the retirement of his antiquated little
study, the pages of old times were to him as the gazettes of the day,
while the era of the Revolution was mere modern history. He forgot that
nearly two centuries had elapsed since the fiery persecution of poor
mince-pie throughout the land; when plum porridge was denounced as "mere
popery," and roast beef as anti-christian, and that Christmas had been
brought in again triumphantly with the merry court of King Charles at the
Restoration. He kindled into warmth with the ardor of his contest and the
host of imaginary foes with whom he had to combat; he had a stubborn
conflict with old Prynne and two or three other forgotten champions of the
Roundheads on the subject of Christmas festivity; and concluded by urging
his hearers, in the most solemn and affecting manner, to stand to the
traditional customs of their fathers and feast and make merry on this
joyful anniversary of the Church.

"""
* From the "Flying Eagle," a small gazette, published
December 24, 1652: "The House spent much time this day about
the business of the Navy, for settling the affairs at sea,
and before they rose, were presented with a terrible
remonstrance against Christmas day, grounded upon divine
Scriptures, 2 Cor. v. 16; I Cor. xv. 14, 17; and in honor of
the Lord's Day, grounded upon these Scriptures, John xx. I;
Rev. i. 10; Psalms cxviii. 24; Lev. xxiii. 7, 11; Mark xv.
8; Psalms lxxxiv. 10, in which Christmas is called Anti-
christ's masse, and those Masse-mongers and Papists who
observe it, etc. In consequence of which parliament spent
some time in consultation about the abolition of Christmas
day, passed orders to that effect, and resolved to sit on
the following day, which was commonly called Christmas day."
"""

I have seldom known a sermon attended apparently with more immediate
effects, for on leaving the church the congregation seemed one and all
possessed with the gayety of spirit so earnestly enjoined by their pastor.
The elder folks gathered in knots in the churchyard, greeting and shaking
hands, and the children ran about crying Ule! Ule! and repeating some
uncouth rhymes,* which the parson, who had joined us, informed me had been
handed down from days of yore. The villagers doffed their hats to the
squire as he passed, giving him the good wishes of the season with every
appearance of heartfelt sincerity, and were invited by him to the hall to
take something to keep out the cold of the weather; and I heard blessings
uttered by several of the poor, which convinced me that, in the midst of
his enjoyments, the worthy old cavalier had not forgotten the true
Christmas virtue of charity.

"""
* "Ule! Ule!
Three puddings in a pule;
Crack nuts and cry ule!"
"""

[img[images/0305m.jpg]]

On our way homeward his heart seemed overflowed with generous and happy
feelings. As we passed over a rising ground which commanded something of a
prospect, the sounds of rustic merriment now and then reached our ears:
the squire paused for a few moments and looked around with an air of
inexpressible benignity. The beauty of the day was of itself sufficient to
inspire philanthropy. Notwithstanding the frostiness of the morning the
sun in his cloudless journey had acquired sufficient power to melt away
the thin covering of snow from every southern declivity, and to bring out
the living green which adorns an English landscape even in mid-winter.
Large tracts of smiling verdure contrasted with the dazzling whiteness of
the shaded slopes and hollows. Every sheltered bank on which the broad
rays rested yielded its silver rill of cold and limpid water, glittering
through the dripping grass, and sent up slight exhalations to contribute
to the thin haze that hung just above the surface of the earth. There was
something truly cheering in this triumph of warmth and verdure over the
frosty thraldom of winter; it was, as the squire observed, an emblem of
Christmas hospitality breaking through the chills of ceremony and
selfishness and thawing every heart into a flow. He pointed with pleasure
to the indications of good cheer reeking from the chimneys of the
comfortable farm-houses and low thatched cottages. "I love," said he, "to
see this day well kept by rich and poor; it is a great thing to have one
day in the year, at least, when you are sure of being welcome wherever you
go, and of having, as it were, the world all thrown open to you; and I am
almost disposed to join with Poor Robin in his malediction on every
churlish enemy to this honest festival:

"""
"'Those who at Christmas do repine,
And would fain hence dispatch him,
May they with old Duke Humphry dine,
Or else may Squire Ketch catch'em.'"
"""

The squire went on to lament the deplorable decay of the games and
amusements which were once prevalent at this season among the lower orders
and countenanced by the higher, when the old halls of castles and
manor-houses were thrown open at daylight; when the tables were covered
with brawn and beef and humming ale; when the harp and the carol resounded
all day long; and when rich and poor were alike welcome to enter and make
merry.* "Our old games and local customs," said he, "had a great effect in
making the peasant fond of his home, and the promotion of them by the
gentry made him fond of his lord. They made the times merrier and kinder
and better, and I can truly say, with one of our old poets,

"""
"'I like them well: the curious preciseness
And all-pretended gravity of those
That seek to banish hence these harmless sports,
Have thrust away much ancient honesty.'"
"""

"The nation," continued he, "is altered; we have almost lost our simple
true-hearted peasantry. They have broken asunder from the higher classes,
and seem to think their interests are separate. They have become too
knowing, and begin to read newspapers, listen to ale-house politicians,
and talk of reform. I think one mode to keep them in good-humor in these
hard times would be for the nobility and gentry to pass more time on their
estates, mingle more among the country-people, and set the merry old
English games going again."

"""
* "An English gentleman, at the opening of the great day&mdash;
i.e. on Christmas Day in the morning&mdash;had all his tenants
and neighbors enter his hall by daybreak. The strong beer
was broached, and the black-jacks went plentifully about,
with toast, sugar and nutmeg, and good Cheshire cheese. The
Hackin (the great sausage) must be boiled by daybreak, or
else two young men must take the maiden (i.e. the cook) by
the arms and run her round the market-place till she is
shamed of her laziness."&mdash;Round about our Sea-Coal Fire.
"""

Such was the good squire's project for mitigating public discontent: and,
indeed, he had once attempted to put his doctrine in practice, and a few
years before had kept open house during the holidays in the old style. The
country-people, however, did not understand how to play their parts in the
scene of hospitality; many uncouth circumstances occurred; the manor was
overrun by all the vagrants of the country, and more beggars drawn into
the neighborhood in one week than the parish officers could get rid of in
a year. Since then he had contented himself with inviting the decent part
of the neighboring peasantry to call at the hall on Christmas Day, and
with distributing beef, and bread, and ale among the poor, that they might
make merry in their own dwellings.

We had not been long home when the sound of music was heard from a
distance. A band of country lads, without coats, their shirt-sleeves
fancifully tied with ribbons, their hats decorated with greens, and clubs
in their hands, was seen advancing up the avenue, followed by a large
number of villagers and peasantry. They stopped before the hall door,
where the music struck up a peculiar air, and the lads performed a curious
and intricate dance, advancing, retreating, and striking their clubs
together, keeping exact time to the music; while one, whimsically crowned
with a fox's skin, the tail of which flaunted down his back, kept capering
round the skirts of the dance and rattling a Christmas box with many antic
gesticulations.

The squire eyed this fanciful exhibition with great interest and delight,
and gave me a full account of its origin, which he traced to the times
when the Romans held possession of the island, plainly proving that this
was a lineal descendant of the sword dance of the ancients. "It was now,"
he said, "nearly extinct, but he had accidentally met with traces of it in
the neighborhood, and had encouraged its revival; though, to tell the
truth, it was too apt to be followed up by the rough cudgel play and
broken heads in the evening."

After the dance was concluded the whole party was entertained with brawn
and beef and stout home-brewed. The squire himself mingled among the
rustics, and was received with awkward demonstrations of deference and
regard. It is true I perceived two or three of the younger peasants, as
they were raising their tankards to their mouths, when the squire's back
was turned making something of a grimace, and giving each other the wink;
but the moment they caught my eye they pulled grave faces and were
exceedingly demure. With Master Simon, however, they all seemed more at
their ease. His varied occupations and amusements had made him well known
throughout the neighborhood. He was a visitor at every farmhouse and
cottage, gossiped with the farmers and their wives, romped with their
daughters, and, like that type of a vagrant bachelor, the humblebee,
tolled the sweets from all the rosy lips of the country round.

The bashfulness of the guests soon gave way before good cheer and
affability. There is something genuine and affectionate in the gayety of
the lower orders when it is excited by the bounty and familiarity of those
above them; the warm glow of gratitude enters into their mirth, and a kind
word or a small pleasantry frankly uttered by a patron gladdens the heart
of the dependant more than oil and wine. When the squire had retired the
merriment increased, and there was much joking and laughter, particularly
between Master Simon and a hale, ruddy-faced, white-headed farmer who
appeared to be the wit of the village; for I observed all his companions
to wait with open months for his retorts, and burst into a gratuitous
laugh before they could well understand them.

The whole house indeed seemed abandoned to merriment: as I passed to my
room to dress for dinner, I heard the sound of music in a small court,
and, looking through a window that commanded it, I perceived a band of
wandering musicians with pandean pipes and tambourine; a pretty coquettish
housemaid was dancing a jig with a smart country lad, while several of the
other servants were looking on. In the midst of her sport the girl caught
a glimpse of my face at the window, and, coloring up, ran off with an air
of roguish affected confusion.
"""
Saint Francis and Saint Benedight
Blesse this house from wicked wight;
From the night-mare and the goblin,
That is hight good fellow Robin;
Keep it from all evil spirits,
Fairies, weezels, rats, and ferrets:
From curfew time
To the next prime.
CARTWRIGHT.
"""

[img[images/9277m.jpg]]

IT was a brilliant moonlight night, but extremely cold; our chaise whirled
rapidly over the frozen ground; the postboy smacked his whip incessantly,
and a part of the time his horses were on a gallop. "He knows where he is
going," said my companion, laughing, "and is eager to arrive in time for
some of the merriment and good cheer of the servants' hall. My father, you
must know, is a bigoted devotee of the old school, and prides himself upon
keeping up something of old English hospitality. He is a tolerable
specimen of what you will rarely meet with nowadays in its purity, the old
English country gentleman; for our men of fortune spend so much of their
time in town, and fashion is carried so much into the country, that the
strong rich peculiarities of ancient rural life are almost polished away.
My father, however, from early years, took honest Peacham* for his
textbook, instead of Chesterfield; he determined in his own mind that
there was no condition more truly honorable and enviable than that of a
country gentleman on his paternal lands, and therefore passes the whole of
his time on his estate. He is a strenuous advocate for the revival of the
old rural games and holiday observances, and is deeply read in the
writers, ancient and modern, who have treated on the subject. Indeed, his
favorite range of reading is among the authors who flourished at least two
centuries since, who, he insists, wrote and thought more like true
Englishmen than any of their successors. He even regrets sometimes that he
had not been born a few centuries earlier, when England was itself and had
its peculiar manners and customs. As he lives at some distance from the
main road, in rather a lonely part of the country, without any rival
gentry near him, he has that most enviable of all blessings to an
Englishman&mdash;an opportunity of indulging the bent of his own humor
without molestation. Being representative of the oldest family in the
neighborhood, and a great part of the peasantry being his tenants, he is
much looked up to, and in general is known simply by the appellation of
'The Squire'&mdash;a title which has been accorded to the head of the
family since time immemorial. I think it best to give you these hints
about my worthy old father, to prepare you for any eccentricities that
might otherwise appear absurd."

"""
* Peacham's Complete Gentleman, 1622.
"""

We had passed for some time along the wall of a park, and at length the
chaise stopped at the gate. It was in a heavy, magnificent old style, of
iron bars fancifully wrought at top into flourishes and flowers. The huge
square columns that supported the gate were surmounted by the family
crest. Close adjoining was the porter's lodge, sheltered under dark fir
trees and almost buried in shrubbery.

The postboy rang a large porter's bell, which resounded though the still
frosty air, and was answered by the distant barking of dogs, with which
the mansion-house seemed garrisoned. An old woman immediately appeared at
the gate. As the moonlight fell strongly upon her, I had a full view of a
little primitive dame, dressed very much in the antique taste, with a neat
kerchief and stomacher, and her silver hair peeping from under a cap of
snowy whiteness. She came curtseying forth, with many expressions of
simple joy at seeing her young master. Her husband, it seemed, was up at
the house keeping Christmas Eve in the servants' hall; they could not do
without him, as he was the best hand at a song and story in the household.

My friend proposed that we should alight and walk through the park to the
hall, which was at no great distance, while the chaise should follow on.
Our road wound through a noble avenue of trees, among the naked branches
of which the moon glittered as she rolled through the deep vault of a
cloudless sky. The lawn beyond was sheeted with a slight covering of snow,
which here and there sparkled as the moonbeams caught a frosty crystal,
and at a distance might be seen a thin transparent vapor stealing up from
the low grounds and threatening gradually to shroud the landscape.

My companion looked around him with transport. "How often," said he, "have
I scampered up this avenue on returning home on school vacations! How
often have I played under these trees when a boy! I feel a degree of
filial reverence for them, as we look up to those who have cherished us in
childhood. My father was always scrupulous in exacting our holidays and
having us around him on family festivals. He used to direct and
superintend our games with the strictness that some parents do the studies
of their children. He was very particular that we should play the old
English games according to their original form, and consulted old books
for precedent and authority for every 'merrie disport;' yet I assure you
there never was pedantry so delightful. It was the policy of the good old
gentleman to make his children feel that home was the happiest place in
the world; and I value this delicious home-feeling as one of the choicest
gifts a parent could bestow."

We were interrupted by the clamor of a troop of dogs of all sorts and
sizes, "mongrel, puppy, whelp, and hound, and curs of lower degree," that
disturbed by the ring of the porter's bell and the rattling of the chaise,
came bounding, open-mouthed, across the lawn.

"""
"'&mdash;&mdash;The little dogs and all,  Tray, Blanch,
and Sweetheart, see, they bark at me!'"
"""

cried Bracebridge, laughing. At the sound of his voice the bark was
changed into a yelp of delight, and in a moment he was surrounded and
almost overpowered by the caresses of the faithful animals.

[img[images/0281m.jpg]]

We had now come in full view of the old family mansion, partly thrown in
deep shadow and partly lit up by the cold moonshine. It was an irregular
building of some magnitude, and seemed to be of the architecture of
different periods. One wing was evidently very ancient, with heavy
stone-shafted bow windows jutting out and overrun with ivy, from among the
foliage of which the small diamond-shaped panes of glass glittered with
the moonbeams. The rest of the house was in the French taste of Charles
the Second's time, having been repaired and altered, as my friend told me,
by one of his ancestors who returned with that monarch at the Restoration.
The grounds about the house were laid out in the old formal manner of
artificial flower-beds, clipped shrubberies, raised terraces, and heavy
stone balustrades, ornamented with urns, a leaden statue or two, and a jet
of water. The old gentleman, I was told, was extremely careful to preserve
this obsolete finery in all its original state. He admired this fashion in
gardening; it had an air of magnificence, was courtly and noble, and
befitting good old family style. The boasted imitation of Nature in modern
gardening had sprung up with modern republican notions, but did not suit a
monarchical government; it smacked of the leveling system. I could not
help smiling at this introduction of politics into gardening, though I
expressed some apprehension that I should find the old gentleman rather
intolerant in his creed. Frank assured me, however, that it was almost the
only instance in which he had ever heard his father meddle with politics;
and he believed that he had got this notion from a member of Parliament
who once passed a few weeks with him. The squire was glad of any argument
to defend his clipped yew trees and formal terraces, which had been
occasionally attacked by modern landscape gardeners.

As we approached the house we heard the sound of music, and now and then a
burst of laughter from one end of the building. This, Bracebridge said,
must proceed from the servants' hall, where a great deal of revelry was
permitted, and even encouraged, by the squire throughout the twelve days
of Christmas, provided everything was done conformably to ancient usage.
Here were kept up the old games of hoodman blind, shoe the wild mare, hot
cockles, steal the white loaf, bob apple, and snap dragon; the Yule-clog
and Christmas candle were regularly burnt, and the mistletoe with its
white berries hung up, to the imminent peril of all the pretty
housemaids.*

"""
* The mistletoe is still hung up in farm-houses and kitchens
at Christmas, and the young men have the privilege of
kissing the girls under it, plucking each time a berry from
the bush. When the berries are all plucked the privilege
ceases.
"""

So intent were the servants upon their sports that we had to ring
repeatedly before we could make ourselves heard. On our arrival being
announced the squire came out to receive us, accompanied by his two other
sons&mdash;one a young officer in the army, home on a leave of absence;
the other an Oxonian, just from the university. The squire was a fine
healthy-looking old gentleman, with silver hair curling lightly round an
open florid countenance, in which the physiognomist, with the advantage,
like myself, of a previous hint or two, might discover a singular mixture
of whim and benevolence.

The family meeting was warm and affectionate; as the evening was far
advanced, the squire would not permit us to change our travelling dresses,
but ushered us at once to the company, which was assembled in a large
old-fashioned hall. It was composed of different branches of a numerous
family connection, where there were the usual proportion of old uncles and
aunts, comfortable married dames, superannuated spinsters, blooming
country cousins, half-fledged striplings, and bright-eyed boarding-school
hoydens. They were variously occupied&mdash;some at a round game of cards;
others conversing around the fireplace; at one end of the hall was a group
of the young folks, some nearly grown up, others of a more tender and
budding age, fully engrossed by a merry game; and a profusion of wooden
horses, penny trumpets, and tattered dolls about the floor showed traces
of a troop of little fairy beings who, having frolicked through a happy
day, had been carried off to slumber through a peaceful night.

While the mutual greetings were going on between young Bracebridge and his
relatives I had time to scan the apartment. I have called it a hall, for
so it had certainly been in old times, and the squire had evidently
endeavored to restore it to something of its primitive state. Over the
heavy projecting fireplace was suspended a picture of a warrior in armor,
standing by a white horse, and on the opposite wall hung a helmet,
buckler, and lance. At one end an enormous pair of antlers were inserted
in the wall, the branches serving as hooks on which to suspend hats,
whips, and spurs, and in the corners of the apartment were fowling-pieces,
fishing-rods, and other sporting implements. The furniture was of the
cumbrous workmanship of former days, though some articles of modern
convenience had been added and the oaken floor had been carpeted, so that
the whole presented an odd mixture of parlor and hall.

The grate had been removed from the wide overwhelming fireplace to make
way for a fire of wood, in the midst of which was an enormous log glowing
and blazing, and sending forth a vast volume of light and heat: this, I
understood, was the Yule-clog, which the squire was particular in having
brought in and illumined on a Christmas Eve, according to ancient custom.*

"""
* The Yule-clog is a great log of wood, sometimes the root
of a tree, brought into the house with great ceremony on
Christmas Eve, laid in the fireplace, and lighted with the
brand of last year's clog. While it lasted there was great
drinking, singing, and telling of tales. Sometimes it was
accompanied by Christmas candles; but in the cottages the
only light was from the ruddy blaze of the great wood fire.
The Yule-clog was to burn all night; if it went out, it was
considered a sign of ill luck.
"""

Herrick mentions it in one of his songs:

"""
Come, bring with a noise,
My metric, merrie boys,
The Christmas Log to the firing;
While my good dame, she
Bids ye all be free,
And drink to your hearts' desiring.
"""

The Yule-clog is still burnt in many farm-houses and kitchens in England,
particularly in the north, and there are several superstitions connected
with it among the peasantry. If a squinting person come to the house while
it is burning, or a person barefooted, it is considered an ill omen. The
brand remaining from the Yule-clog is carefully put away to light the next
year's Christmas fire.

It was really delightful to see the old squire seated in his hereditary
elbow-chair by the hospitable fireside of his ancestors, and looking
around him like the sun of a system, beaming warmth and gladness to every
heart. Even the very dog that lay stretched at his feet, as he lazily
shifted his position and yawned would look fondly up in his master's face,
wag his tail against the floor, and stretch himself again to sleep,
confident of kindness and protection. There is an emanation from the heart
in genuine hospitality which cannot be described, but is immediately felt
and puts the stranger at once at his ease. I had not been seated many
minutes by the comfortable hearth of the worthy old cavalier before I
found myself as much at home as if I had been one of the family.

Supper was announced shortly after our arrival. It was served up in a
spacious oaken chamber, the panels of which shone with wax, and around
which were several family portraits decorated with holly and ivy. Besides
the accustomed lights, two great wax tapers, called Christmas candles,
wreathed with greens, were placed on a highly polished beaufet among the
family plate. The table was abundantly spread with substantial fare; but
the squire made his supper of frumenty, a dish made of wheat cakes boiled
in milk with rich spices, being a standing dish in old times for Christmas
Eve. I was happy to find my old friend, minced pie, in the retinue of the
feast and, finding him to be perfectly orthodox, and that I need not be
ashamed of my predilection, I greeted him with all the warmth wherewith we
usually greet an old and very genteel acquaintance.

The mirth of the company was greatly promoted by the humors of an
eccentric personage whom Mr. Bracebridge always addressed with the quaint
appellation of Master Simon. He was a tight brisk little man, with the air
of an arrant old bachelor. His nose was shaped like the bill of a parrot;
his face slightly pitted with the small-pox, with a dry perpetual bloom on
it, like a frostbitten leaf in autumn. He had an eye of great quickness
and vivacity, with a drollery and lurking waggery of expression that was
irresistible. He was evidently the wit of the family, dealing very much in
sly jokes and innuendoes with the ladies, and making infinite merriment by
harping upon old themes, which, unfortunately, my ignorance of the family
chronicles did not permit me to enjoy. It seemed to be his great delight
during supper to keep a young girl next to him in a continual agony of
stifled laughter, in spite of her awe of the reproving looks of her
mother, who sat opposite. Indeed, he was the idol of the younger part of
the company, who laughed at everything he said or did and at every turn of
his countenance. I could not wonder at it; for he must have been a miracle
of accomplishments in their eyes. He could imitate Punch and Judy; make an
old woman of his hand, with the assistance of a burnt cork and
pocket-handkerchief; and cut an orange into such a ludicrous caricature
that the young folks were ready to die with laughing.

I was let briefly into his history by Frank Bracebridge. He was an old
bachelor, of a small independent income, which by careful management was
sufficient for all his wants. He revolved through the family system like a
vagrant comet in its orbit, sometimes visiting one branch, and sometimes
another quite remote, as is often the case with gentlemen of extensive
connections and small fortunes in England. He had a chirping, buoyant
disposition, always enjoying the present moment; and his frequent change
of scene and company prevented his acquiring those rusty, unaccommodating
habits with which old bachelors are so uncharitably charged. He was a
complete family chronicle, being versed in the genealogy, history, and
intermarriages of the whole house of Bracebridge, which made him a great
favorite with the old folks; he was a beau of all the elder ladies and
superannuated spinsters, among whom he was habitually considered rather a
young fellow; and he was master of the revels among the children, so that
there was not a more popular being in the sphere in which he moved than
Mr. Simon Bracebridge. Of late years he had resided almost entirely with
the squire, to whom he had become a factotum, and whom he particularly
delighted by jumping with his humor in respect to old times and by having
a scrap of an old song to suit every occasion. We had presently a specimen
of his last-mentioned talent, for no sooner was supper removed and spiced
wines and other beverages peculiar to the season introduced, than Master
Simon was called on for a good old Christmas song. He bethought himself
for a moment, and then, with a sparkle of the eye and a voice that was by
no means bad, excepting that it ran occasionally into a falsetto like the
notes of a split reed, he quavered forth a quaint old ditty:

"""
Now Christmas is come,
Let us beat up the drum,
And call all our neighbors together;
And when they appear,
Let us make them such cheer,
As will keep out the wind and the weather, &amp;c.
"""

The supper had disposed every one to gayety, and an old harper was
summoned from the servants' hall, where he had been strumming all the
evening, and to all appearance comforting himself with some of the
squire's home-brewed. He was a kind of hanger-on, I was told, of the
establishment, and, though ostensibly a resident of the village, was
oftener to be found in the squire's kitchen than his own home, the old
gentleman being fond of the sound of "harp in hall."

The dance, like most dances after supper, was a merry one: some of the
older folks joined in it, and the squire himself figured down several
couple with a partner with whom he affirmed he had danced at every
Christmas for nearly half a century. Master Simon, who seemed to be a kind
of connecting link between the old times and the new, and to be withal a
little antiquated in the taste of his accomplishments, evidently piqued
himself on his dancing, and was endeavoring to gain credit by the heel and
toe, rigadoon, and other graces of the ancient school; but he had
unluckily assorted himself with a little romping girl from
boarding-school, who by her wild vivacity kept him continually on the
stretch and defeated all his sober attempts at elegance: such are the
ill-sorted matches to which antique gentlemen are unfortunately prone.

The young Oxonian, on the contrary, had led out one of his maiden aunts,
on whom the rogue played a thousand little knaveries with impunity: he was
full of practical jokes, and his delight was to tease his aunts and
cousins, yet, like all madcap youngsters, he was a universal favorite
among the women. The most interesting couple in the dance was the young
officer and a ward of the squire's, a beautiful blushing girl of
seventeen. From several shy glances which I had noticed in the course of
the evening I suspected there was a little kindness growing up between
them; and indeed the young soldier was just the hero to captivate a
romantic girl. He was tall, slender, and handsome, and, like most young
British officers of late years, had picked up various small
accomplishments on the Continent: he could talk French and Italian, draw
landscapes, sing very tolerably, dance divinely, but, above all, he had
been wounded at Waterloo. What girl of seventeen, well read in poetry and
romance, could resist such a mirror of chivalry and perfection?

The moment the dance was over he caught up a guitar, and, lolling against
the old marble fireplace in an attitude which I am half inclined to
suspect was studied, began the little French air of the Troubadour. The
squire, however, exclaimed against having anything on Christmas Eve but
good old English; upon which the young minstrel, casting up his eye for a
moment as if in an effort of memory, struck into another strain, and with
a charming air of gallantry gave Herrick's "Night-Piece to Julia:"

[img[images/0289m.jpg]]

"""
Her eyes the glow-worm lend thee,
The shooting stars attend thee,
And the elves also,
Whose little eyes glow
Like the sparks of fire, befriend thee.

No Will-o'-the-Wisp mislight thee;
Nor snake nor slow-worm bite thee;
But on thy way,
Not making a stay,
Since ghost there is none to affright thee,

Then let not the dark thee cumber;
What though the moon does slumber,
The stars of the night
Will lend thee their light,
Like tapers clear without number.

Then, Julia, let me woo thee,
Thus, thus to come unto me,
And when I shall meet
Thy silvery feet,
My soul I'll pour into thee.
"""

The song might or might not have been intended in compliment to the fair
Julia, for so I found his partner was called; she, however, was certainly
unconscious of any such application, for she never looked at the singer,
but kept her eyes cast upon the floor. Her face was suffused, it is true,
with a beautiful blush, and there was a gentle heaving of the bosom, but
all that was doubtless caused by the exercise of the dance; indeed, so
great was her indifference that she amused herself with plucking to pieces
a choice bouquet of hot-house flowers, and by the time the song was
concluded the nosegay lay in ruins on the floor.

The party now broke up for the night with the kind-hearted old custom of
shaking hands. As I passed through the hall on my way to my chamber, the
dying embers of the Yule-clog still sent forth a dusky glow, and had it
not been the season when "no spirit dares stir abroad," I should have been
half tempted to steal from my room at midnight and peep whether the
fairies might not be at their revels about the hearth.

My chamber was in the old part of the mansion, the ponderous furniture of
which might have been fabricated in the days of the giants. The room was
panelled, with cornices of heavy carved work, in which flowers and
grotesque faces were strangely intermingled, and a row of black-looking
portraits stared mournfully at me from the walls. The bed was of rich
though faded damask, with a lofty tester, and stood in a niche opposite a
bow window. I had scarcely got into bed when a strain of music seemed to
break forth in the air just below the window. I listened, and found it
proceeded from a band which I concluded to be the Waits from some
neighboring village. They went round the house, playing under the windows.
I drew aside the curtains to hear them more distinctly. The moonbeams fell
through the upper part of the casement; partially lighting up the
antiquated apartment. The sounds, as they receded, became more soft and
aerial, and seemed to accord with the quiet and moonlight. I listened and
listened&mdash;they became more and more tender and remote, and, as they
gradually died away, my head sunk upon the pillow and I fell asleep.
[img[images/0260m.jpg]]

But is old, old, good old Christmas gone? Nothing but the hair of his
good, gray old head and beard left? Well, I will have that, seeing I
cannot have more of him. HUE AND CRY AFTER CHRISTMAS.

"""
A man might then behold
At Christmas, in each hall
Good fires to curb the cold,
And meat for great and small.
The neighbors were friendly bidden,
And all had welcome true,
The poor from the gates were not chidden
When this old cap was new.
OLD SONG.
"""

NOTHING in England exercises a more delightful spell over my imagination
than the lingerings of the holiday customs and rural games of former
times. They recall the pictures my fancy used to draw in the May morning
of life, when as yet I only knew the world through books, and believed it
to be all that poets had painted it; and they bring with them the flavor
of those honest days of yore, in which, perhaps with equal fallacy, I am
apt to think the world was more homebred, social, and joyous than at
present. I regret to say that they are daily growing more and more faint,
being gradually worn away by time, but still more obliterated by modern
fashion. They resemble those picturesque morsels of Gothic architecture
which we see crumbling in various parts of the country, partly dilapidated
by the waste of ages and partly lost in the additions and alterations of
latter days. Poetry, however, clings with cherishing fondness about the
rural game and holiday revel from which it has derived so many of its
themes, as the ivy winds its rich foliage about the Gothic arch and
mouldering tower, gratefully repaying their support by clasping together
their tottering remains, and, as it were, embalming them in verdure.

Of all the old festivals, however, that of Christmas awakens the strongest
and most heartfelt associations. There is a tone of solemn and sacred
feeling that blends with our conviviality and lifts the spirit to a state
of hallowed and elevated enjoyment. The services of the Church about this
season are extremely tender and inspiring. They dwell on the beautiful
story of the origin of our faith and the pastoral scenes that accompanied
its announcement. They gradually increase in fervor and pathos during the
season of Advent, until they break forth in full jubilee on the morning
that brought peace and good-will to men. I do not know a grander effect of
music on the moral feelings than to hear the full choir and the pealing
organ performing a Christmas anthem in a cathedral, and filling every part
of the vast pile with triumphant harmony.

It is a beautiful arrangement, also, derived from days of yore, that this
festival, which commemorates the announcement of the religion of peace and
love, has been made the season for gathering together of family
connections, and drawing closer again those bands of kindred hearts which
the cares and pleasures and sorrows of the world are continually operating
to cast loose; of calling back the children of a family who have launched
forth in life and wandered widely asunder, once more to assemble about the
paternal hearth, that rallying-place of the affections, there to grow
young and loving again among the endearing mementos of childhood.

There is something in the very season of the year that gives a charm to
the festivity of Christmas. At other times we derive a great portion of
our pleasures from the mere beauties of Nature. Our feelings sally forth
and dissipate themselves over the sunny landscape, and we "live abroad and
everywhere." The song of the bird, the murmur of the stream, the breathing
fragrance of spring, the soft voluptuousness of summer, the golden pomp of
autumn, earth with its mantle of refreshing green, and heaven with it deep
delicious blue and its cloudy magnificence,&mdash;all fill us with mute
but exquisite delight, and we revel in the luxury of mere sensation. But
in the depth of winter, when Nature lies despoiled of every charm and
wrapped in her shroud of sheeted snow, we turn for our gratifications to
moral sources. The dreariness and desolation of the landscape, the short
gloomy days and darksome nights, while they circumscribe our wanderings,
shut in our feelings also from rambling abroad, and make us more keenly
disposed for the pleasure of the social circle. Our thoughts are more
concentrated; our friendly sympathies more aroused. We feel more sensibly
the charm of each other's society, and are brought more closely together
by dependence on each other for enjoyment. Heart calleth unto heart, and
we draw our pleasures from the deep wells of loving-kindness which lie in
the quiet recesses of our bosoms, and which, when resorted to, furnish
forth the pure element of domestic felicity.

The pitchy gloom without makes the heart dilate on entering the room
filled with the glow and warmth of the evening fire. The ruddy blaze
diffuses an artificial summer and sunshine through the room, and lights up
each countenance in a kindlier welcome. Where does the honest face of
hospitality expand into a broader and more cordial smile, where is the shy
glance of love more sweetly eloquent, than by the winter fireside? and as
the hollow blast of wintry wind rushes through the hall, claps the distant
door, whistles about the casement, and rumbles down the chimney, what can
be more grateful than that feeling of sober and sheltered security with
which we look round upon the comfortable chamber and the scene of domestic
hilarity?

The English, from the great prevalence of rural habit throughout every
class of society, have always been found of those festivals and holidays,
which agreeably interrupt the stillness of country life, and they were, in
former days, particularly observant of the religious and social rites of
Christmas. It is inspiring to read even the dry details which some
antiquaries have given of the quaint humors, the burlesque pageants, the
complete abandonment to mirth and good-fellowship with which this festival
was celebrated. It seemed to throw open every door and unlock every heart.
It brought the peasant and the peer together, and blended all ranks in one
warm, generous flow of joy and kindness. The old halls of castles and
manor-houses resounded with the harp and the Christmas carol, and their
ample boards groaned under the weight of hospitality. Even the poorest
cottage welcomed the festive season with green decorations of bay and
holly&mdash;the cheerful fire glanced its rays through the lattice,
inviting the passengers to raise the latch and join the gossip knot
huddled round the hearth beguiling the long evening with legendary jokes
and oft-told Christmas tales.

One of the least pleasing effects of modern refinement is the havoc it has
made among the hearty old holiday customs. It has completely taken off the
sharp touchings and spirited reliefs of these embellishments of life, and
has worn down society into a more smooth and polished, but certainly a
less characteristic, surface. Many of the games and ceremonials of
Christmas have entirely disappeared, and, like the sherris sack of old
Falstaff, are become matters of speculation and dispute among
commentators. They flourished in times full of spirit and lustihood, when
men enjoyed life roughly, but heartily and vigorously&mdash;times wild and
picturesque, which have furnished poetry with its richest materials and
the drama with its most attractive variety of characters and manners. The
world has become more worldly. There is more of dissipation, and less of
enjoyment. Pleasure has expanded into a broader, but a shallower stream,
and has forsaken many of those deep and quiet channels where it flowed
sweetly through the calm bosom of domestic life. Society has acquired a
more enlightened and elegant tone, but it has lost many of its strong
local peculiarities, its homebred feelings, its honest fireside delights.
The traditionary customs of golden-hearted antiquity, its feudal
hospitalities, and lordly wassailings, have passed away with the baronial
castles and stately manor-houses in which they were celebrated. They
comported with the shadowy hall, the great oaken gallery, and the
tapestried parlor, but are unfitted to the light showy saloons and gay
drawing-rooms of the modern villa.

[img[images/0265m.jpg]]

Shorn, however, as it is, of its ancient and festive honors, Christmas is
still a period of delightful excitement in England. It is gratifying to
see that home-feeling completely aroused which holds so powerful a place
in every English bosom. The preparations making on every side for the
social board that is again to unite friends and kindred; the presents of
good cheer passing and repassing, those tokens of regard and quickeners of
kind feelings; the evergreens distributed about houses and churches,
emblems of peace and gladness,&mdash;all these have the most pleasing
effect in producing fond associations and kindling benevolent sympathies.
Even the sound of the Waits, rude as may be their minstrelsy, breaks upon
the mid-watches of a winter night with the effect of perfect harmony. As I
have been awakened by them in that still and solemn hour "when deep sleep
falleth upon man," I have listened with a hushed delight, and, connecting
them with the sacred and joyous occasion, have almost fancied them into
another celestial choir announcing peace and good-will to mankind.

How delightfully the imagination, when wrought upon by these moral
influences, turns everything to melody and beauty! The very crowing of the
cock, heard sometimes in the profound repose of the country, "telling the
night-watches to his feathery dames," was thought by the common people to
announce the approach of this sacred festival.

"""
"Some say that ever 'gainst that season comes
Wherein our Saviour's birth is celebrated,
This bird of dawning singeth all night long;
And then, they say, no spirit dares stir abroad,
The nights are wholesome&mdash;then no planets strike,
No fairy takes, no witch hath power to charm,
So hallow'd and so gracious is the time."
"""

Amidst the general call to happiness, the bustle of the spirits, and stir
of the affections which prevail at this period what bosom can remain
insensible? It is, indeed, the season of regenerated feeling&mdash;the
season for kindling not merely the fire of hospitality in the hall, but
the genial flame of charity in the heart.

The scene of early love again rises green to memory beyond the sterile
waste of years; and the idea of home, fraught with the fragrance of
home-dwelling joys, reanimates the drooping spirit, as the Arabian breeze
will sometimes waft the freshness of the distant fields to the weary
pilgrim of the desert.

Stranger and sojourner as I am in the land, though for me no social hearth
may blaze, no hospitable roof throw open its doors, nor the warm grasp of
friendship welcome me at the threshold, yet I feel the influence of the
season beaming into my soul from the happy looks of those around me.
Surely happiness is reflective, like the light of heaven, and every
countenance, bright with smiles and glowing with innocent enjoyment, is a
mirror transmitting to others the rays of a supreme and ever-shining
benevolence. He who can turn churlishly away from contemplating the
felicity of his fellow-beings, and can sit down darkling and repining in
his loneliness when all around is joyful, may have his moments of strong
excitement and selfish gratification, but he wants the genial and social
sympathies which constitute the charm of a merry Christmas.
[img[images/0095m.jpg]]

Methinks I see in my mind a noble and puissant nation, rousting herself
like a strong man after sleep, and shaking her invincible locks; methinks
I see her as an eagle, mewing her mighty youth, and kindling her endazzled
eyes at the full mid-day beam.&mdash;MILTON ON THE LIBERTY OF THE PRESS.

IT is with feelings of deep regret that I observe the literary animosity
daily growing up between England and America. Great curiosity has been
awakened of late with respect to the United States, and the London press
has teemed with volumes of travels through the Republic; but they seem
intended to diffuse error rather than knowledge; and so successful have
they been, that, notwithstanding the constant intercourse between the
nations, there is no people concerning whom the great mass of the British
public have less pure information, or entertain more numerous prejudices.

English travellers are the best and the worst in the world. Where no
motives of pride or interest intervene, none can equal them for profound
and philosophical views of society, or faithful and graphical description
of external objects; but when either the interest or reputation of their
own country comes in collision with that of another, they go to the
opposite extreme, and forget their usual probity and candor, in the
indulgence of splenetic remark, and an illiberal spirit of ridicule.

Hence, their travels are more honest and accurate, the more remote the
country described. I would place implicit confidence in an Englishman's
description of the regions beyond the cataracts of the Nile; of unknown
islands in the Yellow Sea; of the interior of India; or of any other tract
which other travellers might be apt to picture out with the illusions of
their fancies. But I would cautiously receive his account of his immediate
neighbors, and of those nations with which he is in habits of most
frequent intercourse. However I might be disposed to trust his probity, I
dare not trust his prejudices.

It has also been the peculiar lot of our country to be visited by the
worst kind of English travellers. While men of philosophical spirit and
cultivated minds have been sent from England to ransack the poles, to
penetrate the deserts, and to study the manners and customs of barbarous
nations, with which she can have no permanent intercourse of profit or
pleasure; it has been left to the broken-down tradesman, the scheming
adventurer, the wandering mechanic, the Manchester and Birmingham agent,
to be her oracles respecting America. From such sources she is content to
receive her information respecting a country in a singular state of moral
and physical development; a country in which one of the greatest political
experiments in the history of the world is now performing; and which
presents the most profound and momentous studies to the statesman and the
philosopher.

That such men should give prejudicial accounts of America, is not a matter
of surprise. The themes it offers for contemplation, are too vast and
elevated for their capacities. The national character is yet in a state of
fermentation: it may have its frothiness and sediment, but its ingredients
are sound and wholesome; it has already given proofs of powerful and
generous qualities; and the whole promises to settle down into something
substantially excellent. But the causes which are operating to strengthen
and ennoble it, and its daily indications of admirable properties, are all
lost upon these purblind observers; who are only affected by the little
asperities incident to its present situation. They are capable of judging
only of the surface of things; of those matters which come in contact with
their private interests and personal gratifications. They miss some of the
snug conveniences and petty comforts which belong to an old,
highly-finished, and over-populous state of society; where the ranks of
useful labor are crowded, and many earn a painful and servile subsistence,
by studying the very caprices of appetite and self-indulgence. These minor
comforts, however, are all-important in the estimation of narrow minds;
which either do not perceive, or will not acknowledge, that they are more
than counterbalanced among us, by great and generally diffused blessings.

They may, perhaps, have been disappointed in some unreasonable expectation
of sudden gain. They may have pictured America to themselves an El Dorado,
where gold and silver abounded, and the natives were lacking in sagacity,
and where they were to become strangely and suddenly rich, in some
unforeseen but easy manner. The same weakness of mind that indulges absurd
expectations, produces petulance in disappointment. Such persons become
embittered against the country on finding that there, as everywhere else,
a man must sow before he can reap; must win wealth by industry and talent;
and must contend with the common difficulties of nature, and the
shrewdness of an intelligent and enterprising people.

Perhaps, through mistaken or ill-directed hospitality, or from the prompt
disposition to cheer and countenance the stranger, prevalent among my
countrymen, they may have been treated with unwonted respect in America;
and, having been accustomed all their lives to consider themselves below
the surface of good society, and brought up in a servile feeling of
inferiority, they become arrogant, on the common boon of civility; they
attribute to the lowliness of others their own elevation; and underrate a
society where there are no artificial distinctions, and where, by any
chance, such individuals as themselves can rise to consequence.

One would suppose, however, that information coming from such sources, on
a subject where the truth is so desirable, would be received with caution
by the censors of the press; that the motives of these men, their
veracity, their opportunities of inquiry and observation, and their
capacities for judging correctly, would be rigorously scrutinized, before
their evidence was admitted, in such sweeping extent, against a kindred
nation. The very reverse, however, is the case, and it furnishes a
striking instance of human inconsistency. Nothing can surpass the
vigilance with which English critics will examine the credibility of the
traveller who publishes an account of some distant and comparatively
unimportant country. How warily will they compare the measurements of a
pyramid, or the description of a ruin; and how sternly will they censure
any inaccuracy in these contributions of merely curious knowledge, while
they will receive, with eagerness and unhesitating faith, the gross
misrepresentations of coarse and obscure writers, concerning a country
with which their own is placed in the most important and delicate
relations. Nay, they will even make these apocryphal volumes text-books,
on which to enlarge, with a zeal and an ability worthy of a more generous
cause.

I shall not, however, dwell on this irksome and hackneyed topic; nor
should I have adverted to it, but for the undue interest apparently taken
in it by my countrymen, and certain injurious effects which I apprehend it
might produce upon the national feeling. We attach too much consequence to
these attacks. They cannot do us any essential injury. The tissue of
misrepresentations attempted to be woven round us, are like cobwebs woven
round the limbs of an infant giant. Our country continually outgrows them.
One falsehood after another falls off of itself. We have but to live on,
and every day we live a whole volume of refutation.

[img[images/0099m.jpg]]

All the writers of England united, if we could for a moment suppose their
great minds stooping to so unworthy a combination, could not conceal our
rapidly growing importance and matchless prosperity. They could not
conceal that these are owing, not merely to physical and local, but also
to moral causes&mdash;to the political liberty, the general diffusion of
knowledge, the prevalence of sound, moral, and religious principles, which
give force and sustained energy to the character of a people, and which in
fact, have been the acknowledged and wonderful supporters of their own
national power and glory.

But why are we so exquisitely alive to the aspersions of England? Why do
we suffer ourselves to be so affected by the contumely she has endeavored
to cast upon us? It is not in the opinion of England alone that honor
lives, and reputation has its being. The world at large is the arbiter of
a nation's fame: with its thousand eyes it witnesses a nation's deeds, and
from their collective testimony is national glory or national disgrace
established.

For ourselves, therefore, it is comparatively of but little importance
whether England does us justice or not; it is, perhaps, of far more
importance to herself. She is instilling anger and resentment into the
bosom of a youthful nation, to grow with its growth, and strengthen with
its strength. If in America, as some of her writers are laboring to
convince her, she is hereafter to find an invidious rival, and a gigantic
foe, she may thank those very writers for having provoked rivalship, and
irritated hostility. Every one knows the all-pervading influence of
literature at the present day, and how much the opinions and passions of
mankind are under its control. The mere contests of the sword are
temporary; their wounds are but in the flesh, and it is the pride of the
generous to forgive and forget them; but the slanders of the pen pierce to
the heart; they rankle longest in the noblest spirits; they dwell ever
present in the mind, and render it morbidly sensitive to the most trifling
collision. It is but seldom that any one overt act produces hostilities
between two nations; there exists, most commonly, a previous jealousy and
ill-will, a predisposition to take offence. Trace these to their cause,
and how often will they be found to originate in the mischievous effusions
of mercenary writers, who, secure in their closets, and for ignominious
bread, concoct and circulate the venom that is to inflame the generous and
the brave.

I am not laying too much stress upon this point; for it applies most
emphatically to our particular case. Over no nation does the press hold a
more absolute control than over the people of America; for the universal
education of the poorest classes makes every individual a reader. There is
nothing published in England on the subject of our country, that does not
circulate through every part of it. There is not a calumny dropt from an
English pen, nor an unworthy sarcasm uttered by an English statesman, that
does not go to blight good-will, and add to the mass of latent resentment.
Possessing, then, as England does, the fountain-head whence the literature
of the language flows, how completely is it in her power, and how truly is
it her duty, to make it the medium of amiable and magnanimous feeling&mdash;a
stream where the two nations might meet together and drink in peace and
kindness. Should she, however, persist in turning it to waters of
bitterness, the time may come when she may repent her folly. The present
friendship of America may be of but little moment to her; but the future
destinies of that country do not admit of a doubt; over those of England,
there lower some shadows of uncertainty. Should, then, a day of gloom
arrive&mdash;should those reverses overtake her, from which the proudest
empires have not been exempt&mdash;she may look back with regret at her
infatuation, in repulsing from her side a nation she might have grappled
to her bosom, and thus destroying her only chance for real friendship
beyond the boundaries of her own dominions.

There is a general impression in England, that the people of the United
States are inimical to the parent country. It is one of the errors which
have been diligently propagated by designing writers. There is, doubtless,
considerable political hostility, and a general soreness at the
illiberality of the English press; but, collectively speaking, the
prepossessions of the people are strongly in favor of England. Indeed, at
one time they amounted, in many parts of the Union, to an absurd degree of
bigotry. The bare name of Englishman was a passport to the confidence and
hospitality of every family, and too often gave a transient currency to
the worthless and the ungrateful. Throughout the country, there was
something of enthusiasm connected with the idea of England. We looked to
it with a hallowed feeling of tenderness and veneration, as the land of
our forefathers&mdash;the august repository of the monuments and
antiquities of our race&mdash;the birthplace and mausoleum of the sages
and heroes of our paternal history. After our own country, there was none
in whose glory we more delighted&mdash;none whose good opinion we were
more anxious to possess&mdash;none toward which our hearts yearned with
such throbbings of warm consanguinity. Even during the late war, whenever
there was the least opportunity for kind feelings to spring forth, it was
the delight of the generous spirits of our country to show that, in the
midst of hostilities, they still kept alive the sparks of future
friendship.

Is all this to be at an end? Is this golden band of kindred sympathies, so
rare between nations, to be broken forever?&mdash;Perhaps it is for the
best&mdash;it may dispel an allusion which might have kept us in mental
vassalage; which might have interfered occasionally with our true
interests, and prevented the growth of proper national pride. But it is
hard to give up the kindred tie! and there are feelings dearer than
interest&mdash;closer to the heart than pride&mdash;that will still make
us cast back a look of regret as we wander farther and farther from the
paternal roof, and lament the waywardness of the parent that would repel
the affections of the child.

Short-sighted and injudicious, however, as the conduct or England may be
in this system of aspersion, recrimination on our part would be equally
ill-judged. I speak not of a prompt and spirited vindication of our
country, or the keenest castigation of her slanderers&mdash;but I allude
to a disposition to retaliate in kind, to retort sarcasm and inspire
prejudice, which seems to be spreading widely among our writers. Let us
guard particularly against such a temper; for it would double the evil,
instead of redressing the wrong. Nothing is so easy and inviting as the
retort of abuse and sarcasm; but it is a paltry and an unprofitable
contest. It is the alternative of a morbid mind, fretted into petulance,
rather than warmed into indignation. If England is willing to permit the
mean jealousies of trade, or the rancorous animosities of politics, to
deprave the integrity of her press, and poison the fountain of public
opinion, let us beware of her example. She may deem it her interest to
diffuse error, and engender antipathy, for the purpose of checking
emigration: we have no purpose of the kind to serve. Neither have we any
spirit of national jealousy to gratify; for as yet, in all our rivalships
with England, we are the rising and the gaining party. There can be no end
to answer, therefore, but the gratification of resentment&mdash;a mere
spirit of retaliation&mdash;and even that is impotent. Our retorts are
never republished in England; they fall short, therefore, of their aim;
but they foster a querulous and peevish temper among our writers; they
sour the sweet flow of our early literature, and sow thorns and brambles
among its blossoms. What is still worse, they circulate through our own
country, and, as far as they have effect, excite virulent national
prejudices. This last is the evil most especially to be deprecated.
Governed, as we are, entirely by public opinion, the utmost care should be
taken to preserve the purity of the public mind. Knowledge is power, and
truth is knowledge; whoever, therefore, knowingly propagates a prejudice,
wilfully saps the foundation of his country's strength.

The members of a republic, above all other men, should be candid and
dispassionate. They are, individually, portions of the sovereign mind and
sovereign will, and should be enabled to come to all questions of national
concern with calm and unbiassed judgments. From the peculiar nature of our
relations with England, we must have more frequent questions of a
difficult and delicate character with her, than with any other nation,&mdash;questions
that affect the most acute and excitable feelings: and as, in the
adjustment of these, our national measures must ultimately be determined
by popular sentiment, we cannot be too anxiously attentive to purify it
from all latent passion or prepossession.

Opening, too, as we do, an asylum for strangers every portion of the
earth, we should receive all with impartiality. It should be our pride to
exhibit an example of one nation, at least, destitute of national
antipathies, and exercising, not merely the overt acts of hospitality, but
those more rare and noble courtesies which spring from liberality of
opinion.

What have we to do with national prejudices? They are the inveterate
diseases of old countries, contracted in rude and ignorant ages, when
nations knew but little of each other, and looked beyond their own
boundaries with distrust and hostility. We, on the contrary, have sprung
into national existence in an enlightened and philosophic age, when the
different parts of the habitable world, and the various branches of the
human family, have been indefatigably studied and made known to each
other; and we forego the advantages of our birth, if we do not shake off
the national prejudices, as we would the local superstitions, of the old
world.

But above all let us not be influenced by any angry feelings, so far as to
shut our eyes to the perception of what is really excellent and amiable in
the English character. We are a young people, necessarily an imitative
one, and must take our examples and models, in a great degree, from the
existing nations of Europe. There is no country more worthy of our study
than England. The spirit of her constitution is most analogous to ours.
The manners of her people&mdash;their intellectual activity&mdash;their
freedom of opinion&mdash;their habits of thinking on those subjects which
concern the dearest interests and most sacred charities of private life,
are all congenial to the American character; and, in fact, are all
intrinsically excellent: for it is in the moral feeling of the people that
the deep foundations of British prosperity are laid; and however the
superstructure may be timeworn, or overrun by abuses, there must be
something solid in the basis, admirable in the materials, and stable in
the structure of an edifice that so long has towered unshaken amidst the
tempests of the world.

Let it be the pride of our writers, therefore, discarding all feelings of
irritation, and disdaining to retaliate the illiberality of British
authors, to speak of the English nation without prejudice, and with
determined candor. While they rebuke the indiscriminating bigotry with
which some of our countrymen admire and imitate every thing English,
merely because it is English, let them frankly point out what is really
worthy of approbation. We may thus place England before us as a perpetual
volume of reference, wherein are recorded sound deductions from ages of
experience; and while we avoid the errors and absurdities which may have
crept into the page, we may draw thence golden maxims of practical wisdom,
wherewith to strengthen and to embellish our national character.

[img[images/0106m.jpg]]
The Sketch Book of Geoffrey Crayon, Gent.

By Washington Irving

[img[images/0007m.jpg]]

[img[images/0010m.jpg]]

[img[images/0011m.jpg]]

[img[images/0013m.jpg]]

The Sketch Book of Geoffrey Crayon, Gent: Personal Wiki by [[David Fisco|http://www.davidfisco.com]]

* [[The Sketch Book of Geoffrey Crayon, Gent: Personal Wiki Homepage|http://personal-wikis.davidfisco.com/sketch-book-of-geoffrey-crayon]]
* Feedback: [[Email David Fisco|mailto:[email protected]?subject=Crayon+Sketch+Book+Personal+Wiki+Feedback]]
* [[TiddlyWiki Homepage|http://tiddlywiki.com/]]
* [[TiddlyWiki Markdown|http://tiddlywiki.com/#WikiText]]
"""
An old song, made by an aged old pate,
Of an old worshipful gentleman who had a great estate,
That kept a brave old house at a bountiful rate,
And an old porter to relieve the poor at his gate.

With an old study fill'd full of learned old books,
With an old reverend chaplain, you might know him by his
looks,    With an old buttery-hatch worn quite off the hooks,
And an old kitchen that maintained half-a-dozen old cooks.
Like an old courtier, etc.&mdash;Old Song.
"""

[img[images/9422m.jpg]]

THERE is no species of humor in which the English more excel than that
which consists in caricaturing and giving ludicrous appellations or
nicknames. In this way they have whimsically designated, not merely
individuals, but nations, and in their fondness for pushing a joke they
have not spared even themselves. One would think that in personifying
itself a nation would be apt to picture something grand, heroic, and
imposing; but it is characteristic of the peculiar humor of the English,
and of their love for what is blunt, comic, and familiar, that they have
embodied their national oddities in the figure of a sturdy, corpulent old
fellow with a three-cornered hat, red waistcoat, leather breeches, and
stout oaken cudgel. Thus they have taken a singular delight in exhibiting
their most private foibles in a laughable point of view, and have been so
successful in their delineations that there is scarcely a being in actual
existence more absolutely present to the public mind than that eccentric
personage, John Bull.

Perhaps the continual contemplation of the character thus drawn of them
has contributed to fix it upon the nation, and thus to give reality to
what at first may have been painted in a great measure from the
imagination. Men are apt to acquire peculiarities that are continually
ascribed to them. The common orders of English seem wonderfully captivated
with the beau ideal which they have formed of John Bull, and endeavor to
act up to the broad caricature that is perpetually before their eyes.
Unluckily, they sometimes make their boasted Bullism an apology for their
prejudice or grossness; and this I have especially noticed among those
truly homebred and genuine sons of the soil who have never migrated beyond
the sound of Bow bells. If one of these should be a little uncouth in
speech and apt to utter impertinent truths, he confesses that he is a real
John Bull and always speaks his mind. If he now and then flies into an
unreasonable burst of passion about trifles, he observes that John Bull is
a choleric old blade, but then his passion is over in a moment and he
bears no malice. If he betrays a coarseness of taste and an insensibility
to foreign refinements, he thanks Heaven for his ignorance&mdash;he is a
plain John Bull and has no relish for frippery and knick-knacks. His very
proneness to be gulled by strangers and to pay extravagantly for
absurdities is excused under the plea of munificence, for John is always
more generous than wise.

Thus, under the name of John Bull he will contrive to argue every fault
into a merit, and will frankly convict himself of being the honestest
fellow in existence.

However little, therefore, the character may have suited in the first
instance, it has gradually adapted itself to the nation, or rather they
have adapted themselves to each other; and a stranger who wishes to study
English peculiarities may gather much valuable information from the
innumerable portraits of John Bull as exhibited in the windows of the
caricature-shops. Still, however, he is one of those fertile humorists
that are continually throwing out new portraits and presenting different
aspects from different points of view; and, often as he has been
described, I cannot resist the temptation to give a slight sketch of him
such as he has met my eye.

John Bull, to all appearance, is a plain, downright, matter-of-fact
fellow, with much less of poetry about him than rich prose. There is
little of romance in his nature, but a vast deal of strong natural
feeling. He excels in humor more than in wit; is jolly rather than gay;
melancholy rather than morose; can easily be moved to a sudden tear or
surprised into a broad laugh; but he loathes sentiment and has no turn for
light pleasantry. He is a boon companion, if you allow him in to have his
humor and to talk about himself; and he will stand by a friend in a
quarrel with life and purse, however soundly he may be cudgelled.

In this last respect, to tell the truth, he has a propensity to be
somewhat too ready. He is a busy-minded personage, who thinks not merely
for himself and family, but for all the country round, and is most
generously disposed to be everybody's champion. He is continually
volunteering his services to settle his neighbor's affairs, and takes it
in great dudgeon if they engage in any matter of consequence without
asking his advice, though he seldom engages in any friendly office of the
kind without finishing by getting into a squabble with all parties, and
then railing bitterly at their ingratitude. He unluckily took lessons in
his youth in the noble science of defence, and having accomplished himself
in the use of his limbs and his weapons and become a perfect master at
boxing and cudgel-play, he has had a troublesome life of it ever since. He
cannot hear of a quarrel between the most distant of his neighbors but he
begins incontinently to fumble with the head of his cudgel, and consider
whether his interest or honor does not require that he should meddle in
the broil. Indeed, he has extended his relations of pride and policy so
completely over the whole country that no event can take place without
infringing some of his finely-spun rights and dignities. Couched in his
little domain, with these filaments stretching forth in every direction,
he is like some choleric, bottle-bellied old spider who has woven his web
over a whole chamber, so that a fly cannot buzz nor a breeze blow without
startling his repose and causing him to sally forth wrathfully from his
den.

Though really a good-hearted, good-tempered old fellow at bottom, yet he
is singularly fond of being in the midst of contention. It is one of his
peculiarities, however, that he only relishes the beginning of an affray;
he always goes into a fight with alacrity, but comes out of it grumbling
even when victorious; and though no one fights with more obstinacy to
carry a contested point, yet when the battle is over and he comes to the
reconciliation he is so much taken up with the mere shaking of hands that
he is apt to let his antagonist pocket all that they have been quarrelling
about. It is not, therefore, fighting that he ought so much to be on his
guard against as making friends. It is difficult to cudgel him out of a
farthing; but put him in a good humor and you may bargain him out of all
the money in his pocket. He is like a stout ship which will weather the
roughest storm uninjured, but roll its masts overboard in the succeeding
calm.

He is a little fond of playing the magnifico abroad, of pulling out a long
purse, flinging his money bravely about at boxing-matches, horse-races,
cock-fights, and carrying a high head among "gentlemen of the fancy:" but
immediately after one of these fits of extravagance he will be taken with
violent qualms of economy; stop short at the most trivial expenditure;
talk desperately of being ruined and brought upon the parish; and in such
moods will not pay the smallest tradesman's bill without violent
altercation. He is, in fact, the most punctual and discontented paymaster
in the world, drawing his coin out of his breeches pocket with infinite
reluctance, paying to the uttermost farthing, but accompanying every
guinea with a growl.

With all his talk of economy, however, he is a bountiful provider and a
hospitable housekeeper. His economy is of a whimsical kind, its chief
object being to devise how he may afford to be extravagant; for he will
begrudge himself a beefsteak and pint of port one day that he may roast an
ox whole, broach a hogshead of ale, and treat all his neighbors on the
next.

His domestic establishment is enormously expensive, not so much from any
great outward parade as from the great consumption of solid beef and
pudding, the vast number of followers he feeds and clothes, and his
singular disposition to pay hugely for small services. He is a most kind
and indulgent master, and, provided his servants humor his peculiarities,
flatter his vanity a little now and then, and do not peculate grossly on
him before his face they may manage him to perfection. Everything that
lives on him seems to thrive and grow fat. His house-servants are well
paid and pampered and have little to do. His horses are sleek and lazy and
prance slowly before his state carriage; and his house-dogs sleep quietly
about the door and will hardly bark at a housebreaker.

His family mansion is an old castellated manor-house, gray with age, and
of a most venerable though weather-beaten appearance. It has been built
upon no regular plan, but is a vast accumulation of parts erected in
various tastes and ages. The centre bears evident traces of Saxon
architecture, and is as solid as ponderous stone and old English oak can
make it. Like all the relics of that style, it is full of obscure
passages, intricate mazes, and dusty chambers, and, though these have been
partially lighted up in modern days, yet there are many places where you
must still grope in the dark. Additions have been made to the original
edifice from time to time, and great alterations have taken place; towers
and battlements have been erected during wars and tumults: wings built in
time of peace; and out-houses, lodges, and offices run up according to the
whim or convenience of different generations, until it has become one of
the most spacious, rambling tenements imaginable. An entire wing is taken
up with the family chapel, a reverend pile that must have been exceedingly
sumptuous, and, indeed, in spite of having been altered and simplified at
various periods, has still a look of solemn religious pomp. Its walls
within are storied with the monuments of John's ancestors, and it is
snugly fitted up with soft cushions and well-lined chairs, where such of
his family as are inclined to church services may doze comfortably in the
discharge of their duties.

To keep up this chapel has cost John much money; but he is staunch in his
religion and piqued in his zeal, from the circumstance that many
dissenting chapels have been erected in his vicinity, and several of his
neighbors, with whom he has had quarrels, are strong papists.

To do the duties of the chapel he maintains, at a large expense, a pious
and portly family chaplain. He is a most learned and decorous personage
and a truly well-bred Christian, who always backs the old gentleman in his
opinions, winks discreetly at his little peccadilloes, rebukes the
children when refractory, and is of great use in exhorting the tenants to
read their Bibles, say their prayers, and, above all, to pay their rents
punctually and without grumbling.

The family apartments are in a very antiquated taste, somewhat heavy and
often inconvenient, but full of the solemn magnificence of former times,
fitted up with rich though faded tapestry, unwieldy furniture, and loads
of massy, gorgeous old plate. The vast fireplaces, ample kitchens,
extensive cellars, and sumptuous banqueting-halls all speak of the roaring
hospitality of days of yore, of which the modern festivity at the
manor-house is but a shadow. There are, however, complete suites of rooms
apparently deserted and time-worn, and towers and turrets that are
tottering to decay, so that in high winds there is danger of their
tumbling about the ears of the household.

John has frequently been advised to have the old edifice thoroughly
overhauled, and to have some of the useless parts pulled down, and the
others strengthened with their materials; but the old gentleman always
grows testy on this subject. He swears the house is an excellent house;
that it is tight and weather-proof, and not to be shaken by tempests; that
it has stood for several hundred years, and therefore is not likely to
tumble down now; that as to its being inconvenient, his family is
accustomed to the inconveniences and would not be comfortable without
them; that as to its unwieldy size and irregular construction, these
result from its being the growth of centuries and being improved by the
wisdom of every generation; that an old family, like his, requires a large
house to dwell in; new, upstart families may live in modern cottages and
snug boxes; but an old English family should inhabit an old English
manor-house. If you point out any part of the building as superfluous, he
insists that it is material to the strength or decoration of the rest and
the harmony of the whole, and swears that the parts are so built into each
other that if you pull down one, you run the risk of having the whole
about your ears.

The secret of the matter is, that John has a great disposition to protect
and patronize. He thinks it indispensable to the dignity of an ancient and
honorable family to be bounteous in its appointments and to be eaten up by
dependents; and so, partly from pride and partly from kind-heartedness, he
makes it a rule always to give shelter and maintenance to his
superannuated servants.

The consequence is, that, like many other venerable family establishments,
his manor is incumbered by old retainers whom he cannot turn off, and an
old style which he cannot lay down. His mansion is like a great hospital
of invalids, and, with all its magnitude, is not a whit too large for its
inhabitants. Not a nook or corner but is of use in housing some useless
personage. Groups of veteran beef-eaters, gouty pensioners, and retired
heroes of the buttery and the larder are seen lolling about its ways,
crawling over its lawns, dozing under its tree, or sunning themselves upon
the benches at its doors. Every office and out-house is garrisoned by
these supernumeraries and their families; for they are amazingly prolific,
and when they die off are sure to leave John a legacy of hungry mouths to
be provided for. A mattock cannot be struck against the most mouldering
tumble-down tower but out pops, from some cranny or loophole, the gray
pate of some superannuated hanger-on, who has lived at John's expense all
his life, and makes the most grievous outcry at their pulling down the
roof from over the head of a worn-out servant of the family. This is an
appeal that John's honest heart never can withstand; so that a man who has
faithfully eaten his beef and pudding all his life is sure to be rewarded
with a pipe and tankard in his old days.

A great part of his park also is turned into paddocks, where his
broken-down chargers are turned loose to graze undisturbed for the
remainder of their existences&mdash;a worthy example of grateful
recollection which, if some of his neighbors were to imitate, would not be
to their discredit. Indeed, it is one of his great pleasures to point out
these old steeds to his visitors, to dwell on their good qualities, extol
their past services, and boast, with some little vain-glory, of the
perilous adventures and hardy exploits through which they have carried
him.

He is given, however, to indulge his veneration for family usages and
family encumbrances to a whimsical extent. His manor is infested by gangs
of gypsies; yet he will not suffer them to be driven off, because they
have infested the place time out of mind and been regular poachers upon
every generation of the family. He will scarcely permit a dry branch to be
lopped from the great trees that surround the house, lest it should molest
the rooks that have bred there for centuries. Owls have taken possession
of the dovecote, but they are hereditary owls and must not be disturbed.
Swallows have nearly choked up every chimney with their nests; martins
build in every frieze and cornice; crows flutter about the towers and
perch on every weather-cock; and old gray-headed rats may be seen in every
quarter of the house, running in and out of their holes undauntedly in
broad daylight. In short, John has such a reverence for everything that
has been long in the family that he will not hear even of abuses being
reformed, because they are good old family abuses.

All these whims and habits have concurred woefully to drain the old
gentleman's purse; and as he prides himself on punctuality in money
matters and wishes to maintain his credit in the neighborhood, they have
caused him great perplexity in meeting his engagements. This, too, has
been increased by the altercations and heart-burnings which are
continually taking place in his family. His children have been brought up
to different callings and are of different ways of thinking; and as they
have always been allowed to speak their minds freely, they do not fail to
exercise the privilege most clamorously in the present posture of his
affairs. Some stand up for the honor of the race, and are clear that the
old establishment should be kept up in all its state, whatever may be the
cost; others, who are more prudent and considerate, entreat the old
gentleman to retrench his expenses and to put his whole system of
housekeeping on a more moderate footing. He has, indeed, at times, seemed
inclined to listen to their opinions, but their wholesome advice has been
completely defeated by the obstreperous conduct of one of his sons. This
is a noisy, rattle-pated fellow, of rather low habits, who neglects his
business to frequent ale-houses&mdash;is the orator of village clubs and a
complete oracle among the poorest of his father's tenants. No sooner does
he hear any of his brothers mention reform or retrenchment than up he
jumps, takes the words out of their mouths, and roars out for an overturn.
When his tongue is once going nothing can stop it. He rants about the
room; hectors the old man about his spendthrift practices; ridicules his
tastes and pursuits; insists that he shall turn the old servants out of
doors, give the broken-down horses to the hounds, send the fat chaplain
packing, and take a field-preacher in his place; nay, that the whole
family mansion shall be levelled with the ground, and a plain one of brick
and mortar built in its place. He rails at every social entertainment and
family festivity, and skulks away growling to the ale-house whenever an
equipage drives up to the door. Though constantly complaining of the
emptiness of his purse, yet he scruples not to spend all his pocket-money
in these tavern convocations, and even runs up scores for the liquor over
which he preaches about his father's extravagance.

It may readily be imagined how little such thwarting agrees with the old
cavalier's fiery temperament. He has become so irritable from repeated
crossings that the mere mention of retrenchment or reform is a signal for
a brawl between him and the tavern oracle. As the latter is too sturdy and
refractory for paternal discipline, having grown out of all fear of the
cudgel, they have frequent scenes of wordy warfare, which at times run so
high that John is fain to call in the aid of his son Tom, an officer who
has served abroad, but is at present living at home on half-pay. This last
is sure to stand by the old gentleman, right or wrong, likes nothing so
much as a rocketing, roistering life, and is ready at a wink or nod to out
sabre and flourish it over the orator's head if he dares to array himself
against parental authority.

These family dissensions, as usual, have got abroad, and are rare food for
scandal in John's neighborhood. People begin to look wise and shake their
heads whenever his affairs are mentioned. They all "hope that matters are
not so bad with him as represented; but when a man's own children begin to
rail at his extravagance, things must be badly managed. They understand he
is mortgaged over head and ears and is continually dabbling with
money-lenders. He is certainly an open-handed old gentleman, but they fear
he has lived too fast; indeed, they never knew any good come of this
fondness for hunting, racing revelling, and prize-fighting. In short, Mr.
Bull's estate is a very fine one and has been in the family a long while,
but, for all that, they have known many finer estates come to the hammer."

What is worst of all, is the effect which these pecuniary embarrassments
and domestic feuds have had on the poor man himself. Instead of that jolly
round corporation and smug rosy face which he used to present, he has of
late become as shrivelled and shrunk as a frost-bitten apple. His scarlet
gold-laced waistcoat, which bellied out so bravely in those prosperous
days when he sailed before the wind, now hangs loosely about him like a
mainsail in a calm. His leather breeches are all in folds and wrinkles,
and apparently have much ado to hold up the boots that yawn on both sides
of his once sturdy legs.

Instead of strutting about as formerly with his three-cornered hat on one
side, flourishing his cudgel, and bringing it down every moment with a
hearty thump upon the ground, looking every one sturdily in the face, and
trolling out a stave of a catch or a drinking-song, he now goes about
whistling thoughtfully to himself, with his head drooping down, his cudgel
tucked under his arm, and his hands thrust to the bottom of his breeches
pockets, which are evidently empty.

Such is the plight of honest John Bull at present, yet for all this the
old fellow's spirit is as tall and as gallant as ever. If you drop the
least expression of sympathy or concern, he takes fire in an instant;
swears that he is the richest and stoutest fellow in the country; talks of
laying out large sums to adorn his house or buy another estate; and with a
valiant swagger and grasping of his cudgel longs exceedingly to have
another bout at quarter-staff.

Though there may be something rather whimsical in all this, yet I confess
I cannot look upon John's situation without strong feelings of interest.
With all his odd humors and obstinate prejudices he is a sterling-hearted
old blade. He may not be so wonderfully fine a fellow as he thinks
himself, but he is at least twice as good as his neighbors represent him.
His virtues are all his own&mdash;all plain, homebred, and unaffected. His
very faults smack of the raciness of his good qualities. His extravagance
savors of his generosity, his quarrelsomeness of his courage, his
credulity of his open faith, his vanity of his pride, and his bluntness of
his sincerity. They are all the redundancies of a rich and liberal
character. He is like his own oak, rough without, but sound and solid
within; whose bark abounds with excrescences in proportion to the growth
and grandeur of the timber; and whose branches make a fearful groaning and
murmuring in the least storm from their very magnitude and luxuriance.
There is something, too, in the appearance of his old family mansion that
is extremely poetical and picturesque; and as long as it can be rendered
comfortably habitable I should almost tremble to see it meddled with
during the present conflict of tastes and opinions. Some of his advisers
are no doubt good architects that might be of service; but many, I fear,
are mere levellers, who, when they had once got to work with their
mattocks on this venerable edifice, would never stop until they had
brought it to the ground, and perhaps buried themselves among the ruins.
All that I wish is, that John's present troubles may teach him more
prudence in future&mdash;that he may cease to distress his mind about
other people's affairs; that he may give up the fruitless attempt to
promote the good of his neighbors and the peace and happiness of the
world, by dint of the cudgel; that he may remain quietly at home;
gradually get his house into repair; cultivate his rich estate according
to his fancy; husband his income&mdash;if he thinks proper; bring his
unruly children into order&mdash;if he can; renew the jovial scenes of
ancient prosperity; and long enjoy on his paternal lands a green, an
honorable, and a merry old age.
[img[images/0509m.jpg]]

"""
Go, little booke, God send thee good passage,
And specially let this be thy prayere,
Unto them all that thee will read or hear,
Where thou art wrong, after their help to call,
Thee to correct in any part or all.
CHAUCER'S Belle Dame sans Mercie.
"""

IN concluding a second volume of the Sketch Book the Author cannot but
express his deep sense of the indulgence with which his first has been
received, and of the liberal disposition that has been evinced to treat
him with kindness as a stranger. Even the critics, whatever may be said of
them by others, he has found to be a singularly gentle and good-natured
race; it is true that each has in turn objected to some one or two
articles, and that these individual exceptions, taken in the aggregate,
would amount almost to a total condemnation of his work; but then he has
been consoled by observing that what one has particularly censured another
has as particularly praised; and thus, the encomiums being set off against
the objections, he finds his work, upon the whole, commended far beyond
its deserts.

"""
* Closing the second volume of the London edition.
"""

He is aware that he runs a risk of forfeiting much of this kind favor by
not following the counsel that has been liberally bestowed upon him; for
where abundance of valuable advice is given gratis it may seem a man's own
fault if he should go astray. He only can say in his vindication that he
faithfully determined for a time to govern himself in his second volume by
the opinions passed upon his first; but he was soon brought to a stand by
the contrariety of excellent counsel. One kindly advised him to avoid the
ludicrous; another to shun the pathetic; a third assured him that he was
tolerable at description, but cautioned him to leave narrative alone;
while a fourth declared that he had a very pretty knack at turning a
story, and was really entertaining when in a pensive mood, but was
grievously mistaken if he imagined himself to possess a spirit of humor.

Thus perplexed by the advice of his friends, who each in turn closed some
particular path, but left him all the world beside to range in, he found
that to follow all their counsels would, in fact, be to stand still. He
remained for a time sadly embarrassed, when all at once the thought struck
him to ramble on as he had begun; that his work being miscellaneous and
written for different humors, it could not be expected that any one would
be pleased with the whole; but that if it should contain something to suit
each reader, his end would be completely answered. Few guests sit down to
a varied table with an equal appetite for every dish. One has an elegant
horror of a roasted pig; another holds a curry or a devil in utter
abomination; a third cannot tolerate the ancient flavor of venison and
wild-fowl; and a fourth, of truly masculine stomach, looks with sovereign
contempt on those knick-knacks here and there dished up for the ladies.
Thus each article is in condemned in its turn, and yet amidst this variety
of appetites seldom does a dish go away from the table without being
tasted and relished by some one or other of the guests.

With these considerations he ventures to serve up this second volume in
the same heterogeneous way with his first; simply requesting the reader,
if he should find here and there something to please him, to rest assured
that it was written expressly for intelligent readers like himself; but
entreating him, should he find anything to dislike, to tolerate it, as one
of those articles which the author has been obliged to write for readers
of a less refined taste.

To be serious: The author is conscious of the numerous faults and
imperfections of his work, and well aware how little he is disciplined and
accomplished in the arts of authorship. His deficiencies are also
increased by a diffidence arising from his peculiar situation. He finds
himself writing in a strange land, and appearing before a public which he
has been accustomed from childhood to regard with the highest feelings of
awe and reverence. He is full of solicitude to deserve their approbation,
yet finds that very solicitude continually embarrassing his powers and
depriving him of that case and confidence which are necessary to
successful exertion. Still, the kindness with which he is treated
encourages him to go on, hoping that in time he may acquire a steadier
footing; and thus he proceeds, half venturing, half shrinking, surprised
at his own good-fortune and wondering at his own temerity.
What I write is most true..... I have a whole booke of cases lying by me,
which if I should sette foorth, some grave auntients (within the hearing
of Bow Bell) would be out of charity with me. NASH.

[img[images/9337m.jpg]]

IN the centre of the great City of London lies a small neighborhood,
consisting of a cluster of narrow streets and courts, of very venerable
and debilitated houses, which goes by the name of LITTLE BRITAIN. Christ
Church School and St. Bartholomew's Hospital bound it on the west;
Smithfield and Long Lane on the north; Aldersgate Street, like an arm of
the sea, divides it from the eastern part of the city; whilst the yawning
gulf of Bull-and-Mouth Street separates it from Butcher Lane and the
regions of Newgate. Over this little territory, thus bounded and
designated, the great dome of St. Paul's, swelling above the intervening
houses of Paternoster Row, Amen Corner, and Ave-Maria Lane, looks down
with an air of motherly protection.

This quarter derives its appellation from having been, in ancient times,
the residence of the Dukes of Brittany. As London increased, however, rank
and fashion rolled off to the west, and trade, creeping on at their heels,
took possession of their deserted abodes. For some time Little Britain
became the great mart of learning, and was peopled by the busy and
prolific race of booksellers: these also gradually deserted it, and,
emigrating beyond the great strait of Newgate Street, settled down in
Paternoster Row and St. Paul's Churchyard, where they continue to increase
and multiply even at the present day.

But, though thus fallen into decline, Little Britain still bears traces of
its former splendor. There are several houses ready to tumble down, the
fronts of which are magnificently enriched with old oaken carvings of
hideous faces, unknown birds, beasts, and fishes, and fruits and flowers
which it would perplex a naturalist to classify. There are also, in
Aldersgate Street, certain remains of what were once spacious and lordly
family mansions, but which have in latter days been subdivided into
several tenements. Here may often be found the family of a petty
tradesman, with its trumpery furniture, burrowing among the relics of
antiquated finery in great rambling time-stained apartments with fretted
ceilings, gilded cornices, and enormous marble fireplaces. The lanes and
courts also contain many smaller houses, not on so grand a scale, but,
like your small ancient gentry, sturdily maintaining their claims to equal
antiquity. These have their gable ends to the street, great bow windows
with diamond panes set in lead, grotesque carvings, and low arched
doorways.*

"""
* It is evident that the author of this interesting
communication has included, in his general title of Little
Britain, man of those little lanes and courts that belong
immediately to Cloth Fair.
"""

In this most venerable and sheltered little nest have I passed several
quiet years of existence, comfortably lodged in the second floor of one of
the smallest but oldest edifices. My sitting-room is an old wainscoted
chamber, with small panels and set off with a miscellaneous array of
furniture. I have a particular respect for three or four high-backed,
claw-footed chairs, covered with tarnished brocade, which bear the marks
of having seen better days, and have doubtless figured in some of the old
palaces of Little Britain. They seem to me to keep together and to look
down with sovereign contempt upon their leathern-bottomed neighbors, as I
have seen decayed gentry carry a high head among the plebeian society with
which they were reduced to associate. The whole front of my sitting-room
is taken up with a bow window, on the panes of which are recorded the
names of previous occupants for many generations, mingled with scraps of
very indifferent gentleman-like poetry, written in characters which I can
scarcely decipher, and which extol the charms of many a beauty of Little
Britain who has long, long since bloomed, faded, and passed away. As I am
an idle personage, with no apparent occupation, and pay my bill regularly
every week, I am looked upon as the only independent gentleman of the
neighborhood, and, being curious to learn the internal state of a
community so apparently shut up within itself, I have managed to work my
way into all the concerns and secrets of the place.

Little Britain may truly be called the heart's core of the city, the
stronghold of true John Bullism. It is a fragment of London as it was in
its better days, with its antiquated folks and fashions. Here flourish in
great preservation many of the holiday games and customs of yore. The
inhabitants most religiously eat pancakes on Shrove Tuesday, hot
cross-buns on Good Friday, and roast goose at Michaelmas; they send
love-letters on Valentine's Day, burn the Pope on the Fifth of November,
and kiss all the girls under the mistletoe at Christmas. Roast beef and
plum-pudding are also held in superstitious veneration, and port and
sherry maintain their grounds as the only true English wines, all others
being considered vile outlandish beverages.

Little Britain has its long catalogue of city wonders, which its
inhabitants consider the wonders of the world, such as the great bell of
St. Paul's, which sours all the beer when it tolls; the figures that
strike the hours at St. Dunstan's clock; the Monument; the lions in the
Tower; and the wooden giants in Guildhall. They still believe in dreams
and fortune-telling, and an old woman that lives in Bull-and-Mouth Street
makes a tolerable subsistence by detecting stolen goods and promising the
girls good husbands. They are apt to be rendered uncomfortable by comets
and eclipses, and if a dog howls dolefully at night it is looked upon as a
sure sign of death in the place. There are even many ghost-stories
current, particularly concerning the old mansion-houses, in several of
which it is said strange sights are sometimes seen. Lords and ladies, the
former in full-bottomed wigs, hanging sleeves, and swords, the latter in
lappets, stays, hoops, and brocade, have been seen walking up and down the
great waste chambers on moonlight nights, and are supposed to be the
shades of the ancient proprietors in their court-dresses.

Little Britain has likewise its sages and great men. One of the most
important of the former is a tall, dry old gentleman of the name of
Skryme, who keeps a small apothecary's shop. He has a cadaverous
countenance, full of cavities and projections, with a brown circle round
each eye, like a pair of horn spectacles. He is much thought of by the old
women, who consider him as a kind of conjurer because he has two or three
stuffed alligators hanging up in his shop and several snakes in bottles.
He is a great reader of almanacs and newspapers, and is much given to pore
over alarming accounts of plots, conspiracies, fires, earthquakes, and
volcanic eruptions; which last phenomena he considers as signs of the
times. He has always some dismal tale of the kind to deal out to his
customers with their doses, and thus at the same time puts both soul and
body into an uproar. He is a great believer in omens and predictions; and
has the prophecies of Robert Nixon and Mother Shipton by heart. No man can
make so much out of an eclipse, or even an unusually dark day; and he
shook the tail of the last comet over the heads of his customers and
disciples until they were nearly frightened out of their wits. He has
lately got hold of a popular legend or prophecy, on which he has been
unusually eloquent. There has been a saying current among the ancient
sibyls, who treasure up these things, that when the grasshopper on the top
of the Exchange shook hands with the dragon on the top of Bow Church
steeple, fearful events would take place. This strange conjunction, it
seems, has as strangely come to pass. The same architect has been engaged
lately on the repairs of the cupola of the Exchange and the steeple of Bow
Church; and, fearful to relate, the dragon and the grasshopper actually
lie, cheek by jole, in the yard of his workshop.

"Others," as Mr. Skryme is accustomed to say, "may go star-gazing, and
look for conjunctions in the heavens, but here is a conjunction on the
earth, near at home and under our own eyes, which surpasses all the signs
and calculations of astrologers." Since these portentous weathercocks have
thus laid their heads together, wonderful events had already occurred. The
good old king, notwithstanding that he had lived eighty-two years, had all
at once given up the ghost; another king had mounted the throne; a royal
duke had died suddenly; another, in France, had been murdered; there had
been radical meetings in all parts of the kingdom; the bloody scenes at
Manchester; the great plot in Cato Street; and, above all, the queen had
returned to England! All these sinister events are recounted by Mr. Skyrme
with a mysterious look and a dismal shake of the head; and being taken
with his drugs, and associated in the minds of his auditors with
stuffed-sea-monsters, bottled serpents, and his own visage, which is a
title-page of tribulation, they have spread great gloom through the minds
of the people of Little Britain. They shake their heads whenever they go
by Bow Church, and observe that they never expected any good to come of
taking down that steeple, which in old times told nothing but glad
tidings, as the history of Whittington and his Cat bears witness.

The rival oracle of Little Britain is a substantial cheesemonger, who
lives in a fragment of one of the old family mansions, and is as
magnificently lodged as a round-bellied mite in the midst of one of his
own Cheshires. Indeed, he is a man of no little standing and importance,
and his renown extends through Huggin lane and Lad lane, and even unto
Aldermanbury. His opinion is very much taken in affairs of state, having
read the Sunday papers for the last half century, together with the
Gentleman's Magazine, Rapin's History of England, and the Naval Chronicle.
His head is stored with invaluable maxims which have borne the test of
time and use for centuries. It is his firm opinion that "it is a moral
impossible," so long as England is true to herself, that anything can
shake her: and he has much to say on the subject of the national debt,
which, somehow or other, he proves to be a great national bulwark and
blessing. He passed the greater part of his life in the purlieus of Little
Britain until of late years, when, having become rich and grown into the
dignity of a Sunday cane, he begins to take his pleasure and see the
world. He has therefore made several excursions to Hampstead, Highgate,
and other neighboring towns, where he has passed whole afternoons in
looking back upon the metropolis through a telescope and endeavoring to
descry the steeple of St. Bartholomew's. Not a stage-coachman of
Bull-and-Mouth Street but touches his hat as he passes, and he is
considered quite a patron at the coach-office of the Goose and Gridiron,
St. Paul's Churchyard. His family have been very urgent for him to make an
expedition to Margate, but he has great doubts of those new gimcracks, the
steamboats, and indeed thinks himself too advanced in life to undertake
sea-voyages.

Little Britain has occasionally its factions and divisions, and party
spirit ran very high at one time, in consequence of two rival "Burial
Societies" being set up in the place. One held its meeting at the Swan and
Horse-Shoe, and was patronized by the cheesemonger; the other at the Cock
and Crown, under the auspices of the apothecary: it is needless to say
that the latter was the most flourishing. I have passed an evening or two
at each, and have acquired much valuable information as to the best mode
of being buried, the comparative merits of churchyards, together with
divers hints on the subject of patent iron coffins. I have heard the
question discussed in all its bearings as to the legality of prohibiting
the latter on account of their durability. The feuds occasioned by these
societies have happily died of late; but they were for a long time
prevailing themes of controversy, the people of Little Britain being
extremely solicitous of funeral honors and of lying comfortably in their
graves.

Besides these two funeral societies there is a third of quite a different
cast, which tends to throw the sunshine of good-humor over the whole
neighborhood. It meets once a week at a little old-fashioned house kept by
a jolly publican of the name of Wagstaff, and bearing for insignia a
resplendent half-moon, with a most seductive bunch of grapes. The whole
edifice is covered with inscriptions to catch the eye of the thirsty
wayfarer; such as "Truman, Hanbury, and Co's Entire," "Wine, Rum, and
Brandy Vaults," "Old Tom, Rum, and Compounds," etc. This indeed has been a
temple of Bacchus and Momus from time immemorial. It has always been in
the family of the Wagstaffs, so that its history is tolerably preserved by
the present landlord. It was much frequented by the gallants and
cavalieros of the reign of Elizabeth, and was looked into now and then by
the wits of Charles the Second's day. But what Wagstaff principally prides
himself upon is that Henry the Eighth, in one of his nocturnal rambles,
broke the head of one of his ancestors with his famous walking-staff.
This, however, is considered as rather a dubious and vain-glorious boast
of the landlord.

The club which now holds its weekly sessions here goes by the name of "the
Roaring Lads of Little Britain." They abound in old catches, glees, and
choice stories that are traditional in the place and not to be met with in
any other part of the metropolis. There is a madcap undertaker who is
inimitable at a merry song, but the life of the club, and indeed the prime
wit of Little Britain, is bully Wagstaff himself. His ancestors were all
wags before him, and he has inherited with the inn a large stock of songs
and jokes, which go with it from generation to generation as heirlooms. He
is a dapper little fellow, with bandy legs and pot belly, a red face with
a moist merry eye, and a little shock of gray hair behind. At the opening
of every club night he is called in to sing his "Confession of Faith,"
which is the famous old drinking trowl from "Gammer Gurton's Needle." He
sings it, to be sure, with many variations, as he received it from his
father's lips; for it has been a standing favorite at the Half-Moon and
Bunch of Grapes ever since it was written; nay, he affirms that his
predecessors have often had the honor of singing it before the nobility
and gentry at Christmas mummeries, when Little Britain was in all its
glory.*

[img[images/0345m.jpg]]

"""
* As mine host of the Half-Moon's Confession of Faith may
not be familiar to the majority of readers, and as it is a
specimen of the current songs of Little Britain, I subjoin
it in its original orthography. I would observe that the
whole club always join in the chorus with a fearful thumping
on the table and clattering of pewter pots.

I cannot eate but lytle meate,
My stomacke is not good,
But sure I thinke that I can drinke
With him that weares a hood.
Though I go bare, take ye no care,
I nothing am a colde,
I stuff my skyn so full within,
Of joly good ale and olde.

Chorus. Backe and syde go bare, go bare,
Both foote and hand go colde,
But, belly, God send thee good ale ynoughe,
Whether it be new or olde.

I have no rost, but a nut brawne toste
And a crab laid in the fyre;
A little breade shall do me steade,
Much breade I not desyre.
No frost nor snow, nor winde, I trowe,
Can hurte mee, if I wolde,
I am so wrapt and throwly lapt
Of joly good ale and olde.

Chorus. Backe and syde go bare, go bare, etc.

And Tyb my wife, that, as her lyfe,
Loveth well good ale to seeke,
Full oft drynkes shee, tyll ye may see,
The teares run downe her cheeke.
Then doth shee trowle to me the bowle,
Even as a mault-worme sholde,
And sayth, sweete harte, I took my parte
Of this jolly good ale and olde.

Chorus. Backe and syde go bare, go bare, etc.

Now let them drynke, tyll they nod and winke,
Even as goode fellowes sholde doe,
They shall not mysse to have the blisse,
Good ale doth bring men to;
And all poore soules that have scowred bowles,
Or have them lustily trolde,
God save the lyves of them and their wives,
Whether they be yonge or olde.

Chorus. Backe and syde go bare, go bare, etc.
"""

It would do one's heart good to hear, on a club night, the shouts of
merriment, the snatches of song, and now and then the choral bursts of
half a dozen discordant voices, which issue from this jovial mansion. At
such times the street is lined with listeners, who enjoy a delight equal
to that of gazing into a confectioner's window or snuffing up the steams
of a cook-shop.

There are two annual events which produce great stir and sensation in
Little Britain: these are St. Bartholomew's Fair and the Lord Mayor's Day.
During the time of the Fair, which is held in the adjoining regions of
Smithfield, there is nothing going on but gossiping and gadding about. The
late quiet streets of Little Britain are overrun with an irruption of
strange figures and faces; every tavern is a scene of rout and revel. The
fiddle and the song are heard from the taproom morning, noon, and night;
and at each window may be seen some group of boon companions, with
half-shut eyes, hats on one side, pipe in mouth and tankard in hand,
fondling and prosing, and singing maudlin songs over their liquor. Even
the sober decorum of private families, which I must say is rigidly kept up
at other times among my neighbors, is no proof against this saturnalia.
There is no such thing as keeping maid-servants within doors. Their brains
are absolutely set madding with Punch and the Puppet-Show, the Flying
Horses, Signior Polito, the Fire-Eater, the celebrated Mr. Paap, and the
Irish Giant. The children too lavish all their holiday money in toys and
gilt gingerbread, and fill the house with the Lilliputian din of drums,
trumpets, and penny whistles.

But the Lord Mayor's Day is the great anniversary. The Lord Mayor is
looked up to by the inhabitants of Little Britain as the greatest
potentate upon earth, his gilt coach with six horses as the summit of
human splendor, and his procession, with all the sheriffs and aldermen in
his train, as the grandest of earthly pageants. How they exult in the idea
that the king himself dare not enter the city without first knocking at
the gate of Temple Bar and asking permission of the Lord Mayor; for if he
did, heaven and earth! there is no knowing what might be the consequence.
The man in armor who rides before the Lord Mayor, and is the city
champion, has orders to cut down everybody that offends against the
dignity of the city; and then there is the little man with a velvet
porringer on his head, who sits at the window of the state coach and holds
the city sword, as long as a pikestaff. Odd's blood! if he once draws that
sword, Majesty itself is not safe.

Under the protection of this mighty potentate, therefore, the good people
of Little Britain sleep in peace. Temple Bar is an effectual barrier
against all interior foes; and as to foreign invasion, the Lord Mayor has
but to throw himself into the Tower, call in the train-bands, and put the
standing army of Beef-eaters under arms, and he may bid defiance to the
world!

Thus wrapped up in its own concerns, its own habits, and its own opinions,
Little Britain has long flourished as a sound heart to this great fungous
metropolis. I have pleased myself with considering it as a chosen spot,
where the principles of sturdy John Bullism were garnered up, like seed
corn, to renew the national character when it had run to waste and
degeneracy. I have rejoiced also in the general spirit of harmony that
prevailed throughout it; for though there might now and then be a few
clashes of opinion between the adherents of the cheesemonger and the
apothecary, and an occasional feud between the burial societies, yet these
were but transient clouds and soon passed away. The neighbors met with
good-will, parted with a shake of the hand, and never abused each other
except behind their backs.

[img[images/0349m.jpg]]

I could give rare descriptions of snug junketing parties at which I have
been present, where we played at All-Fours, Pope-Joan, Tom-come-tickle-me,
and other choice old games, and where we sometimes had a good old English
country dance to the tune of Sir Roger de Coverley. Once a year also the
neighbors would gather together and go on a gypsy party to Epping Forest.
It would have done any man's heart good to see the merriment that took
place here as we banqueted on the grass under the trees. How we made the
woods ring with bursts of laughter at the songs of little Wagstaff and the
merry undertaker! After dinner, too, the young folks would play at
blindman's-buff and hide-and-seek, and it was amusing to see them tangled
among the briers, and to hear a fine romping girl now and then squeak from
among the bushes. The elder folks would gather round the cheesemonger and
the apothecary to hear them talk politics, for they generally brought out
a newspaper in their pockets to pass away time in the country. They would
now and then, to be sure, get a little warm in argument; but their
disputes were always adjusted by reference to a worthy old umbrella-maker
in a double chin, who, never exactly comprehending the subject, managed
somehow or other to decide in favor of both parties.

All empires, however, says some philosopher or historian, are doomed to
changes and revolutions. Luxury and innovation creep in, factions arise,
and families now and then spring up whose ambition and intrigues throw the
whole system into confusion. Thus in letter days has the tranquillity of
Little Britain been grievously disturbed and its golden simplicity of
manners threatened with total subversion by the aspiring family of a
retired butcher.

The family of the Lambs had long been among the most thriving and popular
in the neighborhood: the Miss Lambs were the belles of Little Britain, and
everybody was pleased when Old Lamb had made money enough to shut up shop
and put his name on a brass plate on his door. In an evil hour, however,
one of the Miss Lambs had the honor of being a lady in attendance on the
Lady Mayoress at her grand annual ball, on which occasion she wore three
towering ostrich feathers on her head. The family never got over it; they
were immediately smitten with a passion for high life; set up a one-horse
carriage, put a bit of gold lace round the errand-boy's hat, and have been
the talk and detestation of the whole neighborhood ever since. They could
no longer be induced to play at Pope-Joan or blindman's-buff; they could
endure no dances but quadrilles, which nobody had ever heard of in Little
Britain; and they took to reading novels, talking bad French, and playing
upon the piano. Their brother, too, who had been articled to an attorney,
set up for a dandy and a critic, characters hitherto unknown in these
parts, and he confounded the worthy folks exceedingly by talking about
Kean, the Opera, and the "Edinburgh Review."

What was still worse, the Lambs gave a grand ball, to which they neglected
to invite any of their old neighbors; but they had a great deal of genteel
company from Theobald's Road, Red Lion Square, and other parts towards the
west. There were several beaux of their brother's acquaintance from Gray's
Inn Lane and Hatton Garden, and not less than three aldermen's ladies with
their daughters. This was not to be forgotten or forgiven. All Little
Britain was in an uproar with the smacking of whips, the lashing of in
miserable horses, and the rattling and jingling of hackney-coaches. The
gossips of the neighborhood might be seen popping their night-caps out at
every window, watching the crazy vehicles rumble by; and there was a knot
of virulent old cronies that kept a look-out from a house just opposite
the retired butcher's and scanned and criticised every one that knocked at
the door.

This dance was a cause of almost open war, and the whole neighborhood
declared they would have nothing more to say to the Lambs. It is true that
Mrs. Lamb, when she had no engagements with her quality acquaintance,
would give little humdrum tea-junketings to some of her old cronies,
"quite," as she would say, "in a friendly way;" and it is equally true
that her invitations were always accepted, in spite of all previous vows
to the contrary. Nay, the good ladies would sit and be delighted with the
music of the Miss Lambs, who would condescend to strum an Irish melody for
them on the piano; and they would listen with wonderful interest to Mrs.
Lamb's anecdotes of Alderman Plunket's family, of Portsoken Ward, and the
Miss Timberlakes, the rich heiresses of Crutched Friars but then they
relieved their consciences and averted the reproaches of their
confederates by canvassing at the next gossiping convocation everything
that had passed, and pulling the Lambs and their rout all to pieces.

The only one of the family that could not be made fashionable was the
retired butcher himself. Honest Lamb, in spite of the meekness of his
name, was a rough, hearty old fellow, with the voice of a lion, a head of
black hair like a shoe-brush, and a broad face mottled like his own beef.
It was in vain that the daughters always spoke of him as "the old
gentleman," addressed him as "papa" in tones of infinite softness, and
endeavored to coax him into a dressing-gown and slippers and other
gentlemanly habits. Do what they might, there was no keeping down the
butcher. His sturdy nature would break through all their glozings. He had
a hearty vulgar good-humor that was irrepressible. His very jokes made his
sensitive daughters shudder, and he persisted in wearing his blue cotton
coat of a morning, dining at two o'clock, and having a "bit of sausage
with his tea."

He was doomed, however, to share the unpopularity of his family. He found
his old comrades gradually growing cold and civil to him, no longer
laughing at his jokes, and now and then throwing out a fling at "some
people" and a hint about "quality binding." This both nettled and
perplexed the honest butcher; and his wife and daughters, with the
consummate policy of the shrewder sex, taking advantage of the
circumstance, at length prevailed upon him to give up his afternoon's pipe
and tankard at Wagstaff's, to sit after dinner by himself and take his
pint of port&mdash;a liquor he detested&mdash;and to nod in his chair in
solitary and dismal gentility.

The Miss Lambs might now be seen flaunting along the streets in French
bonnets with unknown beaux, and talking and laughing so loud that it
distressed the nerves of every good lady within hearing. They even went so
far as to attempt patronage, and actually induced a French dancing master
to set up in the neighborhood; but the worthy folks of Little Britain took
fire at it, and did so persecute the poor Gaul that he was fain to pack up
fiddle and dancing-pumps and decamp with such precipitation that he
absolutely forgot to pay for his lodgings.

I had flattered myself, at first, with the idea that all this fiery
indignation on the part of the community was merely the overflowing of
their zeal for good old English manners and their horror of innovation,
and I applauded the silent contempt they were so vociferous in expressing
for upstart pride, French fashions and the Miss Lambs. But I grieve to say
that I soon perceived the infection had taken hold, and that my neighbors,
after condemning, were beginning to follow their example. I overheard my
landlady importuning her husband to let their daughters have one quarter
at French and music, and that they might take a few lessons in quadrille.
I even saw, in the course of a few Sundays, no less than five French
bonnets, precisely like those of the Miss Lambs, parading about Little
Britain.

I still had my hopes that all this folly would gradually die away, that
the Lambs might move out of the neighborhood, might die, or might run away
with attorneys' apprentices, and that quiet and simplicity might be again
restored to the community. But unluckily a rival power arose. An opulent
oilman died, and left a widow with a large jointure and a family of buxom
daughters. The young ladies had long been repining in secret at the
parsimony of a prudent father, which kept down all their elegant
aspirings. Their ambition, being now no longer restrained, broke out into
a blaze, and they openly took the field against the family of the butcher.
It is true that the Lambs, having had the first start, had naturally an
advantage of them in the fashionable career. They could speak a little bad
French, play the piano, dance quadrilles, and had formed high
acquaintances; but the Trotters were not to be distanced. When the Lambs
appeared with two feathers in their hats, the Miss Trotters mounted four
and of twice as fine colors. If the Lambs gave a dance, the Trotters were
sure not to be behindhand; and, though they might not boast of as good
company, yet they had double the number and were twice as merry.

The whole community has at length divided itself into fashionable factions
under the banners of these two families. The old games of Pope-Joan and
Tom-come-tickle-me are entirely discarded; there is no such thing as
getting up an honest country dance; and on my attempting to kiss a young
lady under the mistletoe last Christmas, I was indignantly repulsed, the
Miss Lambs having pronounced it "shocking vulgar." Bitter rivalry has also
broken out as to the most fashionable part of Little Britain, the Lambs
standing up for the dignity of Cross-Keys Square, and the Trotters for the
vicinity of St. Bartholomew's.

Thus is this little territory torn by factions and internal dissensions,
like the great empire whose name it bears; and what will be the result
would puzzle the apothecary himself, with all his talent at prognostics,
to determine, though I apprehend that it will terminate in the total
downfall of genuine John Bullism.

The immediate effects are extremely unpleasant to me. Being a single man,
and, as I observed before, rather an idle good-for-nothing personage, I
have been considered the only gentleman by profession in the place. I
stand therefore in high favor with both parties, and have to hear all
their cabinet counsels and mutual backbitings. As I am too civil not to
agree with the ladies on all occasions, I have committed myself most
horribly with both parties by abusing their opponents. I might manage to
reconcile this to my conscience, which is a truly accommodating one, but I
cannot to my apprehension: if the Lambs and Trotters ever come to a
reconciliation and compare notes, I am ruined!

I have determined, therefore, to beat a retreat in time, and am actually
looking out for some other nest in this great city where old English
manners are still kept up, where French is neither eaten, drunk, danced,
nor spoken, and where there are no fashionable families of retired
tradesmen. This found, I will, like a veteran rat, hasten away before I
have an old house about my ears, bid a long, though a sorrowful adieu to
my present abode, and leave the rival factions of the Lambs and the
Trotters to divide the distracted empire of LITTLE BRITAIN.

[img[images/0356m.jpg]]
"""
&mdash;&mdash;I do walk
Methinks like Guide Vaux, with my dark lanthorn,
Stealing to set the town o' fire; i' th' country
I should be taken for William o' the Wisp,
Or Robin Goodfellow.
FLETCHER.
"""

[img[images/9329m.jpg]]

I AM somewhat of an antiquity-hunter, and am fond of exploring London in
quest of the relics of old times. These are principally to be found in the
depths of the city, swallowed up and almost lost in a wilderness of brick
and mortar, but deriving poetical and romantic interest from the
commonplace, prosaic world around them. I was struck with an instance of
the kind in the course of a recent summer ramble into the city; for the
city is only to be explored to advantage in summer-time, when free from
the smoke and fog and rain and mud of winter. I had been buffeting for
some time against the current of population setting through Fleet Street.
The warm weather had unstrung my nerves and made me sensitive to every jar
and jostle and discordant sound. The flesh was weary, the spirit faint,
and I was getting out of humor with the bustling busy throng through which
I had to struggle, when in a fit of desperation I tore my way through the
crowd, plunged into a by-lane, and, after passing through several obscure
nooks and angles, emerged into a quaint and quiet court with a grassplot
in the centre overhung by elms, and kept perpetually fresh and green by a
fountain with its sparkling jet of water. A student with book in hand was
seated on a stone bench, partly reading, partly meditating on the
movements of two or three trim nursery-maids with their infant charges.

I was like an Arab who had suddenly come upon an oasis amid the panting
sterility of the desert. By degrees the quiet and coolness of the place
soothed my nerves and refreshed my spirit. I pursued my walk, and came,
hard by, to a very ancient chapel with a low-browed Saxon portal of
massive and rich architecture. The interior was circular and lofty and
lighted from above. Around were monumental tombs of ancient date on which
were extended the marble effigies of warriors in armor. Some had the hands
devoutly crossed upon the breast; others grasped the pommel of the sword,
menacing hostility even in the tomb, while the crossed legs of several
indicated soldiers of the Faith who had been on crusades to the Holy Land.

I was, in fact, in the chapel of the Knights Templars, strangely situated
in the very centre of sordid traffic; and I do not know a more impressive
lesson for the many of the world than thus suddenly to turn aside from the
highway of busy money-seeking life, and sit down among these shadowy
sepulchres, where all is twilight, dust, and forget-fullness.

In a subsequent tour of observation I encountered another of these relics
of a "foregone world" locked up in the heart of the city. I had been
wandering for some time through dull monotonous streets, destitute of
anything to strike the eye or excite the imagination, when I beheld before
me a Gothic gateway of mouldering antiquity. It opened into a spacious
quadrangle forming the courtyard of a stately Gothic pile, the portal of
which stood invitingly open.

It was apparently a public edifice, and, as I was antiquity-hunting, I
ventured in, though with dubious steps. Meeting no one either to oppose or
rebuke my intrusion, I continued on until I found myself in a great hall
with a lofty arched roof and oaken gallery, all of Gothic architecture. At
one end of the hall was an enormous fireplace, with wooden settles on each
side; at the other end was a raised platform, or dais, the seat of state,
above which was the portrait of a man in antique garb with a long robe, a
ruff, and a venerable gray beard.

The whole establishment had an air of monastic quiet and seclusion, and
what gave it a mysterious charm was, that I had not met with a human being
since I had passed the threshold.

Encouraged by this loneliness, I seated myself in a recess of a large bow
window, which admitted a broad flood of yellow sunshine, checkered here
and there by tints from panes of colored glass, while an open casement let
in the soft summer air. Here, leaning my head on my hand and my arm on an
old oaken table, I indulged in a sort of reverie about what might have
been the ancient uses of this edifice. It had evidently been of monastic
origin; perhaps one of those collegiate establishments built of yore for
the promotion of learning, where the patient monk, in the ample solitude
of the cloister, added page to page and volume to volume, emulating in the
productions of his brain the magnitude of the pile he inhabited.

As I was seated in this musing mood a small panelled door in an arch at
the upper end of the hall was opened, and a number of gray-headed old men,
clad in long black cloaks, came forth one by one, proceeding in that
manner through the hall, without uttering a word, each turning a pale face
on me as he passed, and disappearing through a door at the lower end.

I was singularly struck with their appearance; their black cloaks and
antiquated air comported with the style of this most venerable and
mysterious pile. It was as if the ghosts of the departed years, about
which I had been musing, were passing in review before me. Pleasing myself
with such fancies, I set out, in the spirit of romance, to explore what I
pictured to myself a realm of shadows existing in the very centre of
substantial realities.

My ramble led me through a labyrinth of interior courts and corridors and
dilapidated cloisters, for the main edifice had many additions and
dependencies, built at various times and in various styles. In one open
space a number of boys, who evidently belonged to the establishment, were
at their sports, but everywhere I observed those mysterious old gray men
in black mantles, sometimes sauntering alone, sometimes conversing in
groups; they appeared to be the pervading genii of the place. I now called
to mind what I had read of certain colleges in old times, where judicial
astrology, geomancy, necromancy, and other forbidden and magical sciences
were taught. Was this an establishment of the kind, and were these
black-cloaked old men really professors of the black art?

These surmises were passing through my mind as my eye glanced into a
chamber hung round with all kinds of strange and uncouth objects&mdash;implements
of savage warfare, strange idols and stuffed alligators; bottled serpents
and monsters decorated the mantelpiece; while on the high tester of an
old-fashioned bedstead grinned a human skull, flanked on each side by a
dried cat.

I approached to regard more narrowly this mystic chamber, which seemed a
fitting laboratory for a necromancer, when I was startled at beholding a
human countenance staring at me from a dusky corner. It was that of a
small, shrivelled old man with thin cheeks, bright eyes, and gray, wiry,
projecting eyebrows. I at first doubted whether it were not a mummy
curiously preserved, but it moved, and I saw that it was alive. It was
another of these black-cloaked old men, and, as I regarded his quaint
physiognomy, his obsolete garb, and the hideous and sinister objects by
which he was surrounded, I began to persuade myself that I had come upon
the arch-mage who ruled over this magical fraternity.

Seeing me pausing before the door, he rose and invited me to enter. I
obeyed with singular hardihood, for how did I know whether a wave of his
wand might not metamorphose me into some strange monster or conjure me
into one of the bottles on his mantelpiece? He proved, however, to be
anything but a conjurer, and his simple garrulity soon dispelled all the
magic and mystery with which I had enveloped this antiquated pile and its
no less antiquated inhabitants.

It appeared that I had made my way into the centre of an ancient asylum
for superannuated tradesmen and decayed householders, with which was
connected a school for a limited number of boys. It was founded upwards of
two centuries since on an old monastic establishment, and retained
somewhat of the conventual air and character. The shadowy line of old men
in black mantles who had passed before me in the hall, and whom I had
elevated into magi, turned out to be the pensioners returning from
morning, service in the chapel.

John Hallum, the little collector of curiosities whom I had made the arch
magician, had been for six years a resident of the place, and had
decorated this final nestling-place of his old age with relics and
rarities picked up in the course of his life. According to his own
account, he had been somewhat of a traveller, having been once in France,
and very near making a visit to Holland. He regretted not having visited
the latter country, "as then he might have said he had been there." He was
evidently a traveller of the simple kind.

He was aristocratical too in his notions, keeping aloof, as I found, from
the ordinary run of pensioners. His chief associates were a blind man who
spoke Latin and Greek, of both which languages Hallum was profoundly
ignorant, and a broken-down gentleman who had run through a fortune of
forty thousand pounds left him by his father, and ten thousand pounds, the
marriage portion of his wife. Little Hallum seemed to consider it an
indubitable sign of gentle blood as well as of lofty spirit to be able to
squander such enormous sums.

P.S.&mdash;The picturesque remnant of old times into which I have thus
beguiled the reader is what is called the Charter House, originally the
Chartreuse. It was founded in 1611, on the remains of an ancient convent,
by Sir Thomas Sutton, being one of those noble charities set on foot by
individual munificence, and kept up with the quaintness and sanctity of
ancient times amidst the modern changes and innovations of London. Here
eighty broken-down men, who have seen better days, are provided in their
old age with food, clothing, fuel, and a yearly allowance for private
expenses. They dine together, as did the monks of old, in the hall which
had been the refectory of the original convent. Attached to the
establishment is a school for forty-four boys.

Stow, whose work I have consulted on the subject, speaking of the
obligations of the gray-headed pensioners, says, "They are not to
intermeddle with any business touching the affairs of the hospital, but to
attend only to the service of God, and take thankfully what is provided
for them, without muttering, murmuring, or grudging. None to wear weapon,
long hair, colored boots, spurs, or colored shoes, feathers in their hats,
or any ruffian-like or unseemly apparel, but such as becomes hospital-men
to wear." "And in truth," adds Stow, "happy are they that are so taken
from the cares and sorrows of the world, and fixed in so good a place as
these old men are; having nothing to care for but the good of their souls,
to serve God, and to live in brotherly love."

For the amusement of such as have been interested by the preceding sketch,
taken down from my own observation, and who may wish to know a little more
about the mysteries of London, I subjoin a modicum of local history put
into my hands by an odd-looking old gentleman, in a small brown wig and a
snuff-colored coat, with whom I became acquainted shortly after my visit
to the Charter House. I confess I was a little dubious at first whether it
was not one of those apocryphal tales often passed off upon inquiring
travellers like myself, and which have brought our general character for
veracity into such unmerited reproach. On making proper inquiries,
however, I have received the most satisfactory assurances of the author's
probity, and indeed have been told that he is actually engaged in a full
and particular account of the very interesting region in which he resides,
of which the following may be considered merely as a foretaste.

[img[images/0336m.jpg]]
AN INDIAN MEMOIR.

"""
As monumental bronze unchanged his look:
A soul that pity touch'd, but never shook;
Train'd from his tree-rock'd cradle to his bier,
The fierce extremes of good and ill to brook
Impassive&mdash;fearing but the shame of fear&mdash;
stoic of the woods&mdash;a man without a tear.
CAMPBELL.
"""

[img[images/9400m.jpg]]

IT is to be regretted that those early writers who treated of the
discovery and settlement of America have not given us more particular and
candid accounts of the remarkable characters that flourished in savage
life. The scanty anecdotes which have reached us are full of peculiarity
and interest; they furnish us with nearer glimpses of human nature, and
show what man is in a comparatively primitive state and what he owes to
civilization. There is something of the charm of discovery in lighting
upon these wild and unexplored tracts of human nature&mdash;in witnessing,
as it were, the native growth of moral sentiment, and perceiving those
generous and romantic qualities which have been artificially cultivated by
society vegetating in spontaneous hardihood and rude magnificence.

In civilized life, where the happiness, and indeed almost the existence,
of man depends so much upon the opinion of his fellow-men, he is
constantly acting a studied part. The bold and peculiar traits of native
character are refined away or softened down by the levelling influence of
what is termed good-breeding, and he practises so many petty deceptions
and affects so many generous sentiments for the purposes of popularity
that it is difficult to distinguish his real from his artificial
character. The Indian, on the contrary, free from the restraints and
refinements of polished life, and in a great degree a solitary and
independent being, obeys the impulses of his inclination or the dictates
of his judgment; and thus the attributes of his nature, being freely
indulged, grow singly great and striking. Society is like a lawn, where
every roughness is smoothed, every bramble eradicated, and where the eye
is delighted by the smiling verdure of a velvet surface; he, however, who
would study Nature in its wildness and variety must plunge into the
forest, must explore the glen, must stem the torrent, and dare the
precipice.

These reflections arose on casually looking through a volume of early
colonial history wherein are recorded, with great bitterness, the outrages
of the Indians and their wars with the settlers New England. It is painful
to perceive, even from these partial narratives, how the footsteps of
civilization may be traced in the blood of the aborigines; how easily the
colonists were moved to hostility by the lust of conquest; how merciless
and exterminating was their warfare. The imagination shrinks at the idea
of how many intellectual beings were hunted from the earth, how many brave
and noble hearts, of Nature's sterling coinage, were broken down and
trampled in the dust.

Such was the fate of PHILIP OF POKANOKET, an Indian warrior whose name was
once a terror throughout Massachusetts and Connecticut. He was the most
distinguished of a number of contemporary sachems who reigned over the
Pequods, the Narragansetts, the Wampanoags, and the other eastern tribes
at the time of the first settlement of New England&mdash;a band of native
untaught heroes who made the most generous struggle of which human nature
is capable, fighting to the last gasp in the cause of their country,
without a hope of victory or a thought of renown. Worthy of an age of
poetry and fit subjects for local story and romantic fiction, they have
left scarcely any authentic traces on the page of history, but stalk like
gigantic shadows in the dim twilight of tradition.*

"""
* While correcting the proof-sheets of this article the
author is informed that a celebrated English poet has nearly
finished an heroic poem on the story of Philip of Pokanoket.
"""

When the Pilgrims, as the Plymouth settlers are called by their
descendants, first took refuge on the shores of the New World from the
religious persecutions of the Old, their situation was to the last degree
gloomy and disheartening. Few in number, and that number rapidly perishing
away through sickness and hardships, surrounded by a howling wilderness
and savage tribes, exposed to the rigors of an almost arctic winter and
the vicissitudes of an ever-shifting climate, their minds were filled with
doleful forebodings, and nothing preserved them from sinking into
despondency but the strong excitement of religious enthusiasm. In this
forlorn situation they were visited by Massasoit, chief sagamore of the
Wampanoags, a powerful chief who reigned over a great extent of country.
Instead of taking advantage of the scanty number of the strangers and
expelling them from his territories, into which they had intruded, he
seemed at once to conceive for them a generous friendship, and extended
towards them the rites of primitive hospitality. He came early in the
spring to their settlement of New Plymouth, attended by a mere handful of
followers, entered into a solemn league of peace and amity, sold them a
portion of the soil, and promised to secure for them the good-will of his
savage allies. Whatever may be said of Indian perfidy, it is certain that
the integrity and good faith of Massasoit have never been impeached. He
continued a firm and magnanimous friend of the white men, suffering them
to extend their possessions and to strengthen themselves in the land, and
betraying no jealousy of their increasing power and prosperity. Shortly
before his death he came once more to New Plymouth with his son Alexander,
for the purpose of renewing the covenant of peace and of securing it to
his posterity.

At this conference he endeavored to protect the religion of his
forefathers from the encroaching zeal of the missionaries, and stipulated
that no further attempt should be made to draw off his people from their
ancient faith; but, finding the English obstinately opposed to any such
condition, he mildly relinquished the demand. Almost the last act of his
life was to bring his two sons, Alexander and Philip (as they had been
named by the English), to the residence of a principal settler,
recommending mutual kindness and confidence, and entreating that the same
love and amity which had existed between the white men and himself might
be continued afterwards with his children. The good old sachem died in
peace, and was happily gathered to his fathers before sorrow came upon his
tribe; his children remained behind to experience the ingratitude of white
men.

His eldest son, Alexander, succeeded him. He was of a quick and impetuous
temper, and proudly tenacious of his hereditary rights and dignity. The
intrusive policy and dictatorial conduct of the strangers excited his
indignation, and he beheld with uneasiness their exterminating wars with
the neighboring tribes. He was doomed soon to incur their hostility, being
accused of plotting with the Narragansetts to rise against the English and
drive them from the land. It is impossible to say whether this accusation
was warranted by facts or was grounded on mere suspicions. It is evident,
however, by the violent and overbearing measures of the settlers that they
had by this time begun to feel conscious of the rapid increase of their
power, and to grow harsh and inconsiderate in their treatment of the
natives. They despatched an armed force to seize upon Alexander and to
bring him before their courts. He was traced to his woodland haunts, and
surprised at a hunting-house where he was reposing with a band of his
followers, unarmed, after the toils of the chase. The suddenness of his
arrest and the outrage offered to his sovereign dignity so preyed upon the
irascible feelings of this proud savage as to throw him into a raging
fever. He was permitted to return home on condition of sending his son as
a pledge for his re-appearance; but the blow he had received was fatal,
and before he reached his home he fell a victim to the agonies of a
wounded spirit.

The successor of Alexander was Metamocet, or King Philip, as he was called
by the settlers on account of his lofty spirit and ambitious temper.
These, together with his well-known energy and enterprise, had rendered
him an object of great jealousy and apprehension, and he was accused of
having always cherished a secret and implacable hostility towards the
whites. Such may very probably and very naturally have been the case. He
considered them as originally but mere intruders into the country, who had
presumed upon indulgence and were extending an influence baneful to savage
life. He saw the whole race of his countrymen melting before them from the
face of the earth, their territories slipping from their hands, and their
tribes becoming feeble, scattered, and dependent. It may be said that the
soil was originally purchased by the settlers; but who does not know the
nature of Indian purchases in the early periods of colonization? The
Europeans always made thrifty bargains through their superior adroitness
in traffic, and they gained vast accessions of territory by
easily-provoked hostilities. An uncultivated savage is never a nice
inquirer into the refinements of law by which an injury may be gradually
and legally inflicted. Leading facts are all by which he judges; and it
was enough for Philip to know that before the intrusion of the Europeans
his countrymen were lords of the soil, and that now they were becoming
vagabonds in the land of their fathers.

But whatever may have been his feelings of general hostility and his
particular indignation at the treatment of his brother, he suppressed them
for the present, renewed the contract with the settlers, and resided
peaceably for many years at Pokanoket, or as, it was called by the
English, Mount Hope,* the ancient seat of dominion of his tribe.
Suspicions, however, which were at first but vague and indefinite, began
to acquire form and substance, and he was at length charged with
attempting to instigate the various eastern tribes to rise at once, and by
a simultaneous effort to throw off the yoke of their oppressors. It is
difficult at this distant period to assign the proper credit due to these
early accusations against the Indians. There was a proneness to suspicion
and an aptness to acts of violence on the part of the whites that gave
weight and importance to every idle tale. Informers abounded where
tale-bearing met with countenance and reward, and the sword was readily
unsheathed when its success was certain and it carved out empire.

"""
* Now Bristol, Rhode Island.
"""

The only positive evidence on record against Philip is the accusation of
one Sausaman, a renegado Indian, whose natural cunning had been quickened
by a partial education which he had received among the settlers. He
changed his faith and his allegiance two or three times with a facility
that evinced the looseness of his principles. He had acted for some time
as Philip's confidential secretary and counsellor, and had enjoyed his
bounty and protection. Finding, however, that the clouds of adversity were
gathering round his patron, he abandoned his service and went over to the
whites, and in order to gain their favor charged his former benefactor
with plotting against their safety. A rigorous investigation took place.
Philip and several of his subjects submitted to be examined, but nothing
was proved against them. The settlers, however, had now gone too far to
retract; they had previously determined that Philip was a dangerous
neighbor; they had publicly evinced their distrust, and had done enough to
insure his hostility; according, therefore, to the usual mode of reasoning
in these cases, his destruction had become necessary to their security.
Sausaman, the treacherous informer, was shortly afterwards found dead in a
pond, having fallen a victim to the vengeance of his tribe. Three Indians,
one of whom was a friend and counsellor of Philip, were apprehended and
tried, and on the testimony of one very questionable witness were
condemned and executed as murderers.

This treatment of his subjects and ignominious punishment of his friend
outraged the pride and exasperated the passions of Philip. The bolt which
had fallen thus at his very feet awakened him to the gathering storm, and
he determined to trust himself no longer in the power of the white men.
The fate of his insulted and broken-hearted brother still rankled in his
mind; and he had a further warning in the tragical story of Miantonimo, a
great Sachem of the Narragansetts, who, after manfully facing his accusers
before a tribunal of the colonists, exculpating himself from a charge of
conspiracy and receiving assurances of amity, had been perfidiously
despatched at their instigation. Philip therefore gathered his
fighting-men about him, persuaded all strangers that he could to join his
cause, sent the women and children to the Narragansetts for safety, and
wherever he appeared was continually surrounded by armed warriors.

When the two parties were thus in a state of distrust and irritation, the
least spark was sufficient to set them in a flame. The Indians, having
weapons in their hands, grew mischievous and committed various petty
depredations. In one of their maraudings a warrior was fired on and killed
by a settler. This was the signal for open hostilities; the Indians
pressed to revenge the death of their comrade, and the alarm of war
resounded through the Plymouth colony.

In the early chronicles of these dark and melancholy times we meet with
many indications of the diseased state of the public mind. The gloom of
religious abstraction and the wildness of their situation among trackless
forests and savage tribes had disposed the colonists to superstitious
fancies, and had filled their imaginations with the frightful chimeras of
witchcraft and spectrology. They were much given also to a belief in
omens. The troubles with Philip and his Indians were preceded, we are
told, by a variety of those awful warnings which forerun great and public
calamities. The perfect form of an Indian bow appeared in the air at New
Plymouth, which was looked upon by the inhabitants as a "prodigious
apparition." At Hadley, Northampton, and other towns in their neighborhood
"was heard the report of a great piece of ordnance, with a shaking of the
earth and a considerable echo."* Others were alarmed on a still sunshiny
morning by the discharge of guns and muskets; bullets seemed to whistle
past them, and the noise of drums resounded in the air, seeming to pass
away to the westward; others fancied that they heard the galloping of
horses over their heads; and certain monstrous births which took place
about the time filled the superstitious in some towns with doleful
forebodings. Many of these portentous sights and sounds may be ascribed to
natural phenomena&mdash;to the northern lights which occur vividly in
those latitudes, the meteors which explode in the air, the casual rushing
of a blast through the top branches of the forest, the crash of fallen
trees or disrupted rocks, and to those other uncouth sounds and echoes
which will sometimes strike the ear so strangely amidst the profound
stillness of woodland solitudes. These may have startled some melancholy
imaginations, may have been exaggerated by the love for the marvellous,
and listened to with that avidity with which we devour whatever is fearful
and mysterious. The universal currency of these superstitious fancies and
the grave record made of them by one of the learned men of the day are
strongly characteristic of the times.

"""
* The Rev. Increase Mather's History.
"""

The nature of the contest that ensued was such as too often distinguishes
the warfare between civilized men and savages. On the part of the whites
it was conducted with superior skill and success, but with a wastefulness
of the blood and a disregard of the natural rights of their antagonists:
on the part of the Indians it was waged with the desperation of men
fearless of death, and who had nothing to expect from peace but
humiliation, dependence, and decay.

The events of the war are transmitted to us by a worthy clergyman of the
time, who dwells with horror and indignation on every hostile act of the
Indians, however justifiable, whilst he mentions with applause the most
sanguinary atrocities of the whites. Philip is reviled as a murderer and a
traitor, without considering that he was a true-born prince gallantly
fighting at the head of his subjects to avenge the wrongs of his family,
to retrieve the tottering power of his line, and to deliver his native
land from the oppression of usurping strangers.

The project of a wide and simultaneous revolt, if such had really been
formed, was worthy of a capacious mind, and had it not been prematurely
discovered might have been overwhelming in its consequences. The war that
actually broke out was but a war of detail, a mere succession of casual
exploits and unconnected enterprises. Still, it sets forth the military
genius and daring prowess of Philip, and wherever, in the prejudiced and
passionate narrations that have been given of it, we can arrive at simple
facts, we find him displaying a vigorous mind, a fertility of expedients,
a contempt of suffering and hardship, and an unconquerable resolution that
command our sympathy and applause.

Driven from his paternal domains at Mount Hope, he threw himself into the
depths of those vast and trackless forests that skirted the settlements
and were almost impervious to anything but a wild beast or an Indian. Here
he gathered together his forces, like the storm accumulating its stores of
mischief in the bosom of the thundercloud, and would suddenly emerge at a
time and place least expected, carrying havoc and dismay into the
villages. There were now and then indications of these impending ravages
that filled the minds of the colonists with awe and apprehension. The
report of a distant gun would perhaps be heard from the solitary woodland,
where there was known to be no white man; the cattle which had been
wandering in the woods would sometimes return home wounded; or an Indian
or two would be seen lurking about the skirts of the forests and suddenly
disappearing, as the lightning will sometimes be seen playing silently
about the edge of the cloud that is brewing up the tempest.

Though sometimes pursued and even surrounded by the settlers, yet Philip
as often escaped almost miraculously from their toils, and, plunging into
the wilderness, would be lost to all search or inquiry until he again
emerged at some far distant quarter, laying the country desolate. Among
his strongholds were the great swamps or morasses which extend in some
parts of New England, composed of loose bogs of deep black mud, perplexed
with thickets, brambles, rank weeds, the shattered and mouldering trunks
of fallen trees, overshadowed by lugubrious hemlocks. The uncertain
footing and the tangled mazes of these shaggy wilds rendered them almost
impracticable to the white man, though the Indian could thread their
labyrinths with the agility of a deer. Into one of these, the great swamp
of Pocasset Neck, was Philip once driven with a band of his followers. The
English did not dare to pursue him, fearing to venture into these dark and
frightful recesses, where they might perish in fens and miry pits or be
shot down by lurking foes. They therefore invested the entrance to the
Neck, and began to build a fort with the thought of starving out the foe;
but Philip and his warriors wafted themselves on a raft over an arm of the
sea in the dead of night, leaving the women and children behind, and
escaped away to the westward, kindling the flames of war among the tribes
of Massachusetts and the Nipmuck country and threatening the colony of
Connecticut.

In this way Philip became a theme of universal apprehension. The mystery
in which he was enveloped exaggerated his real terrors. He was an evil
that walked in darkness, whose coming none could foresee and against which
none knew when to be on the alert. The whole country abounded with rumors
and alarms. Philip seemed almost possessed of ubiquity, for in whatever
part of the widely-extended frontier an irruption from the forest took
place, Philip was said to be its leader. Many superstitious notions also
were circulated concerning him. He was said to deal in necromancy, and to
be attended by an old Indian witch or prophetess, whom he consulted and
who assisted him by her charms and incantations. This, indeed, was
frequently the case with Indian chiefs, either through their own credulity
or to act upon that of their followers; and the influence of the prophet
and the dreamer over Indian superstition has been fully evidenced in
recent instances of savage warfare.

At the time that Philip effected his escape from Pocasset his fortunes
were in a desperate condition. His forces had been thinned by repeated
fights and he had lost almost the whole of his resources. In this time of
adversity he found a faithful friend in Canonchet, chief Sachem of all the
Narragansetts. He was the son and heir of Miantonimo, the great sachem
who, as already mentioned, after an honorable acquittal of the charge of
conspiracy, had been privately put to death at the perfidious instigations
of the settlers. "He was the heir," says the old chronicler, "of all his
father's pride and insolence, as well as of his malice towards the
English;" he certainly was the heir of his insults and injuries and the
legitimate avenger of his murder. Though he had forborne to take an active
part in this hopeless war, yet he received Philip and his broken forces
with open arms and gave them the most generous countenance and support.
This at once drew upon him the hostility of the English, and it was
determined to strike a signal blow that should involve both the Sachems in
one common ruin. A great force was therefore gathered together from
Massachusetts, Plymouth, and Connecticut, and was sent into the
Narragansett country in the depth of winter, when the swamps, being frozen
and leafless, could be traversed with comparative facility and would no
longer afford dark and impenetrable fastnesses to the Indians.

Apprehensive of attack, Canonchet had conveyed the greater part of his
stores, together with the old, the infirm, the women and children of his
tribe, to a strong fortress, where he and Philip had likewise drawn up the
flower of their forces. This fortress, deemed by the Indians impregnable,
was situated upon a rising mound or kind of island of five or six acres in
the midst of a swamp; it was constructed with a degree of judgment and
skill vastly superior to what is usually displayed in Indian
fortification, and indicative of the martial genius of these two
chieftains.

Guided by a renegado Indian, the English penetrated, through December
snows, to this stronghold and came upon the garrison by surprise. The
fight was fierce and tumultuous. The assailants were repulsed in their
first attack, and several of their bravest officers were shot down in the
act of storming the fortress, sword in hand. The assault was renewed with
greater success. A lodgment was effected. The Indians were driven from one
post to another. They disputed their ground inch by inch, fighting with
the fury of despair. Most of their veterans were cut to pieces, and after
a long and bloody battle, Philip and Canonchet, with a handful of
surviving warriors, retreated from the fort and took refuge in the
thickets of the surrounding forest.

The victors set fire to the wigwams and the fort; the whole was soon in a
blaze; many of the old men, the women, and the children perished in the
flames. This last outrage overcame even the stoicism of the savage. The
neighboring woods resounded with the yells of rage and despair uttered by
the fugitive warriors, as they beheld the destruction of their dwellings
and heard the agonizing cries of their wives and offspring. "The burning
of the wigwams," says a contemporary writer, "the shrieks and cries of the
women and children, and the yelling of the warriors, exhibited a most
horrible and affecting scene, so that it greatly moved some of the
soldiers." The same writer cautiously adds, "They were in much doubt then,
and afterwards seriously inquired, whether burning their enemies alive
could be consistent with humanity, and the benevolent principles of the
gospel."*

"""
* MS. of the Rev. W. Ruggles.
"""

The fate of the brave and generous Canonchet is worthy of particular
mention: the last scene of his life is one of the noblest instances on
record of Indian magnanimity.

Broken down in his power and resources by this signal defeat, yet faithful
to his ally and to the hapless cause which he had espoused, he rejected
all overtures of peace offered on condition of betraying Philip and his
followers, and declared that "he would fight it out to the last man,
rather than become a servant to the English." His home being destroyed,
his country harassed and laid waste by the incursions of the conquerors,
he was obliged to wander away to the banks of the Connecticut, where he
formed a rallying-point to the whole body of western Indians and laid
waste several of the English settlements.

Early in the spring he departed on a hazardous expedition, with only
thirty chosen men, to penetrate to Seaconck, in the vicinity of Mount
Hope, and to procure seed corn to plant for the sustenance of his troops.
This little hand of adventurers had passed safely through the Pequod
country, and were in the centre of the Narragansett, resting at some
wigwams near Pautucket River, when an alarm was given of an approaching
enemy. Having but seven men by him at the time, Canonchet despatched two
of them to the top of a neighboring hill to bring intelligence of the foe.

Panic-struck by the appearance of a troop of English and Indians rapidly
advancing, they fled in breathless terror past their chieftain, without
stopping to inform him of the danger. Canonchet sent another scout, who
did the same. He then sent two more, one of whom, hurrying back in
confusion and affright, told him that the whole British army was at hand.
Canonchet saw there was no choice but immediate flight. He attempted to
escape round the hill, but was perceived and hotly pursued by the hostile
Indians and a few of the fleetest of the English. Finding the swiftest
pursuer close upon his heels, he threw off, first his blanket, then his
silver-laced coat and belt of peag, by which his enemies knew him to be
Canonchet and redoubled the eagerness of pursuit.

[img[images/0415m.jpg]]

At length, in dashing through the river, his foot slipped upon a stone,
and he fell so deep as to wet his gun. This accident so struck him with
despair that, as he afterwards confessed, "his heart and his bowels turned
within him, and he became like a rotten stick, void of strength."

To such a degree was he unnerved that, being seized by a Pequod Indian
within a short distance of the river, he made no resistance, though a man
of great vigor of body and boldness of heart. But on being made prisoner
the whole pride of his spirit arose within him, and from that moment we
find, in the anecdotes given by his enemies, nothing but repeated flashes
of elevated and prince-like heroism. Being questioned by one of the
English who first came up with him, and who had not attained his twenty
second year, the proud-hearted warrior, looking with lofty contempt upon
his youthful countenance, replied, "You are a child&mdash;you cannot
understand matters of war; let your brother or your chief come: him will I
answer."

Though repeated offers were made to him of his life on condition of
submitting with his nation to the English, yet he rejected them with
disdain, and refused to send any proposals of the kind to the great body
of his subjects, saying that he knew none of them would comply. Being
reproached with his breach of faith towards the whites, his boast that he
would not deliver up a Wampanoag nor the paring of a Wampanoag's nail, and
his threat that he would burn the English alive in their houses, he
disdained to justify himself, haughtily answering that others were as
forward for the war as himself, and "he desired to hear no more thereof."

So noble and unshaken a spirit, so true a fidelity to his cause and his
friend, might have touched the feelings of the generous and the brave; but
Canonchet was an Indian, a being towards whom war had no courtesy,
humanity no law, religion no compassion: he was condemned to die. The last
words of his that are recorded are worthy the greatness of his soul. When
sentence of death was passed upon him, he observed "that he liked it well,
for he should die before his heart was soft or he had spoken anything
unworthy of himself." His enemies gave him the death of a soldier, for he
was shot at Stoning ham by three young Sachems of his own rank.

The defeat at the Narraganset fortress and the death of Canonchet were
fatal blows to the fortunes of King Philip. He made an ineffectual attempt
to raise a head of war by stirring up the Mohawks to take arms; but,
though possessed of the native talents of a statesman, his arts were
counteracted by the superior arts of his enlightened enemies, and the
terror of their warlike skill began to subdue the resolution of the
neighboring tribes. The unfortunate chieftain saw himself daily stripped
of power, and his ranks rapidly thinning around him. Some were suborned by
the whites; others fell victims to hunger and fatigue and to the frequent
attacks by which they were harassed. His stores were all captured; his
chosen friends were swept away from before his eyes; his uncle was shot
down by his side; his sister was carried into captivity; and in one of his
narrow escapes he was compelled to leave his beloved wife and only son to
the mercy of the enemy. "His ruin," says the historian, "being thus
gradually carried on, his misery was not prevented, but augmented thereby;
being himself made acquainted with the sense and experimental feeling of
the captivity of his children, loss of friends, slaughter of his subjects,
bereavement of all family relations, and being stripped of all outward
comforts before his own life should be taken away."

To fill up the measure of his misfortunes, his own followers began to plot
against his life, that by sacrificing him they might purchase dishonorable
safety. Through treachery a number of his faithful adherents, the subjects
of Wetamoe, an Indian princess of Pocasset, a near kinswoman and
confederate of Philip, were betrayed into the hands of the enemy. Wetamoe
was among them at the time, and attempted to make her escape by crossing a
neighboring river: either exhausted by swimming or starved with cold and
hunger, she was found dead and naked near the water-side. But persecution
ceased not at the grave. Even death, the refuge of the wretched, where the
wicked commonly cease from troubling, was no protection to this outcast
female, whose great crime was affectionate fidelity to her kinsman and her
friend. Her corpse was the object of unmanly and dastardly vengeance: the
head was severed from the body and set upon a pole, and was thus exposed
at Taunton to the view of her captive subjects. They immediately
recognized the features of their unfortunate queen, and were so affected
at this barbarous spectacle that we are told they broke forth into the
"most horrid and diabolical lamentations."

However Philip had borne up against the complicated miseries and
misfortunes that surrounded him, the treachery of his followers seemed to
wring his heart and reduce him to despondency. It is said that "he never
rejoiced afterwards, nor had success in any of his designs." The spring of
hope was broken&mdash;the ardor of enterprise was extinguished; he looked
around, and all was danger and darkness; there was no eye to pity nor any
arm that could bring deliverance. With a scanty band of followers, who
still remained true to his desperate fortunes, the unhappy Philip wandered
back to the vicinity of Mount Hope, the ancient dwelling of his fathers.
Here he lurked about like a spectre among the scenes of former power and
prosperity, now bereft of home, of family, and of friend. There needs no
better picture of his destitute and piteous situation than that furnished
by the homely pen of the chronicler, who is unwarily enlisting the
feelings of the reader in favor of the hapless warrior whom he reviles.
"Philip," he says, "like a savage wild beast, having been hunted by the
English forces through the woods above a hundred miles backward and
forward, at last was driven to his own den upon Mount Hope, where he
retired, with a few of his best friends, into a swamp, which proved but a
prison to keep him fast till the messengers of death came by divine
permission to execute vengeance upon him."

Even in this last refuge of desperation and despair a sullen grandeur
gathers round his memory. We picture him to ourselves seated among his
care-worn followers, brooding in silence over his blasted fortunes, and
acquiring a savage sublimity from the wildness and dreariness of his
lurking-place. Defeated, but not dismayed&mdash;crushed to the earth, but
not humiliated&mdash;he seemed to grow more haughty beneath disaster, and
to experience a fierce satisfaction in draining the last dregs of
bitterness. Little minds are tamed and subdued by misfortune, but great
minds rise above it. The very idea of submission awakened the fury of
Philip, and he smote to death one of his followers who proposed an
expedient of peace. The brother of the victim made his escape, and in
revenge betrayed the retreat of his chieftain, A body of white men and
Indians were immediately despatched to the swamp where Philip lay
crouched, glaring with fury and despair. Before he was aware of their
approach they had begun to surround him. In a little while he saw five of
his trustiest followers laid dead at his feet; all resistance was vain; he
rushed forth from his covert, and made a headlong attempt to escape, but
was shot through the heart by a renegado Indian of his own nation.

[img[images/0420m.jpg]]

Such is the scanty story of the brave but unfortunate King Philip,
persecuted while living, slandered and dishonored when dead. If, however,
we consider even the prejudiced anecdotes furnished us by his enemies, we
may perceive in them traces of amiable and lofty character sufficient to
awaken sympathy for his fate and respect for his memory. We find that
amidst all the harassing cares and ferocious passions of constant warfare
he was alive to the softer feelings of connubial love and paternal
tenderness and to the generous sentiment of friendship. The captivity of
his "beloved wife and only son" are mentioned with exultation as causing
him poignant misery: the death of any near friend is triumphantly recorded
as a new blow on his sensibilities; but the treachery and desertion of
many of his followers, in whose affections he had confided, is said to
have desolated his heart and to have bereaved him of all further comfort.
He was a patriot attached to his native soil&mdash;a prince true to his
subjects and indignant of their wrongs&mdash;a soldier daring in battle,
firm in adversity, patient of fatigue, of hunger, of every variety of
bodily suffering, and ready to perish in the cause he had espoused. Proud
of heart and with an untamable love of natural liberty, he preferred to
enjoy it among the beasts of the forests or in the dismal and famished
recesses of swamps and morasses, rather than bow his haughty spirit to
submission and live dependent and despised in the ease and luxury of the
settlements. With heroic qualities and bold achievements that would have
graced a civilized warrior, and have rendered him the theme of the poet
and the historian, he lived a wanderer and a fugitive in his native land,
and went down, like a lonely bark foundering amid darkness and tempest,
without a pitying eye to weep his fall or a friendly hand to record his
struggle.

[img[images/0421m.jpg]]
[img[images/0021m.jpg]]

THE following papers, with two exceptions, were written in England, and
formed but part of an intended series for which I had made notes and
memorandums. Before I could mature a plan, however, circumstances
compelled me to send them piecemeal to the United States, where they were
published from time to time in portions or numbers. It was not my
intention to publish them in England, being conscious that much of their
contents could be interesting only to American readers, and, in truth,
being deterred by the severity with which American productions had been
treated by the British press.

By the time the contents of the first volume had appeared in this
occasional manner, they began to find their way across the Atlantic, and
to be inserted, with many kind encomiums, in the London Literary Gazette.
It was said, also, that a London bookseller intended to publish them in a
collective form. I determined, therefore, to bring them forward myself,
that they might at least have the benefit of my superintendence and
revision. I accordingly took the printed numbers which I had received from
the United States, to Mr. John Murray, the eminent publisher, from whom I
had already received friendly attentions, and left them with him for
examination, informing him that should he be inclined to bring them before
the public, I had materials enough on hand for a second volume. Several
days having elapsed without any communication from Mr. Murray, I addressed
a note to him, in which I construed his silence into a tacit rejection of
my work, and begged that the numbers I had left with him might be returned
to me. The following was his reply:

MY DEAR SIR: I entreat you to believe that I feel truly obliged by your
kind intentions towards me, and that I entertain the most unfeigned
respect for your most tasteful talents. My house is completely filled with
workpeople at this time, and I have only an office to transact business
in; and yesterday I was wholly occupied, or I should have done myself the
pleasure of seeing you.

If it would not suit me to engage in the publication of your present work,
it is only because I do not see that scope in the nature of it which would
enable me to make those satisfactory accounts between us, without which I
really feel no satisfaction in engaging&mdash;but I will do all I can to
promote their circulation, and shall be most ready to attend to any future
plan of yours.

"""
With much regard, I remain, dear sir,
Your faithful servant,
JOHN MURRAY.
"""

This was disheartening, and might have deterred me from any further
prosecution of the matter, had the question of republication in Great
Britain rested entirely with me; but I apprehended the appearance of a
spurious edition. I now thought of Mr. Archibald Constable as publisher,
having been treated by him with much hospitality during a visit to
Edinburgh; but first I determined to submit my work to Sir-Walter (then
Mr.) Scott, being encouraged to do so by the cordial reception I had
experienced from him at Abbotsford a few years previously, and by the
favorable opinion he had expressed to others of my earlier writings. I
accordingly sent him the printed numbers of the Sketch-Book in a parcel by
coach, and at the same time wrote to him, hinting that since I had had the
pleasure of partaking of his hospitality, a reverse had taken place in my
affairs which made the successful exercise of my pen all-important to me;
I begged him, therefore, to look over the literary articles I had
forwarded to him, and, if he thought they would bear European
republication, to ascertain whether Mr. Constable would be inclined to be
the publisher.

[img[images/0023m.jpg]]

The parcel containing my work went by coach to Scott's address in
Edinburgh; the letter went by mail to his residence in the country. By the
very first post I received a reply, before he had seen my work.

"I was down at Kelso," said he, "when your letter reached Abbotsford. I am
now on my way to town, and will converse with Constable, and do all in my
power to forward your views&mdash;I assure you nothing will give me more
pleasure."

The hint, however, about a reverse of fortune had struck the quick
apprehension of Scott, and, with that practical and efficient good-will
which belonged to his nature, he had already devised a way of aiding me. A
weekly periodical, he went on to inform me, was about to be set up in
Edinburgh, supported by the most respectable talents, and amply furnished
with all the necessary information. The appointment of the editor, for
which ample funds were provided, would be five hundred pounds sterling a
year, with the reasonable prospect of further advantages. This situation,
being apparently at his disposal, he frankly offered to me. The work,
however, he intimated, was to have somewhat of a political bearing, and he
expressed an apprehension that the tone it was desired to adopt might not
suit me. "Yet I risk the question," added he, "because I know no man so
well qualified for this important task, and perhaps because it will
necessarily bring you to Edinburgh. If my proposal does not suit, you need
only keep the matter secret and there is no harm done. 'And for my love I
pray you wrong me not.' If on the contrary you think it could be made to
suit you, let me know as soon as possible, addressing Castle Street,
Edinburgh."

In a postscript, written from Edinburgh, he adds, "I am just come here,
and have glanced over the Sketch-Book. It is positively beautiful, and
increases my desire to crimp you, if it be possible. Some difficulties
there always are in managing such a matter, especially at the outset; but
we will obviate them as much as we possibly can."

The following is from an imperfect draught of my reply, which underwent
some modifications in the copy sent:

"I cannot express how much I am gratified by your letter. I had begun to
feel as if I had taken an unwarrantable liberty; but, somehow or other,
there is a genial sunshine about you that warms every creeping thing into
heart and confidence. Your literary proposal both surprises and flatters
me, as it evinces a much higher opinion of my talents than I have myself."

I then went on to explain that I found myself peculiarly unfitted for the
situation offered to me, not merely by my political opinions, but by the
very constitution and habits of my mind. "My whole course of life," I
observed, "has been desultory, and I am unfitted for any periodically
recurring task, or any stipulated labor of body or mind. I have no command
of my talents, such as they are, and have to watch the varyings of my mind
as I would those of a weathercock. Practice and training may bring me more
into rule; but at present I am as useless for regular service as one of my
own country Indians or a Don Cossack.

"I must, therefore, keep on pretty much as I have begun; writing when I
can, not when I would. I shall occasionally shift my residence and write
whatever is suggested by objects before me, or whatever rises in my
imagination; and hope to write better and more copiously by and by.

"I am playing the egotist, but I know no better way of answering your
proposal than by showing what a very good-for-nothing kind of being I am.
Should Mr. Constable feel inclined to make a bargain for the wares I have
on hand, he will encourage me to further enterprise; and it will be
something like trading with a gypsy for the fruits of his prowlings, who
may at one time have nothing but a wooden bowl to offer, and at another
time a silver tankard."

In reply, Scott expressed regret, but not surprise, at my declining what
might have proved a troublesome duty. He then recurred to the original
subject of our correspondence; entered into a detail of the various terms
upon which arrangements were made between authors and booksellers, that I
might take my choice; expressing the most encouraging confidence of the
success of my work, and of previous works which I had produced in America.
"I did no more," added he, "than open the trenches with Constable; but I
am sure if you will take the trouble to write to him, you will find him
disposed to treat your overtures with every degree of attention. Or, if
you think it of consequence in the first place to see me, I shall be in
London in the course of a month, and whatever my experience can command is
most heartily at your command. But I can add little to what I have said
above, except my earnest recommendation to Constable to enter into the
negotiation."*

"""
* I cannot avoid subjoining in a note a succeeding paragraph
of Scott's letter, which, though it does not relate to the
main subject of our correspondence, was too characteristic
to be emitted. Some time previously I had sent Miss Sophia
Scott small duodecimo American editions of her father's
poems published in Edinburgh in quarto volumes; showing the
"nigromancy" of the American press, by which a quart of wine
is conjured into a pint bottle. Scott observes: "In my
hurry, I have not thanked you in Sophia's name for the kind
attention which furnished her with the American volumes. I
am not quite sure I can add my own, since you have made her
acquainted with much more of papa's folly than she would
ever otherwise have learned; for I had taken special care
they should never see any of those things during their
earlier years. I think I have told you that Walter is
sweeping the firmament with a feather like a maypole and
indenting the pavement with a sword like a scythe&mdash;in other
words, he has become a whiskered hussar in the 18th
Dragoons."
"""

Before the receipt of this most obliging letter, however, I had determined
to look to no leading bookseller for a launch, but to throw my work before
the public at my own risk, and let it sink or swim according to its
merits. I wrote to that effect to Scott, and soon received a reply:

"I observe with pleasure that you are going to come forth in Britain. It
is certainly not the very best way to publish on one's own accompt; for
the booksellers set their face against the circulation of such works as do
not pay an amazing toll to themselves. But they have lost the art of
altogether damming up the road in such cases between the author and the
public, which they were once able to do as effectually as Diabolus in John
Bunyan's Holy War closed up the windows of my Lord Understanding's
mansion. I am sure of one thing, that you have only to be known to the
British public to be admired by them, and I would not say so unless I
really was of that opinion.

"If you ever see a witty but rather local publication called Blackwood's
Edinburgh Magazine, you will find some notice of your works in the last
number: the author is a friend of mine, to whom I have introduced you in
your literary capacity. His name is Lockhart, a young man of very
considerable talent, and who will soon be intimately connected with my
family. My faithful friend Knickerbocker is to be next examined and
illustrated. Constable was extremely willing to enter into consideration
of a treaty for your works, but I foresee will be still more so when

"""
Your name is up, and may go
From Toledo to Madrid.
"""

"&mdash;&mdash;And that will soon be the case. I trust to be in London
about the middle of the month, and promise myself great pleasure in once
again shaking you by the hand."

The first volume of the Sketch-Book was put to press in London, as I had
resolved, at my own risk, by a bookseller unknown to fame, and without any
of the usual arts by which a work is trumpeted into notice. Still some
attention had been called to it by the extracts which had previously
appeared in the Literary Gazette, and by the kind word spoken by the
editor of that periodical, and it was getting into fair circulation, when
my worthy bookseller failed before the first month was over, and the sale
was interrupted.

At this juncture Scott arrived in London. I called to him for help, as I
was sticking in the mire, and, more propitious than Hercules, he put his
own shoulder to the wheel. Through his favorable representations, Murray
was quickly induced to undertake the future publication of the work which
he had previously declined. A further edition of the first volume was
struck off and the second volume was put to press, and from that time
Murray became my publisher, conducting himself in all his dealings with
that fair, open, and liberal spirit which had obtained for him the
well-merited appellation of the Prince of Booksellers.

Thus, under the kind and cordial auspices of Sir Walter Scott, I began my
literary career in Europe; and I feel that I am but discharging, in a
trifling degree, my debt of gratitude to the memory of that golden-hearted
man in acknowledging my obligations to him. But who of his literary
contemporaries ever applied to him for aid or counsel that did not
experience the most prompt, generous, and effectual assistance?

W. I. SUNNYSIDE, 1848. 
[img[images/0067m.jpg]]

A POSTHUMOUS WRITING OF DIEDRICH KNICKERBOCKER.

"""
By Woden, God of Saxons,
From whence comes Wensday, that is Wodensday,
Truth is a thing that ever I will keep
Unto thylke day in which I creep into
My sepulchre&mdash;
CARTWRIGHT.
"""

[The following Tale was found among the papers of the late Diedrich
Knickerbocker, an old gentleman of New York, who was very curious in the
Dutch History of the province and the manners of the descendants from its
primitive settlers. His historical researches, however, did not lie so
much among books as among men; for the former are lamentably scanty on his
favorite topics; whereas he found the old burghers, and still more, their
wives, rich in that legendary lore, so invaluable to true history.
Whenever, therefore, he happened upon a genuine Dutch family, snugly shut
up in its low-roofed farm-house, under a spreading sycamore, he looked
upon it as a little clasped volume of black-letter, and studied it with
the zeal of a bookworm.

The result of all these researches was a history of the province, during
the reign of the Dutch governors, which he published some years since.
There have been various opinions as to the literary character of his work,
and, to tell the truth, it is not a whit better than it should be. Its
chief merit is its scrupulous accuracy, which indeed was a little
questioned on its first appearance, but has since been completely
established; and it is now admitted into all historical collections, as a
book of unquestionable authority.

The old gentleman died shortly after the publication of his work; and now
that he is dead and gone, it cannot do much harm to his memory to say that
his time might have been much better employed in weightier labors. He,
however, was apt to ride his hobby his own way; and though it did now and
then kick up the dust a little in the eyes of his neighbors, and grieve
the spirit of some friends, for whom he felt the truest deference and
affection, yet his errors and follies are remembered "more in sorrow than
in anger," and it begins to be suspected, that he never intended to injure
or offend. But however his memory may be appreciated by critics, it is
still held dear among many folks, whose good opinion is well worth having;
particularly by certain biscuit-bakers, who have gone so far as to imprint
his likeness on their new-year cakes, and have thus given him a chance for
immortality, almost equal to the being stamped on a Waterloo medal, or a
Queen Anne's farthing.]

[img[images/0069m.jpg]]

WHOEVER has made a voyage up the Hudson must remember the Kaatskill
mountains. They are a dismembered branch of the great Appalachian family,
and are seen away to the west of the river, swelling up to a noble height,
and lording it over the surrounding country. Every change of season, every
change of weather, indeed, every hour of the day produces some change in
the magical hues and shapes of these mountains; and they are regarded by
all the good wives, far and near, as perfect barometers. When the weather
is fair and settled, they are clothed in blue and purple, and print their
bold outlines on the clear evening sky; but sometimes, when the rest of
the landscape is cloudless, they will gather a hood of gray vapors about
their summits, which, in the last rays of the setting sun, will glow and
light up like a crown of glory.

At the foot of these fairy mountains, the voyager may have descried the
light smoke curling up from a Village, whose shingle roofs gleam among the
trees, just where the blue tints of the upland melt away into the fresh
green of the nearer landscape. It is a little village of great antiquity,
having been founded by some of the Dutch colonists, in the early times of
the province, just about the beginning of the government of the good Peter
Stuyvesant (may he rest in peace!), and there were some of the houses of
the original settlers standing within a few years, built of small yellow
bricks, brought from Holland, having latticed windows and gable fronts,
surmounted with weathercocks.

In that same village, and in one of these very houses (which, to tell the
precise truth, was sadly time-worn and weather-beaten), there lived, many
years since, while the country was yet a province of Great Britain, a
simple, good-natured fellow, of the name of Rip Van Winkle. He was a
descendant of the Van Winkles who figured so gallantly in the chivalrous
days of Peter Stuyvesant, and accompanied him to the siege of Fort
Christina. He inherited, however, but little of the martial character of
his ancestors. I have observed that he was a simple, good-natured man; he
was, moreover, a kind neighbor, and an obedient henpecked husband. Indeed,
to the latter circumstance might be owing that meekness of spirit which
gained him such universal popularity; for those men are apt to be
obsequious and conciliating abroad, who are under the discipline of shrews
at home. Their tempers, doubtless, are rendered pliant and malleable in
the fiery furnace of domestic tribulation, and a curtain-lecture is worth
all the sermons in the world for teaching the virtues of patience and
long-suffering. A termagant wife may, therefore, in some respects, be
considered a tolerable blessing, and if so, Rip Van Winkle was thrice
blessed.

[img[images/0071m.jpg]]

Certain it is, that he was a great favorite among all the good wives of
the village, who, as usual with the amiable sex, took his part in all
family squabbles, and never failed, whenever they talked those matters
over in their evening gossipings, to lay all the blame on Dame Van Winkle.
The children of the village, too, would shout with joy whenever he
approached. He assisted at their sports, made their playthings, taught
them to fly kites and shoot marbles, and told them long stories of ghosts,
witches, and Indians. Whenever he went dodging about the village, he was
surrounded by a troop of them hanging on his skirts, clambering on his
back, and playing a thousand tricks on him with impunity; and not a dog
would bark at him throughout the neighborhood.

The great error in Rip's composition was an insuperable aversion to all
kinds of profitable labor. It could not be for want of assiduity or
perseverance; for he would sit on a wet rock, with a rod as long and heavy
as a Tartar's lance, and fish all day without a murmur, even though he
should not be encouraged by a single nibble. He would carry a
fowling-piece on his shoulder, for hours together, trudging through woods
and swamps, and up hill and down dale, to shoot a few squirrels or wild
pigeons. He would never refuse to assist a neighbor even in the roughest
toil, and was a foremost man in all country frolics for husking Indian
corn, or building stone fences; the women of the village, too, used to
employ him to run their errands, and to do such little odd jobs as their
less obliging husbands would not do for them. In a word, Rip was ready to
attend to anybody's business but his own; but as to doing family duty, and
keeping his farm in order, he found it impossible.

In fact, he declared it was of no use to work on his farm; it was the most
pestilent little piece of ground in the whole country; everything about it
went wrong, in spite of him. His fences were continually falling to
pieces; his cow would either go astray, or get among the cabbages; weeds
were sure to grow quicker in his fields than anywhere else; the rain
always made a point of setting in just as he had some out-door work to do;
so that though his patrimonial estate had dwindled away under his
management, acre by acre, until there was little more left than a mere
patch of Indian corn and potatoes, yet it was the worst-conditioned farm
in the neighborhood.

His children, too, were as ragged and wild as if they belonged to nobody.
His son Rip, an urchin begotten in his own likeness, promised to inherit
the habits, with the old clothes, of his father. He was generally seen
trooping like a colt at his mother's heels, equipped in a pair of his
father's cast-off galligaskins, which he had much ado to hold up with one
hand, as a fine lady does her train in bad weather.

Rip Van Winkle, however, was one of those happy mortals, of foolish,
well-oiled dispositions, who take the world easy, eat white bread or
brown, whichever can be got with least thought or trouble, and would
rather starve on a penny than work for a pound. If left to himself, he
would have whistled life away, in perfect contentment; but his wife kept
continually dinning in his ears about his idleness, his carelessness, and
the ruin he was bringing on his family. Morning, noon, and night, her
tongue was incessantly going, and every thing he said or did was sure to
produce a torrent of household eloquence. Rip had but one way of replying
to all lectures of the kind, and that, by frequent use, had grown into a
habit. He shrugged his shoulders, shook his head, cast up his eyes, but
said nothing. This, however, always provoked a fresh volley from his wife,
so that he was fain to draw off his forces, and take to the outside of the
house&mdash;the only side which, in truth, belongs to a henpecked husband.

[img[images/0074m.jpg]]

Rip's sole domestic adherent was his dog Wolf, who was as much henpecked
as his master; for Dame Van Winkle regarded them as companions in
idleness, and even looked upon Wolf with an evil eye, as the cause of his
master's going so often astray. True it is, in all points of spirit
befitting in honorable dog, he was as courageous an animal as ever scoured
the woods&mdash;but what courage can withstand the evil-doing and
all-besetting terrors of a woman's tongue? The moment Wolf entered the
house, his crest fell, his tail drooped to the ground, or curled between
his legs, he sneaked about with a gallows air, casting many a sidelong
glance at Dame Van Winkle, and at the least flourish of a broomstick or
ladle, he would fly to the door with yelping precipitation.

Times grew worse and worse with Rip Van Winkle as years of matrimony
rolled on; a tart temper never mellows with age, and a sharp tongue is the
only edged tool that grows keener with constant use. For a long while he
used to console himself, when driven from home, by frequenting a kind of
perpetual club of the sages, philosophers, and other idle personages of
the village, which held its sessions on a bench before a small inn,
designated by a rubicund portrait of his Majesty George the Third. Here
they used to sit in the shade through a long, lazy summer's day, talking
listlessly over village gossip, or telling endless, sleepy stories about
nothing. But it would have been worth any statesman's money to have heard
the profound discussions which sometimes took place, when by chance an old
newspaper fell into their hands from some passing traveller. How solemnly
they would listen to the contents, as drawled out by Derrick Van Bummel,
the school-master, a dapper learned little man, who was not to be daunted
by the most gigantic word in the dictionary; and how sagely they would
deliberate upon public events some months after they had taken place.

[img[images/0075m.jpg]]

The opinions of this junto were completely controlled by Nicholas Vedder,
a patriarch of the village, and landlord of the inn, at the door of which
he took his seat from morning till night, just moving sufficiently to
avoid the sun, and keep in the shade of a large tree; so that the
neighbors could tell the hour by his movements as accurately as by a
sun-dial. It is true, he was rarely heard to speak, but smoked his pipe
incessantly. His adherents, however (for every great man has his
adherents), perfectly understood him, and knew how to gather his opinions.
When any thing that was read or related displeased him, he was observed to
smoke his pipe vehemently, and to send forth, frequent, and angry puffs;
but when pleased, he would inhale the smoke slowly and tranquilly, and
emit it in light and placid clouds, and sometimes, taking the pipe from
his mouth, and letting the fragrant vapor curl about his nose, would
gravely nod his head in token of perfect approbation.

From even this stronghold the unlucky Rip was at length routed by his
termagant wife, who would suddenly break in upon the tranquillity of the
assemblage, and call the members all to nought; nor was that august
personage, Nicholas Vedder himself, sacred from the daring tongue of this
terrible virago, who charged him outright with encouraging her husband in
habits of idleness.

Poor Rip was at last reduced almost to despair; and his only alternative,
to escape from the labor of the farm and the clamor of his wife, was to
take gun in hand, and stroll away into the woods. Here he would sometimes
seat himself at the foot of a tree, and share the contents of his wallet
with Wolf, with whom he sympathized as a fellow-sufferer in persecution.
"Poor Wolf," he would say, "thy mistress leads thee a dog's life of it;
but never mind, my lad, whilst I live thou shalt never want a friend to
stand by thee!" Wolf would wag his tail, look wistfully in his master's
face, and if dogs can feel pity, I verily believe he reciprocated the
sentiment with all his heart.

In a long ramble of the kind, on a fine autumnal day, Rip had
unconsciously scrambled to one of the highest parts of the Kaatskill
mountains. He was after his favorite sport of squirrel-shooting, and the
still solitudes had echoed and re-echoed with the reports of his gun.
Panting and fatigued, he threw himself, late in the afternoon, on a green
knoll, covered with mountain herbage, that crowned the brow of a
precipice. From an opening between the trees, he could overlook all the
lower country for many a mile of rich woodland. He saw at a distance the
lordly Hudson, far, far below him, moving on its silent but majestic
course, with the reflection of a purple cloud, or the sail of a lagging
bark, here and there sleeping on its glassy bosom and at last losing
itself in the blue highlands.

On the other side he looked down into a deep mountain glen, wild, lonely,
and shagged, the bottom filled with fragments from the impending cliffs,
and scarcely lighted by the reflected rays of the setting sun. For some
time Rip lay musing on this scene; evening was gradually advancing; the
mountains began to throw their long blue shadows over the valleys; he saw
that it would be dark long before he could reach the village; and he
heaved a heavy sigh when he thought of encountering the terrors of Dame
Van Winkle.

As he was about to descend, he heard a voice from a distance hallooing:
"Rip Van Winkle! Rip Van Winkle!" He looked around, but could see nothing
but a crow winging its solitary flight across the mountain. He thought his
fancy must have deceived him, and turned again to descend, when he heard
the same cry ring through the still evening air, "Rip Van Winkle! Rip Van
Winkle!"&mdash;at the same time Wolf bristled up his back, and giving a
low growl, skulked to his master's side, looking fearfully down into the
glen. Rip now felt a vague apprehension stealing over him; he looked
anxiously in the same direction, and perceived a strange figure slowly
toiling up the rocks, and bending under the weight of something he carried
on his back. He was surprised to see any human being in this lonely and
unfrequented place, but supposing it to be some one of the neighborhood in
need of his assistance, he hastened down to yield it.

On nearer approach, he was still more surprised at the singularity of the
stranger's appearance. He was a short, square-built old fellow, with thick
bushy hair, and a grizzled beard. His dress was of the antique Dutch
fashion&mdash;a cloth jerkin strapped round the waist&mdash;several pairs
of breeches, the outer one of ample volume, decorated with rows of buttons
down the sides, and bunches at the knees. He bore on his shoulders a stout
keg, that seemed full of liquor, and made signs for Rip to approach and
assist him with the load. Though rather shy and distrustful of this new
acquaintance, Rip complied with his usual alacrity; and mutually relieving
each other, they clambered up a narrow gully, apparently the dry bed of a
mountain torrent. As they ascended, Rip every now and then heard long
rolling peals, like distant thunder, that seemed to issue out of a deep
ravine, or rather cleft between lofty rocks, toward which their rugged
path conducted. He paused for an instant, but supposing it to be the
muttering of one of those transient thunder-showers which often take place
in the mountain heights, he proceeded. Passing through the ravine, they
came to a hollow, like a small amphitheatre, surrounded by perpendicular
precipices, over the brinks of which impending trees shot their branches,
so that you only caught glimpses of the azure sky, and the bright evening
cloud. During the whole time Rip and his companion had labored on in
silence; for though the former marvelled greatly what could be the object
of carrying a keg of liquor up this wild mountain, yet there was something
strange and incomprehensible about the unknown, that inspired awe, and
checked familiarity.

On entering the amphitheatre, new objects of wonder presented themselves.
On a level spot in the centre was a company of odd-looking personages
playing at ninepins. They were dressed in quaint outlandish fashion; some
wore short doublets, others jerkins, with long knives in their belts, and
most of them had enormous breeches, of similar style with that of the
guide's. Their visages, too, were peculiar; one had a large head, broad
face, and small piggish eyes; the face of another seemed to consist
entirely of nose, and was surmounted by a white sugar-loaf hat, set off
with a little red cock's tail. They all had beards, of various shapes and
colors. There was one who seemed to be the commander. He was a stout old
gentleman, with a weather-beaten countenance; he wore a laced doublet,
broad belt and hanger, high-crowned hat and feather, red stockings, and
high-heeled shoes, with roses in them. The whole group reminded Rip of the
figures in an old Flemish painting, in the parlor of Dominie Van Schaick,
the village parson, and which had been brought over from Holland at the
time of the settlement.

What seemed particularly odd to Rip was, that though these folks were
evidently amusing themselves, yet they maintained the gravest faces, the
most mysterious silence, and were, withal, the most melancholy party of
pleasure he had ever witnessed. Nothing interrupted the stillness of the
scene but the noise of the balls, which, whenever they were rolled, echoed
along the mountains like rumbling peals of thunder.

As Rip and his companion approached them, they suddenly desisted from
their play, and stared at him with such a fixed statue-like gaze, and such
strange uncouth, lack-lustre countenances, that his heart turned within
him, and his knees smote together. His companion now emptied the contents
of the keg into large flagons, and made signs to him to wait upon the
company. He obeyed with fear and trembling; they quaffed the liquor in
profound silence, and then returned to their game.

By degrees, Rip's awe and apprehension subsided. He even ventured, when no
eye was fixed upon him, to taste the beverage which he found had much of
the flavor of excellent Hollands. He was naturally a thirsty soul, and was
soon tempted to repeat the draught. One taste provoked another; and he
reiterated his visits to the flagon so often, that at length his senses
were overpowered, his eyes swam in his head, his head gradually declined,
and he fell into a deep sleep.

On waking, he found himself on the green knoll whence he had first seen
the old man of the glen. He rubbed his eyes&mdash;it was a bright sunny
morning. The birds were hopping and twittering among the bushes, and the
eagle was wheeling aloft, and breasting the pure mountain breeze.
"Surely," thought Rip, "I have not slept here all night." He recalled the
occurrences before he fell asleep. The strange man with the keg of liquor&mdash;the
mountain ravine&mdash;the wild retreat among the rocks&mdash;the
woe-begone party at ninepins&mdash;the flagon&mdash;"Oh! that flagon! that
wicked flagon!" thought Rip&mdash;"what excuse shall I make to Dame Van
Winkle?"

He looked round for his gun, but in place of the clean well-oiled
fowling-piece, he found an old firelock lying by him, the barrel encrusted
with rust, the lock falling off, and the stock worm-eaten. He now
suspected that the grave roysterers of the mountains had put a trick upon
him, and, having dosed him with liquor, had robbed him of his gun. Wolf,
too, had disappeared, but he might have strayed away after a squirrel or
partridge. He whistled after him and shouted his name, but all in vain;
the echoes repeated his whistle and shout, but no dog was to be seen.

He determined to revisit the scene of the last evening's gambol, and if he
met with any of the party, to demand his dog and gun. As he rose to walk,
he found himself stiff in the joints, and wanting in his usual activity.
"These mountain beds do not agree with me," thought Rip, "and if this
frolic, should lay me up with a fit of the rheumatism, I shall have a
blessed time with Dame Van Winkle." With some difficulty he got down into
the glen: he found the gully up which he and his companion had ascended
the preceding evening; but to his astonishment a mountain stream was now
foaming down it, leaping from rock to rock, and filling the glen with
babbling murmurs. He, however, made shift to scramble up its sides,
working his toilsome way through thickets of birch, sassafras, and
witch-hazel; and sometimes tripped up or entangled by the wild grape vines
that twisted their coils and tendrils from tree to tree, and spread a kind
of network in his path.

At length he reached to where the ravine had opened through the cliffs to
the amphitheatre; but no traces of such opening remained. The rocks
presented a high impenetrable wall, over which the torrent came tumbling
in a sheet of feathery foam, and fell into a broad deep basin, black from
the shadows of the surrounding forest. Here, then, poor Rip was brought to
a stand. He again called and whistled after his dog; he was only answered
by the cawing of a flock of idle crows, sporting high in the air about a
dry tree that overhung a sunny precipice; and who, secure in their
elevation, seemed to look down and scoff at the poor man's perplexities.
What was to be done? The morning was passing away, and Rip felt famished
for want of his breakfast. He grieved to give up his dog and gun; he
dreaded to meet his wife; but it would not do to starve among the
mountains. He shook his head, shouldered the rusty firelock, and, with a
heart full of trouble and anxiety, turned his steps homeward.

As he approached the village, he met a number of people, but none whom he
new, which somewhat surprised him, for he had thought himself acquainted
with every one in the country round. Their dress, too, was of a different
fashion from that to which he was accustomed. They all stared at him with
equal marks of surprise, and whenever they cast eyes upon him, invariably
stroked their chins. The constant recurrence of this gesture, induced Rip,
involuntarily, to do, the same, when, to his astonishment, he found his
beard had grown a foot long!

He had now entered the skirts of the village. A troop of strange children
ran at his heels, hooting after him, and pointing at his gray beard. The
dogs, too, not one of which he recognized for an old acquaintance, barked
at him as he passed. The very village was altered: it was larger and more
populous. There were rows of houses which he had never seen before, and
those which had been his familiar haunts had disappeared. Strange names
were over the doors&mdash;strange faces at the windows&mdash;everything
was strange. His mind now misgave him; he began to doubt whether both he
and the world around him were not bewitched. Surely this was his native
village, which he had left but a day before. There stood the Kaatskill
mountains&mdash;there ran the silver Hudson at a distance&mdash;there was
every hill and dale precisely as it had always been&mdash;Rip was sorely
perplexed&mdash;"That flagon last night," thought he, "has addled my poor
head sadly!"

[img[images/0083m.jpg]]

It was with some difficulty that he found the way to his own house, which
he approached with silent awe, expecting every moment to hear the shrill
voice of Dame Van Winkle. He found the house gone to decay&mdash;the roof
had fallen in, the windows shattered, and the doors off the hinges. A
half-starved dog, that looked like Wolf, was skulking about it. Rip called
him by name, but the cur snarled, showed his teeth, and passed on. This
was an unkind cut indeed.&mdash;"My very dog," sighed poor Rip, "has
forgotten me!"

He entered the house, which, to tell the truth, Dame Van Winkle had always
kept in neat order. It was empty, forlorn, and apparently abandoned. This
desolateness overcame all his connubial fears&mdash;he called loudly for
his wife and children&mdash;the lonely chambers rang for a moment with his
voice, and then all again was silence.

He now hurried forth, and hastened to his old resort, the village inn&mdash;but
it too was gone. A large rickety wooden building stood in its place, with
great gaping windows, some of them broken, and mended with old hats and
petticoats, and over the door was painted, "The Union Hotel, by Jonathan
Doolittle." Instead of the great tree that used to shelter the quiet
little Dutch inn of yore, there now was reared a tall naked pole, with
something on the top that looked like a red nightcap, and from it was
fluttering a flag, on which was a singular assemblage of stars and stripes&mdash;all
this was strange and incomprehensible. He recognized on the sign, however,
the ruby face of King George, under which he had smoked so many a peaceful
pipe, but even this was singularly metamorphosed. The red coat was changed
for one of blue and buff, a sword was held in the hand instead of a
sceptre, the head was decorated with a cocked hat, and underneath was
painted in large characters, "GENERAL WASHINGTON."

There was, as usual, a crowd of folk about the door, but none that Rip
recollected. The very character of the people seemed changed. There was a
busy, bustling, disputatious tone about it, instead of the accustomed
phlegm and drowsy tranquillity. He looked in vain for the sage Nicholas
Vedder, with his broad face, double chin, and fair long pipe, uttering
clouds of tobacco-smoke, instead of idle speeches; or Van Bummel, the
schoolmaster, doling forth the contents of an ancient newspaper. In place
of these, a lean, bilious-looking fellow, with his pockets full of
handbills, was haranguing, vehemently about rights of citizens-elections&mdash;members
of Congress&mdash;liberty&mdash;Bunker's hill&mdash;heroes of
seventy-six-and other words, which were a perfect Babylonish jargon to the
bewildered Van Winkle.

The appearance of Rip, with his long, grizzled beard, his rusty
fowling-piece, his uncouth dress, and the army of women and children at
his heels, soon attracted the attention of the tavern politicians. They
crowded round him, eying him from head to foot, with great curiosity. The
orator bustled up to him, and, drawing him partly aside, inquired, "on
which side he voted?" Rip stared in vacant stupidity. Another short but
busy little fellow pulled him by the arm, and rising on tiptoe, inquired
in his ear, "whether he was Federal or Democrat." Rip was equally at a
loss to comprehend the question; when a knowing, self-important old
gentleman, in a sharp cocked hat, made his way through the crowd, putting
them to the right and left with his elbows as he passed, and planting
himself before Van Winkle, with one arm akimbo, the other resting on his
cane, his keen eyes and sharp hat penetrating, as it were, into his very
soul, demanded in an austere tone, "What brought him to the election with
a gun on his shoulder, and a mob at his heels; and whether he meant to
breed a riot in the village?"

"Alas! gentlemen," cried Rip, somewhat dismayed, "I am a poor, quiet man,
a native of the place, and a loyal subject of the King, God bless him!"

Here a general shout burst from the bystanders-"a tory! a tory! a spy! a
refugee! hustle him! away with him!" It was with great difficulty that the
self-important man in the cocked hat restored order; and having assumed a
tenfold austerity of brow, demanded again of the unknown culprit, what he
came there for, and whom he was seeking. The poor man humbly assured him
that he meant no harm, but merely came there in search of some of his
neighbors, who used to keep about the tavern.

"Well&mdash;who are they?&mdash;name them."

Rip bethought himself a moment, and inquired, Where's Nicholas Vedder?

There was a silence for a little while, when an old man replied, in a
thin, piping voice, "Nicholas Vedder? why, he is dead and gone these
eighteen years! There was a wooden tombstone in the churchyard that used
to tell all about him, but that's rotten and gone too."

"Where's Brom Dutcher?"

"Oh, he went off to the army in the beginning of the war; some say he was
killed at the storming of Stony-Point&mdash;others say he was drowned in a
squall at the foot of Antony's Nose. I don't know&mdash;he never came back
again."

"Where's Van Bummel, the schoolmaster?"

"He went off to the wars, too; was a great militia general, and is now in
Congress."

Rip's heart died away, at hearing of these sad changes in his home and
friends, and finding himself thus alone in the world. Every answer puzzled
him too, by treating of such enormous lapses of time, and of matters which
he could not understand: war&mdash;Congress-Stony-Point;&mdash;he had no
courage to ask after any more friends, but cried out in despair, "Does
nobody here know Rip Van Winkle?"

"Oh, Rip Van Winkle!" exclaimed two or three. "Oh, to be sure! that's Rip
Van Winkle yonder, leaning against the tree."

Rip looked, and beheld a precise counterpart of himself as he went up the
mountain; apparently as lazy, and certainly as ragged. The poor fellow was
now completely confounded. He doubted his own identity, and whether he was
himself or another man. In the midst of his bewilderment, the man in the
cocked hat demanded who he was, and what was his name?

"God knows!" exclaimed he at his wit's end; "I'm not myself&mdash;I'm
somebody else&mdash;that's me yonder-no&mdash;that's somebody else, got
into my shoes&mdash;I was myself last night, but I fell asleep on the
mountain, and they've changed my gun, and everything's changed, and I'm
changed, and I can't tell what's my name, or who I am!"

The by-standers began now to look at each other, nod, wink significantly,
and tap their fingers against their foreheads. There was a whisper, also,
about securing the gun, and keeping the old fellow from doing mischief; at
the very suggestion of which, the self-important man with the cocked hat
retired with some precipitation. At this critical moment a fresh, comely
woman pressed through the throng to get a peep at the gray-bearded man.
She had a chubby child in her arms, which, frightened at his looks, began
to cry. "Hush, Rip," cried she, "hush, you little fool; the old man won't
hurt you." The name of the child, the air of the mother, the tone of her
voice, all awakened a train of recollections in his mind.

"What is your name, my good woman?" asked he.

"Judith Cardenier."

"And your father's name?"

"Ah, poor man, Rip Van Winkle was his name, but it's twenty years since he
went away from home with his gun, and never has been heard of since,&mdash;his
dog came home without him; but whether he shot himself, or was carried
away by the Indians, nobody can tell. I was then but a little girl."

Rip had but one more question to ask; but he put it with a faltering
voice:

"Where's your mother?"

Oh, she too had died but a short time since; she broke a blood-vessel in a
fit of passion at a New-England pedler.

There was a drop of comfort, at least, in this intelligence. The honest
man could contain himself no longer. He caught his daughter and her child
in his arms. "I am your father!" cried he-"Young Rip Van Winkle once-old
Rip Van Winkle now&mdash;Does nobody know poor Rip Van Winkle!"

All stood amazed, until an old woman, tottering out from among the crowd,
put her hand to her brow, and peering under it in his face for a moment
exclaimed, "sure enough! it is Rip Van Winkle&mdash;it is himself. Welcome
home again, old neighbor. Why, where have you been these twenty long
years?"

Rip's story was soon told, for the whole twenty years had been to him but
as one night. The neighbors stared when they heard it; some were seen to
wink at each other, and put their tongues in their cheeks; and the
self-important man in the cocked hat, who, when the alarm was over, had
returned to the field, screwed down the corners of his mouth, and shook
his head&mdash;upon which there was a general shaking of the head
throughout the assemblage.

It was determined, however, to take the opinion of old Peter Vanderdonk,
who was seen slowly advancing up the road. He was a descendant of the
historian of that name, who wrote one of the earliest accounts of the
province. Peter was the most ancient inhabitant of the village, and well
versed in all the wonderful events and traditions of the neighborhood. He
recollected Rip at once, and corroborated his story in the most
satisfactory manner. He assured the company that it was a fact, handed
down from his ancestor, the historian, that the Kaatskill mountains had
always been haunted by strange beings. That it was affirmed that the great
Hendrick Hudson, the first discoverer of the river and country, kept a
kind of vigil there every twenty years, with his crew of the Half-moon;
being permitted in this way to revisit the scenes of his enterprise, and
keep a guardian eye upon the river and the great city called by his name.
That his father had once seen them in their old Dutch dresses playing at
ninepins in the hollow of the mountain; and that he himself had heard, one
summer afternoon, the sound of their balls, like distant peals of thunder.

To make a long story short, the company broke up, and returned to the more
important concerns of the election. Rip's daughter took him home to live
with her; she had a snug, well-furnished house, and a stout cheery farmer
for a husband, whom Rip recollected for one of the urchins that used to
climb upon his back. As to Rip's son and heir, who was the ditto of
himself, seen leaning against the tree, he was employed to work on the
farm; but evinced an hereditary disposition to attend to any thing else
but his business.

Rip now resumed his old walks and habits; he soon found many of his former
cronies, though all rather the worse for the wear and tear of time; and
preferred making friends among the rising generation, with whom he soon
grew into great favor.

[img[images/0090m.jpg]]

Having nothing to do at home, and being arrived at that happy age when a
man can be idle with impunity, he took his place once more on the bench,
at the inn door, and was reverenced as one of the patriarchs of the
village, and a chronicle of the old times "before the war." It was some
time before he could get into the regular track of gossip, or could be
made to comprehend the strange events that had taken place during his
torpor. How that there had been a revolutionary war&mdash;that the country
had thrown off the yoke of old England&mdash;and that, instead of being a
subject to his Majesty George the Third, he was now a free citizen of the
United States. Rip, in fact, was no politician; the changes of states and
empires made but little impression on him; but there was one species of
despotism under which he had long groaned, and that was&mdash;petticoat
government. Happily, that was at an end; he had got his neck out of the
yoke of matrimony, and could go in and out whenever he pleased, without
dreading the tyranny of Dame Van Winkle. Whenever her name was mentioned,
however, he shook his head, shrugged his shoulders, and cast up his eyes;
which might pass either for an expression of resignation to his fate, or
joy at his deliverance.

He used to tell his story to every stranger that arrived at Mr.
Doolittle's hotel. He was observed, at first, to vary on some points every
time he told it, which was, doubtless, owing to his having so recently
awaked. It at last settled down precisely to the tale I have related, and
not a man, woman, or child in the neighborhood, but knew it by heart. Some
always pretended to doubt the reality of it, and insisted that Rip had
been out of his head, and that this was one point on which he always
remained flighty. The old Dutch inhabitants, however, almost universally
gave it full credit. Even to this day, they never hear a thunder-storm of
a summer afternoon about the Kaatskill, but they say Hendrick Hudson and
his crew are at their game of ninepins; and it is a common wish of all
henpecked husbands in the neighborhood, when life hangs heavy on their
hands, that they might have a quieting draught out of Rip Van Winkle's
flagon.

NOTE.

The foregoing tale, one would suspect, had been suggested to Mr.
Knickerbocker by a little German superstition about the Emperor Frederick
der Rothbart and the Kypphauser mountain; the subjoined note, however,
which had appended to the tale, shows that it is an absolute fact,
narrated with his usual fidelity.

"The story of Rip Van Winkle may seem incredible to many, but nevertheless
I give it my full belief, for I know the vicinity of our old Dutch
settlements to have been very subject to marvellous events and
appearances. Indeed, I have heard many stranger stories than this, in the
villages along the Hudson; all of which were too well authenticated to
admit of a doubt. I have even talked with Rip Van Winkle myself, who, when
last I saw him, was a very venerable old man, and so perfectly rational
and consistent on every other point, that I think no conscientious person
could refuse to take this into the bargain; nay, I have seen a certificate
on the subject taken before a country justice, and signed with cross, in
the justice's own handwriting. The story, therefore, is beyond the
possibility of doubt.

"D. K." POSTSCRIPT.

[img[images/0092m.jpg]]

The following are travelling notes from a memorandum-book of Mr.
Knickerbocker:

The Kaatsberg or Catskill mountains have always been a region full of
fable. The Indians considered them the abode of spirits, who influenced
the weather, spreading sunshine or clouds over the landscape, and sending
good or bad hunting seasons. They were ruled by an old squaw spirit, said
to be their mother. She dwelt on the highest peak of the Catskills, and
had charge of the doors of day and night to open and shut them at the
proper hour. She hung up the new moons in the skies, and cut up the old
ones into stars. In times of drought, if properly propitiated, she would
spin light summer clouds out of cobwebs and morning dew, and send them off
from the crest of the mountain, flake after flake, like flakes of carded
cotton, to float in the air; until, dissolved by the heat of the sun, they
would fall in gentle showers, causing the grass to spring, the fruits to
ripen, and the corn to grow an inch an hour. If displeased, however, she
would brew up clouds black as ink, sitting in the midst of them like a
bottle-bellied spider in the midst of its web; and when these clouds
broke, woe betide the valleys!

[img[images/0093m.jpg]]

In old times, say the Indian traditions, there was a kind of Manitou or
Spirit, who kept about the wildest recesses of the Catskill mountains, and
took a mischievous pleasure in wreaking all kind of evils and vexations
upon the red men. Sometimes he would assume the form of a bear, a panther,
or a deer, lead the bewildered hunter a weary chase through tangled
forests and among ragged rocks, and then spring off with a loud ho! ho!
leaving him aghast on the brink of a beetling precipice or raging torrent.

The favorite abode of this Manitou is still shown. It is a rock or cliff
on the loneliest port of the mountains, and, from the flowering vines
which clamber about it, and the wild flowers which abound in its
neighborhood, is known by the name of the Garden Rock. Near the foot of it
is a small lake, the haunt of the solitary bittern, with water-snakes
basking in the sun on the leaves of the pond-lilies which lie on the
surface. This place was held in great awe by the Indians, insomuch that
the boldest hunter would not pursue his game within its precincts. Once
upon a time, however, a hunter who had lost his way penetrated to the
Garden Rock, where he beheld a number of gourds placed in the crotches of
trees. One of these he seized and made off with it, but in the hurry of
his retreat he let it fall among the rocks, when a great stream gushed
forth, which washed him away and swept him down precipices, where he was
dished to pieces, and the stream made its way to the Hudson, and continues
to flow to the present day, being the identical stream known by the name
of the Kaaterskill.

[img[images/0094m.jpg]]
[img[images/0047m.jpg]]

"""
&mdash;&mdash;In the service of mankind to be
A guardian god below; still to employ
The mind's brave ardor in heroic aims,
Such as may raise us o'er the grovelling herd,
And make us shine for ever&mdash;that is life.
THOMSON.
"""

ONE of the first places to which a stranger is taken in Liverpool is the
Athenaeum. It is established on a liberal and judicious plan; it contains
a good library, and spacious reading-room, and is the great literary
resort of the place. Go there at what hour you may, you are sure to find
it filled with grave-looking personages, deeply absorbed in the study of
newspapers.

As I was once visiting this haunt of the learned, my attention was
attracted to a person just entering the room. He was advanced in life,
tall, and of a form that might once have been commanding, but it was a
little bowed by time&mdash;perhaps by care. He had a noble Roman style of
countenance; a a head that would have pleased a painter; and though some
slight furrows on his brow showed that wasting thought had been busy
there, yet his eye beamed with the fire of a poetic soul. There was
something in his whole appearance that indicated a being of a different
order from the bustling race round him.

I inquired his name, and was informed that it was ROSCOE. I drew back with
an involuntary feeling of veneration. This, then, was an author of
celebrity; this was one of those men whose voices have gone forth to the
ends of the earth; with whose minds I have communed even in the solitudes
of America. Accustomed, as we are in our country, to know European writers
only by their works, we cannot conceive of them, as of other men,
engrossed by trivial or sordid pursuits, and jostling with the crowd of
common minds in the dusty paths of life. They pass before our imaginations
like superior beings, radiant with the emanations of their genius, and
surrounded by a halo of literary glory.

To find, therefore, the elegant historian of the Medici mingling among the
busy sons of traffic, at first shocked my poetical ideas; but it is from
the very circumstances and situation in which he has been placed, that Mr.
Roscoe derives his highest claims to admiration. It is interesting to
notice how some minds seem almost to create themselves, springing up under
every disadvantage, and working their solitary but irresistible way
through a thousand obstacles. Nature seems to delight in disappointing the
assiduities of art, with which it would rear legitimate dulness to
maturity; and to glory in the vigor and luxuriance of her chance
productions. She scatters the seeds of genius to the winds, and though
some may perish among the stony places of the world, and some be choked,
by the thorns and brambles of early adversity, yet others will now and
then strike root even in the clefts of the rock, struggle bravely up into
sunshine, and spread over their sterile birthplace all the beauties of
vegetation.

Such has been the case with Mr. Roscoe. Born in a place apparently
ungenial to the growth of literary talent&mdash;in the very market-place
of trade; without fortune, family connections, or patronage;
self-prompted, self-sustained, and almost self-taught, he has conquered
every obstacle, achieved his way to eminence, and, having become one of
the ornaments of the nation, has turned the whole force of his talents and
influence to advance and embellish his native town.

Indeed, it is this last trait in his character which has given him the
greatest interest in my eyes, and induced me particularly to point him out
to my countrymen. Eminent as are his literary merits, he is but one among
the many distinguished authors of this intellectual nation. They, however,
in general, live but for their own fame, or their own pleasures. Their
private history presents no lesson to the world, or, perhaps, a
humiliating one of human frailty or inconsistency. At best, they are prone
to steal away from the bustle and commonplace of busy existence; to
indulge in the selfishness of lettered eas; and to revel in scenes of
mental, but exclusive enjoyment.

Mr. Roscoe, on the contrary, has claimed none of the accorded privileges
of talent. He has shut himself up in no garden of thought, nor elysium of
fancy; but has gone forth into the highways and thoroughfares of life, he
has planted bowers by the wayside, for the refreshment of the pilgrim and
the sojourner, and has opened pure fountains, where the laboring man may
turn aside from the dust and heat of the day, and drink of the living
streams of knowledge. There is a "daily beauty in his life," on which
mankind may meditate, and grow better. It exhibits no lofty and almost
useless, because inimitable, example of excellence; but presents a picture
of active, yet simple and imitable virtues, which are within every man's
reach, but which, unfortunately, are not exercised by many, or this world
would be a paradise.

But his private life is peculiarly worthy the attention of the citizens of
our young and busy country, where literature and the elegant arts must
grow up side by side with the coarser plants of daily necessity; and must
depend for their culture, not on the exclusive devotion of time and
wealth; nor the quickening rays of titled patronage; but on hours and
seasons snatched from the purest of worldly interests, by intelligent and
public-spirited individuals.

He has shown how much may be done for a place in hours of leisure by one
master-spirit, and how completely it can give its own impress to
surrounding objects. Like his own Lorenzo de' Medici, on whom he seems to
have fixed his eye, as on a pure model of antiquity, he has interwoven the
history of his life with the history of his native town, and has made the
foundations of his fame the monuments of his virtues. Wherever you go, in
Liverpool, you perceive traces of his footsteps in all that is elegant and
liberal. He found the tide of wealth flowing merely in the channels of
traffic; he has diverted from it invigorating rills to refresh the garden
of literature. By his own example and constant exertions, he has effected
that union of commerce and the intellectual pursuits, so eloquently
recommended in one of his latest writings;* and has practically proved how
beautifully they may be brought to harmonize, and to benefit each other.
The noble institutions for literary and scientific purposes, which reflect
such credit on Liverpool, and are giving such an impulse to the public
mind, have mostly been originated, and have all been effectively promoted,
by Mr. Roscoe; and when we consider the rapidly increasing opulence and
magnitude of that town, which promises to vie in commercial importance
with the metropolis, it will be perceived that in awakening an ambition of
mental improvement among its inhabitants, he has effected a great benefit
to the cause of British literature.

"""
* Address on the opening of the Liverpool Institution.
"""

In America, we know Mr. Roscoe only as the author; in Liverpool he is
spoken of as the banker; and I was told of his having been unfortunate in
business. I could not pity him, as I heard some rich men do. I considered
him far above the reach of pity. Those who live only for the world, and in
the world, may be cast down by the frowns of adversity; but a man like
Roscoe is not to be overcome by the reverses of fortune. They do but drive
him in upon the resources of his own mind, to the superior society of his
own thoughts; which the best of men are apt sometimes to neglect, and to
roam abroad in search of less worthy associates. He is independent of the
world around him. He lives with antiquity, and with posterity: with
antiquity, in the sweet communion of studious retirement; and with
posterity, in the generous aspirings after future renown. The solitude of
such a mind is its state of highest enjoyment. It is then visited by those
elevated meditations which are the proper aliment of noble souls, and are,
like manna, sent from heaven, in the wilderness of this world.

While my feelings were yet alive on the subject, it was my fortune to
light on further traces of Mr. Roscoe. I was riding out with a gentleman,
to view the environs of Liverpool, when he turned off, through a gate,
into some ornamented grounds. After riding a short distance, we came to a
spacious mansion of freestone, built in the Grecian style. It was not in
the purest style, yet it had an air of elegance, and the situation was
delightful. A fine lawn sloped away from it, studded with clumps of trees,
so disposed as to break a soft fertile country into a variety of
landscapes. The Mersey was seen winding a broad quiet sheet of water
through an expanse of green meadow land, while the Welsh mountains,
blended with clouds, and melting into distance, bordered the horizon.

This was Roscoe's favorite residence during the days of his prosperity. It
had been the seat of elegant hospitality and literary retirement. The
house was now silent and deserted. I saw the windows of the study, which
looked out upon the soft scenery I have mentioned. The windows were closed&mdash;the
library was gone. Two or three ill-favored beings were loitering about the
place, whom my fancy pictured into retainers of the law. It was like
visiting some classic fountain, that had once welled its pure waters in a
sacred shade, but finding it dry and dusty, with the lizard and the toad
brooding over the shattered marbles.

I inquired after the fate of Mr. Roscoe's library, which had consisted of
scarce and foreign books, from many of which he had drawn the materials
for his Italian histories. It had passed under the hammer of the
auctioneer, and was dispersed about the country. The good people of the
vicinity thronged liked wreckers to get some part of the noble vessel that
had been driven on shore. Did such a scene admit of ludicrous
associations, we might imagine something whimsical in this strange
irruption in the regions of learning. Pigmies rummaging the armory of a
giant, and contending for the possession of weapons which they could not
wield. We might picture to ourselves some knot of speculators, debating
with calculating brow over the quaint binding and illuminated margin of an
obsolete author; of the air of intense, but baffled sagacity, with which
some successful purchaser attempted to dive into the black-letter bargain
he had secured.

It is a beautiful incident in the story of Mr. Roscoe's misfortunes, and
one which cannot fail to interest the studious mind, that the parting with
his books seems to have touched upon his tenderest feelings, and to have
been the only circumstance that could provoke the notice of his muse. The
scholar only knows how dear these silent, yet eloquent, companions of pure
thoughts and innocent hours become in the season of adversity. When all
that is worldly turns to dross around us, these only retain their steady
value. When friends grow cold, and the converse of intimates languishes
into vapid civility and commonplace, these only continue the unaltered
countenance of happier days, and cheer us with that true friendship which
never deceived hope, nor deserted sorrow.

[img[images/0054m.jpg]]

I do not wish to censure; but, surely, if the people of Liverpool had been
properly sensible of what was due to Mr. Roscoe and themselves, his
library would never have been sold. Good worldly reasons may, doubtless,
be given for the circumstance, which it would be difficult to combat with
others that might seem merely fanciful; but it certainly appears to me
such an opportunity as seldom occurs, of cheering a noble mind struggling
under misfortunes by one of the most delicate, but most expressive tokens
of public sympathy. It is difficult, however, to estimate a man of genius
properly who is daily before our eyes. He becomes mingled and confounded
with other men. His great qualities lose their novelty; we become too
familiar with the common materials which form the basis even of the
loftiest character. Some of Mr. Roscoe's townsmen may regard him merely as
a man of business; others, as a politician; all find him engaged like
themselves in ordinary occupations, and surpassed, perhaps, by themselves
on some points of worldly wisdom. Even that amiable and unostentatious
simplicity of character, which gives the nameless grace to real
excellence, may cause him to be undervalued by some coarse minds, who do
not know that true worth is always void of glare and pretension. But the
man of letters, who speaks of Liverpool, speaks of it as the residence of
Roscoe.&mdash;The intelligent traveller who visits it inquires where
Roscoe is to be seen. He is the literary landmark of the place, indicating
its existence to the distant scholar.&mdash;He is like Pompey's column at
Alexandria, towering alone in classic dignity.

The following sonnet, addressed by Mr. Roscoe to his books, on parting
with them, has already been alluded to. If anything can add effect to the
pure feeling and elevated thought here displayed, it is the conviction,
that the who leis no effusion of fancy, but a faithful transcript from the
writer's heart.

[img[images/0055m.jpg]]

"""
TO MY BOOKS.

As one who, destined from his friends to part,
Regrets his loss, but hopes again erewhile
To share their converse and enjoy their smile,
And tempers as he may affliction's dart;

Thus, loved associates, chiefs of elder art,
Teachers of wisdom, who could once beguile
My tedious hours, and lighten every toil,
I now resign you; nor with fainting heart;

For pass a few short years, or days, or hours,
And happier seasons may their dawn unfold,
And all your sacred fellowship restore:
When, freed from earth, unlimited its powers.
Mind shall with mind direct communion hold,
And kindred spirits meet to part no more.
"""

"""
Here's a few flowers! but about midnight more:

The herbs that have oil them cold dew o' the night
Are strewings fitt'st for graves&mdash;&mdash;
You were as flowers now withered; even so
These herblets shall, which we upon you strow.
CYMBELINE.
"""

[img[images/9206m.jpg]]

AMONG the beautiful and simple-hearted customs of rural life which still
linger in some parts of England are those of strewing flowers before the
funerals and planting them at the graves of departed friends. These, it is
said, are the remains of some of the rites of the primitive Church; but
they are of still higher antiquity, having been observed among the Greeks
and Romans, and frequently mentioned by their writers, and were no doubt
the spontaneous tributes of unlettered affection, originating long before
art had tasked itself to modulate sorrow into song or story it on the
monument. They are now only to be met with in the most distant and retired
places of the kingdom, where fashion and innovation have not been able to
throng in and trample out all the curious and interesting traces of the
olden time.

In Glamorganshire, we are told, the bed whereon the corpse lies is covered
with flowers, a custom alluded to in one of the wild and plaintive ditties
of Ophelia:

"""
White his shroud as the mountain snow,
Larded all with sweet flowers;
Which be-wept to the grave did go,
With true love showers.
"""

There is also a most delicate and beautiful rite observed in some of the
remote villages of the south at the funeral of a female who has died young
and unmarried. A chaplet of white flowers is borne before the corpse by a
young girl nearest in age, size, and resemblance, and is afterwards hung
up in the church over the accustomed seat of the deceased. These chaplets
are sometimes made of white paper, in imitation of flowers, and inside of
them is generally a pair of white gloves. They are intended as emblems of
the purity of the deceased, and the crown of glory which she has received
in heaven.

In some parts of the country, also, the dead are carried to the grave with
the singing of psalms and hymns&mdash;a kind of triumph, "to show," says
Bourne, "that they have finished their course with joy, and are become
conquerors." This, I am informed, is observed in some of the northern
counties, particularly in Northumberland, and it has a pleasing, though
melancholy effect to hear of a still evening in some lonely country scene
the mournful melody of a funeral dirge swelling from a distance, and to
see the train slowly moving along the landscape.

"""
Thus, thus, and thus, we compass round
Thy harmless and unhaunted ground,
And as we sing thy dirge, we will,
The daffodill
And other flowers lay upon
The altar of our love, thy stone.
HERRICK.
"""

There is also a solemn respect paid by the traveller to the passing
funeral in these sequestered places; for such spectacles, occurring among
the quiet abodes of Nature, sink deep into the soul. As the mourning train
approaches he pauses, uncovered, to let it go by; he then follows silently
in the rear; sometimes quite to the grave, at other times for a few
hundred yards, and, having paid this tribute of respect to the deceased,
turns and resumes his journey.

The rich vein of melancholy which runs through the English character, and
gives it some of its most touching and ennobling graces, is finely
evidenced in these pathetic customs, and in the solicitude shown by the
common people for an honored and a peaceful grave. The humblest peasant,
whatever may be his lowly lot while living, is anxious that some little
respect may be paid to his remains. Sir Thomas Overbury, describing the
"faire and happy milkmaid," observes, "thus lives she, and all her care
is, that she may die in the spring-time, to have store of flowers stucke
upon her winding-sheet." The poets, too, who always breathe the feeling of
a nation, continually advert to this fond solicitude about the grave. In
The Maid's Tragedy, by Beaumont and Fletcher, there is a beautiful
instance of the kind describing the capricious melancholy of a
broken-hearted girl:

"""
When she sees a bank
Stuck full of flowers, she, with a sigh, will tell
Her servants, what a pretty place it were
To bury lovers in; and made her maids
Bluck 'em, and strew her over like a corse.
"""

[img[images/0209m.jpg]]

The custom of decorating graves was once universally prevalent: osiers
were carefully bent over them to keep the turf uninjured, and about them
were planted evergreens and flowers. "We adorn their graves," says Evelyn,
in his Sylva, "with flowers and redolent plants, just emblems of the life
of man, which has been compared in Holy Scriptures to those fading
beauties whose roots, being buried in dishonor, rise, again in glory."
This usage has now become extremely rare in England; but it may still be
met with in the churchyards of retired villages, among the Welsh
mountains; and I recollect an instance of it at the small town of Ruthven,
which lies at the head of the beautiful vale of Clewyd. I have been told
also by a friend, who was present at the funeral of a young girl in
Glamorganshire, that the female attendants had their aprons full of
flowers, which, as soon as the body was interred, they stuck about the
grave.

He noticed several graves which had been decorated in the same manner. As
the flowers had been merely stuck in the ground, and not planted, they had
soon withered, and might be seen in various states of decay; some
drooping, others quite perished. They were afterwards to be supplanted by
holly, rosemary, and other evergreens, which on some graves had grown to
great luxuriance, and overshadowed the tombstones.

There was formerly a melancholy fancifulness in the arrangement of these
rustic offerings, that had something in it truly poetical. The rose was
sometimes blended with the lily, to form a general emblem of frail
mortality. "This sweet flower," said Evelyn, "borne on a branch set with
thorns and accompanied with the lily, are natural hieroglyphics of our
fugitive, umbratile, anxious, and transitory life, which, making so fair a
show for a time, is not yet without its thorns and crosses." The nature
and color of the flowers, and of the ribbons with which they were tied,
had often a particular reference to the qualities or story of the
deceased, or were expressive of the feelings of the mourner. In an old
poem, entitled "Corydon's Doleful Knell," a lover specifies the
decorations he intends to use:

"""
A garland shall be framed
By art and nature's skill,
Of sundry-colored flowers,
In token of good-will.

And sundry-colored ribbons
On it I will bestow;
But chiefly blacke and yellowe
With her to grave shall go.

I'll deck her tomb with flowers
The rarest ever seen;
And with my tears as showers
I'll keep them fresh and green.
"""

The white rose, we are told, was planted at the grave of a virgin; her
chaplet was tied with white ribbons, in token of her spotless innocence,
though sometimes black ribbons were intermingled, to bespeak the grief of
the survivors. The red rose was occasionally used, in remembrance of such
as had been remarkable for benevolence; but roses in general were
appropriated to the graves of lovers. Evelyn tells us that the custom was
not altogether extinct in his time, near his dwelling in the county of
Surrey, "where the maidens yearly planted and decked the graves of their
defunct sweethearts with rose-bushes." And Camden likewise remarks, in his
Britannia: "Here is also a certain custom, observed time out of mind, of
planting rose-trees upon the graves, especially by the young men and maids
who have lost their loves; so that this churchyard is now full of them."

When the deceased had been unhappy in their loves, emblems of a more
gloomy character were used, such as the yew and cypress, and if flowers
were strewn, they were of the most melancholy colors. Thus, in poems by
Thomas Stanley, Esq. (published in 1651), is the following stanza:

"""
Yet strew
Upon my dismall grave
Such offerings as you have,
Forsaken cypresse and yewe;
For kinder flowers can take no birth
Or growth from such unhappy earth.
"""

In The Maid's Tragedy, a pathetic little air, is introduced, illustrative
of this mode of decorating the funerals of females who had been
disappointed in love:

"""
Lay a garland on my hearse
Of the dismall yew,
Maidens, willow branches wear,
Say I died true.

My love was false, but I was firm,
From my hour of birth;
Upon my buried body lie
Lightly, gentle earth.
"""

The natural effect of sorrow over the dead is to refine and elevate the
mind; and we have a proof of it in the purity of sentiment and the
unaffected elegance of thought which pervaded the whole of these funeral
observances. Thus it was an especial precaution that none but
sweet-scented evergreens and flowers should be employed. The intention
seems to have been to soften the horrors of the tomb, to beguile the mind
from brooding over the disgraces of perishing mortality, and to associate
the memory of the deceased with the most delicate and beautiful objects in
nature. There is a dismal process going on in the grave, ere dust can
return to its kindred dust, which the imagination shrinks from
contemplating; and we seek still to think of the form we have loved, with
those refined associations which it awakened when blooming before us in
youth and beauty. "Lay her i' the earth," says Laertes, of his virgin
sister,

"""
And from her fair and unpolluted flesh
May violets spring.
"""

Herrick, also, in his "Dirge of Jephtha," pours forth a fragrant flow of
poetical thought and image, which in a manner embalms the dead in the
recollections of the living.

"""
Sleep in thy peace, thy bed of spice,
And make this place all Paradise:
May sweets grow here! and smoke from hence
Fat frankincense.

Let balme and cassia send their scent
From out thy maiden monument.

May all shie maids at wonted hours
Come forth to strew thy tombe with flowers!
May virgins, when they come to mourn
Male incense burn
Upon thine altar! then return
And leave thee sleeping in thy urn.
"""

I might crowd my pages with extracts from the older British poets, who
wrote when these rites were more prevalent, and delighted frequently to
allude to them; but I have already quoted more than is necessary. I
cannot, however, refrain from giving a passage from Shakespeare, even
though it should appear trite, which illustrates the emblematical meaning
often conveyed in these floral tributes, and at the same time possesses
that magic of language and appositeness of imagery for which he stands
pre-eminent.

"""
With fairest flowers,
Whilst summer lasts, and I live here, Fidele,
I'll sweeten thy sad grave; thou shalt not lack
The flower that's like thy face, pale primrose; nor
The azured harebell like thy veins; no, nor
The leaf of eglantine; whom not to slander,
Outsweetened not thy breath.
"""

There is certainly something more affecting in these prompt and
spontaneous offerings of Nature than in the most costly monuments of art;
the hand strews the flower while the heart is warm, and the tear falls on
the grave as affection is binding the osier round the sod; but pathos
expires under the slow labor of the chisel, and is chilled among the cold
conceits of sculptured marble.

It is greatly to be regretted that a custom so truly elegant and touching
has disappeared from general use, and exists only in the most remote and
insignificant villages. But it seems as if poetical custom always shuns
the walks of cultivated society. In proportion as people grow polite they
cease to be poetical. They talk of poetry, but they have learnt to check
its free impulses, to distrust its sallying emotions, and to supply its
most affecting and picturesque usages by studied form and pompous
ceremonial. Few pageants can be more stately and frigid than an English
funeral in town. It is made up of show and gloomy parade: mourning
carriages, mourning horses, mourning plumes, and hireling mourners, who
make a mockery of grief. "There is a grave digged," says Jeremy Taylor,
"and a solemn mourning, and a great talk in the neighborhood, and when the
daies are finished, they shall be, and they shall be remembered no more."
The associate in the gay and crowded city is soon forgotten; the hurrying
succession of new intimates and new pleasures effaces him from our minds,
and the very scenes and circles in which he moved are incessantly
fluctuating. But funerals in the country are solemnly impressive. The
stroke of death makes a wider space in the village circle, and is an awful
event in the tranquil uniformity of rural life. The passing bell tolls its
knell in every ear; it steals with its pervading melancholy over hill and
vale, and saddens all the landscape.

The fixed and unchanging features of the country also perpetuate the
memory of the friend with whom we once enjoyed them, who was the companion
of our most retired walks, and gave animation to every lonely scene. His
idea is associated with every charm of Nature; we hear his voice in the
echo which he once delighted to awaken; his spirit haunts the grove which
he once frequented; we think of him in the wild upland solitude or amidst
the pensive beauty of the valley. In the freshness of joyous morning we
remember his beaming smiles and bounding gayety; and when sober evening
returns with its gathering shadows and subduing quiet, we call to mind
many a twilight hour of gentle talk and sweet-souled melancholy.

"""
Each lonely place shall him restore,
For him the tear be duly shed;
Beloved till life can charm no more,
And mourn'd till pity's self be dead.
"""

Another cause that perpetuates the memory of the deceased in the country
is that the grave is more immediately in sight of the survivors. They pass
it on their way to prayer; it meets their eyes when their hearts are
softened by the exercises of devotion; they linger about it on the
Sabbath, when the mind is disengaged from worldly cares and most disposed
to turn aside from present pleasures and present loves and to sit down
among the solemn mementos of the past. In North Wales the peasantry kneel
and pray over the graves of their deceased friends for several Sundays
after the interment; and where the tender rite of strewing and planting
flowers is still practised, it is always renewed on Easter, Whitsuntide,
and other festivals, when the season brings the companion of former
festivity more vividly to mind. It is also invariably performed by the
nearest relatives and friends; no menials nor hirelings are employed, and
if a neighbor yields assistance, it would be deemed an insult to offer
compensation.

I have dwelt upon this beautiful rural custom, because as it is one of the
last, so is it one of the holiest, offices of love. The grave is the
ordeal of true affection. It is there that the divine passion of the soul
manifests its superiority to the instinctive impulse of mere animal
attachment. The latter must be continually refreshed and kept alive by the
presence of its object, but the love that is seated in the soul can live
on long remembrance. The mere inclinations of sense languish and decline
with the charms which excited them, and turn with shuddering disgust from
the dismal precincts of the tomb; but it is thence that truly spiritual
affection rises, purified from every sensual desire, and returns, like a
holy flame, to illumine and sanctify the heart of the survivor.

[img[images/0217m.jpg]]

The sorrow for the dead is the only sorrow from which we refuse to be
divorced. Every other wound we seek to heal, every other affliction to
forget; but this wound we consider it a duty to keep open, this affliction
we cherish and brood over in solitude. Where is the mother who would
willingly forget the infant that perished like a blossom from her arms
though every recollection is a pang? Where is the child that would
willingly forget the most tender of parents, though to remember be but to
lament? Who, even in the hour of agony, would forget the friend over whom
he mourns? Who, even when the tomb is closing upon the remains of her he
most loved, when he feels his heart, as it were, crushed in the closing of
its portal, would accept of consolation that must be bought by
forgetfulness? No, the love which survives the tomb is one of the noblest
attributes of the soul. If it has its woes, it has likewise its delights;
and when the overwhelming burst of grief is calmed into the gentle tear of
recollection, when the sudden anguish and the convulsive agony over the
present ruins of all that we most loved is softened away into pensive
meditation on all that it was in the days of its loveliness, who would
root out such a sorrow from the heart? Though it may sometimes throw a
passing cloud over the bright hour of gayety, or spread a deeper sadness
over the hour of gloom, yet who would exchange it even for the song of
pleasure or the burst of revelry? No, there is a voice from the tomb
sweeter than song. There is a remembrance of the dead to which we turn
even from the charms of the living. Oh, the grave! the grave! It buries
every error, covers every defect, extinguishes every resentment! From its
peaceful bosom spring none but fond regrets and tender recollections. Who
can look down upon the grave even of an enemy, and not feel a compunctious
throb that he should ever have warred with the poor handful of earth that
lies mouldering before him?

But the grave of those we loved&mdash;what a place for meditation! There
it is that we call up in long review the whole history of virtue and
gentleness, and the thousand endearments lavished upon us almost unheeded
in the daily intercourse of intimacy; there it is that we dwell upon the
tenderness, the solemn, awful tenderness, of the parting scene. The bed of
death, with all its stifled griefs&mdash;its noiseless attendance&mdash;its
mute, watchful assiduities. The last testimonies of expiring love! The
feeble, fluttering, thrilling&mdash;oh, how thrilling!&mdash;pressure of
the hand! The faint, faltering accents, struggling in death to give one
more assurance of affection! The last fond look of the glazing eye,
turning upon us even from the threshold of existence!

Ay, go to the grave of buried love and meditate! There settle the account
with thy conscience for every past benefit unrequited&mdash;every past
endearment unregarded, of that departed being who can never-never&mdash;never
return to be soothed by thy contrition!

If thou art a child, and hast ever added a sorrow to the soul or a furrow
to the silvered brow of an affectionate parent; if thou art a husband, and
hast ever caused the fond bosom that ventured its whole happiness in thy
arms to doubt one moment of thy kindness or thy truth; if thou art a
friend, and hast ever wronged, in thought or word or deed, the spirit that
generously confided in thee; if thou art a lover, and hast ever given one
unmerited pang to that true heart which now lies cold and still beneath
thy feet,&mdash;then be sure that every unkind look, every ungracious
word, every ungentle action will come thronging back upon thy memory and
knocking dolefully at thy soul: then be sure that thou wilt lie down
sorrowing and repentant on the grave, and utter the unheard groan and pour
the unavailing tear, more deep, more bitter because unheard and
unavailing.

Then weave thy chaplet of flowers and strew the beauties of Nature about
the grave; console thy broken spirit, if thou canst, with these tender yet
futile tributes of regret; but take warning by the bitterness of this thy
contrite affliction over the dead, and henceforth be more faithful and
affectionate in the discharge of thy duties to the living.

In writing the preceding article it was not intended to give a full detail
of the funeral customs of the English peasantry, but merely to furnish a
few hints and quotations illustrative of particular rites, to be appended,
by way of note, to another paper, which has been withheld. The article
swelled insensibly into its present form, and this is mentioned as an
apology for so brief and casual a notice of these usages after they have
been amply and learnedly investigated in other works.

I must observe, also, that I am well aware that this custom of adorning
graves with flowers prevails in other countries besides England. Indeed,
in some it is much more general, and is observed even by the rich and
fashionable; but it is then apt to lose its simplicity and to degenerate
into affectation. Bright, in his travels in Lower Hungary, tells of
monuments of marble and recesses formed for retirement, with seats placed
among bowers of greenhouse plants, and that the graves generally are
covered with the gayest flowers of the season. He gives a casual picture
of filial piety which I cannot but transcribe; for I trust it is as useful
as it is delightful to illustrate the amiable virtues of the sex. "When I
was at Berlin," says he, "I followed the celebrated Iffland to the grave.
Mingled with some pomp you might trace much real feeling. In the midst of
the ceremony my attention was attracted by a young woman who stood on a
mound of earth newly covered with turf, which she anxiously protected from
the feet of the passing crowd. It was the tomb of her parent; and the
figure of this affectionate daughter presented a monument more striking
than the most costly work of art."

I will barely add an instance of sepulchral decoration that I once met
with among the mountains of Switzerland. It was at the village of Gersau,
which stands on the borders of the Lake of Lucerne, at the foot of Mount
Rigi. It was once the capital of a miniature republic shut up between the
Alps and the lake, and accessible on the land side only by footpaths. The
whole force of the republic did not exceed six hundred fighting men, and a
few miles of circumference, scooped out as it were from the bosom of the
mountains, comprised its territory. The village of Gersau seemed separated
from the rest of the world, and retained the golden simplicity of a purer
age. It had a small church, with a burying-ground adjoining. At the heads
of the graves were placed crosses of wood or iron. On some were affixed
miniatures, rudely executed, but evidently attempts at likenesses of the
deceased. On the crosses were hung chaplets of flowers, some withering
others fresh, as if occasionally renewed. I paused with interest at this
scene: I felt that I was at the source of poetical description, for these
were the beautiful but unaffected offerings of the heart which poets are
fain to record. In a gayer and more populous place I should have suspected
them to have been suggested by factitious sentiment derived from books;
but the good people of Gersau knew little of books; there was not a novel
nor a love-poem in the village, and I question whether any peasant of the
place dreamt, while he was twining a fresh chaplet for the grave of his
mistress, that he was fulfilling one of the most fanciful rites of
poetical devotion, and that he was practically a poet.
[img[images/0107m.jpg]]

"""
Oh! friendly to the best pursuits of man,
Friendly to thought, to virtue and to peace,
Domestic life in rural pleasures past!
COWPER.
"""

THE stranger who would form a correct opinion of the English character,
must not confine his observations to the metropolis. He must go forth into
the country; he must sojourn in villages and hamlets; he must visit
castles, villas, farm-houses, cottages; he must wander through parks and
gardens; along hedges and green lanes; he must loiter about country
churches; attend wakes and fairs, and other rural festivals; and cope with
the people in all their conditions, and all their habits and humors.

In some countries, the large cities absorb the wealth and fashion of the
nation; they are the only fixed abodes of elegant and intelligent society,
and the country is inhabited almost entirely by boorish peasantry. In
England, on the contrary, the metropolis is a mere gathering-place, or
general rendezvous, of the polite classes, where they devote a small
portion of the year to a hurry of gayety and dissipation, and, having
indulged this kind of carnival, return again to the apparently more
congenial habits of rural life. The various orders of society are
therefore diffused over the whole surface of the kingdom, and the more
retired neighborhoods afford specimens of the different ranks.

The English, in fact, are strongly gifted with the rural feeling. They
possess a quick sensibility to the beauties of nature, and a keen relish
for the pleasures and employments of the country. This passion seems
inherent in them. Even the inhabitants of cities, born and brought up
among brick walls and bustling streets, enter with facility into rural
habits, and evince a tact for rural occupation. The merchant has his snug
retreat in the vicinity of the metropolis, where he often displays as much
pride and zeal in the cultivation of his flower-garden, and the maturing
of his fruits, as he does in the conduct of his business, and the success
of a commercial enterprise. Even those less fortunate individuals, who are
doomed to pass their lives in the midst of din and traffic, contrive to
have something that shall remind them of the green aspect of nature. In
the most dark and dingy quarters of the city, the drawing-room window
resembles frequently a bank of flowers; every spot capable of vegetation
has its grass-plot and flower-bed; and every square its mimic park, laid
out with picturesque taste, and gleaming with refreshing verdure.

Those who see the Englishman only in town, are apt to form an unfavorable
opinion of his social character. He is either absorbed in business, or
distracted by the thousand engagements that dissipate time, thought, and
feeling, in this huge metropolis. He has, therefore, too commonly, a look
of hurry and abstraction. Wherever he happens to be, he is on the point of
going somewhere else; at the moment he is talking on one subject, his mind
is wandering to another; and while paying a friendly visit, he is
calculating how he shall economize time so as to pay the other visits
allotted to the morning. An immense metropolis, like London, is calculated
to make men selfish and uninteresting. In their casual and transient
meetings, they can but deal briefly in commonplaces. They present but the
cold superfices of character&mdash;its rich and genial qualities have no
time to be warmed into a flow.

It is in the country that the Englishman gives scope to his natural
feelings. He breaks loose gladly from the cold formalities and negative
civilities of town; throws off his habits of shy reserve, and becomes
joyous and free-hearted. He manages to collect round him all the
conveniences and elegancies of polite life, and to banish its restraints.
His country-seat abounds with every requisite, either for studious
retirement, tasteful gratification, or rural exercise. Books, paintings,
music, horses, dogs, and sporting implements of all kinds, are at hand. He
puts no constraint, either upon his guests or himself, but, in the true
spirit of hospitality, provides the means of enjoyment, and leaves every
one to partake according to his inclination.

The taste of the English in the cultivation of land, and in what is called
landscape gardening, is unrivalled. They have studied Nature intently, and
discovered an exquisite sense of her beautiful forms and harmonious
combinations. Those charms which, in other countries, she lavishes in wild
solitudes, are here assembled round the haunts of domestic life. They seem
to have caught her coy and furtive graces, and spread them, like witchery,
about their rural abodes.

[img[images/0110m.jpg]]

Nothing can be more imposing than the magnificence of English park
scenery. Vast lawns that extend like sheets of vivid green, with here and
there clumps of gigantic trees, heaping up rich piles of foliage. The
solemn pomp of groves and woodland glades, with the deer trooping in
silent herds across them; the hare, bounding away to the covert; or the
pheasant, suddenly bursting upon the wing. The brook, taught to wind in
natural meanderings, or expand into a glassy lake&mdash;the sequestered
pool, reflecting the quivering trees, with the yellow leaf sleeping on its
bosom, and the trout roaming fearlessly about its limpid waters; while
some rustic temple, or sylvan statue, grown green and dank with age, gives
an air of classic sanctity to the seclusion.

[img[images/0111m.jpg]]

These are but a few of the features of park scenery; but what most
delights me, is the creative talent with which the English decorate the
unostentatious abodes of middle life. The rudest habitation, the most
unpromising and scanty portion of land, in the hands of an Englishman of
taste, becomes a little paradise. With a nicely discriminating eye, he
seizes at once upon its capabilities, and pictures in his mind the future
landscape. The sterile spot grows into loveliness under his hand; and yet
the operations of art which produce the effect are scarcely to be
perceived. The cherishing and training of some trees; the cautious pruning
of others; the nice distribution of flowers and plants of tender and
graceful foliage; the introduction of a green slope of velvet turf; the
partial opening to a peep of blue distance, or silver gleam of water;-all
these are managed with a delicate tact, a pervading yet quiet assiduity,
like the magic touchings with which a painter finishes up a favorite
picture.

The residence of people of fortune and refinement in the country, has
diffused a degree of taste and elegance in rural economy that descends to
the lowest class. The very laborer, with his thatched cottage and narrow
slip of ground, attends to their embellishment. The trim hedge, the
grass-plot before the door, the little flower-bed bordered with snug box,
the woodbine trained up against the wall, and hanging its blossoms about
the lattice; the pot of flowers in the window; the holly, providently
planted about the house, to cheat winter of its dreariness, and to throw
in a semblance of green summer to cheer the fireside; all these bespeak
the influence of taste, flowing down from high sources, and pervading the
lowest levels of the public mind. If ever Love, as poets sing, delights to
visit a cottage, it must be the cottage of an English peasant.

The fondness for rural life among the higher classes of the English has
had a great and salutary effect upon the national character. I do not know
a finer race of men than the English gentlemen. Instead of the softness
and effeminacy which characterize the men of rank in most countries, they
exhibit a union of elegance and strength, a robustness of frame and
freshness of complexion, which I am inclined to attribute to their living
so much in the open air, and pursuing so eagerly the invigorating
recreations of the country. The hardy exercises produce also a healthful
tone of mind and spirits, and a manliness and simplicity of manners, which
even the follies and dissipations of the town cannot easily pervert, and
can never entirely destroy. In the country, too, the different orders of
society seem to approach more freely, to be more disposed to blend and
operate favorably upon each other. The distinctions between them do not
appear to be so marked and impassable as in the cities. The manner in
which property has been distributed into small estates and farms has
established a regular gradation from the noblemen, through the classes of
gentry, small landed proprietors, and substantial farmers, down to the
laboring peasantry; and while it has thus banded the extremes of society
together, has infused into each intermediate rank a spirit of
independence. This, it must be confessed, is not so universally the case
at present as it was formerly; the larger estates having, in late years of
distress, absorbed the smaller, and, in some parts of the country, almost
annihilated the sturdy race of small farmers. These, however, I believe,
are but casual breaks in the general system I have mentioned.

In rural occupation, there is nothing mean and debasing. It leads a man
forth among scenes of natural grandeur and beauty; it leaves him to the
workings of his own mind, operated upon by the purest and most elevating
of external influences. Such a man may be simple and rough, but he cannot
be vulgar. The man of refinement, therefore, finds nothing revolting in an
intercourse with the lower orders in rural life, as he does when he
casually mingles with the lower orders of cities. He lays aside his
distance and reserve, and is glad to waive the distinctions of rank, and
to enter into the honest, heartfelt enjoyments of common life. Indeed, the
very amusements of the country bring, men more and more together; and the
sound hound and horn blend all feelings into harmony. I believe this is
one great reason why the nobility and gentry are more popular among the
inferior orders in England than they are in any other country; and why the
latter have endured so many excessive pressures and extremities, without
repining more generally at the unequal distribution of fortune and
privilege.

To this mingling of cultivated and rustic society may also be attributed
the rural feeling that runs through British literature; the frequent use
of illustrations from rural life; those incomparable descriptions of
Nature, that abound in the British poets&mdash;that have continued down
from "The Flower and the Leaf," of Chaucer, and have brought into our
closets all the freshness and fragrance of the dewy landscape. The
pastoral writers of other countries appear as if they had paid Nature an
occasional visit, and become acquainted with her general charms; but the
British poets have lived and revelled with her&mdash;they have wooed her
in her most secret haunts&mdash;they have watched her minutest caprices. A
spray could not tremble in the breeze&mdash;a leaf could not rustle to the
ground&mdash;a diamond drop could not patter in the stream&mdash;a
fragrance could not exhale from the humble violet, nor a daisy unfold its
crimson tints to the morning, but it has been noticed by these impassioned
and delicate observers, and wrought up into some beautiful morality.

The effect of this devotion of elegant minds to rural occupations has been
wonderful on the face of the country. A great part of the island is rather
level, and would be monotonous, were it not for the charms of culture; but
it is studded and gemmed, as it were, with castles and palaces, and
embroidered with parks and gardens. It does not abound in grand and
sublime prospects, but rather in little home scenes of rural repose and
sheltered quiet. Every antique farm-house and moss-grown cottage is a
picture; and as the roads are continually winding, and the view is shut in
by groves and hedges, the eye is delighted by a continual succession of
small landscapes of captivating loveliness.

[img[images/0115m.jpg]]

The great charm, however, of English scenery, is the moral feeling that
seems to pervade it. It is associated in the mind with ideas of order, of
quiet, of sober well-established principles, of hoary usage and reverend
custom. Every thing seems to be the growth of ages of regular and peaceful
existence. The old church of remote architecture, with its low, massive
portal; its Gothic tower; its windows rich with tracery and painted glass,
in scrupulous preservation; its stately monuments of warriors and worthies
of the olden time, ancestors of the present lords of the soil; its
tombstones, recording successive generations of sturdy yeomanry, whose
progeny still plough the same fields, and kneel at the same altar;&mdash;the
parsonage, a quaint irregular pile, partly antiquated, but repaired and
altered in the tastes of various ages and occupants;&mdash;the stile and
foot-path leading from the churchyard, across pleasant fields, and along
shady hedgerows, according to an immemorial right of way;&mdash;the
neighboring village, with its venerable cottages, its public green
sheltered by trees, under which the forefathers of the present race have
sported;&mdash;the antique family mansion, standing apart in some little
rural domain, but looking down with a protecting air on the surrounding
scene; all these common features of English landscape evince a calm and
settled security, a hereditary transmission of homebred virtues and local
attachments, that speak deeply and touchingly for the moral character of
the nation.

It is a pleasing sight, of a Sunday morning, when the bell is sending its
sober melody across the quiet fields, to behold the peasantry in their
best finery, with ruddy faces, and modest cheerfulness, thronging
tranquilly along the green lanes to church; but it is still more pleasing
to see them in the evenings, gathering about their cottage doors, and
appearing to exult in the humble comforts and embellishments which their
own hands have spread around them.

It is this sweet home-feeling, this settled repose of affection in the
domestic scene, that is, after all, the parent of the steadiest virtues
and purest enjoyments; and I cannot close these desultory remarks better,
than by quoting the words of a modern English poet, who has depicted it
with remarkable felicity:

[img[images/0117m.jpg]]

"""
Through each gradation, from the castled hall,
The city dome, the villa crowned with shade,
But chief from modest mansions numberless,
In town or hamlet, shelt'ring middle life,
Down to the cottaged vale, and straw-roof'd shed;
This western isle has long been famed for scenes
Where bliss domestic finds a dwelling-place;
Domestic bliss, that, like a harmless dove,
(Honor and sweet endearment keeping guard,)
Can centre in a little quiet nest
All that desire would fly for through the earth;
That can, the world eluding, be itself
A world enjoyed; that wants no witnesses
But its own sharers, and approving Heaven;
That, like a flower deep hid in rock cleft,
Smiles, though 't is looking only at the sky.*
"""

"""
* From a poem on the death of the Princess Charlotte, by the
Reverend Rann Kennedy, A.M.
"""
[img[images/0357m.jpg]]

Thou soft-flowing Avon, by thy silver stream Of things more than mortal
sweet Shakespeare would dream The fairies by moonlight dance round his
green bed, For hallow'd the turf is which pillow'd his head.

GARRICK.

TO a homeless man, who has no spot on this wide world which he can truly
call his own, there is a momentary feeling of something like independence
and territorial consequence when, after a weary day's travel, he kicks off
his boots, thrusts his feet into slippers, and stretches himself before an
inn-fire. Let the world without go as it may, let kingdoms rise or fall,
so long as he has the wherewithal to pay his bill he is, for the time
being, the very monarch of all he surveys. The armchair is his throne, the
poker his sceptre, and the little parlor, some twelve feet square, his
undisputed empire. It is a morsel of certainly snatched from the midst of
the uncertainties of life; it is a sunny moment gleaming out kindly on a
cloudy day: and he who has advanced some way on the pilgrimage of
existence knows the importance of husbanding even morsels and moments of
enjoyment. "Shall I not take mine ease in mine inn?" thought I, as I gave
the fire a stir, lolled back in my elbow-chair, and cast a complacent look
about the little parlor of the Red Horse at Stratford-on-Avon.

The words of sweet Shakespeare were just passing through my mind as the
clock struck midnight from the tower of the church in which he lies
buried. There was a gentle tap at the door, and a pretty chambermaid,
putting in her smiling face, inquired, with a hesitating air, whether I
had rung. I understood it as a modest hint that it was time to retire. My
dream of absolute dominion was at an end; so abdicating my throne, like a
prudent potentate, to avoid being deposed, and putting the Stratford
Guide-Book under my arm as a pillow companion, I went to bed, and dreamt
all night of Shakespeare, the jubilee, and David Garrick.

The next morning was one of those quickening mornings which we sometimes
have in early spring, for it was about the middle of March. The chills of
a long winter had suddenly given way; the north wind had spent its last
gasp; and a mild air came stealing from the west, breathing the breath of
life into Nature, and wooing every bud and flower to burst forth into
fragrance and beauty.

[img[images/0359m.jpg]]

I had come to Stratford on a poetical pilgrimage. My first visit was to
the house where Shakespeare was born, and where, according to tradition,
he was brought up to his father's craft of wool-combing. It is a small
mean-looking edifice of wood and plaster, a true nestling-place of genius,
which seems to delight in hatching its offspring in by-corners. The walls
of its squalid chambers are covered with names and inscriptions in every
language by pilgrims of all nations, ranks, and conditions, from the
prince to the peasant, and present a simple but striking instance of the
spontaneous and universal homage of mankind to the great poet of Nature.

The house is shown by a garrulous old lady in a frosty red face, lighted
up by a cold blue, anxious eye, and garnished with artificial locks of
flaxen hair curling from under an exceedingly dirty cap. She was
peculiarly assiduous in exhibiting the relics with which this, like all
other celebrated shrines, abounds. There was the shattered stock of the
very matchlock with which Shakespeare shot the deer on his poaching
exploits. There, too, was his tobacco-box, which proves that he was a
rival smoker of Sir Walter Raleigh: the sword also with which he played
Hamlet; and the identical lantern with which Friar Laurence discovered
Romeo and Juliet at the tomb. There was an ample supply also of
Shakespeare's mulberry tree, which seems to have as extraordinary powers
of self-multiplication as the wood of the true cross, of which there is
enough extant to build a ship of the line.

The most favorite object of curiosity, however, is Shakespeare's chair. It
stands in a chimney-nook of a small gloomy chamber just behind what was
his father's shop. Here he may many a time have sat when a boy, watching
the slowly revolving spit with all the longing of an urchin, or of an
evening listening to the cronies and gossips of Stratford dealing forth
churchyard tales and legendary anecdotes of the troublesome times of
England. In this chair it is the custom of every one that visits the house
to sit: whether this be done with the hope of imbibing any of the
inspiration of the bard I am at a loss to say; I merely mention the fact,
and mine hostess privately assured me that, though built of solid oak,
such was the fervent zeal of devotees the chair had to be new bottomed at
least once in three years. It is worthy of notice also, in the history of
this extraordinary chair, that it partakes something of the volatile
nature of the Santa Casa of Loretto, or the flying chair of the Arabian
enchanter; for, though sold some few years since to a northern princess,
yet, strange to tell, it has found its way back again to the old
chimney-corner.

I am always of easy faith in such matters, and am ever willing to be
deceived where the deceit is pleasant and costs nothing. I am therefore a
ready believer in relics, legends, and local anecdotes of goblins and
great men, and would advise all travellers who travel for their
gratification to be the same. What is it to us whether these stories be
true or false, so long as we can persuade ourselves into the belief of
them and enjoy all the charm of the reality? There is nothing like
resolute good-humored credulity in these matters, and on this occasion I
went even so far as willingly to believe the claims of mine hostess to a
lineal descent from the poet, when, unluckily for my faith, she put into
my hands a play of her own composition, which set all belief in her own
consanguinity at defiance.

From the birthplace of Shakespeare a few paces brought me to his grave. He
lies buried in the chancel of the parish church, a large and venerable
pile, mouldering with age, but richly ornamented. It stands on the banks
of the Avon on an embowered point, and separated by adjoining gardens from
the suburbs of the town. Its situation is quiet and retired; the river
runs murmuring at the foot of the churchyard, and the elms which grow upon
its banks droop their branches into its clear bosom. An avenue of limes,
the boughs of which are curiously interlaced, so as to form in summer an
arched way of foliage, leads up from the gate of the yard to the
church-porch. The graves are overgrown with grass; the gray tombstones,
some of them nearly sunk into the earth, are half covered with moss, which
has likewise tinted the reverend old building. Small birds have built
their nests among the cornices and fissures of the walls, and keep up a
continual flutter and chirping; and rooks are sailing and cawing about its
lofty gray spire.

In the course of my rambles I met with the gray-headed sexton, Edmonds,
and accompanied him home to get the key of the church. He had lived in
Stratford, man and boy, for eighty years, and seemed still to consider
himself a vigorous man, with the trivial exception that he had nearly lost
the use of his legs for a few years past. His dwelling was a cottage
looking out upon the Avon and its bordering meadows, and was a picture of
that neatness, order, and comfort which pervade the humblest dwellings in
this country. A low whitewashed room, with a stone floor carefully
scrubbed, served for parlor, kitchen, and hall. Rows of pewter and earthen
dishes glittered along the dresser. On an old oaken table, well rubbed and
polished, lay the family Bible and prayer-book, and the drawer contained
the family library, composed of about half a score of well-thumbed
volumes. An ancient clock, that important article of cottage furniture,
ticked on the opposite side of the room, with a bright warming-pan hanging
on one side of it, and the old man's horn-handled Sunday cane on the
other. The fireplace, as usual, was wide and deep enough to admit a gossip
knot within its jambs. In one corner sat the old man's granddaughter
sewing, a pretty blue-eyed girl, and in the opposite corner was a
superannuated crony whom he addressed by the name of John Ange, and who, I
found, had been his companion from childhood. They had played together in
infancy; they had worked together in manhood; they were now tottering
about and gossiping away the evening of life; and in a short time they
will probably be buried together in the neighboring churchyard. It is not
often that we see two streams of existence running thus evenly and
tranquilly side by side; it is only in such quiet "bosom scenes" of life
that they are to be met with.

[img[images/0363m.jpg]]

I had hoped to gather some traditionary anecdotes of the bard from these
ancient chroniclers, but they had nothing new to impart. The long interval
during which Shakespeare's writings lay in comparative neglect has spread
its shadow over his history, and it is his good or evil lot that scarcely
anything remains to his biographers but a scanty handful of conjectures.

The sexton and his companion had been employed as carpenters on the
preparations for the celebrated Stratford Jubilee, and they remembered
Garrick, the prime mover of the fete, who superintended the arrangements,
and who, according to the sexton, was "a short punch man, very lively and
bustling." John Ange had assisted also in cutting down Shakespeare's
mulberry tree, of which he had a morsel in his pocket for sale; no doubt a
sovereign quickener of literary conception.

I was grieved to hear these two worthy wights speak very dubiously of the
eloquent dame who shows the Shakespeare house. John Ange shook his head
when I mentioned her valuable and inexhaustible collection of relics,
particularly her remains of the mulberry tree; and the old sexton even
expressed a doubt as to Shakespeare having been born in her house. I soon
discovered that he looked upon her mansion with an evil eye, as a rival to
the poet's tomb, the latter having comparatively but few visitors. Thus it
is that historians differ at the very outset, and mere pebbles make the
stream of truth diverge into different channels even at the fountain-head.

[img[images/0365m.jpg]]

We approached the church through the avenue of limes, and entered by a
Gothic porch, highly ornamented, with carved doors of massive oak. The
interior is spacious, and the architecture and embellishments superior to
those of most country churches. There are several ancient monuments of
nobility and gentry, over some of which hang funeral escutcheons and
banners dropping piecemeal from the walls. The tomb of Shakespeare is in
the chancel. The place is solemn and sepulchral. Tall elms wave before the
pointed windows, and the Avon, which runs at a short distance from the
walls, keeps up a low perpetual murmur. A flat stone marks the spot where
the bard is buried. There are four lines inscribed on it, said to have
been written by himself, and which have in them something extremely awful.
If they are indeed his own, they show that solicitude about the quiet of
the grave which seems natural to fine sensibilities and thoughtful minds:

"""
Good friend, for Jesus' sake, forbeare
To dig the dust inclosed here.
Blessed be he that spares these stones,
And curst be he that moves my bones.
"""

Just over the grave, in a niche of the wall, is a bust of Shakespeare, put
up shortly after his death and considered as a resemblance. The aspect is
pleasant and serene, with a finely-arched forehead; and I thought I could
read in it clear indications of that cheerful, social disposition by which
he was as much characterized among his contemporaries as by the vastness
of his genius. The inscription mentions his age at the time of his
decease, fifty-three years&mdash;an untimely death for the world, for what
fruit might not have been expected from the golden autumn of such a mind,
sheltered as it was from the stormy vicissitudes of life, and flourishing
in the sunshine of popular and royal favor?

The inscription on the tombstone has not been without its effect. It has
prevented the removal of his remains from the bosom of his native place to
Westminster Abbey, which was at one time contemplated. A few years since
also, as some laborers were digging to make an adjoining vault, the earth
caved in, so as to leave a vacant space almost like an arch, through which
one might have reached into his grave. No one, however, presumed to meddle
with his remains so awfully guarded by a malediction; and lest any of the
idle or the curious or any collector of relics should be tempted to commit
depredations, the old sexton kept watch over the place for two days, until
the vault was finished and the aperture closed again. He told me that he
had made bold to look in at the hole, but could see neither coffin nor
bones&mdash;nothing but dust. It was something, I thought, to have seen
the dust of Shakespeare.

Next to this grave are those of his wife, his favorite daughter, Mrs.
Hall, and others of his family. On a tomb close by, also, is a full-length
effigy of his old friend John Combe, of usurious memory, on whom he is
said to have written a ludicrous epitaph. There are other monuments
around, but the mind refuses to dwell on anything that is not connected
with Shakespeare. His idea pervades the place; the whole pile seems but as
his mausoleum. The feelings, no longer checked and thwarted by doubt, here
indulge in perfect confidence: other traces of him may be false or
dubious, but here is palpable evidence and absolute certainty. As I trod
the sounding pavement there was something intense and thrilling in the
idea that in very truth the remains of Shakespeare were mouldering beneath
my feet. It was a long time before I could prevail upon myself to leave
the place; and as I passed through the churchyard I plucked a branch from
one of the yew trees, the only relic that I have brought from Stratford.

I had now visited the usual objects of a pilgrim's devotion, but I had a
desire to see the old family seat of the Lucys at Charlecot, and to ramble
through the park where Shakespeare, in company with some of the roisterers
of Stratford, committed his youthful offence of deer-stealing. In this
harebrained exploit we are told that he was taken prisoner and carried to
the keeper's lodge, where he remained all night in doleful captivity. When
brought into the presence of Sir Thomas Lucy his treatment must have been
galling and humiliating; for it so wrought upon his spirit as to produce a
rough pasquinade which was affixed to the park gate at Charlecot.*

This flagitious attack upon the dignity of the knight so incensed him that
he applied to a lawyer at Warwick to put the severity of the laws in force
against the rhyming deer-stalker. Shakespeare did not wait to brave the
united puissance of a knight of the shire and a country attorney. He
forthwith abandoned the pleasant banks of the Avon and his paternal trade;
wandered away to London; became a hanger-on to the theatres; then an
actor; and finally wrote for the stage; and thus, through the persecution
of Sir Thomas Lucy, Stratford lost an indifferent wool-comber and the
world gained an immortal poet. He retained, however, for a long time, a
sense of the harsh treatment of the lord of Charlecot, and revenged
himself in his writings, but in the sportive way of a good-natured mind.
Sir Thomas is said to be the original of Justice Shallow, and the satire
is slyly fixed upon him by the justice's armorial bearings, which, like
those of the knight, had white luces+ in the quarterings.

"""
* The following is the only stanza extant of this lampoon:

A parliament member, a justice of peace,
At home a poor scarecrow, at London an asse,
If lowsie is Lucy, as some volke miscalle it,
Then Lucy is lowsie, whatever befall it.
He thinks himself great;
Yet an asse in his state,
We allow by his ears but with asses to mate,
If Lucy is lowsie, as some volke miscalle it,
Then sing lowsie Lucy whatever befall it.

+ The luce is a pike or jack, and abounds in the Avon about
Charlecot.
"""

Various attempts have been made by his biographers to soften and explain
away this, early transgression of the poet; but I look upon it as one of
those thoughtless exploits natural to his situation and turn of mind.
Shakespeare, when young, had doubtless all the wildness and irregularity
of an ardent, undisciplined, and undirected genius. The poetic temperament
has naturally something in it of the vagabond. When left to itself it runs
loosely and wildly, and delights in everything eccentric and licentious.
It is often a turn up of a die, in the gambling freaks of fate, whether a
natural genius shall turn out a great rogue or a great poet; and had not
Shakespeare's mind fortunately taken a literary bias, he might have as
daringly transcended all civil as he has all dramatic laws.

I have little doubt that, in early life, when running like an unbroken
colt about the neighborbood of Stratford, he was to be found in the
company of all kinds of odd anomalous characters, that he associated with
all the madcaps of the place, and was one of those unlucky urchins at
mention of whom old men shake their heads and predict that they will one
day come to the gallows. To him the poaching in Sir Thomas Lucy's park was
doubtless like a foray to a Scottish knight, and struck his eager, and as
yet untamed, imagination as something delightfully adventurous.*

"""
* A proof of Shakespeare's random habits and associates in
his youthful days may be found in a traditionary anecdote,
picked up at Stratford by the elder Ireland, and mentioned
in his "Picturesque Views on the Avon."
"""

About seven miles from Stratford lies the thirsty little market-town of
Bedford, famous for its ale. Two societies of the village yeomanry used to
meet, under the appellation of the Bedford topers, and to challenge the
lovers of good ale of the neighboring villages to a contest of drinking.
Among others, the people of Stratford were called out to prove the
strength of their heads; and in the number of the champions was
Shakespeare, who, in spite of the proverb that "they who drink beer will
think beer," was as true to his ale as Falstaff to his sack. The chivalry
of Stratford was staggered at the first onset, and sounded a retreat while
they had yet the legs to carry them off the field. They had scarcely
marched a mile when, their legs failing them, they were forced to lie down
under a crab tree, where they passed the night. It was still standing, and
goes by the name of Shakespeare's tree.

In the morning his companions awaked the bard, and proposed returning to
Bedford, but he declined, saying he had enough, having drank with

"""
Piping Pebworth, Dancing Marston,
Haunted Hilbro', Hungry Grafton,
Dudging Exhall, Papist Wicksford,
Beggarly Broom, and Drunken Bedford.
"""

"The villages here alluded to," says Ireland, "still bear the epithets
thus given them: the people of Pebworth are still famed for their skill on
the pipe and tabor; Hilborough is now called Haunted Hilborough; and
Grafton is famous for the poverty of its soil."

The old mansion of Charlecot and its surrounding park still remain in the
possession of the Lucy family, and are peculiarly interesting front being
connected with this whimsical but eventful circumstance in the scanty
history of the bard. As the house stood at little more than three miles'
distance from Stratford, I resolved to pay it a pedestrian visit, that I
might stroll leisurely through some of those scenes from which Shakespeare
must have derived his earliest ideas of rural imagery.

The country was yet naked and leafless, but English scenery is always
verdant, and the sudden change in the temperature of the weather was
surprising in its quickening effects upon the landscape. It was inspiring
and animating to witness this first awakening of spring; to feel its warm
breath stealing over the senses; to see the moist mellow earth beginning
to put forth the green sprout and the tender blade, and the trees and
shrubs, in their reviving tints and bursting buds, giving the promise of
returning foliage and flower. The cold snow-drop, that little borderer on
the skirts of winter, was to be seen with its chaste white blossoms in the
small gardens before the cottages. The bleating of the new-dropt lambs was
faintly heard from the fields. The sparrow twittered about the thatched
eaves and budding hedges; the robin threw a livelier note into his late
querulous wintry strain; and the lark, springing up from the reeking bosom
of the meadow, towered away into the bright fleecy cloud, pouring forth
torrents of melody. As I watched the little songster mounting up higher
and higher, until his body was a mere speck on the white bosom of the
cloud, while the ear was still filled with his music, it called to mind
Shakespeare's exquisite little song in Cymbeline:

[img[images/0371m.jpg]]

"""
Hark! hark! the lark at heav'n's gate sings,
And Phoebus 'gins arise,
His steeds to water at those springs,
On chaliced flowers that lies.

And winking mary-buds begin
To ope their golden eyes;
With every thing that pretty bin,
My lady sweet arise!
"""

Indeed, the whole country about here is poetic ground: everything is
associated with the idea of Shakespeare. Every old cottage that I saw I
fancied into some resort of his boyhood, where he had acquired his
intimate knowledge of rustic life and manners, and heard those legendary
tales and wild superstitions which he has woven like witchcraft into his
dramas. For in his time, we are told, it was a popular amusement in winter
evenings "to sit round the fire, and tell merry tales of errant knights,
queens, lovers, lords, ladies, giants, dwarfs, thieves, cheaters, witches,
fairies, goblins, and friars."*

[img[images/0372m.jpg]]

"""
* Scot, in his "Discoverie of Witchcraft," enumerates a host of
these fireside fancies: "And they have so fraid us with host
bull-beggars, spirits, witches, urchins, elves, hags,
fairies, satyrs, pans, faunes, syrens, kit with the can
sticke, tritons, centaurs, dwarfes, giantes, imps, calcars,
conjurors, nymphes, changelings, incubus, Robin-goodfellow,
the spoorne, the mare, the man in the oke, the hell-waine,
the fier drake, the puckle, Tom Thombe, hobgoblins, Tom
Tumbler, boneless, and such other bugs, that we were afraid
of our own shadowes."
"""

My route for a part of the way lay in sight of the Avon, which made a
variety of the most fancy doublings and windings through a wide and
fertile valley&mdash;sometimes glittering from among willows which fringed
its borders; sometimes disappearing among groves or beneath green banks;
and sometimes rambling out into full view and making an azure sweep round
a slope of meadow-land. This beautiful bosom of country is called the Vale
of the Red Horse. A distant line of undulating blue hills seems to be its
boundary, whilst all the soft intervening landscape lies in a manner
enchained in the silver links of the Avon.

After pursuing the road for about three miles, I turned off into a
footpath, which led along the borders of fields and under hedgerows to a
private gate of the park; there was a stile, however, for the benefit of
the pedestrian, there being a public right of way through the grounds. I
delight in these hospitable estates, in which every one has a kind of
property&mdash;at least as far as the footpath is concerned. It in some
measure reconciles a poor man to his lot, and, what is more, to the better
lot of his neighbor, thus to have parks and pleasure-grounds thrown open
for his recreation. He breathes the pure air as freely and lolls as
luxuriously under the shade as the lord of the soil; and if he has not the
privilege of calling all that he sees his own, he has not, at the same
time, the trouble of paying for it and keeping it in order.

I now found myself among noble avenues of oaks and elms, whose vast size
bespoke the growth of centuries. The wind sounded solemnly among their
branches, and the rooks cawed from their hereditary nests in the
tree-tops. The eye ranged through a long lessening vista, with nothing to
interrupt the view but a distant statue and a vagrant deer stalking like a
shadow across the opening.

There is something about these stately old avenues that has the effect of
Gothic architecture, not merely from the pretended similarity of form, but
from their bearing the evidence of long duration, and of having had their
origin in a period of time with which we associate ideas of romantic
grandeur. They betoken also the long-settled dignity and
proudly-concentrated independence of an ancient family; and I have heard a
worthy but aristocratic old friend observe, when speaking of the sumptuous
palaces of modern gentry, that "money could do much with stone and mortar,
but thank Heaven! there was no such thing as suddenly building up an
avenue of oaks."

It was from wandering in early life among this rich scenery, and about the
romantic solitudes of the adjoining park of Fullbroke, which then formed a
part of the Lucy estate, that some of Shakepeare's commentators have
supposed he derived his noble forest meditations of Jaques and the
enchanting woodland pictures in "As You Like It." It is in lonely
wanderings through such scenes that the mind drinks deep but quiet
draughts of inspiration, and becomes intensely sensible of the beauty and
majesty of Nature. The imagination kindles into reverie and rapture, vague
but exquisite images and ideas keep breaking upon it, and we revel in a
mute and almost incommunicable luxury of thought. It was in some such
mood, and perhaps under one of those very trees before me, which threw
their broad shades over the grassy banks and quivering waters of the Avon,
that the poet's fancy may have sallied forth into that little song which
breathes the very soul of a rural voluptuary

"""
Unto the greenwood tree,
Who loves to lie with me
And tune his merry throat
Unto the sweet bird's note,
Come hither, come hither, come hither.
Here shall he see
No enemy,
But winter and rough weather.
"""

[img[images/0375m.jpg]]

I had now come in sight of the house. It is a large building of brick with
stone quoins, and is in the Gothic style of Queen Elizabeth's day, having
been built in the first year of her reign. The exterior remains very
nearly in its original state, and may be considered a fair specimen of the
residence of a wealthy country gentleman of those days. A great gateway
opens from the park into a kind of courtyard in front of the house,
ornamented with a grassplot, shrubs, and flower-beds. The gateway is in
imitation of the ancient barbacan, being a kind of outpost and flanked by
towers, though evidently for mere ornament, instead of defence. The front
of the house is completely in the old style with stone-shafted casements,
a great bow-window of heavy stone-work, and a portal with armorial
bearings over it carved in stone. At each corner of the building is an
octagon tower surmounted by a gilt ball and weather-cock.

The Avon, which winds through the park, makes a bend just at the foot of a
gently-sloping bank which sweeps down from the rear of the house. Large
herds of deer were feeding or reposing upon its borders, and swans were
sailing majestically upon its bosom. As I contemplated the venerable old
mansion I called to mind Falstaff's encomium on Justice Shallow's abode,
and the affected indifference and real vanity of the latter:

"Falstaff. You have a goodly dwelling and a rich. Shallow. Barren, barren,
barren; beggars all, beggars all, Sir John:&mdash;marry, good air."

Whatever may have been the joviality of the old mansion in the days of
Shakespeare, it had now an air of stillness and solitude. The great iron
gateway that opened into the courtyard was locked, there was no show of
servants bustling about the place; the deer gazed quietly at me as I
passed, being no longer harried by the moss-troopers of Stratford. The
only sign of domestic life that I met with was a white cat stealing with
wary look and stealthy pace towards the stables, as if on some nefarious
expedition. I must not omit to mention the carcass of a scoundrel crow
which I saw suspended against the barn-wall, as it shows that the Lucys
still inherit that lordly abhorrence of poachers and maintain that
rigorous exercise of territorial power which was so strenuously manifested
in the case of the bard.

After prowling about for some time, I at length found my way to a lateral
portal, which was the every-day entrance to the mansion. I was courteously
received by a worthy old housekeeper, who, with the civility and
communicativeness of her order, showed me the interior of the house. The
greater part has undergone alterations and been adapted to modern tastes
and modes of living: there is a fine old oaken staircase, and the great
hall, that noble feature in an ancient manor-house, still retains much of
the appearance it must have had in the days of Shakespeare. The ceiling is
arched and lofty, and at one end is a gallery in which stands an organ.
The weapons and trophies of the chase, which formerly adorned the hall of
a country gentleman, have made way for family portraits. There is a wide,
hospitable fireplace, calculated for an ample old-fashioned wood fire,
formerly the rallying-place of winter festivity. On the opposite side of
the hall is the huge Gothic bow-window, with stone shafts, which looks out
upon the courtyard. Here are emblazoned in stained glass the armorial
bearings of the Lucy family for many generations, some being dated in
1558. I was delighted to observe in the quarterings the three white luces
by which the character of Sir Thomas was first identified with that of
Justice Shallow. They are mentioned in the first scene of the "Merry Wives
of Windsor," where the justice, is in a rage with Falstaff for having
"beaten his men, killed his deer, and broken into his lodge." The poet had
no doubt the offences of himself and his comrades in mind at the time, and
we may suppose the family pride and vindictive threats of the puissant
Shallow to be a caricature of the pompous indignation of Sir Thomas.

[img[images/0377m.jpg]]

"Shallow. Sir Hugh, persuade me not: I will make a Star Chamber matter of
it; if he were twenty John Falstaffs, he shall not abuse Sir Robert
Shallow, Esq.

Slender. In the county of Gloster, justice of peace and coram.

Shallow. Ay, cousin Slender, and custalorum.

Slender. Ay, and ratolorum too, and a gentleman born, master parson; who
writes himself Armigero in any bill, warrant, quittance, or obligation,
Armigero.

Shallow. Ay, that I do; and have done any time these three hundred years.

Slender. All his successors gone before him have done't, and all his
ancestors that come after him may; they may give the dozen white luces in
their coat....

Shallow. The council shall hear it; it is a riot.

Evans. It is not meet the council hear of a riot; there is no fear of Got
in a riot; the council, hear you, shall desire to hear the fear of Got,
and not to hear a riot; take your vizaments in that.

Shallow. Ha! o' my life, if I were young again, the sword should end it!"

Near the window thus emblazoned hung a portrait, by Sir Peter Lely, of one
of the Lucy family, a great beauty of the time of Charles the Second: the
old housekeeper shook her head as she pointed to the picture, and informed
me that this lady had been sadly addicted to cards, and had gambled away a
great portion of the family estate, among which was that part of the park
where Shakespeare and his comrades had killed the deer. The lands thus
lost had not been entirely regained by the family even at the present day.
It is but justice to this recreant dame to confess that she had a
surpassingly fine hand and arm.

The picture which most attracted my attention was a great painting over
the fireplace, containing likenesses of Sir Thomas Lucy and his family who
inhabited the hall in the latter part of Shakespeare's lifetime. I at
first thought that it was the vindictive knight himself, but the
housekeeper assured me that it was his son; the only likeness extant of
the former being an effigy upon his tomb in the church of the neighboring
hamlet of Charlecot.*

[img[images/0379m.jpg]]

"""
* This effigy is in white marble, and represents the knight
in complete armor. Near him lies the effigy of his wife, and
on her tomb is the following inscription; which, if really
composed by her husband, places him quite above the
intellectual level of Master Shallow:

Here lyeth the Lady Joyce Lucy wife of Sir Thomas Lucy of
Charlecot in ye county of Warwick, Knight, Daughter and heir
of Thomas Acton of Sutton in ye county of Worcester Esquire
who departed out of this wretched world to her heavenly
kingdom ye 10 day of February in ye yeare of our Lord God
1595 and of her age 60 and three. All the time of her lyfe a
true and faythful servant of her good God, never detected of
any cryme or vice. In religion most sounde, in love to her
husband most faythful and true. In friendship most constant;
to what in trust was committed unto her most secret. In
wisdom excelling. In governing of her house, bringing up of
youth in ye fear of God that did converse with her moste
rare and singular. A great maintayner of hospitality.
Greatly esteemed of her betters; misliked of none unless of
the envyous. When all is spoken that can be saide a woman so
garnished with virtue as not to be bettered and hardly to be
equalled by any. As shee lived most virtuotisly so shee died
most Godly. Set downe by him yt best did knowe what hath byn
written to be true.

Thomas Lucye.
"""

The picture gives a lively idea of the costume and manners of the time.
Sir Thomas is dressed in ruff and doublet, white shoes with roses in them,
and has a peaked yellow, or, as Master Slender would say, "a cane-colored
beard." His lady is seated on the opposite side of the picture in wide
ruff and long stomacher, and the children have a most venerable stiffness
and formality of dress. Hounds and spaniels are mingled in the family
group; a hawk is seated on his perch in the foreground, and one of the
children holds a bow, all intimating the knight's skill in hunting,
hawking, and archery, so indispensable to an accomplished gentleman in
those days.*

"""
* Bishop Earle, speaking of the country gentleman of his
time, observes, "His housekeeping is seen much in the
different families of dogs and serving-men attendant on
their kennels; and the deepness of their throats is the
depth of his discourse. A hawk he esteems the true burden of
nobility, and is exceedingly ambitious to seem delighted
with the sport, and have his fist gloved with his jesses."
And Gilpin, in his description of a Mr. Hastings, remarks,
"He kept all sorts of hounds that run buck, fox, hare,
otter, and badger; and had hawks of all kinds both long and
short winged. His great hall was commonly strewed with
marrow-bones, and full of hawk perches, hounds, spaniels,
and terriers. On a broad hearth, paved with brick, lay some
of the choicest terriers, hounds, and spaniels."
"""

I regretted to find that the ancient furniture of the hall had
disappeared; for I had hoped to meet with the stately elbow-chair of
carved oak in which the country squire of former days was wont to sway the
sceptre of empire over his rural domains, and in which it might be
presumed the redoubled Sir Thomas sat enthroned in awful state when the
recreant Shakespeare was brought before him. As I like to deck out
pictures for my own entertainment, I pleased myself with the idea that
this very hall had been the scene of the unlucky bard's examination on the
morning after his captivity in the lodge. I fancied to myself the rural
potentate surrounded by his body-guard of butler, pages, and blue-coated
serving-men with their badges, while the luckless culprit was brought in,
forlorn and chopfallen, in the custody of gamekeepers, huntsmen, and
whippers-in, and followed by a rabble rout of country clowns. I fancied
bright faces of curious housemaids peeping from the half-opened doors,
while from the gallery the fair daughters of the knight leaned gracefully
forward, eyeing the youthful prisoner with that pity "that dwells in
womanhood." Who would have thought that this poor varlet, thus trembling
before the brief authority of a country squire, and the sport of rustic
boors, was soon to become the delight of princes, the theme of all tongues
and ages, the dictator to the human mind and was to confer immortality on
his oppressor by a caricature and a lampoon?

[img[images/0381m.jpg]]

I was now invited by the butler to walk into the garden, and I felt
inclined to visit the orchard and harbor where the justice treated Sir
John Falstaff and Cousin Silence "to a last year's pippin of his own
grafting, with a dish of caraways;" but I had already spent so much of the
day in my ramblings that I was obliged to give up any further
investigations. When about to take my leave I was gratified by the civil
entreaties of the housekeeper and butler that I would take some
refreshment&mdash;an instance of good old hospitality which, I grieve to
say, we castle-hunters seldom meet with in modern days. I make no doubt it
is a virtue which the present representative of the Lucys inherits from
his ancestors; for Shakespeare, even in his caricature, makes Justice
Shallow importunate in this respect, as witness his pressing instances to
Falstaff:

"By cock and pye, Sir, you shall not away to-night..... I will not excuse
you; you shall not be excused; excuses shall not be admitted; there is no
excuse shall serve; you shall not be excused.... Some pigeons, Davy, a
couple of short-legged hens; a joint of mutton; and any pretty little tiny
kickshaws, tell 'William Cook.'"

I now bade a reluctant farewell to the old hall. My mind had become so
completely possessed by the imaginary scenes and characters connected with
it that I seemed to be actually living among them. Everything brought them
as it were before my eyes, and as the door of the dining-room opened I
almost expected to hear the feeble voice of Master Silence quavering forth
his favorite ditty:

"""
"'Tis merry in hall, when beards wag all,
And welcome merry Shrove-tide!"
"""

On returning to my inn I could not but reflect on the singular gift of the
poet, to be able thus to spread the magic of his mind over the very face
of Nature, to give to things and places a charm and character not their
own, and to turn this "working-day world" into a perfect fairy-land. He is
indeed the true enchanter, whose spell operates, not upon the senses, but
upon the imagination and the heart. Under the wizard influence of
Shakespeare I had been walking all day in a complete delusion. I had
surveyed the landscape through the prism of poetry, which tinged every
object with the hues of the rainbow. I had been surrounded with fancied
beings, with mere airy nothings conjured up by poetic power, yet which, to
me, had all the charm of reality. I had heard Jaques soliloquize beneath
his oak; had beheld the fair Rosalind and her companion adventuring
through the woodlands; and, above all, had been once more present in
spirit with fat Jack Falstaff and his contemporaries, from the august
Justice Shallow down to the gentle Master Slender and the sweet Anne Page.
Ten thousand honors and blessings on the bard who has thus gilded the dull
realities of life with innocent illusions, who has spread exquisite and
unbought pleasures in my chequered path, and beguiled my spirit in many a
lonely hour with all the cordial and cheerful sympathies of social life!

As I crossed the bridge over the Avon on my return, I paused to
contemplate the distant church in which the poet lies buried, and could
not but exult in the malediction which has kept his ashes undisturbed in
its quiet and hallowed vaults. What honor could his name have derived from
being mingled in dusty companionship with the epitaphs and escutcheons and
venal eulogiums of a titled multitude? What would a crowded corner in
Westminster Abbey have been, compared with this reverend pile, which seems
to stand in beautiful loneliness as his sole mausoleum! The solitude about
the grave may be but the offspring of an overwrought sensibility; but
human nature is made up of foibles and prejudices, and its best and
tenderest affections are mingled with these factitious feelings. He who
has sought renown about the world, and has reaped a full harvest of
worldly favor, will find, after all, that there is no love, no admiration,
no applause, so sweet to the soul as that which springs up in his native
place. It is there that he seeks to be gathered in peace and honor among
his kindred and his early friends. And when the weary heart and failing
head begin to warn him that the evening of life is drawing on, he turns as
fondly as does the infant to the mother's arms to sink to sleep in the
bosom of the scene of his childhood.

How would it have cheered the spirit of the youthful bard when, wandering
forth in disgrace upon a doubtful world, he cast back a heavy look upon
his paternal home, could he have foreseen that before many years he should
return to it covered with renown; that his name should become the boast
and glory of his native place; that his ashes should be religiously
guarded as its most precious treasure; and that its lessening spire, on
which his eyes were fixed in tearful contemplation, should one day become
the beacon towering amidst the gentle landscape to guide the literary
pilgrim of every nation to his tomb!
[[THE SKETCH-BOOK OF GEOFFREY CRAYON, GENT.]]

[[PREFACE TO THE REVISED EDITION.]]

[[THE SKETCH BOOK.]]

[[THE AUTHOR'S ACCOUNT OF HIMSELF]]

[[THE VOYAGE.]]

[[ROSCOE.]]

[[THE WIFE.]]

[[RIP VAN WINKLE.]]

[[ENGLISH WRITERS ON AMERICA.]]

[[RURAL LIFE IN ENGLAND.]]

[[THE BROKEN HEART.]]

[[THE ART OF BOOK-MAKING.]]

[[A ROYAL POET.]]

[[THE COUNTRY CHURCH.]]

[[THE WIDOW AND HER SON.]]

[[A SUNDAY IN LONDON.*]]

[[THE BOAR'S HEAD TAVERN, EASTCHEAP.]]

[[THE MUTABILITY OF LITERATURE.]]

[[RURAL FUNERALS.]]

[[THE INN KITCHEN.]]

[[THE SPECTRE BRIDEGROOM.]]

[[WESTMINSTER ABBEY.]]

[[CHRISTMAS.]]

[[THE STAGE-COACH.]]

[[CHRISTMAS EVE.]]

[[CHRISTMAS DAY.]]

[[THE CHRISTMAS DINNER.]]

[[LONDON ANTIQUES.]]

[[LITTLE BRITAIN.]]

[[STRATFORD-ON-AVON.]]

[[TRAITS OF INDIAN CHARACTER.]]

[[PHILIP OF POKANOKET.]]

[[JOHN BULL.]]

[[THE PRIDE OF THE VILLAGE.]]

[[THE ANGLER.]]

[[THE LEGEND OF SLEEPY HOLLOW.]]

[[L'ENVOY.*]]
"""
This day Dame Nature seem'd in love,
The lusty sap began to move,
Fresh juice did stir th' embracing vines,
And birds had drawn their valentines.
The jealous trout that low did lie,
Rose at a well-dissembled flie.
There stood my friend, with patient skill,
Attending of his trembling quill.
SIR H. WOTTON.
"""

[img[images/9449m.jpg]]

IT is said that many an unlucky urchin is induced to run away from his
family and betake himself to a seafaring life from reading the history of
Robinson Crusoe; and I suspect that, in like manner, many of those worthy
gentlemen who are given to haunt the sides of pastoral streams with
angle-rods in hand may trace the origin of their passion to the seductive
pages of honest Izaak Walton. I recollect studying his Complete Angler
several years since in company with a knot of friends in America, and
moreover that we were all completely bitten with the angling mania. It was
early in the year, but as soon as the weather was auspicious, and that the
spring began to melt into the verge of summer, we took rod in hand and
sallied into the country, as stark mad as was ever Don Quixote from
reading books of chivalry.

One of our party had equalled the Don in the fulness of his equipments,
being attired cap-a-pie for the enterprise. He wore a broad-skirted
fustian coat, perplexed with half a hundred pockets; a pair of stout shoes
and leathern gaiters; a basket slung on one side for fish; a patent rod, a
landing net, and a score of other inconveniences only to be found in the
true angler's armory. Thus harnessed for the field, he was as great a
matter of stare and wonderment among the country folk, who had never seen
a regular angler, as was the steel-clad hero of La Mancha among the
goatherds of the Sierra Morena.

Our first essay was along a mountain brook among the Highlands of the
Hudson&mdash;a most unfortunate place for the execution of those piscatory
tactics which had been invented along the velvet margins of quiet English
rivulets. It was one of those wild streams that lavish, among our romantic
solitudes, unheeded beauties enough to fill the sketch-book of a hunter of
the picturesque. Sometimes it would leap down rocky shelves, making small
cascades, over which the trees threw their broad balancing sprays and long
nameless weeds hung in fringes from the impending banks, dripping with
diamond drops. Sometimes it would brawl and fret along a ravine in the
matted shade of a forest, filling it with murmurs, and after this
termagant career would steal forth into open day with the most placid,
demure face imaginable, as I have seen some pestilent shrew of a
housewife, after filling her home with uproar and ill-humor, come dimpling
out of doors, swimming and curtseying and smiling upon all the world.

How smoothly would this vagrant brook glide at such times through some
bosom of green meadowland among the mountains, where the quiet was only
interrupted by the occasional tinkling of a bell from the lazy cattle
among the clover or the sound of a woodcutter's axe from the neighboring
forest!

[img[images/0451m.jpg]]

For my part, I was always a bungler at all kinds of sport that required
either patience or adroitness, and had not angled above half an hour
before I had completely "satisfied the sentiment," and convinced myself of
the truth of Izaak Walton's opinion, that angling is something like poetry&mdash;a
man must be born to it. I hooked myself instead of the fish, tangled my
line in every tree, lost my bait, broke my rod, until I gave up the
attempt in despair, and passed the day under the trees reading old Izaak,
satisfied that it was his fascinating vein of honest simplicity and rural
feeling that had bewitched me, and not the passion for angling. My
companions, however, were more persevering in their delusion. I have them
at this moment before eyes, stealing along the border of the brook where
it lay open to the day or was merely fringed by shrubs and bushes. I see
the bittern rising with hollow scream as they break in upon his
rarely-invaded haunt; the kingfisher watching them suspiciously from his
dry tree that overhangs the deep black millpond in the gorge of the hills;
the tortoise letting himself slip sideways from off the stone or log on
which he is sunning himself; and the panic-struck frog plumping in
headlong as they approach, and spreading an alarm throughout the watery
world around.

I recollect also that, after toiling and watching and creeping about for
the greater part of a day, with scarcely any success in spite of all our
admirable apparatus, a lubberly country urchin came down from the hills
with a rod made from a branch of a tree, a few yards of twine, and, as
Heaven shall help me! I believe a crooked pin for a hook, baited with a
vile earthworm, and in half an hour caught more fish than we had nibbles
throughout the day!

But, above all, I recollect the "good, honest, wholesome, hungry" repast
which we made under a beech tree just by a spring of pure sweet water that
stole out of the side of a hill, and how, when it was over, one of the
party read old Izaak Walton's scene with the milkmaid, while I lay on the
grass and built castles in a bright pile of clouds until I fell asleep.
All this may appear like mere egotism, yet I cannot refrain from uttering
these recollections, which are passing like a strain of music over my mind
and have been called up by an agreeable scene which I witnessed not long
since.

[img[images/0453m.jpg]]

In the morning's stroll along the banks of the Alun, a beautiful little
stream which flows down from the Welsh hills and throws itself into the
Dee, my attention was attracted to a group seated on the margin. On
approaching I found it to consist of a veteran angler and two rustic
disciples. The former was an old fellow with a wooden leg, with clothes
very much but very carefully patched, betokening poverty honestly come by
and decently maintained. His face bore the marks of former storms, but
present fair weather, its furrows had been worn into an habitual smile,
his iron-gray locks hung about his ears, and he had altogether the
good-humored air of a constitutional philosopher who was disposed to take
the world as it went. One of his companions was a ragged wight with the
skulking look of an arrant poacher, and I'll warrant could find his way to
any gentleman's fish-pond in the neighborhood in the darkest night. The
other was a tall, awkward country lad, with a lounging gait, and
apparently somewhat of a rustic beau. The old man was busy in examining
the maw of a trout which he had just killed, to discover by its contents
what insects were seasonable for bait, and was lecturing on the subject to
his companions, who appeared to listen with infinite deference. I have a
kind feeling towards all "brothers of the angle" ever since I read Izaak
Walton. They are men, he affirms, of a "mild, sweet, and peaceable
spirit;" and my esteem for them has been increased since I met with an old
Tretyse of fishing with the Angle, in which are set forth many of the
maxims of their inoffensive fraternity. "Take good hede," sayeth this
honest little tretyse, "that in going about your disportes ye open no
man's gates but that ye shet them again. Also ye shall not use this
forsayd crafti disport for no covetousness to the encreasing and sparing
of your money only, but principally for your solace, and to cause the
helth of your body and specyally of your soule."*

I thought that I could perceive in the veteran angler before me an
exemplification of what I had read; and there was a cheerful contentedness
in his looks that quite drew me towards him. I could not but remark the
gallant manner in which he stumped from one part of the brook to another,
waving his rod in the air to keep the line from dragging on the ground or
catching among the bushes, and the adroitness with which he would throw
his fly to any particular place, sometimes skimming it lightly along a
little rapid, sometimes casting it into one of those dark holes made by a
twisted root or overhanging bank in which the large trout are apt to lurk.
In the meanwhile he was giving instructions to his two disciples, showing
them the manner in which they should handle their rods, fix their flies,
and play them along the surface of the stream. The scene brought to my
mind the instructions of the sage Piscator to his scholar. The country
around was of that pastoral kind which Walton is fond of describing. It
was a part of the great plain of Cheshire, close by the beautiful vale of
Gessford, and just where the inferior Welsh hills begin to swell up from
among fresh-smelling meadows. The day too, like that recorded in his work,
was mild and sunshiny, with now and then a soft-dropping shower that sowed
the whole earth with diamonds.

"""
* From this same treatise it would appear that angling is a
more industrious and devout employment than it is generally
considered: "For when ye purpose to go on your disportes in
fishynge ye will not desyre greatlye many persons with you,
which might let you of your game. And that ye may serve God
devoutly in saying effectually your customable prayers. And
thus doying, ye shall eschew and also avoyde many vices, as
ydelness, which is principall cause to induce man to many
other vices, as it is right well known."
"""

I soon fell into conversation with the old angler, and was so much
entertained that, under pretext of receiving instructions in his art, I
kept company with him almost the whole day, wandering along the banks of
the stream and listening to his talk. He was very communicative, having
all the easy garrulity of cheerful old age, and I fancy was a little
flattered by having an opportunity of displaying his piscatory lore, for
who does not like now and then to play the sage?

He had been much of a rambler in his day, and had passed some years of his
youth in America, particularly in Savannah, where he had entered into
trade and had been ruined by the indiscretion of a partner. He had
afterwards experienced many ups and downs in life until he got into the
navy, where his leg was carried away by a cannon-ball at the battle of
Camperdown. This was the only stroke of real good-fortune he had ever
experienced, for it got him a pension, which, together with some small
paternal property, brought him in a revenue of nearly forty pounds. On
this he retired to his native village, where he lived quietly and
independently, and devoted the remainder of his life to the "noble art of
angling."

I found that he had read Izaak Walton attentively, and he seemed to have
imbibed all his simple frankness and prevalent good-humor. Though he had
been sorely buffeted about the world, he was satisfied that the world, in
itself, was good and beautiful. Though he had been as roughly used in
different countries as a poor sheep that is fleeced by every hedge and
thicket, yet he spoke of every nation with candor and kindness, appearing
to look only on the good side of things; and, above all, he was almost the
only man I had ever met with who had been an unfortunate adventurer in
America and had honesty and magnanimity enough to take the fault to his
own door, and not to curse the country. The lad that was receiving his
instructions, I learnt, was the son and heir-apparent of a fat old widow
who kept the village inn, and of course a youth of some expectation, and
much courted by the idle gentleman-like personages of the place. In taking
him under his care, therefore, the old man had probably an eye to a
privileged corner in the tap-room and an occasional cup of cheerful ale
free of expense.

[img[images/0457m.jpg]]

There is certainly something in angling&mdash;if we could forget, which
anglers are apt to do, the cruelties and tortures inflicted on worms and
insects&mdash;that tends to produce a gentleness of spirit and a pure
serenity of mind. As the English are methodical even in their recreations,
and are the most scientific of sportsmen, it has been reduced among them
to perfect rule and system. Indeed, it is an amusement peculiarly adapted
to the mild and highly-cultivated scenery of England, where every
roughness has been softened away from the landscape. It is delightful to
saunter along those limpid streams which wander, like veins of silver,
through the bosom of this beautiful country, leading one through a
diversity of small home scenery&mdash;sometimes winding through ornamented
grounds; sometimes brimming along through rich pasturage, where the fresh
green is mingled with sweet-smelling flowers; sometimes venturing in sight
of villages and hamlets, and then running capriciously away into shady
retirements. The sweetness and serenity of Nature and the quiet
watchfulness of the sport gradually bring on pleasant fits of musing,
which are now and then agreeably interrupted by the song of a bird, the
distant whistle of the peasant, or perhaps the vagary of some fish leaping
out of the still water and skimming transiently about its glassy surface.
"When I would beget content," says Izaak Walton, "and increase confidence
in the power and wisdom and providence of Almighty God, I will walk the
meadows by some gliding stream, and there contemplate the lilies that take
no care, and those very many other little living creatures that are not
only created, but fed (man knows not how) by the goodness of the God of
Nature, and therefore trust in Him."

I cannot forbear to give another quotation from one of those ancient
champions of angling which breathes the same innocent and happy spirit:

[img[images/0459m.jpg]]

"""
Let me live harmlessly, and near the brink
Of Trent or Avon have a dwelling-place:
Where I may see my quill, or cork, down sink
With eager bite of Pike, or Bleak, or Dace;
And on the world and my Creator think:
Whilst some men strive ill-gotten goods t' embrace:
And others spend their time in base excess
Of wine, or worse, in war or wantonness.

Let them that will, these pastimes still pursue,
And on such pleasing fancies feed their fill;
So I the fields and meadows green may view,
And daily by fresh rivers walk at will,
Among the daisies and the violets blue,
Red hyacinth and yellow daffodil.*
"""

On parting with the old angler I inquired after his place of abode, and,
happening to be in the neighborhood of the village a few evenings
afterwards, I had the curiosity to seek him out. I found him living in a
small cottage containing only one room, but a perfect curiosity in its
method and arrangement. It was on the skirts of the village, on a green
bank a little back from the road, with a small garden in front stocked
with kitchen herbs and adorned with a few flowers. The whole front of the
cottage was overrun with a honeysuckle. On the top was a ship for a
weathercock. The interior was fitted up in a truly nautical style, his
ideas of comfort and convenience having been acquired on the berth-deck of
a man-of-war. A hammock was slung from the ceiling which in the daytime
was lashed up so as to take but little room. From the centre of the
chamber hung a model of a ship, of his own workmanship. Two or three
chairs, a table, and a large sea-chest formed the principal movables.
About the wall were stuck up naval ballads, such as "Admiral Hosier's
Ghost," "All in the Downs," and "Tom Bowling," intermingled with pictures
of sea-fights, among which the battle of Camperdown held a distinguished
place. The mantelpiece was decorated with sea-shells, over which hung a
quadrant, flanked by two wood-cuts of most bitter-looking naval
commanders. His implements for angling were carefully disposed on nails
and hooks about the room. On a shelf was arranged his library, containing
a work on angling, much worn, a Bible covered with canvas, an odd volume
or two of voyages, a nautical almanac, and a book of songs.

"""
* J. Davors.
"""

His family consisted of a large black cat with one eye, and a parrot which
he had caught and tamed and educated himself in the course of one of his
voyages, and which uttered a variety of sea-phrases with the hoarse
brattling tone of a veteran boatswain. The establishment reminded me of
that of the renowned Robinson Crusoe; it was kept in neat order,
everything being "stowed away" with the regularity of a ship of war; and
he informed me that he "scoured the deck every morning and swept it
between meals."

I found him seated on a bench before the door, smoking his pipe in the
soft evening sunshine. His cat was purring soberly on the threshold, and
his parrot describing some strange evolutions in an iron ring that swung
in the centre of his cage. He had been angling all day, and gave me a
history of his sport with as much minuteness as a general would talk over
a campaign, being particularly animated in relating the manner in which he
had taken a large trout, which had completely tasked all his skill and
wariness, and which he had sent as a trophy to mine hostess of the inn.

How comforting it is to see a cheerful and contented old age, and to
behold a poor fellow like this, after being tempest-tost through life,
safely moored in a snug and quiet harbor in the evening of his days! His
happiness, however, sprung from within himself and was independent of
external circumstances, for he had that inexhaustible good-nature which is
the most precious gift of Heaven, spreading itself like oil over the
troubled sea of thought, and keeping the mind smooth and equable in the
roughest weather.

On inquiring further about him, I learnt that he was a universal favorite
in the village and the oracle of the tap-room, where he delighted the
rustics with his songs, and, like Sindbad, astonished them with his
stories of strange lands and shipwrecks and sea-fights. He was much
noticed too by gentlemen sportsmen of the neighborhood, had taught several
of them the art of angling, and was a privileged visitor to their
kitchens. The whole tenor of his life was quiet and inoffensive, being
principally passed about the neighboring streams when the weather and
season were favorable; and at other times he employed himself at home,
preparing his fishing-tackle for the next campaign or manufacturing rods,
nets, and flies for his patrons and pupils among the gentry.

He was a regular attendant at church on Sundays, though he generally fell
asleep during the sermon. He had made it his particular request that when
he died he should be buried in a green spot which he could see from his
seat in church, and which he had marked out ever since he was a boy, and
had thought of when far from home on the raging sea in danger of being
food for the fishes: it was the spot where his father and mother had been
buried.

I have done, for I fear that my reader is growing weary, but I could not
refrain from drawing the picture of this worthy "brother of the angle,"
who has made me more than ever in love with the theory, though I fear I
shall never be adroit in the practice, of his art; and I will conclude
this rambling sketch in the words of honest Izaak Walton, by craving the
blessing of St. Peter's Master upon my reader, "and upon all that are true
lovers of virtue, and dare trust in His providence, and be quiet, and go
a-angling."

[img[images/0463m.jpg]]
[img[images/0126m.jpg]]

If that severe doom of Synesius be true,&mdash;"It is a greater offence to
steal dead men's labor, than their clothes,"&mdash;what shall become of
most writers? BURTON'S ANATOMY OF MELANCHOLY.

[img[images/9126m.jpg]]

I HAVE often wondered at the extreme fecundity of the press, and how it
comes to pass that so many heads, on which Nature seems to have inflicted
the curse of barrenness, should teem with voluminous productions. As a man
travels on, however, in the journey of life, his objects of wonder daily
diminish, and he is continually finding out some very simple cause for
some great matter of marvel. Thus have I chanced, in my peregrinations
about this great metropolis, to blunder upon a scene which unfolded to me
some of the mysteries of the book-making craft, and at once put an end to
my astonishment.

I was one summer's day loitering through the great saloons of the British
Museum, with that listlessness with which one is apt to saunter about a
museum in warm weather; sometimes lolling over the glass cases of
minerals, sometimes studying the hieroglyphics on an Egyptian mummy, and
some times trying, with nearly equal success, to comprehend the
allegorical paintings on the lofty ceilings. Whilst I was gazing about in
this idle way, my attention was attracted to a distant door, at the end of
a suite of apartments. It was closed, but every now and then it would
open, and some strange-favored being, generally clothed in black, would
steal forth, and glide through the rooms, without noticing any of the
surrounding objects. There was an air of mystery about this that piqued my
languid curiosity, and I determined to attempt the passage of that strait,
and to explore the unknown regions beyond. The door yielded to my hand,
with all that facility with which the portals of enchanted castles yield
to the adventurous knight-errant. I found myself in a spacious chamber,
surrounded with great cases of venerable books. Above the cases, and just
under the cornice, were arranged a great number of black-looking portraits
of ancient authors. About the room were placed long tables, with stands
for reading and writing, at which sat many pale, studious personages,
poring intently over dusty volumes, rummaging among mouldy manuscripts,
and taking copious notes of their contents. A hushed stillness reigned
through this mysterious apartment, excepting that you might hear the
racing of pens over sheets of paper, and occasionally the deep sigh of one
of these sages, as he shifted his position to turn over the page of an old
folio; doubtless arising from that hollowness and flatulency incident to
learned research.

[img[images/0128m.jpg]]

Now and then one of these personages would write something on a small slip
of paper, and ring a bell, whereupon a familiar would appear, take the
paper in profound silence, glide out of the room, and return shortly
loaded with ponderous tomes, upon which the other would fall, tooth and
nail, with famished voracity. I had no longer a doubt that I had happened
upon a body of magi, deeply engaged in the study of occult sciences. The
scene reminded me of an old Arabian tale, of a philosopher shut up in an
enchanted library, in the bosom of a mountain, which opened only once a
year; where he made the spirits of the place bring him books of all kinds
of dark knowledge, so that at the end of the year, when the magic portal
once more swung open on its hinges, he issued forth so versed in forbidden
lore, as to be able to soar above the heads of the multitude, and to
control the powers of Nature.

My curiosity being now fully aroused, I whispered to one of the familiars,
as he was about to leave the room, and begged an interpretation of the
strange scene before me. A few words were sufficient for the purpose. I
found that these mysterious personages, whom I had mistaken for magi, were
principally authors, and were in the very act of manufacturing books. I
was, in fact, in the reading-room of the great British Library, an immense
collection of volumes of all ages and languages, many of which are now
forgotten, and most of which are seldom read: one of these sequestered
pools of obsolete literature to which modern authors repair, and draw
buckets full of classic lore, or "pure English, undefiled," wherewith to
swell their own scanty rills of thought.

Being now in possession of the secret, I sat down in a corner, and watched
the process of this book manufactory. I noticed one lean, bilious-looking
wight, who sought none but the most worm-eaten volumes, printed in black
letter. He was evidently constructing some work of profound erudition,
that would be purchased by every man who wished to be thought learned,
placed upon a conspicuous shelf of his library, or laid open upon his
table&mdash;but never read. I observed him, now and then, draw a large
fragment of biscuit out of his pocket, and gnaw; whether it was his
dinner, or whether he was endeavoring to keep off that exhaustion of the
stomach, produced by much pondering over dry works, I leave to harder
students than myself to determine.

There was one dapper little gentleman in bright-colored clothes, with a
chirping gossiping expression of countenance, who had all the appearance
of an author on good terms with his bookseller. After considering him
attentively, I recognized in him a diligent getter-up of miscellaneous
works, which bustled off well with the trade. I was curious to see how he
manufactured his wares. He made more stir and show of business than any of
the others; dipping into various books, fluttering over the leaves of
manuscripts, taking a morsel out of one, a morsel out of another, "line
upon line, precept upon precept, here a little and there a little." The
contents of his book seemed to be as heterogeneous as those of the
witches' cauldron in Macbeth. It was here a finger and there a thumb, toe
of frog and blind worm's sting, with his own gossip poured in like
"baboon's blood," to make the medley "slab and good."

After all, thought I, may not this pilfering disposition be implanted in
authors for wise purposes? may it not be the way in which Providence has
taken care that the seeds of knowledge and wisdom shall be preserved from
age to age, in spite of the inevitable decay of the works in which they
were first produced? We see that Nature has wisely, though whimsically
provided for the conveyance of seeds from clime to clime, in the maws of
certain birds; so that animals, which, in themselves, are little better
than carrion, and apparently the lawless plunderers of the orchard and the
corn-field, are, in fact, Nature's carriers to disperse and perpetuate her
blessings. In like manner, the beauties and fine thoughts of ancient and
obsolete authors are caught up by these flights of predatory writers, and
cast forth, again to flourish and bear fruit in a remote and distant tract
of time. Many of their works, also, undergo a kind of metempsychosis, and
spring up under new forms. What was formerly a ponderous history, revives
in the shape of a romance&mdash;an old legend changes into a modern play&mdash;and
a sober philosophical treatise furnishes the body for a whole series of
bouncing and sparkling essays. Thus it is in the clearing of our American
woodlands; where we burn down a forest of stately pines, a progeny of
dwarf oaks start up in their place; and we never see the prostrate trunk
of a tree mouldering into soil, but it gives birth to a whole tribe of
fungi.

Let us not then, lament over the decay and oblivion into which ancient
writers descend; they do but submit to the great law of Nature, which
declares that all sublunary shapes of matter shall be limited in their
duration, but which decrees, also, that their element shall never perish.
Generation after generation, both in animal and vegetable life, passes
away, but the vital principle is transmitted to posterity, and the species
continue to flourish. Thus, also, do authors beget authors, and having
produced a numerous progeny, in a good old age they sleep with their
fathers, that is to say, with the authors who preceded them&mdash;and from
whom they had stolen.

Whilst I was indulging in these rambling fancies I had leaned my head
against a pile of reverend folios. Whether it was owing to the soporific
emanations for these works; or to the profound quiet of the room; or to
the lassitude arising from much wandering; or to an unlucky habit of
napping at improper times and places, with which I am grievously
afflicted, so it was, that I fell into a doze. Still, however, my
imagination continued busy, and indeed the same scene continued before my
mind's eye, only a little changed in some of the details. I dreamt that
the chamber was still decorated with the portraits of ancient authors, but
that the number was increased. The long tables had disappeared, and, in
place of the sage magi, I beheld a ragged, threadbare throng, such as may
be seen plying about the great repository of cast-off clothes, Monmouth
Street. Whenever they seized upon a book, by one of those incongruities
common to dreams, methought it turned into a garment of foreign or antique
fashion, with which they proceeded to equip themselves. I noticed,
however, that no one pretended to clothe himself from any particular suit,
but took a sleeve from one, a cape from another, a skirt from a third,
thus decking himself out piecemeal, while some of his original rags would
peep out from among his borrowed finery.

There was a portly, rosy, well-fed parson, whom I observed ogling several
mouldy polemical writers through an eyeglass. He soon contrived to slip on
the voluminous mantle of one of the old fathers, and having purloined the
gray beard of another, endeavored to look exceedingly wise; but the
smirking commonplace of his countenance set at naught all the trappings of
wisdom. One sickly-looking gentleman was busied embroidering a very flimsy
garment with gold thread drawn out of several old court-dresses of the
reign of Queen Elizabeth. Another had trimmed himself magnificently from
an illuminated manuscript, had stuck a nosegay in his bosom, culled from
"The Paradise of Dainty Devices," and having put Sir Philip Sidney's hat
on one side of his head, strutted off with an exquisite air of vulgar
elegance. A third, who was but of puny dimensions, had bolstered himself
out bravely with the spoils from several obscure tracts of philosophy, so
that he had a very imposing front, but he was lamentably tattered in rear,
and I perceived that he had patched his small-clothes with scraps of
parchment from a Latin author.

There were some well-dressed gentlemen, it is true, who only helped
themselves to a gem or so, which sparkled among their own ornaments,
without eclipsing them. Some, too, seemed to contemplate the costumes of
the old writers, merely to imbibe their principles of taste, and to catch
their air and spirit; but I grieve to say, that too many were apt to array
themselves, from top to toe, in the patchwork manner I have mentioned. I
shall not omit to speak of one genius, in drab breeches and gaiters, and
an Arcadian hat, who had a violent propensity to the pastoral, but whose
rural wanderings had been confined to the classic haunts of Primrose Hill,
and the solitudes of the Regent's Park. He had decked himself in wreaths
and ribbons from all the old pastoral poets, and, hanging his head on one
side, went about with a fantastical, lackadaisical air, "babbling about
green field." But the personage that most struck my attention was a
pragmatical old gentleman in clerical robes, with a remarkably large and
square but bald head. He entered the room wheezing and puffing, elbowed
his way through the throng with a look of sturdy self-confidence, and,
having laid hands upon a thick Greek quarto, clapped it upon his head, and
swept majestically away in a formidable frizzled wig.

In the height of this literary masquerade, a cry suddenly resounded from
every side, of "Thieves! thieves!" I looked, and lo! the portraits about
the walls became animated! The old authors thrust out, first a head, then
a shoulder, from the canvas, looked down curiously for an instant upon the
motley throng, and then descended, with fury in their eyes, to claim their
rifled property. The scene of scampering and hubbub that ensued baffles
all description. The unhappy culprits endeavored in vain to escape with
their plunder. On one side might be seen half a dozen old monks, stripping
a modern professor; on another, there was sad devastation carried into the
ranks of modern dramatic writers. Beaumont and Fletcher, side by side,
raged round the field like Castor and Pollux, and sturdy Ben Jonson
enacted more wonders than when a volunteer with the army in Flanders. As
to the dapper little compiler of farragos mentioned some time since, he
had arrayed himself in as many patches and colors as harlequin, and there
was as fierce a contention of claimants about him, as about the dead body
of Patroclus. I was grieved to see many men, to whom I had been accustomed
to look up with awe and reverence, fain to steal off with scarce a rag to
cover their nakedness. Just then my eye was caught by the pragmatical old
gentleman in the Greek grizzled wig, who was scrambling away in sore
affright with half a score of authors in full cry after him. They were
close upon his haunches; in a twinkling off went his wig; at every turn
some strip of raiment was peeled away, until in a few moments, from his
domineering pomp, he shrunk into a little, pursy, "chopp'd bald shot," and
made his exit with only a few tags and rags fluttering at his back.

[img[images/0134m.jpg]]

There was something so ludicrous in the catastrophe of this learned Theban
that I burst into an immoderate fit of laughter, which broke the whole
illusion. The tumult and the scuffle were at an end. The chamber resumed
its usual appearance. The old authors shrunk back into their
picture-frames, and hung in shadowy solemnity along the walls. In short, I
found myself wide awake in my corner, with the whole assemblage of
hookworms gazing at me with astonishment. Nothing of the dream had been
real but my burst of laughter, a sound never before heard in that grave
sanctuary, and so abhorrent to the ears of wisdom, as to electrify the
fraternity.

The librarian now stepped up to me, and demanded whether I had a card of
admission. At first I did not comprehend him, but I soon found that the
library was a kind of literary "preserve," subject to game-laws, and that
no one must presume to hunt there without special license and permission.
In a word, I stood convicted of being an arrant poacher, and was glad to
make a precipitate retreat, lest I should have a whole pack of authors let
loose upon me.
[img[images/0033m.jpg]]

I am of this mind with Homer, that as the snaile that crept out of her
shel was turned eftsoones into a toad I and thereby was forced to make a
stoole to sit on; so the traveller that stragleth from his owne country is
in a short time transformed into so monstrous a shape, that he is faine to
alter his mansion with his manners, and to live where he can, not where he
would.&mdash;LYLY'S EUPHUES.

I was always fond of visiting new scenes, and observing strange characters
and manners. Even when a mere child I began my travels, and made many
tours of discovery into foreign parts and unknown regions of my native
city, to the frequent alarm of my parents, and the emolument of the town
crier. As I grew into boyhood, I extended the range of my observations. My
holiday afternoons were spent in rambles about the surrounding country. I
made myself familiar with all its places famous in history or fable. I
knew every spot where a murder or robbery had been committed, or a ghost
seen. I visited the neighboring villages, and added greatly to my stock of
knowledge, by noting their habits and customs, and conversing with their
sages and great men. I even journeyed one long summer's day to the summit
of the most distant hill, whence I stretched my eye over many a mile of
terra incognita, and was astonished to find how vast a globe I inhabited.

This rambling propensity strengthened with my years. Books of voyages and
travels became my passion, and in devouring their contents, I neglected
the regular exercises of the school. How wistfully would I wander about
the pier-heads in fine weather, and watch the parting ships, bound to
distant climes; with what longing eyes would I gaze after their lessening
sails, and waft myself in imagination to the ends of the earth!

[img[images/0034m.jpg]]

Further reading and thinking, though they brought this vague inclination
into more reasonable bounds, only served to make it more decided. I
visited various parts of my own country; and had I been merely a lover of
fine scenery, I should have felt little desire to seek elsewhere its
gratification, for on no country had the charms of nature been more
prodigally lavished. Her mighty lakes, her oceans of liquid silver; her
mountains, with their bright aerial tints; her valleys, teeming with wild
fertility; her tremendous cataracts, thundering in their solitudes; her
boundless plains, waving with spontaneous verdure; her broad, deep rivers,
rolling in solemn silence to the ocean; her trackless forests, where
vegetation puts forth all its magnificence; her skies, kindling with the
magic of summer clouds and glorious sunshine;&mdash;no, never need an
American look beyond his own country for the sublime and beautiful of
natural scenery.

But Europe held forth all the charms of storied and poetical association.
There were to be seen the masterpieces of art, the refinements of highly
cultivated society, the quaint peculiarities of ancient and local custom.
My native country was full of youthful promise; Europe was rich in the
accumulated treasures of age. Her very ruins told the history of the times
gone by, and every mouldering stone was a chronicle. I longed to wander
over the scenes of renowned achievement&mdash;to tread, as it were, in the
footsteps of antiquity&mdash;to loiter about the ruined castle&mdash;to
meditate on the falling tower&mdash;to escape, in short, from the
commonplace realities of the present, and lose myself among the shadowy
grandeurs of the past.

I had, besides all this, an earnest desire to see the great men of the
earth. We have, it is true, our great men in America: not a city but has
an ample share of them. I have mingled among them in my time, and been
almost withered by the shade into which they cast me; for there is nothing
so baleful to a small man as the shade of a great one, particularly the
great man of a city. But I was anxious to see the great men of Europe; for
I had read in the works of various philosophers, that all animals
degenerated in America, and man among the number. A great man of Europe,
thought I, must therefore be as superior to a great man of America, as a
peak of the Alps to a highland of the Hudson; and in this idea I was
confirmed by observing the comparative importance and swelling magnitude
of many English travellers among us, who, I was assured, were very little
people in their own country. I will visit this land of wonders, thought I,
and see the gigantic race from which I am degenerated.

It has been either my good or evil lot to have my roving passion
gratified. I have wandered through different countries and witnessed many
of the shifting scenes of life. I cannot say that I have studied them with
the eye of a philosopher, but rather with the sauntering gaze with which
humble lovers of the picturesque stroll from the window of one print-shop
to another; caught sometimes by the delineations of beauty, sometimes by
the distortions of caricature, and sometimes by the loveliness of
landscape. As it is the fashion for modern tourists to travel pencil in
hand, and bring home their portfolios filled with sketches, I am disposed
to get up a few for the entertainment of my friends. When, however, I look
over the hints and memorandums I have taken down for the purpose, my heart
almost fails me, at finding how my idle humor has led me astray from the
great object studied by every regular traveller who would make a book. I
fear I shall give equal disappointment with an unlucky landscape-painter,
who had travelled on the Continent, but following the bent of his vagrant
inclination, had sketched in nooks, and corners, and by-places. His
sketch-book was accordingly crowded with cottages, and landscapes, and
obscure ruins; but he had neglected to paint St. Peter's, or the Coliseum,
the cascade of Terni, or the bay of Naples, and had not a single glacier
or volcano in his whole collection.
A SHAKESPEARIAN RESEARCH.

[img[images/9177m.jpg]]

"A tavern is the rendezvous, the exchange, the staple of good fellows. I
have heard my great-grandfather tell, how his great-great-grandfather
should say, that it was an old proverb when his great-grandfather was a
child, that 'it was a good wind that blew a man to the wine.'"

MOTHER BOMBIE.

IT is a pious custom in some Catholic countries to honor the memory of
saints by votive lights burnt before their pictures. The popularity of a
saint, therefore, may be known by the number of these offerings. One,
perhaps, is left to moulder in the darkness of his little chapel; another
may have a solitary lamp to throw its blinking rays athwart his effigy;
while the whole blaze of adoration is lavished at the shrine of some
beatified father of renown. The wealthy devotee brings his huge luminary
of wax, the eager zealot, his seven-branched candlestick; and even the
mendicant pilgrim is by no means satisfied that sufficient light is thrown
upon the deceased unless he hangs up his little lamp of smoking oil. The
consequence is, that in the eagerness to enlighten, they are often apt to
obscure; and I have occasionally seen an unlucky saint almost smoked out
of countenance by the officiousness of his followers.

In like manner has it fared with the immortal Shakespeare. Every writer
considers it his bounden duty to light up some portion of his character or
works, and to rescue some merit from oblivion. The commentator, opulent in
words, produces vast tomes of dissertations; the common herd of editors
send up mists of obscurity from their notes at the bottom of each page;
and every casual scribbler brings his farthing rushlight of eulogy or
research to swell the cloud of incense and of smoke.

As I honor all established usages of my brethren of the quill, I thought
it but proper to contribute my mite of homage to the memory of the
illustrious bard. I was for some time, however, sorely puzzled in what way
I should discharge this duty. I found myself anticipated in every attempt
at a new reading; every doubtful line had been explained a dozen different
ways, and perplexed beyond the reach of elucidation; and as to fine
passages, they had all been amply praised by previous admirers; nay, so
completely had the bard, of late, been overlarded with panegyric by a
great German critic that it was difficult now to find even a fault that
had not been argued into a beauty.

In this perplexity I was one morning turning over his pages when I
casually opened upon the comic scenes of Henry IV., and was, in a moment,
completely lost in the madcap revelry of the Boar's Head Tavern. So
vividly and naturally are these scenes of humor depicted, and with such
force and consistency are the characters sustained, that they become
mingled up in the mind with the facts and personages of real life. To few
readers does it occur that these are all ideal creations of a poet's
brain, and that, in sober truth, no such knot of merry roisterers ever
enlivened the dull neighborhood of Eastcheap.

[img[images/0179m.jpg]]

For my part, I love to give myself up to the illusions of poetry. A hero
of fiction that never existed is just as valuable to me as a hero of
history that existed a thousand years since and, if I may be excused such
an insensibility to the common ties of human nature, I would not give up
fat Jack for half the great men of ancient chronicle. What have the heroes
of yore done for me or men like me? They have conquered countries of which
I do not enjoy an acre, or they have gained laurels of which I do not
inherit a leaf, or they have furnished examples of hair-brained prowess,
which I have neither the opportunity nor the inclination to follow. But,
old Jack Falstaff! kind Jack Falstaff! sweet Jack Falstaff! has enlarged
the boundaries of human enjoyment; he has added vast regions of wit and
good-humor, in which the poorest man may revel, and has bequeathed a
never-failing inheritance of jolly laughter, to make mankind merrier and
better to the latest posterity.

A thought suddenly struck me. "I will make a pilgrimage to Eastcheap,"
said I, closing the book, "and see if the old Boar's Head Tavern still
exists. Who knows but I may light upon some legendary traces of Dame
Quickly and her guests? At any rate, there will be a kindred pleasure in
treading the halls once vocal with their mirth to that the toper enjoys in
smelling to the empty cask, once filled with generous wine."

The resolution was no sooner formed than put in execution. I forbear to
treat of the various adventures and wonders I encountered in my travels;
of the haunted regions of Cock Lane; of the faded glories of Little
Britain and the parts adjacent; what perils I ran in Cateaton Street and
Old Jewry; of the renowned Guildhall and its two stunted giants, the pride
and wonder of the city and the terror of all unlucky urchins; and how I
visited London Stone, and struck my staff upon it in imitation of that
arch-rebel Jack Cade.

Let it suffice to say, that I at length arrived in merry Eastcheap, that
ancient region of wit and wassail, where the very names of the streets
relished of good cheer, as Pudding Lane bears testimony even at the
present day. For Eastcheap, says old Stow, "was always famous for its
convivial doings. The cookes cried hot ribbes of beef roasted, pies well
baked, and other victuals: there was clattering of pewter pots, harpe,
pipe, and sawtrie." Alas! how sadly is the scene changed since the roaring
days of Falstaff and old Stow! The madcap roisterer has given place to the
plodding tradesman; the clattering of pots and the sound of "harpe and
sawtrie," to the din of carts and the accurst dinging of the dustman's
bell; and no song is heard, save, haply, the strain of some syren from
Billingsgate, chanting the eulogy of deceased mackerel.

I sought, in vain, for the ancient abode of Dame Quickly. The only relict
of it is a boar's head, carved in relief in stone, which formerly served
as the sign, but at present is built into the parting line of two houses
which stand on the site of the renowned old tavern.

For the history of this little abode of good fellowship I was referred to
a tallow-chandler's widow opposite, who had been born and brought up on
the spot, and was looked up to as the indisputable chronicler of the
neighborhood. I found her seated in a little back parlor, the window of
which looked out upon a yard about eight feet square laid out as a
flower-garden, while a glass door opposite afforded a distant view of the
street, through a vista of soap and tallow candles&mdash;the two views,
which comprised, in all probability, her prospects in life and the little
world in which she had lived and moved and had her being for the better
part of a century.

To be versed in the history of Eastcheap, great and little, from London
Stone even unto the Monument, was doubtless, in her opinion, to be
acquainted with the history of the universe. Yet, with all this, she
possessed the simplicity of true wisdom, and that liberal communicative
disposition which I have generally remarked in intelligent old ladies
knowing in the concerns of their neighborhood.

Her information, however, did not extend far back into antiquity. She
could throw no light upon the history of the Boar's Head from the time
that Dame Quickly espoused the valiant Pistol until the great fire of
London when it was unfortunately burnt down. It was soon rebuilt, and
continued to flourish under the old name and sign, until a dying landlord,
struck with remorse for double scores, bad measures, and other iniquities
which are incident to the sinful race of publicans, endeavored to make his
peace with Heaven by bequeathing the tavern to St. Michael's Church,
Crooked Lane, toward the supporting of a chaplain. For some time the
vestry meetings were regularly held there, but it was observed that the
old Boar never held up his head under church government. He gradually
declined, and finally gave his last gasp about thirty years since. The
tavern was then turned into shops; but she informed me that a picture of
it was still preserved in St. Michael's Church, which stood just in the
rear. To get a sight of this picture was now my determination; so, having
informed myself of the abode of the sexton, I took my leave of the
venerable chronicler of Eastcheap, my visit having doubtless raised
greatly her opinion of her legendary lore and furnished an important
incident in the history of her life.

It cost me some difficulty and much curious inquiry to ferret out the
humble hanger-on to the church. I had to explore Crooked Lane and divers
little alleys and elbows and dark passages with which this old city is
perforated like an ancient cheese, or a worm-eaten chest of drawers. At
length I traced him to a corner of a small court surrounded by lofty
houses, where the inhabitants enjoy about as much of the face of heaven as
a community of frogs at the bottom of a well.

The sexton was a meek, acquiescing little man, of a bowing, lowly habit,
yet he had a pleasant twinkling in his eye, and if encouraged, would now
and then hazard a small pleasantry, such as a man of his low estate might
venture to make in the company of high churchwardens and other mighty men
of the earth. I found him in company with the deputy organist, seated
apart, like Milton's angels, discoursing, no doubt, on high doctrinal
points, and settling the affairs of the church over a friendly pot of ale;
for the lower classes of English seldom deliberate on any weighty matter
without the assistance of a cool tankard to clear their understandings. I
arrived at the moment when they had finished their ale and their argument,
and were about to repair to the church to put it in order; so, having made
known my wishes, I received their gracious permission to accompany them.

The church of St. Michael's, Crooked Lane, standing a short distance from
Billingsgate, is enriched with the tombs of many fishmongers of renown;
and as every profession has its galaxy of glory and its constellation of
great men, I presume the monument of a mighty fishmonger of the olden time
is regarded with as much reverence by succeeding generations of the craft,
as poets feel on contemplating the tomb of Virgil or soldiers the monument
of a Marlborough or Turenne.

I cannot but turn aside, while thus speaking of illustrious men, to
observe that St. Michael's, Crooked Lane, contains also the ashes of that
doughty champion, William Walworth, Knight, who so manfully clove down the
sturdy wight, Wat Tyler, in Smithfield&mdash;a hero worthy of honorable
blazon, as almost the only Lord Mayor on record famous for deeds of arms,
the sovereigns of Cockney being generally renowned as the most pacific of
all potentates.*

"""
* The following was the ancient inscription on the monument
of this worthy, which, unhappily, was destroyed in the great
conflagration.

Hereunder lyth a man of Fame,
William Walworth callyd by name:
Fishmonger he was in lyfftime here,
And twise Lord Maior, as in books appere;
Who, with courage stout and manly myght,
Slew Jack Straw in Kyng Richard's sight.
For which act done, and trew entent,
The Kyng made him knyght incontinent
And gave him armes, as here you see,
To declare his fact and chivaldrie.
He left this lyff the yere of our God
Thirteen hundred fourscore and three odd.
"""

An error in the foregoing inscription has been corrected by the venerable
Stow. "Whereas," saith he, "it hath been far spread abroad by vulgar
opinion, that the rebel smitten down so manfully by Sir William Walworth,
the then worthy Lord Maior, was named Jack Straw, and not Wat Tyler, I
thought good to reconcile this rash-conceived doubt by such testimony as I
find in ancient and good records. The principal leaders, or captains, of
the commons, were Wat Tyler, as the first man; the second was John, or
Jack, Straw, etc., etc."&mdash;STOW'S London.

Adjoining the church, in a small cemetery, immediately under the back
window of what was once the Boar's Head, stands the tombstone of Robert
Preston, whilom drawer at the tavern. It is now nearly a century since
this trusty drawer of good liquor closed his bustling career and was thus
quietly deposited within call of his customers. As I was clearing away the
weeds from his epitaph the little sexton drew me on one side with a
mysterious air, and informed me in a low voice that once upon a time, on a
dark wintry night, when the wind was unruly, howling, and whistling,
banging about doors and windows, and twirling weathercocks, so that the
living were frightened out of their beds, and even the dead could not
sleep quietly in their graves, the ghost of honest Preston, which happened
to be airing itself in the churchyard, was attracted by the well-known
call of "Waiter!" from the Boar's Head, and made its sudden appearance in
the midst of a roaring club, just as the parish clerk was singing a stave
from the "mirre garland of Captain Death;" to the discomfiture of sundry
train-band captains and the conversion of an infidel attorney, who became
a zealous Christian on the spot, and was never known to twist the truth
afterwards, except in the way of business.

I beg it may be remembered, that I do not pledge myself for the
authenticity of this anecdote, though it is well known that the
churchyards and by-corners of this old metropolis are very much infested
with perturbed spirits; and every one must have heard of the Cock Lane
ghost, and the apparition that guards the regalia in the Tower which has
frightened so many bold sentinels almost out of their wits.

Be all this as it may, this Robert Preston seems to have been a worthy
successor to the nimbletongued Francis, who attended upon the revels of
Prince Hal; to have been equally prompt with his "Anon, anon, sir;" and to
have transcended his predecessor in honesty; for Falstaff, the veracity of
whose taste no man will venture to impeach, flatly accuses Francis of
putting lime in his sack, whereas honest Preston's epitaph lands him for
the sobriety of his conduct, the soundness of his wine, and the fairness
of his measure.* The worthy dignitaries of the church, however, did not
appear much captivated by the sober virtues of the tapster; the deputy
organist, who had a moist look out of the eye, made some shrewd remark on
the abstemiousness of a man brought up among full hogsheads, and the
little sexton corroborated his opinion by a significant wink and a dubious
shake of the head.

"""
* As this inscription is rife with excellent morality, I
transcribe it for the admonition of delinquent tapsters. It
is no doubt, the production of some choice spirit who once
frequented the Boar's Head.

Bacchus, to give the toping world surprise,
Produced one sober son, and here he lies.
Though rear'd among full hogsheads, he defy'd
The charms of wine, and every one beside.
O reader, if to justice thou 'rt inclined,
Keep honest Preston daily in thy mind.
He drew good wine, took care to fill his pots,
Had sundry virtues that excused his faults.
You that on Bacchus have the like dependence,
Pray copy Bob in measure and attendance.
"""

Thus far my researches, though they threw much light on the history of
tapsters, fishmongers, and Lord Mayors, yet disappointed me in the great
object of my quest, the picture of the Boar's Head Tavern. No such
painting was to be found in the church of St. Michael's. "Marry and amen,"
said I, "here endeth my research!" So I was giving the matter up, with the
air of a baffled antiquary, when my friend the sexton, perceiving me to be
curious in everything relative to the old tavern, offered to show me the
choice vessels of the vestry, which had been handed down from remote times
when the parish meetings were held at the Boar's Head. These were
deposited in the parish club-room, which had been transferred, on the
decline of the ancient establishment, to a tavern in the neighborhood.

A few steps brought us to the house, which stands No. 12 Miles Lane,
bearing the title of The Mason's Arms, and is kept by Master Edward
Honeyball, the "bully-rock" of the establishment. It is one of those
little taverns which abound in the heart of the city and form the centre
of gossip and intelligence of the neighborhood. We entered the barroom,
which was narrow and darkling, for in these close lanes but few rays of
reflected light are enabled to struggle down to the inhabitants, whose
broad day is at best but a tolerable twilight. The room was partitioned
into boxes, each containing a table spread with a clean white cloth, ready
for dinner. This showed that the guests were of the good old stamp, and
divided their day equally, for it was but just one o'clock. At the lower
end of the room was a clear coal fire, before which a breast of lamb was
roasting. A row of bright brass candlesticks and pewter mugs glistened
along the mantelpiece, and an old fashioned clock ticked in one corner.
There was something primitive in this medley of kitchen, parlor, and hall
that carried me back to earlier times, and pleased me. The place, indeed,
was humble, but everything had that look of order and neatness which
bespeaks the superintendence of a notable English housewife. A group of
amphibious-looking beings, who might be either fishermen or sailors, were
regaling themselves in one of the boxes. As I was a visitor of rather
higher pretensions, I was ushered into a little misshapen back room,
having at least nine corners. It was lighted by a sky-light, furnished
with antiquated leathern chairs, and ornamented with the portrait of a fat
pig. It was evidently appropriated to particular customers, and I found a
shabby gentleman in a red nose and oil-cloth hat seated in one corner
meditating on a half empty pot of porter.

The old sexton had taken the landlady aside, and with an air of profound
importance imparted to her my errand. Dame Honeyball was a likely, plump,
bustling little woman, and no bad substitute for that paragon of
hostesses, Dame Quickly. She seemed delighted with an opportunity to
oblige, and, hurrying upstairs to the archives of her house, where the
precious vessels of the parish club were deposited, she returned, smiling
and courtesying, with them in her hands.

The first she presented me was a japanned iron tobacco-box of gigantic
size, out of which, I was told, the vestry had smoked at their stated
meetings since time immemorial, and which was never suffered to be
profaned by vulgar hands, or used on common occasions, I received it with
becoming reverence, but what was my delight at beholding on its cover the
identical painting of which I was in quest! There was displayed the
outside of the Boar's Head Tavern, and before the door was to be seen the
whole convivial group at table, in full revel, pictured with that
wonderful fidelity and force with which the portraits of renowned generals
and commodores are illustrated on tobacco-boxes, for the benefit of
posterity. Lest, however, there should be any mistake, the cunning limner
had warily inscribed the names of Prince Hal and Falstaff on the bottoms
of their chairs.

[img[images/0188m.jpg]]

On the inside of the cover was an inscription, nearly obliterated,
recording that this box was the gift of Sir Richard Gore, for the use of
the vestry meetings at the Boar's Head Tavern, and that it was "repaired
and beautified by his successor, Mr. John Packard, 1767." Such is a
faithful description of this august and venerable relic, and I question
whether the learned Scriblerius contemplated his Roman shield, or the
Knights of the Round Table the long-sought San-greal, with more
exultation.

While I was meditating on it with enraptured gaze, Dame Honeyball, who was
highly gratified by the interest it excited, put in my hands a
drinking-cup or goblet which also belonged to the vestry, and was
descended from the old Boar's Head. It bore the inscription of having been
the gift of Francis Wythers, Knight, and was held, she told me, in
exceeding great value, being considered very "antyke." This last opinion
was strengthened by the shabby gentleman with the red nose and oilcloth
hat, and whom I strongly suspected of being a lineal descendant from the
variant Bardolph. He suddenly aroused from his meditation on the pot of
porter, and casting a knowing look at the goblet, exclaimed, "Ay, ay! the
head don't ache now that made that there article."

The great importance attached to this memento of ancient revelry by modern
churchwardens, at first puzzled me; but there is nothing sharpens the
apprehension so much as antiquarian research; for I immediately perceived
that this could be no other than the identical "parcel-gilt goblet," on
which Falstaff made his loving but faithless vow to Dame Quickly, and
which would, of course, be treasured up with care among the regalia of her
domains, as a testimony of that solemn contract.*

"""
* "Thou didst swear to me upon a parcel-gilt goblet, sitting
in my Dolphin chamber, at the round table, by a sea-coal
fire, on Wednesday, in Whitsun-week, when the prince broke
thy head for likening his father to a singing man at
Windsor; thou didst swear to me then, as I was washing thy
wound, to marry me, and make me my lady, thy wife. Canst
thou deny it?"&mdash;Henry IV., Part 2.
"""

Mine hostess, indeed, gave me a long history how the goblet had been
handed down from generation to generation. She also entertained me with
many particulars concerning the worthy vestrymen who have seated
themselves thus quietly on the stools of the ancient roisterers of
Eastcheap, and, like so many commentators, utter clouds of smoke in honor
of Shakespeare. These I forbear to relate, lest my readers should not be
as curious in these matters as myself. Suffice it to say, the neighbors,
one and all, about Eastcheap, believe that Falstaff and his merry crew
actually lived and revelled there. Nay, there are several legendary
anecdotes concerning him still extant among the oldest frequenters of the
Mason's Arms, which they give as transmitted down from their forefathers;
and Mr. M'Kash, an Irish hair-dresser, whose shop stands on the site of
the old Boar's Head, has several dry jokes of Fat Jack's, not laid down in
the books, with which he makes his customers ready to die of laughter.

I now turned to my friend the sexton to make some further inquiries, but I
found him sunk in pensive meditation. His head had declined a little on
one side; a deep sigh heaved from the very bottom of his stomach, and,
though I could not see a tear trembling in his eye, yet a moisture was
evidently stealing from a corner of his mouth. I followed the direction of
his eye through the door which stood open, and found it fixed wistfully on
the savory breast of lamb, roasting in dripping richness before the fire.

I now called to mind that in the eagerness of my recondite investigation,
I was keeping the poor man from his dinner. My bowels yearned with
sympathy, and putting in his hand a small token of my gratitude and
goodness, I departed with a hearty benediction on him, Dame Honeyball, and
the parish club of Crooked Lane&mdash;not forgetting my shabby, but
sententious friend, in the oil-cloth hat and copper nose.

Thus have I given a "tedious brief" account of this interesting research,
for which, if it prove too short and unsatisfactory, I can only plead my
inexperience in this branch of literature, so deservedly popular at the
present day. I am aware that a more skilful illustrator of the immortal
bard would have swelled the materials I have touched upon to a good
merchantable bulk, comprising the biographies of William Walworth, Jack
Straw, and Robert Preston; some notice of the eminent fishmongers of St.
Michael's; the history of Eastcheap, great and little; private anecdotes
of Dame Honeyball and her pretty daughter, whom I have not even mentioned;
to say nothing of a damsel tending the breast of lamb (and whom, by the
way, I remarked to be a comely lass with a neat foot and ankle);&mdash;the
whole enlivened by the riots of Wat Tyler, and illuminated by the great
fire of London.

All this I leave, as a rich mine, to be worked by future commentators, nor
do I despair of seeing the tobacco-box, and the "parcel-gilt goblet" which
I have thus brought to light the subject of future engravings, and almost
as fruitful of voluminous dissertations and disputes as the shield of
Achilles or the far-famed Portland Vase.
[img[images/0118m.jpg]]

"""
I never heard
Of any true affection, but 't was nipt
With care, that, like the caterpillar, eats
The leaves of the spring's sweetest book, the rose.
MIDDLETON.
"""

[img[images/9118m.jpg]]

It is a common practice with those who have outlived the susceptibility of
early feeling, or have been brought up in the gay heartlessness of
dissipated life, to laugh at all love stories, and to treat the tales of
romantic passion as mere fictions of novelists and poets. My observations
on human nature have induced me to think otherwise. They have convinced me
that, however the surface of the character may be chilled and frozen by
the cares of the world, or cultivated into mere smiles by the arts of
society, still there are dormant fires lurking in the depths of the
coldest bosom, which, when once enkindled, become impetuous, and are
sometimes desolating in their effects. Indeed, I am a true believer in the
blind deity, and go to the full extent of his doctrines. Shall I confess
it?&mdash;I believe in broken hearts, and the possibility of dying of
disappointed love! I do not, however, consider it a malady often fatal to
my own sex; but I firmly believe that it withers down many a lovely woman
into an early grave.

Man is the creature of interest and ambition. His nature leads him forth
into the struggle and bustle of the world. Love is but the embellishment
of his early life, or a song piped in the intervals of the acts. He seeks
for fame, for fortune for space in the world's thought, and dominion over
his fellow-men. But a woman's whole life is a history of the affections.
The heart is her world; it is there her ambition strives for empire&mdash;it
is there her avarice seeks for hidden treasures. She sends forth her
sympathies on adventure; she embarks her whole soul in the traffic of
affection; and if shipwrecked, her case is hopeless&mdash;for it is a
bankruptcy of the heart.

To a man, the disappointment of love may occasion some bitter pangs; it
wounds some feelings of tenderness&mdash;it blasts some prospects of
felicity; but he is an active being&mdash;he may dissipate his thoughts in
the whirl of varied occupation, or may plunge into the tide of pleasure;
or, if the scene of disappointment be too full of painful associations, he
can shift his abode at will, and taking, as it were, the wings of the
morning, can "fly to the uttermost parts of the earth, and be at rest."

But woman's is comparatively a fixed, a secluded, and meditative life. She
is more the companion of her own thoughts and feelings; and if they are
turned to ministers of sorrow, where shall she look for consolation? Her
lot is to be wooed and won; and if unhappy in her love, her heart is like
some fortress that has been captured, and sacked, and abandoned, and left
desolate.

How many bright eyes grow dim&mdash;how many soft cheeks grow pale&mdash;how
many lovely forms fade away into the tomb, and none can tell the cause
that blighted their loveliness! As the dove will clasp its wings to its
side, and cover and conceal the arrow that is preying on its vitals&mdash;so
is it the nature of woman, to hide from the world the pangs of wounded
affection. The love of a delicate female is always shy and silent. Even
when fortunate, she scarcely breathes it to herself; but when otherwise,
she buries it in the recesses of her bosom, and there lets it cower and
brood among the ruins of her peace. With her, the desire of her heart has
failed&mdash;the great charm of existence is at an end. She neglects all
the cheerful exercises which gladden the spirits, quicken the pulses, and
send the tide of life in healthful currents through the veins. Her rest is
broken&mdash;the sweet refreshment of sleep is poisoned by melancholy
dreams&mdash;"dry sorrow drinks her blood," until her enfeebled frame
sinks under the slightest external injury. Look for her, after a little
while, and you find friendship weeping over her untimely grave, and
wondering that one, who but lately glowed with all the radiance of health
and beauty, should so speedily be brought down to "darkness and the worm."
You will be told of some wintry chill, some casual indisposition, that
laid her low;&mdash;but no one knows of the mental malady which previously
sapped her strength, and made her so easy a prey to the spoiler.

She is like some tender tree, the pride and beauty of the grove; graceful
in its form, bright in its foliage, but with the worm preying at its
heart. We find it suddenly withering, when it should be most fresh and
luxuriant. We see it drooping its branches to the earth, and shedding leaf
by leaf, until, wasted and perished away, it falls even in the stillness
of the forest; and as we muse over the beautiful ruin, we strive in vain
to recollect the blast or thunderbolt that could have smitten it with
decay.

I have seen many instances of women running to waste and self-neglect, and
disappearing gradually from the earth, almost as if they had been exhaled
to heaven; and have repeatedly fancied that I could trace their deaths
through the various declensions of consumption, cold, debility, languor,
melancholy, until I reached the first symptom of disappointed love. But an
instance of the kind was lately told to me; the circumstances are well
known in the country where they happened, and I shall but give them in the
manner in which they were related.

Every one must recollect the tragical story of young E&mdash;&mdash;, the
Irish patriot; it was too touching to be soon forgotten. During the
troubles in Ireland, he was tried, condemned, and executed, on a charge of
treason. His fate made a deep impression on public sympathy. He was so
young&mdash;so intelligent&mdash;so generous&mdash;so brave&mdash;so every
thing that we are apt to like in a young man. His conduct under trial,
too, was so lofty and intrepid. The noble indignation with which he
repelled the charge of treason against his country&mdash;the eloquent
vindication of his name&mdash;and his pathetic appeal to posterity, in the
hopeless hour of condemnation,&mdash;all these entered deeply into every
generous bosom, and even his enemies lamented the stern policy that
dictated his execution.

But there was one heart whose anguish it would be impossible to describe.
In happier days and fairer fortunes, he had won the affections of a
beautiful and interesting girl, the daughter of a late celebrated Irish
barrister. She loved him with the disinterested fervor of a woman's first
and early love. When every worldly maxim arrayed itself against him; when
blasted in fortune, and disgrace and danger darkened around his name, she
loved him the more ardently for his very sufferings. If, then, his fate
could awaken the sympathy even of his foes, what must have been the agony
of her, whose whole soul was occupied by his image? Let those tell who
have had the portals of the tomb suddenly closed between them and the
being they most loved on earth&mdash;who have sat at its threshold, as one
shut out in a cold and lonely world, whence all that was most lovely and
loving had departed.

But then the horrors of such a grave!&mdash;so frightful, so dishonored!
There was nothing for memory to dwell on that could soothe the pang of
separation&mdash;none of those tender, though melancholy circumstances
which endear the parting scene&mdash;nothing to melt sorrow into those
blessed tears, sent like the dews of heaven, to revive the heart in the
parting hour of anguish.

To render her widowed situation more desolate, she had incurred her
father's displeasure by her unfortunate attachment, and was an exile from
the parental roof. But could the sympathy and kind offices of friends have
reached a spirit so shocked and driven in by horror, she would have
experienced no want of consolation, for the Irish are a people of quick
and generous sensibilities. The most delicate and cherishing attentions
were paid her by families of wealth and distinction. She was led into
society, and they tried by all kinds of occupation and amusement to
dissipate her grief, and wean her from the tragical story of her loves.
But it was all in vain. There are some strokes of calamity that scathe and
scorch the soul&mdash;which penetrate to the vital seat of happiness&mdash;and
blast it, never again to put forth bud or blossom. She never objected to
frequent the haunts of pleasure, but was as much alone there as in the
depths of solitude; walking about in a sad revery, apparently unconscious
of the world around her. She carried with her an inward woe that mocked at
all the blandishments of friendship, and "heeded not the song of the
charmer, charm he never so wisely."

The person who told me her story had seen her at a masquerade. There can
be no exhibition of far-gone wretchedness more striking and painful than
to meet it in such a scene. To find it wandering like a spectre, lonely
and joyless, where all around is gay&mdash;to see it dressed out in the
trappings of mirth, and looking so wan and woe-begone, as if it had tried
in vain to cheat the poor heart into momentary forgetfulness of sorrow.
After strolling through the splendid rooms and giddy crowd with an air of
utter abstraction, she sat herself down on the steps of an orchestra, and,
looking about for some time with a vacant air, that showed her
insensibility to the garish scene, she began, with the capriciousness of a
sickly heart, to warble a little plaintive air. She had an exquisite,
voice; but on this occasion it was so simple, so touching, it breathed
forth such a soul of wretchedness&mdash;that she drew a crowd, mute and
silent, around her and melted every one into tears.

The story of one so true and tender could not but excite great interest in
a country remarkable for enthusiasm. It completely won the heart of a
brave officer, who paid his addresses to her, and thought that one so true
to the dead, could not but prove affectionate to the living. She declined
his attentions, for her thoughts were irrevocably engrossed by the memory
of her former lover. He, however, persisted in his suit. He solicited not
her tenderness, but her esteem. He was assisted by her conviction of his
worth, and her sense of her own destitute and dependent situation, for she
was existing on the kindness of friends. In a word, he at length succeeded
in gaining her hand, though with the solemn assurance, that her heart was
unalterably another's.

[img[images/0124m.jpg]]

He took her with him to Sicily, hoping that a change of scene might wear
out the remembrance of early woes. She was an amiable and exemplary wife,
and made an effort to be a happy one; but nothing could cure the silent
and devouring melancholy that had entered into her very soul. She wasted
away in a slow, but hopeless decline, and at length sunk into the grave,
the victim of a broken heart.

It was on her that Moore, the distinguished Irish poet, composed the
following lines:

[img[images/0125m.jpg]]

"""
She is far from the land where her young hero sleeps,
And lovers around her are sighing:
But coldly she turns from their gaze, and weeps,
For her heart in his grave is lying.

She sings the wild song of her dear native plains,
Every note which he loved awaking&mdash;
Ah! little they think, who delight in her strains,
How the heart of the minstrel is breaking!

He had lived for his love&mdash;for his country he died,
They were all that to life had entwined him&mdash;
Nor soon shall the tears of his country be dried,
Nor long will his love stay behind him!

Oh! make her a grave where the sunbeams rest,
When they promise a glorious morrow;
They'll shine o'er her sleep, like a smile from the west,
From her own loved island of sorrow!
"""
[img[images/0310m.jpg]]

"""
Lo, now is come our joyful'st feast!
Let every man be jolly.
Eache roome with yvie leaves is drest,
And every post with holly.
Now all our neighbours' chimneys smoke,
And Christmas blocks are burning;
Their ovens they with bak't meats choke
And all their spits are turning.
Without the door let sorrow lie,
And if, for cold, it hap to die,
Wee'l bury 't in a Christmas pye,
And evermore be merry.
WITHERS, Juvenilia.
"""

[img[images/9311m.jpg]]

I HAD finished my toilet, and was loitering with Frank Bracebridge in the
library, when we heard a distant thwacking sound, which he informed me was
a signal for the serving up of the dinner. The squire kept up old customs
in kitchen as well as hall, and the rolling-pin, struck upon the dresser
by the cook, summoned the servants to carry in the meats.

"""
Just in this nick the cook knock'd thrice,
And all the waiters in a trice
His summons did obey;
Each serving-man, with dish in hand,
March'd boldly up, like our train-band,
Presented and away.*

* Sir John Suckling.
"""

The dinner was served up in the great hall, where the squire always held
his Christmas banquet. A blazing crackling fire of logs had been heaped on
to warm the spacious apartment, and the flame went sparkling and wreathing
up the wide-mouthed chimney. The great picture of the crusader and his
white horse had been profusely decorated with greens for the occasion, and
holly and ivy had like-wise been wreathed round the helmet and weapons on
the opposite wall, which I understood were the arms of the same warrior. I
must own, by the by, I had strong doubts about the authenticity of the
painting and armor as having belonged to the crusader, they certainly
having the stamp of more recent days; but I was told that the painting had
been so considered time out of mind; and that as to the armor, it had been
found in a lumber-room and elevated to its present situation by the
squire, who at once determined it to be the armor of the family hero; and
as he was absolute authority on all such subjects in his own household,
the matter had passed into current acceptation. A sideboard was set out
just under this chivalric trophy, on which was a display of plate that
might have vied (at least in variety) with Belshazzar's parade of the
vessels of the temple: "flagons, cans, cups, beakers, goblets, basins, and
ewers," the gorgeous utensils of good companionship that had gradually
accumulated through many generations of jovial housekeepers. Before these
stood the two Yule candles, beaming like two stars of the first magnitude;
other lights were distributed in branches, and the whole array glittered
like a firmament of silver.

We were ushered into this banqueting scene with the sound of minstrelsy,
the old harper being seated on a stool beside the fireplace and twanging,
his instrument with a vast deal more power than melody. Never did
Christmas board display a more goodly and gracious assemblage of
countenances; those who were not handsome were at least happy, and
happiness is a rare improver of your hard-favored visage. I always
consider an old English family as well worth studying as a collection of
Holbein's portraits or Albert Durer's prints. There is much antiquarian
lore to be acquired, much knowledge of the physiognomies of former times.
Perhaps it may be from having continually before their eyes those rows of
old family portraits, with which the mansions of this country are stocked;
certain it is that the quaint features of antiquity are often most
faithfully perpetuated in these ancient lines, and I have traced an old
family nose through a whole picture-gallery, legitimately handed down from
generation to generation almost from the time of the Conquest. Something
of the kind was to be observed in the worthy company around me. Many of
their faces had evidently originated in a Gothic age, and been merely
copied by succeeding generations; and there was one little girl in
particular, of staid demeanor, with a high Roman nose and an antique
vinegar aspect, who was a great favorite of the squire's, being, as he
said, a Bracebridge all over, and the very counterpart of one of his
ancestors who figured in the court of Henry VIII.

The parson said grace, which was not a short familiar one, such as is
commonly addressed to the Deity in these unceremonious days, but a long,
courtly, well-worded one of the ancient school. There was now a pause, as
if something was expected, when suddenly the butler entered the hall with
some degree of bustle: he was attended by a servant on each side with a
large wax-light, and bore a silver dish on which was an enormous pig's
head decorated with rosemary, with a lemon in its mouth, which was placed
with great formality at the head of the table. The moment this pageant
made its appearance the harper struck up a flourish; at the conclusion of
which the young Oxonian, on receiving a hint from the squire, gave, with
an air of the most comic gravity, an old carol, the first verse of which
was as follows

[img[images/0314m.jpg]]

"""
Caput apri defero
Reddens laudes Domino.
The boar's head in hand bring I,
With garlands gay and rosemary.
I pray you all synge merily
Qui estis in convivio.
"""

Though prepared to witness many of these little eccentricities, from being
apprised of the peculiar hobby of mine host, yet I confess the parade with
which so odd a dish was introduced somewhat perplexed me, until I gathered
from the conversation of the squire and the parson that it was meant to
represent the bringing in of the boar's head, a dish formerly served up
with much ceremony and the sound of minstrelsy and song at great tables on
Christmas Day. "I like the old custom," said the squire, "not merely
because it is stately and pleasing in itself, but because it was observed
at the college at Oxford at which I was educated. When I hear the old song
chanted it brings to mind the time when I was young and gamesome, and the
noble old college hall, and my fellow-students loitering about in their
black gowns; many of whom, poor lads! are now in their graves."

[img[images/0315m.jpg]]

The parson, however, whose mind was not haunted by such associations, and
who was always more taken up with the text than the sentiment, objected to
the Oxonian's version of the carol, which he affirmed was different from
that sung at college. He went on, with the dry perseverance of a
commentator, to give the college reading, accompanied by sundry
annotations, addressing himself at first to the company at large; but,
finding their attention gradually diverted to other talk and other
objects, he lowered his tone as his number of auditors diminished, until
he concluded his remarks in an under voice to a fat-headed old gentleman
next him who was silently engaged in the discussion of a huge plateful of
turkey.*

"""
* The old ceremony of serving up the boar's head on
Christmas Day is still observed in the hall of Queen's
College, Oxford. I was favored by the parson with a copy of
the carol as now sung, and as it may be acceptable to such
of my readers as are curious in these grave and learned
matters, I give it entire:

The boar's head in hand bear I,
Bedeck'd with bays and rosemary
And I pray you, my masters, be merry
Quot estis in convivio
Caput apri defero,
Reddens laudes domino.

The boar's head, as I understand,
Is the rarest dish in all this land,
Which thus bedeck'd with a gay garland
Let us servire cantico.
Caput apri defero, etc.

Our steward hath provided this
In honor of the King of Bliss,
Which on this day to be served is
In Reginensi Atrio.
Caput apri defero, etc., etc., etc.
"""

The table was literally loaded with good cheer, and presented an epitome
of country abundance in this season of overflowing larders. A
distinguished post was allotted to "ancient sirloin," as mine host termed
it, being, as he added, "the standard of old English hospitality, and a
joint of goodly presence, and full of expectation." There were several
dishes quaintly decorated, and which had evidently something traditional
in their embellishments, but about which, as I did not like to appear
overcurious, I asked no questions.

I could not, however, but notice a pie magnificently decorated with
peacock's feathers, in imitation of the tail of that bird, which
overshadowed a considerable tract of the table. This, the squire confessed
with some little hesitation, was a pheasant pie, though a peacock pie was
certainly the most authentical; but there had been such a mortality among
the peacocks this season that he could not prevail upon himself to have
one killed.*

"""
* The peacock was anciently in great demand for stately
entertainments. Sometimes it was made into a pie, at one end
of which the head appeared above the crust in all its
plumage, with the beak richly gilt; at the other end the
tail was displayed. Such pies were served up at the solemn
banquets of chivalry, when knights-errant pledged themselves
to undertake any perilous enterprise, whence came the
ancient oath, used by Justice Shallow, "by cock and pie."
"""

The peacock was also an important dish for the Christmas feast; and
Massinger, in his "City Madam," gives some idea of the extravagance with
which this, as well as other dishes, was prepared for the gorgeous revels
of the olden times:

"""
Men may talk of Country Christmasses,
Their thirty pound butter'd eggs, their pies of carps' tongues;
Their pheasants drench'd with ambergris: the carcases of three
fat wethers bruised for gravy to make sauce for a single peacock!
"""

It would be tedious, perhaps, to my wiser readers, who may not have that
foolish fondness for odd and obsolete things to which I am a little given,
were I to mention the other makeshifts or this worthy old humorist, by
which he was endeavoring to follow up, though at humble distance, the
quaint customs of antiquity. I was pleased, however, to see the respect
shown to his whims by his children and relatives; who, indeed, entered
readily into the full spirit of them, and seemed all well versed in their
parts, having doubtless been present at many a rehearsal. I was amused,
too, at the air of profound gravity with which the butler and other
servants executed the duties assigned them, however eccentric. They had an
old-fashioned look, having, for the most part, been brought up in the
household and grown into keeping with the antiquated mansion and the
humors of its lord, and most probably looked upon all his whimsical
regulations as the established laws of honorable housekeeping.

When the cloth was removed the butler brought in a huge silver vessel of
rare and curious workmanship, which he placed before the squire. Its
appearance was hailed with acclamation, being the Wassail Bowl, so
renowned in Christmas festivity. The contents had been prepared by the
squire himself; for it was a beverage in the skilful mixture of which he
particularly prided himself, alleging that it was too abstruse and complex
for the comprehension of an ordinary servant. It was a potation, indeed,
that might well make the heart of a toper leap within him, being composed
of the richest and raciest wines, highly spiced and sweetened, with
roasted apples bobbing about the surface.*

"""
* The Wassail Bowl was sometimes composed of ale instead of
wine, with nutmeg, sugar, toast, ginger, and roasted crabs;
in this way the nut-brown beverage is still prepared in some
old families and round the hearths of substantial farmers at
Christmas. It is also called Lamb's Wool, and is celebrated
by Herrick in his "Twelfth Night":

Next crowne the bowle full
With gentle Lamb's Wool;
Add sugar, nutmeg, and ginger,
With store of ale too,
And thus ye must doe
To make the Wassaile a swinger.
"""

The old gentleman's whole countenance beamed with a serene look of
indwelling delight as he stirred this mighty bowl. Having raised it to his
lips, with a hearty wish of a merry Christmas to all present, he sent it
brimming round the board, for every one to follow his example, according
to the primitive style, pronouncing it "the ancient fountain of good
feeling, where all hearts met together."*

"""
* "The custom of drinking out of the same cup gave place to
each having his cup. When the steward came to the doore with
the Wassel, he was to cry three times, Wassel, Wassel,
Wassel, and then the chappell (chaplain) was to answer with
a song."&mdash;Archaeologia.
"""

There was much laughing and rallying as the honest emblem of Christmas
joviality circulated and was kissed rather coyly by the ladies. When it
reached Master Simon, he raised it in both hands, and with the air of a
boon companion struck up an old Wassail Chanson:

[img[images/0319m.jpg]]

"""
The brown bowle,
The merry brown bowle,
As it goes round-about-a,
Fill
Still,
Let the world say what it will,
And drink your fill all out-a.

The deep canne,
The merry deep canne,
As thou dost freely quaff-a,
Sing
Fling,
Be as merry as a king,
And sound a lusty laugh-a.*

* From Poor Robin's Almanack.
"""

Much of the conversation during dinner turned upon family topics, to which
I was a stranger. There was, however, a great deal of rallying of Master
Simon about some gay widow with whom he was accused of having a
flirtation. This attack was commenced by the ladies, but it was continued
throughout the dinner by the fat-headed old gentleman next the parson with
the persevering assiduity of a slow hound, being one of those long-winded
jokers who, though rather dull at starting game, are unrivalled for their
talents in hunting it down. At every pause in the general conversation he
renewed his bantering in pretty much the same terms, winking hard at me
with both eyes whenever he gave Master Simon what he considered a home
thrust. The latter, indeed, seemed fond of being teased on the subject, as
old bachelors are apt to be, and he took occasion to inform me, in an
undertone, that the lady in question was a prodigiously fine woman and
drove her own curricle.

The dinner-time passed away in this flow of innocent hilarity, and, though
the old hall may have resounded in its time with many a scene of broader
rout and revel, yet I doubt whether it ever witnessed more honest and
genuine enjoyment. How easy it is for one benevolent being to diffuse
pleasure around him! and how truly is a kind heart a fountain of gladness,
making everything in its vicinity to freshen into smiles! The joyous
disposition of the worthy squire was perfectly contagious; he was happy
himself, and disposed to make all the world happy, and the little
eccentricities of his humor did but season, in a manner, the sweetness of
his philanthropy.

When the ladies had retired, the conversation, as usual, became still more
animated; many good things were broached which had been thought of during
dinner, but which would not exactly do for a lady's ear; and, though I
cannot positively affirm that there was much wit uttered, yet I have
certainly heard many contests of rare wit produce much less laughter. Wit,
after all, is a mighty tart, pungent ingredient, and much too acid for
some stomachs; but honest good-humor is the oil and wine of a merry
meeting, and there is no jovial companionship equal to that where the
jokes are rather small and the laughter abundant.

The squire told several long stories of early college pranks and
adventures, in some of which the parson had been a sharer, though in
looking at the latter it required some effort of imagination to figure
such a little dark anatomy of a man into the perpetrator of a madcap
gambol. Indeed, the two college chums presented pictures of what men may
be made by their different lots in life. The squire had left the
university to live lustily on his paternal domains in the vigorous
enjoyment of prosperity and sunshine, and had flourished on to a hearty
and florid old age; whilst the poor parson, on the contrary, had dried and
withered away among dusty tomes in the silence and shadows of his study.
Still, there seemed to be a spark of almost extinguished fire feebly
glimmering in the bottom of his soul; and as the squire hinted at a sly
story of the parson and a pretty milkmaid whom they once met on the banks
of the Isis, the old gentleman made an "alphabet of faces," which, as far
as I could decipher his physiognomy, I verily believe was indicative of
laughter; indeed, I have rarely met with an old gentleman that took
absolute offence at the imputed gallantries of his youth.

I found the tide of wine and wassail fast gaining on the dry land of sober
judgment. The company grew merrier and louder as their jokes grew duller.
Master Simon was in as chirping a humor as a grasshopper filled with dew;
his old songs grew of a warmer complexion, and he began to talk maudlin
about the widow. He even gave a long song about the wooing of a widow
which he informed me he had gathered from an excellent black-letter work
entitled Cupid's Solicitor for Love, containing store of good advice for
bachelors, and which he promised to lend me; the first verse was to
effect.

"""
He that will woo a widow must not dally
He must make hay while the sun doth shine;
He must not stand with her, shall I, shall I,
But boldly say, Widow, thou must be mine.
"""

This song inspired the fat-headed old gentleman, who made several attempts
to tell a rather broad story out of Joe Miller that was pat to the
purpose; but he always stuck in the middle, everybody recollecting the
latter part excepting himself. The parson, too, began to show the effects
of good cheer, having gradually settled down into a doze and his wig
sitting most suspiciously on one side. Just at this juncture we were
summoned to the drawing room, and I suspect, at the private instigation of
mine host, whose joviality seemed always tempered with a proper love of
decorum.

After the dinner-table was removed the hall was given up to the younger
members of the family, who, prompted to all kind of noisy mirth by the
Oxonian and Master Simon, made its old walls ring with their merriment as
they played at romping games. I delight in witnessing the gambols of
children, and particularly at this happy holiday season, and could not
help stealing out of the drawing-room on hearing one of their peals of
laughter. I found them at the game of blindman's-buff. Master Simon, who
was the leader of their revels, and seemed on all occasions to fulfill the
office of that ancient potentate, the Lord of Misrule,* was blinded in the
midst of the hall. The little beings were as busy about him as the mock
fairies about Falstaff, pinching him, plucking at the skirts of his coat,
and tickling him with straws. One fine blue-eyed girl of about thirteen,
with her flaxen hair all in beautiful confusion, her frolic face in a
glow, her frock half torn off her shoulders, a complete picture of a romp,
was the chief tormentor; and, from the slyness with which Master Simon
avoided the smaller game and hemmed this wild little nymph in corners, and
obliged her to jump shrieking over chairs, I suspected the rogue of being
not a whit more blinded than was convenient.

"""
* At Christmasse there was in the Kinges house, wheresoever
hee was lodged, a lorde of misrule or mayster of merie
disportes, and the like had ye in the house of every
nobleman of honor, or good worshipper were he spirituall or
temporall.&mdash;STOW.
"""

When I returned to the drawing-room I found the company seated round the
fire listening to the parson, who was deeply ensconced in a high-backed
oaken chair, the work of some cunning artificer of yore, which had been
brought from the library for his particular accommodation. From this
venerable piece of furniture, with which his shadowy figure and dark
weazen face so admirably accorded, he was dealing out strange accounts of
the popular superstitions and legends of the surrounding country, with
which he had become acquainted in the course of his antiquarian
researches. I am half inclined to think that the old gentleman was himself
somewhat tinctured with superstition, as men are very apt to be who live a
recluse and studious life in a sequestered part of the country and pore
over black-letter tracts, so often filled with the marvelous and
supernatural. He gave us several anecdotes of the fancies of the
neighboring peasantry concerning the effigy of the crusader which lay on
the tomb by the church altar. As it was the only monument of the kind in
that part of the country, it had always been regarded with feelings of
superstition by the good wives of the village. It was said to get up from
the tomb and walk the rounds of the churchyard in stormy nights,
particularly when it thundered; and one old woman, whose cottage bordered
on the churchyard, had seen it through the windows of the church, when the
moon shone, slowly pacing up and down the aisles. It was the belief that
some wrong had been left unredressed by the deceased, or some treasure
hidden, which kept the spirit in a state of trouble and restlessness. Some
talked of gold and jewels buried in the tomb, over which the spectre kept
watch; and there was a story current of a sexton in old times who
endeavored to break his way to the coffin at night, but just as he reached
it received a violent blow from the marble hand of the effigy, which
stretched him senseless on the pavement. These tales were often laughed at
by some of the sturdier among the rustics, yet when night came on there
were many of the stoutest unbelievers that were shy of venturing alone in
the footpath that led across the churchyard.

From these and other anecdotes that followed the crusader appeared to be
the favorite hero of ghost-stories throughout the vicinity. His picture,
which hung up in the hall, was thought by the servants to have something
supernatural about it; for they remarked that in whatever part of the hall
you went the eyes of the warrior were still fixed on you. The old porter's
wife, too, at the lodge, who had been born and brought up in the family,
and was a great gossip among the maid-servants, affirmed that in her young
days she had often heard say that on Midsummer Eve, when it was well known
all kinds of ghosts, goblins, and fairies become visible and walk abroad,
the crusader used to mount his horse, come down from his picture, ride
about the house, down the avenue, and so to the church to visit the tomb;
on which occasion the church-door most civilly swung open of itself; not
that he needed it, for he rode through closed gates, and even stone walls,
and had been seen by one of the dairymaids to pass between two bars of the
great park gate, making himself as thin as a sheet of paper.

All these superstitions I found had been very much countenanced by the
squire, who, though not superstitious himself, was very fond of seeing
others so. He listened to every goblin tale of the neighboring gossips
with infinite gravity, and held the porter's wife in high favor on account
of her talent for the marvellous. He was himself a great reader of old
legends and romances, and often lamented that he could not believe in
them; for a superstitious person, he thought, must live in a kind of
fairy-land.

Whilst we were all attention to the parson's stories, our ears were
suddenly assailed by a burst of heterogeneous sounds from the hall, in
which were mingled something like the clang of rude minstrelsy with the
uproar of many small voices and girlish laughter. The door suddenly flew
open, and a train came trooping into the room that might almost have been
mistaken for the breaking up of the court of Faery. That indefatigable
spirit, Master Simon, in the faithful discharge of his duties as lord of
misrule, had conceived the idea of a Christmas mummery or masking; and
having called in to his assistance the Oxonian and the young officer, who
were equally ripe for anything that should occasion romping and merriment,
they had carried it into instant effect. The old housekeeper had been
consulted; the antique clothespresses and wardrobes rummaged and made to
yield up the relics of finery that had not seen the light for several
generations; the younger part of the company had been privately convened
from the parlor and hall, and the whole had been bedizened out into a
burlesque imitation of an antique mask.*

"""
* Maskings or mummeries were favorite sports at Christmas in
old times, and the wardrobes at halls and manor-houses were
often laid under contribution to furnish dresses and
fantastic disguisings. I strongly suspect Master Simon to
have taken the idea of his from Ben Jonson's "Masque of
Christmas."
"""

Master Simon led the van, as "Ancient Christmas," quaintly apparelled in a
ruff, a short cloak, which had very much the aspect of one of the old
housekeeper's petticoats, and a hat that might have served for a village
steeple, and must indubitably have figured in the days of the Covenanters.
From under this his nose curved boldly forth, flushed with a frost-bitten
bloom that seemed the very trophy of a December blast. He was accompanied
by the blue-eyed romp, dished up, as "Dame Mince Pie," in the venerable
magnificence of a faded brocade, long stomacher, peaked hat, and
high-heeled shoes. The young officer appeared as Robin Hood, in a sporting
dress of Kendal green and a foraging cap with a gold tassel.

The costume, to be sure, did not bear testimony to deep research, and
there was an evident eye to the picturesque, natural to a young gallant in
the presence of his mistress. The fair Julia hung on his arm in a pretty
rustic dress as "Maid Marian." The rest of the train had been
metamorphosed in various ways; the girls trussed up in the finery of the
ancient belles of the Bracebridge line, and the striplings bewhiskered
with burnt cork, and gravely clad in broad skirts, hanging sleeves, and
full-bottomed wigs, to represent the character of Roast Beef, Plum
Pudding, and other worthies celebrated in ancient maskings. The whole was
under the control of the Oxonian in the appropriate character of Misrule;
and I observed that he exercised rather a mischievous sway with his wand
over the smaller personages of the pageant.

The irruption of this motley crew with beat of drum, according to ancient
custom, was the consummation of uproar and merriment. Master Simon covered
himself with glory by the stateliness with which, as Ancient Christmas, he
walked a minuet with the peerless though giggling Dame Mince Pie. It was
followed by a dance of all the characters, which from its medley of
costumes seemed as though the old family portraits had skipped down from
their frames to join in the sport. Different centuries were figuring at
cross hands and right and left; the Dark Ages were cutting pirouettes and
rigadoons; and the days of Queen Bess jigging merrily down the middle
through a line of succeeding generations.

The worthy squire contemplated these fantastic sports and this
resurrection of his old wardrobe with the simple relish of childish
delight. He stood chuckling and rubbing his hands, and scarcely hearing a
word the parson said, notwithstanding that the latter was discoursing most
authentically on the ancient and stately dance of the Pavon, or peacock,
from which he conceived the minuet to be derived.* For my part, I was in a
continual excitement from the varied scenes of whim and innocent gayety
passing before me. It was inspiring to see wild-eyed frolic and
warm-hearted hospitality breaking out from among the chills and glooms of
winter, and old age throwing off his apathy and catching once more the
freshness of youthful enjoyment. I felt also an interest in the scene from
the consideration that these fleeting customs were posting fast into
oblivion, and that this was perhaps the only family in England in which
the whole of them was still punctiliously observed. There was a
quaintness, too, mingled with all this revelry that gave it a peculiar
zest: it was suited to the time and place; and as the old manor-house
almost reeled with mirth and wassail, it seemed echoing back the joviality
of long departed years.+

"""
* Sir John Hawkins, speaking of the dance called the Pavon,
from pavo, a peacock, says, "It is a grave and majestic
dance; the method of dancing it anciently was by gentlemen
dressed with caps and swords, by those of the long robe in
their gowns, by the peers in their mantles, and by the
ladies in gowns with long trains, the motion whereof, in
dancing, resembled that of a peacock."&mdash;History of Music.

+ At the time of the first publication of this paper the
picture of an old-fashioned Christmas in the country was
pronounced by some as out of date. The author had afterwards
an opportunity of witnessing almost all the customs above
described, existing in unexpected vigor in the skirts of
Derbyshire and Yorkshire, where he passed the Christmas
holidays. The reader will find some notice of them in the
author's account of his sojourn at Newstead Abbey.
"""

But enough of Christmas and its gambols; it is time for me to pause in
this garrulity. Methinks I hear the questions asked by my graver readers,
"To what purpose is all this? how is the world to be made wiser by this
talk?" Alas! is there not wisdom enough extant for the instruction of the
world? And if not, are there not thousands of abler pens laboring for its
improvement? It is so much pleasanter to please than to instruct&mdash;to
play the companion rather than the preceptor.

What, after all, is the mite of wisdom that I could throw into the mass of
knowledge! or how am I sure that my sagest deductions may be safe guides
for the opinions of others? But in writing to amuse, if I fail the only
evil is in my own disappointment. If, however, I can by any lucky chance,
in these days of evil, rub out one wrinkle from the brow of care or
beguile the heavy heart of one moment of sorrow; if I can now and then
penetrate through the gathering film of misanthropy, prompt a benevolent
view of human nature, and make my reader more in good-humor with his
fellow-beings and himself&mdash;surely, surely, I shall not then have
written entirely in vain.
[img[images/0155m.jpg]]

"""
A gentleman!
What o' the woolpack? or the sugar-chest?
Or lists of velvet? which is 't, pound, or yard,
You vend your gentry by?
BEGGAR'S BUSH.
"""

[img[images/9155m.jpg]]

THERE are few places more favorable to the study of character than an
English country church. I was once passing a few weeks at the seat of a
friend who resided in, the vicinity of one the appearance of which
particularly struck my fancy. It was one of those rich morsels of quaint
antiquity, which gives such a peculiar charm to English landscape. It
stood in the midst of a country filled with ancient families, and
contained within its cold and silent aisles the congregated dust of many
noble generations. The interior walls were encrusted with monuments of
every age and style. The light streamed through windows dimmed with
armorial bearings, richly emblazoned in stained glass. In various parts of
the church were tombs of knights, and highborn dames, of gorgeous
workmanship, with their effigies in colored marble. On every side, the eye
was struck with some instance of aspiring mortality, some haughty memorial
which human pride had erected over its kindred dust in this temple of the
most humble of all religions.

The congregation was composed of the neighboring people of rank, who sat
in pews sumptuously lined and cushioned, furnished with richly-gilded
prayer-books, and decorated with their arms upon the pew doors; of the
villagers and peasantry, who filled the back seats and a small gallery
beside the organ; and of the poor of the parish, who were ranged on
benches in the aisles.

The service was performed by a snuffling, well-fed vicar, who had a snug
dwelling near the church. He was a privileged guest at all the tables of
the neighborhood, and had been the keenest fox-hunter in the country,
until age and good living had disabled him from doing anything more than
ride to see the hounds throw off, and make one at the hunting dinner.

Under the ministry of such a pastor, I found it impossible to get into the
train of thought suitable to the time and place; so, having, like many
other feeble Christians, compromised with my conscience, by laying the sin
of my own delinquency at another person's threshold, I occupied myself by
making observations on my neighbors.

I was as yet a stranger in England, and curious to notice the manners of
its fashionable classes. I found, as usual, that there was the least
pretension where there was the most acknowledged title to respect. I was
particularly struck, for instance, with the family of a nobleman of high
rank, consisting of several sons and daughters. Nothing could be more
simple and unassuming than their appearance. They generally came to church
in the plainest equipage, and often on foot. The young ladies would stop
and converse in the kindest manner with the peasantry, caress the
children, and listen to the stories of the humble cottagers. Their
countenances were open and beautifully fair, with an expression of high
refinement, but at the same time a frank cheerfulness and engaging
affability. Their brothers were tall, and elegantly formed. They were
dressed fashionably, but simply&mdash;with strict neatness and propriety,
but without any mannerism or foppishness. Their whole demeanor was easy
and natural, with that lofty grace and noble frankness which bespeak
free-born souls that have never been checked in their growth by feelings
of inferiority. There is a healthful hardiness about real dignity, that
never dreads contact and communion with others, however humble. It is only
spurious pride that is morbid and sensitive, and shrinks from every touch.
I was pleased to see the manner in which they would converse with the
peasantry about those rural concerns and field-sports in which the
gentlemen of the country so much delight. In these conversations there was
neither haughtiness on the one part, nor servility on the other, and you
were only reminded of the difference of rank by the habitual respect of
the peasant.

In contrast to these was the family of a wealthy citizen, who had amassed
a vast fortune, and, having purchased the estate and mansion of a ruined
nobleman in the neighborhood, was endeavoring to assume all the style and
dignity of an hereditary lord of the soil. The family always came to
church en prince. They were rolled majestically along in a carriage
emblazoned with arms. The crest glittered in silver radiance from every
part of the harness where a crest could possibly be placed. A fat
coachman, in a three-cornered hat richly laced and a flaxen wig, curling
close round his rosy face, was seated on the box, with a sleek Danish dog
beside him. Two footmen in gorgeous liveries, with huge bouquets, and
gold-headed canes, lolled behind. The carriage rose and sunk on its long
springs with a peculiar stateliness of motion. The very horses champed
their bits, arched their necks, and glanced their eyes more proudly than
common horses; either because they had caught a little of the family
feeling, or were reined up more tightly than ordinary.

I could not but admire the style with which this splendid pageant was
brought up to the gate of the churchyard. There was a vast effect produced
at the turning of an angle of the wall&mdash;a great smacking of the whip,
straining and scrambling of the horses, glistening of harness, and
flashing of wheels through gravel. This was the moment of triumph and
vainglory to the coachman. The horses were urged and checked, until they
were fretted into a foam. They threw out their feet in a prancing trot,
dashing about pebbles at every step. The crowd of villagers sauntering
quietly to church opened precipitately to the right and left, gaping in
vacant admiration. On reaching the gate, the horses were pulled up with a
suddenness that produced an immediate stop, and almost threw them on their
haunches.

[img[images/0159m.jpg]]

There was an extraordinary hurry of the footmen to alight, pull down the
steps, and prepare everything for the descent on earth of this august
family. The old citizen first emerged his round red face from out the
door, looking about him with the pompous air of a man accustomed to rule
on 'Change, and shake the Stock Market with a nod. His consort, a fine,
fleshy, comfortable dame, followed him. There seemed, I must confess, but
little pride in her composition. She was the picture of broad, honest,
vulgar enjoyment. The world went well with her; and she liked the world.
She had fine clothes, a fine house, a fine carriage, fine children&mdash;everything
was fine about her: it was nothing but driving about and visiting and
feasting. Life was to her a perpetual revel; it was one long Lord Mayor's
Day.

Two daughters succeeded to this goodly couple. They certainly were
handsome, but had a supercilious air that chilled admiration and disposed
the spectator to be critical. They were ultrafashionable in dress, and,
though no one could deny the richness of their decorations, yet their
appropriateness might be questioned amidst the simplicity of a country
church. They descended loftily from the carriage, and moved up the line of
peasantry with a step that seemed dainty of the soil it trod on. They cast
an excursive glance around, that passed coldly over the burly faces of the
peasantry, until they met the eyes of the nobleman's family, when their
countenances immediately brightened into smiles, and they made the most
profound and elegant courtesies, which were returned in a manner that
showed they were but slight acquaintances.

I must not forget the two sons of this inspiring citizen, who came to
church in a dashing curricle with outriders. They were arrayed in the
extremity of the mode, with all that pedantry of dress which marks the man
of questionable pretensions to style. They kept entirely by themselves,
eying every one askance that came near them, as if measuring his claims to
respectability; yet they were without conversation, except the exchange of
an occasional cant phrase. They even moved artificially, for their bodies,
in compliance with the caprice of the day, had been disciplined into the
absence of all ease and freedom. Art had done everything to accomplish
them as men of fashion, but Nature had denied them the nameless grace.
They were vulgarly shaped, like men formed for the common purposes of
life, and had that air of supercilious assumption which is never seen in
the true gentleman.

I have been rather minute in drawing the pictures of these two families,
because I considered them specimens of what is often to be met with in
this country&mdash;the unpretending great, and the arrogant little. I have
no respect for titled rank, unless it be accompanied with true nobility of
soul; but I have remarked, in all countries where artificial distinctions
exist, that the very highest classes are always the most courteous and
unassuming. Those who are well assured of their own standing are least apt
to trespass on that of others; whereas, nothing is so offensive as the
aspirings of vulgarity, which thinks to elevate itself by humiliating its
neighbor.

As I have brought these families into contrast, I must notice their
behavior in church. That of the nobleman's family was quiet, serious, and
attentive. Not that they appeared to have any fervor of devotion, but
rather a respect for sacred things, and sacred places, inseparable from
good-breeding. The others, on the contrary, were in a perpetual flutter
and whisper; they betrayed a continual consciousness of finery, and the
sorry ambition of being the wonders of a rural congregation.

The old gentleman was the only one really attentive to the service. He
took the whole burden of family devotion upon himself; standing bolt
upright, and uttering the responses with a loud voice that might be heard
all over the church. It was evident that he was one of these thorough
Church-and-king men, who connect the idea of devotion and loyalty; who
consider the Deity, somehow or other, of the government party, and
religion "a very excellent sort of thing, that ought to be countenanced
and kept up."

When he joined so loudly in the service, it seemed more by way of example
to the lower orders, to show them that, though so great and wealthy, he
was not above being religious; as I have seen a turtle-fed alderman
swallow publicly a basin of charity soup, smacking his lips at every
mouthful and pronouncing it "excellent food for the poor."

When the service was at an end, I was curious to witness the several exits
of my groups. The young noblemen and their sisters, as the day was fine,
preferred strolling home across the fields, chatting with the country
people as they went. The others departed as they came, in grand parade.
Again were the equipages wheeled up to the gate. There was again the
smacking of whips, the clattering of hoofs, and the glittering of harness.
The horses started off almost at a bound; the villagers again hurried to
right and left; the wheels threw up a cloud of dust, and the aspirin
family was rapt out of sight in a whirlwind.

[img[images/0162m.jpg]]
"""
Shall I not take mine ease in mine inn?
FALSTAFF.
"""

[img[images/9221m.jpg]]

DURING a journey that I once made through the Netherlands, I had arrived
one evening at the Pomme d'Or, the principal inn of a small Flemish
village. It was after the hour of the table d'hote, so that I was obliged
to make a solitary supper from the relics of its ampler board. The weather
was chilly; I was seated alone in one end of a great gloomy dining-room,
and, my repast being over, I had the prospect before me of a long dull
evening, without any visible means of enlivening it. I summoned mine host
and requested something to read; he brought me the whole literary stock of
his household, a Dutch family Bible, an almanac in the same language, and
a number of old Paris newspapers. As I sat dozing over one of the latter,
reading old news and stale criticisms, my ear was now and then struck with
bursts of laughter which seemed to proceed from the kitchen. Every one
that has travelled on the Continent must know how favorite a resort the
kitchen of a country inn is to the middle and inferior order of
travellers, particularly in that equivocal kind of weather when a fire
becomes agreeable toward evening. I threw aside the newspaper and explored
my way to the kitchen, to take a peep at the group that appeared to be so
merry. It was composed partly of travellers who had arrived some hours
before in a diligence, and partly of the usual attendants and hangers-on
of inns. They were seated round a great burnished stove, that might have
been mistaken for an altar at which they were worshipping. It was covered
with various kitchen vessels of resplendent brightness, among which
steamed and hissed a huge copper tea-kettle. A large lamp threw a strong
mass of light upon the group, bringing out many odd features in strong
relief. Its yellow rays partially illumined the spacious kitchen, dying
duskily away into remote corners, except where they settled in mellow
radiance on the broad side of a flitch of bacon or were reflected back
from well-scoured utensils that gleamed from the midst of obscurity. A
strapping Flemish lass, with long golden pendants in her ears and a
necklace with a golden heart suspended to it, was the presiding priestess
of the temple.

Many of the company were furnished with pipes, and most of them with some
kind of evening potation. I found their mirth was occasioned by anecdotes
which a little swarthy Frenchman, with a dry weazen face and large
whiskers, was giving of his love-adventures; at the end of each of which
there was one of those bursts of honest unceremonious laughter in which a
man indulges in that temple of true liberty, an inn.

[img[images/0223m.jpg]]

As I had no better mode of getting through a tedious blustering evening, I
took my seat near the stove, and listened to a variety of travellers'
tales, some very extravagant and most very dull. All of them, however,
have faded from my treacherous memory except one, which I will endeavor to
relate. I fear, however, it derived its chief zest from the manner in
which it was told, and the peculiar air and appearance of the narrator. He
was a corpulent old Swiss, who had the look of a veteran traveller. He was
dressed in a tarnished green travelling-jacket, with a broad belt round
his waist, and a pair of overalls with buttons from the hips to the
ankles. He was of a full rubicund countenance, with a double chin,
aquiline nose, and a pleasant twinkling eye. His hair was light, and
curled from under an old green velvet travelling-cap stuck on one side of
his head. He was interrupted more than once by the arrival of guests or
the remarks of his auditors, and paused now and then to replenish his
pipe; at which times he had generally a roguish leer and a sly joke for
the buxom kitchen-maid.

I wish my readers could imagine the old fellow lolling in a huge
arm-chair, one arm a-kimbo, the other holding a curiously twisted
tobacco-pipe formed of genuine ecume de mer, decorated with silver chain
and silken tassel, his head cocked on one side, and a whimsical cut of the
eye occasionally as he related the following story.
(FOUND AMONG THE PAPERS OF THE LATE DIEDRICH KNICKERBOCKER.)

"""
A pleasing land of drowsy-head it was,
Of dreams that wave before the half-shut eye,
And of gay castles in the clouds that pays,
For ever flushing round a summer sky.
Castle of Indolence
"""

[img[images/9463m.jpg]]

IN the bosom of one of those spacious coves which indent the eastern shore
of the Hudson, at that broad expansion of the river denominated by the
ancient Dutch navigators the Tappan Zee, and where they always prudently
shortened sail and implored the protection of St. Nicholas when they
crossed, there lies a small market-town or rural port which by some is
called Greensburg, but which is more generally and properly known by the
name of Tarry Town. This name was given, we are told, in former days by
the good housewives of the adjacent country from the inveterate propensity
of their husbands to linger about the village tavern on market days. Be
that as it may, I do not vouch for the fact, but merely advert to it for
the sake of being precise and authentic. Not far from this village,
perhaps about two miles, there is a little valley, or rather lap of land,
among high hills, which is one of the quietest places in the whole world.
A small brook glides through it, with just murmur enough to lull one to
repose, and the occasional whistle of a quail or tapping of a woodpecker
is almost the only sound that ever breaks in upon the uniform
tranquillity.

I recollect that when a stripling my first exploit in squirrel-shooting
was in a grove of tall walnut trees that shades one side of the valley. I
had wandered into it at noontime, when all Nature is peculiarly quiet, and
was startled by the roar of my own gun as it broke the Sabbath stillness
around and was prolonged and reverberated by the angry echoes. If ever I
should wish for a retreat whither I might steal from the world and its
distractions and dream quietly away the remnant of a troubled life, I know
of none more promising than this little valley.

From the listless repose of the place and the peculiar character of its
inhabitants, who are descendants from the original Dutch settlers, this
sequestered glen has long been known by the name of SLEEPY HOLLOW, and its
rustic lads are called the Sleepy Hollow Boys throughout all the
neighboring country. A drowsy, dreamy influence seems to hang over the
land and to pervade the very atmosphere. Some say that the place was
bewitched by a High German doctor during the early days of the settlement;
others, that an old Indian chief, the prophet or wizard of his tribe, held
his powwows there before the country was discovered by Master Hendrick
Hudson. Certain it is, the place still continues under the sway of some
witching power that holds a spell over the minds of the good people,
causing them to walk in a continual reverie. They are given to all kinds
of marvellous beliefs, are subject to trances and visions, and frequently
see strange sights and hear music and voices in the air. The whole
neighborhood abounds with local tales, haunted spots, and twilight
superstitions; stars shoot and meteors glare oftener across the valley
than in any other part of the country, and the nightmare, with her whole
ninefold, seems to make it the favorite scene of her gambols.

The dominant spirit, however, that haunts this enchanted region, and seems
to be commander-in-chief of all the powers of the air, is the apparition
of a figure on horseback without a head. It is said by some to be the
ghost of a Hessian trooper whose head had been carried away by a
cannonball in some nameless battle during the Revolutionary War, and who
is ever and anon seen by the country-folk hurrying along in the gloom of
night as if on the wings of the wind. His haunts are not confined to the
valley, but extend at times to the adjacent roads, and especially to the
vicinity of a church at no great distance. Indeed, certain of the most
authentic historians of those parts, who have been careful in collecting
and collating the floating facts concerning this spectre, allege that the
body of the trooper, having been buried in the churchyard, the ghost rides
forth to the scene of battle in nightly quest of his head, and that the
rushing speed with which he sometimes passes along the Hollow, like a
midnight blast, is owing to his being belated and in a hurry to get back
to the churchyard before daybreak.

Such is the general purport of this legendary superstition, which has
furnished materials for many a wild story in that region of shadows; and
the spectre is known at all the country firesides by the name of the
Headless Horseman of Sleepy Hollow.

It is remarkable that the visionary propensity I have mentioned is not
confined to the native inhabitants of the valley, but is unconsciously
imbibed by every one who resides there for a time. However wide awake they
may have been before they entered that sleepy region, they are sure in a
little time to inhale the witching influence of the air and begin to grow
imaginative&mdash;to dream dreams and see apparitions.

I mention this peaceful spot with all possible laud, for it is in such
little retired Dutch valleys, found here and there embosomed in the great
State of New York, that population, manners, and customs remain fixed,
while the great torrent of migration and improvement, which is making such
incessant changes in other parts of this restless country, sweeps by them
unobserved. They are like those little nooks of still water which border a
rapid stream where we may see the straw and bubble riding quietly at
anchor or slowly revolving in their mimic harbor, undisturbed by the rush
of the passing current. Though many years have elapsed since I trod the
drowsy shades of Sleepy Hollow, yet I question whether I should not still
find the same trees and the same families vegetating in its sheltered
bosom.

[img[images/0467m.jpg]]

In this by-place of Nature there abode, in a remote period of American
history&mdash;that is to say, some thirty years since&mdash;a worthy wight
of the name of Ichabod Crane, who sojourned, or, as he expressed it,
"tarried," in Sleepy Hollow for the purpose of instructing the children of
the vicinity. He was a native of Connecticut, a State which supplies the
Union with pioneers for the mind as well as for the forest, and sends
forth yearly its legions of frontier woodmen and country schoolmasters.
The cognomen of Crane was not inapplicable to his person. He was tall, but
exceedingly lank, with narrow shoulders, long arms and legs, hands that
dangled a mile out of his sleeves, feet that might have served for
shovels, and his whole frame most loosely hung together. His head was
small, and flat at top, with huge ears, large green glassy eyes, and a
long snip nose, so that it looked like a weathercock perched upon his
spindle neck to tell which way the wind blew. To see him striding along
the profile of a hill on a windy day, with his clothes bagging and
fluttering about him, one might have mistaken him for the genius of Famine
descending upon the earth or some scarecrow eloped from a cornfield.

His school-house was a low building of one large room, rudely constructed
of logs, the windows partly glazed and partly patched with leaves of old
copybooks. It was most ingeniously secured at vacant hours by a withe
twisted in the handle of the door and stakes set against the
window-shutters, so that, though a thief might get in with perfect ease,
he would find some embarrassment in getting out&mdash;-an idea most
probably borrowed by the architect, Yost Van Houten, from the mystery of
an eel-pot. The school-house stood in a rather lonely but pleasant
situation, just at the foot of a woody hill, with a brook running close by
and a formidable birch tree growing at one end of it. From hence the low
murmur of his pupils' voices, conning over their lessons, might be heard
in a drowsy summer's day like the hum of a bee-hive, interrupted now and
then by the authoritative voice of the master in the tone of menace or
command, or, peradventure, by the appalling sound of the birch as he urged
some tardy loiterer along the flowery path of knowledge. Truth to say, he
was a conscientious man, and ever bore in mind the golden maxim, "Spare
the rod and spoil the child." Ichabod Crane's scholars certainly were not
spoiled.

I would not have it imagined, however, that he was one of those cruel
potentates of the school who joy in the smart of their subjects; on the
contrary, he administered justice with discrimination rather than
severity, taking the burden off the backs of the weak and laying it on
those of the strong. Your mere puny stripling, that winced at the least
flourish of the rod, was passed by with indulgence; but the claims of
justice were satisfied by inflicting a double portion on some little
tough, wrong-headed, broad-skirted Dutch urchin, who sulked and swelled
and grew dogged and sullen beneath the birch. All this he called "doing
his duty by their parents;" and he never inflicted a chastisement without
following it by the assurance, so consolatory to the smarting urchin, that
"he would remember it and thank him for it the longest day he had to
live."

When school-hours were over he was even the companion and playmate of the
larger boys, and on holiday afternoons would convoy some of the smaller
ones home who happened to have pretty sisters or good housewives for
mothers noted for the comforts of the cupboard. Indeed it behooved him to
keep on good terms with his pupils. The revenue arising from his school
was small, and would have been scarcely sufficient to furnish him with
daily bread, for he was a huge feeder, and, though lank, had the dilating
powers of an anaconda; but to help out his maintenance he was, according
to country custom in those parts, boarded and lodged at the houses of the
farmers whose children he instructed. With these he lived successively a
week at a time, thus going the rounds of the neighborhood with all his
worldly effects tied up in a cotton handkerchief.

That all this might not be too onerous on the purses of his rustic
patrons, who are apt to consider the costs of schooling a grievous burden
and schoolmasters as mere drones, he had various ways of rendering himself
both useful and agreeable. He assisted the farmers occasionally in the
lighter labors of their farms, helped to make hay, mended the fences, took
the horses to water, drove the cows from pasture, and cut wood for the
winter fire. He laid aside, too, all the dominant dignity and absolute
sway with which he lorded it in his little empire, the school, and became
wonderfully gentle and ingratiating. He found favor in the eyes of the
mothers by petting the children, particularly the youngest; and like the
lion bold, which whilom so magnanimously the lamb did hold, he would sit
with a child on one knee and rock a cradle with his foot for whole hours
together.

In addition to his other vocations, he was the singing-master of the
neighborhood and picked up many bright shillings by instructing the young
folks in psalmody. It was a matter of no little vanity to him on Sundays
to take his station in front of the church-gallery with a band of chosen
singers, where, in his own mind, he completely carried away the palm from
the parson. Certain it is, his voice resounded far above all the rest of
the congregation, and there are peculiar quavers still to be heard in that
church, and which may even be heard half a mile off, quite to the opposite
side of the mill-pond on a still Sunday morning, which are said to be
legitimately descended from the nose of Ichabod Crane. Thus, by divers
little makeshifts in that ingenious way which is commonly denominated "by
hook and by crook," the worthy pedagogue got on tolerably enough, and was
thought, by all who understood nothing of the labor of headwork, to have a
wonderfully easy life of it.

The schoolmaster is generally a man of some importance in the female
circle of a rural neighborhood, being considered a kind of idle,
gentleman-like personage of vastly superior taste and accomplishments to
the rough country swains, and, indeed, inferior in learning only to the
parson. His appearance, therefore, is apt to occasion some little stir at
the tea-table of a farmhouse and the addition of a supernumerary dish of
cakes or sweetmeats, or, peradventure, the parade of a silver tea-pot. Our
man of letters, therefore, was peculiarly happy in the smiles of all the
country damsels. How he would figure among them in the churchyard between
services on Sundays, gathering grapes for them from the wild vines that
overrun the surrounding trees; reciting for their amusement all the
epitaphs on the tombstones; or sauntering, with a whole bevy of them,
along the banks of the adjacent mill-pond, while the more bashful country
bumpkins hung sheepishly back, envying his superior elegance and address.

From his half-itinerant life, also, he was a kind of travelling gazette,
carrying the whole budget of local gossip from house to house, so that his
appearance was always greeted with satisfaction. He was, moreover,
esteemed by the women as a man of great erudition, for he had read several
books quite through, and was a perfect master of Cotton Mather's History
of New England Witchcraft, in which, by the way, he most firmly and
potently believed.

He was, in fact, an odd mixture of small shrewdness and simple credulity.
His appetite for the marvellous and his powers of digesting it were
equally extraordinary, and both had been increased by his residence in
this spellbound region. No tale was too gross or monstrous for his
capacious swallow. It was often his delight, after his school was
dismissed in the afternoon, to stretch himself on the rich bed of clover
bordering the little brook that whimpered by his school-house, and there
con over old Mather's direful tales until the gathering dusk of the
evening made the printed page a mere mist before his eyes. Then, as he
wended his way by swamp and stream and awful woodland to the farmhouse
where he happened to be quartered, every sound of Nature at that witching
hour fluttered his excited imagination&mdash;the moan of the
whip-poor-will* from the hillside; the boding cry of the tree-toad, that
harbinger of storm; the dreary hooting of the screech-owl, or the sudden
rustling in the thicket of birds frightened from their roost. The
fire-flies, too, which sparkled most vividly in the darkest places, now
and then startled him as one of uncommon brightness would stream across
his path; and if, by chance, a huge blockhead of a beetle came winging his
blundering flight against him, the poor varlet was ready to give up the
ghost, with the idea that he was struck with a witch's token. His only
resource on such occasions, either to drown thought or drive away evil
spirits, was to sing psalm tunes; and the good people of Sleepy Hollow, as
they sat by their doors of an evening, were often filled with awe at
hearing his nasal melody, "in linked sweetness long drawn out," floating
from the distant hill or along the dusky road.

"""
* The whip-poor-will is a bird which is only heard at night.
It receives its name from its note, which is thought to
resemble those words.
"""

Another of his sources of fearful pleasure was to pass long winter
evenings with the old Dutch wives as they sat spinning by the fire, with a
row of apples roasting and spluttering along the hearth, and listen to
their marvellous tales of ghosts and goblins, and haunted fields, and
haunted brooks, and haunted bridges, and haunted houses, and particularly
of the headless horseman, or Galloping Hessian of the Hollow, as they
sometimes called him. He would delight them equally by his anecdotes of
witchcraft and of the direful omens and portentous sights and sounds in
the air which prevailed in the earlier times of Connecticut, and would
frighten them woefully with speculations upon comets and shooting stars,
and with the alarming fact that the world did absolutely turn round and
that they were half the time topsy-turvy.

But if there was a pleasure in all this while snugly cuddling in the
chimney-corner of a chamber that was all of a ruddy glow from the
crackling wood-fire, and where, of course, no spectre dared to show its
face, it was dearly purchased by the terrors of his subsequent walk
homewards. What fearful shapes and shadows beset his path amidst the dim
and ghastly glare of a snowy night! With what wistful look did be eye
every trembling ray of light streaming across the waste fields from some
distant window! How often was he appalled by some shrub covered with snow,
which, like a sheeted spectre, beset his very path! How often did he
shrink with curdling awe at the sound of his own steps on the frosty crust
beneath his feet, and dread to look over his shoulder, lest he should
behold some uncouth being tramping close behind him! And how often was he
thrown into complete dismay by some rushing blast howling among the trees,
in the idea that it was the Galloping Hessian on one of his nightly
scourings!

All these, however, were mere terrors of the night, phantoms of the mind
that walk in darkness; and though he had seen many spectres in his time,
and been more than once beset by Satan in divers shapes in his lonely
perambulations, yet daylight put an end to all these evils; and he would
have passed a pleasant life of it, in despite of the devil and all his
works, if his path had not been crossed by a being that causes more
perplexity to mortal man than ghosts, goblins, and the whole race of
witches put together, and that was&mdash;a woman.

[img[images/0474m.jpg]]

Among the musical disciples who assembled one evening in each week to
receive his instructions in psalmody was Katrina Van Tassel, the daughter
and only child of a substantial Dutch farmer. She was a blooming lass of
fresh eighteen, plump as a partridge, ripe and melting and rosy-cheeked as
one of her father's peaches, and universally famed, not merely for her
beauty, but her vast expectations. She was withal a little of a coquette,
as might be perceived even in her dress, which was a mixture of ancient
and modern fashions, as most suited to set off her charms. She wore the
ornaments of pure yellow gold which her great-great-grandmother had
brought over from Saardam, the tempting stomacher of the olden time, and
withal a provokingly short petticoat to display the prettiest foot and
ankle in the country round.

Ichabod Crane had a soft and foolish heart towards the sex, and it is not
to be wondered at that so tempting a morsel soon found favor in his eyes,
more especially after he had visited her in her paternal mansion. Old
Baltus Van Tassel was a perfect picture of a thriving, contented,
liberal-hearted farmer. He seldom, it is true, sent either his eyes or his
thoughts beyond the boundaries of his own farm, but within those
everything was snug, happy, and well-conditioned. He was satisfied with
his wealth but not proud of it, and piqued himself upon the hearty
abundance, rather than the style, in which he lived. His stronghold was
situated on the banks of the Hudson, in one of those green, sheltered,
fertile nooks in which the Dutch farmers are so fond of nestling. A great
elm tree spread its broad branches over it, at the foot of which bubbled
up a spring of the softest and sweetest water in a little well formed of a
barrel, and then stole sparkling away through the grass to a neighboring
brook that bubbled along among alders and dwarf willows. Hard by the
farmhouse was a vast barn, that might have served for a church, every
window and crevice of which seemed bursting forth with the treasures of
the farm; the flail was busily resounding within it from morning to night;
swallows and martins skimmed twittering about the eaves; and rows of
pigeons, some with one eye turned up, as if watching the weather, some
with their heads under their wings or buried in their bosoms, and others,
swelling, and cooing, and bowing about their dames, were enjoying the
sunshine on the roof. Sleek, unwieldy porkers were grunting in the repose
and abundance of their pens, whence sallied forth, now and then, troops of
sucking pigs as if to snuff the air. A stately squadron of snowy geese
were riding in an adjoining pond, convoying whole fleets of ducks;
regiments of turkeys were gobbling through the farmyard, and guinea-fowls
fretting about it, like ill-tempered housewives, with their peevish,
discontented cry. Before the barn-door strutted the gallant cock, that
pattern of a husband, a warrior, and a fine gentleman, clapping his
burnished wings and crowing in the pride and gladness of his heart&mdash;sometimes
tearing up the earth with his feet, and then generously calling his
ever-hungry family of wives and children to enjoy the rich morsel which he
had discovered.

[img[images/0476m.jpg]]

The pedagogue's mouth watered as he looked upon this sumptuous promise of
luxurious winter fare. In his devouring mind's eye he pictured to himself
every roasting-pig running about with a pudding in his belly and an apple
in his mouth; the pigeons were snugly put to bed in a comfortable pie and
tucked in with a coverlet of crust; the geese were swimming in their own
gravy; and the ducks pairing cosily in dishes, like snug married couples,
with a decent competency of onion sauce. In the porkers he saw carved out
the future sleek side of bacon and juicy relishing ham; not a turkey but
he beheld daintily trussed up, with its gizzard under its wing, and,
peradventure, a necklace of savory sausages; and even bright Chanticleer
himself lay sprawling on his back in a side-dish, with uplifted claws, as
if craving that quarter which his chivalrous spirit disdained to ask while
living.

As the enraptured Ichabod fancied all this, and as he rolled his great
green eyes over the fat meadow-lands, the rich fields of wheat, of rye, of
buckwheat, and Indian corn, and the orchards burdened with ruddy fruit,
which surrounded the warm tenement of Van Tassel, his heart yearned after
the damsel who was to inherit these domains, and his imagination expanded
with the idea how they might be readily turned into cash and the money
invested in immense tracts of wild land and shingle palaces in the
wilderness. Nay, his busy fancy already realized his hopes, and presented
to him the blooming Katrina, with a whole family of children, mounted on
the top of a wagon loaded with household trumpery, with pots and kettles
dangling beneath, and he beheld himself bestriding a pacing mare, with a
colt at her heels, setting out for Kentucky, Tennessee, or the Lord knows
where.

When he entered the house the conquest of his heart was complete. It was
one of those spacious farmhouses with high-ridged but lowly-sloping roofs,
built in the style handed down from the first Dutch settlers, the low
projecting eaves forming a piazza along the front capable of being closed
up in bad weather. Under this were hung flails, harness, various utensils
of husbandry, and nets for fishing in the neighboring river. Benches were
built along the sides for summer use, and a great spinning-wheel at one
end and a churn at the other showed the various uses to which this
important porch might be devoted. From this piazza the wondering Ichabod
entered the hall, which formed the centre of the mansion and the place of
usual residence. Here rows of resplendent pewter, ranged on a long
dresser, dazzled his eyes. In one corner stood a huge bag of wool ready to
be spun; in another a quantity of linsey-woolsey just from the loom; ears
of Indian corn and strings of dried apples and peaches hung in gay
festoons along the walls, mingled with the gaud of red peppers; and a door
left ajar gave him a peep into the best parlor, where the claw-footed
chairs and dark mahogany tables shone like mirrors; andirons, with their
accompanying shovel and tongs, glistened from their covert of asparagus
tops; mock-oranges and conch-shells decorated the mantelpiece; strings of
various-colored birds' eggs were suspended above it; a great ostrich egg
was hung from the centre of the room, and a corner cupboard, knowingly
left open, displayed immense treasures of old silver and well-mended
china.

From the moment Ichabod laid his eyes upon these regions of delight the
peace of his mind was at an end, and his only study was how to gain the
affections of the peerless daughter of Van Tassel. In this enterprise,
however, he had more real difficulties than generally fell to the lot of a
knight-errant of yore, who seldom had anything but giants, enchanters,
fiery dragons, and such-like easily-conquered adversaries to contend with,
and had to make his way merely through gates of iron and brass and walls
of adamant to the castle keep, where the lady of his heart was confined;
all which he achieved as easily as a man would carve his way to the centre
of a Christmas pie, and then the lady gave him her hand as a matter of
course. Ichabod, on the contrary, had to win his way to the heart of a
country coquette beset with a labyrinth of whims and caprices, which were
forever presenting new difficulties and impediments, and he had to
encounter a host of fearful adversaries of real flesh and blood, the
numerous rustic admirers who beset every portal to her heart, keeping a
watchful and angry eye upon each other, but ready to fly out in the common
cause against any new competitor.

Among these the most formidable was a burly, roaring, roistering blade of
the name of Abraham&mdash;or, according to the Dutch abbreviation, Brom&mdash;Van
Brunt, the hero of the country round, which rang with his feats of
strength and hardihood. He was broad-shouldered and double-jointed, with
short curly black hair and a bluff but not unpleasant countenance, having
a mingled air of fun and arrogance. From his Herculean frame and great
powers of limb, he had received the nickname of BROM BONES, by which he
was universally known. He was famed for great knowledge and skill in
horsemanship, being as dexterous on horseback as a Tartar. He was foremost
at all races and cockfights, and, with the ascendancy which bodily
strength acquires in rustic life, was the umpire in all disputes, setting
his hat on one side and giving his decisions with an air and tone
admitting of no gainsay or appeal. He was always ready for either a fight
or a frolic, but had more mischief than ill-will in his composition; and
with all his overbearing roughness there was a strong dash of waggish
good-humor at bottom. He had three or four boon companions who regarded
him as their model, and at the head of whom he scoured the country,
attending every scene of feud or merriment for miles around. In cold
weather he was distinguished by a fur cap surmounted with a flaunting
fox's tail; and when the folks at a country gathering descried this
well-known crest at a distance, whisking about among a squad of hard
riders, they always stood by for a squall. Sometimes his crew would be
heard dashing along past the farm-houses at midnight with whoop and
halloo, like a troop of Don Cossacks, and the old dames, startled out of
their sleep, would listen for a moment till the hurry-scurry had clattered
by, and then exclaim, "Ay, there goes Brom Bones and his gang!" The
neighbors looked upon him with a mixture of awe, admiration, and
good-will, and when any madcap prank or rustic brawl occurred in the
vicinity always shook their heads and warranted Brom Bones was at the
bottom of it.

This rantipole hero had for some time singled out the blooming Katrina for
the object of his uncouth gallantries, and, though his amorous toyings
were something like the gentle caresses and endearments of a bear, yet it
was whispered that she did not altogether discourage his hopes. Certain it
is, his advances were signals for rival candidates to retire who felt no
inclination to cross a line in his amours; insomuch, that when his horse
was seen tied to Van Tassel's paling on a Sunday night, a sure sign that
his master was courting&mdash;or, as it is termed, "sparking"&mdash;within,
all other suitors passed by in despair and carried the war into other
quarters.

Such was the formidable rival with whom Ichabod Crane had to contend, and,
considering all things, a stouter man than he would have shrunk from the
competition and a wiser (*)man would have despaired. He had, however, a
happy mixture of pliability and perseverance in his nature; he was in form
and spirit like a supple jack&mdash;yielding, but although; though he
bent, he never broke and though he bowed beneath the slightest pressure,
yet the moment it was away, jerk! he was as erect and carried his head as
high as ever.

To have taken the field openly against his rival would have been madness
for he was not man to be thwarted in his amours, any more than that stormy
lover, Achilles. Ichabod, therefore, made his advances in a quiet and
gently-insinuating manner. Under cover of his character of singing-master,
he made frequent visits at the farm-house; not that he had anything to
apprehend from the meddlesome interference of parents, which is so often a
stumbling-block in the path of lovers. Balt Van Tassel was an easy,
indulgent soul; he loved his daughter better even than his pipe, and, like
a reasonable man and an excellent father, let her have her way in
everything. His notable little wife, too, had enough to do to attend to
her housekeeping and manage her poultry for, as she sagely observed, ducks
and geese are foolish things and must be looked after, but girls can take
care of themselves. Thus while the busy dame bustled about the house or
plied her spinning-wheel at one end of the piazza, honest Balt would sit
smoking his evening pipe at the other, watching the achievements of a
little wooden warrior who, armed with a sword in each hand, was most
valiantly fighting the wind on the pinnacle of the barn. In the meantime,
Ichabod would carry on his suit with the daughter by the side of the
spring under the great elm, or sauntering along in the twilight, that hour
so favorable to the lover's eloquence.

[img[images/0482m.jpg]]

I profess not to know how women's hearts are wooed and won. To me they
have always been matters of riddle and admiration. Some seem to have but
one vulnerable point, or door of access, while otheres have a thousand
avenues and may be captured in a thousand different ways. It is a great
triumph of skill to gain the former, but still greater proof of
generalship to maintain possession of the latter, for the man must battle
for his fortress at every door and window. He who wins a thousand common
hearts is therefore entitled to some renown, but he who keeps undisputed
sway over the heart of a coquette is indeed a hero. Certain it is, this
was not the case with the redoubtable Brom Bones; and from the moment
Ichabod Crane made his advances, the interests of the former evidently
declined; his horse was no longer seen tied at the palings on Sunday
nights, and a deadly feud gradually arose between him and the preceptor of
Sleepy Hollow.

Brom, who had a degree of rough chivalry in his nature, would fain have
carried matters to open warfare, and have settled their pretensions to the
lady according to the mode of those most concise and simple reasoners, the
knights-errant of yore&mdash;by single combat; but Ichabod was too
conscious of the superior might of his adversary to enter the lists
against him: he had overheard a boast of Bones, that he would "double the
schoolmaster up and lay him on a shelf of his own school-house;" and he
was too wary to give him an opportunity. There was something extremely
provoking in this obstinately pacific system; it left Brom no alternative
but to draw upon the funds of rustic waggery in his disposition and to
play off boorish practical jokes upon his rival. Ichabod became the object
of whimsical persecution to Bones and his gang of rough riders. They
harried his hitherto peaceful domains; smoked out his singing school by
stopping up the chimney; broke into the schoolhouse at night in spite of
its formidable fastenings of withe and window stakes, and turned
everything topsy-turvy; so that the poor schoolmaster began to think all
the witches in the country held their meetings there. But, what was still
more annoying, Brom took all opportunities of turning him into ridicule in
presence of his mistress, and had a scoundrel dog whom he taught to whine
in the most ludicrous manner, and introduced as a rival of Ichabod's, to
instruct her in psalmody.

In this way, matters went on for some time without producing any material
effect on the relative situation of the contending powers. On a fine
autumnal afternoon Ichabod, in pensive mood, sat enthroned on the lofty
stool whence he usually watched all the concerns of his little literary
realm. In his hand he swayed a ferule, that sceptre of despotic power; the
birch of justice reposed on three nails behind the throne, a constant
terror to evildoers; while on the desk before him might be seen sundry
contraband articles and prohibited weapons detected upon the persons of
idle urchins, such as half-munched apples, popguns, whirligigs, fly-cages,
and whole legions of rampant little paper gamecocks. Apparently there had
been some appalling act of justice recently inflicted, for his scholars
were all busily intent upon their books or slyly whispering behind them
with one eye kept upon the master, and a kind of buzzing stillness reigned
throughout the school-room. It was suddenly interrupted by the appearance
of a negro in tow-cloth jacket and trowsers, a round-crowned fragment of a
hat like the cap of Mercury, and mounted on the back of a ragged, wild,
half-broken colt, which he managed with a rope by way of halter. He came
clattering up to the school door with an invitation to Ichabod to attend a
merry-making or "quilting frolic" to be held that evening at Mynheer Van
Tassel's; and, having delivered his message with that air of importance
and effort at fine language which a negro is apt to display on petty
embassies of the kind, he dashed over the brook, and was seen scampering
away up the hollow, full of the importance and hurry of his mission.

[img[images/0485m.jpg]]

All was now bustle and hubbub in the late quiet school-room. The scholars
were hurried through their lessons without stopping at trifles; those who
were nimble skipped over half with impunity, and those who were tardy had
a smart application now and then in the rear to quicken their speed or
help them over a tall word. Books were flung aside without being put away
on the shelves, inkstands were overturned, benches thrown down, and the
whole school was turned loose an hour before the usual time, bursting
forth like a legion of young imps, yelping and racketing about the green
in joy at their early emancipation.

The gallant Ichabod now spent at least an extra half hour at his toilet,
brushing and furbishing up his best, and indeed only, suit of rusty black,
and arranging his locks by a bit of broken looking-glass that hung up in
the school-house. That he might make his appearance before his mistress in
the true style of a cavalier, he borrowed a horse from the farmer with
whom he was domiciliated, a choleric old Dutchman of the name of Hans Van
Ripper, and, thus gallantly mounted, issued forth like a knight-errant in
quest of adventures. But it is meet I should, in the true spirit of
romantic story, give some account of the looks and equipments of my hero
and his steed. The animal he bestrode was a broken-down plough-horse that
had outlived almost everything but his viciousness. He was gaunt and
shagged, with a ewe neck and a head like a hammer; his rusty mane and tail
were tangled and knotted with burrs; one eye had lost its pupil and was
glaring and spectral, but the other had the gleam of a genuine devil in
it. Still, he must have had fire and mettle in his day, if we may judge
from the name he bore of Gunpowder. He had, in fact, been a favorite steed
of his master's, the choleric Van Ripper, who was a furious rider, and had
infused, very probably, some of his own spirit into the animal; for, old
and broken down as he looked, there was more of the lurking devil in him
than in any young filly in the country.

Ichabod was a suitable figure for such a steed. He rode with short
stirrups, which brought his knees nearly up to the pommel of the saddle;
his sharp elbows stuck out like grasshoppers'; he carried his whip
perpendicularly in his hand like a sceptre; and as his horse jogged on the
motion of his arms was not unlike the flapping of a pair of wings. A small
wool hat rested on the top of his nose, for so his scanty strip of
forehead might be called, and the skirts of his black coat fluttered out
almost to his horse's tail. Such was the appearance of Ichabod and his
steed as they shambled out of the gate of Hans Van Ripper, and it was
altogether such an apparition as is seldom to be met with in broad
daylight.

It was, as I have said, a fine autumnal day, the sky was clear and serene,
and Nature wore that rich and golden livery which we always associate with
the idea of abundance. The forests had put on their sober brown and
yellow, while some trees of the tenderer kind had been nipped by the
frosts into brilliant dyes of orange, purple, and scarlet. Streaming files
of wild-ducks began to make their appearance high in the air; the bark of
the squirrel might be heard from the groves of beech and hickory nuts, and
the pensive whistle of the quail at intervals from the neighboring
stubble-field.

The small birds were taking their farewell banquets. In the fulness of
their revelry they fluttered, chirping and frolicking, from bush to bush
and tree to tree, capricious from the very profusion and variety around
them. There was the honest cock robin, the favorite game of stripling
sportsmen, with its loud querulous note; and the twittering blackbirds,
flying in sable clouds; and the golden-winged woodpecker, with his crimson
crest, his broad black gorget, and splendid plumage; and the cedar-bird,
with its red-tipt wings and yellow-tipt tail and its little monteiro cap
of feathers; and the blue jay, that noisy coxcomb, in his gay light-blue
coat and white under-clothes, screaming and chattering, bobbing and
nodding and bowing, and pretending to be on good terms with every songster
of the grove.

As Ichabod jogged slowly on his way his eye, ever open to every symptom of
culinary abundance, ranged with delight over the treasures of jolly
Autumn. On all sides he beheld vast store of apples&mdash;some hanging in
oppressive opulence on the trees, some gathered into baskets and barrels
for the market, others heaped up in rich piles for the cider-press.
Farther on he beheld great fields of Indian corn, with its golden ears
peeping from their leafy coverts and holding out the promise of cakes and
hasty pudding; and the yellow pumpkins lying beneath them, turning up
their fair round bellies to the sun, and giving ample prospects of the
most luxurious of pies; and anon he passed the fragrant buckwheat-fields,
breathing the odor of the beehive, and as he beheld them soft
anticipations stole over his mind of dainty slapjacks, well buttered and
garnished with honey or treacle by the delicate little dimpled hand of
Katrina Van Tassel.

Thus feeding his mind with many sweet thoughts and "sugared suppositions,"
he journeyed along the sides of a range of hills which look out upon some
of the goodliest scenes of the mighty Hudson. The sun gradually wheeled
his broad disk down into the west. The wide bosom of the Tappan Zee lay
motionless and glassy, excepting that here and there a gentle undulation
waved and prolonged the blue shadow of the distant mountain. A few amber
clouds floated in the sky, without a breath of air to move them. The
horizon was of a fine golden tint, changing gradually into a pure apple
green, and from that into the deep blue of the mid-heaven. A slanting ray
lingered on the woody crests of the precipices that overhung some parts of
the river, giving greater depth to the dark-gray and purple of their rocky
sides. A sloop was loitering in the distance, dropping slowly down with
the tide, her sail hanging uselessly against the mast, and as the
reflection of the sky gleamed along the still water it seemed as if the
vessel was suspended in the air.

[img[images/0489m.jpg]]

It was toward evening that Ichabod arrived at the castle of the Heer Van
Tassel, which he found thronged with the pride and flower of the adjacent
country&mdash;old farmers, a spare leathern-faced race, in homespun coats
and breeches, blue stockings, huge shoes, and magnificent pewter buckles;
their brisk withered little dames, in close crimped caps, long-waisted
shortgowns, homespun petticoats, with scissors and pincushions and gay
calico pockets hanging on the outside; buxom lasses, almost as antiquated
as their mothers, excepting where a straw hat, a fine ribbon, or perhaps a
white frock, gave symptoms of city innovation; the sons, in short
square-skirted coats with rows of stupendous brass buttons, and their hair
generally queued in the fashion of the times, especially if they could
procure an eel-skin for the purpose, it being esteemed throughout the
country as a potent nourisher and strengthener of the hair.

Brom Bones, however, was the hero of the scene, having come to the
gathering on his favorite steed Daredevil&mdash;a creature, like himself
full of metal and mischief, and which no one but himself could manage. He
was, in fact, noted for preferring vicious animals, given to all kinds of
tricks, which kept the rider in constant risk of his neck, for he held a
tractable, well-broken horse as unworthy of a lad of spirit.

Fain would I pause to dwell upon the world of charms that burst upon the
enraptured gaze of my hero as he entered the state parlor of Van Tassel's
mansion. Not those of the bevy of buxom lasses with their luxurious
display of red and white, but the ample charms of a genuine Dutch country
tea-table in the sumptuous time of autumn. Such heaped-up platters of
cakes of various and almost indescribable kinds, known only to experienced
Dutch housewives! There was the doughty doughnut, the tenderer oily koek,
and the crisp and crumbling cruller; sweet cakes and short cakes, ginger
cakes and honey cakes, and the whole family of cakes. And then there were
apple pies and peach pies and pumpkin pies; besides slices of ham and
smoked beef; and moreover delectable dishes of preserved plums and peaches
and pears and quinces; not to mention broiled shad and roasted chickens;
together with bowls of milk and cream,&mdash;all mingled
higgledy-piggledy, pretty much as I have enumerated them, with the
motherly teapot sending up its clouds of vapor from the midst. Heaven
bless the mark! I want breath and time to discuss this banquet as it
deserves, and am too eager to get on with my story. Happily, Ichabod Crane
was not in so great a hurry as his historian, but did ample justice to
every dainty.

He was a kind and thankful creature, whose heart dilated in proportion as
his skin was filled with good cheer, and whose spirits rose with eating as
some men's do with drink. He could not help, too, rolling his large eyes
round him as he ate, and chuckling with the possibility that he might one
day be lord of all this scene of almost unimaginable luxury and splendor.
Then, he thought, how soon he'd turn his back upon the old school-house,
snap his fingers in the face of Hans Van Ripper and every other niggardly
patron, and kick any itinerant pedagogue out of doors that should dare to
call him comrade!

Old Baltus Van Tassel moved about among his guests with a face dilated
with content and good-humor, round and jolly as the harvest moon. His
hospitable attentions were brief, but expressive, being confined to a
shake of the hand, a slap on the shoulder, a loud laugh, and a pressing
invitation to "fall to and help themselves."

And now the sound of the music from the common room, or hall, summoned to
the dance. The musician was an old gray-headed negro who had been the
itinerant orchestra of the neighborhood for more than half a century. His
instrument was as old and battered as himself. The greater part of the
time he scraped on two or three strings, accompanying every movement of
the bow with a motion of the head, bowing almost to the ground and
stamping with his foot whenever a fresh couple were to start.

Ichabod prided himself upon his dancing as much as upon his vocal powers.
Not a limb, not a fibre about him was idle; and to have seen his loosely
hung frame in full motion and clattering about the room you would have
thought Saint Vitus himself, that blessed patron of the dance, was
figuring before you in person. He was the admiration of all the negroes,
who, having gathered, of all ages and sizes, from the farm and the
neighborhood, stood forming a pyramid of shining black faces at every door
and window, gazing with delight at the scene, rolling their white
eyeballs, and showing grinning rows of ivory from ear to ear. How could
the flogger of urchins be otherwise than animated and joyous? The lady of
his heart was his partner in the dance, and smiling graciously in reply to
all his amorous oglings, while Brom Bones, sorely smitten with love and
jealousy, sat brooding by himself in one corner.

When the dance was at an end Ichabod was attracted to a knot of the sager
folks, who, with old Van Tassel, sat smoking at one end of the piazza
gossiping over former times and drawing out long stories about the war.

This neighborhood, at the time of which I am speaking, was one of those
highly favored places which abound with chronicle and great men. The
British and American line had run near it during the war; it had therefore
been the scene of marauding and infested with refugees, cow-boys, and all
kinds of border chivalry. Just sufficient time had elapsed to enable each
storyteller to dress up his tale with a little becoming fiction, and in
the indistinctness of his recollection to make himself the hero of every
exploit.

There was the story of Doffue Martling, a large blue-bearded Dutchman, who
had nearly taken a British frigate with an old iron nine-pounder from a
mud breastwork, only that his gun burst at the sixth discharge. And there
was an old gentleman who shall be nameless, being too rich a mynheer to be
lightly mentioned, who, in the battle of Whiteplains, being an excellent
master of defence, parried a musket-ball with a small sword, insomuch that
he absolutely felt it whiz round the blade and glance off at the hilt: in
proof of which he was ready at any time to show the sword, with the hilt a
little bent. There were several more that had been equally great in the
field, not one of whom but was persuaded that he had a considerable hand
in bringing the war to a happy termination.

But all these were nothing to the tales of ghosts and apparitions that
succeeded. The neighborhood is rich in legendary treasures of the kind.
Local tales and superstitions thrive best in these sheltered, long-settled
retreats but are trampled under foot by the shifting throng that forms the
population of most of our country places. Besides, there is no
encouragement for ghosts in most of our villages, for they have scarcely
had time to finish their first nap and turn themselves in their graves
before their surviving friends have travelled away from the neighborhood;
so that when they turn out at night to walk their rounds they have no
acquaintance left to call upon. This is perhaps the reason why we so
seldom hear of ghosts except in our long-established Dutch communities.

The immediate causes however, of the prevalence of supernatural stories in
these parts, was doubtless owing to the vicinity of Sleepy Hollow. There
was a contagion in the very air that blew from that haunted region; it
breathed forth an atmosphere of dreams and fancies infecting all the land.
Several of the Sleepy Hollow people were present at Van Tassel's, and, as
usual, were doling out their wild and wonderful legends. Many dismal tales
were told about funeral trains and mourning cries and wailings heard and
seen about the great tree where the unfortunate Major Andre was taken, and
which stood in the neighborhood. Some mention was made also of the woman
in white that haunted the dark glen at Raven Rock, and was often heard to
shriek on winter nights before a storm, having perished there in the snow.
The chief part of the stories, however, turned upon the favorite spectre
of Sleepy Hollow, the headless horseman, who had been heard several times
of late patrolling the country, and, it was said, tethered his horse
nightly among the graves in the churchyard.

[img[images/0495m.jpg]]

The sequestered situation of this church seems always to have made it a
favorite haunt of troubled spirits. It stands on a knoll surrounded by
locust trees and lofty elms, from among which its decent whitewashed walls
shine modestly forth, like Christian purity beaming through the shades of
retirement. A gentle slope descends from it to a silver sheet of water
bordered by high trees, between which peeps may be caught at the blue
hills of the Hudson. To look upon its grass-grown yard, where the sunbeams
seem to sleep so quietly, one would think that there at least the dead
might rest in peace. On one side of the church extends a wide woody dell,
along, which raves a large brook among broken rocks and trunks of fallen
trees. Over a deep black part of the stream, not far from the church, was
formerly thrown a wooden bridge; the road that led to it and the bridge
itself were thickly shaded by overhanging trees, which cast a gloom about
it even in the daytime, but occasioned a fearful darkness at night. Such
was one of the favorite haunts of the headless horseman, and the place
where he was most frequently encountered. The tale was told of old
Brouwer, a most heretical disbeliever in ghosts, how he met the horseman
returning from his foray into Sleepy Hollow, and was obliged to get up
behind him; how they galloped over bush and brake, over hill and swamp,
until they reached the bridge, when the horseman suddenly turned into a
skeleton, threw old Brouwer into the brook, and sprang away over the
tree-tops with a clap of thunder.

This story was immediately matched by a thrice-marvellous adventure of
Brom Bones, who made light of the galloping Hessian as an arrant jockey.
He affirmed that on returning one night from the neighboring village of
Sing-Sing he had been over taken by this midnight trooper; that he had
offered to race with him for a bowl of punch, and should have won it too,
for Daredevil beat the goblin horse all hollow, but just as they came to
the church bridge the Hessian bolted and vanished in a flash of fire.

All these tales, told in that drowsy undertone with which men talk in the
dark, the countenances of the listeners only now and then receiving a
casual gleam from the glare of a pipe, sank deep in the mind of Ichabod.
He repaid them in kind with large extracts from his invaluable author,
Cotton Mather, and added many marvellous events that had taken place in
his native state of Connecticut and fearful sights which he had seen in
his nightly walks about Sleepy Hollow.

The revel now gradually broke up. The old farmers gathered together their
families in their wagons, and were heard for some time rattling along the
hollow roads and over the distant hills. Some of the damsels mounted on
pillions behind their favorite swains, and their light-hearted laughter,
mingling with the clatter of hoofs, echoed along the silent woodlands,
sounding fainter and fainter until they gradually died away, and the late
scene of noise and frolic was all silent and deserted. Ichabod only
lingered behind, according to the custom of country lovers, to have a
tete-a-tete with the heiress, fully convinced that he was now on the high
road to success. What passed at this interview I will not pretend to say,
for in fact I do not know. Something, however, I fear me, must have gone
wrong, for he certainly sallied forth, after no very great interval, with
an air quite desolate and chop-fallen. Oh these women! these women! Could
that girl have been playing off any of her coquettish tricks? Was her
encouragement of the poor pedagogue all a mere sham to secure her conquest
of his rival? Heaven only knows, not I! Let it suffice to say, Ichabod
stole forth with the air of one who had been sacking a hen-roost, rather
than a fair lady's heart. Without looking to the right or left to notice
the scene of rural wealth on which he had so often gloated, he went
straight to the stable, and with several hearty cuffs and kicks roused his
steed most uncourteously from the comfortable quarters in which he was
soundly sleeping, dreaming of mountains of corn and oats and whole valleys
of timothy and clover.

It was the very witching time of night that Ichabod, heavy-hearted and
crestfallen, pursued his travel homewards along the sides of the lofty
hills which rise above Tarry Town, and which he had traversed so cheerily
in the afternoon. The hour was as dismal as himself. Far below him the
Tappan Zee spread its dusky and indistinct waste of waters, with here and
there the tall mast of a sloop riding quietly at anchor under the land. In
the dead hush of midnight he could even hear the barking of the watch-dog
from the opposite shore of the Hudson; but it was so vague and faint as
only to give an idea of his distance from this faithful companion of man.
Now and then, too, the long-drawn crowing of a cock, accidentally
awakened, would sound far, far off, from some farm-house away among the
hills; but it was like a dreaming sound in his ear. No signs of life
occurred near him, but occasionally the melancholy chirp of a cricket, or
perhaps the guttural twang of a bull-frog from a neighboring marsh, as if
sleeping uncomfortably and turning suddenly in his bed.

All the stories of ghosts and goblins that he had heard in the afternoon
now came crowding upon his recollection. The night grew darker and darker;
the stars seemed to sink deeper in the sky, and driving clouds
occasionally had them from his sight. He had never felt so lonely and
dismal. He was, moreover, approaching the very place where many of the
scenes of the ghost-stories had been laid. In the centre of the road stood
an enormous tulip tree which towered like a giant above all the other
trees of the neighborhood and formed a kind of landmark. Its limbs were
gnarled and fantastic, large enough to form trunks for ordinary trees,
twisting down almost to the earth and rising again into the air. It was
connected with the tragical story of the unfortunate Andre, who had been
taken prisoner hard by, and was universally known by the name of Major
Andre's tree. The common people regarded it with a mixture of respect and
superstition, partly out of sympathy for the fate of its ill-starred
namesake, and partly from the tales of strange sights and doleful
lamentations told concerning it.

As Ichabod approached this fearful tree he began to whistle: he thought
his whistle was answered; it was but a blast sweeping sharply through the
dry branches. As he approached a little nearer he thought he saw something
white hanging in the midst of the tree: he paused and ceased whistling,
but on looking more narrowly perceived that it was a place where the tree
had been scathed by lightning and the white wood laid bare. Suddenly he
heard a groan: his teeth chattered and his knees smote against the saddle;
it was but the rubbing of one huge bough upon another as they were swayed
about by the breeze. He passed the tree in safety, but new perils lay
before him.

About two hundred yards from the tree a small brook crossed the road and
ran into a marshy and thickly-wooded glen known by the name of Wiley's
Swamp. A few rough logs, laid side by side, served for a bridge over this
stream. On that side of the road where the brook entered the wood a group
of oaks and chestnuts, matted thick with wild grape-vines, threw a
cavernous gloom over it. To pass this bridge was the severest trial. It
was at this identical spot that the unfortunate Andre was captured, and
under the covert of those chestnuts and vines were the sturdy yeomen
concealed who surprised him. This has ever since been considered a haunted
stream, and fearful are the feelings of the schoolboy who has to pass it
alone after dark.

As he approached the stream his heart began to thump; he summoned up,
however, all his resolution, gave his horse half a score of kicks in the
ribs, and attempted to dash briskly across the bridge; but instead of
starting forward, the perverse old animal made a lateral movement and ran
broadside against the fence. Ichabod, whose fears increased with the
delay, jerked the reins on the other side and kicked lustily with the
contrary foot: it was all in vain; his steed started, it is true, but it
was only to plunge to the opposite side of the road into a thicket of
brambles and alder bushes. The schoolmaster now bestowed both whip and
heel upon the starveling ribs of old Gunpowder, who dashed forward,
snuffing and snorting, but came to a stand just by the bridge with a
suddenness that had nearly sent his rider sprawling over his head. Just at
this moment a plashy tramp by the side of the bridge caught the sensitive
ear of Ichabod. In the dark shadow of the grove on the margin of the brook
he beheld something huge, misshapen, black, and towering. It stirred not,
but seemed gathered up in the gloom, like some gigantic monster ready to
spring upon the traveller.

The hair of the affrighted pedagogue rose upon his head with terror. What
was to be done? To turn and fly was now too late; and besides, what chance
was there of escaping ghost or goblin, if such it was, which could ride
upon the wings of the wind? Summoning up, therefore, a show of courage, he
demanded in stammering accents, "Who are you?" He received no reply. He
repeated his demand in a still more agitated voice. Still there was no
answer. Once more he cudgelled the sides of the inflexible Gunpowder, and,
shutting his eyes, broke forth with involuntary fervor into a psalm tune.
Just then the shadowy object of alarm put itself in motion, and with a
scramble and a bound stood at once in the middle of the road. Though the
night was dark and dismal, yet the form of the unknown might now in some
degree be ascertained. He appeared to be a horseman of large dimensions
and mounted on a black horse of powerful frame. He made no offer of
molestation or sociability, but kept aloof on one side of the road,
jogging along on the blind side of old Gunpowder, who had now got over his
fright and waywardness.

[img[images/0501m.jpg]]

Ichabod, who had no relish for this strange midnight companion, and
bethought himself of the adventure of Brom Bones with the Galloping
Hessian, now quickened his steed in hopes of leaving him behind. The
stranger, however, quickened his horse to an equal pace. Ichabod pulled
up, and fell into a walk, thinking to lag behind; the other did the same.
His heart began to sink within him; he endeavored to resume his psalm
tune, but his parched tongue clove to the roof of his mouth and he could
not utter a stave. There was something in the moody and dogged silence of
this pertinacious companion that was mysterious and appalling. It was soon
fearfully accounted for. On mounting a rising ground, which brought the
figure of his fellow-traveller in relief against the sky, gigantic in
height and muffled in a cloak, Ichabod was horror-struck on perceiving
that he was headless! but his horror was still more increased on observing
that the head, which should have rested on his shoulders, was carried
before him on the pommel of the saddle. His terror rose to desperation, he
rained a shower of kicks and blows upon Gunpowder, hoping by a sudden
movement to give his companion the slip; but the spectre started full jump
with him. Away, then, they dashed through thick and thin, stones flying
and sparks flashing at every bound. Ichabod's flimsy garments fluttered in
the air as he stretched his long lank body away over his horse's head in
the eagerness of his flight.

They had now reached the road which turns off to Sleepy Hollow; but
Gunpowder, who seemed possessed with a demon, instead of keeping up it,
made an opposite turn and plunged headlong down hill to the left. This
road leads through a sandy hollow shaded by trees for about a quarter of a
mile, where it crosses the bridge famous in goblin story, and just beyond
swells the green knoll on which stands the whitewashed church.

As yet the panic of the steed had given his unskillful rider an apparent
advantage in the chase; but just as he had got halfway through the hollow
the girths of the saddle gave away and he felt it slipping from under him.
He seized it by the pommel and endeavored to hold it firm, but in vain,
and had just time to save himself by clasping old Gunpowder round the
neck, when the saddle fell to the earth, and he heard it trampled under
foot by his pursuer. For a moment the terror of Hans Van Ripper's wrath
passed across his mind, for it was his Sunday saddle; but this was no time
for petty fears; the goblin was hard on his haunches, and (unskilled rider
that he was) he had much ado to maintain his seat, sometimes slipping on
one side, sometimes on another, and sometimes jolted on the high ridge of
his horse's back-bone with a violence that he verily feared would cleave
him asunder.

[img[images/0503m.jpg]]

An opening in the trees now cheered him with the hopes that the church
bridge was at hand. The wavering reflection of a silver star in the bosom
of the brook told him that he was not mistaken. He saw the walls of the
church dimly glaring under the trees beyond. He recollected the place
where Brom Bones' ghostly competitor had disappeared. "If I can but reach
that bridge," thought Ichabod, "I am safe." Just then he heard the black
steed panting and blowing close behind him; he even fancied that he felt
his hot breath. Another convulsive kick in the ribs, and old Gunpowder
sprang upon the bridge; he thundered over the resounding planks; he gained
the opposite side; and now Ichabod cast a look behind to see if his
pursuer should vanish, according to rule, in a flash of fire and
brimstone. Just then he saw the goblin rising in his stirrups, and in the
very act of hurling his head at him. Ichabod endeavored to dodge the
horrible missile, but too late. It encountered his cranium with a
tremendous crash; he was tumbled headlong into the dust, and Gunpowder,
the black steed, and the goblin rider passed by like a whirlwind.

The next morning the old horse was found, without his saddle and with the
bridle under his feet, soberly cropping the grass at his master's gate.
Ichabod did not make his appearance at breakfast; dinner-hour came, but no
Ichabod. The boys assembled at the school-house and strolled idly about
the banks of the brook but no schoolmaster. Hans Van Ripper now began to
feel some uneasiness about the fate of poor Ichabod and his saddle. An
inquiry was set on foot, and after diligent investigation they came upon
his traces. In one part of the road leading to the church was found the
saddle trampled in the dirt; the tracks of horses' hoofs, deeply dented in
the road and evidently at furious speed, were traced to the bridge, beyond
which, on the bank of a broad part of the brook, where the water ran deep
and black, was found the hat of the unfortunate Ichabod, and close beside
it a spattered pumpkin.

The brook was searched, but the body of the schoolmaster was not to be
discovered. Hans Van Ripper, as executor of his estate, examined the
bundle which contained all his worldly effects. They consisted of two
shirts and a half, two stocks for the neck, a pair or two of worsted
stockings, an old pair of corduroy small-clothes, a rusty razor, a book of
psalm tunes full of dog's ears, and a broken pitch-pipe. As to the books
and furniture of the school-house, they belonged to the community,
excepting Cotton Mather's History of Witchcraft, a New England Almanac,
and a book of dreams and fortune-telling; in which last was a sheet of
foolscap much scribbled and blotted in several fruitless attempts to make
a copy of verses in honor of the heiress of Van Tassel. These magic books
and the poetic scrawl were forthwith consigned to the flames by Hans Van
Ripper, who from that time forward determined to send his children no more
to school, observing that he never knew any good come of this same reading
and writing. Whatever money the schoolmaster possessed&mdash;and he had
received his quarter's pay but a day or two before&mdash;he must have had
about his person at the time of his disappearance.

The mysterious event caused much speculation at the church on the
following Sunday. Knots of gazers and gossips were collected in the
churchyard, at the bridge, and at the spot where the hat and pumpkin had
been found. The stories of Brouwer, of Bones, and a whole budget of others
were called to mind, and when they had diligently considered them all, and
compared them with the symptoms of the present case, they shook their
heads and came to the conclusion that Ichabod had been carried off by the
galloping Hessian. As he was a bachelor and in nobody's debt, nobody
troubled his head any more about him, the school was removed to a
different quarter of the hollow and another pedagogue reigned in his
stead.

It is true an old farmer, who had been down to New York on a visit several
years after, and from whom this account of the ghostly adventure was
received, brought home the intelligence that Ichabod Crane was still
alive; that he had left the neighborhood, partly through fear of the
goblin and Hans Van Ripper, and partly in mortification at having been
suddenly dismissed by the heiress; that he had changed his quarters to a
distant part of the country, had kept school and studied law at the same
time, had been admitted to the bar, turned politician, electioneered,
written for the newspapers, and finally had been made a justice of the Ten
Pound Court. Brom Bones too, who shortly after his rival's disappearance
conducted the blooming Katrina in triumph to the altar, was observed to
look exceedingly knowing whenever the story of Ichabod was related, and
always burst into a hearty laugh at the mention of the pumpkin; which led
some to suspect that he knew more about the matter than he chose to tell.

The old country wives, however, who are the best judges of these matters,
maintain to this day that Ichabod was spirited away by supernatural means;
and it is a favorite story often told about the neighborhood round the
intervening fire. The bridge became more than ever an object of
superstitious awe, and that may be the reason why the road has been
altered of late years, so as to approach the church by the border of the
mill-pond. The schoolhouse, being deserted, soon fell to decay, and was
reported to be haunted by the ghost of the unfortunate pedagogue; and the
plough-boy, loitering homeward of a still summer evening, has often
fancied his voice at a distance chanting a melancholy psalm tune among the
tranquil solitudes of Sleepy Hollow.

[img[images/0507m.jpg]]

POSTSCRIPT FOUND IN THE HANDWRITING OF MR. KNICKERBOCKER.

THE preceding tale is given almost in the precise words in which I heard
it related at a Corporation meeting of the ancient city of Manhattoes, at
which were present many of its sagest and most illustrious burghers. The
narrator was a pleasant, shabby, gentlemanly old fellow in pepper-and-salt
clothes, with a sadly humorous face, and one whom I strongly suspected of
being poor, he made such efforts to be entertaining. When his story was
concluded there was much laughter and approbation, particularly from two
or three deputy aldermen who had been asleep the greater part of the time.
There was, however, one tall, dry-looking old gentleman, with beetling
eyebrows, who maintained a grave and rather severe face throughout, now
and then folding his arms, inclining his head, and looking down upon the
floor, as if turning a doubt over in his mind. He was one of your wary
men, who never laugh but upon good grounds&mdash;when they have reason and
the law on their side. When the mirth of the rest of the company had
subsided and silence was restored, he leaned one arm on the elbow of his
chair, and sticking the other akimbo, demanded, with a slight but
exceedingly sage motion of the head and contraction of the brow, what was
the moral of the story and what it went to prove.

The story-teller, who was just putting a glass of wine to his lips as a
refreshment after his toils, paused for a moment, looked at his inquirer
with an air of infinite deference, and, lowering the glass slowly to the
table, observed that the story was intended most logically to prove&mdash;

"That there is no situation in life but has its advantages and pleasures&mdash;provided
we will but take a joke as we find it;

"That, therefore, he that runs races with goblin troopers is likely to
have rough riding of it.

"Ergo, for a country schoolmaster to be refused the hand of a Dutch
heiress is a certain step to high preferment in the state."

The cautious old gentleman knit his brows tenfold closer after this
explanation, being sorely puzzled by the ratiocination of the syllogism,
while methought the one in pepper-and-salt eyed him with something of a
triumphant leer. At length he observed that all this was very well, but
still he thought the story a little on the extravagant&mdash;there were
one or two points on which he had his doubts.

"Faith, sir," replied the story-teller, "as to that matter, I don't
believe one-half of it myself."

D. K.
A COLLOQUY IN WESTMINSTER ABBEY.

"""
I know that all beneath the moon decays,
And what by mortals in this world is brought,
In time's great periods shall return to nought.
I know that all the muses' heavenly rays,
With toil of sprite which are so dearly bought,
As idle sounds, of few or none are sought&mdash;
That there is nothing lighter than mere praise.
DRUMMOND OF HAWTHORNDEN.
"""

[img[images/9192m.jpg]]

THERE are certain half-dreaming moods of mind in which we naturally steal
away from noise and glare, and seek some quiet haunt where we may indulge
our reveries and build our air castles undisturbed. In such a mood I was
loitering about the old gray cloisters of Westminster Abbey, enjoying that
luxury of wandering thought which one is apt to dignify with the name of
reflection, when suddenly an irruption of madcap boys from Westminster
school, playing at football, broke in upon the monastic stillness of the
place, making the vaulted passages and mouldering tombs echo with their
merriment. I sought to take refuge from their noise by penetrating still
deeper into the solitudes of the pile, and applied to one of the vergers
for admission to the library. He conducted me through a portal rich with
the crumbling sculpture of former ages, which opened upon a gloomy passage
leading to the chapter-house and the chamber in which Doomsday Book is
deposited. Just within the passage is a small door on the left. To this
the verger applied a key; it was double locked, and opened with some
difficulty, as if seldom used. We now ascended a dark narrow staircase,
and, passing through a second door, entered the library.

I found myself in a lofty antique hall, the roof supported by massive
joists of old English oak. It was soberly lighted by a row of Gothic
windows at a considerable height from the floor, and which apparently
opened upon the roofs of the cloisters. An ancient picture of some
reverend dignitary of the Church in his robes hung over the fireplace.
Around the hall and in a small gallery were the books, arranged in carved
oaken cases. They consisted principally of old polemical writers, and were
much more worn by time than use. In the centre of the library was a
solitary table with two or three books on it, an inkstand without ink, and
a few pens parched by long disuse. The place seemed fitted for quiet study
and profound meditation. It was buried deep among the massive walls of the
abbey and shut up from the tumult of the world. I could only hear now and
then the shouts of the school-boys faintly swelling from the cloisters,
and the sound of a bell tolling for prayers echoing soberly along the
roofs of the abbey. By degrees the shouts of merriment grew fainter and
fainter, and at length died away; the bell ceased to toll, and a profound
silence reigned through the dusky hall.

I had taken down a little thick quarto, curiously bound in parchment, with
brass clasps, and seated myself at the table in a venerable elbow-chair.
Instead of reading, however, I was beguiled by the solemn monastic air and
lifeless quiet of the place, into a train of musing. As I looked around
upon the old volumes in their mouldering covers, thus ranged on the
shelves and apparently never disturbed in their repose, I could not but
consider the library a kind of literary catacomb, where authors, like
mummies, are piously entombed and left to blacken and moulder in dusty
oblivion.

How much, thought I, has each of these volumes, now thrust aside with such
indifference, cost some aching head! how many weary days! how many
sleepless nights! How have their authors buried themselves in the solitude
of cells and cloisters, shut themselves up from the face of man, and the
still more blessed face of Nature; and devoted themselves to painful
research and intense reflection! And all for what? To occupy an inch of
dusty shelf&mdash;to have the titles of their works read now and then in a
future age by some drowsy churchman or casual straggler like myself, and
in another age to be lost even to remembrance. Such is the amount of this
boasted immortality. A mere temporary rumor, a local sound; like the tone
of that bell which has tolled among these towers, filling the ear for a
moment, lingering transiently in echo, and then passing away, like a thing
that was not!

[img[images/0195m.jpg]]

While I sat half-murmuring, half-meditating, these unprofitable
speculations with my head resting on my hand, I was thrumming with the
other hand upon the quarto, until I accidentally loosened the clasps;
when, to my utter astonishment, the little book gave two or three yawns,
like one awaking from a deep sleep, then a husky hem, and at length began
to talk. At first its voice was very hoarse and broken, being much
troubled by a cobweb which some studious spider had woven across it, and
having probably contracted a cold from long exposure to the chills and
damps of the abbey. In a short time, however, it became more distinct, and
I soon found it an exceedingly fluent, conversable little tome. Its
language, to be sure, was rather quaint and obsolete, and its
pronunciation what, in the present day, would be deemed barbarous; but I
shall endeavor, as far as I am able, to render it in modern parlance.

It began with railings about the neglect of the world, about merit being
suffered to languish in obscurity, and other such commonplace topics of
literary repining, and complained bitterly that it had not been opened for
more than two centuries&mdash;that the dean only looked now and then into
the library, sometimes took down a volume or two, trifled with them for a
few moments, and then returned them to their shelves. "What a plague do
they mean?" said the little quarto, which I began to perceive was somewhat
choleric&mdash;"what a plague do they mean by keeping several thousand
volumes of us shut up here, and watched by a set of old vergers, like so
many beauties in a harem, merely to be looked at now and then by the dean?
Books were written to give pleasure and to be enjoyed; and I would have a
rule passed that the dean should pay each of us a visit at least once a
year; or, if he is not equal to the task, let them once in a while turn
loose the whole school of Westminster among us, that at any rate we may
now and then have an airing."

"Softly, my worthy friend," replied I; "you are not aware how much better
you are off than most books of your generation. By being stored away in
this ancient library you are like the treasured remains of those saints
and monarchs which lie enshrined in the adjoining chapels, while the
remains of their contemporary mortals, left to the ordinary course of
Nature, have long since returned to dust."

"Sir," said the little tome, ruffling his leaves and looking big, "I was
written for all the world, not for the bookworms of an abbey. I was
intended to circulate from hand to hand, like other great contemporary
works; but here have I been clasped up for more than two centuries, and
might have silently fallen a prey to these worms that are playing the very
vengeance with my intestines if you had not by chance given me an
opportunity of uttering a few last words before I go to pieces."

"My good friend," rejoined I, "had you been left to the circulation of
which you speak, you would long ere this have been no more. To judge from
your physiognomy, you are now well stricken in years: very few of your
contemporaries can be at present in existence, and those few owe their
longevity to being immured like yourself in old libraries; which, suffer
me to add, instead of likening to harems, you might more properly and
gratefully have compared to those infirmaries attached to religious
establishments for the benefit of the old and decrepit, and where, by
quiet fostering and no employment, they often endure to an amazingly
good-for-nothing old age. You talk of your contemporaries as if in
circulation. Where do we meet with their works? What do we hear of Robert
Grosteste of Lincoln? No one could have toiled harder than he for
immortality. He is said to have written nearly two hundred volumes. He
built, as it were, a pyramid of books to perpetuate his name: but, alas!
the pyramid has long since fallen, and only a few fragments are scattered
in various libraries, where they are scarcely disturbed even by the
antiquarian. What do we hear of Giraldus Cambrensis, the historian,
antiquary, philosopher, theologian, and poet? He declined two bishoprics
that he might shut himself up and write for posterity; but posterity never
inquires after his labors. What of Henry of Huntingdon, who, besides a
learned history of England, wrote a treatise on the contempt of the world,
which the world has revenged by forgetting him? What is quoted of Joseph
of Exeter, styled the miracle of his age in classical composition? Of his
three great heroic poems, one is lost forever, excepting a mere fragment;
the others are known only to a few of the curious in literature; and as to
his love verses and epigrams, they have entirely disappeared. What is in
current use of John Wallis the Franciscan, who acquired the name of the
tree of life? Of William of Malmsbury&mdash;of Simeon of Durham&mdash;of
Benedict of Peterborough&mdash;of John Hanvill of St. Albans&mdash;of&mdash;&mdash;"

"Prithee, friend," cried the quarto in a testy tone, "how old do you think
me? You are talking of authors that lived long before my time, and wrote
either in Latin or French, so that they in a manner expatriated
themselves, and deserved to be forgotten;* but I, sir, was ushered into
the world from the press of the renowned Wynkyn de Worde. I was written in
my own native tongue, at a time when the language had become fixed; and
indeed I was considered a model of pure and elegant English."

(I should observe that these remarks were couched in such intolerably
antiquated terms, that I have had infinite difficulty in rendering them
into modern phraseology.)

"I cry you mercy," said I, "for mistaking your age; but it matters little.
Almost all the writers of your time have likewise passed into
forgetfulness, and De Worde's publications are mere literary rarities
among book-collectors. The purity and stability of language, too, on which
you found your claims to perpetuity, have been the fallacious dependence
of authors of every age, even back to the times of the worthy Robert of
Gloucester, who wrote his history in rhymes of mongrel Saxon.+ Even now
many talk of Spenser's 'well of pure English undefiled,' as if the
language ever sprang from a well or fountain-head, and was not rather a
mere confluence of various tongues perpetually subject to changes and
intermixtures. It is this which has made English literature so extremely
mutable, and the reputation built upon it so fleeting. Unless thought can
be committed to something more permanent and unchangeable than such a
medium, even thought must share the fate of everything else, and fall into
decay. This should serve as a check upon the vanity and exultation of the
most popular writer. He finds the language in which he has embarked his
fame gradually altering and subject to the dilapidations of time and the
caprice of fashion. He looks back and beholds the early authors of his
country, once the favorites of their day, supplanted by modern writers. A
few short ages have covered them with obscurity, and their merits can only
be relished by the quaint taste of the bookworm. And such, he anticipates,
will be the fate of his own work, which, however it may be admired in its
day and held up as a model of purity, will in the course of years grow
antiquated and obsolete, until it shall become almost as unintelligible in
its native land as an Egyptian obelisk or one of those Runic inscriptions
said to exist in the deserts of Tartary." "I declare," added I, with some
emotion, "when I contemplate a modern library, filled with new works in
all the bravery of rich gilding and binding, I feel disposed to sit down
and weep, like the good Xerxes, when he surveyed his army, pranked out in
all the splendor of military array, and reflected that in one hundred
years not one of them would be in existence."

"""
* "In Latin and French hath many soueraine wittes had great
delyte to endite, and have many noble thinges fulfilde, but
certes there ben some that speaken their poisye in French,
of which speche the Frenchmen have as good a fantasye as w
ave in hearying of Frenchmen's Englishe."&mdash;CHAUCER'S
Testament of Love.

+ Holinshed in his Chronicle, observes, "Afterwards, also,
by diligent vell f Geffry Chaucer and John Gowre, in the
time of Richard the Second, and after them of John Scogan
and John Lydgate, monke of Berrie, our said toong was
brought to an excellent passe, notwithstanding that it never
came unto the type of perfection until the time of Queen
Elizabeth, wherein John Jewell, Bishop of Sarum, John Fox,
and sundrie learned and excellent writers, have fully
accomplished the ornature of the same to their great praise
and mortal commendation."
"""

"Ah," said the little quarto, with a heavy sigh, "I see how it is: these
in modern scribblers have superseded all the good old authors. I suppose
nothing is read nowadays but Sir Philip Sidney's Arcadia, Sackville's
stately plays and Mirror for Magistrates, or the fine-spun euphuisms of
the 'unparalleled John Lyly.'"

"There you are again mistaken," said I; "the writers whom you suppose in
vogue, because they happened to be so when you were last in circulation,
have long since had their day. Sir Philip Sidney's Arcadia, the
immortality of which was so fondly predicted by his admirers,* and which,
in truth, was full of noble thoughts, delicate images, and graceful turns
of language, is now scarcely ever mentioned. Sackville has strutted into
obscurity; and even Lyly, though his writings were once the delight of a
court, and apparently perpetuated by a proverb, is now scarcely known even
by name. A whole crowd of authors who wrote and wrangled at the time, have
likewise gone down with all their writings and their controversies. Wave
after wave of succeeding literature has rolled over them, until they are
buried so deep, that it is only now and then that some industrious diver
after fragments of antiquity brings up a specimen for the gratification of
the curious.

"""
* "Live ever sweete booke; the simple image of his gentle
witt, and the golden pillar of his noble courage; and ever
notify unto the world that thy writer was the secretary of
eloquence, the breath of the muses, the honey bee of the
daintyest flowers of witt and arte, the pith of morale and
intellectual virtues, the arme of Bellona in the field, the
tongue of Suada in the chamber, the spirits of Practise in
esse, and the paragon of excellence in print."&mdash;Harvey
Pierce's Supererogation.
"""

"For my part," I continued, "I consider this mutability of language a wise
precaution of Providence for the benefit of the world at large, and of
authors in particular. To reason from analogy, we daily behold the varied
and beautiful tribes of vegetables springing up, flourishing, adorning the
fields for a short time, and then fading into dust, to make way for their
successors. Were not this the case, the fecundity of nature would be a
grievance instead of a blessing. The earth would groan with rank and
excessive vegetation, and its surface become a tangled wilderness. In like
manner, the works of genius and learning decline and make way for
subsequent productions. Language gradually varies, and with it fade away
the writings of authors who have flourished their allotted time; otherwise
the creative powers of genius would overstock the world, and the mind
would be completely bewildered in the endless mazes of literature.
Formerly there were some restraints on this excessive multiplication.
Works had to be transcribed by hand, which was a slow and laborious
operation; they were written either on parchment, which was expensive, so
that one work was often erased to make way for another; or on papyrus,
which was fragile and extremely perishable. Authorship was a limited and
unprofitable craft, pursued chiefly by monks in the leisure and solitude
of their cloisters. The accumulation of manuscripts was slow and costly,
and confined almost entirely to monasteries. To these circumstances it
may, in some measure, be owing that we have not been inundated by the
intellect of antiquity&mdash;that the fountains of thought have not been
broken up, and modern genius drowned in the deluge. But the inventions of
paper and the press have put an end to all these restraints. They have
made every one a writer, and enabled every mind to pour itself into print,
and diffuse itself over the whole intellectual world. The consequences are
alarming. The stream of literature has swollen into a torrent&mdash;augmented
into a river-expanded into a sea. A few centuries since five or six
hundred manuscripts constituted a great library; but what would you say to
libraries, such as actually exist, containing three or four hundred
thousand volumes; legions of authors at the same time busy; and the press
going on with fearfully increasing activity, to double and quadruple the
number? Unless some unforeseen mortality should break out among the
progeny of the Muse, now that she has become so prolific, I tremble for
posterity. I fear the mere fluctuation of language will not be sufficient.
Criticism may do much; it increases with the increase of literature, and
resembles one of those salutary checks on population spoken of by
economists. All possible encouragement, therefore, should be given to the
growth of critics, good or bad. But I fear all will be in vain; let
criticism do what it may, writers will write, printers will print, and the
world will inevitably be overstocked with good books. It will soon be the
employment of a lifetime merely to learn their names. Many a man of
passable information at the present day reads scarcely anything but
reviews, and before long a man of erudition will be little better than a
mere walking catalogue."

"My very good sir," said the little quarto, yawning most drearily in my
face, "excuse my interrupting you, but I perceive you are rather given to
prose. I would ask the fate of an author who was making some noise just as
I left the world. His reputation, however, was considered quite temporary.
The learned shook their heads at him, for he was a poor, half-educated
varlet, that knew little of Latin, and nothing of Greek, and had been
obliged to run the country for deer-stealing. I think his name was
Shakespeare. I presume he soon sunk into oblivion."

"On the contrary," said I, "it is owing to that very man that the
literature of his period has experienced a duration beyond the ordinary
term of English literature. There rise authors now and then who seem proof
against the mutability of language because they have rooted themselves in
the unchanging principles of human nature. They are like gigantic trees
that we sometimes see on the banks of a stream, which by their vast and
deep roots, penetrating through the mere surface and laying hold on the
very foundations of the earth, preserve the soil around them from being
swept away by the ever-flowing current, and hold up many a neighboring
plant, and perhaps worthless weed, to perpetuity. Such is the case with
Shakespeare, whom we behold defying the encroachments of time, retaining
in modern use the language and literature of his day, and giving duration
to many an indifferent author, merely from having flourished in his
vicinity. But even he, I grieve to say, is gradually assuming the tint of
age, and his whole form is overrun by a profusion of commentators, who,
like clambering vines and creepers, almost bury the noble plant that
upholds them."

Here the little quarto began to heave his sides and chuckle, until at
length he broke out into a plethoric fit of laughter that had wellnigh
choked him by reason of his excessive corpulency. "Mighty well!" cried he,
as soon as he could recover breath, "mighty well! and so you would
persuade me that the literature of an age is to be perpetuated by a
vagabond deer-stealer! by a man without learning! by a poet! forsooth&mdash;a
poet!" And here he wheezed forth another fit of laughter.

I confess that I felt somewhat nettled at this rudeness, which, however, I
pardoned on account of his having flourished in a less polished age. I
determined, nevertheless, not to give up my point.

"Yes," resumed I positively, "a poet; for of all writers he has the best
chance for immortality. Others may write from the head, but he writes from
the heart, and the heart will always understand him. He is the faithful
portrayer of Nature, whose features are always the same and always
interesting. Prose writers are voluminous and unwieldy; their pages
crowded with commonplaces, and their thoughts expanded into tediousness.
But with the true poet every thing is terse, touching, or brilliant. He
gives the choicest thoughts in the choicest language. He illustrates them
by everything that he sees most striking in nature and art. He enriches
them by pictures of human life, such as it is passing before him. His
writings, therefore, contain the spirit, the aroma, if I may use the
phrase, of the age in which he lives. They are caskets which inclose
within a small compass the wealth of the language&mdash;its family jewels,
which are thus transmitted in a portable form to posterity. The setting
may occasionally be antiquated, and require now and then to be renewed, as
in the case of Chaucer; but the brilliancy and intrinsic value of the gems
continue unaltered. Cast a look back over the long reach of literary
history. What vast valleys of dulness, filled with monkish legends and
academical controversies! What bogs of theological speculations! What
dreary wastes of metaphysics! Here and there only do we behold the
heaven-illumined bards, elevated like beacons on their widely-separated
heights, to transmit the pure light of poetical intelligence from age to
age."*

I was just about to launch forth into eulogiums upon the poets of the day
when the sudden opening of the door caused me to turn my head. It was the
verger, who came to inform me that it was time to close the library. I
sought to have a parting word with the quarto, but the worthy little tome
was silent; the clasps were closed: and it looked perfectly unconscious of
all that had passed. I have been to the library two or three times since,
and have endeavored to draw it into further conversation, but in vain; and
whether all this rambling colloquy actually took place, or whether it was
another of those old day-dreams to which I am subject, I have never, to
this moment, been able to discover.

"""
* Thorow earth and waters deepe,
The pen by skill doth passe:
And featly nyps the worldes abuse,
And shoes us in a glasse,
The vertu and the vice
Of every wight alyve;
The honey comb that bee doth make
Is not so sweet in hyve,
As are the golden leves
That drops from poet's head!
Which doth surmount our common talke
As farre as dross doth lead.
Churchyard.
"""
"""
May no wolfe howle; no screech owle stir
A wing about thy sepulchre!
No boysterous winds or stormes come hither,
To starve or wither
Thy soft sweet earth! but, like a spring,
Love kept it ever flourishing.
HERRICK.
"""

[img[images/9436m.jpg]]

IN the course of an excursion through one of the remote counties of
England, I had struck into one of those cross-roads that lead through the
more secluded parts of the country, and stopped one afternoon at a village
the situation of which was beautifully rural and retired. There was an air
of primitive simplicity about its inhabitants not to be found in the
villages which lie on the great coach-roads. I determined to pass the
night there, and, having taken an early dinner, strolled out to enjoy the
neighboring scenery.

My ramble, as is usually the case with travellers, soon led me to the
church, which stood at a little distance from the village. Indeed, it was
an object of some curiosity, its old tower being completely overrun with
ivy so that only here and there a jutting buttress, an angle of gray wall,
or a fantastically carved ornament peered through the verdant covering. It
was a lovely evening. The early part of the day had been dark and showery,
but in the afternoon it had cleared up, and, though sullen clouds still
hung overhead, yet there was a broad tract of golden sky in the west, from
which the setting sun gleamed through the dripping leaves and lit up all
Nature into a melancholy smile. It seemed like the parting hour of a good
Christian smiling on the sins and sorrows of the world, and giving, in the
serenity of his decline, an assurance that he will rise again in glory.

[img[images/0437m.jpg]]

I had seated myself on a half-sunken tombstone, and was musing, as one is
apt to do at this sober-thoughted hour, on past scenes and early friends&mdash;on
those who were distant and those who were dead&mdash;and indulging in that
kind of melancholy fancying which has in it something sweeter even than
pleasure. Every now and then the stroke of a bell from the neighboring
tower fell on my ear; its tones were in unison with the scene, and,
instead of jarring, chimed in with my feelings; and it was some time
before I recollected that it must be tolling the knell of some new tenant
of the tomb.

Presently I saw a funeral train moving across the village green; it wound
slowly along a lane, was lost, and reappeared through the breaks of the
hedges, until it passed the place where I was sitting. The pall was
supported by young girls dressed in white, and another, about the age of
seventeen, walked before, bearing a chaplet of white flowers&mdash;a token
that the deceased was a young and unmarried female. The corpse was
followed by the parents. They were a venerable couple of the better order
of peasantry. The father seemed to repress his feelings, but his fixed
eye, contracted brow, and deeply-furrowed face showed the struggle that
was passing within. His wife hung on his arm, and wept aloud with the
convulsive bursts of a mother's sorrow.

I followed the funeral into the church. The bier was placed in the centre
aisle, and the chaplet of white flowers, with a pair of white gloves, was
hung over the seat which the deceased had occupied.

Every one knows the soul-subduing pathos of the funeral service, for who
is so fortunate as never to have followed some one he has loved to the
tomb? But when performed over the remains of innocence and beauty, thus
laid low in the bloom of existence, what can be more affecting? At that
simple but most solemn consignment of the body to the grave-"Earth to
earth, ashes to ashes, dust to dust!"&mdash;the tears of the youthful
companions of the deceased flowed unrestrained. The father still seemed to
struggle with his feelings, and to comfort himself with the assurance that
the dead are blessed which die in the Lord; but the mother only thought of
her child as a flower of the field cut down and withered in the midst of
its sweetness; she was like Rachel, "mourning over her children, and would
not be comforted."

On returning to the inn I learnt the whole story of the deceased. It was a
simple one, and such as has often been told. She had been the beauty and
pride of the village. Her father had once been an opulent farmer, but was
reduced in circumstances. This was an only child, and brought up entirely
at home in the simplicity of rural life. She had been the pupil of the
village pastor, the favorite lamb of his little flock. The good man
watched over her education with paternal care; it was limited and suitable
to the sphere in which she was to move, for he only sought to make her an
ornament to her station in life, not to raise her above it. The tenderness
and indulgence of her parents and the exemption from all ordinary
occupations had fostered a natural grace and delicacy of character that
accorded with the fragile loveliness of her form. She appeared like some
tender plant of the garden blooming accidentally amid the hardier natives
of the fields.

The superiority of her charms was felt and acknowledged by her companions,
but without envy, for it was surpassed by the unassuming gentleness and
winning kindness of her manners. It might be truly said of her:

"""
"This is the prettiest low-born lass, that ever
Ran on the green-sward: nothing she does or seems
But smacks of something greater than herself;
Too noble for this place."
"""

The village was one of those sequestered spots which still retain some
vestiges of old English customs. It had its rural festivals and holiday
pastimes, and still kept up some faint observance of the once popular
rites of May. These, indeed, had been promoted by its present pastor, who
was a lover of old customs and one of those simple Christians that think
their mission fulfilled by promoting joy on earth and good-will among
mankind. Under his auspices the May-pole stood from year to year in the
centre of the village green; on Mayday it was decorated with garlands and
streamers, and a queen or lady of the May was appointed, as in former
times, to preside at the sports and distribute the prizes and rewards. The
picturesque situation of the village and the fancifulness of its rustic
fetes would often attract the notice of casual visitors. Among these, on
one May-day, was a young officer whose regiment had been recently
quartered in the neighborhood. He was charmed with the native taste that
pervaded this village pageant, but, above all, with the dawning loveliness
of the queen of May. It was the village favorite who was crowned with
flowers, and blushing and smiling in all the beautiful confusion of
girlish diffidence and delight. The artlessness of rural habits enabled
him readily to make her acquaintance; he gradually won his way into her
intimacy, and paid his court to her in that unthinking way in which young
officers are too apt to trifle with rustic simplicity.

There was nothing in his advances to startle or alarm. He never even
talked of love, but there are modes of making it more eloquent than
language, and which convey it subtilely and irresistibly to the heart. The
beam of the eye, the tone of voice, the thousand tendernesses which
emanate from every word and look and action,&mdash;these form the true
eloquence of love, and can always be felt and understood, but never
described. Can we wonder that they should readily win a heart young,
guileless, and susceptible? As to her, she loved almost unconsciously; she
scarcely inquired what was the growing passion that was absorbing every
thought and feeling, or what were to be its consequences. She, indeed,
looked not to the future. When present, his looks and words occupied her
whole attention; when absent, she thought but of what had passed at their
recent interview. She would wander with him through the green lanes and
rural scenes of the vicinity. He taught her to see new beauties in Nature;
he talked in the language of polite and cultivated life, and breathed into
her ear the witcheries of romance and poetry.

Perhaps there could not have been a passion between the sexes more pure
than this innocent girl's. The gallant figure of her youthful admirer and
the splendor of his military attire might at first have charmed her eye,
but it was not these that had captivated her heart. Her attachment had
something in it of idolatry. She looked up to him as to a being of a
superior order. She felt in his society the enthusiasm of a mind naturally
delicate and poetical, and now first awakened to a keen perception of the
beautiful and grand. Of the sordid distinctions of rank and fortune she
thought nothing; it was the difference of intellect, of demeanor, of
manners, from those of the rustic society to which she had been
accustomed, that elevated him in her opinion. She would listen to him with
charmed ear and downcast look of mute delight, and her cheek would mantle
with enthusiasm; or if ever she ventured a shy glance of timid admiration,
it was as quickly withdrawn, and she would sigh and blush at the idea of
her comparative unworthiness.

Her lover was equally impassioned, but his passion was mingled with
feelings of a coarser nature. He had begun the connection in levity, for
he had often heard his brother-officers boast of their village conquests,
and thought some triumph of the kind necessary to his reputation as a man
of spirit. But he was too full of youthful fervor. His heart had not yet
been rendered sufficiently cold and selfish by a wandering and a
dissipated life: it caught fire from the very flame it sought to kindle,
and before he was aware of the nature of his situation he became really in
love.

What was he to do? There were the old obstacles which so incessantly occur
in these heedless attachments. His rank in life, the prejudices of titled
connections, his dependence upon a proud and unyielding father, all
forbade him to think of matrimony; but when he looked down upon this
innocent being, so tender and confiding, there was a purity in her
manners, a blamelessness in her life, and a beseeching modesty in her
looks that awed down every licentious feeling. In vain did he try to
fortify himself by a thousand heartless examples of men of fashion, and to
chill the glow of generous sentiment with that cold derisive levity with
which he had heard them talk of female virtue: whenever he came into her
presence she was still surrounded by that mysterious but impassive charm
of virgin purity in whose hallowed sphere no guilty thought can live.

The sudden arrival of orders for the regiment to repair to the Continent
completed the confusion of his mind. He remained for a short time in a
state of the most painful irresolution; he hesitated to communicate the
tidings until the day for marching was at hand, when he gave her the
intelligence in the course of an evening ramble.

The idea of parting had never before occurred to her. It broke in at once
upon her dream of felicity; she looked upon it as a sudden and
insurmountable evil, and wept with the guileless simplicity of a child. He
drew her to his bosom and kissed the tears from her soft cheek; nor did he
meet with a repulse, for there are moments of mingled sorrow and
tenderness which hallow the caresses of affection. He was naturally
impetuous, and the sight of beauty apparently yielding in his arms, the
confidence of his power over her, and the dread of losing her forever all
conspired to overwhelm his better feelings: he ventured to propose that
she should leave her home and be the companion of his fortunes.

He was quite a novice in seduction, and blushed and faltered at his own
baseness; but so innocent of mind was his intended victim that she was at
first at a loss to comprehend his meaning, and why she should leave her
native village and the humble roof of her parents. When at last the nature
of his proposal flashed upon her pure mind, the effect was withering. She
did not weep; she did not break forth into reproach; she said not a word,
but she shrunk back aghast as from a viper, gave him a look of anguish
that pierced to his very soul, and, clasping her hands in agony, fled, as
if for refuge, to her father's cottage.

The officer retired confounded, humiliated, and repentant. It is uncertain
what might have been the result of the conflict of his feelings, had not
his thoughts been diverted by the bustle of departure. New scenes, new
pleasures, and new companions soon dissipated his self-reproach and
stifled his tenderness; yet, amidst the stir of camps, the revelries of
garrisons, the array of armies, and even the din of battles, his thoughts
would sometimes steal back to the scenes of rural quiet and village
simplicity&mdash;the white cottage, the footpath along the silver brook
and up the hawthorn hedge, and the little village maid loitering along it,
leaning on his arm and listening to him with eyes beaming with unconscious
affection.

The shock which the poor girl had received in the destruction of all her
ideal world had indeed been cruel. Faintings and hysterics had at first
shaken her tender frame, and were succeeded by a settled and pining
melancholy. She had beheld from her window the march of the departing
troops. She had seen her faithless lover borne off, as if in triumph,
amidst the sound of drum and trumpet and the pomp of arms. She strained a
last aching gaze after him as the morning sun glittered about his figure
and his plume waved in the breeze; he passed away like a bright vision
from her sight, and left her all in darkness.

It would be trite to dwell on the particulars of her after story. It was,
like other tales of love, melancholy. She avoided society and wandered out
alone in the walks she had most frequented with her lover. She sought,
like the stricken deer, to weep in silence and loneliness and brood over
the barbed sorrow that rankled in her soul. Sometimes she would be seen
late of an evening sitting in the porch of the village church, and the
milk-maids, returning from the fields, would now and then overhear her
singing some plaintive ditty in the hawthorn walk. She became fervent in
her devotions at church, and as the old people saw her approach, so wasted
away, yet with a hectic gloom and that hallowed air which melancholy
diffuses round the form, they would make way for her as for something
spiritual, and looking after her, would shake their heads in gloomy
foreboding.

She felt a conviction that she was hastening to the tomb, but looked
forward to it as a place of rest. The silver cord that had bound her to
existence was loosed, and there seemed to be no more pleasure under the
sun. If ever her gentle bosom had entertained resentment against her
lover, it was extinguished. She was incapable of angry passions, and in a
moment of saddened tenderness she penned him a farewell letter. It was
couched in the simplest language, but touching from its very simplicity.
She told him that she was dying, and did not conceal from him that his
conduct was the cause. She even depicted the sufferings which she had
experienced, but concluded with saying that she could not die in peace
until she had sent him her forgiveness and her blessing.

By degrees her strength declined that she could no longer leave the
cottage. She could only totter to the window, where, propped up in her
chair, it was her enjoyment to sit all day and look out upon the
landscape. Still she uttered no complaint nor imparted to any one the
malady that was preying on her heart. She never even mentioned her lover's
name, but would lay her head on her mother's bosom and weep in silence.
Her poor parents hung in mute anxiety over this fading blossom of their
hopes, still flattering themselves that it might again revive to freshness
and that the bright unearthly bloom which sometimes flushed her cheek
might be the promise of returning health.

In this way she was seated between them one Sunday afternoon; her hands
were clasped in theirs, the lattice was thrown open, and the soft air that
stole in brought with it the fragrance of the clustering honeysuckle which
her own hands had trained round the window.

[img[images/0446m.jpg]]

Her father had just been reading a chapter in the Bible: it spoke of the
vanity of worldly things and of the joys of heaven: it seemed to have
diffused comfort and serenity through her bosom. Her eye was fixed on the
distant village church: the bell had tolled for the evening service; the
last villager was lagging into the porch, and everything had sunk into
that hallowed stillness peculiar to the day of rest. Her parents were
gazing on her with yearning hearts. Sickness and sorrow, which pass so
roughly over some faces, had given to hers the expression of a seraph's. A
tear trembled in her soft blue eye. Was she thinking of her faithless
lover? or were her thoughts wandering to that distant churchyard, into
whose bosom she might soon be gathered?

Suddenly the clang of hoofs was heard: a horseman galloped to the cottage;
he dismounted before the window; the poor girl gave a faint exclamation
and sunk back in her chair: it was her repentant lover. He rushed into the
house and flew to clasp her to his bosom; but her wasted form, her
deathlike countenance&mdash;so wan, yet so lovely in its desolation&mdash;smote
him to the soul, and he threw himself in agony at her feet. She was too
faint to rise&mdash;she attempted to extend her trembling hand&mdash;her
lips moved as if she spoke, but no word was articulated; she looked down
upon him with a smile of unutterable tenderness, and closed her eyes
forever.

Such are the particulars which I gathered of this village story. They are
but scanty, and I am conscious have little novelty to recommend them. In
the present rage also for strange incident and high-seasoned narrative
they may appear trite and insignificant, but they interested me strongly
at the time; and, taken in connection with the affecting ceremony which I
had just witnessed, left a deeper impression on my mind than many
circumstances of a more striking nature. I have passed through the place
since, and visited the church again from a better motive than mere
curiosity. It was a wintry evening: the trees were stripped of their
foliage, the churchyard looked naked and mournful, and the wind rustled
coldly through the dry grass. Evergreens, however, had been planted about
the grave of the village favorite, and osiers were bent over it to keep
the turf uninjured.

The church-door was open and I stepped in. There hung the chaplet of
flowers and the gloves, as on the day of the funeral: the flowers were
withered, it is true, but care seemed to have been taken that no dust
should soil their whiteness. I have seen many monuments where art has
exhausted its powers to awaken the sympathy of the spectator, but I have
met with none that spoke more touchingly to my heart than this simple but
delicate memento of departed innocence.

[img[images/0448m.jpg]]
[img[images/0031m.jpg]]

"I have no wife nor children, good or bad, to provide for. A mere
spectator of other men's fortunes and adventures, and how they play their
parts; which, methinks, are diversely presented unto me, as from a common
theatre or scene."&mdash;BURTON.
[img[images/0225m.jpg]]

A TRAVELLER'S TALE.*

"""
He that supper for is dight,
He lyes full cold, I trow, this night!
Yestreen to chamber I him led,
This night Gray-steel has made his bed!
SIR EGER, SIR GRAHAME, and SIR GRAY-STEEL.
"""

ON the summit of one of the heights of the Odenwald, a wild and romantic
tract of Upper Germany that lies not far from the confluence of the Main
and the Rhine, there stood many, many years since the castle of the Baron
Von Landshort. It is now quite fallen to decay, and almost buried among
beech trees and dark firs; above which, however, its old watch-tower may
still be seen struggling, like the former possessor I have mentioned, to
carry a high head and look down upon the neighboring country.

The baron was a dry branch of the great family of Katzenellenbogen,+ and
inherited the relics of the property and all the pride, of his ancestors.
Though the warlike disposition of his predecessors had much impaired the
family possessions, yet the baron still endeavored to keep up some show of
former state. The times were peaceable, and the German nobles in general
had abandoned their inconvenient old castles, perched like eagles' nests
among the mountains, and had built more convenient residences in the
valleys; still, the baron remained proudly drawn up in his little
fortress, cherishing with hereditary inveteracy all the old family feuds,
so that he was on ill terms with some of his nearest neighbors, on account
of disputes that had happened between their great-great-grandfathers.

"""
* The erudite reader, well versed in good-for-nothing lore,
will perceive that the above Tale must have been suggested
to the old Swiss by a little French anecdote, a circumstance
said to have taken place in Paris.

+ I.e., CAT'S ELBOW&mdash;the name of a family of those parts,
and very powerful in former times. The appellation, we are
told, was given in compliment to a peerless dame of the
family, celebrated for a fine arm.
"""

The baron had but one child, a daughter, but Nature, when she grants but
one child, always compensates by making it a prodigy; and so it was with
the daughter of the baron. All the nurses, gossips, and country cousins
assured her father that she had not her equal for beauty in all Germany;
and who should know better than they? She had, moreover, been brought up
with great care under the superintendence of two maiden aunts, who had
spent some years of their early life at one of the little German courts,
and were skilled in all branches of knowledge necessary to the education
of a fine lady. Under their instructions she became a miracle of
accomplishments. By the time she was eighteen she could embroider to
admiration, and had worked whole histories of the saints in tapestry with
such strength of expression in their countenances that they looked like so
many souls in purgatory. She could read without great difficulty, and had
spelled her way through several Church legends and almost all the
chivalric wonders of the Heldenbuch. She had even made considerable
proficiency in writing; could sign her own name without missing a letter,
and so legibly that her aunts could read it without spectacles. She
excelled in making little elegant good-for-nothing, lady-like knicknacks
of all kinds, was versed in the most abstruse dancing of the day, played a
number of airs on the harp and guitar, and knew all the tender ballads of
the Minnelieders by heart.

Her aunts, too, having been great flirts and coquettes in their younger
days, were admirably calculated to be vigilant guardians and strict
censors of the conduct of their niece; for there is no duenna so rigidly
prudent and inexorably decorous as a superannuated coquette. She was
rarely suffered out of their sight; never went beyond the domains of the
castle unless well attended, or rather well watched; had continual
lectures read to her about strict decorum and implicit obedience; and, as
to the men&mdash;pah!&mdash;she was taught to hold them at such a distance
and in such absolute distrust that, unless properly authorized, she would
not have cast a glance upon the handsomest cavalier in the world&mdash;no,
not if he were even dying at her feet.

The good effects of this system were wonderfully apparent. The young lady
was a pattern of docility and correctness. While others were wasting their
sweetness in the glare of the world, and liable to be plucked and thrown
aside by every hand, she was coyly blooming into fresh and lovely
womanhood under the protection of those immaculate spinsters, like a
rosebud blushing forth among guardian thorns. Her aunts looked upon her
with pride and exultation, and vaunted that, though all the other young
ladies in the world might go astray, yet thank Heaven, nothing of the kind
could happen to the heiress of Katzenellenbogen.

But, however scantily the Baron Von Landshort might be provided with
children, his household was by no means a small one; for Providence had
enriched him with abundance of poor relations. They, one and all,
possessed the affectionate disposition common to humble relatives&mdash;were
wonderfully attached to the baron, and took every possible occasion to
come in swarms and enliven the castle. All family festivals were
commemorated by these good people at the baron's expense; and when they
were filled with good cheer they would declare that there was nothing on
earth so delightful as these family meetings, these jubilees of the heart.

The baron, though a small man, had a large soul, and it swelled with
satisfaction at the consciousness of being the greatest man in the little
world about him. He loved to tell long stories about the stark old
warriors whose portraits looked grimly down from the walls around, and he
found no listeners equal to those who fed at his expense. He was much
given to the marvellous and a firm believer in all those supernatural
tales with which every mountain and valley in Germany abounds. The faith
of his guests exceeded even his own: they listened to every tale of wonder
with open eyes and mouth, and never failed to be astonished, even though
repeated for the hundredth time. Thus lived the Baron Von Landshort, the
oracle of his table, the absolute monarch of his little territory, and
happy, above all things, in the persuasion that he was the wisest man of
the age.

At the time of which my story treats there was a great family gathering at
the castle on an affair of the utmost importance: it was to receive the
destined bridegroom of the baron's daughter. A negotiation had been
carried on between the father and an old nobleman of Bavaria to unite the
dignity of their houses by the marriage of their children. The
preliminaries had been conducted with proper punctilio. The young people
were betrothed without seeing each other, and the time was appointed for
the marriage ceremony. The young Count Von Altenburg had been recalled
from the army for the purpose, and was actually on his way to the baron's
to receive his bride. Missives had even been received from him from
Wurtzburg, where he was accidentally detained, mentioning the day and hour
when he might be expected to arrive.

The castle was in a tumult of preparation to give him a suitable welcome.
The fair bride had been decked out with uncommon care. The two aunts had
superintended her toilet, and quarrelled the whole morning about every
article of her dress. The young lady had taken advantage of their contest
to follow the bent of her own taste; and fortunately it was a good one.
She looked as lovely as youthful bridegroom could desire, and the flutter
of expectation heightened the lustre of her charms.

The suffusions that mantled her face and neck, the gentle heaving of the
bosom, the eye now and then lost in reverie, all betrayed the soft tumult
that was going on in her little heart. The aunts were continually hovering
around her, for maiden aunts are apt to take great interest in affairs of
this nature. They were giving her a world of staid counsel how to deport
herself, what to say, and in what manner to receive the expected lover.

The baron was no less busied in preparations. He had, in truth, nothing
exactly to do; but he was naturally a fuming, bustling little man, and
could not remain passive when all the world was in a hurry. He worried
from top to bottom of the castle with an air of infinite anxiety; he
continually called the servants from their work to exhort them to be
diligent; and buzzed about every hall and chamber, as idly restless and
importunate as a blue-bottle fly on a warm summer's day.

In the mean time the fatted calf had been killed; the forests had rung
with the clamor of the huntsmen; the kitchen was crowded with good cheer;
the cellars had yielded up whole oceans of Rhein-wein and Ferre-wein; and
even the great Heidelberg tun had been laid under contribution. Everything
was ready to receive the distinguished guest with Saus und Braus in the
true spirit of German hospitality; but the guest delayed to make his
appearance. Hour rolled after hour. The sun, that had poured his downward
rays upon the rich forest of the Odenwald, now just gleamed along the
summits of the mountains. The baron mounted the highest tower and strained
his eyes in hopes of catching a distant sight of the count and his
attendants. Once he thought he beheld them; the sound of horns came
floating from the valley, prolonged by the mountain-echoes. A number of
horsemen were seen far below slowly advancing along the road; but when
they had nearly reached the foot of the mountain they suddenly struck off
in a different direction. The last ray of sunshine departed, the bats
began to flit by in the twilight, the road grew dimmer and dimmer to the
view, and nothing appeared stirring in it but now and then a peasant
lagging homeward from his labor.

While the old castle of Landshort was in this state of perplexity a very
interesting scene was transacting in a different part of the Odenwald.

The young Count Von Altenburg was tranquilly pursuing his route in that
sober jog-trot way in which a man travels toward matrimony when his
friends have taken all the trouble and uncertainty of courtship off his
hands and a bride is waiting for him as certainly as a dinner at the end
of his journey. He had encountered at Wurtzburg a youthful
companion-in-arms with whom he had seen some service on the frontiers&mdash;Herman
Von Starkenfaust, one of the stoutest hands and worthiest hearts of German
chivalry&mdash;who was now returning from the army. His father's castle
was not far distant from the old fortress of Landshort, although an
hereditary feud rendered the families hostile and strangers to each other.

In the warm-hearted moment of recognition the young friends related all
their past adventures and fortunes, and the count gave the whole history
of his intended nuptials with a young lady whom he had never seen, but of
whose charms he had received the most enrapturing descriptions.

As the route of the friends lay in the same direction, they agreed to
perform the rest of their journey together, and that they might do it the
more leisurely, set off from Wurtzburg at an early hour, the count having
given directions for his retinue to follow and overtake him.

They beguiled their wayfaring with recollections of their military scenes
and adventures; but the count was apt to be a little tedious now and then
about the reputed charms of his bride and the felicity that awaited him.

In this way they had entered among the mountains of the Odenwald, and were
traversing one of its most lonely and thickly wooded passes. It is well
known that the forests of Germany have always been as much infested by
robbers as its castles by spectres; and at this time the former were
particularly numerous, from the hordes of disbanded soldiers wandering
about the country. It will not appear extraordinary, therefore, that the
cavaliers were attacked by a gang of these stragglers, in the midst of the
forest. They defended themselves with bravery, but were nearly overpowered
when the count's retinue arrived to their assistance. At sight of them the
robbers fled, but not until the count had received a mortal wound. He was
slowly and carefully conveyed back to the city of Wurtzburg, and a friar
summoned from a neighboring convent who was famous for his skill in
administering to both soul and body; but half of his skill was
superfluous; the moments of the unfortunate count were numbered.

With his dying breath he entreated his friend to repair instantly to the
castle of Landshort and explain the fatal cause of his not keeping his
appointment with his bride. Though not the most ardent of lovers, he was
one of the most punctilious of men, and appeared earnestly solicitous that
his mission should be speedily and courteously executed. "Unless this is
done," said he, "I shall not sleep quietly in my grave." He repeated these
last words with peculiar solemnity. A request at a moment so impressive
admitted no hesitation. Starkenfaust endeavored to soothe him to calmness,
promised faithfully to execute his wish, and gave him his hand in solemn
pledge. The dying man pressed it in acknowledgment, but soon lapsed into
delirium&mdash;raved about his bride, his engagements, his plighted word&mdash;ordered
his horse, that he might ride to the castle of Landshort, and expired in
the fancied act of vaulting into the saddle.

Starkenfaust bestowed a sigh and a soldier's tear on the untimely fate of
his comrade and then pondered on the awkward mission he had undertaken.
His heart was heavy and his head perplexed; for he was to present himself
an unbidden guest among hostile people, and to damp their festivity with
tidings fatal to their hopes. Still, there were certain whisperings of
curiosity in his bosom to see this far-famed beauty of Katzenellenbogen,
so cautiously shut up from the world; for he was a passionate admirer of
the sex, and there was a dash of eccentricity and enterprise in his
character that made him fond of all singular adventure.

Previous to his departure he made all due arrangements with the holy
fraternity of the convent for the funeral solemnities of his friend, who
was to be buried in the cathedral of Wurtzburg near some of his
illustrious relatives, and the mourning retinue of the count took charge
of his remains.

It is now high time that we should return to the ancient family of
Katzenellenbogen, who were impatient for their guest, and still more for
their dinner, and to the worthy little baron, whom we left airing himself
on the watch-tower.

Night closed in, but still no guest arrived. The baron descended from the
tower in despair. The banquet, which had been delayed from hour to hour,
could no longer be postponed. The meats were already overdone, the cook in
an agony, and the whole household had the look of a garrison, that had
been reduced by famine. The baron was obliged reluctantly to give orders
for the feast without the presence of the guest. All were seated at table,
and just on the point of commencing, when the sound of a horn from without
the gate gave notice of the approach of a stranger. Another long blast
filled the old courts of the castle with its echoes, and was answered by
the warder from the walls. The baron hastened to receive his future
son-in-law.

The drawbridge had been let down, and the stranger was before the gate. He
was a tall gallant cavalier, mounted on a black steed. His countenance was
pale, but he had a beaming, romantic eye and an air of stately melancholy.
The baron was a little mortified that he should have come in this simple,
solitary style. His dignity for a moment was ruffled, and he felt disposed
to consider it a want of proper respect for the important occasion and the
important family with which he was to be connected. He pacified himself,
however, with the conclusion that it must have been youthful impatience
which had induced him thus to spur on sooner than his attendants.

"I am sorry," said the stranger, "to break in upon you thus unseasonably&mdash;&mdash;"

Here the baron interrupted him with a world of compliments and greetings,
for, to tell the truth, he prided himself upon his courtesy and eloquence.
The stranger attempted once or twice to stem the torrent of words, but in
vain, so he bowed his head and suffered it to flow on. By the time the
baron had come to a pause they had reached the inner court of the castle,
and the stranger was again about to speak, when he was once more
interrupted by the appearance of the female part of the family, leading
forth the shrinking and blushing bride. He gazed on her for a moment as
one entranced; it seemed as if his whole soul beamed forth in the gaze and
rested upon that lovely form. One of the maiden aunts whispered something
in her ear; she made an effort to speak; her moist blue eye was timidly
raised, gave a shy glance of inquiry on the stranger, and was cast again
to the ground. The words died away, but there was a sweet smile playing
about her lips, and a soft dimpling of the cheek that showed her glance
had not been unsatisfactory. It was impossible for a girl of the fond age
of eighteen, highly predisposed for love and matrimony, not to be pleased
with so gallant a cavalier.

The late hour at which the guest had arrived left no time for parley. The
baron was peremptory, and deferred all particular conversation until the
morning, and led the way to the untasted banquet.

It was served up in the great hall of the castle. Around the walls hung
the hard-favored portraits of the heroes of the house of Katzenellenbogen,
and the trophies which they had gained in the field, and in the chase.
Hacked corselets, splintered jousting-spears, and tattered banners were
mingled with the spoils of sylvan warfare: the jaws of the wolf and the
tusks of the boar grinned horribly among crossbows and battle-axes, and a
huge pair of antlers branched immediately over the head of the youthful
bridegroom.

The cavalier took but little notice of the company or the entertainment.
He scarcely tasted the banquet, but seemed absorbed in admiration of his
bride. He conversed in a low tone that could not be overheard, for the
language of love is never loud; but where is the female ear so dull that
it cannot catch the softest whisper of the lover? There was a mingled
tenderness and gravity in his manner that appeared to have a powerful
effect upon the young lady. Her color came and went as she listened with
deep attention. Now and then she made some blushing reply, and when his
eye was turned away she would steal a sidelong glance at his romantic
countenance, and heave a gentle sigh of tender happiness. It was evident
that the young couple were completely enamored. The aunts, who were deeply
versed in the mysteries of the heart, declared that they had fallen in
love with each other at first sight.

The feast went on merrily, or at least noisily, for the guests were all
blessed with those keen appetites that attend upon light purses and
mountain air. The baron told his best and longest stories, and never had
he told them so well or with such great effect. If there was anything
marvellous, his auditors were lost in astonishment; and if anything
facetious, they were sure to laugh exactly in the right place. The baron,
it is true, like most great men, was too dignified to utter any joke but a
dull one; it was always enforced, however, by a bumper of excellent
Hockheimer, and even a dull joke at one's own table, served up with jolly
old wine, is irresistible. Many good things were said by poorer and keener
wits that would not bear repeating, except on similar occasions; many sly
speeches whispered in ladies' ears that almost convulsed them with
suppressed laughter; and a song or two roared out by a poor but merry and
broad-faced cousin of the baron that absolutely made the maiden aunts hold
up their fans.

Amidst all this revelry the stranger guest maintained a most singular and
unseasonable gravity. His countenance assumed a deeper cast of dejection
as the evening advanced, and, strange as it may appear, even the baron's
jokes seemed only to render him the more melancholy. At times he was lost
in thought, and at times there was a perturbed and restless wandering of
the eye that bespoke a mind but ill at ease. His conversations with the
bride became more and more earnest and mysterious. Lowering clouds began
to steal over the fair serenity of her brow, and tremors to run through
her tender frame.

All this could not escape the notice of the company. Their gayety was
chilled by the unaccountable gloom of the bridegroom; their spirits were
infected; whispers and glances were interchanged, accompanied by shrugs
and dubious shakes of the head. The song and the laugh grew less and less
frequent: there were dreary pauses in the conversation, which were at
length succeeded by wild tales and supernatural legends. One dismal story
produced another still more dismal, and the baron nearly frightened some
of the ladies into hysterics with the history of the goblin horseman that
carried away the fair Leonora&mdash;a dreadful story which has since been
put into excellent verse, and is read and believed by all the world.

The bridegroom listened to this tale with profound attention. He kept his
eyes steadily fixed on the baron, and, as the story drew to a close, began
gradually to rise from his seat, growing taller and taller, until in the
baron's entranced eye he seemed almost to tower into a giant. The moment
the tale was finished he heaved a deep sigh and took a solemn farewell of
the company. They were all amazement. The baron was perfectly
thunderstruck.

"What! going to leave the castle at midnight? Why, everything was prepared
for his reception; a chamber was ready for him if he wished to retire."

The stranger shook his head mournfully and mysteriously: "I must lay my
head in a different chamber to-night."

There was something in this reply and the tone in which it was uttered
that made the baron's heart misgive him; but he rallied his forces and
repeated his hospitable entreaties.

The stranger shook his head silently, but positively, at every offer, and,
waving his farewell to the company, stalked slowly out of the hall. The
maiden aunts were absolutely petrified; the bride hung her head and a tear
stole to her eye.

The baron followed the stranger to the great court of the castle, where
the black charger stood pawing the earth and snorting with impatience.
When they had reached the portal, whose deep archway was dimly lighted by
a cresset, the stranger paused, and addressed the baron in a hollow tone
of voice, which the vaulted roof rendered still more sepulchral.

"Now that we are a lone," said he, "I will impart to you the reason of my
going. I have a solemn, an indispensable engagement&mdash;&mdash;"

"Why," said the baron, "cannot you send some one in your place?"

"It admits of no substitute&mdash;I must attend it in person; I must away
to Wurtzburg cathedral&mdash;&mdash;"

"Ay," said the baron, plucking up spirit, "but not until to-morrow&mdash;to-morrow
you shall take your bride there."

"No! no!" replied the stranger, with tenfold solemnity, "my engagement is
with no bride&mdash;the worms! the worms expect me! I am a dead man&mdash;I
have been slain by robbers&mdash;my body lies at Wurtzburg&mdash;at
midnight I am to be buried&mdash;the grave is waiting for me&mdash;I must
keep my appointment!"

He sprang on his black charger, dashed over the drawbridge, and the
clattering of his horse's hoofs was lost in the whistling of the night
blast.

The baron returned to the hall in the utmost consternation, and related
what had passed. Two ladies fainted outright, others sickened at the idea
of having banqueted with a spectre. It was the opinion of some that this
might be the wild huntsman, famous in German legend. Some talked of
mountain-sprites, of wood-demons, and of other supernatural beings with
which the good people of Germany have been so grievously harassed since
time immemorial. One of the poor relations ventured to suggest that it
might be some sportive evasion of the young cavalier, and that the very
gloominess of the caprice seemed to accord with so melancholy a personage.
This, however, drew on him, the indignation of the whole company, and
especially of the baron, who looked upon him as little better than an
infidel; so that he was fain to abjure his heresy as speedily as possible
and come into the faith of the true believers.

But, whatever may have been the doubts entertained, they were completely
put to an end by the arrival next day of regular missives confirming the
intelligence of the young count's murder and his interment in Wurtzburg
cathedral.

The dismay at the castle may well be imagined. The baron shut himself up
in his chamber. The guests, who had come to rejoice with him, could not
think of abandoning him in his distress. They wandered about the courts or
collected in groups in the hall, shaking their heads and shrugging their
shoulders at the troubles of so good a man, and sat longer than ever at
table, and ate and drank more stoutly than ever, by way of keeping up
their spirits. But the situation of the widowed bride was the most
pitiable. To have lost a husband before she had even embraced him&mdash;and
such a husband! If the very spectre could be so gracious and noble, what
must have been the living man? She filled the house with lamentations.

On the night of the second day of her widowhood she had retired to her
chamber, accompanied by one of her aunts, who insisted on sleeping with
her. The aunt, who was one of the best tellers of ghost-stories in all
Germany, had just been recounting one of her longest, and had fallen
asleep in the very midst of it. The chamber was remote and overlooked a
small garden. The niece lay pensively gazing at the beams of the rising
moon as they trembled on the leaves of an aspen tree before the lattice.
The castle clock had just tolled midnight when a soft strain of music
stole up from the garden. She rose hastily from her bed and stepped
lightly to the window. A tall figure stood among the shadows of the trees.
As it raised its head a beam of moonlight fell upon the countenance.
Heaven and earth! she beheld the Spectre Bridegroom! A loud shriek at that
moment burst upon her ear, and her aunt, who had been awakened by the
music and had followed her silently to the window, fell into her arms.
When she looked again the spectre had disappeared.

Of the two females, the aunt now required the most soothing, for she was
perfectly beside herself with terror. As to the young lady, there was
something even in the spectre of her lover that seemed endearing. There
was still the semblance of manly beauty, and, though the shadow of a man
is but little calculated to satisfy the affections of a lovesick girl, yet
where the substance is not to be had even that is consoling. The aunt
declared she would never sleep in that chamber again; the niece, for once,
was refractory, and declared as strongly that she would sleep in no other
in the castle: the consequence was, that she had to sleep in it alone; but
she drew a promise from her aunt not to relate the story of the spectre,
lest she should be denied the only melancholy pleasure left her on earth&mdash;that
of inhabiting the chamber over which the guardian shade of her lover kept
its nightly vigils.

How long the good old lady would have observed this promise is uncertain,
for she dearly loved to talk of the marvellous, and there is a triumph in
being the first to tell a frightful story; it is, however, still quoted in
the neighborhood as a memorable instance of female secrecy that she kept
it to herself for a whole week, when she was suddenly absolved from all
further restraint by intelligence brought to the breakfast-table one
morning that the young lady was not to be found. Her room was empty&mdash;the
bed had not been slept in&mdash;the window was open and the bird had
flown!

[img[images/0241m.jpg]]

The astonishment and concern with which the intelligence was received can
only be imagined by those who have witnessed the agitation which the
mishaps of a great man cause among his friends. Even the poor relations
paused for a moment from the indefatigable labors of the trencher, when
the aunt, who had at first been struck speechless, wrung her hands and
shrieked out, "The goblin! the goblin! she's carried away by the goblin!"

In a few words she related the fearful scene of the garden, and concluded
that the spectre must have carried off his bride. Two of the domestics
corroborated the opinion, for they had heard the clattering of a horse's
hoofs down the mountain about midnight, and had no doubt that it was the
spectre on his black charger bearing her away to the tomb. All present
were struck with the direful probability for events of the kind are
extremely common in Germany, as many well-authenticated histories bear
witness.

What a lamentable situation was that of the poor baron! What a
heartrending dilemma for a fond father and a member of the great family of
Katzenellenbogen! His only daughter had either been rapt away to the
grave, or he was to have some wood-demon for a son-in-law, and perchance a
troop of goblin grandchildren. As usual, he was completely bewildered, and
all the castle in an uproar. The men were ordered to take horse and scour
every road and path and glen of the Odenwald. The baron himself had just
drawn on his jack-boots, girded on his sword, and was about to mount his
steed to sally forth on the doubtful quest, when he was brought to a pause
by a new apparition. A lady was seen approaching the castle mounted on a
palfrey, attended by a cavalier on horseback. She galloped up to the gate,
sprang from her horse, and, falling at the baron's feet, embraced his
knees. It was his lost daughter, and her companion&mdash;the Spectre
Bridegroom! The baron was astounded. He looked at his daughter, then at
the spectre, and almost doubted the evidence of his senses. The latter,
too, was wonderfully improved in his appearance since his visit to the
world of spirits. His dress was splendid, and set off a noble figure of
manly symmetry. He was no longer pale and melancholy. His fine countenance
was flushed with the glow of youth, and joy rioted in his large dark eye.

The mystery was soon cleared up. The cavalier (for, in truth, as you must
have known all the while, he was no goblin) announced himself as Sir
Herman Von Starkenfaust. He related his adventure with the young count. He
told how he had hastened to the castle to deliver the unwelcome tidings,
but that the eloquence of the baron had interrupted him in every attempt
to tell his tale. How the sight of the bride had completely captivated him
and that to pass a few hours near her he had tacitly suffered the mistake
to continue. How he had been sorely perplexed in what way to make a decent
retreat, until the baron's goblin stories had suggested his eccentric
exit. How, fearing the feudal hostility of the family, he had repeated his
visits by stealth&mdash;had haunted the garden beneath the young lady's
window&mdash;had wooed&mdash;had won&mdash;had borne away in triumph&mdash;and,
in a word, had wedded the fair.

Under any other circumstances the baron would have been inflexible, for he
was tenacious of paternal authority and devoutly obstinate in all family
feuds; but he loved his daughter; he had lamented her as lost; he rejoiced
to find her still alive; and, though her husband was of a hostile house,
yet, thank Heaven! he was not a goblin. There was something, it must be
acknowledged, that did not exactly accord with his notions of strict
veracity in the joke the knight had passed upon him of his being a dead
man; but several old friends present, who had served in the wars, assured
him that every stratagem was excusable in love, and that the cavalier was
entitled to especial privilege, having lately served as a trooper.

Matters, therefore, were happily arranged. The baron pardoned the young
couple on the spot. The revels at the castle were resumed. The poor
relations overwhelmed this new member of the family with loving-kindness;
he was so gallant, so generous&mdash;and so rich. The aunts, it is true,
were somewhat scandalized that their system of strict seclusion and
passive obedience should be so badly exemplified, but attributed it all to
their negligence in not having the windows grated. One of them was
particularly mortified at having her marvellous story marred, and that the
only spectre she had ever seen should turn out a counterfeit; but the
niece seemed perfectly happy at having found him substantial flesh and
blood. And so the story ends.
[img[images/0267m.jpg]]

"""
Omne bene
Sine poena
Tempua est ludendi.
Venit hora
Absque mora
Libros deponendi.
OLD HOLIDAY SCHOOL-SONG.
"""

[img[images/9268m.jpg]]

IN the preceding paper I have made some general observations on the
Christmas festivities of England, and am tempted to illustrate them by
some anecdotes of a Christmas passed in the country; in perusing which I
would most courteously invite my reader to lay aside the austerity of
wisdom, and to put on that genuine holiday spirit which is tolerant of
folly and anxious only for amusement.

In the course of a December tour in Yorkshire, I rode for a long distance
in one of the public coaches on the day preceding Christmas. The coach was
crowded, both inside and out, with passengers who, by their talk, seemed
principally bound to the mansions of relations or friends to eat the
Christmas dinner. It was loaded also with hampers of game and baskets and
boxes of delicacies, and hares hung dangling their long ears about the
coachman's box, presents from distant friends for the impending feast. I
had three fine rosy-cheeked school boys for my fellow-passengers inside,
full of the buxom health and manly spirit which I have observed in the
children of this country. They were returning home for the holidays in
high glee, and promising themselves a world of enjoyment. It was
delightful to hear the gigantic plans of the little rogues, and the
impracticable feats they were to perform during their six weeks'
emancipation from the abhorred thraldom of book, birch, and pedagogue.
They were full of anticipations of the meeting with the family and
household, down to the very cat and dog, and of the joy they were to give
their little sisters by the presents with which their pockets were
crammed; but the meeting to which they seemed to look forward with the
greatest impatience was with Bantam, which I found to be a pony, and,
according to their talk, possessed of more virtues than any steed since
the days of Bucephalus. How he could trot! how he could run! and then such
leaps as he would take!&mdash;there was not a hedge in the whole country
that he could not clear.

They were under the particular guardianship of the coachman, to whom,
whenever an opportunity presented, they addressed a host of questions, and
pronounced him one of the best fellows in the world. Indeed, I could not
but notice the more than ordinary air of bustle and importance of the
coachman, who wore his hat a little on one side and had a large bunch of
Christmas greens stuck in the buttonhole of his coat. He is always a
personage full of mighty care and business, but he is particularly so
during this season, having so many commissions to execute in consequence
of the great interchange of presents. And here, perhaps, it may not be
unacceptable to my untravelled readers to have a sketch that may serve as
a general representation of this very numerous and important class of
functionaries, who have a dress, a manner, a language, an air peculiar to
themselves and prevalent throughout the fraternity; so that wherever an
English stage-coachman may be seen he cannot be mistaken for one of any
other craft or mystery.

He has commonly a broad, full face, curiously mottled with red, as if the
blood had been forced by hard feeding into every vessel of the skin; he is
swelled into jolly dimensions by frequent potations of malt liquors, and
his bulk is still further increased by a multiplicity of coats, in which
he is buried like a cauliflower, the upper one reaching to his heels. He
wears a broad-brimmed, low-crowned hat; a huge roll of colored
handkerchief about his neck, knowingly knotted and tucked in at the bosom;
and has in summer-time a large bouquet of flowers in his buttonhole, the
present, most probably, of some enamored country lass. His waistcoat is
commonly of some bright color, striped, and his small-clothes extend far
below the knees, to meet a pair of jockey boots which reach about halfway
up his legs.

All this costume is maintained with much precision; he has a pride in
having his clothes of excellent materials, and, notwithstanding the
seeming grossness of his appearance, there is still discernible that
neatness and propriety of person which is almost inherent in an
Englishman. He enjoys great consequence and consideration along the road;
has frequent conferences with the village housewives, who look upon him as
a man of great trust and dependence; and he seems to have a good
understanding with every bright-eyed country lass. The moment he arrives
where the horses are to be changed, he throws down the reins with
something of an air and abandons the cattle to the care of the ostler, his
duty being merely to drive from one stage to another. When off the box his
hands are thrust into the pockets of his great coat, and he rolls about
the inn-yard with an air of the most absolute lordliness. Here he is
generally surrounded by an admiring throng of ostlers, stableboys,
shoeblacks, and those nameless hangers-on that infest inns and taverns,
and run errands and do all kind of odd jobs for the privilege of battening
on the drippings of the kitchen and the leakage of the tap-room. These all
look up to him as to an oracle, treasure up his cant phrases, echo his
opinions about horses and other topics of jockey lore, and, above all,
endeavor to imitate his air and carriage. Every ragamuffin that has a coat
to his back thrusts his hands in the pockets, rolls in his gait, talks
slang, and is an embryo Coachey.

Perhaps it might be owing to the pleasing serenity that reigned in my own
mind that I fancied I saw cheerfulness in every countenance throughout the
journey. A stage-coach, however, carries animation always with it, and
puts the world in motion as it whirls along. The horn, sounded at the
entrance of the village, produces a general bustle. Some hasten forth to
meet friends; some with bundles and bandboxes to secure places, and in the
hurry of the moment can hardly take leave of the group that accompanies
them. In the meantime the coachman has a world of small commissions to
execute. Sometimes he delivers a hare or pheasant; sometimes jerks a small
parcel or newspaper to the door of a public house; and sometimes, with
knowing leer and words of sly import, hands to some half-blushing,
half-laughing house-maid an odd-shaped billet-doux from some rustic
admirer. As the coach rattles through the village every one runs to the
window, and you have glances on every side of fresh country faces and
blooming giggling girls. At the corners are assembled juntos of village
idlers and wise men, who take their stations there for the important
purpose of seeing company pass; but the sagest knot is generally at the
blacksmith's, to whom the passing of the coach is an event fruitful of
much speculation. The smith, with the horse's heel in his lap, pauses as
the vehicle whirls by; the cyclops round the anvil suspend their ringing
hammers and suffer the iron to grow cool; and the sooty spectre in brown
paper cap laboring at the bellows leans on the handle for a moment, and
permits the asthmatic engine to heave a long-drawn sigh, while he glares
through the murky smoke and sulphurous gleams of the smithy.

Perhaps the impending holiday might have given a more than usual animation
to the country, for it seemed to me as if everybody was in good looks and
good spirits. Game, poultry, and other luxuries of the table were in brisk
circulation in the villages; the grocers', butchers', and fruiterers'
shops were thronged with customers. The housewives were stirring briskly
about, putting their dwellings in order, and the glossy branches of holly
with their bright-red berries began to appear at the windows. The scene
brought to mind an old writer's account of Christmas preparation: "Now
capons and hens, besides turkeys, geese, and ducks, with beef and mutton,
must all die, for in twelve days a multitude of people will not be fed
with a little. Now plums and spice, sugar and honey, square it among pies
and broth. Now or never must music be in tune, for the youth must dance
and sing to get them a heat, while the aged sit by the fire. The country
maid leaves half her market, and must be sent again if she forgets a pack
of cards on Christmas Eve. Great is the contention of holly and ivy
whether master or dame wears the breeches. Dice and cards benefit the
butler; and if the cook do not lack wit, he will sweetly lick his
fingers."

[img[images/0273m.jpg]]

I was roused from this fit of luxurious meditation by a shout from my
little travelling companions. They had been looking out of the
coach-windows for the last few miles, recognizing every tree and cottage
as they approached home, and now there was a general burst of joy.
"There's John! and there's old Carlo! and there's Bantam!" cried the happy
little rogues, clapping their hands.

At the end of a lane there was an old sober-looking servant in livery
waiting for them; he was accompanied by a superannuated pointer and by the
redoubtable Bantam, a little old rat of a pony with a shaggy mane and long
rusty tail, who stood dozing quietly by the roadside, little dreaming of
the bustling times that awaited him.

I was pleased to see the fondness with which the little fellows leaped
about the steady old footman and hugged the pointer, who wriggled his
whole body for joy. But Bantam was the great object of interest; all
wanted to mount at once, and it was with some difficulty that John
arranged that they should ride by turns and the eldest should ride first.

Off they set at last, one on the pony, with the dog bounding and barking
before him, and the others holding John's hands, both talking at once and
overpowering him with questions about home and with school anecdotes. I
looked after them with a feeling in which I do not know whether pleasure
or melancholy predominated; for I was reminded of those days when, like
them, I had known neither care nor sorrow and a holiday was the summit of
earthly felicity. We stopped a few moments afterwards to water the horses,
and on resuming our route a turn of the road brought us in sight of a neat
country-seat. I could just distinguish the forms of a lady and two young
girls in the portico, and I saw my little comrades, with Bantam, Carlo,
and old John, trooping along the carriage-road. I leaned out of the
coach-window, in hopes of witnessing the happy meeting, but a grove of
trees shut it from my sight.

In the evening we reached a village where I had determined to pass the
night. As we drove into the great gateway of the inn, I saw on one side
the light of a rousing kitchen-fire beaming through a window. I entered,
and admired, for the hundredth time, that picture of convenience,
neatness, and broad honest enjoyment, the kitchen of an English inn. It
was of spacious dimensions, hung round with copper and tin vessels highly
polished, and decorated here and there with a Christmas green. Hams,
tongues, and flitches of bacon were suspended from the ceiling; a
smoke-jack made its ceaseless clanking beside the fireplace, and a clock
ticked in one corner. A well-scoured deal table extended along one side of
the kitchen, with a cold round of beef and other hearty viands upon it,
over which two foaming tankards of ale seemed mounting guard. Travellers
of inferior order were preparing to attack this stout repast, while others
sat smoking and gossiping over their ale on two high-backed oaken settles
beside the fire. Trim housemaids were hurrying backwards and forwards
under the directions of a fresh bustling landlady, but still seizing an
occasional moment to exchange a flippant word and have a rallying laugh
with the group round the fire. The scene completely realized Poor Robin's
humble idea of the comforts of midwinter:

"""
Now trees their leafy hats do bare
To reverence Winter's silver hair;
A handsome hostess, merry host,
A pot of ale now and a toast,
Tobacco and a good coal fire,
Are things this season doth require.*

* Poor Robin's Almanack, 1684.
"""

I had not been long at the inn when a post-chaise drove up to the door. A
young gentleman stept out, and by the light of the lamps I caught a
glimpse of a countenance which I thought I knew. I moved forward to get a
nearer view, when his eye caught mine. I was not mistaken; it was Frank
Bracebridge, a sprightly, good-humored young fellow with whom I had once
travelled on the Continent. Our meeting was extremely cordial, for the
countenance of an old fellow-traveller always brings up the recollection
of a thousand pleasant scenes, odd adventures, and excellent jokes. To
discuss all these in a transient interview at an inn was impossible; and,
finding that I was not pressed for time and was merely making a tour of
observation, he insisted that I should give him a day or two at his
father's country-seat, to which he was going to pass the holidays and
which lay at a few miles' distance. "It is better than eating a solitary
Christmas dinner at an inn," said he, "and I can assure you of a hearty
welcome in something of the old-fashioned style." His reasoning was
cogent, and I must confess the preparation I had seen for universal
festivity and social enjoyment had made me feel a little impatient of my
loneliness. I closed, therefore, at once with his invitation; the chaise
drove up to the door, and in a few moments I was on my way to the family
mansion of the Bracebridges.
[img[images/0037m.jpg]]

"""
Ships, ships, I will descrie you
Amidst the main,
I will come and try you,
What you are protecting,
And projecting,
What's your end and aim.
One goes abroad for merchandise and trading,
Another stays to keep his country from invading,
A third is coming home with rich and wealthy lading.
Hallo! my fancie, whither wilt thou go?
OLD POEM.
"""

To an American visiting Europe, the long voyage he has to make is an
excellent preparative. The temporary absence of worldly scenes and
employments produces a state of mind peculiarly fitted to receive new and
vivid impressions. The vast space of waters that separate the hemispheres
is like a blank page in existence. There is no gradual transition by
which, as in Europe, the features and population of one country blend
almost imperceptibly with those of another. From the moment you lose sight
of the land you have left, all is vacancy, until you step on the opposite
shore, and are launched at once into the bustle and novelties of another
world.

In travelling by land there is a continuity of scene, and a connected
succession of persons and incidents, that carry on the story of life, and
lessen the effect of absence and separation. We drag, it is true, "a
lengthening chain" at each remove of our pilgrimage; but the chain is
unbroken; we can trace it back link by link; and we feel that the last
still grapples us to home. But a wide sea voyage severs us at once. It
makes us conscious of being cast loose from the secure anchorage of
settled life, and sent adrift upon a doubtful world. It interposes a gulf,
not merely imaginary, but real, between us and our homes&mdash;a gulf,
subject to tempest, and fear, and uncertainty, rendering distance
palpable, and return precarious.

Such, at least, was the case with myself. As I saw the last blue lines of
my native land fade away like a cloud in the horizon, it seemed as if I
had closed one volume of the world and its concerns, and had time for
meditation, before I opened another. That land, too, now vanishing from my
view, which contained all most dear to me in life; what vicissitudes might
occur in it&mdash;what changes might take place in me, before I should
visit it again! Who can tell, when he sets forth to wander, whither he may
be driven by the uncertain currents of existence; or when he may return;
or whether it may be ever his lot to revisit the scenes of his childhood?

I said, that at sea all is vacancy; I should correct the impression. To
one given to day-dreaming, and fond of losing himself in reveries, a sea
voyage is full of subjects for meditation; but then they are the wonders
of the deep and of the air, and rather tend to abstract the mind from
worldly themes. I delighted to loll over the quarter-railing or climb to
the main-top, of a calm day, and muse for hours together on the tranquil
bosom of a summer's sea; to gaze upon the piles of golden clouds just
peering above the horizon, fancy them some fairy realms, and people them
with a creation of my own;&mdash;to watch the gently undulating billows
rolling their silver volumes, as if to die away on those happy shores.

There was a delicious sensation of mingled security and awe with which I
looked down, from my giddy height, on the monsters of the deep at their
uncouth gambols: shoals of porpoises tumbling about the bow of the ship;
the grampus, slowly heaving his huge form above the surface; or the
ravenous shark, darting, like a spectre, through the blue waters. My
imagination would conjure up all that I had heard or read of the watery
world beneath me; of the finny herds that roam its fathomless valleys; of
the shapeless monsters that lurk among the very foundations of the earth;
and of those wild phantasms that swell the tales of fishermen and sailors.

Sometimes a distant sail, gliding along the edge of the ocean, would be
another theme of idle speculation. How interesting this fragment of a
world, hastening to rejoin the great mass of existence! What a glorious
monument of human invention; which has in a manner triumphed over wind and
wave; has brought the ends of the world into communion; has established an
interchange of blessings, pouring into the sterile regions of the north
all the luxuries of the south; has diffused the light of knowledge, and
the charities of cultivated life; and has thus bound together those
scattered portions of the human race, between which nature seemed to have
thrown an insurmountable barrier.

[img[images/0040m.jpg]]

We one day descried some shapeless object drifting at a distance. At sea,
every thing that breaks the monotony of the surrounding expanse attracts
attention. It proved to be the mast of a ship that must have been
completely wrecked; for there were the remains of handkerchiefs, by which
some of the crew had fastened themselves to this spar, to prevent their
being washed off by the waves. There was no trace by which the name of the
ship could be ascertained. The wreck had evidently drifted about for many
months; clusters of shell-fish had fastened about it, and long sea-weeds
flaunted at its sides. But where, thought I, is the crew? Their struggle
has long been over&mdash;they have gone down amidst the roar of the
tempest&mdash;their bones lie whitening among the caverns of the deep.
Silence, oblivion, like the waves, have closed over them, and no one can
tell the story of their end. What sighs have been wafted after that ship!
what prayers offered up at the deserted fireside of home! How often has
the mistress, the wife, the mother, pored over the daily news, to catch
some casual intelligence of this rover of the deep! How has expectation
darkened into anxiety&mdash;anxiety into dread&mdash;and dread into
despair! Alas! not one memento may ever return for love to cherish. All
that may ever be known, is that she sailed from her port, "and was never
heard of more!"

The sight of this wreck, as usual, gave rise to many dismal anecdotes.
This was particularly the case in the evening, when the weather, which had
hitherto been fair, began to look wild and threatening, and gave
indications of one of those sudden storms that will sometimes break in
upon the serenity of a summer voyage. As we sat round the dull light of a
lamp, in the cabin, that made the gloom more ghastly, everyone had his
tale of shipwreck and disaster. I was particularly struck with a short one
related by the captain:

"As I was once sailing," said he, "in a fine, stout ship, across the banks
of Newfoundland, one of those heavy fogs that prevail in those parts
rendered it impossible for us to see far ahead, even in the daytime; but
at night the weather was so thick that we could not distinguish any object
at twice the length of the ship. I kept lights at the mast-head, and a
constant watch forward to look out for fishing smacks, which are
accustomed to anchor of the banks. The wind was blowing a smacking breeze,
and we were going at a great rate through the water. Suddenly the watch
gave the alarm of 'a sail ahead!'&mdash;it was scarcely uttered before we
were upon her. She was a small schooner, at anchor, with her broadside
toward us. The crew were all asleep, and had neglected to hoist a light.
We struck her just amidships. The force, the size, and weight of our
vessel, bore her down below the waves; we passed over her and were hurried
on our course. As the crashing wreck was sinking beneath us, I had a
glimpse of two or three half-naked wretches, rushing from her cabin; they
just started from their beds to be swallowed shrieking by the waves. I
heard their drowning cry mingling with the wind. The blast that bore it to
our ears, swept us out of all further hearing. I shall never forget that
cry! It was some time before we could put the ship about, she was under
such headway. We returned, as nearly as we could guess, to the place where
the smack had anchored. We cruised about for several hours in the dense
fog. We fired signal-guns, and listened if we might hear the halloo of any
survivors: but all was silent&mdash;we never saw or heard any thing of
them more."

[img[images/0042m.jpg]]

I confess these stories, for a time, put an end to all my fine fancies.
The storm increased with the night. The sea was lashed into tremendous
confusion. There was a fearful, sullen sound of rushing waves and broken
surges. Deep called unto deep. At times the black volume of clouds
overhead seemed rent asunder by flashes of lightning which quivered along
the foaming billows, and made the succeeding darkness doubly terrible. The
thunders bellowed over the wild waste of waters, and were echoed and
prolonged by the mountain waves. As I saw the ship staggering and plunging
among these roaring caverns, it seemed miraculous that she regained her
balance, or preserved her buoyancy. Her yards would dip into the water;
her bow was almost buried beneath the waves. Sometimes an impending surge
appeared ready to overwhelm her, and nothing but a dexterous movement of
the helm preserved her from the shock.

When I retired to my cabin, the awful scene still followed me. The
whistling of the wind through the rigging sounded like funereal wailings.
The creaking of the masts; the straining and groaning of bulkheads, as the
ship labored in the weltering sea, were frightful. As I heard the waves
rushing along the side of the ship, and roaring in my very ear, it seemed
as if Death were raging around this floating prison, seeking for his prey:
the mere starting of a nail, the yawning of a seam, might give him
entrance.

A fine day, however, with a tranquil sea and favoring breeze, soon put all
these dismal reflections to flight. It is impossible to resist the
gladdening influence of fine weather and fair wind at sea. When the ship
is decked out in all her canvas, every sail swelled, and careering gayly
over the curling waves, how lofty, how gallant, she appears&mdash;how she
seems to lord it over the deep!

I might fill a volume with the reveries of a sea voyage; for with me it is
almost a continual reverie&mdash;but it is time to get to shore.

It was a fine sunny morning when the thrilling cry of "land!" was given
from the mast-head. None but those who have experienced it can form an
idea of the delicious throng of sensations which rush into an American's
bosom, when he first comes in sight of Europe. There is a volume of
associations with the very name. It is the land of promise, teeming with
everything of which his childhood has heard, or on which his studious
years have pondered.

[img[images/0044m.jpg]]

From that time, until the moment of arrival, it was all feverish
excitement. The ships of war, that prowled like guardian giants along the
coast; the headlands of Ireland, stretching out into the channel; the
Welsh mountains towering into the clouds;&mdash;all were objects of
intense interest. As we sailed up the Mersey, I reconnoitred the shores
with a telescope. My eye dwelt with delight on neat cottages, with their
trim shrubberies and green grass-plots. I saw the mouldering ruin of an
abbey overrun with ivy, and the taper spire of a village church rising
from the brow of a neighboring hill;&mdash;all were characteristic of
England.

The tide and wind were so favorable, that the ship was enabled to come at
once to her pier. It was thronged with people; some idle lookers-on;
others, eager expectants of friends or relations. I could distinguish the
merchant to whom the ship was consigned. I knew him by his calculating
brow and restless air. His hands were thrust into his pockets; he was
whistling thoughtfully, and walking to and fro, a small space having been
accorded him by the crowd, in deference to his temporary importance. There
were repeated cheerings and salutations interchanged between the shore and
the ship, as friends happened to recognize each other. I particularly
noticed one young woman of humble dress, but interesting demeanor. She was
leaning forward from among the crowd; her eye hurried over the ship as it
neared the shore, to catch some wished-for countenance. She seemed
disappointed and sad; when I heard a faint voice call her name.&mdash;It
was from a poor sailor who had been ill all the voyage, and had excited
the sympathy of every one on board. When the weather was fine, his
messmates had spread a mattress for him on deck in the shade, but of late
his illness had so increased that he had taken to his hammock, and only
breathed a wish that he might see his wife before he died. He had been
helped on deck as we came up the river, and was now leaning against the
shrouds, with a countenance so wasted, so pale, so ghastly, that it was no
wonder even the eye of affection did not recognize him. But at the sound
of his voice, her eye darted on his features: it read, at once, a whole
volume of sorrow; she clasped her hands, uttered a faint shriek, and stood
wringing them in silent agony.

All now was hurry and bustle. The meetings of acquaintances&mdash;the
greetings of friends&mdash;the consultations of men of business. I alone
was solitary and idle. I had no friend to meet, no cheering to receive. I
stepped upon the land of my forefathers&mdash;but felt that I was a
stranger in the land.

[img[images/0046m.jpg]]
[img[images/0163m.jpg]]

"""
Pittie olde age, within whose silver haires
Honour and reverence evermore have rain'd.
MARLOWE'S TAMBURLAINE.
"""

[img[images/9163m.jpg]]

THOSE who are in the habit of remarking such matters must have noticed the
passive quiet of an English landscape on Sunday. The clacking of the mill,
the regularly recurring stroke of the flail, the din of the blacksmith's
hammer, the whistling of the ploughman, the rattling of the cart, and all
other sounds of rural labor are suspended. The very farm-dogs bark less
frequently, being less disturbed by passing travellers. At such times I
have almost fancied the wind sunk into quiet, and that the sunny
landscape, with its fresh green tints melting into blue haze, enjoyed the
hallowed calm.

"""
Sweet day, so pure, so calm, so brigh'
The bridal of the earth and sky.
"""

Well was it ordained that the day of devotion should be a day of rest. The
holy repose which reigns over the face of nature has its moral influence;
every restless passion is charmed down, and we feel the natural religion
of the soul gently springing up within us. For my part, there are feelings
that visit me, in a country church, amid the beautiful serenity of nature,
which I experience nowhere else; and if not a more religious, I think I am
a better man on Sunday than on any other day of the seven.

During my recent residence in the country, I used frequently to attend at
the old village church. Its shadowy aisles, its mouldering monuments, its
dark oaken panelling, all reverend with the gloom of departed years,
seemed to fit it for the haunt of solemn meditation; but, being in a
wealthy, aristocratic neighborhood, the glitter of fashion penetrated even
into the sanctuary; and I felt myself continually thrown back upon the
world, by the frigidity and pomp of the poor worms around me. The only
being in the whole congregation who appeared thoroughly to feel the humble
and prostrate piety of a true Christian was a poor decrepit old woman,
bending under the weight of years and infirmities. She bore the traces of
something better than abject poverty. The lingerings of decent pride were
visible in her appearance. Her dress, though humble in the extreme, was
scrupulously clean. Some trivial respect, too, had been awarded her, for
she did not take her seat among the village poor, but sat alone on the
steps of the altar. She seemed to have survived all love, all friendship,
all society, and to have nothing left her but the hopes of heaven. When I
saw her feebly rising and bending her aged form in prayer; habitually
conning her prayer-book, which her palsied hand and failing eyes could not
permit her to read, but which she evidently knew by heart, I felt
persuaded that the faltering voice of that poor woman arose to heaven far
before the responses of the clerk, the swell of the organ, or the chanting
of the choir.

I am fond of loitering about country churches, and this was so
delightfully situated, that it frequently attracted me. It stood on a
knoll, round which a small stream made a beautiful bend and then wound its
way through a long reach of soft meadow scenery. The church was surrounded
by yew trees, which seemed almost coeval with itself. Its tall Gothic
spire shot up lightly from among them, with rooks and crows generally
wheeling about it. I was seated there one still sunny morning watching two
laborers who were digging a grave. They had chosen one of the most remote
and neglected corners of the churchyard, where, from the number of
nameless graves around, it would appear that the indigent and friendless
were huddled into the earth. I was told that the new-made grave was for
the only son of a poor widow. While I was meditating on the distinctions
of worldly rank, which extend thus down into the very dust, the toll of
the bell announced the approach of the funeral. They were the obsequies of
poverty, with which pride had nothing to do. A coffin of the plainest
materials, without pall or other covering, was borne by some of the
villagers. The sexton walked before with an air of cold indifference.
There were no mock mourners in the trappings of affected woe, but there
was one real mourner who feebly tottered after the corpse. It was the aged
mother of the deceased, the poor old woman whom I had seen seated on the
steps of the altar. She was supported by a humble friend, who was
endeavoring to comfort her. A few of the neighboring poor had joined the
train, and some children of the village were running hand in hand, now
shouting with unthinking mirth, and now pausing to gaze, with childish
curiosity on the grief of the mourner.

[img[images/0166m.jpg]]

As the funeral train approached the grave, the parson issued from the
church-porch, arrayed in the surplice, with prayer-book in hand, and
attended by the clerk. The service, however, was a mere act of charity.
The deceased had been destitute, and the survivor was penniless. It was
shuffled through, therefore, in form, but coldly and unfeeling. The
well-fed priest moved but a few steps from the church door; his voice
could scarcely be heard at the grave; and never did I hear the funeral
service, that sublime and touching ceremony, turned into such a frigid
mummery of words.

I approached the grave. The coffin was placed on the ground. On it were
inscribed the name and age of the deceased&mdash;"George Somers, aged 26
years." The poor mother had been assisted to kneel down at the head of it.
Her withered hands were clasped, as if in prayer; but I could perceive, by
a feeble rocking of the body, and a convulsive motion of the lips, that
she was gazing on the last relics of her son with the yearnings of a
mother's heart.

Preparations were made to deposit the coffin in the earth. There was that
bustling stir, which breaks so harshly on the feelings of grief and
affection; directions given in the cold tones of business; the striking of
spades into sand and gravel; which, at the grave of those we love, is, of
all sounds, the most withering. The bustle around seemed to waken the
mother from a wretched revery. She raised her glazed eyes, and looked
about with a faint wildness. As the men approached with cords to lower the
coffin into the grave, she wrung her hands, and broke into an agony of
grief. The poor woman who attended her took her by the arm endeavoring to
raise her from the earth, and to whisper something like consolation: "Nay,
now&mdash;nay, now&mdash;don't take it so sorely to heart." She could only
shake her head, and wring her hands, as one not to be comforted.

As they lowered the body into the earth, the creaking of the cords seemed
to agonize her; but when, on some accidental obstruction, there was a
jostling of the coffin, all the tenderness of the mother burst forth, as
if any harm could come to him who was far beyond the reach of worldly
suffering.

I could see no more&mdash;my heart swelled into my throat&mdash;my eyes
filled with tears; I felt as if I were acting a barbarous part in standing
by and gazing idly on this scene of maternal anguish. I wandered to
another part of the churchyard, where I remained until the funeral train
had dispersed.

When I saw the mother slowly and painfully quitting the grave, leaving
behind her the remains of all that was dear to her on earth, and returning
to silence and destitution, my heart ached for her. What, thought I, are
the distresses of the rich? They have friends to soothe&mdash;pleasures to
beguile&mdash;a world to divert and dissipate their griefs. What are the
sorrows of the young? Their growing minds soon close above the wound&mdash;their
elastic spirits soon rise beneath the pressure&mdash;their green and
ductile affections soon twine round new objects. But the sorrows of the
poor, who have no outward appliances to soothe&mdash;the sorrows of the
aged, with whom life at best is but a wintry day, and who can look for no
after-growth of joy&mdash;the sorrows of a widow, aged, solitary,
destitute, mourning over an only son, the last solace of her years,&mdash;these
are indeed sorrows which make us feel the impotency of consolation.

It was some time before I left the churchyard. On my way homeward, I met
with the woman who had acted as comforter: she was just returning from
accompanying the mother to her lonely habitation, and I drew from her some
particulars connected with the affecting scene I had witnessed.

The parents of the deceased had resided in the village from childhood.
They had inhabited one of the neatest cottages, and by various rural
occupations, and the assistance of a small garden, had supported
themselves creditably and comfortably, and led a happy and a blameless
life. They had one son, who had grown up to be the staff and pride of
their age. "Oh, sir!" said the good woman, "he was such a comely lad, so
sweet-tempered, so kind to every one around him, so dutiful to his
parents! It did one's heart good to see him of a Sunday, drest out in his
best, so tall, so straight, so cheery, supporting his old mother to
church; for she was always fonder of leaning on George's arm than on her
good man's; and, poor soul, she might well be proud of him, for a finer
lad there was not in the country round."

Unfortunately, the son was tempted, during a year of scarcity and
agricultural hardship, to enter into the service of one of the small craft
that plied on a neighboring river. He had not been long in this employ,
when he was entrapped by a press-gang, and carried off to sea. His parents
received tidings of his seizure, but beyond that they could learn nothing.
It was the loss of their main prop. The father, who was already infirm,
grew heartless and melancholy and sunk into his grave. The widow, left
lonely in her age and feebleness, could no longer support herself, and
came upon the parish. Still there was a kind feeling towards her
throughout the village, and a certain respect as being one of the oldest
inhabitants. As no one applied for the cottage in which she had passed so
many happy days, she was permitted to remain in it, where she lived
solitary and almost helpless. The few wants of nature were chiefly
supplied from the scanty productions of her little garden, which the
neighbors would now and then cultivate for her. It was but a few days
before the time at which these circumstances were told me, that she was
gathering some vegetables for her repast, when she heard the cottage-door
which faced the garden, suddenly opened. A stranger came out, and seemed
to be looking eagerly and wildly around. He was dressed in seamen's
clothes, was emaciated and ghastly pale, and bore the air of one broken by
sickness and hardships. He saw her and hastened towards her, but his steps
were faint and faltering; he sank on his knees before her and sobbed like
a child. The poor woman gazed upon him with a vacant and wandering eye.
"Oh, my dear, dear mother! don't you know your son? your poor boy,
George?" It was, indeed, the wreck of her once noble lad; who shattered by
wounds, by sickness and foreign imprisonment, had, at length, dragged his
wasted limbs homeward, to repose among the scenes of his childhood.

I will not attempt to detail the particulars of such a meeting, where
sorrow and joy were so completely blended: still, he was alive! he was
come home! he might yet live to comfort and cherish her old age! Nature,
however, was exhausted in him; and if any thing had been wanting to finish
the work of fate, the desolation of his native cottage would have been
sufficient. He stretched himself on the pallet on which his widowed mother
had passed many a sleepless night, and he never rose from it again.

The villagers, when they heard that George Somers had returned, crowded to
see him, offering every comfort and assistance that their humble means
afforded. He was too weak, however, to talk&mdash;he could only look his
thanks. His mother was his constant attendant; and he seemed unwilling to
be helped by any other hand.

[img[images/0171m.jpg]]

There is something in sickness that breaks down the pride of manhood, that
softens the heart, and brings it back to the feelings of infancy. Who that
has languished, even in advanced life, in sickness and despondency, who
that has pined on a weary bed in the neglect and loneliness of a foreign
land, but has thought on the mother "that looked on his childhood," that
smoothed his pillow, and administered to his helplessness? Oh, there is an
enduring tenderness in the love of a mother to a son, that transcends all
other affections of the heart. It is neither to be chilled by selfishness,
nor daunted by danger, nor weakened by worthlessness, nor stifled by
ingratitude. She will sacrifice every comfort to his convenience; she will
surrender every pleasure to his enjoyment; she will glory in his fame and
exult in his prosperity; and, if misfortune overtake him, he will be the
dearer to her from misfortune; and if disgrace settle upon his name, she
will still love and cherish him in spite of his disgrace; and if all the
world beside cast him off, she will be all the world to him.

Poor George Somers had known what it was to be in sickness, and none to
soothe&mdash;lonely and in prison, and none to visit him. He could not
endure his mother from his sight; if she moved away, his eye would follow
her. She would sit for hours by his bed watching him as he slept.
Sometimes he would start from a feverish dream, and look anxiously up
until he saw her bending over him; when he would take her hand, lay it on
his bosom, and fall asleep with the tranquillity of a child. In this way
he died.

My first impulse on hearing this humble tale of affliction was to visit
the cottage of the mourner, and administer pecuniary assistance, and, if
possible, comfort. I found, however, on inquiry, that the good feelings of
the villagers had prompted them to do everything that the case admitted;
and as the poor know best how to console each other's sorrows, I did not
venture to intrude.

The next Sunday I was at the village church, when, to my surprise, I saw
the poor old woman tottering down the aisle to her accustomed seat on the
steps of the altar.

She had made an effort to put on something like mourning for her son; and
nothing could be more touching than this struggle between pious affection
and utter poverty&mdash;a black ribbon or so, a faded black handkerchief,
and one or two more such humble attempts to express by outward signs that
grief which passes show. When I looked round upon the storied monuments,
the stately hatchments, the cold marble pomp with which grandeur mourned
magnificently over departed pride, and turned to this poor widow, bowed
down by age and sorrow at the altar of her God, and offering up the
prayers and praises of a pious though a broken heart, I felt that this
living monument of real grief was worth them all.

I related her story to some of the wealthy members of the congregation,
and they were moved by it. They exerted themselves to render her situation
more comfortable, and to lighten her afflictions. It was, however, but
smoothing a few steps to the grave. In the course of a Sunday or two
after, she was missed from her usual seat at church, and before I left the
neighborhood I heard, with a feeling of satisfaction, that she had quietly
breathed her last, and had gone to rejoin those she loved, in that world
where sorrow is never known and friends are never parted.
[img[images/0056m.jpg]]

"""
The treasures of the deep are not so precious
As are the concealed comforts of a man
Lock'd up in woman's love. I scent the air
Of blessings, when I came but near the house,
What a delicious breath marriage sends forth&mdash;
The violet bed's no sweeter!
MIDDLETON.
"""

I HAVE often had occasion to remark the fortitude with which women sustain
the most overwhelming reverses of fortune. Those disasters which break
down the spirit of a man, and prostrate him in the dust, seem to call
forth all the energies of the softer sex, and give such intrepidity and
elevation to their character, that at times it approaches to sublimity.
Nothing can be more touching, than to behold a soft and tender female, who
had been all weakness and dependence, and alive to every trivial
roughness, while threading the prosperous paths of life, suddenly rising
in mental force to be the comforter and support of her husband under
misfortune, and abiding with unshrinking firmness the bitterest blasts of
adversity.

As the vine, which has long twined its graceful foliage about the oak, and
been lifted by it into sunshine, will, when the hardy plant is rifted by
the thunderbolt, cling round it with its caressing tendrils, and bind up
its shattered boughs, so is it beautifully ordered by Providence, that
woman, who is the mere dependent and ornament of man in his happier hours,
should be his stay and solace when smitten with sudden calamity; winding
herself into the rugged recesses of his nature, tenderly supporting the
drooping head, and binding up the broken heart.

I was once congratulating a friend, who had around him a blooming family,
knit together in the strongest affection. "I can wish you no better lot,"
said he, with enthusiasm, "than to have a wife and children. If you are
prosperous, there they are to share your prosperity; if otherwise, there
they are to comfort you." And, indeed, I have observed that a married man
falling into misfortune, is more apt to retrieve his situation in the
world than a single one; partly, because he is more stimulated to exertion
by the necessities of the helpless and beloved beings who depend upon him
for subsistence, but chiefly because his spirits are soothed and relieved
by domestic endearments, and his self-respect kept alive by finding, that,
though all abroad is darkness and humiliation, yet there is still a little
world of love at home, of which he is the monarch. Whereas, a single man
is apt to run to waste and self-neglect; to fancy himself lonely and
abandoned, and his heart to fall to ruin, like some deserted mansion, for
want of an inhabitant.

These observations call to mind a little domestic story, of which I was
once a witness. My intimate friend, Leslie, had married a beautiful and
accomplished girl, who had been brought up in the midst of fashionable
life. She had, it is true, no fortune, but that of my friend was ample;
and he delighted in the anticipation of indulging her in every elegant
pursuit, and administering to those delicate tastes and fancies that
spread a kind of witchery about the sex.&mdash;"Her life," said he, "shall
be like a fairy tale."

The very difference in their characters produced a harmonious combination;
he was of a romantic, and somewhat serious cast; she was all life and
gladness. I have often noticed the mute rapture with which he would gaze
upon her in company, of which her sprightly powers made her the delight:
and how, in the midst of applause, her eye would still turn to him, as if
there alone she sought favor and acceptance. When leaning on his arm, her
slender form contrasted finely with his tall, manly person. The fond,
confiding air with which she looked up to him seemed to call forth a flush
of triumphant pride and cherishing tenderness, as if he doated on his
lovely burden from its very helplessness. Never did a couple set forward
on the flowery path of early and well-suited marriage with a fairer
prospect of felicity.

It was the misfortune of my friend, however, to have embarked his property
in large speculations; and he had not been married many months, when, by a
succession of sudden disasters, it was swept from him, and he found
himself reduced to almost penury. For a time he kept his situation to
himself, and went about with a haggard countenance, and a breaking heart.
His life was but a protracted agony; and what rendered it more
insupportable was the necessity of keeping up a smile in the presence of
his wife; for he could not bring himself to overwhelm her with the news.
She saw, however, with the quick eyes of affection, that all was not well
with him. She marked his altered looks and stifled sighs, and was not to
be deceived by his sickly and vapid attempts at cheerfulness. She tasked
all her sprightly powers and tender blandishments to win him back to
happiness; but she only drove the arrow deeper into his soul. The more he
saw cause to love her, the more torturing was the thought that he was soon
to make her wretched. A little while, thought he, and the smile will
vanish from that cheek&mdash;the song will die away from those lips&mdash;the
lustre of those eyes will be quenched with sorrow and the happy heart
which now beats lightly in that bosom, will be weighed down, like mine, by
the cares and miseries of the world.

At length he came to me one day, and related his whole situation in a tone
of the deepest despair. When I had heard him through, I inquired: "Does
your wife know all this?"&mdash;At the question he burst into an agony of
tears. "For God's sake!" cried he, "if you have any pity on me don't
mention my wife; it is the thought of her that drives me almost to
madness!"

"And why not?" said I. "She must know it sooner or later: you cannot keep
it long from her, and the intelligence may break upon her in a more
startling manner than if imparted by yourself; for the accents of those we
love soften the harshest tidings. Besides, you are depriving yourself of
the comforts of her sympathy; and not merely that, but also endangering
the only bond that can keep hearts together&mdash;an unreserved community
of thought and feeling. She will soon perceive that something is secretly
preying upon your mind; and true love will not brook reserve; it feels
undervalued and outraged, when even the sorrows of those it loves are
concealed from it."

"Oh, but my friend! to think what a blow I am to give to all her future
prospects,&mdash;how I am to strike her very soul to the earth, by telling
her that her husband is a beggar! that she is to forego all the elegancies
of life&mdash;all the pleasures of society&mdash;to shrink with me into
indigence and obscurity! To tell her that I have dragged her down from the
sphere in which she might have continued to move in constant brightness&mdash;the
light of every eye&mdash;the admiration of every heart!&mdash;How can she
bear poverty? She has been brought up in all the refinements of opulence.
How can she bear neglect? She has been the idol of society. Oh, it will
break her heart&mdash;it will break her heart!"

I saw his grief was eloquent, and I let it have its flow; for sorrow
relieves itself by words. When his paroxysm had subsided, and he had
relapsed into moody silence, I resumed the subject gently, and urged him
to break his situation at once to his wife. He shook his head mournfully,
but positively.

"But how are you to keep it from her? It is necessary she should know it,
that you may take the steps proper to the alteration of your
circumstances. You must change your style of living&mdash;nay," observing
a pang to pass across his countenance, "don't let that afflict you. I am
sure you have never placed your happiness in outward show&mdash;you have
yet friends, warm friends, who will not think the worse of you for being
less splendidly lodged: and surely it does not require a palace to be
happy with Mary&mdash;"

"I could be happy with her," cried he, convulsively, "in a hovel!&mdash;I
could go down with her into poverty and the dust!&mdash;I could&mdash;I
could&mdash;God bless her!&mdash;God bless her!" cried he, bursting into a
transport of grief and tenderness.

"And believe me, my friend," said I, stepping up, and grasping him warmly
by the hand, "believe me, she can be the same with you. Ay, more; it will
be a source of pride and triumph to her&mdash;it will call forth all the
latent energies and fervent sympathies of her nature; for she will rejoice
to prove that she loves you for yourself. There is in every true woman's
heart a spark of heavenly fire, which lies dormant in the broad daylight
of prosperity; but which kindles up, and beams, and blazes in the dark
hour of adversity. No man knows what the wife of his bosom is&mdash;no man
knows what a ministering angel she is&mdash;until he has gone with her
through the fiery trials of this world."

There was something in the earnestness of my manner, and the figurative
style of my language, that caught the excited imagination of Leslie. I
knew the auditor I had to deal with; and following up the impression I had
made, I finished by persuading him to go home and unburden his sad heart
to his wife.

I must confess, notwithstanding all I had said, I felt some little
solicitude for the result. Who can calculate on the fortitude of one whose
life has been a round of pleasures? Her gay spirits might revolt at the
dark, downward path of low humility suddenly pointed out before her, and
might cling to the sunny regions in which they had hitherto revelled.
Besides, ruin in fashionable life is accompanied by so many galling
mortifications, to which, in other ranks, it is a stranger. In short, I
could not meet Leslie, the next morning, without trepidation. He had made
the disclosure.

"And how did she bear it?"

"Like an angel! It seemed rather to be a relief to her mind, for she threw
her arms around my neck, and asked if this was all that had lately made me
unhappy.&mdash;But, poor girl," added he, "she cannot realize the change
we must undergo. She has no idea of poverty but in the abstract; she has
only read of it in poetry, where it is allied to love. She feels as yet no
privation; she suffers no loss of accustomed conveniences nor elegancies.
When we come practically to experience its sordid cares, its paltry wants,
its petty humiliations&mdash;then will be the real trial."

"But," said I, "now that you have got over the severest task, that of
breaking it to her, the sooner you let the world into the secret the
better. The disclosure may be mortifying; but then it is a single misery,
and soon over: whereas you otherwise suffer it, in anticipation, every
hour in the day. It is not poverty, so much as pretence, that harasses a
ruined man&mdash;the struggle between a proud mind and an empty purse-the
keeping up a hollow show that must soon come to an end. Have the courage
to appear poor, and you disarm poverty of its sharpest sting." On this
point I found Leslie perfectly prepared. He had no false pride himself,
and as to his wife, she was only anxious to conform to their altered
fortunes.

Some days afterwards, he called upon me in the evening. He had disposed of
his dwelling-house, and taken a small cottage in the country, a few miles
from town. He had been busied all day in sending out furniture. The new
establishment required few articles, and those of the simplest kind. All
the splendid furniture of his late residence had been sold, excepting his
wife's harp. That, he said, was too closely associated with the idea of
herself it belonged to the little story of their loves; for some of the
sweetest moments of their courtship were those when he had leaned over
that instrument, and listened to the melting tones of her voice.&mdash;I
could not but smile at this instance of romantic gallantry in a doating
husband.

He was now going out to the cottage, where his wife had been all day
superintending its arrangement. My feelings had become strongly interested
in the progress of his family story, and, as it was a fine evening, I
offered to accompany him.

He was wearied with the fatigues of the day, and, as we walked out, fell
into a fit of gloomy musing.

"Poor Mary!" at length broke, with a heavy sigh, from his lips.

"And what of her," asked I, "has anything happened to her?"

"What," said he, darting an impatient glance, "is it nothing to be reduced
to this paltry situation&mdash;to be caged in a miserable cottage&mdash;to
be obliged to toil almost in the menial concerns of her wretched
habitation?"

Has she then repined at the change?

"Repined! she has been nothing but sweetness and good-humor. Indeed, she
seems in better spirits than I have ever known her; she has been to me all
love, and tenderness, and comfort!"

"Admirable girl!" exclaimed I. "You call yourself poor, my friend; you
never were so rich,&mdash;you never knew the boundless treasures of
excellence you possessed in that woman."

"Oh! but, my friend, if this first meeting at the cottage were over, I
think I could then be comfortable. But this is her first day of real
experience; she has been introduced into a humble dwelling,&mdash;she has
been employed all day in arranging its miserable equipments,&mdash;she
has, for the first time, known the fatigues of domestic employment,&mdash;she
has, for the first time, looked around her on a home destitute of every
thing elegant&mdash;almost of every thing convenient; and may now be
sitting down, exhausted and spiritless, brooding over a prospect of future
poverty."

There was a degree of probability in this picture that I could not
gainsay, so we walked on in silence.

[img[images/0064m.jpg]]

After turning from the main road up a narrow lane, so thickly shaded with
forest-trees as to give it a complete air of seclusion, we came in sight
of the cottage. It was humble enough in its appearance for the most
pastoral poet; and yet it had a pleasing rural look. A wild vine had
overrun one end with a profusion of foliage; a few trees threw their
branches gracefully over it; and I observed several pots of flowers
tastefully disposed about the door, and on the grass-plot in front. A
small wicket-gate opened upon a footpath that wound through some shrubbery
to the door. Just as we approached, we heard the sound of music&mdash;Leslie
grasped my arm; we paused and listened. It was Mary's voice singing, in a
style of the most touching simplicity, a little air of which her husband
was peculiarly fond.

I felt Leslie's hand tremble on my arm. He stepped forward, to hear more
distinctly. His step made a noise on the gravel-walk. A bright beautiful
face glanced out at the window, and vanished&mdash;a light footstep-was
heard&mdash;and Mary came tripping forth to meet us. She was in a pretty
rural dress of white; a few wild flowers were twisted in her fine hair; a
fresh bloom was on her cheek; her whole countenance beamed with smiles&mdash;I
had never seen her look so lovely.

"My dear George," cried she, "I am so glad you are come; I have been
watching and watching for you; and running down the lane, and looking out
for you. I've set out a table under a beautiful tree behind the cottage;
and I've been gathering some of the most delicious strawberries, for I
know you are fond of them&mdash;and we have such excellent cream&mdash;and
everything is so sweet and still here-Oh!"&mdash;said she, putting her arm
within his, and looking up brightly in his face, "Oh, we shall be so
happy!"

Poor Leslie was overcome.&mdash;He caught her to his bosom&mdash;he folded
his arms round her&mdash;he kissed her again and again&mdash;he could not
speak, but the tears gushed into his eyes; and he has often assured me,
that though the world has since gone prosperously with him, and his life
has, indeed, been a happy one, yet never has he experienced a moment of
more exquisite felicity.

[img[images/0066m.jpg]]
[img[images/0384m.jpg]]

"I appeal to any white man if ever he entered Logan's cabin hungry, and he
gave him not to eat; if ever he came cold and naked, and he clothed him
not."&mdash;Speech of au Indian Chief.

[img[images/9385m.jpg]]

THERE is something in the character and habits of the North American
savage, taken in connection with the scenery over which he is accustomed
to range, its vast lakes, boundless forests, majestic rivers, and
trackless plains, that is, to my mind, wonderfully striking and sublime.
He is formed for the wilderness, as the Arab is for the desert. His nature
is stern, simple, and enduring, fitted to grapple with difficulties and to
support privations. There seems but little soil in his heart for the
support of the kindly virtues; and yet, if we would but take the trouble
to penetrate through that proud stoicism and habitual taciturnity which
lock up his character from casual observation, we should find him linked
to his fellow-man of civilized life by more of those sympathies and
affections than are usually ascribed to him.

It has been the lot of the unfortunate aborigines of America in the early
periods of colonization to be doubly wronged by the white men. They have
been dispossessed of their hereditary possessions by mercenary and
frequently wanton warfare, and their characters have been traduced by
bigoted and interested writers. The colonists often treated them like
beasts of the forest, and the author has endeavored to justify him in his
outrages. The former found it easier to exterminate than to civilize; the
latter to vilify than to discriminate. The appellations of savage and
pagan were deemed sufficient to sanction the hostilities of both; and thus
the poor wanderers of the forest were persecuted and defamed, not because
they were guilty, but because they were ignorant.

The rights of the savage have seldom been properly appreciated or
respected by the white man. In peace he has too often been the dupe of
artful traffic; in war he has been regarded as a ferocious animal whose
life or death was a question of mere precaution and convenience. Man is
cruelly wasteful of life when his own safety is endangered and he is
sheltered by impunity, and little mercy is to be expected from him when he
feels the sting of the reptile and is conscious of the power to destroy.

The same prejudices, which were indulged thus early, exist in common
circulation at the present day. Certain learned societies have, it is
true, with laudable diligence, endeavored to investigate and record the
real characters and manners of the Indian tribes; the American government,
too, has wisely and humanely exerted itself to inculcate a friendly and
forbearing spirit towards them and to protect them from fraud and
injustice.* The current opinion of the Indian character, however, is too
apt to be formed from the miserable hordes which infest the frontiers and
hang on the skirts of the settlements. These are too commonly composed of
degenerate beings, corrupted and enfeebled by the vices of society,
without being benefited by its civilization. That proud independence which
formed the main pillar of savage virtue has been shaken down, and the
whole moral fabric lies in ruins. Their spirits are humiliated and debased
by a sense of inferiority, and their native courage cowed and daunted by
the superior knowledge and power of their enlightened neighbors. Society
has advanced upon them like one of those withering airs that will
sometimes breed desolation over a whole region of fertility. It has
enervated their strength, multiplied their diseases, and superinduced upon
their original barbarity the low vices of artificial life. It has given
them a thousand superfluous wants, whilst it has diminished their means of
mere existence. It has driven before it the animals of the chase, who fly
from the sound of the axe and the smoke of the settlement and seek refuge
in the depths of remoter forests and yet untrodden wilds. Thus do we too
often find the Indians on our frontiers to be the mere wrecks and remnants
of once powerful tribes, who have lingered in the vicinity of the
settlements and sunk into precarious and vagabond existence. Poverty,
repining and hopeless poverty, a canker of the mind unknown in savage
life, corrodes their spirits and blights every free and noble quality of
their natures. They become drunken, indolent, feeble, thievish, and
pusillanimous. They loiter like vagrants about the settlements, among
spacious dwellings replete with elaborate comforts, which only render them
sensible of the comparative wretchedness of their own condition. Luxury
spreads its ample board before their eyes, but they are excluded from the
banquet. Plenty revels over the fields, but they are starving in the midst
of its abundance; the whole wilderness has blossomed into a garden, but
they feel as reptiles that infest it.

"""
* The American Government has been indefatigable in its
exertions to ameliorate the situation of the Indians, and to
introduce among them the arts of civilization and civil and
religious knowledge. To protect them from the frauds of the
white traders no purchase of land from them by individuals
is permitted, nor is any person allowed to receive lands
from them as a present without the express sanction of
government. These precautions are strictly enforced.
"""

How different was their state while yet the undisputed lords of the soil!
Their wants were few and the means of gratification within their reach.
They saw every one round them sharing the same lot, enduring the same
hardships, feeding on the same aliments, arrayed in the same rude
garments. No roof then rose but was open to the homeless stranger; no
smoke curled among the trees but he was welcome to sit down by its fire
and join the hunter in his repast. "For," says an old historian of New
England, "their life is so void of care, and they are so loving also, that
they make use of those things they enjoy as common goods, and are therein
so compassionate that rather than one should starve through want, they
would starve all; thus they pass their time merrily, not regarding our
pomp, but are better content with their own, which some men esteem so
meanly of." Such were the Indians whilst in the pride and energy of their
primitive natures: they resembled those wild plants which thrive best in
the shades of the forest, but shrink from the hand of cultivation and
perish beneath the influence of the sun.

In discussing the savage character writers have been too prone to indulge
in vulgar prejudice and passionate exaggeration, instead of the candid
temper of true philosophy. They have not sufficiently considered the
peculiar circumstances in which the Indians have been placed, and the
peculiar principles under which they have been educated. No being acts
more rigidly from rule than the Indian. His whole conduct is regulated
according to some general maxims early implanted in his mind. The moral
laws that govern him are, to be sure, but few; but then he conforms to
them all; the white man abounds in laws of religion, morals, and manners,
but how many does he violate!

A frequent ground of accusation against the Indians is their disregard of
treaties, and the treachery and wantonness with which, in time of apparent
peace, they will suddenly fly to hostilities. The intercourse of the white
men with the Indians, however, is too apt to be cold, distrustful,
oppressive, and insulting. They seldom treat them with that confidence and
frankness which are indispensable to real friendship, nor is sufficient
caution observed not to offend against those feelings of pride or
superstition which often prompt the Indian to hostility quicker than mere
considerations of interest. The solitary savage feels silently, but
acutely. His sensibilities are not diffused over so wide a surface as
those of the white man, but they run in steadier and deeper channels. His
pride, his affections, his superstitions, are all directed towards fewer
objects, but the wounds inflicted on them are proportionably severe, and
furnish motives of hostility which we cannot sufficiently appreciate.
Where a community is also limited in number, and forms one great
patriarchal family, as in an Indian tribe, the injury of an individual is
the injury of the whole, and the sentiment of vengeance is almost
instantaneously diffused. One council-fire is sufficient for the
discussion and arrangement of a plan of hostilities. Here all the
fighting-men and sages assemble. Eloquence and superstition combine to
inflame the minds of the warriors. The orator awakens their martial ardor,
and they are wrought up to a kind of religious desperation by the visions
of the prophet and the dreamer.

An instance of one of those sudden exasperations, arising from a motive
peculiar to the Indian character, is extant in an old record of the early
settlement of Massachusetts. The planters of Plymouth had defaced the
monuments of the dead at Passonagessit, and had plundered the grave of the
Sachem's mother of some skins with which it had been decorated. The
Indians are remarkable for the reverence which they entertain for the
sepulchres of their kindred. Tribes that have passed generations exiled
from the abodes of their ancestors, when by chance they have been
travelling in the vicinity, have been known to turn aside from the
highway, and, guided by wonderfully accurate tradition, have crossed the
country for miles to some tumulus, buried perhaps in woods, where the
bones of their tribe were anciently deposited, and there have passed hours
in silent meditation. Influenced by this sublime and holy feeling, the
Sachem whose mother's tomb had been violated gathered his men together,
and addressed them in the following beautifully simple and pathetic
harangue&mdash;a curious specimen of Indian eloquence and an affecting
instance of filial piety in a savage:

"When last the glorious light of all the sky was underneath this globe and
birds grew silent, I began to settle, as my custom is, to take repose.
Before mine eyes were fast closed methought I saw a vision, at which my
spirit was much troubled; and trembling at that doleful sight, a spirit
cried aloud, 'Behold, my son, whom I have cherished, see the breasts that
gave thee suck, the hands that lapped thee warm and fed thee oft. Canst
thou forget to take revenge of those wild people who have defaced my
monument in a despiteful manner, disdaining our antiquities and honorable
customs? See, now, the Sachem's grave lies like the common people, defaced
by an ignoble race. Thy mother doth complain and implores thy aid against
this thievish people who have newly intruded on our land. If this be
suffered, I shall not rest quiet in my everlasting habitation.' This said,
the spirit vanished, and I, all in a sweat, not able scarce to speak,
began to get some strength and recollect my spirits that were fled, and
determined to demand your counsel and assistance."

I have adduced this anecdote at some length, as it tends to show how these
sudden acts of hostility, which have been attributed to caprice and
perfidy, may often arise from deep and generous motives, which our
inattention to Indian character and customs prevents our properly
appreciating.

Another ground of violent outcry against the Indians is their barbarity to
the vanquished. This had its origin partly in policy and partly in
superstition. The tribes, though sometimes called nations, were never so
formidable in their numbers but that the loss of several warriors was
sensibly felt; this was particularly the case when they had been
frequently engaged in warfare; and many an instance occurs in Indian
history where a tribe that had long been formidable to its neighbors has
been broken up and driven away by the capture and massacre of its
principal fighting-men. There was a strong temptation, therefore, to the
victor to be merciless, not so much to gratify any cruel revenge, as to
provide for future security. The Indians had also the superstitious
belief, frequent among barbarous nations and prevalent also among the
ancients, that the manes of their friends who had fallen in battle were
soothed by the blood of the captives. The prisoners, however, who are not
thus sacrificed are adopted into their families in the place of the slain,
and are treated with the confidence and affection of relatives and
friends; nay, so hospitable and tender is their entertainment that when
the alternative is offered them they will often prefer to remain with
their adopted brethren rather than return to the home and the friends of
their youth.

The cruelty of the Indians towards their prisoners has been heightened
since the colonization of the whites. What was formerly a compliance with
policy and superstition has been exasperated into a gratification of
vengeance. They cannot but be sensible that the white men are the usurpers
of their ancient dominion, the cause of their degradation, and the gradual
destroyers of their race. They go forth to battle smarting with injuries
and indignities which they have individually suffered, and they are driven
to madness and despair by the wide-spreading desolation and the
overwhelming ruin of European warfare. The whites have too frequently set
them an example of violence by burning their villages and laying waste
their slender means of subsistence, and yet they wonder that savages do
not show moderation and magnanimity towards those who have left them
nothing but mere existence and wretchedness.

We stigmatize the Indians, also, as cowardly and treacherous, because they
use stratagem in warfare in preference to open force; but in this they are
fully justified by their rude code of honor. They are early taught that
stratagem is praiseworthy; the bravest warrior thinks it no disgrace to
lurk in silence, and take every advantage of his foe: he triumphs in the
superior craft and sagacity by which he has been enabled to surprise and
destroy an enemy. Indeed, man is naturally more prone to subtilty than
open valor, owing to his physical weakness in comparison with other
animals. They are endowed with natural weapons of defence, with horns,
with tusks, with hoofs, and talons; but man has to depend on his superior
sagacity. In all his encounters with these, his proper enemies, he resorts
to stratagem; and when he perversely turns his hostility against his
fellow-man, he at first continues the same subtle mode of warfare.

The natural principle of war is to do the most harm to our enemy with the
least harm to ourselves; and this of course is to be effected by
stratagem. That chivalrous courage which induces us to despise the
suggestions of prudence and to rush in the face of certain danger is the
offspring of society and produced by education. It is honorable, because
it is in fact the triumph of lofty sentiment over an instinctive
repugnance to pain, and over those yearnings after personal ease and
security which society has condemned as ignoble. It is kept alive by pride
and the fear of shame; and thus the dread of real evil is overcome by the
superior dread of an evil which exists but in the imagination. It has been
cherished and stimulated also by various means. It has been the theme of
spirit-stirring song and chivalrous story. The poet and minstrel have
delighted to shed round it the splendors of fiction, and even the
historian has forgotten the sober gravity of narration and broken forth
into enthusiasm and rhapsody in its praise. Triumphs and gorgeous pageants
have been its reward: monuments, on which art has exhausted its skill and
opulence its treasures, have been erected to perpetuate a nation's
gratitude and admiration. Thus artificially excited, courage has risen to
an extraordinary and factitious degree of heroism, and, arrayed in all the
glorious "pomp and circumstance of war," this turbulent quality has even
been able to eclipse many of those quiet but invaluable virtues which
silently ennoble the human character and swell the tide of human
happiness.

But if courage intrinsically consists in the defiance of danger and pain,
the life of the Indian is a continual exhibition of it. He lives in a
state of perpetual hostility and risk. Peril and adventure are congenial
to his nature, or rather seem necessary to arouse his faculties and to
give an interest to his existence. Surrounded by hostile tribes, whose
mode of warfare is by ambush and surprisal, he is always prepared for
fight and lives with his weapons in his hands. As the ship careers in
fearful singleness through the solitudes of ocean, as the bird mingles
among clouds and storms, and wings its way, a mere speck, across the
pathless fields of air, so the Indian holds his course, silent, solitary,
but undaunted, through the boundless bosom of the wilderness. His
expeditions may vie in distance and danger with the pilgrimage of the
devotee or the crusade of the knight-errant. He traverses vast forests
exposed to the hazards of lonely sickness, of lurking enemies, and pining
famine. Stormy lakes, those great inland seas, are no obstacles to his
wanderings: in his light canoe of bark he sports like a feather on their
waves, and darts with the swiftness of an arrow down the roaring rapids of
the rivers. His very subsistence is snatched from the midst of toil and
peril. He gains his food by the hardships and dangers of the chase: he
wraps himself in the spoils of the bear, the panther, and the buffalo, and
sleeps among the thunders of the cataract.

[img[images/0395m.jpg]]

No hero of ancient or modern days can surpass the Indian in his lofty
contempt of death and the fortitude with which he sustains his cruelest
affliction. Indeed, we here behold him rising superior to the white man in
consequence of his peculiar education. The latter rushes to glorious death
at the cannon's mouth; the former calmly contemplates its approach, and
triumphantly endures it amidst the varied torments of surrounding foes and
the protracted agonies of fire. He even takes a pride in taunting his
persecutors and provoking their ingenuity of torture; and as the devouring
flames prey on his very vitals and the flesh shrinks from the sinews, he
raises his last song of triumph, breathing the defiance of an unconquered
heart and invoking the spirits of his fathers to witness that he dies
without a groan.

Notwithstanding the obloquy with which the early historians have
overshadowed the characters of the unfortunate natives, some bright gleams
occasionally break through which throw a degree of melancholy lustre on
their memories. Facts are occasionally to be met with in the rude annals
of the eastern provinces which, though recorded with the coloring of
prejudice and bigotry, yet speak for themselves, and will be dwelt on with
applause and sympathy when prejudice shall have passed away.

In one of the homely narratives of the Indian wars in New England there is
a touching account of the desolation carried into the tribe of the Pequod
Indians. Humanity shrinks from the cold-blooded detail of indiscriminate
butchery. In one place we read of the surprisal of an Indian fort in the
night, when the wigwams were wrapped in flames and the miserable
inhabitants shot down and slain in attempting to escape, "all being
despatched and ended in the course of an hour." After a series of similar
transactions "our soldiers," as the historian piously observes, "being
resolved by God's assistance to make a final destruction of them," the
unhappy savages being hunted from their homes and fortresses and pursued
with fire and sword, a scanty but gallant band, the sad remnant of the
Pequod warriors, with their wives and children took refuge in a swamp.

Burning with indignation and rendered sullen by despair, with hearts
bursting with grief at the destruction of their tribe, and spirits galled
and sore at the fancied ignominy of their defeat, they refused to ask
their lives at the hands of an insulting foe, and preferred death to
submission.

[img[images/0397m.jpg]]

As the night drew on they were surrounded in their dismal retreat, so as
to render escape impracticable. Thus situated, their enemy "plied them
with shot all the time, by which means many were killed and buried in the
mire." In the darkness and fog that preceded the dawn of day some few
broke through the besiegers and escaped into the woods; "the rest were
left to the conquerors, of which many were killed in the swamp, like
sullen dogs who would rather, in their self-willedness and madness, sit
still and be shot through or cut to pieces" than implore for mercy. When
the day broke upon this handful of forlorn but dauntless spirits, the
soldiers, we are told, entering the swamp, "saw several heaps of them
sitting close together, upon whom they discharged their pieces, laden with
ten or twelve pistol bullets at a time, putting the muzzles of the pieces
under the boughs, within a few yards of them; so as, besides those that
were found dead, many more were killed and sunk into the mire, and never
were minded more by friend or foe."

Can any one read this plain unvarnished tale without admiring the stern
resolution, the unbending pride, the loftiness of spirit that seemed to
nerve the hearts of these self-taught heroes and to raise them above the
instinctive feelings of human nature? When the Gauls laid waste the city
of Rome, they found the senators clothed in their robes and seated with
stern tranquillity in their curule chairs; in this manner they suffered
death without resistance or even supplication. Such conduct was in them
applauded as noble and magnanimous; in the hapless Indian it was reviled
as obstinate and sullen. How truly are we the dupes of show and
circumstance! How different is virtue clothed in purple and enthroned in
state, from virtue naked and destitute and perishing obscurely in a
wilderness!

But I forbear to dwell on these gloomy pictures. The eastern tribes have
long since disappeared; the forests that sheltered them have been laid
low, and scarce any traces remain of them in the thickly-settled States of
New England, excepting here and there the Indian name of a village or a
stream. And such must, sooner or later, be the fate of those other tribes
which skirt the frontiers, and have occasionally been inveigled from their
forests to mingle in the wars of white men. In a little while, and they
will go the way that their brethren have gone before. The few hordes which
still linger about the shores of Huron and Superior and the tributary
streams of the Mississippi will share the fate of those tribes that once
spread over Massachusetts and Connecticut and lorded it along the proud
banks of the Hudson, of that gigantic race said to have existed on the
borders of the Susquehanna, and of those various nations that flourished
about the Potomac and the Rappahannock and that peopled the forests of the
vast valley of Shenandoah. They will vanish like a vapor from the face of
the earth; their very history will be lost in forgetfulness; and "the
places that now know them will know them no more forever." Or if,
perchance, some dubious memorial of them should survive, it may be in the
romantic dreams of the poet, to people in imagination his glades and
groves, like the fauns and satyrs and sylvan deities of antiquity. But
should he venture upon the dark story of their wrongs and wretchedness,
should he tell how they were invaded, corrupted, despoiled, driven from
their native abodes and the sepulchres of their fathers, hunted like wild
beasts about the earth, and sent down with violence and butchery to the
grave, posterity will either turn with horror and incredulity from the
tale or blush with indignation at the inhumanity of their forefathers. "We
are driven back," said an old warrior, "until we can retreat no farther&mdash;our
hatchets are broken, our bows are snapped, our fires are nearly
extinguished; a little longer and the white man will cease to persecute
us, for we shall cease to exist!"
"""
When I behold, with deep astonishment,
To famous Westminster how there resorte,
Living in brasse or stoney monument,
The princes and the worthies of all sorte;
Doe not I see reformde nobilitie,
Without contempt, or pride, or ostentation,
And looke upon offenselesse majesty,
Naked of pomp or earthly domination?
And how a play-game of a painted stone
Contents the quiet now and silent sprites,
Whome all the world which late they stood upon
Could not content nor quench their appetites.
Life is a frost of cold felicitie,
And death the thaw of all our vanitie.
CHRISTOLERO'S EPIGRAMS, BY T. B. 1598.
"""

ON one of those sober and rather melancholy days in the latter part of
autumn when the shadows of morning and evening almost mingle together, and
throw a gloom over the decline of the year, I passed several hours in
rambling about Westminster Abbey. There was something congenial to the
season in the mournful magnificence of the old pile, and as I passed its
threshold it seemed like stepping back into the regions of antiquity and
losing myself among the shades of former ages.

I entered from the inner court of Westminster School, through a long, low,
vaulted passage that had an almost subterranean look, being dimly lighted
in one part by circular perforations in the massive walls. Through this
dark avenue I had a distant view of the cloisters, with the figure of an
old verger in his black gown moving along their shadowy vaults, and
seeming like a spectre from one of the neighboring tombs. The approach to
the abbey through these gloomy monastic remains prepares the mind for its
solemn contemplation. The cloisters still retain something of the quiet
and seclusion of former days. The gray walls are discolored by damps and
crumbling with age; a coat of hoary moss has gathered over the
inscriptions of the mural monuments, and obscured the death's heads and
other funeral emblems. The sharp touches of the chisel are gone from the
rich tracery of the arches; the roses which adorned the keystones have
lost their leafy beauty; everything bears marks of the gradual
dilapidations of time, which yet has something touching and pleasing in
its very decay.

The sun was pouring down a yellow autumnal ray into the square of the
cloisters, beaming upon a scanty plot of grass in the centre, and lighting
up an angle of the vaulted passage with a kind of dusky splendor. From
between the arcades the eye glanced up to a bit of blue sky or a passing
cloud, and beheld the sun-gilt pinnacles of the abbey towering into the
azure heaven.

[img[images/0247m.jpg]]

As I paced the cloisters, sometimes contemplating this mingled picture of
glory and decay, and sometimes endeavoring to decipher the inscriptions on
the tombstones which formed the pavement beneath my feet, my eye was
attracted to three figures rudely carved in relief, but nearly worn away
by the footsteps of many generations. They were the effigies of three of
the early abbots; the epitaphs were entirely effaced; the names alone
remained, having no doubt been renewed in later times (Vitalis. Abbas.
1082, and Gislebertus Crispinus. Abbas. 1114, and Laurentius. Abbas.
1176). I remained some little while, musing over these casual relics of
antiquity thus left like wrecks upon this distant shore of time, telling
no tale but that such beings had been and had perished, teaching no moral
but the futility of that pride which hopes still to exact homage in its
ashes and to live in an inscription. A little longer, and even these faint
records will be obliterated and the monument will cease to be a memorial.
Whilst I was yet looking down upon the gravestones I was roused by the
sound of the abbey clock, reverberating from buttress to buttress and
echoing among the cloisters. It is almost startling to hear this warning
of departed time sounding among the tombs and telling the lapse of the
hour, which, like a billow, has rolled us onward towards the grave. I
pursued my walk to an arched door opening to the interior of the abbey. On
entering here the magnitude of the building breaks fully upon the mind,
contrasted with the vaults of the cloisters. The eyes gaze with wonder at
clustered columns of gigantic dimensions, with arches springing from them
to such an amazing height, and man wandering about their bases, shrunk
into insignificance in comparison with his own handiwork. The spaciousness
and gloom of this vast edifice produce a profound and mysterious awe. We
step cautiously and softly about, as if fearful of disturbing the hallowed
silence of the tomb, while every footfall whispers along the walls and
chatters among the sepulchres, making us more sensible of the quiet we
have interrupted.

It seems as if the awful nature of the place presses down upon the soul
and hushes the beholder into noiseless reverence. We feel that we are
surrounded by the congregated bones of the great men of past times, who
have filled history with their deeds and the earth with their renown.

And yet it almost provokes a smile at the vanity of human ambition to see
how they are crowded together and jostled in the dust; what parsimony is
observed in doling out a scanty nook, a gloomy corner, a little portion of
earth, to those whom, when alive, kingdoms could not satisfy, and how many
shapes and forms and artifices are devised to catch the casual notice of
the passenger, and save from forgetfulness for a few short years a name
which once aspired to occupy ages of the world's thought and admiration.

[img[images/0249m.jpg]]

I passed some time in Poet's Corner, which occupies an end of one of the
transepts or cross aisles of the abbey. The monuments are generally
simple, for the lives of literary men afford no striking themes for the
sculptor. Shakespeare and Addison have statues erected to their memories,
but the greater part have busts, medallions, and sometimes mere
inscriptions. Notwithstanding the simplicity of these memorials, I have
always observed that the visitors to the abbey remained longest about
them. A kinder and fonder feeling takes place of that cold curiosity or
vague admiration with which they gaze on the splendid monuments of the
great and the heroic. They linger about these as about the tombs of
friends and companions, for indeed there is something of companionship
between the author and the reader. Other men are known to posterity only
through the medium of history, which is continually growing faint and
obscure; but the intercourse between the author and his fellowmen is ever
new, active, and immediate. He has lived for them more than for himself;
he has sacrificed surrounding enjoyments, and shut himself up from the
delights of social life, that he might the more intimately commune with
distant minds and distant ages. Well may the world cherish his renown, for
it has been purchased not by deeds of violence and blood, but by the
diligent dispensation of pleasure. Well may posterity be grateful to his
memory, for he has left it an inheritance not of empty names and sounding
actions, but whole treasures of wisdom, bright gems of thought, and golden
veins of language.

From Poet's Corner I continued my stroll towards that part of the abbey
which contains the sepulchres of the kings. I wandered among what once
were chapels, but which are now occupied by the tombs and monuments of the
great. At every turn I met with some illustrious name or the cognizance of
some powerful house renowned in history. As the eye darts into these dusky
chambers of death it catches glimpses of quaint effigies&mdash;some
kneeling in niches, as if in devotion; others stretched upon the tombs,
with hands piously pressed together; warriors in armor, as if reposing
after battle; prelates, with crosiers and mitres; and nobles in robes and
coronets, lying as it were in state. In glancing over this scene, so
strangely populous, yet where every form is so still and silent, it seems
almost as if we were treading a mansion of that fabled city where every
being had been suddenly transmuted into stone.

I paused to contemplate a tomb on which lay the effigy of a knight in
complete armor. A large buckler was on one arm; the hands were pressed
together in supplication upon the breast; the face was almost covered by
the morion; the legs were crossed, in token of the warrior's having been
engaged in the holy war. It was the tomb of a crusader, of one of those
military enthusiasts who so strangely mingled religion and romance, and
whose exploits form the connecting link between fact and fiction, between
the history and the fairytale. There is something extremely picturesque in
the tombs of these adventurers, decorated as they are with rude armorial
bearings and Gothic sculpture. They comport with the antiquated chapels in
which they are generally found; and in considering them the imagination is
apt to kindle with the legendary associations, the romantic fiction, the
chivalrous pomp and pageantry which poetry has spread over the wars for
the sepulchre of Christ. They are the relics of times utterly gone by, of
beings passed from recollection, of customs and manners with which ours
have no affinity. They are like objects from some strange and distant land
of which we have no certain knowledge, and about which all our conceptions
are vague and visionary. There is something extremely solemn and awful in
those effigies on Gothic tombs, extended as if in the sleep of death or in
the supplication of the dying hour. They have an effect infinitely more
impressive on my feelings than the fanciful attitudes, the over wrought
conceits, the allegorical groups which abound on modern monuments. I have
been struck, also, with the superiority of many of the old sepulchral
inscriptions. There was a noble way in former times of saying things
simply, and yet saying them proudly; and I do not know an epitaph that
breathes a loftier consciousness of family worth and honorable lineage
than one which affirms of a noble house that "all the brothers were brave
and all the sisters virtuous."

In the opposite transept to Poet's Corner stands a monument which is among
the most renowned achievements of modern art, but which to me appears
horrible rather than sublime. It is the tomb of Mrs. Nightingale, by
Roubillac. The bottom of the monument is represented as throwing open its
marble doors, and a sheeted skeleton is starting forth. The shroud is
falling from his fleshless frame as he launches his dart at his victim.
She is sinking into her affrighted husband's arms, who strives with vain
and frantic effort to avert the blow. The whole is executed with terrible
truth and spirit; we almost fancy we hear the gibbering yell of triumph
bursting from the distended jaws of the spectre. But why should we thus
seek to clothe death with unnecessary terrors, and to spread horrors round
the tomb of those we love? The grave should be surrounded by everything
that might inspire tenderness and veneration for the dead, or that might
win the living to virtue. It is the place not of disgust and dismay, but
of sorrow and meditation.

While wandering about these gloomy vaults and silent aisles, studying the
records of the dead, the sound of busy existence from without occasionally
reaches the ear&mdash;the rumbling of the passing equipage, the murmur of
the multitude, or perhaps the light laugh of pleasure. The contrast is
striking with the deathlike repose around; and it has a strange effect
upon the feelings thus to hear the surges of active life hurrying along
and beating against the very walls of the sepulchre.

I continued in this way to move from tomb to tomb and from chapel to
chapel. The day was gradually wearing away; the distant tread of loiterers
about the abbey grew less and less frequent; the sweet-tongued bell was
summoning to evening prayers; and I saw at a distance the choristers in
their white surplices crossing the aisle and entering the choir. I stood
before the entrance to Henry the Seventh's chapel. A flight of steps leads
up to it through a deep and gloomy but magnificent arch. Great gates of
brass, richly and delicately wrought, turn heavily upon their hinges, as
if proudly reluctant to admit the feet of common mortals into this most
gorgeous of sepulchres.

On entering the eye is astonished by the pomp of architecture and the
elaborate beauty of sculptured detail. The very walls are wrought into
universal ornament encrusted with tracery, and scooped into niches crowded
with the statues of saints and martyrs. Stone seems, by the cunning labor
of the chisel, to have been robbed of its weight and density, suspended
aloft as if by magic, and the fretted roof achieved with the wonderful
minuteness and airy security of a cobweb.

Along the sides of the chapel are the lofty stalls of the Knights of the
Bath, richly carved of oak, though with the grotesque decorations of
Gothic architecture. On the pinnacles of the stalls are affixed the
helmets and crests of the knights, with their scarfs and swords, and above
them are suspended their banners, emblazoned with armorial bearings, and
contrasting the splendor of gold and purple and crimson with the cold gray
fretwork of the roof. In the midst of this grand mausoleum stands the
sepulchre of its founder&mdash;his effigy, with that of his queen,
extended on a sumptuous tomb&mdash;and the whole surrounded by a
superbly-wrought brazen railing.

There is a sad dreariness in this magnificence, this strange mixture of
tombs and trophies, these emblems of living and aspiring ambition, close
beside mementos which show the dust and oblivion in which all must sooner
or later terminate. Nothing impresses the mind with a deeper feeling of
loneliness than to tread the silent and deserted scene of former throng
and pageant. On looking round on the vacant stalls of the knights and
their esquires, and on the rows of dusty but gorgeous banners that were
once borne before them, my imagination conjured up the scene when this
hall was bright with the valor and beauty of the land, glittering with the
splendor of jewelled rank and military array, alive with the tread of many
feet and the hum of an admiring multitude. All had passed away; the
silence of death had settled again upon the place, interrupted only by the
casual chirping of birds, which had found their way into the chapel and
built their nests among its friezes and pendants&mdash;sure signs of
solitariness and desertion.

When I read the names inscribed on the banners, they were those of men
scattered far and wide about the world&mdash;some tossing upon distant
seas: some under arms in distant lands; some mingling in the busy
intrigues of courts and cabinets,&mdash;all seeking to deserve one more
distinction in this mansion of shadowy honors&mdash;the melancholy reward
of a monument.

Two small aisles on each side of this chapel present a touching instance
of the equality of the grave, which brings down the oppressor to a level
with the oppressed and mingles the dust of the bitterest enemies together.
In one is the sepulchre of the haughty Elizabeth; in the other is that of
her victim, the lovely and unfortunate Mary. Not an hour in the day but
some ejaculation of pity is uttered over the fate of the latter, mingled
with indignation at her oppressor. The walls of Elizabeth's sepulchre
continually echo with the sighs of sympathy heaved at the grave of her
rival.

A peculiar melancholy reigns over the aisle where Mary lies buried. The
light struggles dimly through windows darkened by dust. The greater part
of the place is in deep shadow, and the walls are stained and tinted by
time and weather. A marble figure of Mary is stretched upon the tomb,
round which is an iron railing, much corroded, bearing her national emblem&mdash;the
thistle. I was weary with wandering, and sat down to rest myself by the
monument, revolving in my mind the chequered and disastrous story of poor
Mary.

The sound of casual footsteps had ceased from the abbey. I could only
hear, now and then, the distant voice of the priest repeating the evening
service and the faint responses of the choir; these paused for a time, and
all was hushed. The stillness, the desertion, and obscurity that were
gradually prevailing around gave a deeper and more solemn interest to the
place;

"""
For in the silent grave no conversation,
No joyful tread of friends, no voice of lovers,
No careful father's counsel&mdash;nothing's heard,
For nothing is, but all oblivion,
Dust, and an endless darkness.
"""

Suddenly the notes of the deep-laboring organ burst upon the ear, falling
with doubled and redoubled intensity, and rolling, as it were, huge
billows of sound. How well do their volume and grandeur accord with this
mighty building! With what pomp do they swell through its vast vaults, and
breathe their awful harmony through these caves of death, and make the
silent sepulchre vocal! And now they rise in triumphant acclamation,
heaving higher and higher their accordant notes and piling sound on sound.
And now they pause, and the soft voices of the choir break out into sweet
gushes of melody; they soar aloft and warble along the roof, and seem to
play about these lofty vaults like the pure airs of heaven. Again the
pealing organ heaves its thrilling thunders, compressing air into music,
and rolling it forth upon the soul. What long-drawn cadences! What solemn
sweeping concords! It grows more and more dense and powerful; it fills the
vast pile and seems to jar the very walls&mdash;the ear is stunned&mdash;the
senses are overwhelmed. And now it is winding up in full jubilee&mdash;it
is rising from the earth to heaven; the very soul seems rapt away and
floated upwards on this swelling tide of harmony!

I sat for some time lost in that kind of reverie which a strain of music
is apt sometimes to inspire: the shadows of evening were gradually
thickening round me; the monuments began to cast deeper and deeper gloom;
and the distant clock again gave token of the slowly waning day.

I rose and prepared to leave the abbey. As I descended the flight of steps
which lead into the body of the building, my eye was caught by the shrine
of Edward the Confessor, and I ascended the small staircase that conducts
to it, to take from thence a general survey of this wilderness of tombs.
The shrine is elevated upon a kind of platform, and close around it are
the sepulchres of various kings and queens. From this eminence the eye
looks down between pillars and funeral trophies to the chapels and
chambers below, crowded with tombs, where warriors, prelates, courtiers,
and statesmen lie mouldering in their "beds of darkness." Close by me
stood the great chair of coronation, rudely carved of oak in the barbarous
taste of a remote and Gothic age. The scene seemed almost as if contrived
with theatrical artifice to produce an effect upon the beholder. Here was
a type of the beginning and the end of human pomp and power; here it was
literally but a step from the throne to the sepulchre. Would not one think
that these incongruous mementos had been gathered together as a lesson to
living greatness?&mdash;to show it, even in the moment of its proudest
exaltation, the neglect and dishonor to which it must soon arrive&mdash;how
soon that crown which encircles its brow must pass away, and it must lie
down in the dust and disgraces of the tomb, and be trampled upon by the
feet of the meanest of the multitude. For, strange to tell, even the grave
is here no longer a sanctuary. There is a shocking levity in some natures
which leads them to sport with awful and hallowed things, and there are
base minds which delight to revenge on the illustrious dead the abject
homage and grovelling servility which they pay to the living. The coffin
of Edward the Confessor has been broken open, and his remains despoiled of
their funereal ornaments; the sceptre has been stolen from the hand of the
imperious Elizabeth; and the effigy of Henry the Fifth lies headless. Not
a royal monument but bears some proof how false and fugitive is the homage
of mankind. Some are plundered, some mutilated, some covered with ribaldry
and insult,&mdash;all more or less outraged and dishonored.

The last beams of day were now faintly streaming through the painted
windows in the high vaults above me; the lower parts of the abbey were
already wrapped in the obscurity of twilight. The chapels and aisles grew
darker and darker. The effigies of the kings faded into shadows; the
marble figures of the monuments assumed strange shapes in the uncertain
light; the evening breeze crept through the aisles like the cold breath of
the grave; and even the distant footfall of a verger, traversing the
Poet's Corner, had something strange and dreary in its sound. I slowly
retraced my morning's walk, and as I passed out at the portal of the
cloisters, the door, closing with a jarring noise behind me, filled the
whole building with echoes.

I endeavored to form some arrangement in my mind of the objects I had been
contemplating, but found they were already falling into indistinctness and
confusion. Names, inscriptions, trophies, had all become confounded in my
recollection, though I had scarcely taken my foot from off the threshold.
What, thought I, is this vast assemblage of sepulchres but a treasury of
humiliation&mdash;a huge pile of reiterated homilies on the emptiness of
renown and the certainty of oblivion? It is, indeed, the empire of death;
his great shadowy palace where he sits in state mocking at the relics of
human glory and spreading dust and forgetfulness on the monuments of
princes. How idle a boast, after all, is the immortality of a name! Time
is ever silently turning over his pages; we are too much engrossed by the
story of the present to think of the characters and anecdotes that gave
interest to the past; and each age is a volume thrown aside to be speedily
forgotten. The idol of to-day pushes the hero of yesterday out of our
recollection, and will in turn be supplanted by his successor of tomorrow.
"Our fathers," says Sir Thomas Browne, "find their graves in our short
memories, and sadly tell us how we may be buried in our survivors."
History fades into fable; fact becomes clouded with doubt and controversy;
the inscription moulders from the tablet; the statue falls from the
pedestal. Columns, arches, pyramids, what are they but heaps of sand, and
their epitaphs but characters written in the dust? What is the security of
a tomb or the perpetuity of an embalmment? The remains of Alexander the
Great have been scattered to the wind, and his empty sarcophagus is now
the mere curiosity of a museum. "The Egyptian mummies, which Cambyses or
time hath spared, avarice now consumeth; Mizraim cures wounds, and Pharaoh
is sold for balsams."*

What then is to ensure this pile which now towers above me from sharing
the fate of mightier mausoleums? The time must come when its gilded vaults
which now spring so loftily, shall lie in rubbish beneath the feet; when
instead of the sound of melody and praise the wind shall whistle through
the broken arches and the owl hoot from the shattered tower; when the
garish sunbeam shall break into these gloomy mansions of death, and the
ivy twine round the fallen column; and the fox-glove hang its blossoms
about the nameless urn, as if in mockery of the dead. Thus man passes
away; his name passes from record and recollection; his history is as a
tale that is told, and his very monument becomes a ruin.

"""
* Sir T. Browne.
"""