0
$:/core/ui/SideBar/Open
above
hide
hide
hide
hide
show
hide
show
hide
show
hide
yes
yes
no
tc-btn-invisible
no
show
hide
hide
hide
disable
{
"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-2016\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/auto-height": {
"title": "$:/core/images/auto-height",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-auto-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <path d=\"M67.9867828,114.356363 L67.9579626,99.8785426 C67.9550688,98.4248183 67.1636987,97.087107 65.8909901,96.3845863 L49.9251455,87.5716209 L47.992126,95.0735397 L79.8995411,95.0735397 C84.1215894,95.0735397 85.4638131,89.3810359 81.686497,87.4948823 L49.7971476,71.5713518 L48.0101917,79.1500092 L79.992126,79.1500092 C84.2093753,79.1500092 85.5558421,73.4676733 81.7869993,71.5753162 L49.805065,55.517008 L48.0101916,63.0917009 L79.9921259,63.0917015 C84.2035118,63.0917016 85.5551434,57.4217887 81.7966702,55.5218807 L65.7625147,47.4166161 L67.9579705,50.9864368 L67.9579705,35.6148245 L77.1715737,44.8284272 C78.7336709,46.3905243 81.2663308,46.3905243 82.8284279,44.8284271 C84.390525,43.2663299 84.390525,40.7336699 82.8284278,39.1715728 L66.8284271,23.1715728 C65.2663299,21.6094757 62.73367,21.6094757 61.1715729,23.1715729 L45.1715729,39.1715729 C43.6094757,40.73367 43.6094757,43.26633 45.1715729,44.8284271 C46.73367,46.3905243 49.26633,46.3905243 50.8284271,44.8284271 L59.9579705,35.6988837 L59.9579705,50.9864368 C59.9579705,52.495201 60.806922,53.8755997 62.1534263,54.5562576 L78.1875818,62.6615223 L79.9921261,55.0917015 L48.0101917,55.0917009 C43.7929424,55.0917008 42.4464755,60.7740368 46.2153183,62.6663939 L78.1972526,78.7247021 L79.992126,71.1500092 L48.0101917,71.1500092 C43.7881433,71.1500092 42.4459197,76.842513 46.2232358,78.7286665 L78.1125852,94.6521971 L79.8995411,87.0735397 L47.992126,87.0735397 C43.8588276,87.0735397 42.4404876,92.5780219 46.0591064,94.5754586 L62.024951,103.388424 L59.9579785,99.8944677 L59.9867142,114.32986 L50.8284271,105.171573 C49.26633,103.609476 46.73367,103.609476 45.1715729,105.171573 C43.6094757,106.73367 43.6094757,109.26633 45.1715729,110.828427 L61.1715729,126.828427 C62.73367,128.390524 65.2663299,128.390524 66.8284271,126.828427 L82.8284278,110.828427 C84.390525,109.26633 84.390525,106.73367 82.8284279,105.171573 C81.2663308,103.609476 78.7336709,103.609476 77.1715737,105.171573 L67.9867828,114.356363 L67.9867828,114.356363 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\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/bold": {
"title": "$:/core/images/bold",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-bold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M41.1456583,51.8095238 L41.1456583,21.8711485 L67.4985994,21.8711485 C70.0084159,21.8711485 72.4285598,22.0802967 74.7591036,22.4985994 C77.0896475,22.9169022 79.1512515,23.6638602 80.9439776,24.7394958 C82.7367036,25.8151314 84.170863,27.3090474 85.2464986,29.2212885 C86.3221342,31.1335296 86.859944,33.5835518 86.859944,36.5714286 C86.859944,41.9496067 85.2465147,45.8337882 82.0196078,48.2240896 C78.792701,50.614391 74.6694929,51.8095238 69.6498599,51.8095238 L41.1456583,51.8095238 Z M13,0 L13,128 L75.0280112,128 C80.7647346,128 86.3519803,127.28292 91.789916,125.848739 C97.2278517,124.414559 102.068139,122.203563 106.310924,119.215686 C110.553709,116.22781 113.929959,112.373506 116.439776,107.652661 C118.949592,102.931816 120.204482,97.3445701 120.204482,90.8907563 C120.204482,82.8832466 118.262391,76.0411115 114.378151,70.3641457 C110.493911,64.6871798 104.607883,60.7133634 96.719888,58.442577 C102.456611,55.6937304 106.788968,52.1680887 109.717087,47.8655462 C112.645206,43.5630037 114.109244,38.1849062 114.109244,31.7310924 C114.109244,25.7553389 113.123259,20.7357813 111.151261,16.6722689 C109.179262,12.6087565 106.400578,9.35201972 102.815126,6.90196078 C99.2296739,4.45190185 94.927196,2.68908101 89.907563,1.61344538 C84.8879301,0.537809748 79.3305627,0 73.2352941,0 L13,0 Z M41.1456583,106.128852 L41.1456583,70.9915966 L71.8011204,70.9915966 C77.896389,70.9915966 82.7964334,72.3958776 86.5014006,75.2044818 C90.2063677,78.0130859 92.0588235,82.7039821 92.0588235,89.2773109 C92.0588235,92.6237329 91.4911355,95.3725383 90.3557423,97.5238095 C89.2203491,99.6750808 87.6965548,101.378145 85.7843137,102.633053 C83.8720726,103.887961 81.661077,104.784311 79.1512605,105.322129 C76.641444,105.859947 74.0121519,106.128852 71.2633053,106.128852 L41.1456583,106.128852 Z\"></path>\n </g>\n</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/erase": {
"title": "$:/core/images/erase",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-erase tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M60.0870401,127.996166 L123.102318,64.980888 C129.636723,58.4464827 129.629513,47.8655877 123.098967,41.3350425 L99.4657866,17.7018617 C92.927448,11.1635231 82.3486358,11.1698163 75.8199411,17.698511 L4.89768189,88.6207702 C-1.63672343,95.1551755 -1.6295126,105.736071 4.90103262,112.266616 L20.6305829,127.996166 L60.0870401,127.996166 Z M25.1375576,120.682546 L10.812569,106.357558 C7.5455063,103.090495 7.54523836,97.793808 10.8048093,94.5342371 L46.2691086,59.0699377 L81.7308914,94.5317205 L55.5800654,120.682546 L25.1375576,120.682546 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/excise": {
"title": "$:/core/images/excise",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-excise tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M56,107.313709 L53.6568542,109.656854 C50.5326599,112.781049 45.4673401,112.781049 42.3431457,109.656854 C39.2189514,106.53266 39.2189514,101.46734 42.3431458,98.3431457 L58.3431458,82.3431457 C61.4673401,79.2189514 66.5326599,79.2189514 69.6568542,82.3431458 L85.6568542,98.3431458 C88.7810486,101.46734 88.7810486,106.53266 85.6568542,109.656854 C82.5326599,112.781049 77.4673401,112.781049 74.3431458,109.656854 L72,107.313708 L72,121.597798 C72,125.133636 68.418278,128 64,128 C59.581722,128 56,125.133636 56,121.597798 L56,107.313709 Z M0,40.0070969 C0,35.5848994 3.59071231,32 8,32 C12.418278,32 16,35.5881712 16,40.0070969 L16,71.9929031 C16,76.4151006 12.4092877,80 8,80 C3.581722,80 0,76.4118288 0,71.9929031 L0,40.0070969 Z M32,40.0070969 C32,35.5848994 35.5907123,32 40,32 C44.418278,32 48,35.5881712 48,40.0070969 L48,71.9929031 C48,76.4151006 44.4092877,80 40,80 C35.581722,80 32,76.4118288 32,71.9929031 L32,40.0070969 Z M80,40.0070969 C80,35.5848994 83.5907123,32 88,32 C92.418278,32 96,35.5881712 96,40.0070969 L96,71.9929031 C96,76.4151006 92.4092877,80 88,80 C83.581722,80 80,76.4118288 80,71.9929031 L80,40.0070969 Z M56,8.00709688 C56,3.58489938 59.5907123,0 64,0 C68.418278,0 72,3.58817117 72,8.00709688 L72,39.9929031 C72,44.4151006 68.4092877,48 64,48 C59.581722,48 56,44.4118288 56,39.9929031 L56,8.00709688 Z M112,40.0070969 C112,35.5848994 115.590712,32 120,32 C124.418278,32 128,35.5881712 128,40.0070969 L128,71.9929031 C128,76.4151006 124.409288,80 120,80 C115.581722,80 112,76.4118288 112,71.9929031 L112,40.0070969 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/file": {
"title": "$:/core/images/file",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-file tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"nonzero\">\n <path d=\"M111.96811,30.5 L112,30.5 L112,119.999079 C112,124.417866 108.419113,128 104.000754,128 L23.9992458,128 C19.5813843,128 16,124.417687 16,119.999079 L16,8.00092105 C16,3.58213437 19.5808867,0 23.9992458,0 L81,0 L81,0.0201838424 C83.1589869,-0.071534047 85.3482153,0.707077645 86.9982489,2.35711116 L109.625176,24.9840387 C111.151676,26.510538 111.932942,28.4998414 111.96811,30.5 L111.96811,30.5 Z M81,8 L24,8 L24,120 L104,120 L104,30.5 L89.0003461,30.5 C84.5818769,30.5 81,26.9216269 81,22.4996539 L81,8 Z\"></path>\n <rect x=\"32\" y=\"36\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"52\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"68\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"84\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"100\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"20\" width=\"40\" height=\"8\" rx=\"4\"></rect>\n </g>\n</svg>"
},
"$:/core/images/fixed-height": {
"title": "$:/core/images/fixed-height",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fixed-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M60,35.6568542 L50.8284271,44.8284271 C49.26633,46.3905243 46.73367,46.3905243 45.1715729,44.8284271 C43.6094757,43.26633 43.6094757,40.73367 45.1715729,39.1715729 L61.1715729,23.1715729 C62.73367,21.6094757 65.2663299,21.6094757 66.8284271,23.1715728 L82.8284278,39.1715728 C84.390525,40.7336699 84.390525,43.2663299 82.8284279,44.8284271 C81.2663308,46.3905243 78.7336709,46.3905243 77.1715737,44.8284272 L68,35.6568539 L68,93.3431461 L77.1715737,84.1715728 C78.7336709,82.6094757 81.2663308,82.6094757 82.8284279,84.1715729 C84.390525,85.7336701 84.390525,88.2663301 82.8284278,89.8284272 L66.8284271,105.828427 C65.2663299,107.390524 62.73367,107.390524 61.1715729,105.828427 L45.1715729,89.8284271 C43.6094757,88.26633 43.6094757,85.73367 45.1715729,84.1715729 C46.73367,82.6094757 49.26633,82.6094757 50.8284271,84.1715729 L60,93.3431458 L60,35.6568542 L60,35.6568542 Z M16,116 L112,116 C114.209139,116 116,114.209139 116,112 C116,109.790861 114.209139,108 112,108 L16,108 C13.790861,108 12,109.790861 12,112 C12,114.209139 13.790861,116 16,116 L16,116 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/fold-all-button": {
"title": "$:/core/images/fold-all-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M64.0292774,58.6235628 C61.9791013,58.6242848 59.9275217,57.8435723 58.3632024,56.279253 L35.7458219,33.6618725 C32.6211696,30.5372202 32.6166093,25.4673401 35.7408036,22.3431458 C38.8586409,19.2253085 43.9325646,19.2211982 47.0595304,22.348164 L64.0250749,39.3137085 L80.9906194,22.348164 C84.1152717,19.2235117 89.1851518,19.2189514 92.3093461,22.3431458 C95.4271834,25.460983 95.4312937,30.5349067 92.3043279,33.6618725 L69.6869474,56.279253 C68.1237851,57.8424153 66.0737951,58.6247195 64.0241231,58.6250809 Z\" transform=\"translate(64.024316, 39.313708) scale(1, -1) translate(-64.024316, -39.313708) \"></path>\n <path d=\"M64.0292774,123.621227 C61.9791013,123.621949 59.9275217,122.841236 58.3632024,121.276917 L35.7458219,98.6595365 C32.6211696,95.5348842 32.6166093,90.4650041 35.7408036,87.3408098 C38.8586409,84.2229725 43.9325646,84.2188622 47.0595304,87.345828 L64.0250749,104.311373 L80.9906194,87.345828 C84.1152717,84.2211757 89.1851518,84.2166154 92.3093461,87.3408098 C95.4271834,90.458647 95.4312937,95.5325707 92.3043279,98.6595365 L69.6869474,121.276917 C68.1237851,122.840079 66.0737951,123.622383 64.0241231,123.622745 Z\" transform=\"translate(64.024316, 104.311372) scale(1, -1) translate(-64.024316, -104.311372) \"></path>\n </g>\n</svg>"
},
"$:/core/images/fold-button": {
"title": "$:/core/images/fold-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M64.0292774,63.6235628 C61.9791013,63.6242848 59.9275217,62.8435723 58.3632024,61.279253 L35.7458219,38.6618725 C32.6211696,35.5372202 32.6166093,30.4673401 35.7408036,27.3431458 C38.8586409,24.2253085 43.9325646,24.2211982 47.0595304,27.348164 L64.0250749,44.3137085 L80.9906194,27.348164 C84.1152717,24.2235117 89.1851518,24.2189514 92.3093461,27.3431458 C95.4271834,30.460983 95.4312937,35.5349067 92.3043279,38.6618725 L69.6869474,61.279253 C68.1237851,62.8424153 66.0737951,63.6247195 64.0241231,63.6250809 Z\" transform=\"translate(64.024316, 44.313708) scale(1, -1) translate(-64.024316, -44.313708) \"></path>\n <path d=\"M64.0049614,105.998482 C61.9547853,105.999204 59.9032057,105.218491 58.3388864,103.654172 L35.7215059,81.0367916 C32.5968535,77.9121393 32.5922933,72.8422592 35.7164876,69.7180649 C38.8343248,66.6002276 43.9082485,66.5961173 47.0352144,69.7230831 L64.0007589,86.6886276 L80.9663034,69.7230831 C84.0909557,66.5984308 89.1608358,66.5938705 92.2850301,69.7180649 C95.4028673,72.8359021 95.4069777,77.9098258 92.2800119,81.0367916 L69.6626314,103.654172 C68.099469,105.217334 66.0494791,105.999639 63.999807,106 Z\" transform=\"translate(64.000000, 86.688628) scale(1, -1) translate(-64.000000, -86.688628) \"></path>\n </g>\n</svg>"
},
"$:/core/images/fold-others-button": {
"title": "$:/core/images/fold-others-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fold-others tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"56.0314331\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M101.657101,104.948818 C100.207918,103.498614 98.2051847,102.599976 95.9929031,102.599976 L72,102.599976 L72,78.6070725 C72,76.3964271 71.1036108,74.3936927 69.6545293,72.9441002 L69.6571005,72.9488183 C68.2079177,71.4986143 66.2051847,70.5999756 63.9929031,70.5999756 L32.0070969,70.5999756 C27.5881712,70.5999756 24,74.1816976 24,78.5999756 C24,83.0092633 27.5848994,86.5999756 32.0070969,86.5999756 L56,86.5999756 L56,110.592879 C56,112.803524 56.8963895,114.806259 58.3454713,116.255852 L58.3429,116.251133 C59.7920828,117.701337 61.7948156,118.599976 64.0070969,118.599976 L88,118.599976 L88,142.592879 C88,147.011804 91.581722,150.599976 96,150.599976 C100.409288,150.599976 104,147.015076 104,142.592879 L104,110.607072 C104,108.396427 103.103611,106.393693 101.654529,104.9441 Z\" transform=\"translate(64.000000, 110.599976) rotate(-45.000000) translate(-64.000000, -110.599976) \"></path>\n <path d=\"M101.725643,11.7488671 C100.27646,10.2986632 98.2737272,9.40002441 96.0614456,9.40002441 L72.0685425,9.40002441 L72.0685425,-14.5928787 C72.0685425,-16.8035241 71.1721533,-18.8062584 69.7230718,-20.255851 L69.725643,-20.2511329 C68.2764602,-21.7013368 66.2737272,-22.5999756 64.0614456,-22.5999756 L32.0756394,-22.5999756 C27.6567137,-22.5999756 24.0685425,-19.0182536 24.0685425,-14.5999756 C24.0685425,-10.1906879 27.6534419,-6.59997559 32.0756394,-6.59997559 L56.0685425,-6.59997559 L56.0685425,17.3929275 C56.0685425,19.6035732 56.964932,21.6063078 58.4140138,23.0559004 L58.4114425,23.0511823 C59.8606253,24.5013859 61.8633581,25.4000244 64.0756394,25.4000244 L88.0685425,25.4000244 L88.0685425,49.3929275 C88.0685425,53.8118532 91.6502645,57.4000244 96.0685425,57.4000244 C100.47783,57.4000244 104.068542,53.815125 104.068542,49.3929275 L104.068542,17.4071213 C104.068542,15.1964759 103.172153,13.1937416 101.723072,11.744149 Z\" transform=\"translate(64.068542, 17.400024) scale(1, -1) rotate(-45.000000) translate(-64.068542, -17.400024) \"></path>\n </g>\n</svg>"
},
"$:/core/images/folder": {
"title": "$:/core/images/folder",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-folder tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M55.6943257,128.000004 L7.99859666,128.000004 C3.5810937,128.000004 0,124.413822 0,119.996384 L0,48.0036243 C0,43.5833471 3.58387508,40.0000044 7.99859666,40.0000044 L16,40.0000044 L16,31.9999914 C16,27.5817181 19.5783731,24 24.0003461,24 L55.9996539,24 C60.4181231,24 64,27.5800761 64,31.9999914 L64,40.0000044 L104.001403,40.0000044 C108.418906,40.0000044 112,43.5861868 112,48.0036243 L112,59.8298353 L104,59.7475921 L104,51.9994189 C104,49.7887607 102.207895,48.0000044 99.9972215,48.0000044 L56,48.0000044 L56,36.0000255 C56,33.7898932 54.2072328,32 51.9957423,32 L28.0042577,32 C25.7890275,32 24,33.7908724 24,36.0000255 L24,48.0000044 L12.0027785,48.0000044 C9.78987688,48.0000044 8,49.7906032 8,51.9994189 L8,116.00059 C8,118.211248 9.79210499,120.000004 12.0027785,120.000004 L58.7630167,120.000004 L55.6943257,128.000004 L55.6943257,128.000004 Z\"></path>\n <path d=\"M23.8728955,55.5 L119.875702,55.5 C124.293205,55.5 126.87957,59.5532655 125.650111,64.5630007 L112.305967,118.936999 C111.077582,123.942356 106.497904,128 102.083183,128 L6.08037597,128 C1.66287302,128 -0.923492342,123.946735 0.305967145,118.936999 L13.650111,64.5630007 C14.878496,59.5576436 19.4581739,55.5 23.8728955,55.5 L23.8728955,55.5 L23.8728955,55.5 Z M25.6530124,64 L113.647455,64 C115.858129,64 117.151473,66.0930612 116.538306,68.6662267 L105.417772,115.333773 C104.803671,117.910859 102.515967,120 100.303066,120 L12.3086228,120 C10.0979492,120 8.8046054,117.906939 9.41777189,115.333773 L20.5383062,68.6662267 C21.1524069,66.0891409 23.4401107,64 25.6530124,64 L25.6530124,64 L25.6530124,64 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/heading-1": {
"title": "$:/core/images/heading-1",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-1 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M14,30 L27.25,30 L27.25,60.104 L61.7,60.104 L61.7,30 L74.95,30 L74.95,105.684 L61.7,105.684 L61.7,71.552 L27.25,71.552 L27.25,105.684 L14,105.684 L14,30 Z M84.3350766,43.78 C86.8790893,43.78 89.3523979,43.5680021 91.7550766,43.144 C94.1577553,42.7199979 96.3307336,42.0133383 98.2740766,41.024 C100.21742,40.0346617 101.87807,38.7626744 103.256077,37.208 C104.634084,35.6533256 105.535075,33.7453446 105.959077,31.484 L115.817077,31.484 L115.817077,105.684 L102.567077,105.684 L102.567077,53.32 L84.3350766,53.32 L84.3350766,43.78 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-2": {
"title": "$:/core/images/heading-2",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-2 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M125.519077,105.684 L74.8510766,105.684 C74.9217436,99.5359693 76.4057288,94.1653563 79.3030766,89.572 C82.2004244,84.9786437 86.1577182,80.986017 91.1750766,77.594 C93.5777553,75.8273245 96.0863969,74.113675 98.7010766,72.453 C101.315756,70.792325 103.718399,69.0080095 105.909077,67.1 C108.099754,65.1919905 109.901736,63.1250111 111.315077,60.899 C112.728417,58.6729889 113.47041,56.1113478 113.541077,53.214 C113.541077,51.8713266 113.382078,50.4403409 113.064077,48.921 C112.746075,47.4016591 112.127748,45.9883399 111.209077,44.681 C110.290405,43.3736601 109.018418,42.2783377 107.393077,41.395 C105.767735,40.5116622 103.647756,40.07 101.033077,40.07 C98.6303979,40.07 96.6340846,40.5469952 95.0440766,41.501 C93.4540687,42.4550048 92.1820814,43.762325 91.2280766,45.423 C90.2740719,47.083675 89.5674123,49.0446554 89.1080766,51.306 C88.648741,53.5673446 88.3837436,56.0053203 88.3130766,58.62 L76.2290766,58.62 C76.2290766,54.5213128 76.7767378,50.7230175 77.8720766,47.225 C78.9674154,43.7269825 80.610399,40.7060127 82.8010766,38.162 C84.9917542,35.6179873 87.6593942,33.6216739 90.8040766,32.173 C93.948759,30.7243261 97.6057224,30 101.775077,30 C106.297766,30 110.078395,30.7419926 113.117077,32.226 C116.155758,33.7100074 118.611401,35.5826554 120.484077,37.844 C122.356753,40.1053446 123.681739,42.5609868 124.459077,45.211 C125.236414,47.8610133 125.625077,50.3873213 125.625077,52.79 C125.625077,55.7580148 125.165748,58.4433213 124.247077,60.846 C123.328405,63.2486787 122.091751,65.4569899 120.537077,67.471 C118.982402,69.4850101 117.215753,71.3399915 115.237077,73.036 C113.2584,74.7320085 111.209087,76.3219926 109.089077,77.806 C106.969066,79.2900074 104.849087,80.7033266 102.729077,82.046 C100.609066,83.3886734 98.6480856,84.7313266 96.8460766,86.074 C95.0440676,87.4166734 93.47175,88.8123261 92.1290766,90.261 C90.7864032,91.7096739 89.8677458,93.2466585 89.3730766,94.872 L125.519077,94.872 L125.519077,105.684 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-3": {
"title": "$:/core/images/heading-3",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-3 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M94.8850766,62.224 C96.8637532,62.294667 98.8424001,62.1533351 100.821077,61.8 C102.799753,61.4466649 104.566402,60.8283378 106.121077,59.945 C107.675751,59.0616623 108.930072,57.8426744 109.884077,56.288 C110.838081,54.7333256 111.315077,52.8253446 111.315077,50.564 C111.315077,47.3839841 110.237421,44.8400095 108.082077,42.932 C105.926733,41.0239905 103.153094,40.07 99.7610766,40.07 C97.641066,40.07 95.8037511,40.4939958 94.2490766,41.342 C92.6944022,42.1900042 91.4047484,43.3383261 90.3800766,44.787 C89.3554048,46.2356739 88.5957458,47.860991 88.1010766,49.663 C87.6064075,51.465009 87.3944096,53.3199905 87.4650766,55.228 L75.3810766,55.228 C75.5224107,51.623982 76.1937373,48.2850154 77.3950766,45.211 C78.596416,42.1369846 80.2393995,39.4693446 82.3240766,37.208 C84.4087537,34.9466554 86.9350618,33.1800064 89.9030766,31.908 C92.8710915,30.6359936 96.2277246,30 99.9730766,30 C102.870424,30 105.714729,30.4239958 108.506077,31.272 C111.297424,32.1200042 113.806065,33.3566585 116.032077,34.982 C118.258088,36.6073415 120.042403,38.6743208 121.385077,41.183 C122.72775,43.6916792 123.399077,46.5713171 123.399077,49.822 C123.399077,53.5673521 122.551085,56.8356527 120.855077,59.627 C119.159068,62.4183473 116.509095,64.4499936 112.905077,65.722 L112.905077,65.934 C117.145098,66.7820042 120.448731,68.8843166 122.816077,72.241 C125.183422,75.5976835 126.367077,79.6786426 126.367077,84.484 C126.367077,88.017351 125.660417,91.1796527 124.247077,93.971 C122.833736,96.7623473 120.925755,99.129657 118.523077,101.073 C116.120398,103.016343 113.329093,104.517995 110.149077,105.578 C106.969061,106.638005 103.612428,107.168 100.079077,107.168 C95.7683884,107.168 92.005426,106.549673 88.7900766,105.313 C85.5747272,104.076327 82.8894207,102.327345 80.7340766,100.066 C78.5787325,97.8046554 76.9357489,95.0840159 75.8050766,91.904 C74.6744043,88.7239841 74.0737436,85.1906861 74.0030766,81.304 L86.0870766,81.304 C85.9457426,85.8266893 87.0587315,89.5896517 89.4260766,92.593 C91.7934218,95.5963483 95.3443863,97.098 100.079077,97.098 C104.107097,97.098 107.481396,95.9496782 110.202077,93.653 C112.922757,91.3563219 114.283077,88.0880212 114.283077,83.848 C114.283077,80.9506522 113.717749,78.6540085 112.587077,76.958 C111.456404,75.2619915 109.972419,73.9723378 108.135077,73.089 C106.297734,72.2056623 104.230755,71.6580011 101.934077,71.446 C99.6373985,71.2339989 97.2877553,71.163333 94.8850766,71.234 L94.8850766,62.224 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-4": {
"title": "$:/core/images/heading-4",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-4 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8,30 L21.25,30 L21.25,60.104 L55.7,60.104 L55.7,30 L68.95,30 L68.95,105.684 L55.7,105.684 L55.7,71.552 L21.25,71.552 L21.25,105.684 L8,105.684 L8,30 Z M84.5890766,78.548 L107.061077,78.548 L107.061077,45.9 L106.849077,45.9 L84.5890766,78.548 Z M128.049077,88.088 L118.509077,88.088 L118.509077,105.684 L107.061077,105.684 L107.061077,88.088 L75.2610766,88.088 L75.2610766,76.11 L107.061077,31.484 L118.509077,31.484 L118.509077,78.548 L128.049077,78.548 L128.049077,88.088 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-5": {
"title": "$:/core/images/heading-5",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-5 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M83.7550766,31.484 L122.127077,31.484 L122.127077,42.296 L92.7650766,42.296 L88.9490766,61.164 L89.1610766,61.376 C90.7864181,59.5386575 92.8533974,58.1430048 95.3620766,57.189 C97.8707558,56.2349952 100.361731,55.758 102.835077,55.758 C106.509762,55.758 109.795729,56.3763272 112.693077,57.613 C115.590424,58.8496729 118.0284,60.5809889 120.007077,62.807 C121.985753,65.0330111 123.487405,67.6653181 124.512077,70.704 C125.536748,73.7426819 126.049077,77.028649 126.049077,80.562 C126.049077,83.5300148 125.572081,86.5863176 124.618077,89.731 C123.664072,92.8756824 122.144754,95.7376538 120.060077,98.317 C117.9754,100.896346 115.30776,103.016325 112.057077,104.677 C108.806394,106.337675 104.919766,107.168 100.397077,107.168 C96.7930586,107.168 93.454092,106.691005 90.3800766,105.737 C87.3060613,104.782995 84.6030883,103.35201 82.2710766,101.444 C79.939065,99.5359905 78.0840835,97.1863473 76.7060766,94.395 C75.3280697,91.6036527 74.5684107,88.3353521 74.4270766,84.59 L86.5110766,84.59 C86.8644117,88.6180201 88.2423979,91.7096559 90.6450766,93.865 C93.0477553,96.0203441 96.2277235,97.098 100.185077,97.098 C102.729089,97.098 104.884401,96.6740042 106.651077,95.826 C108.417752,94.9779958 109.848738,93.8120074 110.944077,92.328 C112.039415,90.8439926 112.816741,89.1126766 113.276077,87.134 C113.735412,85.1553234 113.965077,83.0353446 113.965077,80.774 C113.965077,78.7246564 113.682413,76.763676 113.117077,74.891 C112.55174,73.018324 111.703749,71.3753404 110.573077,69.962 C109.442404,68.5486596 107.976086,67.4180042 106.174077,66.57 C104.372068,65.7219958 102.269755,65.298 99.8670766,65.298 C97.3230639,65.298 94.9380878,65.7749952 92.7120766,66.729 C90.4860655,67.6830048 88.8784149,69.4673203 87.8890766,72.082 L75.8050766,72.082 L83.7550766,31.484 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-6": {
"title": "$:/core/images/heading-6",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-6 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M112.587077,50.246 C112.304409,47.2073181 111.226753,44.751676 109.354077,42.879 C107.481401,41.006324 104.955093,40.07 101.775077,40.07 C99.584399,40.07 97.6940846,40.4763293 96.1040766,41.289 C94.5140687,42.1016707 93.1714154,43.1793266 92.0760766,44.522 C90.9807378,45.8646734 90.0974133,47.401658 89.4260766,49.133 C88.7547399,50.864342 88.2070787,52.6839905 87.7830766,54.592 C87.3590745,56.5000095 87.0587442,58.390324 86.8820766,60.263 C86.7054091,62.135676 86.5464107,63.8846585 86.4050766,65.51 L86.6170766,65.722 C88.2424181,62.7539852 90.4860623,60.5456739 93.3480766,59.097 C96.2100909,57.6483261 99.3017267,56.924 102.623077,56.924 C106.297762,56.924 109.583729,57.5599936 112.481077,58.832 C115.378424,60.1040064 117.834067,61.8529889 119.848077,64.079 C121.862087,66.3050111 123.399071,68.9373181 124.459077,71.976 C125.519082,75.0146819 126.049077,78.300649 126.049077,81.834 C126.049077,85.438018 125.466082,88.7769846 124.300077,91.851 C123.134071,94.9250154 121.455754,97.6103219 119.265077,99.907 C117.074399,102.203678 114.459758,103.987994 111.421077,105.26 C108.382395,106.532006 105.025762,107.168 101.351077,107.168 C95.9097161,107.168 91.4400941,106.16101 87.9420766,104.147 C84.4440591,102.13299 81.6880867,99.3770175 79.6740766,95.879 C77.6600666,92.3809825 76.2644138,88.2823568 75.4870766,83.583 C74.7097394,78.8836432 74.3210766,73.8133605 74.3210766,68.372 C74.3210766,63.9199777 74.7980719,59.4326893 75.7520766,54.91 C76.7060814,50.3873107 78.278399,46.2710186 80.4690766,42.561 C82.6597542,38.8509815 85.5393921,35.8300117 89.1080766,33.498 C92.6767611,31.1659883 97.0757171,30 102.305077,30 C105.273091,30 108.064397,30.4946617 110.679077,31.484 C113.293756,32.4733383 115.608067,33.8513245 117.622077,35.618 C119.636087,37.3846755 121.27907,39.5046543 122.551077,41.978 C123.823083,44.4513457 124.529743,47.2073181 124.671077,50.246 L112.587077,50.246 Z M100.927077,97.098 C103.117754,97.098 105.025735,96.6563378 106.651077,95.773 C108.276418,94.8896623 109.636738,93.7413404 110.732077,92.328 C111.827415,90.9146596 112.640074,89.271676 113.170077,87.399 C113.700079,85.526324 113.965077,83.6006766 113.965077,81.622 C113.965077,79.6433234 113.700079,77.7353425 113.170077,75.898 C112.640074,74.0606575 111.827415,72.4530069 110.732077,71.075 C109.636738,69.6969931 108.276418,68.5840042 106.651077,67.736 C105.025735,66.8879958 103.117754,66.464 100.927077,66.464 C98.736399,66.464 96.8107516,66.8703293 95.1500766,67.683 C93.4894017,68.4956707 92.0937489,69.5909931 90.9630766,70.969 C89.8324043,72.3470069 88.9844128,73.9546575 88.4190766,75.792 C87.8537405,77.6293425 87.5710766,79.5726564 87.5710766,81.622 C87.5710766,83.6713436 87.8537405,85.6146575 88.4190766,87.452 C88.9844128,89.2893425 89.8324043,90.9323261 90.9630766,92.381 C92.0937489,93.8296739 93.4894017,94.9779958 95.1500766,95.826 C96.8107516,96.6740042 98.736399,97.098 100.927077,97.098 L100.927077,97.098 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</svg>"
},
"$:/core/images/italic": {
"title": "$:/core/images/italic",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-italic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <polygon points=\"66.7114846 0 89.1204482 0 62.4089636 128 40 128\"></polygon>\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/line-width": {
"title": "$:/core/images/line-width",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-line-width tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M128,-97 L112.992786,-97 C112.452362,-97 112,-96.5522847 112,-96 C112,-95.4438648 112.444486,-95 112.992786,-95 L128,-95 L128,-97 Z M128,-78.6794919 L111.216185,-88.3696322 C110.748163,-88.6398444 110.132549,-88.4782926 109.856406,-88 C109.578339,-87.5183728 109.741342,-86.9117318 110.216185,-86.6375814 L128,-76.3700908 L128,-78.6794919 Z M78.6794919,-128 L88.3696322,-111.216185 C88.6437826,-110.741342 88.4816272,-110.134474 88,-109.856406 C87.5217074,-109.580264 86.9077936,-109.748163 86.6375814,-110.216185 L76.3700908,-128 L78.6794919,-128 Z M97,-128 L97,-112.992786 C97,-112.444486 96.5561352,-112 96,-112 C95.4477153,-112 95,-112.452362 95,-112.992786 L95,-128 L97,-128 Z M115.629909,-128 L105.362419,-110.216185 C105.088268,-109.741342 104.481627,-109.578339 104,-109.856406 C103.521707,-110.132549 103.360156,-110.748163 103.630368,-111.216185 L113.320508,-128 L115.629909,-128 Z M128,-113.320508 L111.216185,-103.630368 C110.741342,-103.356217 110.134474,-103.518373 109.856406,-104 C109.580264,-104.478293 109.748163,-105.092206 110.216185,-105.362419 L128,-115.629909 L128,-113.320508 Z M48,-96 C48,-96.5522847 48.4523621,-97 48.9927864,-97 L79.0072136,-97 C79.5555144,-97 80,-96.5561352 80,-96 C80,-95.4477153 79.5476379,-95 79.0072136,-95 L48.9927864,-95 C48.4444856,-95 48,-95.4438648 48,-96 Z M54.4307806,-120 C54.706923,-120.478293 55.3225377,-120.639844 55.7905589,-120.369632 L81.7838153,-105.362419 C82.2586577,-105.088268 82.4216611,-104.481627 82.1435935,-104 C81.8674512,-103.521707 81.2518365,-103.360156 80.7838153,-103.630368 L54.7905589,-118.637581 C54.3157165,-118.911732 54.152713,-119.518373 54.4307806,-120 Z M104,-82.1435935 C104.478293,-82.4197359 105.092206,-82.2518365 105.362419,-81.7838153 L120.369632,-55.7905589 C120.643783,-55.3157165 120.481627,-54.7088482 120,-54.4307806 C119.521707,-54.1546382 118.907794,-54.3225377 118.637581,-54.7905589 L103.630368,-80.7838153 C103.356217,-81.2586577 103.518373,-81.865526 104,-82.1435935 Z M96,-80 C96.5522847,-80 97,-79.5476379 97,-79.0072136 L97,-48.9927864 C97,-48.4444856 96.5561352,-48 96,-48 C95.4477153,-48 95,-48.4523621 95,-48.9927864 L95,-79.0072136 C95,-79.5555144 95.4438648,-80 96,-80 Z M88,-82.1435935 C88.4782926,-81.8674512 88.6398444,-81.2518365 88.3696322,-80.7838153 L73.3624186,-54.7905589 C73.0882682,-54.3157165 72.4816272,-54.152713 72,-54.4307806 C71.5217074,-54.706923 71.3601556,-55.3225377 71.6303678,-55.7905589 L86.6375814,-81.7838153 C86.9117318,-82.2586577 87.5183728,-82.4216611 88,-82.1435935 Z M82.1435935,-88 C82.4197359,-87.5217074 82.2518365,-86.9077936 81.7838153,-86.6375814 L55.7905589,-71.6303678 C55.3157165,-71.3562174 54.7088482,-71.5183728 54.4307806,-72 C54.1546382,-72.4782926 54.3225377,-73.0922064 54.7905589,-73.3624186 L80.7838153,-88.3696322 C81.2586577,-88.6437826 81.865526,-88.4816272 82.1435935,-88 Z M1.30626177e-08,-41.9868843 L15.0170091,-57.9923909 L20.7983821,-52.9749272 L44.7207091,-81.2095939 L73.4260467,-42.1002685 L85.984793,-56.6159488 L104.48741,-34.0310661 L127.969109,-47.4978019 L127.969109,7.99473128e-07 L1.30626177e-08,7.99473128e-07 L1.30626177e-08,-41.9868843 Z M96,-84 C102.627417,-84 108,-89.372583 108,-96 C108,-102.627417 102.627417,-108 96,-108 C89.372583,-108 84,-102.627417 84,-96 C84,-89.372583 89.372583,-84 96,-84 Z\"></path>\n <path d=\"M16,18 L112,18 C113.104569,18 114,17.1045695 114,16 C114,14.8954305 113.104569,14 112,14 L16,14 C14.8954305,14 14,14.8954305 14,16 C14,17.1045695 14.8954305,18 16,18 L16,18 Z M16,35 L112,35 C114.209139,35 116,33.209139 116,31 C116,28.790861 114.209139,27 112,27 L16,27 C13.790861,27 12,28.790861 12,31 C12,33.209139 13.790861,35 16,35 L16,35 Z M16,56 L112,56 C115.313708,56 118,53.3137085 118,50 C118,46.6862915 115.313708,44 112,44 L16,44 C12.6862915,44 10,46.6862915 10,50 C10,53.3137085 12.6862915,56 16,56 L16,56 Z M16,85 L112,85 C117.522847,85 122,80.5228475 122,75 C122,69.4771525 117.522847,65 112,65 L16,65 C10.4771525,65 6,69.4771525 6,75 C6,80.5228475 10.4771525,85 16,85 L16,85 Z M16,128 L112,128 C120.836556,128 128,120.836556 128,112 C128,103.163444 120.836556,96 112,96 L16,96 C7.163444,96 0,103.163444 0,112 C0,120.836556 7.163444,128 16,128 L16,128 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/link": {
"title": "$:/core/images/link",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-link tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M128.719999,57.568543 C130.219553,53.8628171 131.045202,49.8121445 131.045202,45.5685425 C131.045202,27.8915447 116.718329,13.5685425 99.0452364,13.5685425 L67.0451674,13.5685425 C49.3655063,13.5685425 35.0452019,27.8954305 35.0452019,45.5685425 C35.0452019,63.2455403 49.3720745,77.5685425 67.0451674,77.5685425 L99.0452364,77.5685425 C100.406772,77.5685425 101.748384,77.4835732 103.065066,77.3186499 C96.4792444,73.7895096 91.1190212,68.272192 87.7873041,61.5685425 L67.0506214,61.5685425 C58.2110723,61.5685425 51.0452019,54.4070414 51.0452019,45.5685425 C51.0452019,36.7319865 58.2005234,29.5685425 67.0506214,29.5685425 L99.0397824,29.5685425 C107.879331,29.5685425 115.045202,36.7300436 115.045202,45.5685425 C115.045202,48.9465282 113.99957,52.0800164 112.21335,54.6623005 C114.314383,56.4735917 117.050039,57.5685425 120.041423,57.5685425 L128.720003,57.5685425 Z\" transform=\"translate(83.045202, 45.568542) rotate(-225.000000) translate(-83.045202, -45.568542)\"></path>\n <path d=\"M-0.106255113,71.0452019 C-1.60580855,74.7509276 -2.43145751,78.8016001 -2.43145751,83.0452019 C-2.43145751,100.7222 11.8954151,115.045202 29.568508,115.045202 L61.568577,115.045202 C79.2482381,115.045202 93.5685425,100.718314 93.5685425,83.0452019 C93.5685425,65.3682041 79.2416699,51.0452019 61.568577,51.0452019 L29.568508,51.0452019 C28.206973,51.0452019 26.8653616,51.1301711 25.5486799,51.2950943 C32.1345,54.8242347 37.4947231,60.3415524 40.8264403,67.0452019 L61.563123,67.0452019 C70.4026721,67.0452019 77.5685425,74.206703 77.5685425,83.0452019 C77.5685425,91.8817579 70.413221,99.0452019 61.563123,99.0452019 L29.573962,99.0452019 C20.7344129,99.0452019 13.5685425,91.8837008 13.5685425,83.0452019 C13.5685425,79.6672162 14.6141741,76.533728 16.4003949,73.9514439 C14.2993609,72.1401527 11.5637054,71.0452019 8.5723215,71.0452019 L-0.106255113,71.0452019 Z\" transform=\"translate(45.568542, 83.045202) rotate(-225.000000) translate(-45.568542, -83.045202)\"></path>\n </g>\n</svg>"
},
"$:/core/images/list-bullet": {
"title": "$:/core/images/list-bullet",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-list-bullet tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M11.6363636,40.2727273 C18.0629498,40.2727273 23.2727273,35.0629498 23.2727273,28.6363636 C23.2727273,22.2097775 18.0629498,17 11.6363636,17 C5.20977746,17 0,22.2097775 0,28.6363636 C0,35.0629498 5.20977746,40.2727273 11.6363636,40.2727273 Z M11.6363636,75.1818182 C18.0629498,75.1818182 23.2727273,69.9720407 23.2727273,63.5454545 C23.2727273,57.1188684 18.0629498,51.9090909 11.6363636,51.9090909 C5.20977746,51.9090909 0,57.1188684 0,63.5454545 C0,69.9720407 5.20977746,75.1818182 11.6363636,75.1818182 Z M11.6363636,110.090909 C18.0629498,110.090909 23.2727273,104.881132 23.2727273,98.4545455 C23.2727273,92.0279593 18.0629498,86.8181818 11.6363636,86.8181818 C5.20977746,86.8181818 0,92.0279593 0,98.4545455 C0,104.881132 5.20977746,110.090909 11.6363636,110.090909 Z M34.9090909,22.8181818 L128,22.8181818 L128,34.4545455 L34.9090909,34.4545455 L34.9090909,22.8181818 Z M34.9090909,57.7272727 L128,57.7272727 L128,69.3636364 L34.9090909,69.3636364 L34.9090909,57.7272727 Z M34.9090909,92.6363636 L128,92.6363636 L128,104.272727 L34.9090909,104.272727 L34.9090909,92.6363636 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/list-number": {
"title": "$:/core/images/list-number",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-list-number tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M33.8390805,22.3563218 L128,22.3563218 L128,34.1264368 L33.8390805,34.1264368 L33.8390805,22.3563218 Z M33.8390805,57.6666667 L128,57.6666667 L128,69.4367816 L33.8390805,69.4367816 L33.8390805,57.6666667 Z M33.8390805,92.9770115 L128,92.9770115 L128,104.747126 L33.8390805,104.747126 L33.8390805,92.9770115 Z M0.379509711,42.6307008 L0.379509711,40.4082314 L1.37821948,40.4082314 C2.20382368,40.4082314 2.82301754,40.268077 3.23581964,39.9877642 C3.64862174,39.7074513 3.85501969,39.0400498 3.85501969,37.9855395 L3.85501969,22.7686318 C3.85501969,21.3270228 3.66193774,20.4327047 3.27576803,20.0856507 C2.88959832,19.7385967 1.79768657,19.5650723 0,19.5650723 L0,17.4226919 C3.50215975,17.2758613 6.25191314,16.4683055 8.24934266,15 L10.3666074,15 L10.3666074,37.865406 C10.3666074,38.786434 10.5164123,39.4404875 10.8160268,39.8275862 C11.1156412,40.2146849 11.764796,40.4082314 12.7635108,40.4082314 L13.7622206,40.4082314 L13.7622206,42.6307008 L0.379509711,42.6307008 Z M0.0798967812,77.9873934 L0.0798967812,76.0852799 C7.27064304,69.5312983 10.8659622,63.5046623 10.8659622,58.005191 C10.8659622,56.4434479 10.5397203,55.195407 9.88722667,54.2610308 C9.23473303,53.3266546 8.36253522,52.8594735 7.27060709,52.8594735 C6.3784219,52.8594735 5.61608107,53.1764892 4.98356173,53.8105302 C4.35104238,54.4445712 4.03478745,55.1753759 4.03478745,56.0029663 C4.03478745,56.9773871 4.28113339,57.8316611 4.77383268,58.5658139 C4.88036225,58.7259926 4.93362624,58.8461249 4.93362624,58.9262143 C4.93362624,59.0730449 4.77383427,59.2065252 4.45424555,59.3266593 C4.2411864,59.4067486 3.70188852,59.6336652 2.83633573,60.0074156 C1.99741533,60.3811661 1.47809145,60.5680386 1.2783485,60.5680386 C1.03865696,60.5680386 0.765679018,60.1976307 0.459406492,59.4568039 C0.153133966,58.715977 0,57.9184322 0,57.0641453 C0,55.1153036 0.848894811,53.5202138 2.5467099,52.2788283 C4.24452499,51.0374428 6.34512352,50.4167594 8.84856852,50.4167594 C11.3120649,50.4167594 13.3793735,51.0874979 15.0505562,52.4289952 C16.7217389,53.7704924 17.5573177,55.5224215 17.5573177,57.684835 C17.5573177,58.9662652 17.2743527,60.2076321 16.7084144,61.4089729 C16.142476,62.6103138 14.7875733,64.4623531 12.6436656,66.9651465 C10.4997579,69.4679398 8.40914641,71.7804862 6.3717683,73.902855 L17.8169822,73.902855 L16.7982982,79.6292176 L14.6810335,79.6292176 C14.7609307,79.3489048 14.8008787,79.0952922 14.8008787,78.8683723 C14.8008787,78.4812736 14.7010087,78.237672 14.5012658,78.1375603 C14.3015228,78.0374485 13.9020429,77.9873934 13.3028141,77.9873934 L0.0798967812,77.9873934 Z M12.2042333,97.1935484 C13.9486551,97.2335931 15.4400468,97.8309175 16.6784531,98.9855395 C17.9168594,100.140162 18.5360532,101.75861 18.5360532,103.840934 C18.5360532,106.830938 17.4041935,109.233584 15.14044,111.048943 C12.8766866,112.864303 10.1402492,113.771969 6.93104577,113.771969 C4.92030005,113.771969 3.26245842,113.388213 1.95747114,112.62069 C0.652483855,111.853166 0,110.848727 0,109.607341 C0,108.833144 0.26964894,108.209124 0.808954909,107.735261 C1.34826088,107.261399 1.93749375,107.024472 2.57667119,107.024472 C3.21584864,107.024472 3.73850152,107.224692 4.14464552,107.625139 C4.55078953,108.025586 4.92696644,108.67964 5.27318756,109.587319 C5.73925445,110.855401 6.51158227,111.489433 7.59019421,111.489433 C8.85523291,111.489433 9.87723568,111.012241 10.6562332,110.057842 C11.4352307,109.103444 11.8247236,107.371536 11.8247236,104.862069 C11.8247236,103.153495 11.7048796,101.838714 11.4651881,100.917686 C11.2254966,99.9966584 10.6728827,99.5361513 9.80732989,99.5361513 C9.22141723,99.5361513 8.62219737,99.843156 8.00965231,100.457175 C7.51695303,100.951059 7.07752513,101.197998 6.69135542,101.197998 C6.3584505,101.197998 6.08880156,101.051169 5.88240051,100.757508 C5.67599946,100.463847 5.57280049,100.183539 5.57280049,99.916574 C5.57280049,99.5962164 5.67599946,99.3225818 5.88240051,99.0956618 C6.08880156,98.8687419 6.57150646,98.5016711 7.33052967,97.9944383 C10.2068282,96.0722929 11.6449559,93.9766521 11.6449559,91.7074527 C11.6449559,90.5194601 11.3386879,89.615131 10.7261429,88.9944383 C10.1135978,88.3737455 9.37455999,88.0634038 8.5090072,88.0634038 C7.71003539,88.0634038 6.98431355,88.3270274 6.33181991,88.8542825 C5.67932627,89.3815377 5.35308434,90.0122321 5.35308434,90.7463849 C5.35308434,91.3871 5.60608828,91.9810874 6.11210376,92.5283648 C6.28521432,92.7285883 6.3717683,92.8954387 6.3717683,93.028921 C6.3717683,93.1490551 5.80250943,93.4560598 4.6639746,93.9499444 C3.52543978,94.4438289 2.80970494,94.6907675 2.51674861,94.6907675 C2.10394651,94.6907675 1.76771758,94.3570667 1.50805174,93.6896552 C1.24838591,93.0222436 1.11855494,92.4082342 1.11855494,91.8476085 C1.11855494,90.0989901 2.04734573,88.6240327 3.90495518,87.4226919 C5.76256463,86.2213511 7.86982116,85.6206897 10.226788,85.6206897 C12.2907985,85.6206897 14.0784711,86.0678487 15.5898594,86.9621802 C17.1012478,87.8565117 17.8569306,89.0778566 17.8569306,90.6262514 C17.8569306,91.987771 17.2876717,93.2491599 16.1491369,94.4104561 C15.0106021,95.5717522 13.6956474,96.4994404 12.2042333,97.1935484 Z\"></path>\n </g>\n</svg>"
},
"$:/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/mono-block": {
"title": "$:/core/images/mono-block",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-mono-block tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M23.9653488,32.9670593 L24.3217888,32.9670593 C25.0766067,32.9670593 25.6497006,33.1592554 26.0410876,33.5436534 C26.4324747,33.9280514 26.6281653,34.4906619 26.6281653,35.2315017 C26.6281653,36.0562101 26.4219913,36.6502709 26.009637,37.0137017 C25.5972828,37.3771326 24.9158602,37.5588453 23.9653488,37.5588453 L17.6542639,37.5588453 C16.6897744,37.5588453 16.0048573,37.380627 15.5994921,37.0241852 C15.1941269,36.6677435 14.9914474,36.0701882 14.9914474,35.2315017 C14.9914474,34.4207713 15.1941269,33.8406885 15.5994921,33.4912358 C16.0048573,33.141783 16.6897744,32.9670593 17.6542639,32.9670593 L18.388111,32.9670593 L17.5284616,30.5139133 L8.47069195,30.5139133 L7.5691084,32.9670593 L8.30295547,32.9670593 C9.25346691,32.9670593 9.93488953,33.1452775 10.3472438,33.5017193 C10.759598,33.8581611 10.965772,34.4347494 10.965772,35.2315017 C10.965772,36.0562101 10.759598,36.6502709 10.3472438,37.0137017 C9.93488953,37.3771326 9.25346691,37.5588453 8.30295547,37.5588453 L2.89345418,37.5588453 C1.92896463,37.5588453 1.24404754,37.3771326 0.838682371,37.0137017 C0.433317198,36.6502709 0.230637652,36.0562101 0.230637652,35.2315017 C0.230637652,34.4906619 0.426328248,33.9280514 0.817715312,33.5436534 C1.20910238,33.1592554 1.78219626,32.9670593 2.53701417,32.9670593 L2.89345418,32.9670593 L8.51262607,17.3256331 L6.83526132,17.3256331 C5.88474988,17.3256331 5.20332727,17.1439204 4.79097304,16.7804895 C4.37861882,16.4170587 4.1724448,15.8299869 4.1724448,15.0192565 C4.1724448,14.1945481 4.37861882,13.6004873 4.79097304,13.2370565 C5.20332727,12.8736257 5.88474988,12.691913 6.83526132,12.691913 L14.6979086,12.691913 C15.9419603,12.691913 16.815579,13.3628521 17.318791,14.7047506 L17.318791,14.7676518 L23.9653488,32.9670593 Z M12.9786097,17.3256331 L9.9383861,26.1737321 L16.0188333,26.1737321 L12.9786097,17.3256331 Z M35.3809383,26.6979086 L35.3809383,33.0928616 L38.5259972,33.0928616 C40.7485166,33.0928616 42.3140414,32.8482484 43.2226185,32.3590146 C44.1311956,31.8697807 44.5854773,31.0520736 44.5854773,29.9058686 C44.5854773,28.7456855 44.1521624,27.9209895 43.2855197,27.4317556 C42.4188769,26.9425218 40.9022748,26.6979086 38.7356678,26.6979086 L35.3809383,26.6979086 Z M46.0741385,24.370565 C47.5977525,24.9296893 48.7159844,25.6949794 49.428868,26.666458 C50.1417516,27.6379366 50.498188,28.8784752 50.498188,30.388111 C50.498188,31.6601189 50.1906743,32.8202846 49.5756374,33.8686428 C48.9606006,34.917001 48.0799929,35.7766419 46.933788,36.4475911 C46.2628387,36.8389782 45.5115266,37.1220307 44.6798291,37.296757 C43.8481316,37.4714834 42.6704935,37.5588453 41.1468796,37.5588453 L39.3856466,37.5588453 L30.2020747,37.5588453 C29.2795194,37.5588453 28.6190637,37.3771326 28.2206876,37.0137017 C27.8223114,36.6502709 27.6231264,36.0562101 27.6231264,35.2315017 C27.6231264,34.4906619 27.811828,33.9280514 28.189237,33.5436534 C28.5666459,33.1592554 29.118773,32.9670593 29.8456347,32.9670593 L30.2020747,32.9670593 L30.2020747,17.3256331 L29.8456347,17.3256331 C29.118773,17.3256331 28.5666459,17.1299425 28.189237,16.7385554 C27.811828,16.3471683 27.6231264,15.7740744 27.6231264,15.0192565 C27.6231264,14.2085262 27.8258059,13.6179599 28.2311711,13.24754 C28.6365363,12.8771201 29.2934976,12.691913 30.2020747,12.691913 L39.8469219,12.691913 C42.796303,12.691913 45.0362615,13.2650068 46.5668644,14.4112118 C48.0974674,15.5574168 48.8627574,17.2347648 48.8627574,19.443306 C48.8627574,20.5335986 48.6286276,21.4945792 48.1603609,22.3262767 C47.6920943,23.1579742 46.9966938,23.8393968 46.0741385,24.370565 L46.0741385,24.370565 Z M35.3809383,17.1998307 L35.3809383,22.4835296 L38.2114913,22.4835296 C39.9307988,22.4835296 41.1433816,22.2808501 41.8492761,21.8754849 C42.5551706,21.4701197 42.9081126,20.7852027 42.9081126,19.8207131 C42.9081126,18.912136 42.5901154,18.2481858 41.9541114,17.8288425 C41.3181074,17.4094992 40.2872373,17.1998307 38.8614701,17.1998307 L35.3809383,17.1998307 Z M71.244119,13.3838259 C71.5236812,12.880614 71.8102281,12.5241775 72.1037684,12.3145059 C72.3973087,12.1048342 72.7677231,12 73.2150226,12 C73.8999499,12 74.3856819,12.1817127 74.6722332,12.5451435 C74.9587844,12.9085744 75.1020579,13.5305909 75.1020579,14.4112118 L75.143992,19.8626472 C75.143992,20.8271368 74.9867406,21.4771091 74.6722332,21.8125837 C74.3577257,22.1480584 73.7881263,22.3157932 72.9634178,22.3157932 C72.3763372,22.3157932 71.92555,22.1760142 71.6110425,21.896452 C71.2965351,21.6168898 71.0274605,21.0997075 70.8038107,20.3448896 C70.4403799,19.0169692 69.8602971,18.0629775 69.0635448,17.482886 C68.2667926,16.9027945 67.1625385,16.612753 65.7507494,16.612753 C63.5981206,16.612753 61.9487284,17.3396038 60.8025235,18.7933272 C59.6563185,20.2470506 59.0832246,22.3507245 59.0832246,25.104412 C59.0832246,27.8441215 59.6633074,29.9477954 60.8234905,31.4154969 C61.9836736,32.8831984 63.6400547,33.6170381 65.7926836,33.6170381 C67.2603851,33.6170381 68.878327,33.1278116 70.6465578,32.149344 C72.4147886,31.1708763 73.5295261,30.6816498 73.9908037,30.6816498 C74.53595,30.6816498 74.9937262,30.9122852 75.3641461,31.3735628 C75.734566,31.8348404 75.9197732,32.4079343 75.9197732,33.0928616 C75.9197732,34.3229353 74.836486,35.4831009 72.669879,36.5733935 C70.5032721,37.663686 68.0641285,38.2088241 65.3523753,38.2088241 C61.6901107,38.2088241 58.7267959,36.9997358 56.4623422,34.5815228 C54.1978885,32.1633099 53.0656786,29.0043046 53.0656786,25.104412 C53.0656786,21.3443006 54.2118664,18.22024 56.5042763,15.7321366 C58.7966863,13.2440331 61.7040894,12 65.226573,12 C66.2190187,12 67.1974717,12.1118232 68.1619613,12.3354729 C69.1264508,12.5591227 70.1538264,12.9085702 71.244119,13.3838259 L71.244119,13.3838259 Z M81.4645862,32.9670593 L81.4645862,17.3256331 L81.1081461,17.3256331 C80.3533282,17.3256331 79.7802344,17.1299425 79.3888473,16.7385554 C78.9974602,16.3471683 78.8017696,15.7740744 78.8017696,15.0192565 C78.8017696,14.2085262 79.0114381,13.6179599 79.4307814,13.24754 C79.8501247,12.8771201 80.5280528,12.691913 81.4645862,12.691913 L85.4063933,12.691913 L86.6434498,12.691913 C89.5648747,12.691913 91.7034933,12.8177141 93.0593699,13.06932 C94.4152465,13.320926 95.5684233,13.740263 96.5189347,14.3273436 C98.210286,15.3337675 99.5067362,16.7699967 100.408324,18.6360743 C101.309912,20.5021519 101.7607,22.6582429 101.7607,25.104412 C101.7607,27.6903623 101.247012,29.9512876 100.219621,31.8872557 C99.1922296,33.8232239 97.7350336,35.2874089 95.8479888,36.2798546 C94.9953241,36.7271541 93.9959043,37.0521403 92.8496993,37.2548229 C91.7034944,37.4575055 89.9981906,37.5588453 87.7337369,37.5588453 L85.4063933,37.5588453 L81.4645862,37.5588453 C80.5000966,37.5588453 79.8151795,37.380627 79.4098143,37.0241852 C79.0044492,36.6677435 78.8017696,36.0701882 78.8017696,35.2315017 C78.8017696,34.4906619 78.9974602,33.9280514 79.3888473,33.5436534 C79.7802344,33.1592554 80.3533282,32.9670593 81.1081461,32.9670593 L81.4645862,32.9670593 Z M86.8740874,17.2417648 L86.8740874,32.9670593 L88.0692098,32.9670593 C90.7110725,32.9670593 92.6609895,32.3205814 93.9190194,31.0276063 C95.1770492,29.7346312 95.8060547,27.7462749 95.8060547,25.0624779 C95.8060547,22.4206153 95.1665658,20.4497314 93.8875688,19.1497672 C92.6085718,17.849803 90.6831161,17.1998307 88.1111439,17.1998307 C87.7756693,17.1998307 87.5205727,17.2033252 87.3458463,17.2103142 C87.1711199,17.2173033 87.0138685,17.2277867 86.8740874,17.2417648 L86.8740874,17.2417648 Z M121.94052,17.1159625 L112.190837,17.1159625 L112.190837,22.4835296 L115.88104,22.4835296 L115.88104,22.2319249 C115.88104,21.4351727 116.055763,20.841112 116.405216,20.4497249 C116.754669,20.0583378 117.285829,19.8626472 117.998713,19.8626472 C118.627728,19.8626472 119.141415,20.0408655 119.539792,20.3973072 C119.938168,20.753749 120.137353,21.2045363 120.137353,21.7496826 C120.137353,21.7776388 120.144342,21.8684951 120.15832,22.0222543 C120.172298,22.1760135 120.179287,22.3297704 120.179287,22.4835296 L120.179287,26.8237109 C120.179287,27.7602442 120.011552,28.4311834 119.676077,28.8365486 C119.340603,29.2419138 118.795465,29.4445933 118.040647,29.4445933 C117.327763,29.4445933 116.789614,29.2558917 116.426183,28.8784827 C116.062752,28.5010738 115.88104,27.9419578 115.88104,27.201118 L115.88104,26.8237109 L112.190837,26.8237109 L112.190837,33.0928616 L121.94052,33.0928616 L121.94052,30.5977816 C121.94052,29.6612482 122.118738,28.9903091 122.47518,28.5849439 C122.831622,28.1795787 123.415199,27.9768992 124.225929,27.9768992 C125.022682,27.9768992 125.592281,28.1760842 125.934745,28.5744604 C126.277208,28.9728365 126.448438,29.6472701 126.448438,30.5977816 L126.448438,35.6718099 C126.448438,36.4266278 126.30167,36.9298322 126.008129,37.1814382 C125.714589,37.4330442 125.134506,37.5588453 124.267863,37.5588453 L107.095842,37.5588453 C106.173287,37.5588453 105.512831,37.3771326 105.114455,37.0137017 C104.716079,36.6502709 104.516894,36.0562101 104.516894,35.2315017 C104.516894,34.4906619 104.705595,33.9280514 105.083004,33.5436534 C105.460413,33.1592554 106.01254,32.9670593 106.739402,32.9670593 L107.095842,32.9670593 L107.095842,17.3256331 L106.739402,17.3256331 C106.026518,17.3256331 105.477886,17.126448 105.093488,16.7280719 C104.70909,16.3296957 104.516894,15.7600963 104.516894,15.0192565 C104.516894,14.2085262 104.719573,13.6179599 105.124938,13.24754 C105.530304,12.8771201 106.187265,12.691913 107.095842,12.691913 L124.267863,12.691913 C125.120528,12.691913 125.697116,12.8212085 125.997646,13.0798036 C126.298175,13.3383986 126.448438,13.8520864 126.448438,14.6208824 L126.448438,19.3175037 C126.448438,20.2680151 126.273714,20.9494377 125.924261,21.361792 C125.574808,21.7741462 125.008703,21.9803202 124.225929,21.9803202 C123.415199,21.9803202 122.831622,21.7706517 122.47518,21.3513084 C122.118738,20.9319652 121.94052,20.254037 121.94052,19.3175037 L121.94052,17.1159625 Z M19.7719369,47.6405477 C20.037521,47.1373358 20.3205734,46.7808993 20.6211028,46.5712277 C20.9216322,46.361556 21.295541,46.2567218 21.7428405,46.2567218 C22.4277678,46.2567218 22.9134998,46.4384345 23.2000511,46.8018653 C23.4866023,47.1652962 23.6298758,47.7873127 23.6298758,48.6679336 L23.6718099,54.119369 C23.6718099,55.0838586 23.5145586,55.7338309 23.2000511,56.0693055 C22.8855436,56.4047802 22.3089553,56.572515 21.4702687,56.572515 C20.8831881,56.572515 20.4254119,56.4292415 20.0969263,56.1426902 C19.7684407,55.856139 19.4993662,55.3424512 19.2896945,54.6016114 C18.9122856,53.2597129 18.3322027,52.3022267 17.5494286,51.7291243 C16.7666545,51.1560218 15.6693894,50.8694748 14.2576003,50.8694748 C12.1049715,50.8694748 10.4590738,51.5963256 9.31985785,53.050049 C8.18064193,54.5037724 7.61104252,56.6074463 7.61104252,59.3611338 C7.61104252,62.1148214 8.20859773,64.2429566 9.40372609,65.7456034 C10.5988544,67.2482501 12.2936748,67.9995623 14.488238,67.9995623 C14.9914499,67.9995623 15.5645438,67.9401562 16.2075368,67.8213423 C16.8505299,67.7025283 17.6053364,67.5173212 18.4719792,67.2657152 L18.4719792,63.9529198 L16.1027015,63.9529198 C15.1521901,63.9529198 14.4777564,63.7781961 14.0793803,63.4287433 C13.6810042,63.0792906 13.4818191,62.4992078 13.4818191,61.6884774 C13.4818191,60.8497908 13.6810042,60.2522356 14.0793803,59.8957938 C14.4777564,59.5393521 15.1521901,59.3611338 16.1027015,59.3611338 L23.6718099,59.3611338 C24.6502776,59.3611338 25.3386891,59.5358576 25.7370653,59.8853103 C26.1354414,60.2347631 26.3346265,60.8218348 26.3346265,61.6465433 C26.3346265,62.3873831 26.1354414,62.9569825 25.7370653,63.3553586 C25.3386891,63.7537347 24.7621008,63.9529198 24.0072829,63.9529198 L23.6718099,63.9529198 L23.6718099,68.9430799 L23.6718099,69.1946846 C23.6718099,69.6419841 23.6228873,69.9529924 23.5250405,70.1277188 C23.4271937,70.3024451 23.2315031,70.4806634 22.9379628,70.6623788 C22.1412106,71.1376345 20.8762107,71.5569715 19.1429251,71.9204023 C17.4096396,72.2838332 15.6554131,72.4655459 13.8801932,72.4655459 C10.2179286,72.4655459 7.25461383,71.2564576 4.99016011,68.8382446 C2.72570638,66.4200317 1.59349651,63.2610264 1.59349651,59.3611338 C1.59349651,55.6010224 2.73968428,52.4769618 5.03209423,49.9888583 C7.32450417,47.5007549 10.2319073,46.2567218 13.7543909,46.2567218 C14.7328585,46.2567218 15.7078171,46.368545 16.6792957,46.5921947 C17.6507743,46.8158445 18.6816444,47.165292 19.7719369,47.6405477 L19.7719369,47.6405477 Z M35.611576,51.5823548 L35.611576,56.4047785 L42.4678043,56.4047785 L42.4678043,51.5823548 L42.1323314,51.5823548 C41.3775135,51.5823548 40.8009251,51.3866642 40.402549,50.9952772 C40.0041729,50.6038901 39.8049878,50.0307962 39.8049878,49.2759783 C39.8049878,48.4512699 40.0111618,47.8572091 40.4235161,47.4937783 C40.8358703,47.1303474 41.5172929,46.9486347 42.4678043,46.9486347 L47.8773056,46.9486347 C48.8278171,46.9486347 49.5022507,47.1303474 49.9006269,47.4937783 C50.299003,47.8572091 50.498188,48.4512699 50.498188,49.2759783 C50.498188,50.0307962 50.3059919,50.6038901 49.9215939,50.9952772 C49.5371959,51.3866642 48.9745854,51.5823548 48.2337456,51.5823548 L47.8773056,51.5823548 L47.8773056,67.2237811 L48.2337456,67.2237811 C48.9885636,67.2237811 49.5616574,67.4159772 49.9530445,67.8003752 C50.3444316,68.1847732 50.5401222,68.7473837 50.5401222,69.4882235 C50.5401222,70.3129319 50.3374426,70.9069927 49.9320774,71.2704235 C49.5267123,71.6338543 48.8417952,71.815567 47.8773056,71.815567 L42.4678043,71.815567 C41.5033148,71.815567 40.8183977,71.6373488 40.4130325,71.280907 C40.0076674,70.9244652 39.8049878,70.32691 39.8049878,69.4882235 C39.8049878,68.7473837 40.0041729,68.1847732 40.402549,67.8003752 C40.8009251,67.4159772 41.3775135,67.2237811 42.1323314,67.2237811 L42.4678043,67.2237811 L42.4678043,61.0384986 L35.611576,61.0384986 L35.611576,67.2237811 L35.9470489,67.2237811 C36.7018668,67.2237811 37.2784552,67.4159772 37.6768313,67.8003752 C38.0752074,68.1847732 38.2743925,68.7473837 38.2743925,69.4882235 C38.2743925,70.3129319 38.0682185,70.9069927 37.6558642,71.2704235 C37.24351,71.6338543 36.5620874,71.815567 35.611576,71.815567 L30.2020747,71.815567 C29.2375851,71.815567 28.552668,71.6373488 28.1473029,71.280907 C27.7419377,70.9244652 27.5392581,70.32691 27.5392581,69.4882235 C27.5392581,68.7473837 27.7349487,68.1847732 28.1263358,67.8003752 C28.5177229,67.4159772 29.0908168,67.2237811 29.8456347,67.2237811 L30.2020747,67.2237811 L30.2020747,51.5823548 L29.8456347,51.5823548 C29.1047949,51.5823548 28.5421844,51.3866642 28.1577864,50.9952772 C27.7733884,50.6038901 27.5811923,50.0307962 27.5811923,49.2759783 C27.5811923,48.4512699 27.7803773,47.8572091 28.1787534,47.4937783 C28.5771296,47.1303474 29.2515632,46.9486347 30.2020747,46.9486347 L35.611576,46.9486347 C36.5481093,46.9486347 37.2260374,47.1303474 37.6453807,47.4937783 C38.064724,47.8572091 38.2743925,48.4512699 38.2743925,49.2759783 C38.2743925,50.0307962 38.0752074,50.6038901 37.6768313,50.9952772 C37.2784552,51.3866642 36.7018668,51.5823548 35.9470489,51.5823548 L35.611576,51.5823548 Z M67.365213,51.5823548 L67.365213,67.2237811 L70.887679,67.2237811 C71.8381904,67.2237811 72.519613,67.4019993 72.9319673,67.7584411 C73.3443215,68.1148829 73.5504955,68.6914712 73.5504955,69.4882235 C73.5504955,70.2989538 73.340827,70.8895201 72.9214837,71.25994 C72.5021404,71.6303599 71.8242123,71.815567 70.887679,71.815567 L58.4332458,71.815567 C57.4827343,71.815567 56.8013117,71.6338543 56.3889575,71.2704235 C55.9766033,70.9069927 55.7704292,70.3129319 55.7704292,69.4882235 C55.7704292,68.6774931 55.9731088,68.0974103 56.378474,67.7479575 C56.7838391,67.3985048 57.4687562,67.2237811 58.4332458,67.2237811 L61.9557117,67.2237811 L61.9557117,51.5823548 L58.4332458,51.5823548 C57.4827343,51.5823548 56.8013117,51.4006421 56.3889575,51.0372113 C55.9766033,50.6737805 55.7704292,50.0867087 55.7704292,49.2759783 C55.7704292,48.4512699 55.9731088,47.8641981 56.378474,47.5147453 C56.7838391,47.1652926 57.4687562,46.9905689 58.4332458,46.9905689 L70.887679,46.9905689 C71.8801247,46.9905689 72.5720308,47.1652926 72.9634178,47.5147453 C73.3548049,47.8641981 73.5504955,48.4512699 73.5504955,49.2759783 C73.5504955,50.0867087 73.347816,50.6737805 72.9424508,51.0372113 C72.5370856,51.4006421 71.8521685,51.5823548 70.887679,51.5823548 L67.365213,51.5823548 Z M97.8608265,51.5823548 L97.8608265,63.1771386 L97.8608265,63.5755127 C97.8608265,65.4485794 97.7385199,66.8044357 97.493903,67.6431222 C97.2492861,68.4818088 96.8404325,69.2296264 96.26733,69.8865976 C95.5264902,70.7392623 94.4991146,71.3822457 93.1851723,71.815567 C91.87123,72.2488884 90.2917273,72.4655459 88.4466169,72.4655459 C87.1466527,72.4655459 85.8921362,72.3397448 84.6830298,72.0881388 C83.4739233,71.8365328 82.3102631,71.4591296 81.1920144,70.9559176 C80.5769776,70.6763554 80.175113,70.31293 79.9864085,69.8656305 C79.797704,69.418331 79.7033532,68.6914802 79.7033532,67.6850564 L79.7033532,63.3658422 C79.7033532,62.1637247 79.8780769,61.3250508 80.2275297,60.849795 C80.5769824,60.3745393 81.185021,60.136915 82.0516638,60.136915 C83.2957156,60.136915 83.9806326,61.0524675 84.1064356,62.8835998 C84.1204137,63.2050963 84.1413806,63.4497096 84.1693368,63.6174469 C84.3370741,65.2389076 84.7144774,66.3466561 85.301558,66.9407258 C85.8886386,67.5347954 86.8251579,67.8318258 88.1111439,67.8318258 C89.7046484,67.8318258 90.8263749,67.4089943 91.476357,66.5633187 C92.126339,65.7176431 92.4513252,64.1765796 92.4513252,61.9400821 L92.4513252,51.5823548 L88.9288593,51.5823548 C87.9783478,51.5823548 87.2969252,51.4006421 86.884571,51.0372113 C86.4722168,50.6737805 86.2660427,50.0867087 86.2660427,49.2759783 C86.2660427,48.4512699 86.4652278,47.8641981 86.8636039,47.5147453 C87.26198,47.1652926 87.9503916,46.9905689 88.9288593,46.9905689 L99.6220595,46.9905689 C100.600527,46.9905689 101.288939,47.1652926 101.687315,47.5147453 C102.085691,47.8641981 102.284876,48.4512699 102.284876,49.2759783 C102.284876,50.0867087 102.078702,50.6737805 101.666348,51.0372113 C101.253994,51.4006421 100.572571,51.5823548 99.6220595,51.5823548 L97.8608265,51.5823548 Z M112.505343,51.5823548 L112.505343,57.9353738 L118.984165,51.4565525 C118.257303,51.3726838 117.747109,51.1665098 117.453569,50.8380242 C117.160029,50.5095387 117.013261,49.9888619 117.013261,49.2759783 C117.013261,48.4512699 117.212446,47.8572091 117.610822,47.4937783 C118.009198,47.1303474 118.683632,46.9486347 119.634143,46.9486347 L124.771073,46.9486347 C125.721584,46.9486347 126.396018,47.1303474 126.794394,47.4937783 C127.19277,47.8572091 127.391955,48.4512699 127.391955,49.2759783 C127.391955,50.0447743 127.19277,50.6213627 126.794394,51.0057607 C126.396018,51.3901587 125.812441,51.5823548 125.043645,51.5823548 L124.561402,51.5823548 L118.459988,57.641835 C119.592215,58.4805215 120.626579,59.5812811 121.563113,60.9441468 C122.499646,62.3070125 123.596911,64.400203 124.854941,67.2237811 L125.127513,67.2237811 L125.546854,67.2237811 C126.371563,67.2237811 126.98659,67.4124827 127.391955,67.7898917 C127.79732,68.1673006 128,68.7334056 128,69.4882235 C128,70.3129319 127.793826,70.9069927 127.381472,71.2704235 C126.969118,71.6338543 126.287695,71.815567 125.337183,71.815567 L122.758235,71.815567 C121.626008,71.815567 120.710456,71.0537715 120.01155,69.5301576 C119.885747,69.2505954 119.787902,69.026949 119.718012,68.8592117 C118.795456,66.9022764 117.949793,65.3926632 117.180997,64.3303269 C116.412201,63.2679906 115.510627,62.2965265 114.476247,61.4159056 L112.505343,63.302941 L112.505343,67.2237811 L112.840816,67.2237811 C113.595634,67.2237811 114.172222,67.4159772 114.570599,67.8003752 C114.968975,68.1847732 115.16816,68.7473837 115.16816,69.4882235 C115.16816,70.3129319 114.961986,70.9069927 114.549631,71.2704235 C114.137277,71.6338543 113.455855,71.815567 112.505343,71.815567 L107.095842,71.815567 C106.131352,71.815567 105.446435,71.6373488 105.04107,71.280907 C104.635705,70.9244652 104.433025,70.32691 104.433025,69.4882235 C104.433025,68.7473837 104.628716,68.1847732 105.020103,67.8003752 C105.41149,67.4159772 105.984584,67.2237811 106.739402,67.2237811 L107.095842,67.2237811 L107.095842,51.5823548 L106.739402,51.5823548 C105.998562,51.5823548 105.435952,51.3866642 105.051554,50.9952772 C104.667156,50.6038901 104.474959,50.0307962 104.474959,49.2759783 C104.474959,48.4512699 104.674145,47.8572091 105.072521,47.4937783 C105.470897,47.1303474 106.14533,46.9486347 107.095842,46.9486347 L112.505343,46.9486347 C113.441877,46.9486347 114.119805,47.1303474 114.539148,47.4937783 C114.958491,47.8572091 115.16816,48.4512699 115.16816,49.2759783 C115.16816,50.0307962 114.968975,50.6038901 114.570599,50.9952772 C114.172222,51.3866642 113.595634,51.5823548 112.840816,51.5823548 L112.505343,51.5823548 Z M13.439885,96.325622 L17.4445933,84.4372993 C17.6961993,83.6545252 18.0456468,83.0849258 18.4929463,82.728484 C18.9402458,82.3720422 19.5343065,82.193824 20.2751463,82.193824 L23.5460076,82.193824 C24.496519,82.193824 25.1779416,82.3755367 25.5902958,82.7389675 C26.0026501,83.1023984 26.2088241,83.6964591 26.2088241,84.5211676 C26.2088241,85.2759855 26.009639,85.8490794 25.6112629,86.2404664 C25.2128868,86.6318535 24.6362984,86.8275441 23.8814805,86.8275441 L23.5460076,86.8275441 L24.1330852,102.46897 L24.4895252,102.46897 C25.2443431,102.46897 25.8104481,102.661166 26.187857,103.045564 C26.565266,103.429962 26.7539676,103.992573 26.7539676,104.733413 C26.7539676,105.558121 26.5547826,106.152182 26.1564064,106.515613 C25.7580303,106.879044 25.0835967,107.060756 24.1330852,107.060756 L19.4154969,107.060756 C18.4649855,107.060756 17.7905518,106.882538 17.3921757,106.526096 C16.9937996,106.169654 16.7946145,105.572099 16.7946145,104.733413 C16.7946145,103.992573 16.9868106,103.429962 17.3712086,103.045564 C17.7556066,102.661166 18.325206,102.46897 19.0800239,102.46897 L19.4154969,102.46897 L19.1219581,89.6790642 L16.0607674,99.1981091 C15.8371177,99.9109927 15.5191204,100.42468 15.1067662,100.739188 C14.694412,101.053695 14.1248126,101.210947 13.3979509,101.210947 C12.6710892,101.210947 12.0945008,101.053695 11.6681685,100.739188 C11.2418362,100.42468 10.91685,99.9109927 10.6932002,99.1981091 L7.65297664,89.6790642 L7.35943781,102.46897 L7.69491075,102.46897 C8.44972866,102.46897 9.01932808,102.661166 9.40372609,103.045564 C9.78812409,103.429962 9.98032022,103.992573 9.98032022,104.733413 C9.98032022,105.558121 9.77764067,106.152182 9.3722755,106.515613 C8.96691032,106.879044 8.29597114,107.060756 7.35943781,107.060756 L2.62088241,107.060756 C1.68434908,107.060756 1.01340989,106.879044 0.608044719,106.515613 C0.202679546,106.152182 0,105.558121 0,104.733413 C0,103.992573 0.192196121,103.429962 0.57659413,103.045564 C0.960992139,102.661166 1.53059155,102.46897 2.28540946,102.46897 L2.62088241,102.46897 L3.22892713,86.8275441 L2.89345418,86.8275441 C2.13863627,86.8275441 1.56204791,86.6318535 1.16367179,86.2404664 C0.765295672,85.8490794 0.5661106,85.2759855 0.5661106,84.5211676 C0.5661106,83.6964591 0.772284622,83.1023984 1.18463885,82.7389675 C1.59699308,82.3755367 2.27841569,82.193824 3.22892713,82.193824 L6.49978838,82.193824 C7.22665007,82.193824 7.81022738,82.3685477 8.25053783,82.7180005 C8.69084827,83.0674532 9.05077919,83.6405471 9.33034138,84.4372993 L13.439885,96.325622 Z M43.8935644,98.3803938 L43.8935644,86.8275441 L42.7403761,86.8275441 C41.8178209,86.8275441 41.1573651,86.6458314 40.758989,86.2824006 C40.3606129,85.9189697 40.1614278,85.3318979 40.1614278,84.5211676 C40.1614278,83.7104372 40.3606129,83.119871 40.758989,82.7494511 C41.1573651,82.3790312 41.8178209,82.193824 42.7403761,82.193824 L48.6950209,82.193824 C49.6035981,82.193824 50.2605593,82.3790312 50.6659245,82.7494511 C51.0712897,83.119871 51.2739692,83.7104372 51.2739692,84.5211676 C51.2739692,85.2620074 51.0817731,85.8316068 50.6973751,86.2299829 C50.3129771,86.628359 49.7643445,86.8275441 49.051461,86.8275441 L48.6950209,86.8275441 L48.6950209,105.865634 C48.6950209,106.522605 48.6251315,106.934953 48.4853504,107.10269 C48.3455693,107.270428 48.0310665,107.354295 47.5418327,107.354295 L45.4451268,107.354295 C44.7741775,107.354295 44.3024234,107.284406 44.0298503,107.144625 C43.7572771,107.004843 43.5231473,106.76023 43.3274538,106.410777 L34.6051571,91.0838571 L34.6051571,102.46897 L35.8212466,102.46897 C36.7298237,102.46897 37.379796,102.643694 37.7711831,102.993147 C38.1625701,103.3426 38.3582607,103.922682 38.3582607,104.733413 C38.3582607,105.558121 38.1590757,106.152182 37.7606995,106.515613 C37.3623234,106.879044 36.7158456,107.060756 35.8212466,107.060756 L29.8037005,107.060756 C28.8951234,107.060756 28.2381621,106.879044 27.832797,106.515613 C27.4274318,106.152182 27.2247522,105.558121 27.2247522,104.733413 C27.2247522,103.992573 27.4134539,103.429962 27.7908629,103.045564 C28.1682718,102.661166 28.7273878,102.46897 29.4682276,102.46897 L29.8037005,102.46897 L29.8037005,86.8275441 L29.4682276,86.8275441 C28.755344,86.8275441 28.203217,86.628359 27.8118299,86.2299829 C27.4204428,85.8316068 27.2247522,85.2620074 27.2247522,84.5211676 C27.2247522,83.7104372 27.4309263,83.119871 27.8432805,82.7494511 C28.2556347,82.3790312 28.9091015,82.193824 29.8037005,82.193824 L33.2422983,82.193824 C34.0670067,82.193824 34.6261227,82.3021527 34.919663,82.5188134 C35.2132033,82.7354741 35.5416839,83.1722835 35.9051148,83.8292546 L43.8935644,98.3803938 Z M64.6604624,86.3662688 C62.8572863,86.3662688 61.4420239,87.0931196 60.4146329,88.546843 C59.3872418,90.0005663 58.873554,92.0203728 58.873554,94.6063231 C58.873554,97.1922733 59.3907363,99.2190688 60.4251164,100.68677 C61.4594965,102.154472 62.8712644,102.888312 64.6604624,102.888312 C66.4636385,102.888312 67.8823953,102.157966 68.9167754,100.697254 C69.9511555,99.2365414 70.4683378,97.2062514 70.4683378,94.6063231 C70.4683378,92.0203728 69.95465,90.0005663 68.9272589,88.546843 C67.8998679,87.0931196 66.4776166,86.3662688 64.6604624,86.3662688 L64.6604624,86.3662688 Z M64.6604624,81.501911 C68.0990773,81.501911 70.929602,82.7319662 73.1521214,85.1921135 C75.3746408,87.6522607 76.4858838,90.7902992 76.4858838,94.6063231 C76.4858838,98.4503032 75.3816297,101.595331 73.1730884,104.0415 C70.9645471,106.487669 68.1270335,107.710735 64.6604624,107.710735 C61.2358256,107.710735 58.4053009,106.477185 56.1688034,104.010049 C53.9323059,101.542913 52.8140739,98.4083688 52.8140739,94.6063231 C52.8140739,90.7763211 53.9218224,87.6347881 56.1373528,85.1816299 C58.3528831,82.7284717 61.1938912,81.501911 64.6604624,81.501911 L64.6604624,81.501911 Z M87.4611651,98.1707232 L87.4611651,102.46897 L89.6207722,102.46897 C90.5293493,102.46897 91.1758272,102.643694 91.5602252,102.993147 C91.9446232,103.3426 92.1368193,103.922682 92.1368193,104.733413 C92.1368193,105.558121 91.9411287,106.152182 91.5497417,106.515613 C91.1583546,106.879044 90.5153712,107.060756 89.6207722,107.060756 L82.3661697,107.060756 C81.4436145,107.060756 80.7831587,106.879044 80.3847826,106.515613 C79.9864065,106.152182 79.7872214,105.558121 79.7872214,104.733413 C79.7872214,103.992573 79.9759231,103.429962 80.353332,103.045564 C80.730741,102.661166 81.282868,102.46897 82.0097297,102.46897 L82.3661697,102.46897 L82.3661697,86.8275441 L82.0097297,86.8275441 C81.2968461,86.8275441 80.7482136,86.628359 80.3638155,86.2299829 C79.9794175,85.8316068 79.7872214,85.2620074 79.7872214,84.5211676 C79.7872214,83.7104372 79.989901,83.119871 80.3952661,82.7494511 C80.8006313,82.3790312 81.4575926,82.193824 82.3661697,82.193824 L91.0255652,82.193824 C94.450202,82.193824 97.0396079,82.8507853 98.7938606,84.1647276 C100.548113,85.4786699 101.425227,87.414609 101.425227,89.972603 C101.425227,92.6703781 100.551608,94.7111515 98.8043442,96.0949843 C97.0570805,97.4788171 94.4641801,98.1707232 91.0255652,98.1707232 L87.4611651,98.1707232 Z M87.4611651,86.8275441 L87.4611651,93.4531348 L90.4384875,93.4531348 C92.0879044,93.4531348 93.328443,93.1735768 94.1601405,92.6144525 C94.9918381,92.0553281 95.4076806,91.2166541 95.4076806,90.0984053 C95.4076806,89.0500471 94.9778602,88.2428234 94.1182064,87.67671 C93.2585527,87.1105966 92.031992,86.8275441 90.4384875,86.8275441 L87.4611651,86.8275441 Z M114.727851,107.396229 L113.092421,109.03166 C113.69348,108.835966 114.284046,108.689198 114.864137,108.591352 C115.444229,108.493505 116.013828,108.444582 116.572953,108.444582 C117.677223,108.444582 118.840883,108.608823 120.063968,108.937308 C121.287053,109.265794 122.031376,109.430034 122.29696,109.430034 C122.744259,109.430034 123.327837,109.279772 124.047709,108.979242 C124.767582,108.678713 125.253314,108.52845 125.50492,108.52845 C126.02211,108.52845 126.45193,108.727636 126.794394,109.126012 C127.136858,109.524388 127.308087,110.024098 127.308087,110.625156 C127.308087,111.421909 126.836333,112.099837 125.892811,112.658961 C124.949288,113.218086 123.792617,113.497643 122.422762,113.497643 C121.486229,113.497643 120.28413,113.277492 118.816428,112.837181 C117.348727,112.396871 116.286406,112.176719 115.629435,112.176719 C114.636989,112.176719 113.518757,112.449288 112.274706,112.994434 C111.030654,113.53958 110.261869,113.812149 109.968329,113.812149 C109.36727,113.812149 108.857077,113.612964 108.437734,113.214588 C108.01839,112.816212 107.808722,112.337469 107.808722,111.778345 C107.808722,111.386958 107.941512,110.971115 108.207096,110.530805 C108.47268,110.090494 108.94094,109.520895 109.611889,108.821989 L111.729562,106.683349 C109.395218,105.830685 107.536157,104.29661 106.152324,102.08108 C104.768491,99.8655494 104.076585,97.3180772 104.076585,94.4385866 C104.076585,90.6365409 105.180839,87.5299526 107.389381,85.1187288 C109.597922,82.7075049 112.442425,81.501911 115.922974,81.501911 C119.389545,81.501911 122.227059,82.7109994 124.4356,85.1292123 C126.644141,87.5474252 127.748395,90.650519 127.748395,94.4385866 C127.748395,98.2126762 126.65113,101.322759 124.456567,103.768928 C122.262004,106.215097 119.480402,107.438163 116.111677,107.438163 C115.888028,107.438163 115.660887,107.434669 115.430248,107.42768 C115.199609,107.420691 114.965479,107.410207 114.727851,107.396229 L114.727851,107.396229 Z M115.922974,86.3662688 C114.119798,86.3662688 112.704535,87.0931196 111.677144,88.546843 C110.649753,90.0005663 110.136065,92.0203728 110.136065,94.6063231 C110.136065,97.1922733 110.653248,99.2190688 111.687628,100.68677 C112.722008,102.154472 114.133776,102.888312 115.922974,102.888312 C117.72615,102.888312 119.144907,102.157966 120.179287,100.697254 C121.213667,99.2365414 121.730849,97.2062514 121.730849,94.6063231 C121.730849,92.0203728 121.217161,90.0005663 120.18977,88.546843 C119.162379,87.0931196 117.740128,86.3662688 115.922974,86.3662688 L115.922974,86.3662688 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/mono-line": {
"title": "$:/core/images/mono-line",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-mono-line tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M60.4374591,84.522627 L61.3450888,84.522627 C63.2671377,84.522627 64.7264493,85.0120303 65.7230673,85.9908515 C66.7196852,86.9696727 67.2179868,88.4022896 67.2179868,90.288745 C67.2179868,92.3887615 66.6929905,93.9014625 65.6429823,94.8268935 C64.5929741,95.7523244 62.857817,96.215033 60.4374591,96.215033 L44.3670747,96.215033 C41.9111232,96.215033 40.1670679,95.7612227 39.1348565,94.8535884 C38.102645,93.9459542 37.586547,92.424355 37.586547,90.288745 C37.586547,88.2243221 38.102645,86.747214 39.1348565,85.8573766 C40.1670679,84.9675391 41.9111232,84.522627 44.3670747,84.522627 L46.235724,84.522627 L44.0467348,78.2759992 L20.9822627,78.2759992 L18.6864935,84.522627 L20.5551429,84.522627 C22.9755008,84.522627 24.7106579,84.9764373 25.7606661,85.8840716 C26.8106743,86.7917058 27.3356705,88.2599156 27.3356705,90.288745 C27.3356705,92.3887615 26.8106743,93.9014625 25.7606661,94.8268935 C24.7106579,95.7523244 22.9755008,96.215033 20.5551429,96.215033 L6.78052766,96.215033 C4.32457622,96.215033 2.58052094,95.7523244 1.54830946,94.8268935 C0.516097994,93.9014625 0,92.3887615 0,90.288745 C0,88.4022896 0.498301511,86.9696727 1.49491948,85.9908515 C2.49153745,85.0120303 3.95084902,84.522627 5.87289797,84.522627 L6.78052766,84.522627 L21.0890427,44.6937008 L16.8178442,44.6937008 C14.3974863,44.6937008 12.6623292,44.2309922 11.612321,43.3055613 C10.5623128,42.3801303 10.0373165,40.8852258 10.0373165,38.8208028 C10.0373165,36.7207864 10.5623128,35.2080854 11.612321,34.2826544 C12.6623292,33.3572234 14.3974863,32.8945149 16.8178442,32.8945149 L36.8390873,32.8945149 C40.0069087,32.8945149 42.231469,34.6029772 43.512835,38.0199531 L43.512835,38.180123 L60.4374591,84.522627 Z M32.4611088,44.6937008 L24.7195615,67.224273 L40.2026561,67.224273 L32.4611088,44.6937008 Z M89.5058233,68.5590225 L89.5058233,84.8429669 L97.5143205,84.8429669 C103.173687,84.8429669 107.160099,84.22009 109.473676,82.9743176 C111.787254,81.7285451 112.944025,79.6463566 112.944025,76.7276897 C112.944025,73.7734293 111.840643,71.6734444 109.633846,70.4276719 C107.427049,69.1818994 103.565213,68.5590225 98.0482204,68.5590225 L89.5058233,68.5590225 Z M116.734714,62.6327346 C120.614405,64.0564746 123.461842,66.0051894 125.277111,68.4789376 C127.092379,70.9526857 128,74.1115614 128,77.9556593 C128,81.1946677 127.216955,84.1488838 125.650841,86.8183962 C124.084727,89.4879087 121.84237,91.676876 118.923703,93.385364 C117.215215,94.3819819 115.302093,95.1027395 113.18428,95.5476582 C111.066467,95.9925769 108.06776,96.215033 104.188068,96.215033 L99.7033098,96.215033 L76.3184979,96.215033 C73.9693269,96.215033 72.2875593,95.7523244 71.2731446,94.8268935 C70.2587299,93.9014625 69.7515301,92.3887615 69.7515301,90.288745 C69.7515301,88.4022896 70.2320352,86.9696727 71.1930596,85.9908515 C72.1540841,85.0120303 73.5600062,84.522627 75.4108682,84.522627 L76.3184979,84.522627 L76.3184979,44.6937008 L75.4108682,44.6937008 C73.5600062,44.6937008 72.1540841,44.1953993 71.1930596,43.1987813 C70.2320352,42.2021633 69.7515301,40.7428518 69.7515301,38.8208028 C69.7515301,36.7563799 70.2676281,35.2525771 71.2998396,34.3093494 C72.3320511,33.3661217 74.0049204,32.8945149 76.3184979,32.8945149 L100.877889,32.8945149 C108.388118,32.8945149 114.09189,34.3538264 117.989378,37.2724934 C121.886867,40.1911603 123.835581,44.4623161 123.835581,50.0860889 C123.835581,52.8623819 123.239399,55.3093982 122.047017,57.4272114 C120.854635,59.5450246 119.083885,61.2801816 116.734714,62.6327346 L116.734714,62.6327346 Z M89.5058233,44.3733609 L89.5058233,57.8276363 L96.7134708,57.8276363 C101.091471,57.8276363 104.179161,57.3115383 105.976633,56.2793268 C107.774104,55.2471153 108.672827,53.50306 108.672827,51.0471086 C108.672827,48.7335312 107.863087,47.0428653 106.243583,45.9750604 C104.624078,44.9072554 101.999097,44.3733609 98.3685602,44.3733609 L89.5058233,44.3733609 Z\"></path>\n </g>\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-image-button": {
"title": "$:/core/images/new-image-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M81.3619177,73.6270062 L97.1875317,46.2162388 C97.91364,44.9585822 97.4824378,43.3533085 96.2260476,42.6279312 L46.2162388,13.7547547 C44.9585822,13.0286463 43.3533085,13.4598485 42.6279312,14.7162388 L30.0575956,36.4886988 L40.0978909,31.2276186 C43.1404959,29.6333041 46.8692155,31.3421319 47.6479264,34.6877101 L51.2545483,52.3903732 L61.1353556,53.2399953 C63.2899974,53.4346096 65.1046382,54.9309951 65.706105,57.0091178 C65.7395572,57.1246982 65.8069154,57.3539875 65.9047035,57.6813669 C66.0696435,58.2335608 66.2581528,58.852952 66.4667073,59.5238092 C67.0618822,61.4383079 67.6960725,63.3742727 68.3393254,65.2021174 C68.5462918,65.7902259 68.7511789,66.3583016 68.953259,66.9034738 C69.5777086,68.5881157 70.1617856,70.0172008 70.6783305,71.110045 C70.9334784,71.6498566 71.1627732,72.0871602 71.4035746,72.5373068 C71.6178999,72.7492946 71.9508843,72.9623307 72.4151452,73.1586945 C73.5561502,73.6412938 75.1990755,73.899146 77.0720271,73.9171651 C77.9355886,73.9254732 78.7819239,73.8832103 79.5638842,73.8072782 C80.0123946,73.7637257 80.3172916,73.7224469 80.4352582,73.7027375 C80.7503629,73.6500912 81.0598053,73.6256267 81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 Z M37.4707881,2.64867269 C38.9217993,0.135447653 42.1388058,-0.723707984 44.6486727,0.725364314 L108.293614,37.4707881 C110.806839,38.9217993 111.665994,42.1388058 110.216922,44.6486727 L73.4714982,108.293614 C72.0204871,110.806839 68.8034805,111.665994 66.2936136,110.216922 L2.64867269,73.4714982 C0.135447653,72.0204871 -0.723707984,68.8034805 0.725364314,66.2936136 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 Z M80.3080975,53.1397764 C82.8191338,54.5895239 86.0299834,53.7291793 87.4797308,51.218143 C88.9294783,48.7071068 88.0691338,45.4962571 85.5580975,44.0465097 C83.0470612,42.5967622 79.8362116,43.4571068 78.3864641,45.968143 C76.9367166,48.4791793 77.7970612,51.6900289 80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 Z M96,112 L88.0070969,112 C83.5881712,112 80,108.418278 80,104 C80,99.5907123 83.5848994,96 88.0070969,96 L96,96 L96,88.0070969 C96,83.5881712 99.581722,80 104,80 C108.409288,80 112,83.5848994 112,88.0070969 L112,96 L119.992903,96 C124.411829,96 128,99.581722 128,104 C128,108.409288 124.415101,112 119.992903,112 L112,112 L112,119.992903 C112,124.411829 108.418278,128 104,128 C99.5907123,128 96,124.415101 96,119.992903 L96,112 L96,112 Z M33.3471097,51.7910932 C40.7754579,59.7394511 42.3564368,62.4818351 40.7958321,65.1848818 C39.2352273,67.8879286 26.9581062,62.8571718 24.7019652,66.7649227 C22.4458242,70.6726735 23.7947046,70.0228006 22.2648667,72.6725575 L41.9944593,84.0634431 C41.9944593,84.0634431 36.3904568,75.8079231 37.7602356,73.4353966 C40.2754811,69.0788636 46.5298923,72.1787882 48.1248275,69.4162793 C50.538989,65.234829 43.0222016,59.7770885 33.3471097,51.7910932 L33.3471097,51.7910932 Z\"></path>\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/opacity": {
"title": "$:/core/images/opacity",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-opacity tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M102.361773,65 C101.833691,67.051742 101.183534,69.0544767 100.419508,71 L82.5835324,71 C83.7602504,69.1098924 84.7666304,67.1027366 85.581205,65 L102.361773,65 Z M102.834311,63 C103.256674,61.0388326 103.568427,59.0365486 103.762717,57 L87.6555706,57 C87.3692052,59.0609452 86.9083652,61.0660782 86.2884493,63 L102.834311,63 Z M99.5852583,73 C98.6682925,75.0747721 97.6196148,77.0783056 96.4498253,79 L75.8124196,79 C77.8387053,77.2115633 79.6621163,75.1985844 81.2437158,73 L99.5852583,73 Z M95.1689122,81 C93.7449202,83.1155572 92.1695234,85.1207336 90.458251,87 L60.4614747,87 C65.1836162,85.86248 69.5430327,83.794147 73.3347255,81 L95.1689122,81 Z M87.6555706,47 L103.762717,47 C101.246684,20.6269305 79.0321807,0 52,0 C23.281193,0 0,23.281193 0,52 C0,77.2277755 17.9651296,98.2595701 41.8000051,103 L62.1999949,103 C67.8794003,101.870444 73.2255333,99.8158975 78.074754,97 L39,97 L39,95 L81.2493857,95 C83.8589242,93.2215015 86.2981855,91.2116653 88.5376609,89 L39,89 L39,87 L43.5385253,87 C27.7389671,83.1940333 16,68.967908 16,52 C16,32.117749 32.117749,16 52,16 C70.1856127,16 85.2217929,29.4843233 87.6555706,47 Z M87.8767787,49 L103.914907,49 C103.971379,49.9928025 104,50.9930589 104,52 C104,53.0069411 103.971379,54.0071975 103.914907,55 L87.8767787,55 C87.958386,54.0107999 88,53.0102597 88,52 C88,50.9897403 87.958386,49.9892001 87.8767787,49 Z\"></path>\n <path d=\"M76,128 C104.718807,128 128,104.718807 128,76 C128,47.281193 104.718807,24 76,24 C47.281193,24 24,47.281193 24,76 C24,104.718807 47.281193,128 76,128 L76,128 Z M76,112 C95.882251,112 112,95.882251 112,76 C112,56.117749 95.882251,40 76,40 C56.117749,40 40,56.117749 40,76 C40,95.882251 56.117749,112 76,112 L76,112 Z\"></path>\n <path d=\"M37,58 L90,58 L90,62 L37,62 L37,58 L37,58 Z M40,50 L93,50 L93,54 L40,54 L40,50 L40,50 Z M40,42 L93,42 L93,46 L40,46 L40,42 L40,42 Z M32,66 L85,66 L85,70 L32,70 L32,66 L32,66 Z M30,74 L83,74 L83,78 L30,78 L30,74 L30,74 Z M27,82 L80,82 L80,86 L27,86 L27,82 L27,82 Z\"></path>\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/paint": {
"title": "$:/core/images/paint",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-paint tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M83.5265806,76.1907935 C90.430962,69.2864121 91.8921169,59.0000433 87.9100453,50.6642209 L125.812763,12.7615036 C128.732035,9.84223095 128.72611,5.10322984 125.812796,2.18991592 C122.893542,-0.729338085 118.161775,-0.730617045 115.241209,2.18994966 L77.3384914,40.092667 C69.002669,36.1105954 58.7163002,37.5717503 51.8119188,44.4761317 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 Z M80.8836921,78.8336819 L49.1690303,47.1190201 C49.1690303,47.1190201 8.50573364,81.242543 0,80.2820711 C0,80.2820711 3.78222974,85.8744423 6.82737483,88.320684 C20.8514801,82.630792 44.1526049,63.720771 44.1526049,63.720771 L44.8144806,64.3803375 C44.8144806,64.3803375 19.450356,90.2231043 9.18040433,92.0477601 C10.4017154,93.4877138 13.5343883,96.1014812 15.4269991,97.8235871 C20.8439164,96.3356979 50.1595367,69.253789 50.1595367,69.253789 L50.8214124,69.9133555 L18.4136144,100.936036 L23.6993903,106.221812 L56.1060358,75.2002881 L56.7679115,75.8598546 C56.7679115,75.8598546 28.9040131,106.396168 28.0841366,108.291555 C28.0841366,108.291555 34.1159238,115.144621 35.6529617,116.115796 C36.3545333,113.280171 63.5365402,82.6307925 63.5365402,82.6307925 L64.1984159,83.290359 C64.1984159,83.290359 43.6013016,107.04575 39.2343772,120.022559 C42.443736,123.571575 46.7339155,125.159692 50.1595362,126.321151 C47.9699978,114.504469 80.8836921,78.8336819 80.8836921,78.8336819 L80.8836921,78.8336819 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/picture": {
"title": "$:/core/images/picture",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-picture tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M112,68.2332211 L112,20.0027785 C112,17.7898769 110.207895,16 107.997221,16 L20.0027785,16 C17.7898769,16 16,17.792105 16,20.0027785 L16,58.312373 L25.2413115,43.7197989 C28.041793,39.297674 34.2643908,38.7118128 37.8410347,42.5335275 L56.0882845,63.1470817 L69.7748997,56.7400579 C72.766567,55.3552503 76.3013751,55.9473836 78.678437,58.2315339 C78.8106437,58.3585731 79.0742301,58.609836 79.4527088,58.9673596 C80.0910923,59.570398 80.8117772,60.2441563 81.598127,60.9705595 C83.8422198,63.043576 86.1541548,65.1151944 88.3956721,67.0372264 C89.1168795,67.6556396 89.8200801,68.2492007 90.5021258,68.8146755 C92.6097224,70.5620551 94.4693308,72.0029474 95.9836366,73.0515697 C96.7316295,73.5695379 97.3674038,73.9719282 98.0281481,74.3824999 C98.4724987,74.4989557 99.0742374,74.5263881 99.8365134,74.4317984 C101.709944,74.1993272 104.074502,73.2878514 106.559886,71.8846196 C107.705822,71.2376318 108.790494,70.5370325 109.764561,69.8410487 C110.323259,69.4418522 110.694168,69.1550757 110.834827,69.0391868 C111.210545,68.7296319 111.600264,68.4615815 112,68.2332211 L112,68.2332211 Z M0,8.00697327 C0,3.58484404 3.59075293,0 8.00697327,0 L119.993027,0 C124.415156,0 128,3.59075293 128,8.00697327 L128,119.993027 C128,124.415156 124.409247,128 119.993027,128 L8.00697327,128 C3.58484404,128 0,124.409247 0,119.993027 L0,8.00697327 L0,8.00697327 Z M95,42 C99.418278,42 103,38.418278 103,34 C103,29.581722 99.418278,26 95,26 C90.581722,26 87,29.581722 87,34 C87,38.418278 90.581722,42 95,42 L95,42 Z M32,76 C47.8587691,80.8294182 52.0345556,83.2438712 52.0345556,88 C52.0345556,92.7561288 32,95.4712486 32,102.347107 C32,109.222965 33.2849191,107.337637 33.2849191,112 L67.999999,112 C67.999999,112 54.3147136,105.375255 54.3147136,101.200691 C54.3147136,93.535181 64.9302432,92.860755 64.9302432,88 C64.9302432,80.6425555 50.8523779,79.167282 32,76 L32,76 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/preview-closed": {
"title": "$:/core/images/preview-closed",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-preview-closed tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M0.0881363238,64 C-0.210292223,65.8846266 0.249135869,67.8634737 1.4664206,69.4579969 C16.2465319,88.8184886 39.1692554,100.414336 64,100.414336 C88.8307446,100.414336 111.753468,88.8184886 126.533579,69.4579969 C127.750864,67.8634737 128.210292,65.8846266 127.911864,64 C110.582357,78.4158332 88.3036732,87.0858436 64,87.0858436 C39.6963268,87.0858436 17.4176431,78.4158332 0.0881363238,64 Z\"></path>\n <rect x=\"62\" y=\"96\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(80.000000, 101.000000) rotate(-5.000000) translate(-80.000000, -101.000000) \" x=\"78\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(48.000000, 101.000000) rotate(-355.000000) translate(-48.000000, -101.000000) \" x=\"46\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(32.000000, 96.000000) rotate(-350.000000) translate(-32.000000, -96.000000) \" x=\"30\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(96.000000, 96.000000) rotate(-10.000000) translate(-96.000000, -96.000000) \" x=\"94\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(112.000000, 88.000000) rotate(-20.000000) translate(-112.000000, -88.000000) \" x=\"110\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(16.000000, 88.000000) rotate(-340.000000) translate(-16.000000, -88.000000) \" x=\"14\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n </g>\n</svg>"
},
"$:/core/images/preview-open": {
"title": "$:/core/images/preview-open",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-preview-open tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64.1099282,99.5876785 C39.2791836,99.5876785 16.3564602,87.9918313 1.57634884,68.6313396 C-0.378878622,66.070184 -0.378878622,62.5174945 1.57634884,59.9563389 C16.3564602,40.5958472 39.2791836,29 64.1099282,29 C88.9406729,29 111.863396,40.5958472 126.643508,59.9563389 C128.598735,62.5174945 128.598735,66.070184 126.643508,68.6313396 C111.863396,87.9918313 88.9406729,99.5876785 64.1099282,99.5876785 Z M110.213805,67.5808331 C111.654168,66.0569335 111.654168,63.9430665 110.213805,62.4191669 C99.3257042,50.8995835 82.4391647,44 64.1470385,44 C45.8549124,44 28.9683729,50.8995835 18.0802717,62.4191669 C16.6399094,63.9430665 16.6399094,66.0569335 18.0802717,67.5808331 C28.9683729,79.1004165 45.8549124,86 64.1470385,86 C82.4391647,86 99.3257042,79.1004165 110.213805,67.5808331 Z\"></path>\n <path d=\"M63.5,88 C76.4786916,88 87,77.4786916 87,64.5 C87,51.5213084 76.4786916,41 63.5,41 C50.5213084,41 40,51.5213084 40,64.5 C40,77.4786916 50.5213084,88 63.5,88 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/quote": {
"title": "$:/core/images/quote",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-quote tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M51.2188077,117.712501 L51.2188077,62.1993386 L27.4274524,62.1993386 C27.4274524,53.3075754 29.1096526,45.797753 32.4741035,39.669646 C35.8385544,33.541539 42.0867267,28.9154883 51.2188077,25.7913554 L51.2188077,2 C43.7689521,2.96127169 36.8599155,5.18417913 30.4914905,8.668789 C24.1230656,12.1533989 18.6559149,16.5391352 14.0898743,21.8261295 C9.52383382,27.1131238 5.97919764,33.2411389 3.45585945,40.2103586 C0.932521268,47.1795784 -0.208971741,54.6293222 0.0313461819,62.5598136 L0.0313461819,117.712501 L51.2188077,117.712501 Z M128,117.712501 L128,62.1993386 L104.208645,62.1993386 C104.208645,53.3075754 105.890845,45.797753 109.255296,39.669646 C112.619747,33.541539 118.867919,28.9154883 128,25.7913554 L128,2 C120.550144,2.96127169 113.641108,5.18417913 107.272683,8.668789 C100.904258,12.1533989 95.4371072,16.5391352 90.8710666,21.8261295 C86.3050261,27.1131238 82.7603899,33.2411389 80.2370517,40.2103586 C77.7137136,47.1795784 76.5722206,54.6293222 76.8125385,62.5598136 L76.8125385,117.712501 L128,117.712501 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/size": {
"title": "$:/core/images/size",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-size tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <path d=\"M92.3431458,26 L83.1715729,35.1715729 C81.6094757,36.73367 81.6094757,39.26633 83.1715729,40.8284271 C84.73367,42.3905243 87.26633,42.3905243 88.8284271,40.8284271 L104.828427,24.8284271 C106.390524,23.26633 106.390524,20.73367 104.828427,19.1715729 L88.8284271,3.17157288 C87.26633,1.60947571 84.73367,1.60947571 83.1715729,3.17157288 C81.6094757,4.73367004 81.6094757,7.26632996 83.1715729,8.82842712 L92.3431457,18 L22,18 C19.790861,18 18,19.790861 18,22 L18,92.3431458 L8.82842712,83.1715729 C7.26632996,81.6094757 4.73367004,81.6094757 3.17157288,83.1715729 C1.60947571,84.73367 1.60947571,87.26633 3.17157288,88.8284271 L19.1715729,104.828427 C20.73367,106.390524 23.26633,106.390524 24.8284271,104.828427 L40.8284271,88.8284271 C42.3905243,87.26633 42.3905243,84.73367 40.8284271,83.1715729 C39.26633,81.6094757 36.73367,81.6094757 35.1715729,83.1715729 L26,92.3431458 L26,22 L22,26 L92.3431458,26 L92.3431458,26 Z M112,52 L112,116 L116,112 L52,112 C49.790861,112 48,113.790861 48,116 C48,118.209139 49.790861,120 52,120 L116,120 C118.209139,120 120,118.209139 120,116 L120,52 C120,49.790861 118.209139,48 116,48 C113.790861,48 112,49.790861 112,52 L112,52 Z\"></path>\n</svg>"
},
"$:/core/images/spiral": {
"title": "$:/core/images/spiral",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-spiral tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"nonzero\">\n <path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074.14-2.64-1.89-4.89-4.52-5.03-2.64-.14-4.89 1.88-5.03 4.52-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01-.02-.015-.054-.045-.094-.088-.06-.064-.12-.145-.17-.244-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"></path>\n </g>\n</svg>"
},
"$:/core/images/stamp": {
"title": "$:/core/images/stamp",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-stamp tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M49.7334301,64 L16.0098166,64 C11.5838751,64 8,67.5829053 8,72.002643 L8,74.4986785 L8,97 L120,97 L120,74.4986785 L120,72.002643 C120,67.5737547 116.413883,64 111.990183,64 L78.2665699,64 C76.502049,60.7519149 75.5,57.0311962 75.5,53.0769231 C75.5,46.6017951 78.1869052,40.7529228 82.5087769,36.5800577 C85.3313113,32.7688808 87,28.0549983 87,22.952183 C87,10.2760423 76.7025492,0 64,0 C51.2974508,0 41,10.2760423 41,22.952183 C41,28.0549983 42.6686887,32.7688808 45.4912231,36.5800577 C49.8130948,40.7529228 52.5,46.6017951 52.5,53.0769231 C52.5,57.0311962 51.497951,60.7519149 49.7334301,64 Z M8,104 L120,104 L120,112 L8,112 L8,104 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/strikethrough": {
"title": "$:/core/images/strikethrough",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-strikethrough tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M92.793842,38.7255689 L108.215529,38.7255689 C107.987058,31.985687 106.70193,26.1883331 104.360107,21.3333333 C102.018284,16.4783336 98.8197436,12.4516001 94.7643909,9.25301205 C90.7090382,6.05442399 85.9969032,3.71263572 80.6278447,2.22757697 C75.2587862,0.742518233 69.4328739,0 63.1499331,0 C57.552404,0 52.0977508,0.713959839 46.7858099,2.14190094 C41.473869,3.56984203 36.7331757,5.74027995 32.5635877,8.65327979 C28.3939997,11.5662796 25.0526676,15.2788708 22.5394913,19.7911647 C20.026315,24.3034585 18.7697456,29.6438781 18.7697456,35.8125837 C18.7697456,41.4101128 19.883523,46.0651309 22.1111111,49.7777778 C24.3386992,53.4904246 27.3087722,56.5176144 31.021419,58.8594378 C34.7340659,61.2012612 38.9321497,63.0861151 43.6157965,64.5140562 C48.2994433,65.9419973 53.068695,67.1985666 57.9236948,68.2838019 C62.7786945,69.3690371 67.5479462,70.4256977 72.231593,71.4538153 C76.9152398,72.4819329 81.1133237,73.8241773 84.8259705,75.480589 C88.5386174,77.1370007 91.5086903,79.2788802 93.7362784,81.9062918 C95.9638666,84.5337035 97.0776439,87.9607107 97.0776439,92.1874163 C97.0776439,96.6425926 96.1637753,100.298067 94.3360107,103.153949 C92.5082461,106.009831 90.109341,108.265944 87.1392236,109.922356 C84.1691061,111.578768 80.827774,112.749662 77.1151272,113.435074 C73.4024803,114.120485 69.7184476,114.463186 66.0629183,114.463186 C61.4935068,114.463186 57.0383974,113.892018 52.6974565,112.749665 C48.3565156,111.607312 44.5582492,109.836692 41.3025435,107.437751 C38.0468378,105.03881 35.4194656,101.983062 33.4203481,98.270415 C31.4212305,94.5577681 30.4216867,90.1312171 30.4216867,84.9906292 L15,84.9906292 C15,92.4159229 16.3422445,98.8415614 19.0267738,104.267738 C21.711303,109.693914 25.3667774,114.149023 29.9933066,117.633199 C34.6198357,121.117376 39.9888137,123.71619 46.1004016,125.429719 C52.2119895,127.143248 58.6947448,128 65.5488621,128 C71.1463912,128 76.7723948,127.343157 82.4270415,126.029451 C88.0816882,124.715745 93.1936407,122.602424 97.7630522,119.689424 C102.332464,116.776425 106.073613,113.006717 108.986613,108.380187 C111.899613,103.753658 113.356091,98.1847715 113.356091,91.6733601 C113.356091,85.6188899 112.242314,80.5926126 110.014726,76.5943775 C107.787137,72.5961424 104.817065,69.2833688 101.104418,66.6559572 C97.3917708,64.0285455 93.193687,61.9437828 88.5100402,60.4016064 C83.8263934,58.85943 79.0571416,57.5171855 74.2021419,56.3748327 C69.3471422,55.2324798 64.5778904,54.1758192 59.8942436,53.2048193 C55.2105968,52.2338193 51.012513,51.0058084 47.2998661,49.5207497 C43.5872193,48.0356909 40.6171463,46.1222786 38.3895582,43.7804552 C36.1619701,41.4386318 35.0481928,38.3828836 35.0481928,34.6131191 C35.0481928,30.6148841 35.8192694,27.273552 37.3614458,24.5890228 C38.9036222,21.9044935 40.9598265,19.762614 43.5301205,18.1633199 C46.1004145,16.5640259 49.041929,15.4216902 52.3547523,14.7362784 C55.6675757,14.0508667 59.0374661,13.708166 62.4645248,13.708166 C70.9179361,13.708166 77.8576257,15.6786952 83.2838019,19.6198126 C88.709978,23.56093 91.8799597,29.9294518 92.793842,38.7255689 L92.793842,38.7255689 Z\"></path>\n <rect x=\"5\" y=\"54\" width=\"118\" height=\"16\"></rect>\n </g>\n</svg>"
},
"$:/core/images/subscript": {
"title": "$:/core/images/subscript",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-subscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,128.411516 L85.3276227,128.411516 C85.3870139,123.24448 86.6342108,118.730815 89.0692508,114.870386 C91.5042907,111.009956 94.8301491,107.654403 99.0469256,104.803624 C101.066227,103.318844 103.174584,101.878629 105.372059,100.482935 C107.569534,99.0872413 109.588805,97.5876355 111.429933,95.9840726 C113.271061,94.3805097 114.785514,92.6433426 115.973338,90.7725192 C117.161163,88.9016958 117.784761,86.7487964 117.844152,84.3137564 C117.844152,83.1853233 117.710524,81.9826691 117.443264,80.7057579 C117.176003,79.4288467 116.656338,78.2410402 115.884252,77.1423026 C115.112166,76.0435651 114.04314,75.123015 112.677142,74.3806248 C111.311144,73.6382345 109.529434,73.267045 107.331959,73.267045 C105.312658,73.267045 103.634881,73.6679297 102.298579,74.4697112 C100.962276,75.2714926 99.8932503,76.3702137 99.0914688,77.7659073 C98.2896874,79.161601 97.6957841,80.8096826 97.3097412,82.7102016 C96.9236982,84.6107206 96.7009845,86.6596869 96.6415933,88.857162 L86.4857457,88.857162 C86.4857457,85.4124713 86.9460207,82.2202411 87.8665846,79.2803758 C88.7871485,76.3405105 90.1679736,73.801574 92.0091014,71.6634901 C93.8502292,69.5254062 96.092214,67.8476295 98.7351233,66.6301095 C101.378033,65.4125895 104.451482,64.8038386 107.955564,64.8038386 C111.756602,64.8038386 114.933984,65.4274371 117.487807,66.6746527 C120.041629,67.9218683 122.105443,69.4957119 123.67931,71.3962309 C125.253178,73.2967499 126.366746,75.3605638 127.02005,77.5877345 C127.673353,79.8149053 128,81.9381095 128,83.9574109 C128,86.4518421 127.613963,88.7086746 126.841877,90.727976 C126.069791,92.7472774 125.03046,94.6032252 123.723854,96.2958749 C122.417247,97.9885247 120.932489,99.5475208 119.269534,100.97291 C117.60658,102.398299 115.884261,103.734582 114.102524,104.981797 C112.320788,106.229013 110.539078,107.416819 108.757341,108.545253 C106.975605,109.673686 105.327523,110.802102 103.813047,111.930535 C102.298571,113.058968 100.977136,114.231927 99.8487031,115.449447 C98.7202699,116.666967 97.9481956,117.958707 97.5324571,119.324705 L127.910914,119.324705 L127.910914,128.411516 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/superscript": {
"title": "$:/core/images/superscript",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-superscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,63.4115159 L85.3276227,63.4115159 C85.3870139,58.2444799 86.6342108,53.7308149 89.0692508,49.8703857 C91.5042907,46.0099565 94.8301491,42.654403 99.0469256,39.8036245 C101.066227,38.318844 103.174584,36.8786285 105.372059,35.4829349 C107.569534,34.0872413 109.588805,32.5876355 111.429933,30.9840726 C113.271061,29.3805097 114.785514,27.6433426 115.973338,25.7725192 C117.161163,23.9016958 117.784761,21.7487964 117.844152,19.3137564 C117.844152,18.1853233 117.710524,16.9826691 117.443264,15.7057579 C117.176003,14.4288467 116.656338,13.2410402 115.884252,12.1423026 C115.112166,11.0435651 114.04314,10.123015 112.677142,9.38062477 C111.311144,8.63823453 109.529434,8.26704499 107.331959,8.26704499 C105.312658,8.26704499 103.634881,8.6679297 102.298579,9.46971115 C100.962276,10.2714926 99.8932503,11.3702137 99.0914688,12.7659073 C98.2896874,14.161601 97.6957841,15.8096826 97.3097412,17.7102016 C96.9236982,19.6107206 96.7009845,21.6596869 96.6415933,23.857162 L86.4857457,23.857162 C86.4857457,20.4124713 86.9460207,17.2202411 87.8665846,14.2803758 C88.7871485,11.3405105 90.1679736,8.80157397 92.0091014,6.6634901 C93.8502292,4.52540622 96.092214,2.84762946 98.7351233,1.63010947 C101.378033,0.412589489 104.451482,-0.196161372 107.955564,-0.196161372 C111.756602,-0.196161372 114.933984,0.427437071 117.487807,1.67465266 C120.041629,2.92186826 122.105443,4.49571195 123.67931,6.39623095 C125.253178,8.29674995 126.366746,10.3605638 127.02005,12.5877345 C127.673353,14.8149053 128,16.9381095 128,18.9574109 C128,21.4518421 127.613963,23.7086746 126.841877,25.727976 C126.069791,27.7472774 125.03046,29.6032252 123.723854,31.2958749 C122.417247,32.9885247 120.932489,34.5475208 119.269534,35.97291 C117.60658,37.3982993 115.884261,38.7345816 114.102524,39.9817972 C112.320788,41.2290128 110.539078,42.4168194 108.757341,43.5452525 C106.975605,44.6736857 105.327523,45.8021019 103.813047,46.9305351 C102.298571,48.0589682 100.977136,49.2319272 99.8487031,50.4494472 C98.7202699,51.6669672 97.9481956,52.9587068 97.5324571,54.3247048 L127.910914,54.3247048 L127.910914,63.4115159 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/underline": {
"title": "$:/core/images/underline",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-underline tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M7,117.421488 L121.247934,117.421488 L121.247934,128 L7,128 L7,117.421488 Z M104.871212,98.8958333 L104.871212,0 L88.6117424,0 L88.6117424,55.8560606 C88.6117424,60.3194668 88.0060035,64.432115 86.7945076,68.1941288 C85.5830116,71.9561425 83.7657949,75.239885 81.342803,78.0454545 C78.9198111,80.8510241 75.8911167,83.0189317 72.2566288,84.5492424 C68.6221409,86.0795531 64.3182067,86.844697 59.344697,86.844697 C53.0959284,86.844697 48.1862552,85.0593613 44.6155303,81.4886364 C41.0448054,77.9179114 39.2594697,73.0720003 39.2594697,66.9507576 L39.2594697,0 L23,0 L23,65.0378788 C23,70.3939662 23.5419769,75.2717583 24.625947,79.6714015 C25.709917,84.0710447 27.5908957,87.864883 30.2689394,91.0530303 C32.9469831,94.2411776 36.4538925,96.6960141 40.7897727,98.4176136 C45.125653,100.139213 50.545422,101 57.0492424,101 C64.3182182,101 70.630655,99.5653553 75.9867424,96.6960227 C81.3428298,93.8266902 85.742407,89.33147 89.1856061,83.2102273 L89.5681818,83.2102273 L89.5681818,98.8958333 L104.871212,98.8958333 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/unfold-all-button": {
"title": "$:/core/images/unfold-all-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-unfold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M85.598226,8.34884273 C84.1490432,6.89863875 82.1463102,6 79.9340286,6 L47.9482224,6 C43.5292967,6 39.9411255,9.581722 39.9411255,14 C39.9411255,18.4092877 43.5260249,22 47.9482224,22 L71.9411255,22 L71.9411255,45.9929031 C71.9411255,50.4118288 75.5228475,54 79.9411255,54 C84.3504132,54 87.9411255,50.4151006 87.9411255,45.9929031 L87.9411255,14.0070969 C87.9411255,11.7964515 87.0447363,9.79371715 85.5956548,8.34412458 Z\" transform=\"translate(63.941125, 30.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -30.000000) \"></path>\n <path d=\"M85.6571005,72.2899682 C84.2079177,70.8397642 82.2051847,69.9411255 79.9929031,69.9411255 L48.0070969,69.9411255 C43.5881712,69.9411255 40,73.5228475 40,77.9411255 C40,82.3504132 43.5848994,85.9411255 48.0070969,85.9411255 L72,85.9411255 L72,109.934029 C72,114.352954 75.581722,117.941125 80,117.941125 C84.4092877,117.941125 88,114.356226 88,109.934029 L88,77.9482224 C88,75.737577 87.1036108,73.7348426 85.6545293,72.2852501 Z\" transform=\"translate(64.000000, 93.941125) scale(1, -1) rotate(-45.000000) translate(-64.000000, -93.941125) \"></path>\n </g>\n</svg>"
},
"$:/core/images/unfold-button": {
"title": "$:/core/images/unfold-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-unfold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M85.598226,11.3488427 C84.1490432,9.89863875 82.1463102,9 79.9340286,9 L47.9482224,9 C43.5292967,9 39.9411255,12.581722 39.9411255,17 C39.9411255,21.4092877 43.5260249,25 47.9482224,25 L71.9411255,25 L71.9411255,48.9929031 C71.9411255,53.4118288 75.5228475,57 79.9411255,57 C84.3504132,57 87.9411255,53.4151006 87.9411255,48.9929031 L87.9411255,17.0070969 C87.9411255,14.7964515 87.0447363,12.7937171 85.5956548,11.3441246 Z\" transform=\"translate(63.941125, 33.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -33.000000) \"></path>\n <path d=\"M85.6571005,53.4077172 C84.2079177,51.9575133 82.2051847,51.0588745 79.9929031,51.0588745 L48.0070969,51.0588745 C43.5881712,51.0588745 40,54.6405965 40,59.0588745 C40,63.4681622 43.5848994,67.0588745 48.0070969,67.0588745 L72,67.0588745 L72,91.0517776 C72,95.4707033 75.581722,99.0588745 80,99.0588745 C84.4092877,99.0588745 88,95.4739751 88,91.0517776 L88,59.0659714 C88,56.855326 87.1036108,54.8525917 85.6545293,53.4029991 Z\" transform=\"translate(64.000000, 75.058875) scale(1, -1) rotate(-45.000000) translate(-64.000000, -75.058875) \"></path>\n </g>\n</svg>"
},
"$:/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/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "fold tiddler"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "Fold the body of this tiddler"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "fold-bar"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "Optional bars to fold and unfold tiddlers"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "unfold tiddler"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "Unfold the body of this tiddler"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "fold other tiddlers"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "Fold the bodies of other opened tiddlers"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "fold all tiddlers"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "Fold the bodies of all opened tiddlers"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "unfold all tiddlers"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "Unfold the bodies of all opened tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "help"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "Show help panel"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import many types of file including text, image, TiddlyWiki or JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "new image"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "Create a new image tiddler"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "new Markdown tiddler"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "Create a new Markdown tiddler"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "open in new window"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "Open tiddler in new window"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "palette"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "Choose the colour palette"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/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/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "bold"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "Apply bold formatting to selection"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "clear"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "Clear image to solid colour"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "editor height"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "Automatically adjust height to fit content"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "Fixed height:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "Choose the height of the text editor"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "excise"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "Perform excision"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "Macro name:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "Title of new tiddler:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "Replace excised text with:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "macro"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "link"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "transclusion"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "Tag new tiddler with the title of this tiddler"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "Warning: tiddler already exists"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "Excise the selected text into a new tiddler"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "heading 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "Apply heading level 1 formatting to lines containing selection"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "heading 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "Apply heading level 2 formatting to lines containing selection"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "heading 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "Apply heading level 3 formatting to lines containing selection"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "heading 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "Apply heading level 4 formatting to lines containing selection"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "heading 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "Apply heading level 5 formatting to lines containing selection"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "heading 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "Apply heading level 6 formatting to lines containing selection"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "italic"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "Apply italic formatting to selection"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "line width"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "Set line width for painting"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "link"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "Create wikitext link"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "bulleted list"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "Apply bulleted list formatting to lines containing selection"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "numbered list"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "Apply numbered list formatting to lines containing selection"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "monospaced block"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "Apply monospaced block formatting to lines containing selection"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "monospaced"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "Apply monospaced character formatting to selection"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "opacity"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "Set painting opacity"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "paint colour"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "Set painting colour"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "picture"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "Insert picture"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "preview"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "Show preview pane"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "preview type"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "Choose preview type"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "quote"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "Apply quoted text formatting to lines containing selection"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "image size"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "Height:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "Resize image"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "Width:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "Set image size"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "stamp"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "Add your own"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "Insert a preconfigured snippet of text"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "Name as shown in menu"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "strikethrough"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "Apply strikethrough formatting to selection"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "subscript"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "Apply subscript formatting to selection"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "superscript"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "Apply superscript formatting to selection"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "underline"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "Apply underline formatting to selection"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration:"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers:"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup:"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/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/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "Type shortcut here"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "add shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "Keyboard Shortcuts"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "Manage keyboard shortcut assignments"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "No keyboard shortcuts assigned"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "remove keyboard shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "All platforms"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "Macintosh platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "Non-Macintosh platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Non-Linux platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Non-Windows platforms only"
},
"$:/language/ControlPanel/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/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "Parsing"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "Here you can globally disable individual wiki parser rules. Take care as disabling some parser rules can prevent ~TiddlyWiki functioning correctly (you can restore normal operation with [[safe mode|http://tiddlywiki.com/#SafeMode]] )"
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "Block Parse Rules"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "Inline Parse Rules"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "Pragma Parse Rules"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "Get more plugins"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "Install plugins from the official library"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/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/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "install"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "Currently installed plugins:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "Language pack plugins"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
},
"$:/language/ControlPanel/Plugins/NoInformation/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInformation/Hint",
"text": "No information provided"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "This plugin is not currently installed"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "open plugin library"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "reinstall"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "Themes"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "Theme plugins"
},
"$:/language/ControlPanel/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/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case Wiki Links"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "Enable automatic ~CamelCase linking"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "Enable or disable the editor toolbar:"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "Show editor toolbar"
},
"$:/language/ControlPanel/Settings/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/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "Performance Instrumentation"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "Enable performance instrumentation"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "Toolbar Button Style"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "Choose the style for toolbar buttons:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "Borderless"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "Boxed"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "Rounded"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "Default Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "Specify which sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "Tiddler Opening Behaviour"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "Navigation from //within// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "Navigation from //outside// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "Open above the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "Open below the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "Open at the top of the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "Open at the bottom of the story river"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "Tiddler Titles"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "Optionally display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "Do not display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "Display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "Wiki Links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "Choose whether to link to tiddlers that do not exist yet"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "Enable links to missing tiddlers"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/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/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type"
},
"$:/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/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "output"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/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 you make will override the default version from the plugin <<pluginLink>>"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/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/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
},
"$:/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 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''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\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, defaulting to `text/html` and save it to the specified filename. Optionally a template can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>]\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'' flag 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> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/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* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "The following tiddlers were imported:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/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/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|http://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See 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/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "Recent:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "count"
},
"$:/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/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "Error"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "Filter error"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "Syntax error in filter expression"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "Filter Error: Unknown operand for the 'is' filter operator"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "Error loading plugin library"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "Recursive transclusion error in transclude widget"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "Error retrieving skinny tiddler list"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "Error saving to TWEdit"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "Error while saving"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest error code"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "Internal JavaScript Error"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>Loading external text from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear you may be using a browser that doesn't support external text in this configuration. See http://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "Login to TiddlySpace"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" - click {{$:/core/images/edit-button}} to create"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "No"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "Official ~TiddlyWiki Plugin Library"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
},
"$:/language/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/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "DDth MMM YYYY at hh12:0mmam"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "Yes"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"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/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "All matches:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "Title matches:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "Search"
},
"$:/language/Search/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/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "List of tiddlers by tag",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Macro definition",
"text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table with 4 columns by 3 rows",
"text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table of Contents",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "Theme Tweaks"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "You can tweak certain aspects of the ''Vanilla'' theme."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "Options"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "Sidebar layout"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "Fixed story, fluid sidebar"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "Fluid story, fixed sidebar"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "Sticky titles"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "Causes tiddler titles to \"stick\" to the top of the browser window. Caution: Does not work at all with Chrome, and causes some layout issues in Firefox"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "Wrap long lines in code blocks"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "Settings"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "Font family"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "Code font family"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "Page background image"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "Page background image attachment"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "Scroll with tiddlers"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "Fixed to window"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "Page background image size"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "Auto"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "Cover"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "Contain"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "Sizes"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "Font size"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "Line height"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "Font size for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "Line height for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "Story left position"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "Story top position"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "how far the top margin of the story river<br>is from the top of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "Story right"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "how far the left margin of the sidebar <br>is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "Story width"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "the overall width of the story river"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "Tiddler width"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "within the story river"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "Sidebar breakpoint"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "Sidebar width"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "the width of the sidebar in fluid-fixed layout"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "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\ttemplate = this.params[3],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"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] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"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.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler,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\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"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\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"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.node) {\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},state.wiki.getModificationFields()));\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.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\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.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"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/editor/engines/framed.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
"title": "$:/core/modules/editor/engines/framed.js",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/engines/simple.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
"title": "$:/core/modules/editor/engines/simple.js",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/factory.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag);\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\t\t\t\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
"title": "$:/core/modules/editor/factory.js",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/operations/bitmap/clear.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/bitmap/clear.js",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/resize.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/bitmap/resize.js",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/text/excise.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/text/excise.js",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/make-link.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/text/make-link.js",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/prefix-lines.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,event.paramObject.count);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== event.paramObject.count) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/text/prefix-lines.js",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-all.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/text/replace-all.js",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-selection.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/text/replace-selection.js",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-lines.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/text/wrap-lines.js",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-selection.js": {
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix unless they comprise the entire text\n\t\t\tif(operation.selStart > event.paramObject.prefix.length || (operation.selEnd + event.paramObject.suffix.length) < operation.text.length ) {\n\t\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\t\toperation.replacement = \"\";\n\t\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t\t}\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/editor/operations/text/wrap-selection.js",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/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/days.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/days.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.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\t\tvalue,values = {},\n\t\tfield = operator.operand || \"title\";\n\tif(operator.suffix !== \"list-item\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvalue = (field === \"title\") ? title : tiddler.getFieldString(field);\n\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"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] === \"\" || tiddler.fields[operator.operand].length === 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/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.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"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 [$tw.language.getString(\"Error/IsFilterOperator\")];\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.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"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 tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
"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/wikiparserrules.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(exp.types[operator.operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/wikiparserrules.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/x-listops.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n /*jslint node: true, browser: true */\n /*global $tw: false */\n \"use strict\";\n\n /*\n Fetch titles from the current list\n */\n var prepare_results = function (source) {\n var results = [];\n source(function (tiddler, title) {\n results.push(title);\n });\n return results;\n };\n\n /*\n Moves a number of items from the tail of the current list before the item named in the operand\n */\n exports.putbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1;\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list after the item named in the operand\n */\n exports.putafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1;\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Replaces the item named in the operand with a number of items from the tail of the current list\n */\n exports.replace = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1;\n return (index === -1) ?\n results.slice(0, -count) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list to the head of the list\n */\n exports.putfirst = function (source, operator) {\n var results = prepare_results(source),\n count = parseInt(operator.suffix) || 1;\n return results.slice(-count).concat(results.slice(0, -count));\n };\n\n /*\n Moves a number of items from the head of the current list to the tail of the list\n */\n exports.putlast = function (source, operator) {\n var results = prepare_results(source),\n count = parseInt(operator.suffix) || 1;\n return results.slice(count).concat(results.slice(0, count));\n };\n\n /*\n Moves the item named in the operand a number of places forward or backward in the list\n */\n exports.move = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1,\n marker = results.splice(index, 1);\n return results.slice(0, index + count).concat(marker).concat(results.slice(index + count));\n };\n\n /*\n Returns the items from the current list that are after the item named in the operand\n */\n exports.allafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index === -1 || index > (results.length - 2)) ? [] :\n (operator.suffix) ? results.slice(index) :\n results.slice(index + 1);\n };\n\n /*\n Returns the items from the current list that are before the item named in the operand\n */\n exports.allbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index <= 0) ? [] :\n (operator.suffix) ? results.slice(0, index + 1) :\n results.slice(0, index);\n };\n\n /*\n Appends the items listed in the operand array to the tail of the current list\n */\n exports.append = function (source, operator) {\n var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || append.length;\n return (append.length === 0) ? results :\n (operator.prefix) ? results.concat(append.slice(-count)) :\n results.concat(append.slice(0, count));\n };\n\n /*\n Prepends the items listed in the operand array to the head of the current list\n */\n exports.prepend = function (source, operator) {\n var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || prepend.length;\n return (prepend.length === 0) ? results :\n (operator.prefix) ? prepend.slice(-count).concat(results) :\n prepend.slice(0, count).concat(results);\n };\n\n /*\n Returns all items from the current list except the items listed in the operand array\n */\n exports.remove = function (source, operator) {\n var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || array.length,\n p,\n len,\n index;\n len = array.length - 1;\n for (p = 0; p < count; ++p) {\n if (operator.prefix) {\n index = results.indexOf(array[len - p]);\n } else {\n index = results.indexOf(array[p]);\n }\n if (index !== -1) {\n results.splice(index, 1);\n }\n }\n return results;\n };\n\n /*\n Returns all items from the current list sorted in the order of the items in the operand array\n */\n exports.sortby = function (source, operator) {\n var results = prepare_results(source);\n if (!results || results.length < 2) {\n return results;\n }\n var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n results.sort(function (a, b) {\n return lookup.indexOf(a) - lookup.indexOf(b);\n });\n return results;\n };\n\n /*\n Removes all duplicate items from the current list\n */\n exports.unique = function (source, operator) {\n var results = prepare_results(source);\n var set = results.reduce(function (a, b) {\n if (a.indexOf(b) < 0) {\n a.push(b);\n }\n return a;\n }, []);\n return set;\n };\n})();\n",
"title": "$:/core/modules/filters/x-listops.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 $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\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 [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar 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/keyboard.js": {
"text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\tlookupName(\"shortcuts\");\n\t\t\t\tlookupName($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\");\n\t\t\t\tlookupName($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\t\t\t\tlookupName($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
"title": "$:/core/modules/keyboard.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/language.js": {
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
"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/displayshortcuts.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/macros/displayshortcuts.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 a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\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: \"\"}\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 p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\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/videoparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/mp4\"] = AudioParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/videoparser.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 ? \"–\" : \"—\";\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: ©\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\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"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: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params\n\t}];\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\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"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\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"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-Z0-9/.\\-_]+/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\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\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($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// 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\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\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/put.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\tvar req = new XMLHttpRequest();\n\treq.open(\"OPTIONS\",encodeURI(document.location.protocol + \"//\" + document.location.hostname + \":\" + document.location.port + document.location.pathname));\n\treq.onload = function() {\n\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\tself.serverAcceptsPuts = (this.status === 200 && !!this.getResponseHeader('dav'));\n\t};\n\treq.send();\n};\n\nPutSaver.prototype.save = function(text,method,callback) {\n\tif (!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar req = new XMLHttpRequest();\n\t// TODO: store/check ETags if supported by server, to protect against overwrites\n\t// Prompt: Do you want to save over this? Y/N\n\t// Merging would be ideal, and may be possible using future generic merge flow\n\treq.onload = function() {\n\t\tif (this.status === 200 || this.status === 201) {\n\t\t\tcallback(null); // success\n\t\t}\n\t\telse {\n\t\t\tcallback(this.responseText); // fail\n\t\t}\n\t};\n\treq.open(\"PUT\", encodeURI(window.location.href));\n\treq.setRequestHeader(\"Content-Type\", \"text/html;charset=UTF-8\");\n\treq.send(text);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/put.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($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"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($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"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($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\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,{variables: event.paramObject});\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_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.appVersion);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// 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// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\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 want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// 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\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\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, variables: variables}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\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/story.js": {
"text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
"title": "$:/core/modules/story.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/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.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
"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\thasBeenLazyLoaded: false\n\t\t};\n\t});\n};\n\n/*\nCreate an tiddlerInfo structure if it doesn't already exist\n*/\nSyncer.prototype.createTiddlerInfo = function(title) {\n\tif(!$tw.utils.hop(this.tiddlerInfo,title)) {\n\t\tthis.tiddlerInfo[title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1,\n\t\t\thasBeenLazyLoaded: false\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\thasBeenLazyLoaded: true\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($tw.language.getString(\"Error/RetrievingSkinny\") + \":\",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// Don't lazy load the same tiddler twice\n\tvar info = this.tiddlerInfo[title];\n\tif(!info || !info.hasBeenLazyLoaded) {\n\t\tthis.createTiddlerInfo(title);\n\t\tthis.tiddlerInfo[title].hasBeenLazyLoaded = true;\n\t\t// Queue up a sync task to load this tiddler\n\t\tthis.enqueueSyncTask({\n\t\t\ttype: \"load\",\n\t\t\ttitle: title\n\t\t});\t\t\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\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\tthis.createTiddlerInfo(task.title);\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 the sync adaptor is fully initialised and 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.syncadaptor.isReady() && this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(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.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"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($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/browser.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"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 first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function() {\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/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight;\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(),\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/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n})();\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($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + 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\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e);\n\t}\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; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
"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.setAttribute(\"rel\",\"noopener noreferrer\");\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: $tw.language.getString(\"Buttons/Close/Caption\")\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 = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\t// Store the popup details if not already there\n\tif(this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode\n\t\t});\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, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis.style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value;\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this.style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this.style) {\n\t\t\t\tstyle.push(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/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n})();\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/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
"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).toFixed(2) + \"ms\");\n\t\t\tfor(var m in self.measures) {\n\t\t\t\tself.logger.log(\"+\" + m + \": \" + self.measures[m].toFixed(2) + \"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 + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"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/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\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.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tObject.freeze(object);\n\tfor(key in object) {\n\t\tproperty = object[key];\n\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\tdeepFreeze(property);\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.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 \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn converter(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn converter(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 converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\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/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= str.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\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(this.wiki.getModificationFields(),tiddler,removeFields,this.wiki.getCreationFields()));\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-listops.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags;\n\t\tthis.wiki.setText(this.target, \"tags\", undefined, $tw.utils.stringifyList(\n\t\t\tthis.wiki.filterTiddlers(tagfilter, this)));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/action-listops.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\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"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\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\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\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\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(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\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.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"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(this.wiki.getCreationFields(),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 = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\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** 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.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\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(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\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-shortcut.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-shortcut.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 editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
"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\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || (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 entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"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} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler({title: this.mangleTitle, tags: tag});\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} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"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.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\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.actions = this.getAttribute(\"actions\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(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;\nvar MISSING_LINK_CONFIG_TITLE = \"$:/config/MissingLinks\";\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar 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}\n\tevent.stopPropagation();\n\treturn false;\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\tthis.hideMissingLinks = ($tw.wiki.getTiddlerText(MISSING_LINK_CONFIG_TITLE,\"yes\") === \"no\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip || changedTiddlers[MISSING_LINK_CONFIG_TITLE]) {\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\tthis.catchActions = this.getAttribute(\"actions\");\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\tif(this.catchActions) {\n\t\tthis.invokeActionString(this.catchActions,this);\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.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
"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\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\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// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\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// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\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\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\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.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\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: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\t$tw.wiki.renameTiddler(from,to);\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(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\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\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tif(values.indexOf(select.children[i].value) != -1) {\n\t\t\t\tselect.children[i].selected = true;\n\t\t\t}\n\t\t}\n\t\t\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\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\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.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} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"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: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"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 \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified();\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.getValueAsPlainWikified = function() {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function() {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"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\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"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/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\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/widgets/wikify.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/wikify.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki-bulkops.js": {
"text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nexports.renameTiddler = function(fromTitle,toTitle) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar tiddler = this.getTiddler(fromTitle);\n\t\tthis.addTiddler(new $tw.Tiddler(tiddler,{title: toTitle},this.getModificationFields()));\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar tags = (tiddler.fields.tags || []).slice(0),\n\t\t\t\tlist = (tiddler.fields.list || []).slice(0),\n\t\t\t\tisModified = false;\n\t\t\t// Rename tags\n\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\tif(title === fromTitle) {\n\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\tisModified = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// Rename lists\n\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\tif(title === fromTitle) {\n\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\tisModified = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(isModified) {\n\t\t\t\tself.addTiddler(new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields()));\n\t\t\t}\n\t\t});\n\t}\n}\n\n})();\n",
"title": "$:/core/modules/wiki-bulkops.js",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/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,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\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.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,defaultData);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t});\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.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\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type || \"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.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\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 --> "
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-text": {
"title": "$:/core/templates/canonical-uri-external-text",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "\\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/templates/raw-static-tiddler": {
"title": "$:/core/templates/raw-static-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\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]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-all": {
"title": "$:/core/save/lazy-all",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n{{$:/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{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
},
"$:/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=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\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=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n</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/AboveStory/tw2-plugin-check": {
"title": "$:/core/ui/AboveStory/tw2-plugin-check",
"tags": "$:/tags/AboveStory",
"text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"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 class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/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\">({{$:/language/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 tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><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/KeyboardShortcuts": {
"title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip=<<lingo Remove/Hint>>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n×\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[all[tiddlers+shadows][$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>prefix[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Modals/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
"subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
"text": "\\define install-plugin-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=\"\"\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\"\"\">\n{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\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=\"\"\"{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\"\"\">\n<em>\n{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}\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}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search{$:/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/Parsing": {
"title": "$:/core/ui/ControlPanel/Parsing",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define parsing-inner(typeCap)\n<li>\n<$checkbox tiddler=\"\"\"$:/config/WikiParserRules/$typeCap$/$(currentTiddler)$\"\"\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> ''<$text text=<<currentTiddler>>/>'': </$checkbox>\n</li>\n\\end\n\n\\define parsing-outer(typeLower,typeCap)\n<ul>\n<$list filter=\"[wikiparserrules[$typeLower$]]\">\n<<parsing-inner typeCap:\"$typeCap$\">>\n</$list>\n</ul>\n\\end\n\n<<lingo Hint>>\n\n! <<lingo Pragma/Caption>>\n\n<<parsing-outer typeLower:\"pragma\" typeCap:\"Pragma\">>\n\n! <<lingo Inline/Caption>>\n\n<<parsing-outer typeLower:\"inline\" typeCap:\"Inline\">>\n\n! <<lingo Block/Caption>>\n\n<<parsing-outer typeLower:\"block\" typeCap:\"Block\">>\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/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green\" style=\"background:blue;\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
"text": "<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
"text": "<<plugin-table plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
"text": "<<plugin-table theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define 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\">\n<<lingo NoInformation/Hint>>\n</$reveal>\n</div>\n</div>\n</$reveal>\n</$set>\n</$list>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\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/CamelCase": {
"title": "$:/core/ui/ControlPanel/Settings/CamelCase",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/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/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
"title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n <option value=\"above\"><<lingo \"OpenAbove\">></option>\n <option value=\"below\"><<lingo \"OpenBelow\">></option>\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/MissingLinks": {
"title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
"title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/TitleLinks": {
"title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/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/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(listItem)$\n\\end\n\n\\define toolbar-button()\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"> <$transclude tiddler={{$(listItem)$!!icon}}/> <$transclude tiddler=<<listItem>> field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i></$checkbox>\n\\end\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<<toolbar-button>>\n\n</$list>\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//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditTemplate/body/preview/output": {
"title": "$:/core/ui/EditTemplate/body/preview/output",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
"text": "<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
},
"$:/core/ui/EditTemplate/body/editor": {
"title": "$:/core/ui/EditTemplate/body/editor",
"text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n\n><$set\n\n name=\"targetTiddler\"\n value=<<currentTiddler>>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<<config-visibility-title>>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
},
"$:/core/ui/EditTemplate/body/toolbar/button": {
"title": "$:/core/ui/EditTemplate/body/toolbar/button",
"text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<<toolbar-button-tooltip>>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<<tooltip-text>>\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$list><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n popup=<<dropdown-state>>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<<tooltip-text>>\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button><$reveal\n\n state=<<dropdown-state>>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><div\n\n class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[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<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define 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\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<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\">×</$button>\n</span>\n</$vars>\n\\end\n\\define tag-body(colour,palette)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}}/>\n\\end\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}}/>\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": "<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[is[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\"/>\n"
},
"$:/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=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" 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 $:/tags/ViewToolbar",
"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": "<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\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>\n</$fieldmangler>\n"
},
"$:/core/ui/EditorToolbar/bold": {
"title": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}}",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
},
"$:/core/ui/EditorToolbar/clear-dropdown": {
"title": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
},
"$:/core/ui/EditorToolbar/clear": {
"title": "$:/core/ui/EditorToolbar/clear",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/erase",
"caption": "{{$:/language/Buttons/Clear/Caption}}",
"description": "{{$:/language/Buttons/Clear/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/editor-height-dropdown": {
"title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
},
"$:/core/ui/EditorToolbar/editor-height": {
"title": "$:/core/ui/EditorToolbar/editor-height",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/fixed-height",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
"description": "{{$:/language/Buttons/EditorHeight/Hint}}",
"condition": "[<targetTiddler>!is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/excise-dropdown": {
"title": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=<<qualify \"$:/state/Excise/NewTitle\">>\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
},
"$:/core/ui/EditorToolbar/excise": {
"title": "$:/core/ui/EditorToolbar/excise",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/excise",
"caption": "{{$:/language/Buttons/Excise/Caption}}",
"description": "{{$:/language/Buttons/Excise/Hint}}",
"condition": "[<targetTiddler>!is[image]]",
"shortcuts": "((excise))",
"dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/heading-1": {
"title": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}}",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-2": {
"title": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}}",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-3": {
"title": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}}",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}}",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}}",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}}",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
},
"$:/core/ui/EditorToolbar/italic": {
"title": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}}",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
},
"$:/core/ui/EditorToolbar/line-width-dropdown": {
"title": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/line-width": {
"title": "$:/core/ui/EditorToolbar/line-width",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/line-width",
"caption": "{{$:/language/Buttons/LineWidth/Caption}}",
"description": "{{$:/language/Buttons/LineWidth/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>"
},
"$:/core/ui/EditorToolbar/link-dropdown": {
"title": "$:/core/ui/EditorToolbar/link-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define link-actions()\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"make-link\"\n\ttext={{$(linkTiddler)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<searchTiddler>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<linkTiddler>>\n/>\n\\end\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\">\n\n<$edit-text tiddler=<<searchTiddler>> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<<searchTiddler>> text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n\n<$reveal tag=\"div\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<link-actions>> to=<<linkTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>\n"
},
"$:/core/ui/EditorToolbar/link": {
"title": "$:/core/ui/EditorToolbar/link",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/link",
"caption": "{{$:/language/Buttons/Link/Caption}}",
"description": "{{$:/language/Buttons/Link/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((link))",
"dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/list-bullet": {
"title": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}}",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-number": {
"title": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}}",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-block": {
"title": "$:/core/ui/EditorToolbar/mono-block",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-block",
"caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
"description": "{{$:/language/Buttons/MonoBlock/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((mono-block))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-line": {
"title": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}}",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/core/ui/EditorToolbar/more-dropdown": {
"title": "$:/core/ui/EditorToolbar/more-dropdown",
"text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
},
"$:/core/ui/EditorToolbar/more": {
"title": "$:/core/ui/EditorToolbar/more",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/down-arrow",
"caption": "{{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"condition": "[<targetTiddler>]",
"dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/opacity-dropdown": {
"title": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/EditorToolbar/opacity": {
"title": "$:/core/ui/EditorToolbar/opacity",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/opacity",
"caption": "{{$:/language/Buttons/Opacity/Caption}}",
"description": "{{$:/language/Buttons/Opacity/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
},
"$:/core/ui/EditorToolbar/paint-dropdown": {
"title": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/paint": {
"title": "$:/core/ui/EditorToolbar/paint",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/paint",
"caption": "{{$:/language/Buttons/Paint/Caption}}",
"description": "{{$:/language/Buttons/Paint/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
},
"$:/core/ui/EditorToolbar/picture-dropdown": {
"title": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/picture": {
"title": "$:/core/ui/EditorToolbar/picture",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/picture",
"caption": "{{$:/language/Buttons/Picture/Caption}}",
"description": "{{$:/language/Buttons/Picture/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((picture))",
"dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/preview-type-dropdown": {
"title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
"text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/preview-type": {
"title": "$:/core/ui/EditorToolbar/preview-type",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/chevron-down",
"caption": "{{$:/language/Buttons/PreviewType/Caption}}",
"description": "{{$:/language/Buttons/PreviewType/Hint}}",
"condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
"button-classes": "tc-text-editor-toolbar-item-adjunct",
"dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
},
"$:/core/ui/EditorToolbar/preview": {
"title": "$:/core/ui/EditorToolbar/preview",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/preview-open",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/Preview/Caption}}",
"description": "{{$:/language/Buttons/Preview/Hint}}",
"condition": "[<targetTiddler>]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((preview))",
"text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/quote": {
"title": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}}",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
},
"$:/core/ui/EditorToolbar/size-dropdown": {
"title": "$:/core/ui/EditorToolbar/size-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> × <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
},
"$:/core/ui/EditorToolbar/size": {
"title": "$:/core/ui/EditorToolbar/size",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/size",
"caption": "{{$:/language/Buttons/Size/Caption}}",
"description": "{{$:/language/Buttons/Size/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/stamp-dropdown": {
"title": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$view tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" mode=\"inline\"/>\n\n</$view>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
},
"$:/core/ui/EditorToolbar/stamp": {
"title": "$:/core/ui/EditorToolbar/stamp",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/stamp",
"caption": "{{$:/language/Buttons/Stamp/Caption}}",
"description": "{{$:/language/Buttons/Stamp/Hint}}",
"condition": "[<targetTiddler>!is[image]]",
"shortcuts": "((stamp))",
"dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/strikethrough": {
"title": "$:/core/ui/EditorToolbar/strikethrough",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/strikethrough",
"caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
"description": "{{$:/language/Buttons/Strikethrough/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((strikethrough))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
},
"$:/core/ui/EditorToolbar/subscript": {
"title": "$:/core/ui/EditorToolbar/subscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/subscript",
"caption": "{{$:/language/Buttons/Subscript/Caption}}",
"description": "{{$:/language/Buttons/Subscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((subscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
},
"$:/core/ui/EditorToolbar/superscript": {
"title": "$:/core/ui/EditorToolbar/superscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/superscript",
"caption": "{{$:/language/Buttons/Superscript/Caption}}",
"description": "{{$:/language/Buttons/Superscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((superscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
},
"$:/core/ui/EditorToolbar/underline": {
"title": "$:/core/ui/EditorToolbar/underline",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/underline",
"caption": "{{$:/language/Buttons/Underline/Caption}}",
"description": "{{$:/language/Buttons/Underline/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((underline))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/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}} <$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}} <$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/fold-all": {
"title": "$:/core/ui/Buttons/fold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
"description": "{{$:/language/Buttons/FoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>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•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/language\" text=<<currentTiddler>>>\n \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-image": {
"title": "$:/core/ui/Buttons/new-image",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
"description": "{{$:/language/Buttons/NewImage/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=\"image/jpeg\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\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•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/view\" text=<<storyview>>>\n \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•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/theme\" text=<<themeTitle>>>\n \n</$reveal>\n</span>\n<$view tiddler=<<themeTitle>> field=\"name\"/>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/unfold-all": {
"title": "$:/core/ui/Buttons/unfold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
"description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\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\" animate=\"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\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\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\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<<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\">×</$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<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\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<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search{$(searchTiddler)$}]\"/>\"\"\">\n{{$:/core/images/down-arrow}} {{$:/language/Search/Matches}}\n</$set>\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 tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n{{$:/core/ui/SearchResults}}\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" />\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<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$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\" class=\"tc-drop-down\"><$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list> \n<hr>\n<$list filter=\"[all[current]tagging[]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</$reveal>\n</$vars>\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": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\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{{||$:/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": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>"
},
"$:/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/unfold": {
"title": "$:/core/ui/ViewTemplate/unfold",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$\n\\end\n\\define folded-state()\n$:/state/folded/$(currentTiddler)$\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/fold-bar": {
"title": "$:/core/ui/Buttons/fold-bar",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/language/Buttons/Fold/FoldBar/Caption}}",
"description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
"text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
},
"$:/core/ui/Buttons/fold-others": {
"title": "$:/core/ui/Buttons/fold-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
"description": "{{$:/language/Buttons/FoldOthers/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldOthers/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/fold": {
"title": "$:/core/ui/Buttons/fold",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
"description": "{{$:/language/Buttons/Fold/Hint}}",
"text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\"><$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button></$reveal><$reveal type=\"match\" state=<<folded-state>> text=\"hide\" default=\"show\"><$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button></$reveal>"
},
"$:/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": "#444"
},
"$:/config/BitmapEditor/ImageSizes": {
"title": "$:/config/BitmapEditor/ImageSizes",
"text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3px"
},
"$:/config/BitmapEditor/LineWidths": {
"title": "$:/config/BitmapEditor/LineWidths",
"text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
},
"$:/config/BitmapEditor/Opacities": {
"title": "$:/config/BitmapEditor/Opacities",
"text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
},
"$:/config/BitmapEditor/Opacity": {
"title": "$:/config/BitmapEditor/Opacity",
"text": "1.0"
},
"$:/config/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/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/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/MissingLinks": {
"title": "$:/config/MissingLinks",
"text": "yes"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/OfficialPluginLibrary": {
"title": "$:/config/OfficialPluginLibrary",
"tags": "$:/tags/PluginLibrary",
"url": "http://tiddlywiki.com/library/v5.1.13/index.html",
"caption": "{{$:/language/OfficialPluginLibrary}}",
"text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
},
"$:/config/Navigation/openLinkFromInsideRiver": {
"title": "$:/config/Navigation/openLinkFromInsideRiver",
"text": "below"
},
"$:/config/Navigation/openLinkFromOutsideRiver": {
"title": "$:/config/Navigation/openLinkFromOutsideRiver",
"text": "top"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/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/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
"text": "hide"
},
"$:/config/Performance/Instrumentation": {
"title": "$:/config/Performance/Instrumentation",
"text": "no"
},
"$:/config/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/ShortcutInfo/bold": {
"title": "$:/config/ShortcutInfo/bold",
"text": "{{$:/language/Buttons/Bold/Hint}}"
},
"$:/config/ShortcutInfo/cancel-edit-tiddler": {
"title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
"text": "{{$:/language/Buttons/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/excise": {
"title": "$:/config/ShortcutInfo/excise",
"text": "{{$:/language/Buttons/Excise/Hint}}"
},
"$:/config/ShortcutInfo/heading-1": {
"title": "$:/config/ShortcutInfo/heading-1",
"text": "{{$:/language/Buttons/Heading1/Hint}}"
},
"$:/config/ShortcutInfo/heading-2": {
"title": "$:/config/ShortcutInfo/heading-2",
"text": "{{$:/language/Buttons/Heading2/Hint}}"
},
"$:/config/ShortcutInfo/heading-3": {
"title": "$:/config/ShortcutInfo/heading-3",
"text": "{{$:/language/Buttons/Heading3/Hint}}"
},
"$:/config/ShortcutInfo/heading-4": {
"title": "$:/config/ShortcutInfo/heading-4",
"text": "{{$:/language/Buttons/Heading4/Hint}}"
},
"$:/config/ShortcutInfo/heading-5": {
"title": "$:/config/ShortcutInfo/heading-5",
"text": "{{$:/language/Buttons/Heading5/Hint}}"
},
"$:/config/ShortcutInfo/heading-6": {
"title": "$:/config/ShortcutInfo/heading-6",
"text": "{{$:/language/Buttons/Heading6/Hint}}"
},
"$:/config/ShortcutInfo/italic": {
"title": "$:/config/ShortcutInfo/italic",
"text": "{{$:/language/Buttons/Italic/Hint}}"
},
"$:/config/ShortcutInfo/link": {
"title": "$:/config/ShortcutInfo/link",
"text": "{{$:/language/Buttons/Link/Hint}}"
},
"$:/config/ShortcutInfo/list-bullet": {
"title": "$:/config/ShortcutInfo/list-bullet",
"text": "{{$:/language/Buttons/ListBullet/Hint}}"
},
"$:/config/ShortcutInfo/list-number": {
"title": "$:/config/ShortcutInfo/list-number",
"text": "{{$:/language/Buttons/ListNumber/Hint}}"
},
"$:/config/ShortcutInfo/mono-block": {
"title": "$:/config/ShortcutInfo/mono-block",
"text": "{{$:/language/Buttons/MonoBlock/Hint}}"
},
"$:/config/ShortcutInfo/mono-line": {
"title": "$:/config/ShortcutInfo/mono-line",
"text": "{{$:/language/Buttons/MonoLine/Hint}}"
},
"$:/config/ShortcutInfo/picture": {
"title": "$:/config/ShortcutInfo/picture",
"text": "{{$:/language/Buttons/Picture/Hint}}"
},
"$:/config/ShortcutInfo/preview": {
"title": "$:/config/ShortcutInfo/preview",
"text": "{{$:/language/Buttons/Preview/Hint}}"
},
"$:/config/ShortcutInfo/quote": {
"title": "$:/config/ShortcutInfo/quote",
"text": "{{$:/language/Buttons/Quote/Hint}}"
},
"$:/config/ShortcutInfo/save-tiddler": {
"title": "$:/config/ShortcutInfo/save-tiddler",
"text": "{{$:/language/Buttons/Save/Hint}}"
},
"$:/config/ShortcutInfo/stamp": {
"title": "$:/config/ShortcutInfo/stamp",
"text": "{{$:/language/Buttons/Stamp/Hint}}"
},
"$:/config/ShortcutInfo/strikethrough": {
"title": "$:/config/ShortcutInfo/strikethrough",
"text": "{{$:/language/Buttons/Strikethrough/Hint}}"
},
"$:/config/ShortcutInfo/subscript": {
"title": "$:/config/ShortcutInfo/subscript",
"text": "{{$:/language/Buttons/Subscript/Hint}}"
},
"$:/config/ShortcutInfo/superscript": {
"title": "$:/config/ShortcutInfo/superscript",
"text": "{{$:/language/Buttons/Superscript/Hint}}"
},
"$:/config/ShortcutInfo/underline": {
"title": "$:/config/ShortcutInfo/underline",
"text": "{{$:/language/Buttons/Underline/Hint}}"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
},
"$:/config/TextEditor/EditorHeight/Height": {
"title": "$:/config/TextEditor/EditorHeight/Height",
"text": "400px"
},
"$:/config/TextEditor/EditorHeight/Mode": {
"title": "$:/config/TextEditor/EditorHeight/Mode",
"text": "auto"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/Tiddlers/TitleLinks": {
"title": "$:/config/Tiddlers/TitleLinks",
"text": "no"
},
"$:/config/Toolbar/ButtonClass": {
"title": "$:/config/Toolbar/ButtonClass",
"text": "tc-btn-invisible"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
"text": "hide"
},
"$:/config/shortcuts-mac/bold": {
"title": "$:/config/shortcuts-mac/bold",
"text": "meta-B"
},
"$:/config/shortcuts-mac/italic": {
"title": "$:/config/shortcuts-mac/italic",
"text": "meta-I"
},
"$:/config/shortcuts-mac/underline": {
"title": "$:/config/shortcuts-mac/underline",
"text": "meta-U"
},
"$:/config/shortcuts-not-mac/bold": {
"title": "$:/config/shortcuts-not-mac/bold",
"text": "ctrl-B"
},
"$:/config/shortcuts-not-mac/italic": {
"title": "$:/config/shortcuts-not-mac/italic",
"text": "ctrl-I"
},
"$:/config/shortcuts-not-mac/underline": {
"title": "$:/config/shortcuts-not-mac/underline",
"text": "ctrl-U"
},
"$:/config/shortcuts/cancel-edit-tiddler": {
"title": "$:/config/shortcuts/cancel-edit-tiddler",
"text": "escape"
},
"$:/config/shortcuts/excise": {
"title": "$:/config/shortcuts/excise",
"text": "ctrl-E"
},
"$:/config/shortcuts/heading-1": {
"title": "$:/config/shortcuts/heading-1",
"text": "ctrl-1"
},
"$:/config/shortcuts/heading-2": {
"title": "$:/config/shortcuts/heading-2",
"text": "ctrl-2"
},
"$:/config/shortcuts/heading-3": {
"title": "$:/config/shortcuts/heading-3",
"text": "ctrl-3"
},
"$:/config/shortcuts/heading-4": {
"title": "$:/config/shortcuts/heading-4",
"text": "ctrl-4"
},
"$:/config/shortcuts/heading-5": {
"title": "$:/config/shortcuts/heading-5",
"text": "ctrl-5"
},
"$:/config/shortcuts/heading-6": {
"title": "$:/config/shortcuts/heading-6",
"text": "ctrl-6"
},
"$:/config/shortcuts/link": {
"title": "$:/config/shortcuts/link",
"text": "ctrl-L"
},
"$:/config/shortcuts/list-bullet": {
"title": "$:/config/shortcuts/list-bullet",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/list-number": {
"title": "$:/config/shortcuts/list-number",
"text": "ctrl-shift-N"
},
"$:/config/shortcuts/mono-block": {
"title": "$:/config/shortcuts/mono-block",
"text": "ctrl-shift-M"
},
"$:/config/shortcuts/mono-line": {
"title": "$:/config/shortcuts/mono-line",
"text": "ctrl-M"
},
"$:/config/shortcuts/picture": {
"title": "$:/config/shortcuts/picture",
"text": "ctrl-shift-I"
},
"$:/config/shortcuts/preview": {
"title": "$:/config/shortcuts/preview",
"text": "alt-P"
},
"$:/config/shortcuts/quote": {
"title": "$:/config/shortcuts/quote",
"text": "ctrl-Q"
},
"$:/config/shortcuts/save-tiddler": {
"title": "$:/config/shortcuts/save-tiddler",
"text": "ctrl+enter"
},
"$:/config/shortcuts/stamp": {
"title": "$:/config/shortcuts/stamp",
"text": "ctrl-S"
},
"$:/config/shortcuts/strikethrough": {
"title": "$:/config/shortcuts/strikethrough",
"text": "ctrl-T"
},
"$:/config/shortcuts/subscript": {
"title": "$:/config/shortcuts/subscript",
"text": "ctrl-shift-B"
},
"$:/config/shortcuts/superscript": {
"title": "$:/config/shortcuts/superscript",
"text": "ctrl-shift-P"
},
"$:/config/WikiParserRules/Inline/wikilink": {
"title": "$:/config/WikiParserRules/Inline/wikilink",
"text": "enable"
},
"$:/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/colour-picker": {
"title": "$:/core/macros/colour-picker",
"tags": "$:/tags/Macro",
"text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<div style=\"background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/> \n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
},
"$:/core/macros/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/image-picker": {
"title": "$:/core/macros/image-picker",
"tags": "$:/tags/Macro",
"text": "\\define image-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n\n$actions$\n\n<$transclude tiddler=<<imageTitle>>/>\n\n</$button>\n\\end\n\n\\define image-picker(actions,subfilter:\"\")\n<div class=\"tc-image-chooser\">\n\n<$list filter=\"[all[shadows+tiddlers]is[image]$subfilter$!has[draft.of]] -[type[application/pdf]] +[sort[title]]\" variable=\"imageTitle\">\n\n<$macrocall $name=\"image-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n\n</$list>\n\n</div>\n\n\\end\n\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\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<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/thumbnails": {
"title": "$:/core/macros/thumbnails",
"tags": "$:/tags/Macro",
"text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
},
"$:/core/macros/timeline": {
"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-empty-message()\n<<toc-linked-expandable-body tag:\"\"\"$(tag)$\"\"\" sort:\"\"\"$(sort)$\"\"\" itemClassFilter:\"\"\"$(itemClassFilter)$\"\"\">>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter)\n<$vars tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$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-expandable-empty-message>>>\n<<toc-unlinked-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n</$list>\n</$list>\n</ol>\n</$vars>\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-empty-message()\n<<toc-linked-selective-expandable-body tag:\"\"\"$(tag)$\"\"\" sort:\"\"\"$(sort)$\"\"\" itemClassFilter:\"\"\"$(itemClassFilter)$\"\"\">>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter)\n<$vars tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$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-selective-expandable-empty-message>>>\n<<toc-unlinked-selective-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"$itemClassFilter$\"\"\">>\n</$list>\n</$list>\n</ol>\n</$vars>\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"
},
"$:/core/macros/translink": {
"title": "$:/core/macros/translink",
"tags": "$:/tags/Macro",
"text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
},
"$:/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}}>•</$reveal><$reveal state=\"$:/palette\" type=\"nomatch\" text={{!!title}}> </$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/AdvancedSearch/FilterButton": {
"title": "$:/tags/AdvancedSearch/FilterButton",
"list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/ControlPanel/Plugins": {
"title": "$:/tags/ControlPanel/Plugins",
"list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/EditorToolbar": {
"title": "$:/tags/EditorToolbar",
"list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
},
"$:/tags/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/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/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/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "\\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}}>•</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}> </$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>"
}
}
}
[[Sommaire]]
no
$:/palettes/Blanca
{
"tiddlers": {
"$:/plugins/tiddlywiki/filesystem/filesystemadaptor.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/filesystem/filesystemadaptor.js\ntype: application/javascript\nmodule-type: syncadaptor\n\nA sync adaptor module for synchronising with the local filesystem via node.js APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Get a reference to the file system\nvar fs = $tw.node ? require(\"fs\") : null,\n\tpath = $tw.node ? require(\"path\") : null;\n\nfunction FileSystemAdaptor(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.logger = new $tw.utils.Logger(\"FileSystem\");\n\t// Create the <wiki>/tiddlers folder if it doesn't exist\n\t$tw.utils.createDirectory($tw.boot.wikiTiddlersPath);\n}\n\nFileSystemAdaptor.prototype.isReady = function() {\n\t// The file system adaptor is always ready\n\treturn true;\n};\n\nFileSystemAdaptor.prototype.getTiddlerInfo = function(tiddler) {\n\treturn {};\n};\n\n$tw.config.typeInfo = {\n\t\"text/vnd.tiddlywiki\": {\n\t\tfileType: \"application/x-tiddler\",\n\t\textension: \".tid\"\n\t}\n};\n\nFileSystemAdaptor.prototype.getTiddlerFileInfo = function(tiddler,callback) {\n\t// See if we've already got information about this file\n\tvar self = this,\n\t\ttitle = tiddler.fields.title,\n\t\tfileInfo = $tw.boot.files[title];\n\t// Get information about how to save tiddlers of this type\n\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.typeInfo[type] ||\n\t\t$tw.config.contentTypeInfo[type] ||\n\t\t$tw.config.typeInfo[\"text/vnd.tiddlywiki\"];\n\tvar extension = typeInfo.extension || \"\";\n\tif(!fileInfo) {\n\t\t// If not, we'll need to generate it\n\t\t// Start by getting a list of the existing files in the directory\n\t\tfs.readdir($tw.boot.wikiTiddlersPath,function(err,files) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Assemble the new fileInfo\n\t\t\tfileInfo = {};\n\t\t\tfileInfo.filepath = $tw.boot.wikiTiddlersPath + path.sep + self.generateTiddlerFilename(title,extension,files);\n\t\t\tfileInfo.type = typeInfo.fileType || tiddler.fields.type;\n\t\t\tfileInfo.hasMetaFile = typeInfo.hasMetaFile;\n\t\t\t// Save the newly created fileInfo\n\t\t\t$tw.boot.files[title] = fileInfo;\n\t\t\t// Pass it to the callback\n\t\t\tcallback(null,fileInfo);\n\t\t});\n\t} else {\n\t\t// Otherwise just invoke the callback\n\t\tcallback(null,fileInfo);\n\t}\n};\n\n/*\nTransliterate string from cyrillic russian to latin\n*/\n var transliterate = function(cyrillyc) {\n\tvar a = {\"Ё\":\"YO\",\"Й\":\"I\",\"Ц\":\"TS\",\"У\":\"U\",\"К\":\"K\",\"Е\":\"E\",\"Н\":\"N\",\"Г\":\"G\",\"Ш\":\"SH\",\"Щ\":\"SCH\",\"З\":\"Z\",\"Х\":\"H\",\"Ъ\":\"'\",\"ё\":\"yo\",\"й\":\"i\",\"ц\":\"ts\",\"у\":\"u\",\"к\":\"k\",\"е\":\"e\",\"н\":\"n\",\"г\":\"g\",\"ш\":\"sh\",\"щ\":\"sch\",\"з\":\"z\",\"х\":\"h\",\"ъ\":\"'\",\"Ф\":\"F\",\"Ы\":\"I\",\"В\":\"V\",\"А\":\"a\",\"П\":\"P\",\"Р\":\"R\",\"О\":\"O\",\"Л\":\"L\",\"Д\":\"D\",\"Ж\":\"ZH\",\"Э\":\"E\",\"ф\":\"f\",\"ы\":\"i\",\"в\":\"v\",\"а\":\"a\",\"п\":\"p\",\"р\":\"r\",\"о\":\"o\",\"л\":\"l\",\"д\":\"d\",\"ж\":\"zh\",\"э\":\"e\",\"Я\":\"Ya\",\"Ч\":\"CH\",\"С\":\"S\",\"М\":\"M\",\"И\":\"I\",\"Т\":\"T\",\"Ь\":\"'\",\"Б\":\"B\",\"Ю\":\"YU\",\"я\":\"ya\",\"ч\":\"ch\",\"с\":\"s\",\"м\":\"m\",\"и\":\"i\",\"т\":\"t\",\"ь\":\"'\",\"б\":\"b\",\"ю\":\"yu\"};\n\treturn cyrillyc.split(\"\").map(function (char) {\n\t\treturn a[char] || char;\n\t}).join(\"\");\n};\n\n/*\nGiven a list of filters, apply every one in turn to source, and return the first result of the first filter with non-empty result.\n*/\nFileSystemAdaptor.prototype.findFirstFilter = function(filters,source) {\n\tvar numFilters = filters.length;\n\tfor(var i=0; i<numFilters; i++) {\n\t\tvar result = this.wiki.filterTiddlers(filters[i],null,source);\n\t\tif(result.length > 0) {\n\t\t\treturn result[0];\n\t\t}\n\t}\n};\n\n/*\nAdd file extension to a file path if it doesn't already exist.\n*/\nFileSystemAdaptor.addFileExtension = function(file,extension) {\n\treturn $tw.utils.strEndsWith(file,extension) ? file : file + extension;\n};\n\n\n/*\nGiven a tiddler title and an array of existing filenames, generate a new legal filename for the title, case insensitively avoiding the array of existing filenames\n*/\nFileSystemAdaptor.prototype.generateTiddlerFilename = function(title,extension,existingFilenames) {\n\tvar baseFilename;\n\t// Check whether the user has configured a tiddler -> pathname mapping\n\tvar pathNameFilters = this.wiki.getTiddlerText(\"$:/config/FileSystemPaths\");\n\tif(pathNameFilters) {\n\t\tvar source = this.wiki.makeTiddlerIterator([title]);\n\t\tvar result = this.findFirstFilter(pathNameFilters.split(\"\\n\"),source);\n\t\tif(result) {\n\t\t\t// interpret \"/\" as path separator\n\t\t\tbaseFilename = result.replace(/\\//g,path.sep);\n\t\t}\n\t}\n\tif(!baseFilename) {\n\t\t// no mapping configured, or it did not match this tiddler\n\t\t// in this case, we fall back to legacy behaviour\n\t\tbaseFilename = title.replace(/\\//g,\"_\");\n\t}\n\t// Remove any of the characters that are illegal in Windows filenames\n\tvar baseFilename = transliterate(baseFilename.replace(/<|>|\\:|\\\"|\\\\|\\||\\?|\\*|\\^|\\s/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(baseFilename.length > 200) {\n\t\tbaseFilename = baseFilename.substr(0,200);\n\t}\n\t// Start with the base filename plus the extension\n\tvar filename = FileSystemAdaptor.addFileExtension(baseFilename,extension),\n\t\tcount = 1;\n\t// Add a discriminator if we're clashing with an existing filename while\n\t// handling case-insensitive filesystems (NTFS, FAT/FAT32, etc.)\n\twhile(existingFilenames.some(function(value) {return value.toLocaleLowerCase() === filename.toLocaleLowerCase();})) {\n\t\tfilename = baseFilename + \" \" + (count++) + extension;\n\t}\n\treturn filename;\n};\n\n/*\nSave a tiddler and invoke the callback with (err,adaptorInfo,revision)\n*/\nFileSystemAdaptor.prototype.saveTiddler = function(tiddler,callback) {\n\tvar self = this;\n\tthis.getTiddlerFileInfo(tiddler,function(err,fileInfo) {\n\t\tvar template, content, encoding, filepath,\n\t\t\t_finish = function() {\n\t\t\t\tcallback(null, {}, 0);\n\t\t\t};\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tvar error = $tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\t\tif(error) {\n\t\t\treturn callback(error);\n\t\t}\n\t\tvar typeInfo = $tw.config.contentTypeInfo[fileInfo.type];\n\t\tif(fileInfo.hasMetaFile || typeInfo.encoding === \"base64\") {\n\t\t\t// Save the tiddler as a separate body and meta file\n\t\t\tfilepath = fileInfo.filepath;\n\t\t\tfs.writeFile(filepath,tiddler.fields.text,{encoding: typeInfo.encoding},function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\tcontent = self.wiki.renderTiddler(\"text/plain\",\"$:/core/templates/tiddler-metadata\",{variables: {currentTiddler: tiddler.fields.title}});\n\t\t\t\tfilepath = FileSystemAdaptor.addFileExtension(fileInfo.filepath,\".meta\");\n\t\t\t\tfs.writeFile(filepath,content,{encoding: \"utf8\"},function (err) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tself.logger.log(\"Saved file\",filepath);\n\t\t\t\t\t_finish();\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\t// Save the tiddler as a self contained templated file\n\t\t\tcontent = self.wiki.renderTiddler(\"text/plain\",\"$:/core/templates/tid-tiddler\",{variables: {currentTiddler: tiddler.fields.title}});\n\t\t\tfilepath = FileSystemAdaptor.addFileExtension(fileInfo.filepath,\".tid\");\n\t\t\tfs.writeFile(filepath,content,{encoding: \"utf8\"},function (err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\tself.logger.log(\"Saved file\",filepath);\n\t\t\t\t_finish();\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLoad a tiddler and invoke the callback with (err,tiddlerFields)\n\nWe don't need to implement loading for the file system adaptor, because all the tiddler files will have been loaded during the boot process.\n*/\nFileSystemAdaptor.prototype.loadTiddler = function(title,callback) {\n\tcallback(null,null);\n};\n\n/*\nDelete a tiddler and invoke the callback with (err)\n*/\nFileSystemAdaptor.prototype.deleteTiddler = function(title,callback,options) {\n\tvar self = this,\n\t\tfileInfo = $tw.boot.files[title];\n\t// Only delete the tiddler if we have writable information for the file\n\tif(fileInfo) {\n\t\t// Delete the file\n\t\tfs.unlink(fileInfo.filepath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.logger.log(\"Deleted file\",fileInfo.filepath);\n\t\t\t// Delete the metafile if present\n\t\t\tif(fileInfo.hasMetaFile) {\n\t\t\t\tfs.unlink(FileSystemAdaptor.addFileExtension(fileInfo.filepath,\".meta\"),function(err) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\t$tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null);\n\t}\n};\n\nif(fs) {\n\texports.adaptorClass = FileSystemAdaptor;\n}\n\n})();\n",
"title": "$:/plugins/tiddlywiki/filesystem/filesystemadaptor.js",
"type": "application/javascript",
"module-type": "syncadaptor"
},
"$:/plugins/tiddlywiki/filesystem/readme": {
"title": "$:/plugins/tiddlywiki/filesystem/readme",
"text": "The filesystem plugin is used under Node.js to synchronise tiddler changes back to the file system. It is inert when used in the browser.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/filesystem]]\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/highlight/highlight.js": {
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/highlight/highlight.js",
"module-type": "library",
"text": "var hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define(\"hljs\",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,\"&\").replace(/</gm,\"<\").replace(/>/gm,\">\")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=/\\blang(?:uage)?-([\\w-]+)\\b/i.exec(i))return w(t[1])?t[1]:\"no-highlight\";for(i=i.split(/\\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:\"start\",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}f+=\"<\"+t(e)+Array.prototype.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){f+=\"</\"+t(e)+\">\"}function c(e){(\"start\"==e.event?o:u)(e.node)}for(var s=0,f=\"\",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else\"start\"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof a.k?c(\"keyword\",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\\b\\w+\\b/,!0),i&&(a.bK&&(a.b=\"\\\\b(\"+a.bK.split(\" \").join(\"|\")+\")\\\\b\"),a.b||(a.b=/\\B|\\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\\B|\\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||\"\",a.eW&&i.tE&&(a.tE+=(a.e?\"|\":\"\")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?\"\":E.classPrefix,i='<span class=\"'+a,o=t?\"\":\"</span>\";return i+=e+'\">',i+n+o}function p(){if(!L.k)return n(y);var e=\"\",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e=\"string\"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,\"\",!0):\"\";e.rB?(k+=r,y=\"\"):e.eB?(k+=n(t)+r,y=\"\"):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+=\"</span>\"),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y=\"\",a.starts&&v(a.starts,\"\"),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme \"'+t+'\" for mode \"'+(L.cN||\"<unnamed>\")+'\"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var R,L=i||N,M={},k=\"\";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,\"\",!0)+k);var y=\"\",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+=\"</span>\");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\\t)+)/gm,function(e,n){return n.replace(/\\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\\n/g,\"<br>\")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),t.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");Array.prototype.forEach.call(e,p)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\\b/},e.C=function(n,t,r){var a=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),a},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"header\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"blockquote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"`.+?`\"},{b:\"^( {4}|\t)\",e:\"$\",r:0}]},{cN:\"horizontal_rule\",b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"link_label\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,r:0},{cN:\"link_url\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"link_reference\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],r:10},{b:\"^\\\\[.+\\\\]:\",rB:!0,c:[{cN:\"link_reference\",b:\"\\\\[\",e:\"\\\\]:\",eB:!0,eE:!0,starts:{cN:\"link_url\",e:\"$\"}}]}]}});hljs.registerLanguage(\"ruby\",function(e){var c=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",r=\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",b={cN:\"doctag\",b:\"@[A-Za-z]+\"},a={cN:\"value\",b:\"#<\",e:\">\"},n=[e.C(\"#\",\"$\",{c:[b]}),e.C(\"^\\\\=begin\",\"^\\\\=end\",{c:[b],r:10}),e.C(\"^__END__\",\"\\\\n$\")],s={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:r},t={cN:\"string\",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/`/,e:/`/},{b:\"%[qQwWx]?\\\\(\",e:\"\\\\)\"},{b:\"%[qQwWx]?\\\\[\",e:\"\\\\]\"},{b:\"%[qQwWx]?{\",e:\"}\"},{b:\"%[qQwWx]?<\",e:\">\"},{b:\"%[qQwWx]?/\",e:\"/\"},{b:\"%[qQwWx]?%\",e:\"%\"},{b:\"%[qQwWx]?-\",e:\"-\"},{b:\"%[qQwWx]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/}]},i={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",k:r},d=[t,a,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[e.inherit(e.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{cN:\"inheritance\",b:\"<\\\\s*\",c:[{cN:\"parent\",b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(n)},{cN:\"function\",bK:\"def\",e:\"$|;\",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:\"constant\",b:\"(::)?(\\\\b[A-Z]\\\\w*(::)?)+\",r:0},{cN:\"symbol\",b:e.UIR+\"(\\\\!|\\\\?)?:\",r:0},{cN:\"symbol\",b:\":\",c:[t,{b:c}],r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[a,{cN:\"regexp\",c:[e.BE,s],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o=\"[>?]>\",l=\"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>\",u=\"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>\",N=[{b:/^\\s*=>/,cN:\"status\",starts:{e:\"$\",c:d}},{cN:\"prompt\",b:\"^(\"+o+\"|\"+l+\"|\"+u+\")\",starts:{e:\"$\",c:d}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:r,c:n.concat(N).concat(d)}});hljs.registerLanguage(\"makefile\",function(e){var a={cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]};return{aliases:[\"mk\",\"mak\"],c:[e.HCM,{b:/^\\w+\\s*\\W*=/,rB:!0,r:0,starts:{cN:\"constant\",e:/\\s*\\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:\"title\",b:/^[\\w]+:\\s*$/},{cN:\"phony\",b:/^\\.PHONY:/,e:/$/,k:\".PHONY\",l:/[\\.\\w]+/},{b:/^\\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage(\"json\",function(e){var t={literal:\"true false null\"},i=[e.QSM,e.CNM],l={cN:\"value\",e:\",\",eW:!0,eE:!0,c:i,k:t},c={b:\"{\",e:\"}\",c:[{cN:\"attribute\",b:'\\\\s*\"',e:'\"\\\\s*:\\\\s*',eB:!0,eE:!0,c:[e.BE],i:\"\\\\n\",starts:l}],i:\"\\\\S\"},n={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(l,{cN:null})],i:\"\\\\S\"};return i.splice(i.length,0,c,n),{c:i,k:t,i:\"\\\\S\"}});hljs.registerLanguage(\"xml\",function(t){var s=\"[A-Za-z0-9\\\\._:-]+\",c={b:/<\\?(php)?(?!\\w)/,e:/\\?>/,sL:\"php\"},e={eW:!0,i:/</,r:0,c:[c,{cN:\"attribute\",b:s,r:0},{b:\"=\",r:0,c:[{cN:\"value\",c:[c],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\\/>]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},t.C(\"<!--\",\"-->\",{r:10}),{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[e],starts:{e:\"</style>\",rE:!0,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[e],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\"]}},c,{cN:\"pi\",b:/<\\?\\w+/,e:/\\?>/,r:10},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"title\",b:/[^ \\/><\\n\\t]+/,r:0},e]}]}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",a={cN:\"function\",b:c+\"\\\\(\",rB:!0,eE:!0,e:\"\\\\(\"},r={cN:\"rule\",b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{cN:\"value\",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"},{cN:\"important\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,r,{cN:\"id\",b:/\\#[A-Za-z0-9_-]+/},{cN:\"class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"attr_selector\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/},{cN:\"at_rule\",b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:\"tag\",b:c,r:0},{cN:\"rules\",b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage(\"perl\",function(e){var t=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\",r={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:t},s={b:\"->{\",e:\"}\"},n={cN:\"variable\",v:[{b:/\\$\\d/},{b:/[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},{b:/[\\$%@][^\\s\\w{]/,r:0}]},o=[e.BE,r,n],i=[n,e.HCM,e.C(\"^\\\\=\\\\w\",\"\\\\=cut\",{eW:!0}),s,{cN:\"string\",c:o,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",r:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",r:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",r:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",r:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",r:5},{b:\"qw\\\\s+q\",e:\"q\",r:5},{b:\"'\",e:\"'\",c:[e.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[e.BE]},{b:\"{\\\\w+}\",c:[],r:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],r:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\\\\/\\\\/|\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",r:0,c:[e.HCM,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",r:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],r:0}]},{cN:\"sub\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",r:5},{cN:\"operator\",b:\"-\\\\w\\\\b\",r:0},{b:\"^__DATA__$\",e:\"^__END__$\",sL:\"mojolicious\",c:[{b:\"^@@.*\",e:\"$\",cN:\"comment\"}]}];return r.c=i,s.c=i,{aliases:[\"pl\"],k:t,c:i}});hljs.registerLanguage(\"cs\",function(e){var r=\"abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield\",t=e.IR+\"(<\"+e.IR+\">)?\";return{aliases:[\"csharp\"],k:r,i:/::/,c:[e.C(\"///\",\"$\",{rB:!0,c:[{cN:\"xmlDocTag\",v:[{b:\"///\",r:0},{b:\"<!--|-->\"},{b:\"</?\",e:\">\"}]}]}),e.CLCM,e.CBCM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line region endregion pragma checksum\"},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},e.ASM,e.QSM,e.CNM,{bK:\"class interface\",e:/[{;=]/,i:/[^\\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\"namespace\",e:/[{;=]/,i:/[^\\s:]/,c:[{cN:\"title\",b:\"[a-zA-Z](\\\\.?\\\\w)*\",r:0},e.CLCM,e.CBCM]},{bK:\"new return throw await\",r:0},{cN:\"function\",b:\"(\"+t+\"\\\\s+)+\"+e.IR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+\"\\\\s*\\\\(\",rB:!0,c:[e.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\"apache\",function(e){var r={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:!0,c:[e.HCM,{cN:\"tag\",b:\"</?\",e:\">\"},{cN:\"keyword\",b:/\\w+/,r:0,k:{common:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,r:0,k:{literal:\"on off all\"},c:[{cN:\"sqbracket\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"cbracket\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",r]},r,e.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"http\",function(t){return{aliases:[\"https\"],i:\"\\\\S\",c:[{cN:\"status\",b:\"^HTTP/[0-9\\\\.]+\",e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{cN:\"request\",b:\"^[A-Z]+ (.*?) HTTP/[0-9\\\\.]+$\",rB:!0,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:!0,eE:!0}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:!0,i:\"\\\\n|\\\\s|=\",starts:{cN:\"string\",e:\"$\"}},{b:\"\\\\n\\\\n\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\"objectivec\",function(e){var t={cN:\"built_in\",b:\"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\\\w+\"},i={keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n=\"@interface @class @protocol @implementation\";return{aliases:[\"mm\",\"objc\",\"obj-c\"],k:i,l:o,i:\"</\",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"}]},{cN:\"preprocessor\",b:\"#\",e:\"$\",c:[{cN:\"title\",v:[{b:'\"',e:'\"'},{b:\"<\",e:\">\"}]}]},{cN:\"class\",b:\"(\"+n.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:!0,k:n,l:o,c:[e.UTM]},{cN:\"variable\",b:\"\\\\.\"+e.UIR,r:0}]}});hljs.registerLanguage(\"python\",function(e){var r={cN:\"prompt\",b:/^(>>>|\\.\\.\\.) /},b={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},a={cN:\"number\",r:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},l={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",r,a,b]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)/,c:[r,a,b,e.HCM,{v:[{cN:\"function\",bK:\"def\",r:10},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,l]},{cN:\"decorator\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"java\",function(e){var a=e.UIR+\"(<\"+e.UIR+\">)?\",t=\"false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private\",c=\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",r={cN:\"number\",b:c,r:0};return{aliases:[\"jsp\"],k:t,i:/<\\/|#/,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{r:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:!0,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+a+\"\\\\s+)+\"+e.UIR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,r:0,c:[e.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:\"annotation\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\.]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",operator:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"shebang\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage(\"sql\",function(e){var t=e.C(\"--\",\"$\");return{cI:!0,i:/[<>{}*]/,c:[{cN:\"operator\",bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke\",e:/;/,eW:!0,k:{keyword:\"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\",literal:\"true false null\",built_in:\"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE,{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[e.BE,{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage(\"nginx\",function(e){var r={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+e.UIR}]},b={eW:!0,l:\"[a-z/_]+\",k:{built_in:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},r:0,i:\"=>\",c:[e.HCM,{cN:\"string\",c:[e.BE,r],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{cN:\"url\",b:\"([a-z]+):/\",e:\"\\\\s\",eW:!0,eE:!0,c:[r]},{cN:\"regexp\",c:[e.BE,r],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:!0},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:!0},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",r:0},r]};return{aliases:[\"nginxconf\"],c:[e.HCM,{b:e.UIR+\"\\\\s\",e:\";|{\",rB:!0,c:[{cN:\"title\",b:e.UIR,starts:b}],r:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"cpp\",function(t){var e={cN:\"keyword\",b:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},r={cN:\"string\",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?\"'}),{b:'(u8?|U)?R\"',e:'\"',c:[t.BE]},{b:\"'\\\\\\\\?.\",e:\"'\",i:\".\"}]},s={cN:\"number\",v:[{b:\"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)\"},{b:t.CNR}]},i={cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line pragma ifdef ifndef\",c:[{b:/\\\\\\n/,r:0},{bK:\"include\",e:\"$\",c:[r,{cN:\"string\",b:\"<\",e:\">\",i:\"\\\\n\"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+\"\\\\s*\\\\(\",c={keyword:\"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong\",built_in:\"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf\",literal:\"true false nullptr NULL\"};return{aliases:[\"c\",\"cc\",\"h\",\"c++\",\"h++\",\"hpp\"],k:c,i:\"</\",c:[e,t.CLCM,t.CBCM,s,r,i,{b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:c,c:[\"self\",e]},{b:t.IR+\"::\",k:c},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+t.IR+\"[\\\\*&\\\\s]+)+\"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\\w\\s\\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage(\"php\",function(e){var c={cN:\"variable\",b:\"\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\"},a={cN:\"preprocessor\",b:/<\\?(php)?|\\?>/},i={cN:\"string\",c:[e.BE,a],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:[\"php3\",\"php4\",\"php5\",\"php6\"],cI:!0,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[e.CLCM,e.HCM,e.C(\"/\\\\*\",\"\\\\*/\",{c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"},a]}),e.C(\"__halt_compiler.+?;\",!1,{eW:!0,k:\"__halt_compiler\",l:e.UIR}),{cN:\"string\",b:/<<<['\"]?\\w+['\"]?$/,e:/^\\w+;?$/,c:[e.BE,{cN:\"subst\",v:[{b:/\\$\\w+/},{b:/\\{\\$/,e:/\\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/},{cN:\"function\",bK:\"function\",e:/[;{]/,eE:!0,i:\"\\\\$|\\\\[|%\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",c,e.CBCM,i,t]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:!0,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[e.UTM]},{bK:\"use\",e:\";\",c:[e.UTM]},{b:\"=>\"},i,t]}});hljs.registerLanguage(\"coffeescript\",function(e){var c={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",built_in:\"npm require console print module global window document\"},n=\"[A-Za-z$_][0-9A-Za-z$_]*\",r={cN:\"subst\",b:/#\\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:\"(\\\\s*/)?\",r:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[e.BE,r]},{b:/\"/,e:/\"/,c:[e.BE,r]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[r,e.HCM]},{b:\"//[gim]*\",r:0},{b:/\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W|$)/}]},{cN:\"property\",b:\"@\"+n},{b:\"`\",e:\"`\",eB:!0,eE:!0,sL:\"javascript\"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i=\"(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",o={cN:\"params\",b:\"\\\\([^\\\\(]\",rB:!0,c:[{b:/\\(/,e:/\\)/,k:c,c:[\"self\"].concat(t)}]};return{aliases:[\"coffee\",\"cson\",\"iced\"],k:c,i:/\\/\\*/,c:t.concat([e.C(\"###\",\"###\"),e.HCM,{cN:\"function\",b:\"^\\\\s*\"+n+\"\\\\s*=\\\\s*\"+i,e:\"[-=]>\",rB:!0,c:[s,o]},{b:/[:\\(,=]\\s*/,r:0,c:[{cN:\"function\",b:i,e:\"[-=]>\",rB:!0,c:[o]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:!0,i:/[:=\"\\[\\]]/,c:[s]},s]},{cN:\"attribute\",b:n+\":\",e:\":\",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage(\"javascript\",function(e){return{aliases:[\"js\"],k:{keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},c:[{cN:\"pi\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},e.ASM,e.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,{cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\"}]},e.CLCM,e.CBCM,{cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\\s*[);\\]]/,r:0,sL:\"xml\"}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\\[|%/},{b:/\\$[(.]/},{b:\"\\\\.\"+e.IR,r:0},{bK:\"import\",e:\"[;$]\",k:\"import from as\",c:[e.ASM,e.QSM]},{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]}],i:/#/}});hljs.registerLanguage(\"ini\",function(e){var c={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",r:10},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[e.C(\";\",\"$\"),e.HCM,{cN:\"title\",b:/^\\s*\\[+/,e:/\\]+/},{cN:\"setting\",b:/^[a-z0-9\\[\\]_-]+\\s*=\\s*/,e:\"$\",c:[{cN:\"value\",eW:!0,k:\"on off true false yes no\",c:[{cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},c,{cN:\"number\",b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage(\"diff\",function(e){return{aliases:[\"patch\"],c:[{cN:\"chunk\",r:10,v:[{b:/^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"header\",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\\-\\-\\-/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+\\+\\+/,e:/$/},{b:/\\*{5}/,e:/\\*{5}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"change\",b:\"^\\\\!\",e:\"$\"}]}});\nexports.hljs = hljs;\n"
},
"$:/plugins/tiddlywiki/highlight/highlight.css": {
"type": "text/css",
"title": "$:/plugins/tiddlywiki/highlight/highlight.css",
"tags": "[[$:/tags/Stylesheet]]",
"text": "/*\n\nOriginal style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>\n\n*/\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #f0f0f0;\n -webkit-text-size-adjust: none;\n}\n\n.hljs,\n.hljs-subst,\n.hljs-tag .hljs-title,\n.nginx .hljs-title {\n color: black;\n}\n\n.hljs-string,\n.hljs-title,\n.hljs-constant,\n.hljs-parent,\n.hljs-tag .hljs-value,\n.hljs-rule .hljs-value,\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-name,\n.haml .hljs-symbol,\n.ruby .hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-template_tag,\n.django .hljs-variable,\n.smalltalk .hljs-class,\n.hljs-addition,\n.hljs-flow,\n.hljs-stream,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.apache .hljs-cbracket,\n.tex .hljs-command,\n.tex .hljs-special,\n.erlang_repl .hljs-function_or_atom,\n.asciidoc .hljs-header,\n.markdown .hljs-header,\n.coffeescript .hljs-attribute,\n.tp .hljs-variable {\n color: #800;\n}\n\n.smartquote,\n.hljs-comment,\n.hljs-annotation,\n.diff .hljs-header,\n.hljs-chunk,\n.asciidoc .hljs-blockquote,\n.markdown .hljs-blockquote {\n color: #888;\n}\n\n.hljs-number,\n.hljs-date,\n.hljs-regexp,\n.hljs-literal,\n.hljs-hexcolor,\n.smalltalk .hljs-symbol,\n.smalltalk .hljs-char,\n.go .hljs-constant,\n.hljs-change,\n.lasso .hljs-variable,\n.makefile .hljs-variable,\n.asciidoc .hljs-bullet,\n.markdown .hljs-bullet,\n.asciidoc .hljs-link_url,\n.markdown .hljs-link_url {\n color: #080;\n}\n\n.hljs-label,\n.ruby .hljs-string,\n.hljs-decorator,\n.hljs-filter .hljs-argument,\n.hljs-localvars,\n.hljs-array,\n.hljs-attr_selector,\n.hljs-important,\n.hljs-pseudo,\n.hljs-pi,\n.haml .hljs-bullet,\n.hljs-doctype,\n.hljs-deletion,\n.hljs-envvar,\n.hljs-shebang,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in,\n.tex .hljs-formula,\n.erlang_repl .hljs-reserved,\n.hljs-prompt,\n.asciidoc .hljs-link_label,\n.markdown .hljs-link_label,\n.vhdl .hljs-attribute,\n.clojure .hljs-attribute,\n.asciidoc .hljs-attribute,\n.lasso .hljs-attribute,\n.coffeescript .hljs-property,\n.hljs-phony {\n color: #88f;\n}\n\n.hljs-keyword,\n.hljs-id,\n.hljs-title,\n.hljs-built_in,\n.css .hljs-tag,\n.hljs-doctag,\n.smalltalk .hljs-class,\n.hljs-winutils,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.hljs-type,\n.hljs-typename,\n.tex .hljs-command,\n.asciidoc .hljs-strong,\n.markdown .hljs-strong,\n.hljs-request,\n.hljs-status,\n.tp .hljs-data,\n.tp .hljs-io {\n font-weight: bold;\n}\n\n.asciidoc .hljs-emphasis,\n.markdown .hljs-emphasis,\n.tp .hljs-units {\n font-style: italic;\n}\n\n.nginx .hljs-built_in {\n font-weight: normal;\n}\n\n.coffeescript .javascript,\n.javascript .xml,\n.lasso .markup,\n.tex .hljs-formula,\n.xml .javascript,\n.xml .vbscript,\n.xml .css,\n.xml .hljs-cdata {\n opacity: 0.5;\n}\n"
},
"$:/plugins/tiddlywiki/highlight/highlightblock.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\ntype: application/javascript\nmodule-type: widget\n\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CodeBlockWidget = require(\"$:/core/modules/widgets/codeblock.js\").codeblock;\n\nvar hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n\nhljs.configure({tabReplace: \" \"});\t\n\nCodeBlockWidget.prototype.postRender = function() {\n\tvar domNode = this.domNodes[0];\n\tif($tw.browser && this.document !== $tw.fakeDocument && this.language) {\n\t\tdomNode.className = this.language.toLowerCase();\n\t\thljs.highlightBlock(domNode);\n\t} else if(!$tw.browser && this.language && this.language.indexOf(\"/\") === -1 ){\n\t\ttry {\n\t\t\tdomNode.className = this.language.toLowerCase() + \" hljs\";\n\t\t\tdomNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(this.language, this.getAttribute(\"code\")).value);\n\t\t}\n\t\tcatch(err) {\n\t\t\t// Can't easily tell if a language is registered or not in the packed version of hightlight.js,\n\t\t\t// so we silently fail and the codeblock remains unchanged\n\t\t}\n\t}\t\n};\n\n})();\n",
"title": "$:/plugins/tiddlywiki/highlight/highlightblock.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/highlight/license": {
"title": "$:/plugins/tiddlywiki/highlight/license",
"type": "text/plain",
"text": "Copyright (c) 2006, Ivan Sagalaev\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of highlight.js nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
},
"$:/plugins/tiddlywiki/highlight/readme": {
"title": "$:/plugins/tiddlywiki/highlight/readme",
"text": "This plugin provides syntax highlighting of code blocks using v8.8.0 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev.\n\n! Usage\n\nWhen the plugin is installed it automatically applies highlighting to all codeblocks defined with triple backticks or with the CodeBlockWidget.\n\nThe language can optionally be specified after the opening triple braces:\n\n<$codeblock code=\"\"\"```css\n * { margin: 0; padding: 0; } /* micro reset */\n\nhtml { font-size: 62.5%; }\nbody { font-size: 14px; font-size: 1.4rem; } /* =14px */\nh1 { font-size: 24px; font-size: 2.4rem; } /* =24px */\n```\"\"\"/>\n\nIf no language is specified highlight.js will attempt to automatically detect the language.\n\n! Built-in Language Brushes\n\nThe plugin includes support for the following languages (referred to as \"brushes\" by highlight.js):\n\n* apache\n* bash\n* coffeescript\n* cpp\n* cs\n* css\n* diff\n* http\n* ini\n* java\n* javascript\n* json\n* makefile\n* markdown\n* nginx\n* objectivec\n* perl\n* php\n* python\n* ruby\n* sql\n* xml\n\n"
},
"$:/plugins/tiddlywiki/highlight/styles": {
"title": "$:/plugins/tiddlywiki/highlight/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": ".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:teal}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.scss .hljs-preprocessor{color:#900;font-weight:bold}.hljs-list .hljs-keyword,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword{color:navy;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name{color:teal}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}"
},
"$:/plugins/tiddlywiki/highlight/usage": {
"title": "$:/plugins/tiddlywiki/highlight/usage",
"text": "! Usage\n\nFenced code blocks can have a language specifier added to trigger highlighting in a specific language. Otherwise heuristics are used to detect the language.\n\n```\n ```js\n var a = b + c; // Highlighted as JavaScript\n ```\n```\n! Adding Themes\n\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub:\n\nhttps://github.com/isagalaev/highlight.js/tree/master/src/styles\n"
}
}
}
{
"tiddlers": {
"GettingStarted": {
"title": "GettingStarted",
"tags": "$:/tags/GettingStarted",
"caption": "Step 1<br>Syncing",
"text": "Welcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nVisit http://tiddlywiki.com/ to find out more about ~TiddlyWiki and what it can do.\n\n! Syncing Changes to the Server\n\nBefore you can start storing important information in ~TiddlyWiki it is important to make sure that your changes are being reliably saved by the server.\n\n# Create a new tiddler using the {{$:/core/images/new-button}} button in the sidebar on the right\n# Click the {{$:/core/images/done-button}} button at the top right of the new tiddler\n# Check the ~TiddlyWiki command line for a message confirming the tiddler has been saved\n# Refresh the page in the browser to and verify that the new tiddler has been correctly saved\n"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/plugins/tiddlywiki/tiddlyweb/save/offline"
},
"$:/plugins/tiddlywiki/tiddlyweb/ServerControlPanel": {
"title": "$:/plugins/tiddlywiki/tiddlyweb/ServerControlPanel",
"caption": "Server",
"tags": "$:/tags/ControlPanel",
"text": "<$reveal state=\"$:/status/IsLoggedIn\" type=\"nomatch\" text=\"yes\">\nLog in to ~TiddlyWeb: <$button message=\"tm-login\">Login</$button>\n</$reveal>\n<$reveal state=\"$:/status/IsLoggedIn\" type=\"match\" text=\"yes\">\nLogged in as {{$:/status/UserName}} <$button message=\"tm-logout\">Logout</$button>\n</$reveal>\n\n----\n\nHost configuration: <$edit-text tiddler=\"$:/config/tiddlyweb/host\" tag=\"input\" default=\"\"/>\n\n<blockquote>//for example, `$protocol$//$host$/folder`, where `$protocol$` is replaced by the protocol (typically `http` or `https`), and `$host$` by the host name//</blockquote>\n\n----\n\n<$button message=\"tm-server-refresh\">Refresh</$button> to fetch changes from the server immediately\n"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields. This version includes the tiddler changecount as the field `revision`.\n\n-->`<div`<$fields exclude='text revision bag' template=' $name$=\"$encoded_value$\"'></$fields>` revision=\"`<<changecount>>`\" bag=\"default\">\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/plugins/tiddlywiki/tiddlyweb/readme": {
"title": "$:/plugins/tiddlywiki/tiddlyweb/readme",
"text": "This plugin runs in the browser to synchronise tiddler changes to and from a TiddlyWeb-compatible server (including TiddlyWiki 5 itself, running on Node.js). It is inert when run under Node.js. Disabling this plugin via the browser can not be undone via the browser since this plugin provides the mechanism to synchronize settings with the server.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/tiddlyweb]]\n"
},
"$:/plugins/tiddlywiki/tiddlyweb/save/offline": {
"title": "$:/plugins/tiddlywiki/tiddlyweb/save/offline",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[[$:/boot/boot.css]] -[[$:/HistoryList]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js\ntype: application/javascript\nmodule-type: syncadaptor\n\nA sync adaptor module for synchronising with TiddlyWeb compatible servers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CONFIG_HOST_TIDDLER = \"$:/config/tiddlyweb/host\",\n\tDEFAULT_HOST_TIDDLER = \"$protocol$//$host$/\";\n\nfunction TiddlyWebAdaptor(options) {\n\tthis.wiki = options.wiki;\n\tthis.host = this.getHost();\n\tthis.recipe = undefined;\n\tthis.hasStatus = false;\n\tthis.logger = new $tw.utils.Logger(\"TiddlyWebAdaptor\");\n}\n\nTiddlyWebAdaptor.prototype.isReady = function() {\n\treturn this.hasStatus;\n};\n\nTiddlyWebAdaptor.prototype.getHost = function() {\n\tvar text = this.wiki.getTiddlerText(CONFIG_HOST_TIDDLER,DEFAULT_HOST_TIDDLER),\n\t\tsubstitutions = [\n\t\t\t{name: \"protocol\", value: document.location.protocol},\n\t\t\t{name: \"host\", value: document.location.host}\n\t\t];\n\tfor(var t=0; t<substitutions.length; t++) {\n\t\tvar s = substitutions[t];\n\t\ttext = text.replace(new RegExp(\"\\\\$\" + s.name + \"\\\\$\",\"mg\"),s.value);\n\t}\n\treturn text;\n};\n\nTiddlyWebAdaptor.prototype.getTiddlerInfo = function(tiddler) {\n\treturn {\n\t\tbag: tiddler.fields.bag\n\t};\n};\n\n/*\nGet the current status of the TiddlyWeb connection\n*/\nTiddlyWebAdaptor.prototype.getStatus = function(callback) {\n\t// Get status\n\tvar self = this;\n\tthis.logger.log(\"Getting status\");\n\t$tw.utils.httpRequest({\n\t\turl: this.host + \"status\",\n\t\tcallback: function(err,data) {\n\t\t\tself.hasStatus = true;\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Decode the status JSON\n\t\t\tvar json = null,\n\t\t\t\tisLoggedIn = false;\n\t\t\ttry {\n\t\t\t\tjson = JSON.parse(data);\n\t\t\t} catch (e) {\n\t\t\t}\n\t\t\tif(json) {\n\t\t\t\tself.logger.log(\"Status:\",data);\n\t\t\t\t// Record the recipe\n\t\t\t\tif(json.space) {\n\t\t\t\t\tself.recipe = json.space.recipe;\n\t\t\t\t}\n\t\t\t\t// Check if we're logged in\n\t\t\t\tisLoggedIn = json.username !== \"GUEST\";\n\t\t\t}\n\t\t\t// Invoke the callback if present\n\t\t\tif(callback) {\n\t\t\t\tcallback(null,isLoggedIn,json.username);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nAttempt to login and invoke the callback(err)\n*/\nTiddlyWebAdaptor.prototype.login = function(username,password,callback) {\n\tvar options = {\n\t\turl: this.host + \"challenge/tiddlywebplugins.tiddlyspace.cookie_form\",\n\t\ttype: \"POST\",\n\t\tdata: {\n\t\t\tuser: username,\n\t\t\tpassword: password,\n\t\t\ttiddlyweb_redirect: \"/status\" // workaround to marginalize automatic subsequent GET\n\t\t},\n\t\tcallback: function(err) {\n\t\t\tcallback(err);\n\t\t}\n\t};\n\tthis.logger.log(\"Logging in:\",options);\n\t$tw.utils.httpRequest(options);\n};\n\n/*\n*/\nTiddlyWebAdaptor.prototype.logout = function(callback) {\n\tvar options = {\n\t\turl: this.host + \"logout\",\n\t\ttype: \"POST\",\n\t\tdata: {\n\t\t\tcsrf_token: this.getCsrfToken(),\n\t\t\ttiddlyweb_redirect: \"/status\" // workaround to marginalize automatic subsequent GET\n\t\t},\n\t\tcallback: function(err,data) {\n\t\t\tcallback(err);\n\t\t}\n\t};\n\tthis.logger.log(\"Logging out:\",options);\n\t$tw.utils.httpRequest(options);\n};\n\n/*\nRetrieve the CSRF token from its cookie\n*/\nTiddlyWebAdaptor.prototype.getCsrfToken = function() {\n\tvar regex = /^(?:.*; )?csrf_token=([^(;|$)]*)(?:;|$)/,\n\t\tmatch = regex.exec(document.cookie),\n\t\tcsrf = null;\n\tif (match && (match.length === 2)) {\n\t\tcsrf = match[1];\n\t}\n\treturn csrf;\n};\n\n/*\nGet an array of skinny tiddler fields from the server\n*/\nTiddlyWebAdaptor.prototype.getSkinnyTiddlers = function(callback) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: this.host + \"recipes/\" + this.recipe + \"/tiddlers.json\",\n\t\tcallback: function(err,data) {\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Process the tiddlers to make sure the revision is a string\n\t\t\tvar tiddlers = JSON.parse(data);\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\ttiddlers[t] = self.convertTiddlerFromTiddlyWebFormat(tiddlers[t]);\n\t\t\t}\n\t\t\t// Invoke the callback with the skinny tiddlers\n\t\t\tcallback(null,tiddlers);\n\t\t}\n\t});\n};\n\n/*\nSave a tiddler and invoke the callback with (err,adaptorInfo,revision)\n*/\nTiddlyWebAdaptor.prototype.saveTiddler = function(tiddler,callback) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: this.host + \"recipes/\" + encodeURIComponent(this.recipe) + \"/tiddlers/\" + encodeURIComponent(tiddler.fields.title),\n\t\ttype: \"PUT\",\n\t\theaders: {\n\t\t\t\"Content-type\": \"application/json\"\n\t\t},\n\t\tdata: this.convertTiddlerToTiddlyWebFormat(tiddler),\n\t\tcallback: function(err,data,request) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Save the details of the new revision of the tiddler\n\t\t\tvar etagInfo = self.parseEtag(request.getResponseHeader(\"Etag\"));\n\t\t\t// Invoke the callback\n\t\t\tcallback(null,{\n\t\t\t\tbag: etagInfo.bag\n\t\t\t}, etagInfo.revision);\n\t\t}\n\t});\n};\n\n/*\nLoad a tiddler and invoke the callback with (err,tiddlerFields)\n*/\nTiddlyWebAdaptor.prototype.loadTiddler = function(title,callback) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: this.host + \"recipes/\" + encodeURIComponent(this.recipe) + \"/tiddlers/\" + encodeURIComponent(title),\n\t\tcallback: function(err,data,request) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null,self.convertTiddlerFromTiddlyWebFormat(JSON.parse(data)));\n\t\t}\n\t});\n};\n\n/*\nDelete a tiddler and invoke the callback with (err)\noptions include:\ntiddlerInfo: the syncer's tiddlerInfo for this tiddler\n*/\nTiddlyWebAdaptor.prototype.deleteTiddler = function(title,callback,options) {\n\tvar self = this,\n\t\tbag = options.tiddlerInfo.adaptorInfo.bag;\n\t// If we don't have a bag it means that the tiddler hasn't been seen by the server, so we don't need to delete it\n\tif(!bag) {\n\t\treturn callback(null);\n\t}\n\t// Issue HTTP request to delete the tiddler\n\t$tw.utils.httpRequest({\n\t\turl: this.host + \"bags/\" + encodeURIComponent(bag) + \"/tiddlers/\" + encodeURIComponent(title),\n\t\ttype: \"DELETE\",\n\t\tcallback: function(err,data,request) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nConvert a tiddler to a field set suitable for PUTting to TiddlyWeb\n*/\nTiddlyWebAdaptor.prototype.convertTiddlerToTiddlyWebFormat = function(tiddler) {\n\tvar result = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(fieldValue,fieldName) {\n\t\t\tvar fieldString = fieldName === \"tags\" ?\n\t\t\t\t\t\t\t\ttiddler.fields.tags :\n\t\t\t\t\t\t\t\ttiddler.getFieldString(fieldName); // Tags must be passed as an array, not a string\n\n\t\t\tif(knownFields.indexOf(fieldName) !== -1) {\n\t\t\t\t// If it's a known field, just copy it across\n\t\t\t\tresult[fieldName] = fieldString;\n\t\t\t} else {\n\t\t\t\t// If it's unknown, put it in the \"fields\" field\n\t\t\t\tresult.fields = result.fields || {};\n\t\t\t\tresult.fields[fieldName] = fieldString;\n\t\t\t}\n\t\t});\n\t}\n\t// Default the content type\n\tresult.type = result.type || \"text/vnd.tiddlywiki\";\n\treturn JSON.stringify(result,null,$tw.config.preferences.jsonSpaces);\n};\n\n/*\nConvert a field set in TiddlyWeb format into ordinary TiddlyWiki5 format\n*/\nTiddlyWebAdaptor.prototype.convertTiddlerFromTiddlyWebFormat = function(tiddlerFields) {\n\tvar self = this,\n\t\tresult = {};\n\t// Transfer the fields, pulling down the `fields` hashmap\n\t$tw.utils.each(tiddlerFields,function(element,title,object) {\n\t\tif(title === \"fields\") {\n\t\t\t$tw.utils.each(element,function(element,subTitle,object) {\n\t\t\t\tresult[subTitle] = element;\n\t\t\t});\n\t\t} else {\n\t\t\tresult[title] = tiddlerFields[title];\n\t\t}\n\t});\n\t// Make sure the revision is expressed as a string\n\tif(typeof result.revision === \"number\") {\n\t\tresult.revision = result.revision.toString();\n\t}\n\t// Some unholy freaking of content types\n\tif(result.type === \"text/javascript\") {\n\t\tresult.type = \"application/javascript\";\n\t} else if(!result.type || result.type === \"None\") {\n\t\tresult.type = \"text/x-tiddlywiki\";\n\t}\n\treturn result;\n};\n\n/*\nSplit a TiddlyWeb Etag into its constituent parts. For example:\n\n```\n\"system-images_public/unsyncedIcon/946151:9f11c278ccde3a3149f339f4a1db80dd4369fc04\"\n```\n\nNote that the value includes the opening and closing double quotes.\n\nThe parts are:\n\n```\n<bag>/<title>/<revision>:<hash>\n```\n*/\nTiddlyWebAdaptor.prototype.parseEtag = function(etag) {\n\tvar firstSlash = etag.indexOf(\"/\"),\n\t\tlastSlash = etag.lastIndexOf(\"/\"),\n\t\tcolon = etag.lastIndexOf(\":\");\n\tif(firstSlash === -1 || lastSlash === -1 || colon === -1) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\tbag: decodeURIComponent(etag.substring(1,firstSlash)),\n\t\t\ttitle: decodeURIComponent(etag.substring(firstSlash + 1,lastSlash)),\n\t\t\trevision: etag.substring(lastSlash + 1,colon)\n\t\t};\n\t}\n};\n\nif($tw.browser && document.location.protocol.substr(0,4) === \"http\" ) {\n\texports.adaptorClass = TiddlyWebAdaptor;\n}\n\n})();\n",
"title": "$:/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js",
"type": "application/javascript",
"module-type": "syncadaptor"
}
}
}
G.Fahrni
Fahrnipedia
yes
{
"tiddlers": {
"$:/info/browser": {
"title": "$:/info/browser",
"text": "yes"
},
"$:/info/node": {
"title": "$:/info/node",
"text": "no"
}
}
}
rat.jpg
{
"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 {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define 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: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n}\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, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n}\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.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\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-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\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-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: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\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: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.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.tc-search button svg, .tc-search a svg {\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.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n}\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-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/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-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-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: 49%;\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-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\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-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n width: auto;\n margin-bottom: 0px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n}\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\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar .tc-tab-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 .tc-plugin-info > .tc-plugin-info-chunk > 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:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > 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\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** 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/options/codewrapping": {
"title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
"text": "pre-wrap"
},
"$:/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"
}
}
}
770px
770px
686px
fluid-fixed
classic
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
![ext[abces_amygd.pdf|./pdf/abces_amygd.pdf]] <!-- Texte caché pour la recherche Abcès amygdalien abces amygdale ludwig angina angine Phlegmon Plancher buccal Cervical Abcès cervical -->
!! Généralités
*Un ''abcès'' cérébral correspond à une collection de pus dans le parenchyme, entourée d'une ''capsule réactive''.
*Les ''causes'' principales sont:
**Une ''dissémination hématogène''
**Une ''contamination locale'' due à par exemple une ''sinusite'' ou ''mastoïdite''.
**une ''complication'' d'une ''méningite bactérienne''.
**Une ''IRM avec contraste'' de Gd+ est le meilleur moyen d'investiguer l'abcès. Il y a typiquement un ''rehaussement de la capsule'' avec un ''aspect liquidien'' à l'intérieur, le tout ''entouré d'odème''.
*le ''traitement'' passe par une ''aspiration et excision'' couplée à un traitement ''antibiotique ''.
{{abces_cerebral_irm.jpg}}
{{abces_poumon.jpg}}
!!Généralités
*l'''Abcès du Poumon'' se développe dans un poumon ''infecté''. *les ''Causes'' comprennent:
**l''Aspiration'' qui est la cause la plus fréquente
**Une ''dissémination hématogène''
**Une ''dissémination locale'' par continuité
*L'Abcès est souvent accompagné d'une ''Pneumonie''.
*La ''Clinique'' n'est pas très spécifique:
**''Toux'' avec parfois expectorations teintées de sang
**''Fièvre''
**''Dyspnée''
**''Mauvaise Haleine''
**''fatigue'', ''perte de poids'' et ''malaises''
*Le ''Diagnostic'' passe par la ''RX thorax'' qui montrera une ''cavitation'' avec des ''parois épaisses'' ainsi qu'un ''niveau air-fluide''.
*On peut faire un ''CT'' pour mieux préciser l'abcès ou le différencier d'un empyème
*Faire des ''Clutures'' et ''Gram'' des ''expectorations'' du patient (plutôt par bronchoscopie ou broncho-aspiration pour limiter la contamination de la flore buccale)
*Le ''Traitement'' comprend une ''hospitalisation ''avec ''drainage'' de l'abcès et traitement ''antibiotiques'' qui peuvent prendre des mois !
{{abces_poumon_rx.jpg}}
{{abces_hepatique.jpg}}
!!Généralités
*L'''Abcès Hépatique'' est une collection de tissus inflammatoire nécrotique du à des agents infectieux. C'est un problème souvent du tiers monde
*Les ''Agents'' principaux sont:
**//parasites//
***''Amibiase'', faisant l'//abcès amibien//
***''Echinoccoque'', un faisant l'//abcès hydatique//
***''Protozoaires''
***''Helminthes''
**//bactéries (E.coli, Klebsielle, Enterocoques,...)//
***''sepsis abdominal''
***''enterocolite necrosante''
**//immunosupprimés//
***''VIH''
**''Diabète''
**''Vieux''
**''Chimiothérapies''
*les abcès ''parasitaires'' sont souvent ''uniques''
*les abcèes ''bactériens'' sont souvent ''multiples''
!!Clinique
*''Douleur au QSD''
**''Fièvre''
**''Jaunisse''
!!Investigation
*''Echo''
*''CT''
*''IRM''
!!Traitement
*''ATB'' peut suffire si l'abcès est petit
*''Drainage transcutané'' guidé en Echo ou CT
*''Chirurgie'' si drainage pas possible / pas efficace
undefine
undefine
undefine
undefine
undefine
undefine
@@background-color:lightgreen; !'' Abdomen '' @@ <<list-links "[tag[Abdomen]sort[title]]">>
![ext[abdomen_aigu_pelvien.pdf|./pdf/abdomen_aigu_pelvien.pdf]] <!-- Texte caché pour la recherche • Infections génitales hautes COL • Infections génitales basses Expliquer les moyens qui permettraient de poser un diagnostic de certitude d’une PID Examens complémentaires: • Formule sanguine avec répartition, plaquettes • CRP • hCG • Prélèvement vaginal (endocol), recherche de chlamydia trachomatis et gonocoque • Stix urinaire / Culture urinaire • Hémocultures si fièvre > 38,5 et/ou frissons • Echographie pelvienne (voie sus-pubienne et endo- vaginale) Décrire l’étiologie et la pathogénèse d’une infection génitale haute (utérus et annexes) PID (pelvic inflammatory disease) Définition: Infection aigue, subaigue ou chronique des voies génitales hautes (utérus, trompes, ovaires et les séreuse péritonéales) infection souvent ascendante Connaître les facteurs de risque, les symptômes et les complications d’une annexite Facteurs de risques: femmes jeunes (15-20 ans) nulligestes bas niveau socio-économique tabagisme actif partenaires multiples, rapports sexuels non protégés ATCD de MST, HIV contraception endo-utérine (4 semaines après la pose) manoeuvres endo-utérines Connaître les facteurs de risque, les symptômes et les complications d’une annexite Symptômes: algies pelviennes 80% (+/-péritonisme abdominal) parfois douleurs en HCD (FHC) leucorrhées 50% métrorragies 30-40% fièvre 30% nausées, vomissements TV: mobillisation douloureuse du col et des annexes avec empâtement Si gonocoque: examiner gorge, bouche, anus ++ Connaître les facteurs de risque, les symptômes et les complications d’une annexite Diagnostic et complications: 40-60% de formes asymptomatiques !! formes aigues (souvent pauci-symptomatique) formes compliquées: précoces (pelvipéritonite, pyosalpinx, abcès tubo- ovarien, abcès du Douglas) tardives : infertilité tubaire (20%), GEU (10%), algies pelviennes chroniques, périhépatites, récidives Fitz Hugh Curtis (Chlamydia) salpingite aigue = 1ère cause d‘infertilité Nommer les mesures à prendre pour connaître l’origine d’une PID Germes responsables Chlamydiae trachomatis (sérotypes D-K) Entérobactéries (E.Coli) Streptocoques Anaérobies Gonocoques Mycoplasma hominis et ureaplasma urealyticum Tuberculose (surtout en pays d’endémie) Tuberculose péritonéale Formuler un pronostic selon le diagnostic et l’importance de l’infection Critères d’hospitalisation: doute diagnostique (appendicite, GEU...) masse annexielle mauvais état général, EF >38.5°C, FSC et CRP très perturbées non compliance au ttt antibiotique mauvaise réponse au ttt antibiotique après 48h d‘un traitement ambulatoire bien conduit -->
undefine
!! Généralités *un ''AIT'' correspond à un ''arrêt momentané de la perfusion cérébrale'' au niveau d'une zone précise, avec ''déficit neurologique'', durant ''<24h'' avec ''récupération complète'' après l'évènement et ''sans lésion à l'imagerie''. *Il existe ''deux causes'' majeurs: **Les ''embols'' sont responsables de la majorité des AIT **Les ''sténoses carotidiennes'' surtout sévères peuvent aussi en faire *Le ''risque d'AVC'' est plus élevé chez les patients ayant présenté un AIT. il faut donc faire un bilan complet et diminuer les FRCV. En particulier ''dans la semaine'' après l'évènement le risque augmente linéairement, ce qui implique que l'AIT est une ''urgence'' à investiguer au plus vite. *Les ''facteurs de risque'' pour les AIT sont surtout: **l'''Age'' **l'''HTA'' **les ''autres FRCV'' *Les ''Symptomes'' peuvent être de toutes sortes. Un symptôme fréquent est l'''aumaurose fugace'' lors de l'atteinte carotidienne. *Les ''Investigations'' comprennent en général une ''Imagerie cérébrale'' (Angio-CT) , un ''ECG'' (recherche de FA avec embols) et éventuellement une echographie cardiaque. *Le ''Traitement'' passe par de l'''Aspirine'', éventuellement une ''Anticoagulation si FA'' et des ''statines''.
! ''Accouchement''
![ext[Accouchement.pdf|./pdf/Accouchement.pdf]]
<!-- Texte caché pour la recherche
Gestion de l’accouchement
Photo de M. Serfaty, Aix en Provence
Dr M. Epiney
Médecin Adjoint,
Service d’obstétrique
2014 Admission en salle d’accouchement à terme
• Motifs d’admission:
– Contractions utérines
– Rupture des membranes
– Saignement
– Maturation cervicale /provocation • Evaluation générale pronostique
– Antécédents
– Taille maternelle
– Poids
– Bassin
– Fonds utérin
– Palpation abdominale
– TA, urines
– CTG 30 minutes
dystocie
RCIU, macrosomie
présentation
prééclampsie • Confirmer le travail
1) Prétravail
• Installation des CU, maturation cervicale
2)Travail
– Contraction utérine
Douloureuse,involontaire, durée 1 minute, fréquence 1-6/ 10 minutes
– CU douloureuse avec effacement du col
– Chez la multipare CU et dilatation 2 cm Ventouse Forceps
Le Simpson
– Le meilleur, car le moins traumatique
Le Kielland
– Permet de corriger les cas d’asynclitisme Complications : Ventouse
– Excoriations cutanées
– Hématomes sous cutanés
• bosse séro-sanguine
6-10%
• céphalhématome
• Anémie; ictère
• Hématome sous aponévrotique diffus
• 4,6 pour mille naissances par ventouse
• sous galéal : réseau veineux important et tissu cellulaire très lache
• grave ,évolution défavorable dans 1/3 des cas
– Douleur
– traitement par paracetamol ; utiliser score d’échelle de douleur
– Hémorragies intracrâniennes rares 0,12-0,16%
– Atteinte nerf facial
– très rares 0,05% / Peu différente de AVB non instrumenté
– Atteinte plexus en cas de dystocie épaules
– Dépression neurologique ou respiratoire Complications néonatales: forceps
• Mortalité néonatale
– 5/10 000
• Comme pour ventouse:
– Atteinte du plexus brachial
– Hémorragies extra crâniennes
• Céphalhématomes 6,35 %
– Dépression neurologique ou mauvaise adaptation à la naissance
• Plus spécifiques
– Lésions oculaires
– Embarrure
– Paralysie faciale
– Atteinte plexus brachial
0,4 % Morbidité maternelle
• Lésions maternelles
– déchirures du col
– déchirures vaginales
– Déchirures périnéales degré III et IV
• Plus avec forceps
– déchirures vésicales ( si pas de sondage)
• Incontinence anale
• Dyspareunie
• Séquelles psychologiques
– Instrumentation difficile Dystocie des épaules
• 0.2 à 3 % des naissances
• Arrêt de l ’accouchement spontané par l ’impaction de l ’épaule antérieure sous la symphyse pubienne.
• Spong (1995):Temps > 60 secondes entre la délivrance de la tête et le corps ou nécessitant des manœuvres obstétricales.
Mac Roberts Woods
Jacquemier, délivrance du bras post
-->
!''Compications de l'Accouchement''
!!Isoimmunisation
*''Définition'' : anticorps produits contre un antigène des globules rouges suite à une stimulation antigénique avec les globules rouges d'une autre personne
*''Etiologie''
**La circulation foeto-maternelle est normalement séparée par la barrière placentaire, mais une sensibilisation peut se produire et peut affecter la grossesse en cours ou, surtout, les grossesses futures. Une mère Rh- qui produit des Ac anti-Rh peut induire une ''anémie'' ''hémolytique'' foetale potentiellement mortelle.
**Le risque pour une mère Rh- d'être sensibilisée avec un enfant Rh+ ABO compatible est de 16%.
**''Voies de sensibilisation'' : transfusion de sang incompatible, ATCD d'hémorragie transplacentaire foeto-maternelle (grossesse ectopique, FC), gestes invasifs durant la grossesse (diagnostic pré-natal, cerclage, etc), travail et accouchement.
*''Investigations''
**Dépistage avec un coombs direct lors de la première visible pour le groupe sanguin, le status Rh et les AC
**US pour détecter un hydrops foetalis
*''Prophylaxie''
**IgG Rh exogènes donnés à la maman (se lient sur les AG Rh feotaux et les empêchent de contacter le système immunitaire maternel)
**Se donne à toute mère Rh- (sans Ac anti-Rh), de routine à 28 SA (protection pour 12 SA environ), dans les 72h avant la naissance d'un foetus Rh+, lors de procédure invasive, lors de grossesse ectopique, FC ou IVG ou d'hémorragie antépartum.
*''Investigations''
**Doppler de l'ACM pour déterminer le degré d'anémie foetale
*''Traitement''
**SI bilirubine baisse : pas d'interveion (foetus non affecté ou peu affecté)
**Transfusion intrautérine de sang O- si foetus très affecté ou accouchement prématuré pour transfusion-échange du foetus.
*''Complications''
**IgG anti-Rh traversent le placenta et causent une hémolyse foetale -> anémie, IC chronique, oedème et ascite du BB
**Sévère : hydrops (oedème du à l'IC secondaire à l'anémie) ou erythroblastose foetalis (anémie hémolytique sévère immunie-mediated)
!!''Incompétence cervicale''
*''Dilatation'' ''cervicale'' et ''effacement'' du col en absence de contractions utérines
*Clinique : dilatation cervicale silencieuse, FC du 2ème trimestre (à suspecter si procédures au niveau du col notamment)
*''Traitement'' : cerclage cervical (sutures cervicales au niveau de l'ostium interne, à la fin du 1er trimestre ou durant le 2ème trimestre et enlevé au 3ème)
!!''Présentation en siège ''
*''Types'' :
**Déterminé à l'US (fesses ou MI vers la présentation)
**Complet (10%) : hanches et genoux fléchis
**Décomplété mode des fesses : hanches fléchies, genoux en extension, fesses au cervix (peut être complet ou incomplet : les deux jambes tendus ou une seule)
***Le plus fréquent
***AVB ± possible
**Décomplété mode d'un pied (ou des deux pieds) : les deux ou une hanche fléchie et les deux ou un genou en dessous des fesses (pieds à la présentation)
{{presentations.jpg}}
*''Epidémio'': 3-4% des grossesse à terme (plus fréquent chez les prématurés)
*''FR'' :
**Maternel : pelvis contracté, utérus anormal (morphologie, tumeurs intra-utérines, fibromyome, ATCD de siège), tumeur pelvienne : compression, multiparité importante
**Placenta praevia, poly-/oligohydramnios
**Foetal : prématurité, gestation multiple, malformations congénitales, anomalies du tonus/mouvement foetal, aneuploidie, hydrocéphaléie ou anencéphalie
*''Prise en charge''
**Manoeuvre de version sous US et tocolyse avec monitoring de la FC du BB (65% de succès)
***Critères : ≥37 SA, BB unique, pas engagé, CTG réactif, pas en travail
***CI : ATCD de saignement du 3è trimestre, ATCD de CS, suspicion de RCIU, HTA, insuffisance placentaire, coron autour du cou
***Risque : décollement placentaire, compression du cordon, RPM, travail, bradycardie foetale avec risque de CS, alloimmunisation, mort feotale
***AVB possible (CI : présentation cordon, pelvis inadéquat, hydrocéphalie, macrosomie, RCIU)
***CS si siège haut après 2h de travail, pas de poussée active, si accouchement vaginal n'est pas imminent après 1h de poussée active
*''Pronostic'' : plus petit PN, plus de mortalité périnatale, d'anormalies congénitales et de prolapsus du cordon.
!!''Rétention placentaire''
*''Définition'' : placenta non délivré après 30 min post-partum
*''Etiologie'' :
**Placenta séparé mais non délivré
**Implantation placentaire anormale (placenta accreta, increta, percreta)
*''FR''
**Placenta previa
**ATCD de CS
**Curettage post-grossesse
**ATCD de séparation manuelle du placenta
**ITU
*''Clinique''
**Risque d'hémorragique du post partum
**Risque d'infection
*''Investigations''
**Explorer l'utérus
**Déterminer le degré de perte sanguine
*''Prise en charge ''
**Manoeuvre de brant (traction sur le cordon ombilical avec une main et une autre appuyant sur le ventre suprapubien pour éviter une inversion utérine)
**Ocytocine dans la veine ombilical
**Ablation manuelle si échec.
**Dilatation et curetage si nécessaire.
{{achalasie.jpg}}
!!Définition
*l'''Achalasie'' est une maladie rare de la ''//motricité oesophagienne//'' caractérisée par un ''défaut de relaxation du SOI'' //(sphincter oesophagien inférieur)//, qui reste fermement ''contracté'', impliquant une ''dilatation de l'oesophage'' en amont, par une //absence de péristaltisme//.
*Les altérations sont dues à une //perte des cellules ganglionnaires du plexus d'Auerbach// dans la musculature de l'oesophage.
!!Clinique
*''Dysphagie'' surtout pour les liquides
*''Pyrosis''
*''Régurgiations''
*''Hoquets''
*Douleurs thoraciques et épigastralgies
*Halitose
*Les'' Pneumonies d'aspirations'' sont le risque majeur de complications
!!Investigations
*''OGD'' (oesophago-duédonoscopie) avec ± biopsies
*''Transit oesophagien'' avec une apparence en [[bec d'oiseau|achalasie_bec_oiseau_rx.jpg]].
*la ''Manométrie à Haute Résolution'' (MHR) est le gold standard du diagnostic et distingue 3 types d'Achalasie avec traitements adaptés.
{{achalasie_types.jpg}}
!!Traitement
*''dilatation pneumatique'' ou ''myotomie laparoscopique de Heller'' comme premiers traitements
*''Injection de Botox'' si C-I à la chirurgie
*''Myorelaxants'' (Nifédipine) si C-I à l'injection de botox
undefine
undefine
undefine
!! Généralités
* l’Achondroplasie est la cause de nanisme la plus fréquente
* L’enfant a des [[petits bras et jambes|achondroplasie.jpg]], mais une grande tête
* La majorité (80%) vient d’une mutation sporadique mais il existe aussi une mutation dominante
{{achondroplasie_rx_os.jpg}}
undefine
undefine
![ext[dermato_acne.pdf|./pdf/dermato_acne.pdf]] <!-- Texte caché pour la recherche Acné - Follicule sébacé (visage : front, nez, joues) et tronc (thorax, épaules) - 90% des ado, aux approches de la puberté - FR : génétique (AF+ 45% : 5ARI plus efficace), tabac - Chronique 40% des adultes - Hyperséborrhée + hyperkératose (→occlusion) + P. acnès (active séborrhée et comédogenèse) + inflammation et réaction immune. Poylmorphe : Acné rétentionnelle (comédon ouvert ou fermé) - Acné papulo-putulseuse (papules et pustules ++) - Acné nodulaire (conglobata) : nodules indurés et furonculoïde, abcès, fistules, cicatrices ++ (tronc, fesses et racines des membres) - Lésions cicatricielles (cicatrices atrophiques, hypertrophiques, chéloïdes, « pic à glace ») - Syphilis 2° (regarder les mains) - Dermatite périorale : papulo-pustules récidivantes + prurit complication CS locale sur le visage (TTT : stop CS, doxy PO 1-3mois) - Rosacée : F 30-50ans, nez-joues-menton-front. Formes erythémato-télangiectasique (couperose, télangiecasies, oedèmes), papulo-pustuleuse, oculaire (blépharite, conjonctivite), éléphantiasis facial et rhinophyma (H++), bouffées vasomotrices ++. Etio : photovielissement, demodex folliculorum TTT : métronidazole crème ou PO 2-3mois, laser/dermoabrasion - Dermatite séborrhéique : squames, rouge (ailes nez, menton, sourcils, front) Résultat en 6 semaines environ … - Topiques : kératolytiques (rétinoïdes topiques, EI : irritatif les crèmes moins, photosensibilité) ou ATB (erythromycine ou clindamycine) + Benzoylperoxyde (contre R). Associations possibles. → Acné légère (rétention = rétinoïdes, combiné si papulo-pustuleux) - ATB PO + BP : doxycycline 3mois (EI : R, photoSN, folliculite gram-) (CI <12ans ou enceinte : dents jaune, hyperpigmentation cutanée) → Acné modérée (en combinaison avec traitement topique) - Isorétinoïdes : inhibe sébum et active différenciation ¢. 3-6mois CAVE : tératogène, dépression, tests hépatiques, cholestérol, TG, PAS d’association avec rétinoides PO : HTIC. → Acné Sévère, R au TTT, risque de cicatrice - Autres : OCP avec effet anti-androgène - Cicatrices : Laser peut réduire un peu - Acné fulminans : rare, très agressif. Sx généraux (EF, dlr musculaire et articulaire) à l’introduction d’un ttt par rétinoides. Nodules inflammatoire, ulcération nécrotique, cicatrices ++. - Acné transitoire du NN (homrones maternelles) - Acné infantile (2-10ans) : Exclure tr hormonal (tumeur ou hyperplasie surrénalienne) - Acné médicamenteuse (monomorphe : papuleux et pustuleux) (OCP, CS, TBstatiques, B12) (etio : dim SHBG → aug T libre) - Acné féminine tardive : F >20-30ans, de novo, atteint régions mentonnières et mandibulaires (± associé hyperandrogénie : SOPK) - Acné excoriée (des jeunes filles) : entretenu par le grattage - Acné exogène : exposition aux huiles, cosmétiques, dioxine… GEN CLIN DD TTT CAVE -->
undefine
!! Généralités
*L'''acromégalie'' est une maladie rare généralement due à une ''tumeur hypophysaire bénigne'', avec ''augmentation de sécrétion de GH et IGF-1''
*Elle atteint les ''adultes''. Si cela arrive dans l'enfance, on aura du gigantisme (les cartilages de croissances étant encore libres)
* La GH étant pulsatile, on détecte la maladie en ''dosant l'IGF-1''
*Le diagnostic peut prendre plusieurs années avant d'être posé.
*''cliniquement'' on trouvera une ''augmentation des extremités'':
**''Front''
**''Pomettes''
**''Mâchoire''
**''Pieds''
**''Langue''
*Les ''organes'' peuvent aussi être atteints, avec une ''hypertrophie cardiaque'' qui peut être ''mortelle''. la tumeur peut aussi ''compresser'' ''localement'' et faire des symptomes de type ''hémianopsie bitemporale'' et ''céphalées.''
* les ''traitements'' comprennent la ''chirurgie'' (gold standard), les ''analogues de la Somatostatine'' et la ''radiothérapie''.
{{acromegalie_clinique.jpg}}
undefine
undefine
!!Généralités
!!!Centre du renforcement
*''Certains'' ''stimuli'', dits « salients » (remarquables, qui sortent de l'ordinaire : danger, nouveauté, douleur, sexualité, nourriture, interactions sociales…)
*''Renforcent'' ''l’automatisation'' des processus neurobiologiques favorisant les conduites pour la survie via un signal neurobiologique
*Ce ''signal'' est donné par le ''système dopaminergique'' (SD) qui va de l’aire tegmentale ventrale (VTA) au noyau accumbens (NA)
*Ce système (VTA, SD et NA), appelé souvent à tort centre du plaisir, est le centre du renforcement
Il y a eu une sélection naturelle pour certains comportements qui visent à la survie. Ce n'est pas que les choses agréables. C'est aussi le danger, etc.
{{recompense.jpg}}
*Les ''substances'' ''addictogènes'' vont se comporter comme des stimuli salients (en dangers etc.)
*Malgré la ''diversité'' de leurs ''effets'', qui sont médiés par une variété de neurotransmetteurs différents, ils agissant sur des'' régions cérébrales différentes''
*Leur ''point'' ''commun'' est d’induire une augmentation de la dopamine dans les structures en jeu dans le développement et l’expression des conduites addictives
!!Classificaiton des substances
''__Dépresseurs du SNC__''
*''OH''
*''Opiacés''
*''Sédatifs / hypnotique''
*''GHB'' (sevrage fort +++)
*''Solvants volatils'' (colle, essence)
''Effet'' (sédation)
*''Ivresse''
*''Désinhibition''
*''Sédation''
*Modifications de ''l’humeur''
*''Troubles'' du ''comportement''
*Le plus souvent syndrome de ''sevrage''
NB : font plus de symptômes de sevrage
''__Stimulant SNC__''
*''Cocaïne''
*''Amphétamines''
*''Nictoine''
*''Caféine''
*''Qat'' (proche des amphétamines)
''Effet'' (excitateurs)
*Troubles de ''l’humeur''
*Troubles du ''comportement''
*''Arrêt'' entraîne état ''dépressif''
''__Perturbateurs SNC__''
*''Cannabis''
*''NDMA'' (ecstasy - pourrait aussi être dans les stimulants)
*''LSD''
*''Kétamine''
*''PCP'' (poussière d'ange, effet type viagra aussi, et hallucinatoire à haute dose)
*''Plantes hallucinogènes''
''Effet''
*Modifications de ''l’humeur''
*Troubles du ''comportement''
*''Illusions'', ''délire'' ou ''hallucinations''
NB: En général'' pas de syndrome de sevrage'' à l’arrêt
!!Addiction vs dépendance
*''Dépendance'' = sevrage physique à l'arrêt de la substance
**La dépendance concerne la ''physiologie'': ''tolérance'' et ''sevrage''
**Les hallucinogènes ne font pas de dépendance. Les opiacés le font.
**OH, BZD et opiacés inhibent le cerveau et font plus de symptômes de sevrage.
*''L’addiction'' : addiction avec substances addiction sans substances
**= ''perte de frein/contrôle ''sur un comportement
**Comportement mal adapté
***Focalisation croissante sur recherche et consommation
***Négligence comportements alternatifs
***Perte de contrôle (automatisation)
**Pas tout le monde devient addict
**Mode d'administration change aussi (inhaler va très vite)
**Génétique joue aussi un rôle
CIM-10 et DSM-IV mettent les critères d’addiction sous le terme de « dépendance ».
!!Diagnostic de dépendance (CIM-10)
''3 ou plus des manifestations'', à un moment quelconque de l’année précédente :
*1. ''Désir'' ''impératif'' ou sensation de compulsion pour la prise de substance
*2. ''Difficulté à contrôler'' le comportement de prise de la substance en termes de début, de fin, ou de quantité utilisée
*3. Présence d’un état de ''sevrage'' physiologique en cas d’arrêt ou de diminution de la prise, mis en évidence par les signes suivants : syndrome de sevrage caractéristique de la substance, prise de cette même substance (ou d’une substance étroitement apparentée) dans le but de soulager ou d’éviter les symptômes de sevrage
*4. Signes de ''tolérance'', comme par exemple augmentation nécessaire de la dose de substance psychoactive pour obtenir les effets produits initialement par des doses plus faibles
*5.'' Perte progressive d’intérêt ''pour d’autres plaisirs ou activités en raison de l’usage de substance psychoactive, temps de plus en plus important passé à se procurer ou à consommer la substance, ou à récupérer de ses effets
*6.'' Poursuite de l’usage de la substance malgré ses conséquences manifestement nocives'', telles que lésions hépatiques dues à l’abus d’alcool, état dépressif résultant d’une utilisation massive ou atteinte des fonctions cognitives associée a la substance. On essaiera de déterminer si l’utilisateur était réellement ou pouvait être conscient de la nature et de l’étendue des dommages.
!!Types de consommation
*''Consommation non problématique''
**réglée individuellement et socialement
**sans risques
*''Consommation problématique''
**utilisation nocive (CIM-10) ou abus (DSM-IV)
**entraîne des dommages ou une souffrance (physique, psychique)
**sans critères de dépendance
*''Dépendance'' (CIM-10 et DSM-IV)
**tolérance, sevrage (physiologie et dépendance physique)
**perte de contrôle (addiction)
**centration sur la substance (addiction)
!!!Utilisation nocive (CIM-10) ou abus (DSM-IV)
*Mode de consommation ''inadéquat'' entraînant une ''souffrance'' dans la ''santé'' physique et psychique
*Les champs suivants sont souvent présents mais ne sont pas indicateurs du diagnostic
**Scolarité ou vie professionnelle, famille, relations sociales, situation financière, relation à la loi, l'ordre, la société
*Le DSM-IV rajoute une notion de durée: l’altération dans un domaine doit porter sur une ''année'' ''minimum''
//La personne qui gère sa vie, sauf de temps en temps. Risque de dépendance augmenté néanmoins//
!!!Dépendance (CIM-10 et DSM-IV)
''DSM-IV demande minimum 3 symptômes dans les 12 derniers mois''
*''Tolérance''
*''Sevrage''
*Perte de ''contrôle''
*''Désir'' ''persistant'' de consommer et efforts infructueux pour diminuer ou contrôler la consommation
*''Focalisation'' sur recherche et ''consommation'' de la substance
*''Réduction'' des ''activités'' sociales, professionnelles ou loisirs
*''Poursuite'' de la consommation ''malgré'' les ''effets'' ''négatifs''
La CIM-10 rajoute la notion ''d’envies'' ''irrépressibles''
!!Vulnérabilité
!!!vulnérabilité individuelle
*''Hommes'' / ''femmes''
**Hydrophile : chez femme plus de graisse et moins d’eau → se concentre plus vite et donc a plus rapidement des effets nocifs)
*''Neurobiologique'' et génétique
**Les personnes ont ± d’enzymes de dégradation, ± récepteurs
**OH : asiatiques et peaux rouges supportent très mal (car peu d’aldéhyde DH)
*''Psychologique''
**''Comorbidités'' ''psychiatriques'' (ex: THADA)
**Forte ''réactivité'' ''émotionnelle''
**La substance est un moyen d'''auto-médication''
**Ce n’est pas qu’un pathologie en amène une autre mais c’est du risque : quand trouble psychique, plus de trouble addictif et inversement -> co-existance (mais pas de causalité directe)
!!!Pouvoir addictogène de la substance
*''Capacité'' à induire une ''pharmacodépendance''
*Pouvoir addictogène ''différent'' selon les ''drogues'' (taux de consommateurs dépendants)
*Selon le ''mode'' (voie, quantité, concentration et fréquence) et la ''durée de la consommation ''jouent un rôle dans la vitesse d’installation et dans la sévérité de la dépendance
{{pvs-addictogene.jpg}}
NB: Il n’y a plus de plaisir (éviter symptômes de sevrage, retrouver état de plaisir du début)
!!!Facteurs contextuels
*Facteurs ''culturels''
**Alcool en Europe
*Khat en Ethiopie, Somalie et Yémen (pays musulmans -> moins d'OH ; drogue nationale = psychotrope)
*Rôle des ''pairs''
**Important à l’adolescence
**NB: Le contexte peut induire le début de l'addiction par diminution du déplaisir (p.ex phobie social qui commence à ado -> tabac rend plus facile les interactions sociales).
*''Environnement'' invalidant
*''Précarité'' (difficultés économique dans un pays riche surtout), ''exclusion''
!!Co-morbidités
*Pathologie ''psychiatrique'' ''primaire'' avec ''addiction'' ''secondaire'' (hypothèse de l’automédication: phobie sociale puis addiction, trouble bipolaire puis addiction)
*VS ''addiction'' ''primaire'' puis ''pathologie'' ''psychiatrique'' ''secondaire'' (dépression, délire de persécution sous cocaïne)
*''Coexistence'' pathologie psychiatrique et addiction, les deux d’origine indépendante (addiction et schizophrénie)
* __''Péjorent le pronostic et la réponse au traitement''__
''__Enjeu__''
*Principale ''résistance'' au ''traitement'' de addictions (si on règle pas le problème sous-jacent, on arrivera pas à traiter l’addiction)
*Sous-estimation dans la pratique clinique
*Difficultés de dépistage dans les deux sens (quand on consommé, on arrive plus à savoir quel est l’état psychique)
*Convergence vers une théorie commune en neurobiologie…
__''Prévalence selon le diagnostic psychiatrique''__ (lien ++)
{{co-morbidites-addiction.jpg}}
NB : 1/4 de la population a un problème à un moment donné avec l’OH (consommation excessive), 5% addiction (tabac 15%).
Les deux drogues légales sont les plus fréquentes et les plus mortelles
(en terme de substance, OH est plus dangereux que cocaïne)
''__Prévalence de l'OH associé à d'autres substances__''
{{OH-comorbidites.jpg}}
''__Addiction et troubles anxieux__'' (à savoir en gros !)
{{addiction-anxiete.jpg}}
NB : lors d'addiction, il y a le plus souvent une co-morbidité
''__Addiction et dépression__'' (association fréquente)
*32% des'' personnes dépressives développent une dépendance''.
*Le risque de ''développer'' une ''dépression'' est de :
**54% pour un héroïnomane
**20% pour un patient sous MTD
**30% chez les cocaïnomanes
**72% des patients alcoolodépendants ont un trouble dépressif.
//10 personnes avec tentamen, 8 ont consommé de l’OH avant (désinhibe, facilite le passage à l’acte). Pas forcément addict.//
!!Traitement
!!!Psychopharmacologique
*Traitement de la ''dépendance''
**Sevrage (BZD, MTD, Buprénorphine, vitaminothérapie, nicotine…)
**Rechercher les symptômes de sevrage : risque de delirium tremens etc.
**''CAVE'' :
***Il est ''urgent'' de ''traiter'' les ''symptômes'' de sevrage mais faire un sevrage n’est pas une décision de l’urgence.
***En effet la difficulté n’est pas dans le sevrage mais dans le post- sevrage…
***Et les ''sevrages à répétition sont toxiques pour le SNC'' et pour le sentiment d’auto-efficacité du patient
*Traitement de ''l’addiction''
**''Acamprosate'' (pour l’OH, diminue craving), ''Nalméfène'' (réduction de la consommationd’alcool), ''naltrexone'' (réduit l’effet hédonique de l’OH)
**''Bupropion'', ''varenicline'' pour le ''tabac''
**''Méthadone''
*Traitement des ''comorbidités''
**''Anxiolytiques''
**''Antidépresseurs''
**''Stabilisateurs'' ''d’humeur''
**''Neuroleptiques''
''Modifications du comportement ''(p.ex TCC) est le but
*C’est le patient qui doit modifier son traitement (prescrire le sevrage n’a pas forcément de sens)
*Méthode : comment la personne voit le problème et comment peut le changer (qu’est-ce qu’il imagine pour changer le problème)
*''L’enjeu du traitement est l’addiction'' et non la dépendance
*''L’enjeu du traitement est la qualité de vie'' et non l’abstinence
''__Enjeux__''
{{traitement-addiction.jpg}}
!!Notes
*''Inhalé'' : 2-3min pour aller dans le SNC
*''Fumée'' : 7-10 sec
*''IV'' : 30-40 sec
*On ne substitue pas la cocaïne car toxique en tant que tel (alors que pire effet de l'héroïne est la constipation). Effet de la cocaïne dure 30min environ.
*''Cocaïne'' et ''alcool'' induisent des psychoses chroniques (même à l'arrêt de la molécule). Symptômes typiques : voix et idées de persécution. C'est peu fréquent, traité de la même manière que la schizophrénie.
*''Maniérisme'' : dans la schizophrénie (moteur, cataonique)
*''Locus of control externe'' : c'est le monde qui décide de ce qui va arriver. C'est probablement un FR d'addiction.
*''Craving'' : dure 5-10 min (idem pour la panique dans les phobies)
*''Rechute'' car dans les situations de stress, on utilise les automatismes.
*''Nicotine'' : 8/10 des patients développent une addiction (idem cocaïne).
undefine
undefine
undefine
undefine
undefine
undefine
{{Agranulocytose.jpg}}
!!Définition
*L’Agranulocytose consiste en une ''déplétion de leucocytes'' (PMN, eosinophiles, basophiles) ''dans le sang'', avec des ''GB < 0,5 G/L''
*Les GR ainsi que les Plaquettes ne sont par contre pas diminués
*La ''cause'' la plus fréquente est une ''réaction médicamenteuse''.
!!Médicaments impliqués
*Les ''Antithryroïdiens'' comme le ''Carbimazole'' ainsi que le ''PTU'' (Propylthiouracile)
*La ''Chimiothérapie'' par son effet de ''toxicité médullaire''
*D’autres médicaments comme la Sulfasalazine, clozapine, ticlopidine...
!!Clinique
*Le patient peut présenter une ''fièvre aigue'', avec ''frissons, faiblesse'' ainsi que des ''ulcères oropharyngés''.
*Sans traitement, le patient a de grands risque de décès.
!!Prise en charge
*Faire une ''prise de sang'' pour le labo. Faire aussi une ''pan-culture'' à la recherche d’infection si le patient est fébrile (''hémocultures, urines, Rx-poumon'')
*Initier rapidement une ''antibiothérapie à large spectre'' si le patient est fébrile.
*Et surtout ''STOP le médicament'' incriminé !
undefine
!!Effets indésirables *Troubles digestifs (prescrire omeprazole) *Aggravent une Insuffisance rénale par diminution de perfusion (inhibition de la vasodilatation des PG) *Aggravent une Insuffisance cardiaque par rétention hydro-sodée
![ext[alcool.pdf|./pdf/alcool.pdf]] <!-- Texte caché pour la recherche Alcoolisme alcool oms dépendance -->
undefine
undefine
![ext[nutrition_ped.pdf|./pdf/nutrition_ped.pdf]] <!-- Texte caché pour la recherche Nutrition, formule, lait de vache, HA, OMS, Alimentation, Milk, Cow -->
![ext[allaitement.pdf|./pdf/allaitement.pdf]] <!-- Texte caché pour la recherche -->
![ext[allergie_pediatrique.pdf|./pdf/allergie_pediatrique.pdf]] <!-- Texte caché pour la recherche Paediatric allergy Allergic diseases which affect children include food allergy, eczema, allergic rhinitis and conjunctivitis, asthma, urticaria, insect sting hypersensitivity and anaphylaxis. The reasons allergic diseases are impor tant are: • In the UK up to 40% of children have allergic rhinitis, eczema or asthma and up to 6% develop food allergy • They are increasing in prevalence in many countries • They are the commonest chronic diseases of childhood and the commonest cause of school absence and acute hospital admissions • They cause significant morbidity and can be fatal, with about 20 children dying from asthma and 2 from food anaphylaxis in the UK each year. Explanations of some of the terms used in ‘allergy’ are listed in Box 15.1. Mechanisms of allergic disease Many genes have been linked to the development of allergic disease. Polymorphisms or mutations in these genes lead to a susceptibility to allergy. Allergic diseases occur when individuals make an abnormal immune response to harmless environmen tal stimuli, usually proteins. The developing immune system must be ‘sensitised’ to an allergen before an allergic immune response develops. However, sensitisation can be ‘occult’, e.g. sensitisation to egg from exposure to trace quantities of egg in maternal breast milk. Only a few stimuli account for most allergic disease: • • • Inhalant allergens, e.g. house dust mite, plant pollens, pet dander and moulds in asthma and rhinitis and conjunctivitis - Ingestant allergens, e.g. nuts, seeds, legumes, cow’s milk, egg, seafood and fruits in acute allergic reactions or eczema Insect stings/bites, drugs and natural rubber latex. Proteins with an unstable tertiary structure may be ren dered non allergenic by heat degradation or other forms of processing. For example, some children are allergic to raw apples, but can tolerate eating cooked apples. - Box 15.1 Allergy definitions • Hypersensitivity – objectively reproducible symptoms or signs following exposure to a defined stimulus (e.g. food, drug, pollen) at a dose which is tolerated by normal people. • Allergy – a hypersensitivity reaction initiated by specific immunological mechanisms. This can be IgE mediated (e.g. peanut allergy) or non IgE mediated (e.g. coeliac disease). - • Atopy – a personal and/or familial tendency to produce IgE antibodies in response to ordinary exposures to potential allergens, usually proteins. Strongly associated with asthma, allergic rhinitis and conjunctivitis, eczema and food allergy. • Anaphylaxis – a serious allergic reaction that is rapid in onset and may cause death. Allergic immune responses are classified as IgE mediated or non IgE mediated. IgE mediated allergic reactions have a characteristic clinical course: - - • An early phase, occurring within minutes of exposure to the allergen, caused by release of histamine and other mediators from mast cells. Causes urticaria, angioedema, sneezing and bronchospasm • A late phase response may also occur after 4–6 hours. This causes nasal congestion in the upper airway, and cough and bronchospasm in the lower airway. The majority of severe life threatening allergic reac tions are IgE mediated. - Non IgE mediated allergic immune responses have a delayed onset of symptoms and more varied clinical course. - - The hygiene hypothesis It is not clear why the prevalence of allergic diseases has increased in many countries and the speed of this change suggests an environmental cause. A consistent observation is that the risk is lower in younger children of large families and in children raised on farms. These findings have led to the hygiene hypothesis, which pro poses that the increased prevalence is due to altered microbial exposure associated with modern living con ditions (Fig. 15.1). Although the hypothesis remains the leading explanation for the increase in allergic disease, it is mainly supported by indirect evidence. The allergic march Allergic children develop individual allergic disorders at different ages: • Eczema and food allergy usually develop in infancy; both are often present Hygiene hypothesis Developing rural environment Developed urban environment Family size Small Low Few High Low Large High Many Low High Exposure to parasites Infections Antibiotic exposure Farming exposure Microbiological exposure High Low Allergy and autoimmune disease No allergy or autoimmune disease Figure 15.1 Hygiene hypothesis. • • Allergic rhinitis and conjunctivitis and asthma occur most often in preschool and primary school years 15 Rhinitis and conjunctivitis often precede the development of asthma, and in children with asthma, up to 80% have coexistent rhinitis. The presence of eczema or food allergy in infancy is predictive of asthma and allergic rhinitis in later life. The progression is referred to as the ‘allergic march’. Prevention of allergic diseases Many interventions have been tried to prevent allergic disease, or interrupt the allergic march. These include exclusive breast feeding for at least 3–4 months (or if not possible, then use of hydrolysed formula instead of standard formula milk) to reduce the risk of eczema and cow’s milk allergy and the use of probiotics for eczema in infancy. Other approaches include altering allergen exposure (avoidance of allergens in early life, or alternatively, exposure to large doses of allergens to induce immune tolerance), prebiotics (non digestible oligosaccharides naturally present in breast milk), nutritional supplements (e.g. omega 3 fatty acids, vitamin D, antioxidants, trace elements) and medica tions (e.g. antihistamines, immunotherapy). However, none have been shown, long term, to prevent children from developing allergic diseases. - - - History and examination The child and family may not volunteer a history of allergic disease as they have come to consider the symptoms as normal, e.g. the child who coughs most nights or has a blocked nose most of the time may not perceive this as abnormal. As allergic diseases are mul tisystem, in addition to the signs of individual allergic diseases, examination may reveal: • • • • • • Mouth breathing (Fig. 15.2a). Children who habitually breathe with their mouth open may have an obstructed nasal airway from rhinitis, and there may also be a history of snoring or obstructive sleep apnoea An allergic salute (Fig. 15.2b), from rubbing an itchy nose Pale and swollen inferior nasal turbinates Hyperinflated chest or Harrison sulci from chronic undertreated asthma Atopic eczema affecting the limb flexures Allergic conjunctivitis; may also be prominent creases (Dennie Morgan folds) and blue grey discoloration below the lower eyelids. - - Growth needs to be checked, especially in those with food allergy, where dietary restrictions or malab sorption can lead to nutritional compromise, and in those treated with high dose inhaled/nasal/topical corticosteroids. - Management 272 The individual diseases are managed by general prac titioners, general paediatricians or organ specific spe cialists, e.g. eczema by dermatologists, asthma by respiratory paediatricians. However, allergic diseases - Allergy Figure 15.2 Allergic facies. (a) There is a habitually open mouth due to mouth breathing. (b) An allergic salute, from rubbing an itchy nose. (Courtesy Dr George Du Toit.) (a) (b) coexist and it is therefore helpful to consider allergy as a systemic disease. The role of paediatric allergists is to identify triggers to avoid, and to manage children with multisystem or severe disease. Management of specific conditions is described below. In addition, specific allergen immunotherapy can be used for treating allergic rhinitis and conjunctivi tis, insect stings, anaphylaxis and asthma. During immu notherapy, solutions of an allergen to which the patient is allergic are injected subcutaneously or administered sublingually on a regular basis for 3–5 years, with the aim of developing immune tolerance. It is highly effec tive in providing protection for many years. However, it must be carried out under specialist supervision due to the risk of inducing severe allergic reactions (anaphy laxis). Allergen immunotherapy is widely used in the USA and some countries in Europe. Sublingual immu notherapy appears to be safer than subcutaneous injec tions and is used increasingly. Immunotherapy for food allergy is under investigation but has not yet been shown to be safe for use in clinical practice. Summary Paediatric allergy • Includes food allergy, eczema, allergic rhinitis and conjunctivitis, asthma, urticaria, insect sting hypersensitivity and anaphylaxis • Occurs when a genetically susceptible person reacts abnormally to an environmental antigen • There is an ‘allergic march’ of disorders • Different allergic diseases often coexist – if a child has one, look for others. Food allergy and food intolerance A food allergy occurs when a pathological immune response is mounted against a specific food protein. It is usually IgE mediated, but may be non IgE mediated. - A non immunological hypersensitivity reaction to a specific food is called food intolerance. An example of each in relation to cow’s milk is shown in Figure 15.3. - Food allergy is usually primary, where children have failed to ever develop immune tolerance to the rele vant food. Presentation varies with the agent and the child’s age: • • In infants, the most common causes are milk, egg and peanut In older children, peanut, tree nut and fish and shellfish. Food allergy can also be secondary, where children ini tially tolerate a food and then later become allergic to it. Secondary food allergy is usually due to cross reactivity between proteins present in fresh fruits/ vegetables/nuts and those present in pollens, e.g. a child who can eat apples may develop allergy to apples in the future if they develop allergy to birch tree pollen, because the apple and birch pollen share a very similar protein. This is termed the ‘oral allergy syndrome’ or ‘pollen fruit syndrome’. It is very common but generally leads to milder allergic reactions than primary food allergy, often causing an itchy mouth but no systemic symptoms. - Non IgE food allergy typically occurs hours after ingestion and usually involves the gastrointestinal tract. - Food allergy and intolerance are different from food aversion, where the person refuses the food for psy chological or behavioural reasons. Clinical features In IgE mediated food allergy there is a history of allergic symptoms varying from urticaria to facial swelling to anaphylaxis (Fig. 15.3), usually occurring 10–15 min after ingestion of a food. It is often the first occasion the food is knowingly ingested. - Non IgE mediated food allergy usually presents with diarrhoea, vomiting, abdominal pain and some times failure to thrive. Colic or eczema may also be present. It sometimes presents with blood in the stools in the first few weeks of life from proctitis. 1 2 - - 273 3 Allergy Examples of food allergy and hypersensitivity to milk Condition IgE-mediated food allergy • Immediate cow’s milk allergy Non-IgE-mediated cow’s milk allergy Non-allergic food hypersensitivity • Temporary lactose intolerance Clinical manifestation 15 This 6-month-old breast-fed infant developed an allergic reaction (a), with widespread urticaria immediately after the first formula feed. Skin-prick test were strongly positive to cow’s milk. Widespread urticaria and lip swelling after milk ingestion are shown in (b) and (c) (b) (a) Clinical features of an acute allergic reaction: Mild reaction • Urticaria and itchy skin • Facial swelling Severe reaction • Wheeze • Stridor • Abdominal pain, vomiting, diarrhoea • Shock, collapse (c) A 4-month-old infant, formula fed since birth, has loose stools and is failing to thrive. Skin prick test to cow's milk is negative. Elimination of cow’s milk results in resolution of symptoms which return on trial re-introduction. Previously well 12-month-old infant develops diarrhoea and vomiting. The vomiting settles but watery stools continue for several weeks. Stool sample – no pathogens but positive for reducing substances. Diagnosis – temporary lactose intolerance. Figure 15.3 Examples of food allergy and hypersensitivity to milk. (a) Clinical features of an acute allergic reaction. (b,c) Widespread urticaria and lip swelling after milk ingestion. (Courtesy Dr Pete Smith.) the response, the more likely the child is to be allergic. Negative skin test results make IgE mediated allergy unlikely. - Non IgE mediated food allergies are harder to diagnose. Diagnosis relies on clinical history and exami nation. If indicated, endoscopy and intestinal biopsy may be obtained; the diagnosis is supported by the presence of eosinophilic infiltrates. - - Figure 15.4 Skin prick testing for IgE mediated allergy. A drop of the allergen is placed on the skin, the site is marked and pricked with a needle, and any weals measured. Multiple positive results are present. (Courtesy Dr Pete Smith.) - - Diagnosis The most helpful screening tests for IgE mediated food allergy are skin prick tests (Fig. 15.4) and measurement of specific IgE antibodies in blood (RAST test). Both tests may yield false positive results, but the greater - - - For both IgE mediated and non IgE mediated food allergies, the gold standard investigation in cases of doubt is exclusion of the relevant food under a dieti tian’s supervision, followed by a double blind placebo controlled food challenge. This involves the child being given increasing amounts of the food or placebo, start ing with a tiny quantity, until a full portion is reached. The test should be performed in hospital with full resuscitation facilities available, and close monitoring for signs of an allergic reaction. - - - - - Management 274 The management of a food allergic child involves avoidance of the relevant foods. This can be very - Allergy difficult as the relevant food(s) may be present in small quantities in many foods and food labels are often unclear. Food labelling in the European Union legally requires common food allergens to be clearly dis closed. Food which is packaged or sold elsewhere may be less closely regulated. The advice of a pae diatric dietitian is essential to aid patients avoid foods to which they are allergic and avoid nutritional deficiencies. In addition, the child and family must be able to manage an allergic attack. Written self management plans and adequate training are essential. Drug man agement for mild reactions (no cardiorespiratory symp toms) is with antihistamines. If the child has a severe reaction, treatment is with epinephrine (adrenaline) given intramuscularly by auto injector (e.g. Epipen or Anapen), which the child or parent should carry with them at all times. - - Food allergy to cow’s milk and egg often resolves in early childhood; food allergy to nuts and seafood usually persists through to adulthood. Summary Food allergy • Affects up to 6% of children • The most common causes are milk, egg, nuts, seafood, wheat, legumes, seeds and fruits • Diagnosis of IgE mediated food allergy is based on a suggestive history supported by skin prick tests or specific IgE antibodies in blood - - • Supervised food challenge is sometimes necessary to clarify the diagnosis • Those at risk of a severe reaction, e.g. with coexistent asthma, should carry an epinephrine (adrenaline) auto injector. - Eczema Eczema is classified as atopic (where there is evidence of IgE antibodies to common allergens) or non atopic. Atopic eczema is classified as an allergic disease as many affected children will have a family history of allergy, at least 50% develop other allergic diseases and IgE antibodies to common allergens are present. There is a close relationship between eczema and food allergy, particularly in young infants with severe disease; up to 40% of them have an IgE mediated food allergy, in particular egg allergy. Screening by skin prick or IgE blood testing should be considered. The condition is described in Chapter 24. - - Allergic rhinitis and conjunctivitis (rhinoconjunctivitis) This can be atopic (associated with IgE antibodies to common inhalant allergens) or non atopic. It is an underestimated cause of childhood morbidity. The - Box 15.2 Range of treatment for allergic rhinoconjunctivitis • Second generation non sedating antihistamines (used topically or systemically) - - • Topical corticosteroid nasal or eye preparations (the latter under specialist ophthalmology supervision) • Cromoglycate eye drops • Leukotriene receptor antagonists, e.g. montelukast • Nasal decongestants (use for no more than 7–10 days due to risk of rebound effect) • Allergen immunotherapy – sublingual or subcutaneous (limited by anaphylaxis risk) • Systemic corticosteroids should not be used due to the risk of adverse effects. disease can be classified as intermittent or persistent and mild or severe, although in temperate climates it is often classified as seasonal (related to seasonal grass, weed or tree pollens) and perennial (related to peren nial allergens such as house dust mite and pets). It affects up to 20% of children and can severely disrupt their lives. In addition to its classic presentation of coryza and conjunctivitis, it can also present as ‘cough variant rhinitis’ due to a post nasal drip, and as a chron ically blocked nose causing sleep disturbance and impaired daytime behaviour and concentration, or with predominant eye symptoms. It is associated with eczema, sinusitis and adenoidal hypertrophy and is closely associated with asthma. Treatment of allergic rhinitis may improve the control of coexistent asthma. Treatment options are listed in Box 15.2. - - - Asthma Allergy is an important component of asthma. Affected children often have IgE antibodies to aeroallergens (house dust mite; tree, grass and weed pollens; moulds; animal danders). Allergen avoidance is difficult to achieve. Management of asthma is described in Chapter 16 on Respiratory disorders. - Urticaria and angioedema Acute urticaria usually results from exposure to an aller gen or a viral infection, which triggers an urticarial skin reaction. It may also involve deeper tissues to produce swelling of the lips and soft tissues around the eyes (angioedema), and even anaphylaxis. Chronic urticaria (persisting >6 weeks) is usually non allergic in origin. It results from a local increase in the permeability of capillaries and venules. These changes are dependent on activation of skin mast cells, which contain a range of mediators including hista mine. A classification of urticaria is shown in Box 15.3. Treatment is with second generation non sedating antihistamines. - - - 275 1 2 3 Allergy Box 15.3 Classification of urticaria/angioedema Insect sting hypersensitivity 15 • Acute – resolve within 6 weeks; allergy such as food or drug reactions, or infection are common triggers • Chronic idiopathic – intermittent for at least 6 weeks • Physical urticarias – Cold, delayed pressure, heat contact, solar, vibratory urticaria • Other causes – Water (aquagenic), sweating (cholinergic), exercise induced - – Aspirin and other non steroidal anti inflammatory agents - - – C1 esterase inhibitor deficiency (angioedema, but no urticaria or pruritus). - Drug allergy Drug allergies do occur in children, especially to anti biotics, but only a minority who are labelled ‘drug allergic’ are truly allergic. This is usually because viral illnesses, for which children are often prescribed antibiotics, themselves cause skin rashes. A detailed history is required of the nature and timing of the rash in relation to taking the antibiotics. Allergy skin and blood tests can be used to support a diagnosis of drug allergy, but a drug challenge may be the only way to conclusively confirm or refute the diagnosis. This is contraindicated after a severe allergic reaction and an alternative drug should be sought. This arises mainly from bee and wasp stings, but also from ant species in the USA, Asia and Australia. The severity of the allergic reaction may be: • • • mild – local swelling moderate – generalised urticaria severe – systemic symptoms with wheeze or shock. Children with a previous mild or moderate reaction are unlikely to develop a severe reaction in the future and the families can be reassured. Those who had a severe reaction should carry an epinephrine (adrenaline) auto injector, and allergen immunotherapy should be considered. - Summary Insect sting hypersensitivity • Mainly to bee and wasp stings • Following a severe reaction, an epinephrine (adrenaline) auto injector should be carried - • Immunotherapy is highly effective in children who have had a severe reaction. Anaphylaxis This serious and potentially life threatening allergic reaction is described in Chapter 6 on Paediatric emergencies. -->
undefine
{{alzheimer_schema.jpg}}
*La ''Maladie d'Alzheimer'' correspond à la majorité des cas de démences. Elle touche les gens des 65ans, mais est surtout présente chez les patients de 80ans. Il existe une forme précoce rare qui peut commencer avant 65ans. Chez les patients atteints de Down, on trouve des Alzheimer précoces.
*Elle est due à une ''dégénération neuronale'' avec ''atrophie corticale'' et ''atrophie hippocampique''. Histologiquement, on trouve des ''dépots de Beta-Amyloïde'' ainsi que des ''lésions neurofibrillaires Tau''.
*la ''Clinique'' commence de manière ''insidieuse'' et comprend:
**''Troubles de la mémoire épisodique''
**''Désorientation spatio-temporale''
**''Troubles du langage''
**''Apraxies et perturbation des fonctions exécutrices''
**''Troubles de la personnalité'' (apathie, désocialisation, déshinibition)
*dans les ''stades avancés'', le patient a besoin d'''aide à domicile'' et peut développer des ''hallucinations'' et autres symptômes psychiatriques. Cela peut aller jusqu'à une ''dépendance totale'' avec ''incontinence'' fécale et urinaire. Le patient peut même oublier son propre nom.
*L'''[[IRM|alzheimer_irm.jpg]]'' montrera une ''atrophie corticale'' et une ''atrophie hippocampique'' avec élargissement des ventricules.
*Le ''Diagnostic'' est surtout ''clinique'' avec comme symptôme central les ''troubles de mémoire'', associé à d'autres symptômes. Il doit y avoir une ''évolution graduelle'', pas juste des symptômes lors d'un épisode de délirium. Il faut ''exclure les autres causes'' de démence.
*les ''traitement'' ralentissent la maladie mais ne la soignent pas. on utilise des ''inhibiteurs de la cholinesterase'' (donépézil, rivastigmine, galantamin), de la ''Mémantine'' ainsi que de la ''Vitamine E''.
undefine
undefine
undefine
!!Définition
*''Aménorrhée'' ''primaire'' : pas de règles à 16ans
**Dépend de si caractères secondaires et âge de la puberté
**Puberté précoce <8-9ans , puberté tardive : >13ans
**Si anomalies des caractères sexuels secondaires : on investie plus tôt
*''Aménorrhée'' ''secondaire'' : pas de règles pendant ≥3mois
**Investigations dès 3mois si douleur pelvienne p.ex
**Investigations dès 6mois si asx.
NB : Corps jaune a une durée de vie de 14j (partie fixe des règles).
{{amenorrhees.jpg}}
!!Rappel anatomo-physiologique
Menstruation = desquamation de l’endomètre de façon cyclique.
*Pour qu’elle ait lieu, il faut un ''conduit'' ''cervico''-''vagino''-''vulvaire'' normal.'' ''
*Il faut aussi que ''l’endomètre'' subisse une variation cyclique (proliférative sous eostrogènes et différenciation sous progestérone, qui vient de l’ovaire), il faut donc aussi un ''ovaire'' ''normal''.
*Il faut aussi que ''l’hypothalamus'' sécrète GnRH = LHRH et que ''l’hypophyse'' sécrète les LH et FSH.
**Sécrétion de GnRH est tonique chez l’homme et cyclique toutes les 90min chez la femme (SOPK = sécrétion tonique).
*Hypothalamus est sous la direction du ''cortex''. On sait que la DA joue un rôle (inhibiteur de la sécrétion de la PRL).
**Compression du système porte hypothalamo-hypophysaire peut aussi faire une aménorrhée
**PRL : hyperprolactinémie est une étiologie des aménorrhées (tumoral, médicamenteux, idiopathique)
*''Surrénale'', ''Thyroïde'' sont les deux glandes importantes
**Hormones sexuelles viennent du cholestérol
**Endomètre est plein de rc thyroïdiens (lors de fausses couches à répétition, investiguer la thyroïde)
*Maladies inflammatoires, AI, sport intense, anorexie etc. (→ ''perturbation'' de ''l’état'' ''général'') : influence sur le cycle
!!Causes
*''Grossesse'' : 1er cause
*Utéro-vaginales
*Ovarienes
*Hautes (axe gonadique : hypophyse, hypothalamus, cortex)
*Autres : endocriniennes et non endocriniennes
!!Diagnostic et Traitement
!!!Causes utéro-vaginales
''__Aménorrhée primaire__'' (pas d’anomalie des caractères sexuels secondaires)
*''Anomalies'' ''congénitales'' de l’appareil génital féminin
**Embryologique : appareil uro-génital féminin dérive des canaux de Müller (utérus avec trompes) et du bourgeon urogénital qui se creuse et donne l’urètre, la vessie, le rectum et la partie basse du vagin. Si obstruction : pas d’écoulement ; si pas d’utérus : pas de cycle du tout
**Douleurs cycliques 1x/mois, douleur plus précoces si obstacle haut
**Imperforation de l’hymen : le plus fréquent
***Diagnostic : clinique (anneau creux avec ponts, cribliforme, non perforé). Manoeuvre de valsalva (toux) : bombement d’une membrane bleutée (car le sang est derrière)
***Investiations : échographie abdominale, IRM pour voir si pas autres malformations (et toujours regarder aussi appareil urinaire et le reste de l’appareil génital)
***Traitement : sous AG, incision de l’hymen pour éviter que se referme
**Autres : agénésie du vagin, de l’utérus, cloison vaginale, hémi-utérus borgne etc.
**Rokitansky-kyster-Hauser syndrome p.ex (agénésie de l’appareil génital)
__''Aménorrhée secondaire''__
*Avec ''douleurs'' ''pelviennes''
**Chirurgie au niveau du col : ''conisation'', lors d’anomalie du frottis cervico-vagial avec lésions pré-cancéreuses (Risque de sténose au niveau du col du à la fibrose)
***Diagnsotic : anamnèse
***Traitmenet : Chirurgie avec reperméabilisation du col
*''Sans'' ''douleurs'' ''pelviennes''
**//Post hystérectomie//
**''Synéchies'' ''utérines'' (syndrome d’Asherman) : Adhérences et fibrose endo-utréine avec curetage trop agressif ± infection. La cavité utérine est devenue fibrotique et il n’y a plus d’endomètre (p.ex grossesse arrêtée, saignement abdomnants résistants au traitement médical, IVG)
***Diangostic : anamnèse et hystérosalpingographie
***Traitement : hystéroscopie pour couper les ponts fibreux et traitement oestrogénique pour essayer de stimuler les quelques cellules qui restent.
NB : cancer fait saigner ++
!!!Causes ovariennes
__''Aménorrhée primaire''__
*''Génétique'' : Turner, moisaïque, résistance aux androgènes p.ex
**Diagnsotic : Signes d’anomalie des caracères sexuels et pas de cause urétro-vaginales -> Karyotype (polymorphisme : mosaïque aussi)
__''Aménorrhée secondaire''__
*''Ménopause'' ''précoce''
**Femmes de 35-40ans, bouffées de chaleur (cause : il y aurait des mosaïques, mais on a en général pas de cause) (peut être capital folliculaire moindre).
*''Iatrogène'' : RT, chimiothérapie (on fait conservation ovocytaire ou ovarienne dans ces cas).
!!!Causes hautes
__''Ovaires polykystiques''__ (syndrome des ovaires polymicrokystiques)
*Cause : GnRH tonique (facteurs génétiques, maturation de l’axe gonadique)
*S’arrange avec l’âge
*3 critères
**Aménorrhée « secondaire » (car saignements sans ovulations, mais saignements liés à une desquamation de l’endomètre car sécrètent oestrogènes) -> cycles irréguliers
**Ovaires polymicrokystiques (aspect de nid d’abeille)
**Hyperandrogénisme
*Obésité, diabète (intolérance au glucose), prédisposition aux troubles CV, HTA associée (implication thérapeutique)
*Diagostic : clinique + imagerie (polykystose) + PS (profil endocrino)
**Profil endocrino : FSH, LH, PRL, TSH, cortisol urinaire, androgènes surrénaliens et ovariens (17 α hydroxyprogestérone, δ4 androsténdione, sulfate DHEA, testostérone) + glycémie (car risque de diabète)
*Traitement :
**Si veut être enceinte : stimulateurs de l’ovulaiton, chirurgie si suffit pas avec drilling = perforation de la coque de l’ovaire (car les ovocytes peuvent pas sortir car épais). Si marche pas, on ajouter un antidiabétique oral (qui marche apparement). .
**Si souhaite juste régler la régularité menstruelle : pilule contraceptive pour bloquer l’hypophyse (mettre au repos l’axe)
__''Hyperprolactinémie''__
*Cause hypophysaire : Taux élevés de prolactine
*Galactorée, aménorrhée ± céphalées, troubles visuels
*Investigations : profil endocrino (FSH, LH, PRL (sensible au stress, la doser après bonne nuit de sommeil), TSH, cortisol urinaire, androgènes surrénaliens et ovariens (17 α hydroxyprogestérone, δ4 androsténdione, sulfate DHEA, testostérone) + glycémie (car risque de diabète))
**Prise de médicaments (anti-psychotiques) ? Céphalées, troubles visuels (cause tumorale) ?
**Si signes de tumeur (céphalées, troubles visuels) : IRM de l’hypophyse (-> micro ou macro-adénome), compression de la tige
**//Si pas de médicaments, pas de signes cliniques de tumeur : on pourrait essayer un traitement médical : cabergoline, bromocriptine (agonistes DA)//
*Traitement
**Triatement neuro-chirurgical (avis neuro-chirurgical) vs médical (carbergoline/bromocriptine)
**SI pas de projet de grossesse : contraception
**Si projet de grossesse : médicaments jusqu’à ce qu’elle soit enceinte
***Stimulateurs de l’ovulation si ça marche toujours pas
**Hyperprolactinémie physiologique pendant la grossesse, dans ce cas pour la surveillance il faut surveiller les signes cliniques (céphalées, troubles visuels).
''__Compression de la circulaiton porte hypophysaire__''
**Autre cause d’aménorrhée secondaire
!!!Autres
__''Endocriniennes ''__
*''Thyroïde'' (hypo et hyper - TSH)
*''Surrénal'' (Cushing ou addition - cortisol)
__''Non endocriniennes''__ (altération de l’état général)
*''Maladie'' ''inflammatoire''
*''Maladies'' ''AI''
Dans non endocriniennes ou hautes (''controversé'')
*''Activité'' ''physique'' ''intense''
*''Anorexie''
*''Obésité''
*''Troubles'' du ''sommeil''
undefine
!!Tonsillectomie *Children with ''recurrent tonsillitis'' are often referred for'' removal of their tonsils'', one of the commonest opera tions performed in children. Many children have large tonsils but this in itself is not an indication for tonsillectomy, as they shrink spontaneously in late childhood. *The indications for tonsillectomy are controversial, and must be balanced against the risks of surgery, but include: **Recurrent severe tonsillitis (as opposed to recurrent URTIs) – tonsillectomy reduces the number of episodes of tonsillitis by a third, e.g. from three to two per year, but is unlikely to benefit mild symptoms. **A peritonsillar abscess (quinsy) **Obstructive sleep apnoea (the adenoids will also normally be removed). !!Adenoidectomie *Like the tonsils,'' adenoids increase in size until about the age of 8 years and then gradually regress.'' In young children, the adenoids grow proportionately faster than the airway, so that their effect of narrowing the airway lumen is greatest between 2 and 8 years of age. ''They may narrow the posterior nasal space sufficiently to justify adenoidectomy''. Indications for the removal of both the tonsils and adenoids are controversial but include: **Recurrent otitis media with effusion with hearing loss, where it gives a significant long term additional benefit, especially if reinsertion of grommets is considered **Obstructive sleep apnoea (an absolute indication).
undefine
undefine
//en construction...//
{{anemie_histo.jpg}}
!!Généralités
*L’anémie aplasique est une ''anémie normochrome normocytaire''. Elle est due à une ''pancytopénie'' (anémie, thrombocytopénie, neutropénie) résultant d’une ''insuffisance de la moelle osseuse''.
*les ''Causes'' sont surtout ''Idiopathiques'', ou dues aux ''radiations''. Certains ''médicaments'' (chimiothérapies, chloramphenicol) ou ''toxiques'' (benzene, insecticides) peuvent aussi être en cause. Certains ''virus'' (HCV, EBV, Parvovirus B19) aussi.
*la ''Clinique'' correspondra a celle d’une ''anémie'' (Fatigue, dyspnée) d’une ''thrombocytopénie'' (pétéchies) et d’une ''neutropénie'' (infections)
*La ''Biopsie'' confirme le diagnostic, avec une ''moelle hypocellulaire'' avec ''absence de cellules progénitrices'' des trois lignées.
*Le ''Traitement'' se base sur les ''greffes de moelle''. Penser à traiter la cause et éventuellement faire des transfusions de plaquettes et de GR.
{{anemies_schema.jpg}}
{{anemie_histo.jpg}}
!!Définition
*l’anémie ferriprive est une ''anémie microcytaire hypochrome''. C’est la première cause d’anémie dans le monde. L’anémie est le dernier stade de la déplétion en fer.
*Ses deux causes les plus fréquentes sont les ''Menstruations'' ainsi que les ''Hémorragies Gastro-Intestinales'' (surtout chroniques).
*Une autre cause est une ''augmentation des besoins de fer'', qu’on retrouve chez les ''enfants'' (croissance et le fait que le lait en est pauvre), les ''adolescents'' (surtout les femmes avec règles+croissance) et les ''femmes enceintes'' (augmentation des besoins)
!!Clinique
*Le patient sera ''pale, fatigué'' de manière généralisée. Il peut présenter une ''dyspnée à l’effort'', ainsi qu’une ''hypotension orthostatique''.
*on parle d'//anémie spoilative// lorsque l'anémie est due à un //saignement//.
!!Diagnostic
''Labo''
*On observera une ''diminution de la ferritine sérique'' (reflet des réserves de fer), une ''diminution du fer sérique'' (fer non lié à l’hème), une ''augmentation de la transferrine et de la capacité de fixation du fer (Cft)'' (reflet de la tentative de compenser) et une ''diminution de la saturation de la transferrine''.
*__Rappel:__ la ferritine étant une protéine de la phase aigue, elle peut quand même être plus élevées si le patient est en pleine inflammation.
''Frottis sanguin''
*On observera des ''GR hypochromes microcytaires''.
''Biopsie de moelle osseuse''
*C’est le Gold standard mais rarement fait. On le fait si on trouve une anémie au labo mais qu’on ne découvre pas le saignement.
!!Traitement
*La ''Substitution de Fer Oral'' est à essayer en premier, le matin accompagné de Vitamine C pour aider à l’absorption.
*Dans les cas d’echec ''du traitement oral'', on peut considérer la ''substitution de Fer IV''. Aller jusqu’à la transfusion ne se fait que très rarement dans les cas extrêmes.
*Ne pas oublier de traiter la cause !
{{anemies_schema.jpg}}
{{anemie_histo.jpg}}
!!Définition
*L’anémie Hémolytique est dues à une ''destruction des GR'' par une grande variété de causes possibles. La moelle osseuse normale réagit avec une ''augmentation des réticulocytes'' qui n’arrive quand même pas à suivre (anémie hyperrégénérative).
*Elle peut être ''non-autoimmune (congénitale'' ou ''acquise'') ou ''autoimmune'', ce qu’on peut distinguer par un ''test de coombs''.
!!Etiologies
*''Congénitale''
*''Sphérocytose, Elliptocytose'' (défauts de membrane)
*''déficit G6Pd, déficit pyruvate kinase'' (défauts d’enzymes)
*''Thalassemie, Hemoglobinopathies, Drépanocytose'' (défaut de synthèse de l’Hb)
*''Acquise''
*''Médicaments'' (Suflasalazine, Sulfonamides)
*''Microangiopathie'' (SHU, PTT, HELLP)
*''Macroangiopahties'' (Valves prothétiques)
*''Autoimmune''
*''Anticorps chauds (IgG'') (Idiopathique, Lymphome, LED, médicaments
*''Agglutines froides (IgM'') (secondaire aux infections, mycoplasme, EBV,...)
!!Clinique
*Le patient aura la ''jaunisse'' ainsi que des ''urines foncées'' (hémoglobinurie), en plus de ses ''signes d’anémie''.
!!Investigations
*''bilan hémolytique''
*Pour confirmer face à des ''réticulocytes augmentés'' qu’on est face à une anémie hémolytique, on observe la ''bilirubine augmentée'', l’uribilinogène ''augmenté'', le ''LDH augmenté'' et l’haptoglobine ''diminuée''.
*__Rappel:__ des réticulocytes augmentés avec un bilan hémolytique négatif implique une anémie suite à une hémorragie aigue.
*''test de Coombs''
*A faire pour distinguer l’origine auto-immune ou non de l’anémie hémolytique
*''frottis sanguin''
*des ''schizocytes'' parlent pour une ''anémie intravasculaire'' tandis que des ''spherocytes'' parlent pour une ''anémie extravasculaire''.
!!Traitement
*le traitement comprend des ''transfusions sanguines'' ainsi que de la ''supplémentation en folates''
{{anemies_schema.jpg}}
{{anemie_histo.jpg}}
!!Définition
*L’Anémie inflammatoire peut être due à une ''infection'', un ''cancer'', ou une ''maladie infammatoire''. Elle est due à une augmentation de production d’Hepcidine par le foie à cause de l’inflammation.
*Elle est généralement ''normochrome normocytaire'' mais peut parfois être ''hypochrome hypocytaire'' dans le cas sévères
*__Rappel:__ L’Hepcidine est une hormone régulatrice du fer qui le fait retenir dans les cellules quand son niveau sanguin est trop élevé.
*au ''Labo'' on trouvera le ''fer sérique, ferritine augmentée'' (ainsi que les autres protéines de la phase aigues, CRP, fibrinogène, plaquettes) ainsi qu’une ''capacité de fixation du fer basse''. En cas de carence en fer, on ne peut pas se fier a la ferritine,il faut regarde la ''sTFR'' (recepteur soluble à la transferrine) qui est augmenté.
*Le ''traitement'' implique surtout de traiter la ''cause'', pas besoin de donner du fer car l’anémie est souvent modérée.
{{anemies_schema.jpg}}
{{anemie_histo.jpg}}
!!Définition
*l’Anémie Macrocytaire est principalement due soit à un ''déficit de vit.B12'', soit à un ''déficit en folates''.
!!Déficit en Vit. B12
*__Rappel:__ La Vit.B12 (ou cobalamine) se lie au facteur intrinsèque dans l’estomac (sécrété par les cellules pariétales) et est absorbée dans l’Iléon terminal. Les stocks hépatiques sont suffisants pour 3-4 ans. La source principale est la viande et le poisson.
*les ''Causes'' de manque en B12 peuvent être une ''anémie pernicieuse'' (ou anémie de Biermer, caractérisée par un déficit en Facteur Intrinsèque à cause d’auto-anticorps contre les cellules pariétales), une ''diète vegan'', ou une ''mauvaise absorption (gastrectomie, gastrite, crohn, résection iléale'')
*la ''Clinique'' sera des signes d’anémie avec une ''glossite'' et possiblement des ''neuropathies'' (démyélinisations avec perte de proprioception, atteinte du MNS, démence,...)
*au ''labo'' on trouvera une ''anémie'' et un la ''B12 sérique basse''. En cas d’anémie pernicieuse on peut doser les anticorps-anti cellules pariétales.
*le ''Traitement'' implique de la ''vitamine B12 IM 1x/mois à vie'' (ou PO journalier possible si l’absorption est fonctionnelle).
!!Déficit en Folates
*__Rappel:__ les folates tiennent quelques mois en stock. La principale source d’alimentation est dans les légumes verts.
*la ''cause'' est surtout une ''mauvaise diète'' (café pain, alcoolisme) et d’autres causes (grossesse, demande augmentée, mauvaise absorption, etc.)
*la ''clinique'' ressemble au déficit en B12, avec des signes d’anémie et une ''glossite'', mais par contre ''sans neuropathie'' !
*le ''traitement'' implique du ''folate PO 1x/jour'' régulier.
{{anemies_schema.jpg}}
undefine
undefine
![ext[anesthesiologie.pdf|./pdf/anesthesiologie.pdf]] <!-- Texte caché pour la recherche Anestésie anesthesie anesthésiologie anestésiologie lidocaine caïne procaine procaïne METs MET Opération Risque -->
{{anevrisme_aorte_schema.jpg}}
!! Définition
* Un ''Anévrisme de l'Aorte'' correspond à une ''dilatation >1.5cm'' de l'aorte comparé à son diamètre initial.
*un ''anévrisme vrai'' comprend les ''trois parois ''des vaisseaux (intima, media, adventice) tandis qu'un ''pseudo-anévrisme'' ne comprend qu'une partie des parois
*Les anévrismes peuvent se compliquer avec des ''thrombus'', des ''dissections'', ou des ''fistules''
*La majorité des anévrismes sont des ''AAA'', ou Anévrisme Aortique Abdominal, dont la localisation la plus fréquente est ''infra-renal''.
*Les anévrismes sont associés au ''tabac'' et à l'''HTA''.
*L'''Etiologie'' des anévrismes peut être:
**''Atherosclérose''
**''Infectieux'' (dont "mycotiques") qui sont des pseudoanévrysmes dus surtout à //staphylococcus// et //salmonella// //Syphilis// et //Champignons// qui sont sacculaires
**''Marfan / Ehler-Danlos''
**''Post-traumatique''
**''Vasculite''
**''Syphillis''
**Fongique
!! Clinique
*La majorité des anévrismes sont ''asymptotiques''
*Le patient peut présenter des ''douleurs abdominales'' ou des ''syncopes''.
*A l'examen clinique on trouve une ''masse pulsatile abdominale''
!! Investigations
* Un [[US abdominal|anevrisme_aorte_us.jpg]] permet de trouver à 100% l'anévrisme. Le diamètre normal est de 2cm.
* Un[[ CT injecté|anevrisme_aorte_cta.jpg]] ou un IRM permet de mieux définir le contenu de l'anévrisme.
!!Traitement
*L'''Indication opératoire'' se suivant la taille, typiquement à 5.5cm, ou a >1cm de croissance/an.
*Les choix d'opération sont ''endovasculaire'' ou la ''chirurgie ouverte''.
*un AAA rupturé avec hypotension ne doit pas passer par l'imagerie mais doit être orienté directement au bloc.
undefine
undefine
undefine
{{anevrysme_ventriculaire.jpg}}
!! Généralités
* Un ''Anévrysme ventriculaire'' sont une des possibles ''complications d'Infarctus'' du Myocarde qui touchent surtotu le ''ventricule gauche''.
* Ils se développent généralement sur des zones de ''paroi affaiblie'' par l'infarctus.
*En général ils ''ne se rompent pas'' car ils sont entourés de ''tissus cicatriciel''.
*Il ne faut pas les confondre avec les ''pseudoanévrysmes'' qui résultent d'une rutpure du myocarde contenue, qui peuvent se rompre et qui ne comprennent pas toutes les couches du coeur.
*Au niveau de l'''ECG'' ils peuvent être associés par une [[surélévation-ST|anevrysme_ventriculaire_ECG_A.jpg]].
*Ils peuvnet être responsables de la formation d'''Embols''
*Le ''Traitement'' est la ''Chirurgie'' avec une réduction ventriculaire.
undefine
undefine
{{angiodysplasie_colon.jpg}}
!!Généralités
*une ''angiodysplasie du colon'' est une ''malformation vasculaire'' de la sous-muqueuse du colon, consistant en des ''veines dilatées''
*c'est une des ''causes fréquentes'' d'[[Hémorragie Digestive Basse]]
*le saignement est souvent de ''bas grade'' mais peut être massif dans quelques cas
*en général le saignement ''cesse spontanément''.
*le ''diagnostic'' de choix est la ''coloscopie''
*le ''traitement'' est l'''électro-coagulation'' lors de la coloscopie
undefine
undefine
{{maladiee_coronaire_schema.jpg}}
!! Définition
*L'''Angor Stable'' est un type de ''Maladie Coronarienne'' causée principalement par une ''sténose des coronaires'' due à des ''plaques d'athéroscléroses''. La rupture de ses plaques peut causer des [[SCA|Syndrome Coronarien Aigu]].
*L'Angor stable est liée avec l'''HTA'', le ''Tabac'', l'''Hyperlipidémie'', le ''Diabète'' (Angines silencieuses), l'''Anamnèse familiale'' et l'''Âge''
*l'''Angor Stable'', ou Angine Stable, correspond à une ''[[douleur retrosternale|Douleur Thoracique]]'' causée par une ''ischémie myocardique'' mais ''sans évolution dans le temps ou dans l'intensité''.
*L'Angine stable dure ''<20 min''. Si la durée dépasse 20 min on est dans le cas d'un [[Angor Instable|Syndrome Coronarien Aigu]].
*La ''Classification de l'Angine'' se fait en 4 niveaux:
|!Classification|!Symptomes|
| ''Classe I'' |Angine seulement lors d'efforts importants|
| ''Classe II'' |Angine légère lors d'efforts normaux (marcher, après un repas, dans le froid, lors de stress)|
| ''Classe III'' |Angine sévère lors d'efforts normaux (marcher, après un repas, dans le froid, lors de stress)|
| ''Classe IV'' |Angine au moindre effort ou au repos|
!!Clinique
*Chez beaucoup de patient l'angine est ''Asymptomatique'', ou silencieuse, surtout chez les ''diabétiques''.
!!!''Symptômes Typiques''
*''Oppression retrosternale constrictive'', décrite souvent ''En barre'' sur la poitrine, ou en ''mimant un poing serré sur le sternum'' (signe de Levine)
*''Irradiation en paresthésie'' des douleurs au niveau de l'''Epaule'', des ''Bras'' ou de la ''Machoire''.
*''Equivalents-angineux sans douleur'', pouvant s'exprimer comme des ''Dyspnées'', des ''Intolérances à l'effort''ou des ''Epigastralgies''
*''Durée'' des douleurs ''<20 min''
*''Déclenchement'' des douleurs par l'''exercice'', le ''froid'', les ''repas'' ou encore les ''emotions fortes / stress''.
*''Soulagement'' des douleurs par le ''repos'' ou les ''nitrés''.
!!!''Symptômes atypiques''
*Une douleur ''en coup de couteau''
*Une douleur ''respiro-dépendante''
*Une douleur ''sensible à la palpation''
*Une douleur de ''durée très brève'' (secondes) ou ''très longue'' (plusieurs heures)
*Une douleur de ''localisation punctiforme''
*Une douleur apparaissant ''à la fin de l'effort''
*Une douleur ''soulagée par la disparition d'un facteur anxiogène'', ou soulagée par le repas, ou soulagée par la distraction du patient
!! Investigations
*Commencer par un ''ECG au repos'' qui sera le plus souvent ''normal''.
** Il peut aussi montrer des[[ Ondes Q|ECG_Ondes_Q.jpg]] pathologiques, témoins d'anciens Infarctus du Myocarde
**En Revanche si l'ECG montre des[[ signes de STEMI ou NSTEMI|ECG_infarctus.jpg]], considérer le patient comme un [[angor instable|Syndrome Coronarien Aigu]].
* Faire un ''Test d'Effort'' pour confirmer le diagnostic d'angor stable. le test peut être:
**''ECG d'effort'' qui permet de trouver une ischémie avec [[sous-élévation ST|ECG_sous_elevation_st.jpg]] de façon sensible.
**''Echographie d'Effort'' réalisée avant/après l'exercice et qui démontrera des ischémies induites par l'effort s'exprimant sous formes d'''Akinésie / Dyskinésie''.
**Les tests peuvent être augmentés en sensibilité avec une ''Scintigraphie d'Effort'' cardiaque en médecine nucléaire, qui montre la ''perfusion du myocarde''.
**Si un effort physique est impossible un ''effort pharmacologique'' peut être induit par ''Dobutamine'' ou ''Adenosine''.
**Lors des ischémies silencieuses on peut aussi faire un ''Holter'', correspondant à un ECG 1-piste sur 24h pouvant détecter la pathologie.
*Si un des tests d'effort est ''Positif'', il faut alors faire une ''Coronarographie'' avec ''[[Catherterisation|coronarographie_catheter.jpg]]'' puis souvent recascularisation par [[Stent|coronarographie_stent.jpg]] dans les coronaires touchées.
!! Traitement
# ''Diminution des FRVC'' notamment avec l'arrêt du tabac, la diminution des lipides, la gestion du diabète, la baisse de la tension, la perte de poids, l'exercice et la diète
# ''Aspirine'', ''Beta-Bloqueurs'' et ''Nitrés''
# ''Revascularisation'' par stent pour les cas sévères
![ext[anorexie.pdf|./pdf/anorexie.pdf]]
!!Epidémiologie
*''Anorexie'' ''mentale'' : 0-1% population
*''Boulimie'' : 2-4% population
*''Adolescentes'' : Anorexie : 1-2% ; Boulimie : 2-8%
*Rapport homme : ''femme'' 1:10 (mais difficile de savoir si moins diagnostiqué chez les hommes).
L'anorexie a souvent été stigmatisée (démons, force du mal, etc). Maladie dont origine et causes peu clairs.
!!IMC
*BMI (Body Mass Index) ou indice de Quételet ou IMC (Indice de Masse Corporelle) = poids [kilos] / (taille [mètre])^^2^^
**≤18.5 : ''insuffisance'' ''pondérale''
**18.6- 25 : ''poids'' ''normal''
**25.1-30 : ''excès'' de ''poids''
**30.1-40 : ''obésité''
**≥40 : ''obésité'' ''morbide''
{{BMI.jpg}}
!!Etiologie
{{etiologie.jpg}}
*Les ''centres de la faim'' seraient dysfonctionnels
*''Société'' : l'idéal du monde "occidental" est plutôt dans la minceur.
*''Familiaux'' : thérapie de famille recommandée dans l'anorexie précoce (car dysfonction familiale ++) (peu d'expression des émotions notamment colère et attente parentales ++)
*''Psychiques'' : refus de la puberté (aménorrhée = 1er symptôme et dernier symptôme qui reste), refus de la sexualité, peur de perte de contrôle
!!Types
!!!Anorexie mentale
L'anorexie mentale n'est pas "juste un BMI". L'anorexie est plus grave que la boulimie.
__''DSM-V''__
*A. ''Restriction'' des apports énergétiques ''par rapport aux besoins'' conduisant à un ''poids significativement bas compte tenu de l'âge, du sexe, du stade de développement et de la santé physique''. Est considéré comme significativement bas un poids inférieur à la norme minimale attendue.
*B. ''Peur intense de prendre du poids'' ou de devenir gros ou comportement persistant interférant avec la prise de poids, alors que le poids est inférieur à la normale.
*C. ''Altération de la perception du poids ou de la forme de son propre corps'', influence excessive du poids ou de la forme corporelle sur l’estime de soi ou déni de la gravité de la maigreur actuelle. (=''dysmorphophobie'')
*//Dysmorphophobie : n'est pas considéré comme une idée délirante, car pas de rupture complète avec la réalité. Il y a une certaine critique du poids -> contrôle du poids//
__''Type''__
*Type ''restrictif'' (“restricting type”) : Pendant les trois derniers mois, la personne n'a pas présenté d'accès récurrent d'hyperphagie (gloutonnerie) ni recouru à des vomissements provoqués ou à des comportements purgatifs (c'est-à-dire laxatifs, diurétiques, lavements) ce sous-type décrit des situations où la ''perte de poids est essentiellement obtenue par le régime, le jeûne et/ou l'exercice physique excessif''.
*Type ''accès hyperphagiques/purgatif'' : Pendant les trois derniers mois la personne a présenté des ''accès récurrents de gloutonnerie et/ou a recouru à des vomissements provoqués ou à des comportements purgatifs'' (c'est-à-dire laxatifs, diurétiques, lavements)
__''Sévérité actuelle''__
*''Léger'' : IMC > à 17
*''Moyen'' : IMC 16 - 16,99
*''Grave'' : IMC 15 - 15,99
*''Extrême'' : IMC < 15
C'est ''surtout la vitesse de perte de poids'' qui est important. Souvent les anorexiques font la cuisine, inondent les autres de nourriture (mais pas elles).
!!!Boulimie avec ou sans VO
Très ritualisé, font les courses s'installent etc.
*A.''Survenue récurrente de crises de boulimie'' (“binge eating”). Une crise de boulimie répond aux deux caractéristiques suivantes :
**1. ''Absorption, en une période de temps limitée ''(p. ex. moins de deux heures), d'une quantité de nourriture largement supérieure à ce que la plupart des gens absorberaient en une période de temps similaire et dans les mêmes circonstances
**2. ''Sentiment d'une perte de contrôle sur le comportement alimentaire'' pendant la crise (p. ex. sentiment de ne pas pouvoir s’arrêter de manger ou de ne pas pouvoir contrôler ce que l’on mange ou la quantité que l’on mange).
*B. ''Comportements compensatoires inappropriés'' et récurrents visant à ''prévenir la prise de poids'', tels que : vomissements Provoqués, emploi abusif de laxatifs, diurétiques, lavements ou autres médicaments, jeûne, exercice physique excessif.
*C. Les crises de boulimie et les comportements compensatoires inappropriés surviennent'' tous deux, en moyenne, au moins une fois par semaine ''''pendant trois mois.''
*D. ''L’estime de soi est influencée de manière excessive'' par le poids et la forme corporelle.
*E. Le trouble ne survient'' pas exclusivement pendant des épisodes d’anorexie mentale''.
''Médicaments'' utilisés pour perdre du poids : hormone thyroïde, amphétamines, "coupe faim".
Plus on passe de temps à avoir des comportements compensatoires, plus la maladie est sévère.
__''Sévérité ''__
*''Légère'' : une moyenne de 1 à 3 épisodes de comportements compensatoires inappropriés par semaine
*''Moyenne'' : une moyenne de 4 à 7 épisodes de comportements compensatoires inappropriés par semaine
*''Grave'' : moyenne de 8 à 13 épisodes de comportements compensatoires inappropriés par semaine
*''Extrême'' : une moyenne d'au moins 14 épisodes de comportements compensatoires inappropriées par semaine
!!!Accès Hyperphagiques (binge eating disorder)
*Pas de dysmorphophobie
*Pas de manoeuvres compensatoires
*Patients avec obésité
*Moins de perte de contrôle
*A. Survenue récurrente ''d'accès hyperphagiques'' Un accès hyperphagique répond aux deux caractéristiques suivantes :
**1. ''Absorption, en une période de temps limitée, d'une quantité de nourriture largement supérieure à ce que la plupart des gens absorberaient'' en une période de temps similaire et dans les mêmes circonstances.
**2. Sentiment d'une'' perte de contrôle sur le comportement alimentaire ''pendant la crise (par ex. sentiment de ne pas pouvoir s'arrêter de manger ou de ne pas pouvoir contrôler ce que l'on mange ou la quantité que l'on mange)
*B. Les accès hyperphagiques sont associés à au moins trois des caractéristiques suivantes :
**1. manger beaucoup plus rapidement que la normale
**2. manger jusqu'à éprouver une sensation pénible de distension abdominale
**3. manger de grandes quantités de nourriture en l'absence d'une sensation physique de faim.
**4. manger seul parce qu'on est gêné de la quantité de nourriture que l'on absorbe
**5. se sentir dégoûté de soi-même, déprimé ou très coupable après avoir mangé
*C. Les accès d'hyperphagie entraînent une ''détresse marquée''.
*D. Les accès d’hyperphagie surviennent, en moyenne, au moins ''une fois par semaine pendant trois mois''.
*E. ''Les accès d'hyperphagie ne sont pas associés au recours régulier à des comportements compensatoires'' inappropriés comme dans la boulimie et ne surviennent pas exclusivement au cours de la boulimie ou de l'anorexie mentale.
__''Sévérité ''__
*''Légère'' : une moyenne de 1 à 3 épisodes de comportements compensatoires inappropriés par semaine
*''Moyenne'' : une moyenne de 4 à 7 épisodes de comportements compensatoires inappropriés par semaine
*''Grave'' : moyenne de 8 à 13 épisodes de comportements compensatoires inappropriés par semaine
*''Extrême'' : une moyenne d'au moins 14 épisodes de comportements compensatoires inappropriées par semaine
!!!Mérycisme
*Contenu alimentaire qui remonte dans le bouche avec nouvelle mastication (re-manger le contenu alimentaire)
!!Conséquences physiques
*''Crises alimentaires'' : Inflammation des glandes parotides, Oedèmes (perte de protéines sériques), Pancréatite (stase biliaire - surtout boulimiques)
*''Alimentation chaotique'' : Aménorrhée
*''Abus de laxatifs'' : Diarrhées
*''Désordres'' ''électrolytique'': Syndrome de malabsorption, Hémorragies gastro-intestinales (car carence en vit K et protéines)
*''Abus de diurétiques'' : Troubles électrolytiques (hypoNa, hypoK, hypoCa)
*''Signes somatiques'' : Fonte musculaire, Oedèmes, Troubles circulatoires, Lanugo (duvet de poils), Hypothermie (corps se met en mode famine), TA basse, bradycardie
*''Aménorrhée''
*''Signes biologiques'' : Hypoglycémie, Anémie hypochrome, leucopénie ; Hypokaliémie (par VO, laxatifs, diurétiques ou manque d’apport)
*''Vomissements''
**Manque de potassium -> troubles du rythme cardiaque
**Déshydratation
**Caries dentaires (érosion de l’émail due au pH gastrique)
**Inflammation et hypertrophie des glandes parotides
**Irritations commissures des lèvres, cals sur les mains (sur têtes métaphysaires)
**Ulcères et oesophagite (remontée d'acide - persiste à long terme si devient chronique)
**Pneumonie par inhalation du liquide gastrique (rare)
**Dilatation oesophagienne ou gastrique, voire rupture gastrique (rare, surtout si boulimie)
!!Evolution
!!!''Anorexie''
*Décès 5-9% (désordre métabolique, trouble de conduction cardiaque, inanition, mais aussi suicide)
*Guérison 50-60% (optimiste)
**Reprise de l’alimentation
**Reprise du poids
*Guérison complète 30-40% (optimiste)
**Idem + résolution du conflit psychique (ne plus vouloir perdre du poids, image de soi-même normal)
*''Chronicisation'' 50% (voire plus)
**''Rechutes'' fréquentes
**Episodes ''anorexiques ± boulimiques ''
**''Conséquences'' ''physiologiques''
**''Autres troubles psychiatriques ''(épisodes dépressifs, conduites addictives, phobies)
!!!Boulimie :
*''30% demeurent boulimiques '' (on guérit mieux et plus facilement d'une boulimie que d'une anorexie)
*''Évolution vers autres troubles psychiatriques'' (conduites addictives, dépression)
!!Traitement
!!!Anorexie
*''Hospitalisation'' : séparation du milieu familial (permet à la patiente de gérer sa maladie elle-même et pour laisser souffler les proches), réalimentation, entretiens individuels et familiaux, psychomotricité (car trouble somatique plus que boulimique)
**On hospitalise moins qu'avant. On hospitalise les patients avec un trouble somatique important.
*''Ambulatoire'' : se fait de plus en plus (travail en réseau)
**''Psychothérapie'' ''individuelle''
**Prise en charge parallèle ''médecin'' ''traitant''
**Thérapie de ''famille''
Il n'y a pas de médicaments pour l'anorexie. On peut donner des anti-dépresseurs (anorexie est une forme de dépression). C'est pas systématique mais c'est fréquent.
!!!Boulimie :
*''Ambulatoire''
**Psychothérapie (surtout ''cognitivo''- ''comportementale''; psychodynamique long cours)
**Thérapie de ''groupe'' (//Escale p.ex//)
**''Rééducation'' ''nutritionnelle''
**''Médication'' (anti-dépresseurs si symptômes dépressifs, p.ex fluoxtétine qui fait perdre du poids, anxiolytiques)
*''Hospitalisation'' : rare (car moins de trouble somatique pour que boulimique)
!!Notes
*''Dépression'' : 10% pour les femmes et 3-5% hommes
*Plus c'est ''long et chronique, plus c'est mauvais''. Plus on prend tôt, plus il y a de chance de guérison.
<!-- Texte caché pour la recherche
Anorexia nervosa
Dieting to slim is endemic among teenage girls. Part of the reason for this is the contemporary equation between thinness and attractiveness, an assumption prevalent in advertising and fashion. Resonant with this is the finding that most teenage girls (but very few boys) overestimate their body width and depth, per ceiving and judging themselves as fatter than they actually are.
Slimming through self imposed calorie restriction is usually self limiting because the goal is achieved or because the girl gives up; hunger wins through. In some girls, however, the slimming process takes over and there supervenes what has been called a ‘relentless pursuit of thinness’, typically with a phobic horror of normal body weight and shape. This is anorexia nervosa, and the features are:
-
-
•
Self induced weight loss resulting in a low body mass index (BMI); in children this needs to be
-
plotted on a BMI centile chart, in older adolescents it is ≤17.5 kg/m 2
•
•
•
•
•
•
A distorted perception of her body, which increases with weight loss
A determined attempt to lose weight or avoid weight gain, by either restricting food intake, self induced vomiting, laxative abuse, excessive exercising or using a combination of these methods
-
When body weight falls below a critical point, pubertal development is halted and reversed so that menstruation ceases and the girl effectively becomes a prepubertal child. This may spare her some of the challenges of adolescence, particularly those related to sexuality
The discovery by a girl who has felt powerless that through self starvation she can control her shape and development and thus increase her sense of self worth and self effectiveness
-
-
-
Preoccupations and dreams of food and cooking which come to dominate mental life as a response to starvation. There ensues a tremendous mental struggle not to give in and eat, which assumes prime importance in the girl’s mental life
The dramatic and visible effects of self starvation on the girl, which can unite some parents in caring for their daughter and save a discordant marriage from divorce, something which she may fear is imminent.
-
An affected girl will often deny hunger, reassure every one that she is in the peak of health, exercise to lose weight and disagree fervently that she is too thin. She will be careless of her own emaciation and seem uncon cerned that she is starving herself to death. To the bewil derment of her parents, she may cook for others and read cookery books avidly. She may well be deceitful to anyone she perceives as thwarting her in her quest. Thus, she will conceal her poor eating by secretly dis posing of her meals or lying about her weight. Both before and during her illness she will show obsessional, perfectionist character traits; without these she would not have the capacity to establish herself as a persistent dieter. Indeed, she is likely to be described as having been quiet, compliant and hard working, ‘the last person to develop anorexia nervosa’. Her parents will often present as nice people who avoid conflict.
-
As a result of starvation, her body develops a low metabolic rate with slow to relax tendon reflexes, reduced peripheral circulation, bradycardia and amen orrhea. Fine lanugo hair appears over her trunk and limbs. She does not lose pubic or axillary hair, although incompletely established puberty is delayed. Serum T 3 (triiodothyronine) may be low, giving rise to a false sus picion of hypothyroidism. Plasma proteins are some times low and ankle oedema not uncommon. Blood and urine levels of luteinising hormone and follicle stimulating hormone are low and non cyclical.
- -
-
-
Some girls discover that self restraint in carbohy drate intake can be bypassed by self induced vomiting following repeated bouts of overeating and that further weight loss can be achieved by diuretics, and laxatives (in the belief that these will expedite food transit time and reduce absorption). This can cause
-
-
417
1
2
3
4
5
Emotions and
behaviour 23
wide fluctuations in weight and metabolic abnormali ties such as hypokalaemia and alkalosis. This condition is bulimia which can occur at normal body weight or in association with low body weight as an ominous com plication of anorexia nervosa. It tends to affect older rather than younger teenagers. Bulimia at normal body weight can be managed by encouraging a regular diet, monitoring this by a diary and providing individual or group cognitive behavioural therapy.
The prevalence rate among teenagers for anorexia nervosa is a little less than 1%, but the incidence rate may have increased over the last 50 years. The peak age of onset is 14 and girls outnumber boys by about 10 : 1. Bulimia is commoner, although prevalence rates vary widely, depending on the degree of severity. It also shows a markedly female preponderance and may also be becoming more frequent.
Management
Management is two fold: medical and psychological. The initial management of anorexia nervosa is to restore near normal body weight by refeeding. The emergence of physical complications may necessitate admission to hospital for refeeding, which may even involve nasogastric tube feeding in some instances. The cornerstone of treatment is family therapy. Indi vidual psychological treatment is introduced to help the young person challenge the cognitions that drive anorexia and to acquire more constructive ways of con fronting developmental demands, including handling conflict, maintaining self esteem, personal autonomy and relationships.
-
-
-
Medical aspects
Anorexia has a high mortality rate compared with other psychiatric disorders. Some of the excess mortality arise from medical complications such as malnutrition, electrolyte imbalance and infection. This emphasises the importance of thorough physical examination, investigations and medical management. In the UK, NICE (National Institute for Health and Clinical Excel lence) has produced a guideline for treatment of eating
Summary
In anorexia nervosa
• Female : male ratio is 10 : 1
• Peak age of onset – 14 years
• Affected girls have a distorted body image, so seldom agree that they are too thin and may deceive everyone by pretending to eat
• Features include: determined efforts to lose weight, arrest of puberty, cessation of periods
• May be accompanied by bulimia: overeating followed by self induced vomiting
-
• Management is family therapy and individual therapy to restore body weight
• Some require hospitalisation; prognosis is variable, but has a mortality from suicide, malnutrition and infection.
-->
![ext[Pharma Antithrombotique.pdf|./pdf/Pharma Antithrombotique.pdf]] <!-- Texte caché pour la recherche antithrombotiques anti-thrombotiques anti-coagulant anticoagulants -->
!!Alprazolam (Xanax ®) *''Benzodiazépine'' *Effets indésirables **Trouble mnésiques **Somnolence **Dépendance **Tolérance !!Sertraline (Zoloft ®) *''SSRI'' *Il faut au moins 6mois à 1an de traitement pour un épisode (autrement, symptômes dépressifs reviennent) !!Escitalopram (Cipralex ®) *''SSRI'' *Est un tout petit peu plus efficace que le citalopram. !!Citaopram (Seropram ®) *SSRI *Dose de départ 10mg pendant quelques jours puis on monte à 20mg puis on peut augmenter selon effet/EI (60mg = dose maximale) *Risque de QT-long (prudence !) !!Paroxétine (Deroxat ®) *''SSRI'' *SSRI : souvent insomnie, anxiété, agitation en début de traitement. Donner un somnifère en R. Limité si on commence avec une dose faible (10mg pendant quelques jours, puis passer à 20mg) *Sevrage : anxiété, nausées, tremblements, sensations de chocs électriques dans les membres. //=> Ne pas oublier son traitement (et le prendre dès que réalise que oublier// !!Fluoxétine (Fluctine®) *''SSRI'' *Longue demi-vie -> pas de sevrage en général *Inhibiteurs des cytochromes (dont 2D6 -> augmente le taux de tricycliques -> risque de syndrome sérotoninergique et empire les symptômes anti-cholinergiques). *Fait peu de prise de poids. !!Venlafaxine (Efexor ®) *''NSRI'' *On commence par 37,5mg/j en général. Puis augmenter par palier jusqu'à la dose max. *CAVE : syndrome sérotoninergique possible même ce seul médicament (température augmentée, transpiration, tremblement, diarrhée, secousses musculaires/convulsions, confusion, coma) **Lors de syndrome sérotoninergique : STOP immédiatement le traitement. *Sevrage : anxiété, nausées, tremblements, sensations de chocs électriques dans les membres. //=> Ne pas oublier son traitement (et le prendre dès que réalise que oublier// !!Réboxétine (Edronax ®) *''Inhibiteur sélectif de la recapture de la NA '' *Peu efficace, peu utilisé. !!Moclobémide (Aurorix ®) *''IMAO'' ''réversible'' (inhibition moins parfaite -> pas d'accumulation de tyramine -> mais moins efficace). *Inhibition de la dégradation des monoamines. *≠ Anciens IMAO = très efficaces mais dangereux car crises HTA mortelles. Risque d'accumulation de tyramine (fromage, vin, charcuterie) avec effets sympatho-mimétiques avec risque de crises HTA : Régime nécessaire. !!Mirtazapine (Remeron ®) *''Agit sur sérotonine et un peu noradrénaline'' (agit sur rc pré-synaptiques 5HT2 et alpha2) -> augmente la libération de sérotonine et noradrénaline. *Egalement effet anti-histaminique (sédatif, prise pondérale) *Peut se prescrire pour les troubles anxieux !!Valproate (Dépakine®) *Stabilisateur de l'humeur *Prise de poids (diminue le métabolisme) !!Lithium *Stabilisateur de l'humeur *Prise de poids (diminue le métabolisme) *Risque d'hypothyroïdie (hyperthyroïdie aussi possible mais moins) (surtout femme >40ans). Toujours vérifier la thyroïde 1-2x/an. **Substitution durant le traitement si hypothyroïdie. *Résistance à l'ADH (-> mauvaise rétention d'eau -> polyurie, polydipsie). Eviter les boissons sucrées -> prise pondérale ++. *Effet potentialisateur sur les anti-dépresseurs (tricycliques et SSRI) si résistance au traitement (effet rapide dans les 10j) (marche chez 30-40%). Laisser le traitement 6mois-1an. *Surdosage : dysarthrie, confusion, tremblements. Peut être mortel. *Lors de gastro-entérite -> perte d'eau et sel -> au niveau du rein, réabsorption de sodium et de lithium. Prudence : prendre la moitié de la dose de lithium. !!Carbamazépine (Tégretol®) *Anti-épileptique et stabilisateur de l'humeur *Pas de prise de poids *Activateur de 3A4 (-> augmente dégradation de méthadone : augmenter la dose de méthadone pour éviter syndrome de sevrage). !!Lamotrigine *Anti-épileptique et stabilitateur de l'humeur (mais marche pas trop au niveau des phases maniaques mais prévient les phases dépressives) *Pas de prise de poids !!Aripirazole (Abilify ®) *Anti-psychotique 2ème génération (agit au niveau des phases maniaques mais pas dépressive) *Fait prendre peu de poids !!Quétiapine *Stabilisateur de l'humeur *Fait prendre du poids !!Clomipramine (Anafranil ®) *''Tricyclique'' *Agit sur noradrénaline et sérotonine *EI : anticholinergique (bouche sèche, constipation, rétention urinaire - risque d'infection urinaire augmenté) !!Amitriptyline (Saroten ®) *''Tricyclique'' *Peut induire un syndrome confusionnel (anti-cholinergique), surtout si personne a un terrain cardiovasculaire limite -> diminution du débit. !!Trouble panique *''1er choix '': anti-dépresseur agissant sur la sérotonine (SSRI) *+ Psychothérapie idéalement : TCC *//Attaque de panique : BZD plutôt. // !!Anti-dépresseurs *Toujours faire un ''arrêt'' ''progressif'' *''Dépression mélancholique'' : Venlafaxine ou SSRI plutôt que tricyclique chez les personne âgées. *''Effet des anti-dépresseurs'' premiers effets arrivent en 1 semaine - 15jours (jusqu'à 4-6 semaines). EI peuvent arriver dans les heures suivant. *''Kétamine'' (-> effet anti-dépresseur en IV, dure 1 semaine => antagoniste glutamatergique NMDA). Mais EI dissociatifs. *''Privation de sommeil'' : peut sortir un patient de la dépression après 1 nuit mais revient dès que nuit normal. Marche mieux chez patients unipolaires que bipolaires. __''Traitement selon stade dépression''__ *Dépression ''légère'' : traiter juste avec une psychothérapie (anti-dépresseurs : pour modéré à sévère) *Dépression ''modérée'' : psychothérapie ou anti-dépresseur ou les deux *Dépression ''sévère'' : les deux *Ajuster selon symptômes résiduels, nombre d'épisode, etc. ''__Dépression récurrente__'' *Si'' 1 épisode'' : 6-12mois post rémission (à la dose à laquelle il a répondu - on ne diminue pas la dose) *Si ''2 épisode'' : 12mois post rémission (à la dose à laquelle il a répondu - on ne diminue pas la dose) *Si ''3 épisodes en 5ans'', on traite 2ans (post rémission -à la dose à laquelle il a répondu - on ne diminue pas la dose) puis on réévalue. !!Trouble bipolaire *Type 1 : éviter anti-dépresseurs (risque de précipiter un épisode maniaque). On peut parfois donner si a bien répondu par le passé sans épisode maniaque. **On peut ajouter Lithium ou Quétiapine (Séroquel) qui ont des effets anti-dépresseurs. *Type 2 : on pourrait donner des anti-dépresseurs (mais pas en monothérapie) *Si hypomanie chez patiente avec tempérament cyclothymique : anti-dépresseur + stabilisateur de l'humeur **-> Hypomanie (dans ce cas on diminue anti-dépresseur voir on arrête) **-> Manie (stop traitement). *Traitement en général au long terme !!TOC *''SSRI'' ou anti-dépresseur agissant sur la sérotonine. !!Hypothyroïdie *''Substitution'' ! *Subclinique ne peut pas faire une dépression. *''Limite l'effet des anti-dépresseurs. '' *//Toujours faire une TSH lors d'instauration d'un traitement anti-dépresseur//
undefine
!!''Bactéries''
{{bacteries.jpg}}
!!''Types d'ATB''
//Betalactamines//
*''Penicillines'': Grams +
*''Flucoxacilline'': Gram+ et MSSA ( la Fluco résiste aux b-lactamases du MSSA)
*''Amoxicilline'': Gram+ et quelques Gram- (Ecoli et 80% des Hib) (le ''clavulanate'' est un inihbiteur des B-lactamase ajoute tout Hib, le MSSA et les anaérobes)
*''Piperacilline'': Gram+ et Gram- dont pseudomonas (le ''tazobac'' est un inhibiteur des B-lactamase, il rajoutera MSSA et les Anaerobes, faisant de Pip-Tazo le deuxième meilleur large spectre, il ne couvre pas le BLSE)
*''Céphalosphorines'':
**Cefazoline 1ere generation
**''Cefuroxime'', 2e génération, couvre surtout Gram+, passe mal le LCR
**''Ceftriaxone'', 3e génération, couvre Gram+, Gram-, pas le pseudomonas, passe bien le LCR
**''Cefépime'': 4e génération, couvre Gram+, Gram-, pseudomonas, MSSA
*''Carbapenem'': Le plus large spectre. Couvre Gram+, Gram-, pseudomonas, MSSA et BLSE
//Macrolides//
*''Erythromycine'', ''Clarithromycine'', ''Azythromycine''
*Sont les ATB qui ciblent les ''atypiques''.
*''Clarithromycine'': fait plein d'interaction. QT long, drogue, Pas donner aux les Immunosupprimés. chez les toxico elle augmente l'effet de la methadone, (Bien y penser quand on la voit dans les QCM)
//Tetracyclines//
*''Doxycycline'': Surtout utilisé contre les bactéries intracellulaires (un peu comme les macrolide)
//Glycopeptides//
*''Vancomycine'': le principal glycopeptide, sa principale utilisation est contre le ''MRSA'' et les Gram+.
*Un peu l'opposé des aminoglycosides
//Aminoglycosides//
*''Gentamycine'': S'utilise en bithérapie. Couvre le pseudomonas et les gram-, est ototoxique !
*Un peu l'opposé des des glycopeptides
//Clindamycine//
*la ''Clindamycine'' est un ATB spécialement utilisé pour réduire les effets de la toxine TSST-1 dans le syndrome du choc toxique.
*Elle est aussi efficace dans le traitement des ''anaérobes non digestifs'', typiquement a rajouter dans les cocktail de pneumonie si on pense qu'il y a un risque de ''pneumonie d'aspiration''
//Imidazolé//
*''Metronidazole'': Surtout utilisé contre les le ''c.difficile'', les ''anaérobes'' et les ''parasites'', c'est bien utilisé dans les infections digestives, surtout le combo Rocephine/Flagyl (Ceftriaxione/Metronidazole)
//Quinolones//
*''Ciprofloxacine'' et ''Norfloxacine'': utilisés dans les infections urinaires (cystite, pyélonephrite)
*Ps: il existe aussi le ''Sulfonamide / triméthoprime (Co-trimoxazole, Bactrim®)'' qui n'est pas une quinolone mais qui est utilisé dans les infections urinaires, aisi que la ''nitrofurantoine-fosomycine''.
!!''Interprétation du gram''
{{coque.jpg}}
.{{grams.jpg}}
*''Coques en amas'': Staph.aureus
*''Diplocoque Gram+'': S.pnemoniae
*''Diplocoque Gram-'': N.meningitidis
*''Bacille Gram-'': E.coli, Klebsielle, Pseudomonas
!!''BMR''
*Les ''BMR'' (ou bactéries multi-résistantes) sont le ''MRSA'' et les ''BLSE'' (il y a aussi le VRE et actinobacter resistant)
"On dépiste le MRSA par frottis inguinal et narines
*On dépiste le BLSE par frottis anal
*On peut décoloniser le MRSA uniquement par du savon antiseptique et application nasal pendant 1semaine
!!Reference PDF Noémie Wagner
*[ext[ATB_antibiotiques.pdf|./pdf/ATB_antibiotiques.pdf]]
<!-- Texte caché pour la recherche
-->
![ext[antibiotiques_guide.pdf|./pdf/antibiotiques_guide.pdf]]
undefine
!!Anxiolytiques
!!!Midazolam (Dormicum)
*''BZD''
*''Courte'' ''demi-vie ''
*Durée : on doit le prescrire sur une ''courte'' ''durée'' (car risque de dépendance et tolérance)
*''Sevrage'' ''dégressif'' avec BZD longue demi-vie
*''Toxicomanie'' : se sniff (effet shoot)
!!!Triazolam (Halcion®)
*''BZD''
*EI : ''amnésie'' ''antérograde'' (dose dépendant)
!!!Lorazépam (Temesta®)
*''BZD''
*EI : ''sédation'' ''respiratoire'' (BZD CI chez les déprimés respiratoires)
!!!Oxazépam (Seresta®)
*''BZD''
*Utilisé dans le ''sevrage'' ''OH''
*Sevrage d'OH et de BZD (en particulier si patient OH), ou intoxication OH -> risque de crise épilepsie
!!!Clonazépam (Rivotril®)
*''BZD''
*Peut se donner lors d'un ''épisode'' ''maniaque'' (insomnie, agitation)
*Se donne uniquement pendant l'épisode maniaque
*EI : sédation résiduelle (diminuer la dose ou changer de molécule pour une moins grande demi-vie)
*Demi-vie 24-48h (4 demi-vie pour arriver au plateau) -> on arrive au plateau en 4-5j
-----------------------------------------------------------------
!!Antipsychotiques
!!!Amisulpride (Solian®)
*Anti-psychotique ''atypique''
*Inhibe la DA -> ''augmente'' la ''PRL'' -> diminution de la libido, aménorrhée et galactorrhée (EI dose dépendant, pourrait diminuer avec le temps)
*Voie tubéro-infundibulaire (DA -> inhibe sécrétion de PRL), nigro-striée (effet extra-pyramidal), méso-limbique (hallucinations et délire, déstructuration de pensée) et méso-corticale (voies DA impliquées, déficit en DA lors des symptômes négatifs -> les antipsychotiques surtout typiques aident pas, voire empire)
!!!Fupentixol (Fluanxol®).
*Antipsychotique ''typique'' (antagoniste D2) (typiques ont plus d'EI extra-pyramidaux que atypiques)
*EI : agitation interne, besoin de bouger = ''akathiasie'' (chez les jeunes, avec 1er anti-psychotique -> EI), risque d'augmenter l'EI si on re-prescrit.
*BZD pour traiter akathiasie si trop dérangeant (ou Akinéton = anti-cholinergique)
!!!Aripiprazole (Abilify®)
*Anti-psychotique ''atypique''
!!!Olanzapine (Zyprexa®)
*Anti-psychotique ''atypique''
*''Pas'' de risque ''d'agranulocytose''.
*Risque de ''syndrome'' ''métabolique'' +++ (prise de poids)
*Risque ''diabète'' (-> même en absence de prise de poids) (surtout pour les "pine")
*Lors d'EI métaboliques -> changer de traitement.
!!!Quétiapine (Seroquel®)
*Neuroletpique ''atypique''
*Si pas stabilisé, on maintient le traitement (mais risque de baisser la dose lui-même)
*EI : ''sédation'', ''syndrome'' ''métabolique'', prise de ''poids''
*''Demi''-''vie'' ''courte'' -> 2x/j est la recommandation (pics le soir)
!!!Clozapine (Léponex®)
*Anti-psychotique ''atypique'' (utilisé pour les psychoses sévères)
*S'introduit par pallier de 25mg/j (introduction ''progressive'')
*N'ont ''__pas du tout__ d'EI extra-pyramidaux ''(c'est le seul qui en a zéro).
*Mais par contre risque ''d'agranuloyctose'' ++ (cô FSC 1x/sem pour les 3 premiers mois puis 1x/mois - risque diminue avec le temps mais toujours présent => cô obligatoire pour la prescription, c'est le seul) <1%
*Autres EI : ''sédatif'', fait prendre du ''poids'', ''hypotenseur'' (si introduction trop rapide -> risque d'hypotension importante).
*''CAVE : Tabac'' : augmente le métabolisme avec certaines cytochromes (1A2) -> augmente le métabolisme clozapine.
!!!Halopéridol (Haldol®)
*''Neuroleptique'' ''typique''
*EI : ''dystonie'' ''aiguë'' (contracture de la nuque, surtout SCM, unilatéral en général) (surtout chez les jeunes, qui ont commencé un traitement) -> on donne anti-cholinergiques : bipéridène (akinéton).
*Risque de ''dyskinésie'' ''tardive'' (niveau labial, bucal et doigts, langue -> tics moteurs) : arrive après plusieurs années d'utilisation, surtout anti-psychotiques typiques -> rééquilibrage des synapses DA (-> ~ tolérance), se manifeste en général à l'arrêt du traitement (et irrévserible 50%)
!!!Lévomépromazine (Nozinan®)
*''Anti''-''psychotique'' ''sédatif'' (''typique'')
*Risque ''d'interactions'' (inhibiteur de ''2D6'')
---------------------------------------------------------------
!!Agitation
*Neuroleptique (Halopéridol) et BZD (Temesta)
*Les BZD sont plus polyvalent. SI détresse respiratoire ou état confusionnel, intoxication avec dépression du SNC, on donne pas trop.
*Agitation avec psychose ou confusion -> neuroleptiques.
*On peut les mettre en association mais EI !
*Halopéridol : camisole de force chimique (c'est pas agréable).
!!Insomnie
*BDZ : à court terme uniquement
*Anti-dépresseur sédatif : peut être utilisé (marche moyennement)
*Hygiène de vie
!!Somnifères
*BZD-like
*Zolpidem (Stilnox), Zopiclone (Imovane) et zaléplone (Sonata®) (les 3 Z)
*Il y aurait légèrement moins de dépendance
*Demi-vie courte (4h Imovane, 3h Stilnox, 1h Sonata)
*Utile pour les problèmes d'endormissement mais pas pour les problèmes de réveil nocturne.
!!Schizophrénie
*Anti-psychotiques indiqués à long terme
*Si veut diminuer la dose, en général on dit oui car la personne risque de diminuer / arrêter toute seule (et perdre la compliance).
*Si on maintient on traitement, moins de risque de rechute.
*Si diminution de la médication p/r au maintient de la dose (une fois que stable) -> meilleure qualité de vie à long terme.
!!Etat dépressif sévère avec sx psychotiques
*Anti-dépresseur p.ex sertraline (Zoloft®) + anti-psychotiques p.ex rispéridone (Risperdal®).
*Anti-psychotique sont surtout utiles pour les épisodes psychotiques secondaires à une autre cause, mais pas pour prévenir la rechute (on arrête dès que plus de sx et on traite la cause).
*Il faut par contre maintenir l'anti-dépresseur
------------------------------------------------------------------
!!Notes
!!!Valproate (Dépakine®)
*Anti-épileptique et ''stabilisateur'' de ''l'humeur'' (traitement de base et traitement de crise maniaque, et dépressif un peu)
*Risque ''d'agranolucytose'' (mais pas besoin de faire une FSC)
!!!Bromocriptine (Parlodel®)
*Anti-parkinsonien -> agoniste D2
*EI : risque de symptômes schizophréniforme (agit sur la voie méso-lymbique) -> hallucinations, interprétations persécutoire, etc.
!!!Clomipramine (Anafranil®).
*Anti-dépresseur ''TCA''
*Risque ''d'interactions'' (métabolisme : ''cytochrome'' ''2D6'')
!!!Syndrome neuroleptique malin
*Surtout pour les anti-psychotiques typiques
*Rigidité musculaire et EF, labo: augmentation des CK -> suspecter
{{syndrome-neuroleptique-malin.jpg}}
{{syndrome-neuroleptique-vs-sérotoninergique.jpg}}
undefine
*Episodes of apnoea and bradycardia and desaturation are common in very low birthweight infants until they reach about 32 weeks’ gestational age. *Bradycardia may occur either when an infant stops breathing for over 20–30 s or when breathing continues but against a closed glottis. *An underlying cause (hypoxia, infec tion, anaemia, electrolyte disturbance, hypoglycaemia, seizures, heart failure or aspiration due to gastro oesophageal reflux) needs to be excluded, but in many instances, the cause is immaturity of central respiratory control. *Breathing will usually start again after gentle physical stimulation. *Treatment with the respiratory stimulant caffeine often helps. *Continuous positive airways pressure (CPAP) may be necessary if apnoeic episodes are frequent.
//en construction...//
!!A. General characteristics ''1. Pathogenesis'' a. The lumen of the appendix is obstructed by hyperplasia of lymphoid tissue (60% of cases), a fecalith (35% of cases), a foreign body, or other rare causes (parasite or carcinoid tumor [5% of cases]). b. Obstruction leads to stasis (of fluid and mucus), which promotes bacterial growth, leading to inflammation. c. Distention of the appendix can compromise blood supply. The resulting isch- emia can lead to infarction or necrosis if untreated. Necrosis can result in appendiceal perforation, and ultimately peritonitis. ''2. Peak incidence'' is in the teens to mid-20s. Prognosis is far worse in infants and elderly patients (higher rate of perforation). !! B. Clinical features ''1. Symptoms'' a. Abdominal pain—Classically starts in the epigastrium, moves toward umbili- cus, and then to the RLQ. With distention of the appendix, the parietal perito- neum may become irritated, leading to sharp pain. b. Anorexia always present. Appendicitis is unlikely if patient is hungry. c. Nausea and vomiting (typically follow pain). ''2. Signs'' a. Tenderness in RLQ (maximal tenderness at McBurney point: two-thirds of the distance from the umbilicus to the right anterior superior iliac spine). b. Rebound tenderness, guarding, diminished bowel sounds. c. Low-grade fever (may spike if perforation occurs). d. Rovsing sign: Deep palpation in LLQ causes referred pain in RLQ. e. Psoas sign: RLQ pain when right thigh is extended as patient lies on left side. f. Obturator sign: Pain in RLQ when flexed right thigh is internally rotated when patient is supine. !!C. Diagnosis 1. Acute appendicitis is a clinical diagnosis. 2. Laboratory findings (mild leukocytosis) are only supportive. 3. Imaging studies may be helpful if diagnosis uncertain or in atypical presentations. a. CT scan (sensitivity 98% to 100%)—lowers the false-positive rate significantly. b. Ultrasound (sensitivity of 90%). Carcinoid syndrome devel- ops in 10% of patients with carcinoid tumors. !!D. Treatment is an appendectomy (usually laparoscopic). Up to 20% of patients who are diagnosed with acute appendicitis are found to have a normal appendix during surgery. Because the illness is potentially life-threatening, this is an acceptable risk even during pregnancy
undefine
undefine
!! Guidelines BLS 2015
{{ACR_Guidelines.jpg}}
!!Généralités
*un ''ACR'' ou //Arrêt Cardio-Respiratoire// est définit par:
**''Absence de Pouls central''
**''Apnée''
**''Aréactivité''
*Le résultat est une ''Anoxie des Organes'', avec surtout:
** une ''anoxie cérébrale'' avec dégâts irréversibles dès 3min d'ACR mais séquelles variables, ce qui va ''//déterminer la survie à long terme//''
** une ''anoxie cardiaque'' avec diminution de l'efficacité de la défibrillation et diminution de la compliance et de l'efficacité cardiaque, ce qui va ''//déterminer le succès de la RCP//''
*Après 10min sans massages, une défibrillation aura une chance de succès de moins de 5%. Ainsi il faut ''faire la RCP dans les premières minutes'' !
!!Définition
*L’''Artérite Temporale de Horton'', ou Artérite Gigantocellulaire appartient au groupe des ''vasculites des gros vaisseaux''. Elle touche les grosses artères extracrâniennes (''artère temporale'') ainsi que l’arc ''aortique'', les artères iliaques, les artères rénales et les artères sous-clavières.
*Elle survient plutôt chez les ''femmes'', généralement âgées de >''50ans''. Elle est souvent associé à la ''polymyalgia rheumatica''.
*Il s’agit d’une ''urgence médicale'' ! car elle peut entrainer une ''cécité permanente'' chez un patient non traité. Une ''amaurose fugace'' dois toujours évoquer ce diagnostic.
*Elle est aussi en lien avec un ''risque d’anévrisme aortique'' augmenté de 15x !
!!Clinique
*Des symptômes généraux comme la ''fatigue'', les ''myalgies'', parfois accompagnées de ''céphalées temporales''
*Une ''hyperesthésie du cuir chevelu'', le fait de se passer le peigne fait mal !
*La ''Claudication intermittente de la mâchoire'' (muscle masséter) est très ''prédictive'' d’une Artérite Temporale.
*Une ''Cécité monoculaire brusque et indolore'', du à un rétrécissement des a.ophtalmiques et a.ciliaires postérieures. Une atteinte unilatérale non traitée risque une atteinte du second oeil une semaine plus tard !
*L’artère ''temporale'' est souvent ''indurée, rouge, sans pouls'' et ''douloureuse''.
*Penser à chercher une ''dilatation anévrismale de l'aorte'' lors de l’examen clinique.
{{arterite_temporale_horton_clinique.jpg}}
!!Investigations
*''Labo''
*La ''VS'' et la ''CRP'' sont augmentées. Les patients ont souvent une anémie. Les marqueurs immunos de type ANA ou FR sont négatifs.
*Une ''Biopsie de l’artère temporale'' montrera typiquement une vasculaire avec cellules géantes.
!!Diagnostic
*Le diagnostic est posé par la présence de de ''trois critères'' parmis ces cinq:
*Age >''50ans''
*Présence d’un ''céphalée nouvelle'' ou inhabituelle
*''VS'' augmentée
*''Biopsie de l’artère temporale'' typique
*''Artère temporale douloureuse'' ou ''sans pouls''
!!Traitement
*Initier immédiatement de la ''prednisode à haute dose'', puis diminuer la dose. Le traitement peur durer jusqu’à 2 ans
undefine
!!Généralités *Aussi appelée ''__Arthrite Juvénile Idiopathique__'', elle regroupe ''toutes les arthrites inconnues'' des ''enfants'' de moins de 16ans, avec une ''durée >6semaines''. Pour cela il faut ''exclure les cause connues'' infectieuses, inflammatoires etc. *Elle englobe un certains nombre de syndromes cliniquement distincts, qui peuvent globalement se traiter par le ''métothrexate'' et l'anti-''TNF (Etanercept)'' avec succès moderé
![ext[arthrite_juvenile_idiopathique.pdf|./pdf/arthrite_juvenile_idiopathique.pdf]] <!-- Texte caché pour la recherche -->
!!Définition
*Le ''[[Psoriasis]]'' peut s’accompagner d’une ''arthrite psoriasique'' dans à peu près ''15% des cas''
*Toute nouvelle polyarthrite ou oligoarthrite implique la ''recherche d’un psoriasis'' associé
!!Clinique
*On peut retrouver du ''psoriasis'' sur la peau, caractérisé par des ''papules et plaques erythémato-squameuses'' situées de façon ''symétrique'' sur les ''zones de contact'' surtout ([[genou|psoriasis_genou.jpg]], [[fesses|psoriasis_fesses.jpg]], coudes)
*Etre aussi attentif aux ''atteintes unguéales'', avec [[onycholyse distale|psoriasis_onycholyse.jpg]], [[hyperkératose sub-unguéale|psoriasis_hyperkeratose_subungeale.jpg]],[[ tache d’huile|psoriasis_tache_huile.jpg]] et[[ ponctuations en dé à coudre|psoriasis_de_a_coudre.jpg]]
*Les autres zones où on peut retrouver une atteinte cutanée sont la région Rétro-auriculaire, le [[Cuir chevelu|psoriasis_cheveux.jpg]] le [[Nombril|psoriasis_nombril.jpg]] et les [[Plis|psoriasis_plis.jpg]].
*Dans la majorité des cas, l’atteinte ''cutanée précède l’atteinte articulaire'' (70%), mais elles peuvent être simultanées ou l’atteinte articulaire peut même précéder l’atteinte cutanée.
*L'''arthrite psoriasique'' se manifeste [[sous plusieurs forme|polyarthrite_rhumatoide_rx_mains.jpg]]. La plus fréquente est la forme ''asymétrique oligoarticulaire'' avec une atteinte des ''articulations périphérique'', de façon préférentiellement ''radiale''. Une autre atteinte fréquente est la forme ''symétrique des IPD''. Enfin, il existe une atteinte plus rare mais plus destructive qui est l’arthrite ''mutilante'', avec destruction sévère des articulations atteintes.
*L’arthrite peut être accompagnée d’une ''dactylite'', avec un aspect de « ''[[doigts en saucisse|psoriasis_dactylite.jpg]]'' ». Ce qu’on ne retrouve pas dans la PR par ailleurs.
!!Diagnostic
*Le diagnostic de l’arthrite psoriasique est fait selon les ''critères de CASPAR''.
*Le patient doit avoir une ''Atteinte articulaire et'' un certain nombre d’autres trouvailles, notamment la notion de ''psoriasis'' actuel ou antécédent, l’atteinte ''unguéale'', l’absence ''de FR'', la présence ou un antécédent de ''dactylite'' avec tuméfaction d’un doigt, ou encore des ''trouvailles radiologiques''.
!!Investigations
*''Labo'': doser la ''VS,CRP'' qui sont augmentées, doser le ''FR'' et ''ANA'' qui sont ''négatifs'',
*''RX'': présence d’érosions ''juta-articulaires'' surtout au IPD, amenant à un aspect en « ''[[pencil in cup|psoriasis_rx_mains_pencil_in_cup.jpg]]'' » de l’extrêmité distale de la phalange intermédiaire. Cela peut aboutir à une ''luxation'' et ''ankylose'' des articulations.
!!Traitement
*Dans l’ordre de séverité, on traite l’arthrite psoriasique d’abord par
# des ''AINS + infiltration de corticoïdes''. En cas d’atteinte plus sévère on passe aux
# ''AINS + corticoïdes systémique'' (''prednisone'') + ''Méthotrexate'' (ADR: Agent de Rémission, il y a aussi la Sulfasalazine et le Léflunomide). Si l’Arthrite psoriasique résiste à ces traitements on peut ajouter
# des ''Anti-TNF'' (etanercept, infliximab)
*Penser à traiter simultanément le ''psoriasis'' cutané du patient.
!!Définition *L’arthrite ''réactive'' au sens large est une arthrite ''inflammatoire'' et ''aseptique'' qui survient ''1-4 sem. après une infection bactérienne'' à distance (jusqu’à 4 semaines). L’infection est souvent une ''entérite'' ou une ''urétrite'', mais en pratique elle passe souvent ''inaperçue''. *la ''maladie de Reiter'' décrit la ''forme « complète » de l’arthrite réactive'', plus sévère, avec une ''triade'' comprenant: **'' conjonctivite'' ou uvéite ** ''urétrite'' ou cervicite **''arthrite'' aseptique *''Mnémo'': «// cant see, cant pee, cant climb a tree// » *En pratique clinique il faut toujours penser à exclure l’arthrite septique, qui peut y ressembler ! !!Etiologie *Les ''germes digestifs'' dans le cas d’une entérite sont ''shigella, salmonella, campylobacter'' et ''yersinia''. *Les ''germes urinaires'' dans le cas d’une urétrite sont ''chlamydia'' et ''mycoplasma spp''. *Il y a aussi une ''composante génétique'' car plus de la moitié des patients ont le gène ''HLA-B27''. !!Clinique *Principalement une ''oligo-arthrite asymétrique'', qui apparait ''1-4 sem. après une infection'' de type entérite ou uro-génitale. *On peut aussi trouver une ''dactylite''. La clinique ressemble donc beaucoup à celle de l’[[arthrite psoriasique|psoriasis_dactylite.jpg]]. *Au niveau urinaire on peut trouver une ''urétrite stérile'' avec pyurie stérile. *Au niveau ophtalmologique on peut trouver une ''conjonctivite stérile'' ou une uvéite antérieure *D’autres trouvailles sont possibles, comme la balanite, les ulcères buccaux, une iléite ou une colite. !!Investigations *la ''ponction articulaire'' sera de type inflammatoire *Doser la ''VS, CRP'' qui sont ''augmentées'', ainsi que le ''HLA-B27'' qui peut être ''positif''. le ''FR'' est ''négatif'' en général. *On peut aussi rechercher Chlamydia par PCR dans les urines, ou faire des cultures et sérologie à la recherche de germes. !!Diagnostic *Surtout un ''diagnostic clinique'', avec une ''aide du laboratoire'', mais il n’y a pas de critères précis. *Si le diagnostic implique une infection à Chlamydia, il faudra traiter le patient + son partenaire. !!Traitement *Envoyer le patient en ''consultation rhumato''. Traiter les ''infections'' sous-jacentes. *Pour ce qui est de l’arthrite, elle ''guérit spontanément en moins d’un an'', avec un risque de récurrence. Le traitement sera donc surtout ''symptomatique'' avec des ''AINS'' et des ''injections corticoïdes'' pour autant que ça ne soit pas une arthrite septique ! *Pour les ''cas sévères'' on peut passer par un traitement de ''corticostéroïdes systémiques'' et d’agents ''de rémissions'' (ADR: ''Méthotrexate'', ''Sulfasalazine'') et ''agents biologiques'' (anti-TNF comme ''etanercept'' ou ''infliximab'')
!!Définition *L'arthrite septique est une ''urgence médicale'', avec 10-15% de risque de ''mortalité''. C'est un ''diagnostic à exlcure'' systématiquement lors de monoarthrites. *Les germes sont surtout des ''bactéries'', majoritairement le __''S.aureus'' (80%) __, Rarement on peut trouver des champignons ou la tuberculose. *L'origine de l'infection est principalement par propagation ''hematogène'' (90%) d'un foyer septique. L'infection peut venir aussi directement de l'os dans le cas des ''ostéomyélites''. Elle peut aussi être due à un geste, typiquement l'''arthroscopie'' et la'' ponction articulaire''. !!Clinique *L'arthrite septique se manifeste majoritairement par une ''monoarthrite''. L'articulation est ''chaude, rouge'' et ''très douloureuse''. La mobilité articulaire est réduite. Le genou est l'articulation la plus touchée. *En plus de ça, le patient présente fréquemment ''fièvre et frissons''. !!Investigations *Faire la ''ponction articulaire avant de donner les ATB'', afin de ne pas négativer les résultats. *Faire aussi une ''FSC, VS, CRP'' ainsi que des ''Hemocultures''. !!Diagnostic *Le diagnostic se fait par la ''ponction articulaire''. Les critères sont des ''leucocytes >50'000'' et ''PMN >75''%. Il y a aussi souvent une ''culture positive'' mais pas toujours. !!Traitement *Après la ponction, faire une ''ATB empirique'' en attendant les résultats des cultures, couvrant le staph et strepto, comme le ''cefuroxime''. La durée de l'ATB doit être d'environ ''14jours''. *En plus de ça on peut faire ±des drainages de l'articulation, ainsi que de la physiothérapie dès le premier jour.
!!Définition
*L'''arthrite virale'' résulte de la déposition de ''complexes immuns'' dans l'articulation. L'arthrite qui en découle est de ''séverité modérée'' et ne nécessite qu'un t''raitement symptomatique''.
!!Etiologie
*Les virus principaux sont le ''parvovirus B19'' les hépatites (''HAV, HBV'' et ''HCV'') ainsi que le ''HIV'', et encore d'autres.
!!Clinique
*L'arthrite se développe souvent ''durant le rash viral'' et se présente souvent de manière ''bilatérale''
!!Investigations
*Faire les ''sérologies'' pour les différents virus: ''HAV, HBV, HCV, HIV, Parvovirus B19''
*La ''ponction articulaire'' est utile pour éliminer les autres diagnostics comme l'arthrite septique ou l'arthrite cristalline. Elle montrera un ''liquide inflammatoire'' avec culture négative, ''2'000-50'000 leucocytes'' et ''>25% PMN''
!!Traitement
*Le traitement est symptomatique, par ''analgesiques et AINS'', éventuellement une petite dose de prednisone.
!!Définition
*L’arthrose est caractérisée par une ''dégénérescence progressive du cartilage'' articulaire, avec destruction articulaire. Elle touche plus souvent les ''femmes''.
*Les articulations les plus touchées sont les ''doigts ([[IPP, IPD, Pouce|arthrose_schema_mains.jpg]])'' le ''genou'', la ''hanche'' et les ''vertèbres'' (articulations facettaires).
{{arthrose_articulations_schema.jpg}}
!!Etiologie
*L’arthrose ''primaire'' est ''idiopathique'', c’est la plus fréquente, celle qu’on retrouve ''chez les personnes âgées''.
*l’arthrose ''secondaire'' peut être due à un ''traumatisme'', des ''surcharges (travail, obésité''), des causes ''inflammatoires (PR''), une ''nécrose aseptique'' et autres.
!!Clinique
*Le patient présentera progressivement des ''douleurs mécaniques localisées'' aux articulations touchées. Les douleurs et gonflements peuvent évoluer par ''crises''.
!!Investigations
*''Ponction articulaire''
**La Ponction présente du ''liquide non inflammatoire'' (liquide clair, avec <2’000 leucocytes)
*''Labo''
**la ''VS'' et ''CRP'' sont ''normales''. Pareil pour les anticorps, avec RF et ANA négatifs.
*''RX''
**Les ''4 signes de l’arthroses'' qui sont le ''pincement articulaire'', la ''sclérose sous-chondrale'', les ''ostéophytes'' et les ''géodes'' (kystes sous-chondraux)
{{arthrose_signes_rx.jpg}}
!!Traitement
*Le ''traitement non-pharmacologique'' déjà. Si le patient est en surpoids il doit ''perdre du poids''. On peut aussi faire de la ''physiothérapie'' et prescrire des ''attelles'' et des ''supports'' pour aider les articulations.
*Le ''traitement pharmacologique'' s’appuye sur des mesures locales comme les ''AINS en patch'' et ''infiltrations d’acide hyaluronique'' intra-articulaire, voir des ''infiltrations de corticoïdes''. Les traitements systémiques se font via les ''AINS et Paracetamol'' (acetaminophene).
undefine
undefine
undefine
{{arythmies_schema.jpg}}
!! Définitions
*un ''RSR'' ou //Ryhtme Sinusal Régulier// correspond à:
*# un Rythme à ''60-100 bpm''
*# Des ''P avant chaque QRS'' et des ''QRS après chaque P''
*# Une ''Morphologie normale des'' [[Ondes P|ECG_Onde_P.jpg]]
*la ''Classification des Arythmies'' distingue:
**les ''Bradyarythmies''
**les ''TSV'' ou //Tachycardies Supra-Ventriculaires//
**les ''TV'' ou //Tachycardies Ventriculaires//
|!Bradyarythmies|!TSV|!TV|
|[[Bradycardie Sinusale (BS)]]|[[Tachycardie Sinusale (TS)]]|[[Tachycardie Ventriculaire (TV)]]|
|[[Bloc sinoauriculaire (BSA)]]|[[Tachycardie Auriculaire (TA)]]|[[Torsades de Pointes (TdP)]]|
|[[Bloc atrioventriculaire (BAV)]]|[[Tachycardie Atriale Multifocale (MAT)]]|[[Flutter Ventriculaire]]|
||[[Flutter Auriculaire]]|[[Fibrillation Ventriculaire (FV)]]|
|~|[[Fibrillation Auriculaire (FA)]]|~|
|~|[[Tachycardie Jonctionelle ectopique (TJ)]]||
|~|[[AVNRT]]|~|
|~|[[AVRT]]|~|
* En pédiatrie, il existe aussi le [[Wolff-Parkinson-White (WPW)]], qui est une tachycardie supraventriculaire.
undefine
{{ascite.jpg}}
!!Définition
*l'''Ascite'' correspond à une accumulation de ''liquide dans la cavité péritonéale''.
*La ''Cause'' peut être ''Liée à l'HTP'' ou ''Non-Liée'' à l'HTP, suivant les causes. Pour ce faire on mesure le ''Gradient d'Albumine Sérum-Ascite'':
|! [Alb]sérum - [Alb]ascite > 11g/l |![Alb]sérum - [Alb]ascite < 11g/l |
|!HTP|!Non-HTP|
|''Cirrhose''|''Carcinose Péritonéale''|
|''Hépatite''|''TBC''|
|''Mx Hépatique''|''Maladie Pancréatique''|
|IC Droite chronique|Sérosite|
|Budd-Chiari|Syndrome Néphrotique|
*La ''Physiopatho'' suppose une ''rétention hydro-sodée'' augmentée selon une hypotèse que La pression oncotique basse et la pression portale augmentée font une fuite de liquide dans le péritione, favorisée par une vasodilatation splanchnique. L'hypovolémie induit la rétention hydrosodée en réponse.
!!Investigations
*''Percussion'' à l'examen clinique, avec mise en évidence d'un niveau tympanique-matité qui change
*''US abdo''
*''Paracentèse'' pour le diagnostic (cellularité, culture, chimie, gram, cytologie)
!!Traitement
//ascites non-réfractaires//
*''Restriction sodée''
*''Diurétiques''
*viser une perte de //''0.5-1kg par jour''// si possible. Plus vite = risque d'IR
//ascites réfractaires//
*''Ponction d'ascite'' thérapeutique (sous perf d'albumine)
*mise en place d'un TIPS hépatique //(Transjugular intrahepatic portosystemic shunt )//
{{stent_hepatique.jpg}}
undefine
![ext[asphyxie_perinatale.pdf|./pdf/asphyxie_perinatale.pdf]] <!-- Texte caché pour la recherche Some infants do not breathe at birth. This may be due to asphyxia, when the fetus experiences a lack of oxygen during labour and/or delivery. It does not nec essarily mean that the brain has been injured but asphyxia can lead to brain injury or death. A fetus Rapid breathing Irregular gasping Primary apnoea Asphyxia Secondary apnoea 200 160 120 80 40 Intermittent positive pressure ventilation Time Figure 9.8 Changes in respiration and heart rate with continuous asphyxia. Once the infant has stopped gasping in secondary apnoea, resuscitation with lung expansion is required to establish regular respiration and restore the circulation. deprived of oxygen in utero will attempt to breathe, but if this is unsuccessful (as it will be in utero), it will then become apnoeic (primary apnoea), during which time the heart rate is maintained. If oxygen deprivation continues, primary apnoea is followed by irregular gasping and then a second period of apnoea (second ary or terminal apnoea), when the heart rate and blood pressure fall. If delivered at this stage, the infant will only recover if help with lung expansion is provided, e.g. by positive pressure ventilation by mask or tracheal tube (Fig. 9.8). 142 The human fetus rarely experiences a continuous asphyxial insult, except after placental abruption or Perinatal medicine Heart rate Breaths Table 9.2 The Apgar score Score 0 1 2 Heart rate Absent <100 beats/min ≥100 beats/min Respiratory effort Absent Gasping or irregular Regular, strong cry Muscle tone Flaccid Some flexion of limbs Well flexed, active Reflex irritability None Grimace Cry, cough Colour Pale/blue Body pink, extremities blue Pink complete occlusion of umbilical blood flow in a cord prolapse. More commonly, asphyxia, which occurs during labour and delivery is intermittent, e.g. from prolonged and frequent uterine contractions. Although birth asphyxia is an important cause of failure to estab lish breathing requiring resuscitation at birth, there are other causes, including birth trauma, maternal analge sic or anaesthetic agents, retained lung fluid, preterm infant or a congenital malformation which interferes with breathing. The Apgar score is used to describe a baby’s condi tion at 1 and 5 min after delivery (Table 9.2). It is also measured at 5 min intervals thereafter, if the infant’s condition remains poor. The most important compo nents are the heart rate and respiration. -->
![ext[aspiration_ce_ped.pdf|./pdf/aspiration_ce_ped.pdf]] <!-- Texte caché pour la recherche Inhaled foreign body 7 Airway obstruction from foreign body Figure 7.6 Management of a foreign body. Assess severity Ineffective cough Effective cough Unconscious Open airway 5 breaths Start CPR Conscious 5 back blows 5 thrusts (chest for infant, abdominal for child >1 year old) Encourage cough Continue to check for deterioration Figure 7.7a Abdominal thrusts using the Heimlich manoeuvre in older children to expel an inhaled foreign body. One hand is formed into a fist and placed against the child’s abdomen above the umbilicus and below the xiphisternum. The other hand is placed over the fist. Both hands are thrust into the abdomen. This is repeated several times. The child can be standing, kneeling, sitting or supine. tissue, bites to genitals, child has diabetes mellitus, immunosuppression and in all bites after primary closure. The antibiotic of choice is co amoxiclav, as this also covers Pasteurella infection. - Although there has been much publicity about fierce dog breeds, such as Rottweilers, attacking chil dren in parks or public places, most attacks are by dogs known to the child. Poisoning Poisoning in children may be: • accidental – the vast majority • deliberate self poisoning in older children - Figure 7.7b In infants, back blows and chest thrusts are recommended to expel an inhaled foreign body. Abdominal thrusts are best avoided in infants as they may cause intra abdominal injury. -->
!!Définition *The passage of meconium becomes increasingly common the greater the infant’s gestational age, par ticularly when post term. *Infants who also become acidotic may inhale thick meconium and develop meconium aspiration syndrome. *Attempting to aspi rate meconium from the nose and mouth while the infant’s head is on the perineum is not recommended, as it is ineffective. *If the infant cries at birth and estab lishes regular respiration, no resuscitation is required. * If respiration is not established, the larynx should be inspected under direct vision and any thick meconium aspirated by suctioning with a large bore suction cath eter, but if the infant becomes bradycardic, positive pressure ventilation will be needed despite the presence of meconium.
//en construction//
{{asthme_schema.jpg}}
!!Définition
*L'''Asthme bronchique'' est une ''inflammation chronique des bronches'' avec ''production de mucus'' et ''bronchospasme''. Ce phénomène ce produit en réponse à des ''Facteurs Déclencheurs'' qui déclenchent les crises.
*A ne pas confondre avec l'//Asthme Cardiaque// dans laquelle une //Insuffisance Cardiaque// induit des //Symptômes Asthmatiques//.
*On distingue:
**L'''Asthme Extrinsèque (Atopique)'': qui est l'Asthme allergique classique (pollens, acariens, moisissures et squames d’animaux)
**L'''Asthme Intrinsèque'': plus rare, avec tests cutanés et IgE sériques négatifs. Cet Asthme survient plus tardivement et a un moins bon pronostic. Il est associé à une polypose nasale et sinusite chronique. On parle de ''syndrome de Widal'' dans l'association asthme + polypose nasale + intolérance à l'aspirine.
*On Distingue aussi:
**''L'Asthme aigu moderé'' si la DEP >50% des valeurs de base
**''L'Asthme aigu sévère'' si la DEP 30-50% des valeurs de base
**''L'Asthme aigu grave'' si la DEP <30% des valeurs de base
*Au niveau pneumologique, l'asthme est définit par un ''syndrome obstructif variable et réversible''.
*L'asthme est fluctuant, avec des ''périodes asymptomatiques'' ainsi que des ''périodes d'exacerbation''.
!!Clinique
*''Dyspnée'' et ''Toux'', qui ''s'aggravent la nuit''
*''Respiration sifflante''
*''Facteurs déclenchants'' tels que:
**''exercice''
**''froid''
**''allergènes'' (pollen, animaux, acarien, moisissures)
**''tabac''
**''infection virale''
**''médicaments'' (B-bloquants, Aspirine, AINS)
*A l'''Auscultation'' on perçoit des'' [[sibilances expiratoires|asthmes_sibilances.mp3]]''
*Lors des crises on trouvera une ''tachypnée'', ''tachycardie'', ''expirium prolongé'', ''utilisation des muscles accessoires''
//severité//
*''Stade I'': PaCO2 bas, PaO2 N, pH augmenté (hyperventilation avec alcalose resp.)
*''Stade II'': PaCO2 bien bas, PaO2 diminue, pH, augmente bien (l'hyperventilation ne suffit plus)
*''Stade III'': PaCO2 Normal, paO2 bien diminué, ph normalise (le patient s'épuise)
*''Stade IV'': PaCO2 augmenté, paO2 bien diminué, ph diminue (la cata)
!!Investigations
{{DEP.jpeg}}
*''Debit de pointe (DEP)'' ou //Peak Flow//, mesure simple et peu couteuse. On calcule une ''//mesure théorique//'' suivant l'âge, le sexe et la taille et on définit l'asthme comme une ''//variabilité de >20% de la DEP théorique//''
*''Spirométrie'' ou //Fonctions pulmonaires//, qui peut montrer un [[syndrome obstructif|spirometries.jpg]] (VEMS/CVF <70%) qui est ''réversible'' aux bronchodilatateurs.
*Le ''Diagnostic'' se pose par l'association ''clinique + DEP + Spirométrie''
*''Test allergologiques'' avec les IgE et les tests allergènes
*''Gazo'' et ''Satu'' lors des patients consultant pour crise en urgence
!!Traitement
''Urgences et Crises''
*''Oxygène'' et ''__Prednisone Po__'' lors d'urgence
*''Salbuamol'' (//ventolin//) un B-agoniste de courte durée d'action (SABA)
*''Ipatropium'' (//atrovent//) un anticholinergique
''Long Cours''
*''Glucocorticoïdes inhalés''
*''Salmeterol'' un B-agoniste de longue durée
*Le //''Seretide''// comprend les GC associés aux LABA
undefine
undefine
{{atelectasie_lsd_rx.jpg}}
!!Généralités
*une ''Atelectasie'' correspond à une ''perte de volume'' de soit ''une partie du poumon'' (//atelectasie lobaire//), soit ''tout le poumon'' (//atelectasie du poumon//)
*Elle s'observe à la ''Rx thorax'' comme une ''zone hyperdense''.
*La perte de volume induit une ''traction'' sur les tissus avoisinants, comme:
**les ''fissures''
** la ''trachée''
** le ''diaphragme''
** le ''coeur''
**le ''poumon controlatéral'' qui va se gonfler en compensation
*les ''Causes'' peuvent être
**''Compression'' par un épanchement ou une faible inspiration
**''Obstruction'' avec absorption de l'air des alvéoles. L'obstruction peut venir d'une tumeur, d'un bouchon mucus ou d'un corps étranger.
*L'''Investigation'' importante à faire si l'étiologie n'est pas expliquée est un ''CT'' afin d'exclure une ''tumeur''
{{atelectasie_poumons_rx.jpg}}
undefine
undefine
!!Définition *l'''atrésie des choanes'' (ou atrésie choanale) est un rétrécissement ou une absence de communication entre la cavité nasale et le nasopharynx . * Cette atrésie est un signe cardinal du syndrome ''CHARGE'' et toute atrésie des choanes détectée à la naissance doit faire rechercher ce syndrome. * Cette atrésie peut être uni ou ''bilatérale'', être ''osseuse'' ou ''membraneuse''. * Les atrésies bilatérales postérieures sont associées avec une augmentation significative de la mortalité, le bébé fait des ''apnées'' car a la naissance il respire surtout ''par le nez''. * Cette anomalie peut être la cause, au cours de la grossesse, d'un hydramnios. *''S'améliore au pleurs'' *traitement temporaire par ''intubation oral'' *traitement définitif par ''chirurgie''
![ext[atresies.pdf|./pdf/atresies.pdf]] <!-- Texte caché pour la recherche Oesophageal atresia Oesophageal atresia is usually associated with a tracheo oesophageal fistula (Fig. 10.26). It occurs in 1 in 3500 live births and is associated with polyhydram nios during pregnancy. If suspected, a wide calibre feeding tube is passed and checked by X ray to see if it reaches the stomach. If not diagnosed at birth, clinical presentation is with persistent salivation and drooling from the mouth after birth. If the diagnosis is not made at this stage, the infant will cough and choke when fed, and have cyanotic episodes. There may be aspiration into the lungs of saliva (or milk) from the upper airways and acid secretions from the stomach. Almost half of the babies have other congenital malformations, e.g. as part of the VACTERL association (Vertebral, Anorectal, Cardiac, Tracheo oEsophageal, Renal and Radial Limb anomalies). Continuous suction is applied to a tube passed into the oesophageal pouch to reduce aspira tion of saliva and secretions pending transfer to a neo natal surgical unit. - - - - Small bowel obstruction This may be recognised antenatally on ultrasound scanning. Otherwise, small bowel obstruction presents with persistent vomiting, which is bile stained unless the obstruction is above the ampulla of Vater. - 177 1 2 3 4 Neonatal medicine Figure 10.26 Oesophageal atresia and tracheo oesophageal fistula. - 10 86% Atresia with fistula between distal oesophagus and trachea 8% Atresia without fistula 4% H-type fistula without atresia lower ileum; almost all affected neonates have cystic fibrosis • Meconium plug – a plug of inspissated meconium causes lower intestinal obstruction. The diagnosis is made on clinical features and abdomi nal X ray showing intestinal obstruction. Atresia or stenosis of the bowel and malrotation are treated sur gically, after correction of fluid and electrolyte deple tion. A meconium plug will usually pass spontaneously. Meconium ileus may be dislodged using Gastrografin contrast medium. - Large bowel obstruction This may be caused by: • • - Hirschsprung disease. Absence of the myenteric nerve plexus in the rectum which may extend along the colon. The baby often does not pass meconium within 48 h of birth and subsequently the abdomen distends. About 15% present as an acute enterocolitis (see Ch. 13). Figure 10.27 Abdominal X ray in duodenal atresia showing a ‘double bubble’ from distension of the stomach and duodenal cap. There is absence of air distally. Meconium may initially be passed, but subsequently its passage is usually delayed or absent. Abdominal dis tension becomes increasingly prominent the more distal the bowel obstruction. High lesions will present soon after birth, but lower obstruction may not present for some days. Small bowel obstruction may be caused by: • Atresia or stenosis of the duodenum (Fig. 10.27) – one third have Down syndrome and it is also associated with other congenital malformations Rectal atresia. Absence of the anus at the normal site. Lesions are high or low, depending whether the bowel ends above or below the levator ani muscle. In high lesions, there is a fistula to the bladder or urethra in boys, or adjacent to the vagina or to the bladder in girls. Treatment is surgical. Bile-stained vomiting is from intestinal obstruction until proved otherwise. Exomphalos/gastroschisis - 178 • • • Atresia or stenosis of the jejunum or ileum – there may be multiple atretic segments of bowel Malrotation with volvulus – a dangerous condition as it may lead to infarction of the entire midgut Meconium ileus – thick inspissated meconium, of putty like consistency, becomes impacted in the -->
@@background-color:salmon; !''Auscultation Cardiaque'' @@ <<list-links "[tag[Auscultation Cardiaque]sort[title]]">> @@background-color:LightBlue; !''Auscultation Pulmonaire'' @@ <<list-links "[tag[Auscultation Pulmonaire]sort[title]]">>
!!Epidémiologie
*''G''>F
*''2%'' chez les garçons
*''60-75% souffrent de retard mental '' à l'âge adulte (QI < 70)
*''Diagnostic se pose avant 3ans'' (selon DSM). Peut passer inaperçu chez les autistes à haut potentiel.
*Il faut collaborer avec ''les proches''. Thérapies précoces importantes.
*Difficulté lors de ''l'entrée à l'école'' fait découvrir le trouble et lors de ''l'adolescence''. Egalement difficile quand les parents peuvent plus s'occuper d'eux.
!!Etiologie
Pas certains, plusieurs causes :
*Les ''traumatismes'' ''intra''-''utérins'' et ''périnataux'' tels que la ''rubéole'' congénitale, ''l'anoxie''.
*Les ''maladies'' ''graves'' survenues durant la ''petite'' ''enfance'' telles que les ''encéphalites'', ''méningites''.
*Les facteurs ''génétiques''.
*Les ''troubles'' ''métaboliques''( par ex. hypothyroïdie).
''__Pathophysiologie__''
*Il semble qu'il y ait des ''anomalies'' ''histoanatomiques'' restant confinées au ''système'' ''limbique'' et aux ''circuits'' ''cérébelleux''.
**''Diminution'' des ''dimensions'' des ''neurones'' et une ''augmentation'' de leur ''"packing density"'' dans l'hippocampe, le subiculum, le cortex enthorinale, l'amygdale, les corps mamillaires, le nucleus septale moyen et le gyrus cingulatus antérieur.
**Dans le ''cervelet'', on observe une ''réduction'' dans le nombre des cellules du ''Purkinje''.
!!Définition (CIM-10)
__''F-84.0 Autisme infantile''__
''Trouble envahissant du développement,'' caractérisé par un développement anormal ou déficient, manifeste ''avant l'âge de 3 ans'', avec une perturbation caractéristique du fonctionnement dans chacun des trois domaines suivants :
*''Interactions'' ''sociales''
*''Communications''
*''Comportements'' (au caractère ''restreint'' et ''répétitif'') //(mouvements stéréotypés, intérêts restreints)//
Le trouble survient ''trois ou quatre fois plus souvent chez les garçons que chez les filles.''
NB : Les signes physiques de l'autisme, à l’inverse de ce qui se passe pour la disabilité intellectuelle, sont peu évidents
Il n’existe'' pas de symptômes pathognomoniques'' de l’autisme.
{{autisme-ice-berg.jpg}}
!!!Communicaiton
```
Difficultés au niveau verbal et non-verbal !
```
*''Manque'' ''d’appréciation'' de ''l’humeur''
*''Difficultés'' à parler des ''sentiments'' et à comprendre les sentiments des autres.
*Problèmes de ''compréhension'' des ''expressions'' idiomatiques.
*Difficultés dans la ''compréhension'' et l’utilisation des ''pronoms'' (je-tu), des prépositions et des termes « relatifs » en général (grand-petit…)
*Pour environ 50 % des personnes atteintes d’autisme: peu ou pas de ''langage'' et pas de tentatives de compensation par d’autres modes de communication.
*''Communication'' au travers des crises de ''colère'', des ''pleurs''…
*''Echolalie'' immédiate ou différée fréquente.
!!!Socialisation
```
Le problème ne se situe pas au niveau du désir de communication ou d’interaction mais au niveau d’un manque de possibilité de le faire!
```
*''Manque'' de ''réaction'' vis-à-vis des autres.
*''Indifférent'' ou ''opposé'' aux ''expressions'' affective ou aux contacts physiques.
*''Dialogue'' ''corporel'' ''absent'' ou particulier (regard, sourire, mimiques).
*Conduites ''d’imitation'' ''absentes'' ou ''déviantes''.
!!!Imaginaiton
```
Première forme d’imagination = aller au-delà de la perception première!
```
*Chez l’enfant: ''manque de jeux symboliques'' avec les autres.
*Tendance à se ''focaliser'' sur des ''détails'' plutôt que sur le contenu ou l’ensemble.
*Les ''activités'' qui semblent ''imaginatives'' sont, la plupart du temps, ''copiées'' (p.ex. de la télévision) et elles demeurent extrêmement'' rigides et répétitives''.
!!!Cognition
*Difficultés au niveau de la ''compréhension'' des ''symboles'', difficultés à aller au-delà de l’information donnée.
*Conséquences directes au niveau des théories de l’esprit: ''incapacité à réaliser que les autres ont leurs propres pensées''…
*Tendance à la ''pensées'' ''hypersélective'' ou pensée en ''détail'': sensibilité pour les éléments partiels de la perception plutôt que pour l’ensemble.
*''Bonne'' ''mémoire'' des événements ''épisodiques'' (dates, histoires…)
!!DD
Les comportements anormaux de l’autiste se retrouvent tous dans d’autres tableaux morbides ou carentiels. Etablir le diagnostic différentiel est donc difficile.
*''Cécité''
*''Surdité''
{{autisme-surdite.jpg}}
*''Enfant'' ''normal'' mais ''lent''
{{autisme-enfant-lent.jpg}}
*''Retard'' ''spécifique'' dans l’acquisition du ''langage''
{{Autisme-retard_specifique.jpg}}
*''Abandon'' ''grave''
{{Autisme-abandon.jpg}}
*''Retard'' ''mental'' « pur ».
{{Autisme-QI.jpg}}
!!Diagnostic
*''Observation''
*Ecoute de ''l'entourage''
*''Anamnèse''
*''Evaluation'' ''spécifique''
!!!Indicaitons diagnostiques
*''Jamais'' ''d’initiative'' pour ''aborder'' une personne
*''Ignore'' les ''autres'' de façon active
*''Pas'' de ''contact'' ''oculaire'', regarde du coin de l’œil, regard à travers les autres
*Plus ''d’intérêt'' pour les ''objets'' que pour les personnes
*''Aptitudes'' ''hétérogènes''
*''Utilisation'' ''stéréotypée'' de son propre ''corps'', ''automutilations''
*Forte ''dépendance'' par rapport aux ''routines''
!!!Examens complémentaires
*Tests ''psychométriques'' et ''neuropsychologiques'' + ''ORL'' + ''potentiels'' ''évoqués''
*Bilan ''génétique''
*''EEG''
*''Imagerie'' ''cérébrale''
''__Tests sépcifiques__''
*Le ''CARS'' (Childhood Autism Rating Scale) dans le cadre du modèle TEACCH, généralement passé en même temps que les échelles ''PEP'' (Psycho- Educative Profile), pour les enfants (ou ''AAPEP'' pour les adultes).
*''L’Echelle'' ''Bretonneau''
*''L’Interview'' pour le diagnostic d’Autisme de ''RUTTER''.
!!Co-morbidités
*''Epilepsie'' 20%
*''TDA/H'' 1/3
*''Déficience'' ''intellectuelle''
*''Tics'' 1/4
*''Anomalies'' ''motrices''
*Troubles ''GI'' 50%
*Trouble ''sommeil'' fréquent >50%
*Troubles ''anxieux'' 50%
*''Dépression'' 40%
*Troubles du ''comportement'' avec agressivité
*''PICA'' 1/3
!!Traitement
*Il n'y a ''pas de traitement spécifique'' pour l'autisme.
*Pour l'impulsivité : abilify ou risperdal (neuroleptique atpyiques)
*On traite surtout les ''co-morbidités''.
*Thérapie précoce pour apprendre les compétences sociales et de la vie de tous les jours
*Psychoéducaiton et psychothérapie.
*Impliquer les proches et ''l'environnement'' est important.
*Il faudrait un aménagement pour une meilleure intégration.
''__TEACCH__''
*Le modèle ''TEACCH'' (Treatment and Education of Autistic and Related Communication Handicapped Children) a été appliqué depuis 1964 -> familles ont été suivies grâce à un réseau de centres d'éducation.
*Le modèle TEACCH est aussi adopté, avec ''modifications'', dans notre ''environnement'' ''thérapeutique''.
!!Notes
*Traitement de l'''Anxiété'' : BZD éventuellement, beta-bloquants
*Chronicité de la pathologie
*''Eye tracking'' : ne regardent pas les mêmes choses (géométrique etc.)
*Ont de la difficulté à reconnaitre les émotions.
undefine
undefine
undefine
undefine
undefine
undefine
!! Définition
* Les ''AVC ischémiques'' représentent ''la majorité'' des causes d'AVC. Les autres causes d'AVC sont les AVC hémorragiques avec l'''[[HSA|Hémorragie Sous-Arachnoïdienne]]'' et l'[[Hématome Intra-Parenchymateux|Hématome Intra-Parenchymateux]], et plus rarement une [[Thrombose Veineuse Cérébrale]].
* Les AVC ischémiques sont caractérisés par une ''installation ictale'', rapidement maximale, avec ''déficit neurologiques focaux'' correspondant à un ''territoire vasculaire''.
*Ces déficits sont souvent accompagnés de ''céphalées'', ''crises d'épilepsies'' et ''trouble de la vigilance''.
!! Etiologie
* Les ''Embols'' sont les plus fréquents. ils proviennent majoritairement d'une ''Atheromatose Carotidienne'' ou d'une ''FA'', mais on peut trouver aussi une ''dissection''ou une ''akinésie sur IM''
*Les ''Lacunes'' sont des micro-infarctus dus à l'''HTA'' et l'''artériosclérose''. Au CT elles ressemblent à des ''[[petits ronds hypodenses|AVC_lacune_ct.jpg]]'' souvent situées au niveau des artères lenticulostriées.
*Les ''Thromboses locales'' peuvent êtres dues à des ''anomalies de l'hémostase'' ou des ''vasculites''.
!! Déficits neurologiques
En fonction du territoire atteint on peut trouver:
*''Hémisyndromes moteurs'': parésie ou plégie accompagnée de spasticité et babinsky
**''Hémisyndromes sensitifs''
*''Hemianopsie''
**''Aphasies''
**''Héminégligence''
**''Ataxie''
*''etc.''
{{AVC_schema_localisation.jpg}}
!! Pénombre
*La ''Pénombre'' correspond à une ''zone non-perfusée'' qui est ''encore viable'' mais avec un ''risque de progresser en ischémie irréversible''.
*On la définit au ''CT de perfusion'' comme [[la différence entre CBF et CBV|AVC_penombre_ct_CBV_CBF.jpg]], aussi appelé ''mismatch''. L'idée est que le CBF (Cerebral Blood Flow) est diminué à la fois dans la zone de pénombre et dans la zone irréversible, tandis que le CBV (Cerebral Blood Volume) n'est diminué que dans la zone irréversible, car l'autorégulation cérébrale fonctionne encore dans la zone de pénombre.
* Plus le temps passe, plus la pénombre diminue. D'ou l'adage ''"Time is Brain !"''
{{AVC_penombre_schema.jpg}}
!! Diagnostic
*le ''CT non-injecté'' ne montrera pas forcément des signes évidents. On peut trouver des ''effacement des sillons'' avec ''perte de différenciation cortico-souscorticale'' ou un ''dense artery sign'' en cas de thrombose de l'ACM. A 3j de distance par contre il montera bien le ''ramollissement de l'infarctus'' comme une grande zone d'hypodensité.
*L'''IRM'' permet une meilleure visualisation de l'infarctus, mais étant dans l'urgence c'est le CT que l'on fait en principe.
*Les ''investigations plus poussées'' comprennent:
**''Angio-CT'' pour l'analyse des vaisseaux
**''ECG, Holter'' pour rechercher la FA
**''Echo Coeur'' pour chercher l'Akinésie ou une endocardite
**''FSC, Crase'' pour chercher une anomalie de la crase
**un ''Bilan des FRCV'' est aussi de mise
{{AVC_ischemique_ct.jpg}}
!!Traitement
!!!''Traitement Aigu''
*''Trhombolyse I.V'' se fait dans les ''<4.5h'', on utilise les ''rTPA'', mais elle est soumise à plein de ''contres-indications'' ([[en gros si le patient a des tendances ou des antécédents de saignements/traumas|contre_indication_thrombolyse.jpg]])
*''Thrombectomie mecanique'' ou ''thrombolyse arterielle locale'' dans les ''<6h''
*''Surveillance en soins aigus'' avec surveillance de la ''saturation'' (>92%), de la ''gylcémie'' et de la ''tension'' (traiter que si sous les <220)
* Donner aussi de l'''Aspirine'' et de l'''Héparine'' prophylaxiques.
!!!''Prévention''
*''Traiter les FRCV'' !
*''Endarteriectomie Carotidienne'' si sténose >70%
*''Anticoagulation'' si ''FA'', à l'aide des [[Scores CHADS2 et HASBLED|score_CHA2DS2VASC_HASBLED.jpg]]
*''Aspirine + Clopidogrel + Statines ''
*Sans oublier la ''Neuro-Rééducation
undefine
undefine
undefine
undefine
undefine
undefine
!!AVNRT
{{ECG_AVNRT.jpg}}
*Les ''AVNRT'' sont des ''Tachyarythmies Supraventriculaires Nodales ''caractérisés par des ''micro-réentrées nodales'', localisées au niveau du noeud AV.
*A l'ECG on observe des ''Ondes P' retrogrades'' visibles ''Après le QRS'', sous la forme de //''pseudo s en DII''// ou //''pseudo r' en V1''//
*A ne pas confondre avec les [[AVRT]] qui sont des macro-réentrées avec un circuit passant par un faisceau accessoire. Pour ne pas les mélanger, penser que dans //AV''N''RT// le N veut dire //Nodal//.
{{ECG_AVNRT_schema.jpg}}
!!AVRT
{{ECG_AVRT.jpg}}
*Les ''AVRT'' sont des ''Tachyarythmies Supraventriculaires'' dues à des ''Macro-réentrées'' qui se font via un ''Faisceau accessoire'' qui connecte les oreillettes et les ventricules. Si le faisceau va dans le sens ventricule->oreillette il est dit //Orthodromique//, s'il va dans le sens oreillette->ventricule, il est dit //Antidromique//
*Ils se voient à l'ECG par des ''QRS suivit d'ondes P''', un peu comme les [[AVNRT|AVNRT]]
{{ECG_AVRT_schema.jpg}}
undefine
undefine
undefine
!!Définition *Comparer l'apport hydrique oral + perfusions avec ce que le patient urine. *''Quantité'': ''35 cc/kg/h'' normalement *Oligurie: < 500cc *Anurie: Absence totale ou quasi totale ''Exemple de patholgoies'' *Insuffisance cardique *IR *quand le patient se remplit ou se vide et qu'il faut vérifier ''Risque'' * Diurèse faussée par erreur de recueil.
Bienvenue sur ''Fahrnipedia''! Pour rechercher un sujet, vous pouvez utiliser la ''barre de recherche'', ou parcourir le [[Sommaire]]. Pour plus d'informations sur le fonctionnement de ce site, [[cliquez ici|Fahrnipedia]]. Bonne visite ! :)
!!Définition *Le ''Bigéminisme'' se définit par une ''paire'' comprennant ''1 QRS + 1 ES''. Il peut aussi faire un ''trio'' si il comprend ''1 QRS + 2 ES'', on parle de bigéminisme 1:2. *un ''Trigéminisme'' comprend ''2 QRS + 1 ES'', on parle de bigéminisme 2:1 *Un Bigéminisme peut être ''auriculaire'' si c'est des ESA, ''jonctionnel'' si c'est des ESJ ou ''ventriculaire'' si c'est des ESV.
![ext[checkup.pdf|./pdf/checkup.pdf]] <!-- Texte caché pour la recherche Controle de santé contrôle de santé screening prévention prevention -->
!!BAV du Ier Degré
{{ECG_BAV_Ier_Degre.jpg}}
*Le ''BAV Ier Degré'' correspond à un ''Allongement du P-R >0.2s'', mais chaque P reste suivi d'un QRS
*Il est souvent lié la la vieillesse et est relativement bénin
!!BAV du IIe Degré Mobitz Type I Wenckeback
{{ECG_BAV_IIe_degre_Type_I_Wenckeback.jpg}}
*Le ''BAV du IIe Degré Mobitz Type I Wenckeback'' correspond à un ''allongement progressif du P-R'' qui se termine par un ''P sans QRS'', puis qui reprend.
*Un BAV 5:4 correspond à 5 ondes P pour 4 QRS (comme sur l'exemple)
*Un BAV 2:1 est difficile de distinguer d'un Mobitz Type II car on ne voit pas le P-R se raccourcir progressivement.
*Ce type de Bloc est relativemen Bénin et ne requiert pas de Pacemaker.
!!BAV du IIe Degré Mobitz Type II
{{ECG_BAV_IIe_degre_Type_II.jpg}}
*Le ''BAV du IIe Degre Mobitz Type II'' correspond à des ''P sans QRS'' qui surviennent de façon ''irrégulière'' et ''sans allongement du P-R''.
*Ce bloc est ''dangereux'' et demande souvent la pose d'un ''Pacemaker''.
!!BAV du III Degré Complet
{{ECG_BAV_IIIe_degre.jpg}}
*Le ''BAV du IIIe Degré'' correspond à une ''Dissociation des P et des QRS'' qui suivent chacun leur rythme différent.
*C'est une ''Indication au Pacemaker'' tout comme le BAV IIe Degré Mobitz type 2.
{{ECG_BAV_schema.jpg}}
!!Bloc Sino-Auriculaire
{{ECG_BSA.jpg}}
*Dans le ''Bloc SA'', la dépolarisation du noeud SA n'arrive pas à quitter le noeud, ce qui induit des ''Sauts de P''.
*On distingue ''trois types'' en fonction de la ''Pause P-P''
*#''[[BSA du IIe Degré type 1|BSA_IIe_degre_type_1.jpg]]'': Raccourcissement progressive du P-P avant une pause P-P
*#''[[BSA du IIe Degré type 2|BSA_IIe_degre_type_2.jpg]]'': Pauses P-P sans raccourcissement progressif du P-P, de longueur environ 2 à 4 fois l'interval P-P.
*#[[BSA du IIIe Degre|BSA_IIIe_degre.jpg]] : Absence d'ondes P
*Le BSA du Ier degré ne se voit pas à l'ECG, il s'agit d'un ralentissement de la conduction dans le noeud SA.
{{ECG_BSA_schema.jpg}}
undefine
!!Bloc de Branche Gauche (BBG)
{{ECG_BBG.jpg}}
*un ''BBG'' ou //Bloc de Branche Gauche// est un ''trouble de la conduction'' de la branche Gauche du Faisceau de His
*Il est le plus souvent du à une ''Lesion anatomique'' de la Branche. Il peut être //''Complet''// si le courant est interrompu, ou ''//Incomplet//'' si le courant est juste ralentit.
*Les ''Critères'' du BBG sont:
*#un ''QRS >0.12s''
*#une ''Onde S profonde en V1''
*#un ''RR en V6''' en forme de //M// sans onde Q, qui résulte de la dépolarisation décalée du VD puis du VD (retardé).
*On parle d'un ''//BBG incomplet//'' si la durée du ''QRS <0.12s'' en présence des [[autres critères du BBG|ECG_BBG_incomplet.jpg]].
!!Bloc de Branche Droit (BBD)
{{ECG_BBD.jpg}}
*un ''BBD'', ou //Bloc de Branche Droit// est ''trouble de la conduction'' de la branche Droite du Faisceau de His
*Il est le plus souvent du à une ''Lesion anatomique'' de la Branche. Il peut être //''Complet''// si le courant est interrompu, ou ''//Incomplet//'' si le courant est juste ralentit.
*Les ''Critères'' du BBD sont:
*#un ''QRS >0.12s''
*#un pattern ''RSR' en V1'' avec le ''R' > R''
*On parle d'un ''//BBD incomplet//'' si la durée du ''QRS <0.12s'' en présence des [[autres critères du BBD|ECG_BBD_incomplet.jpg]].
undefine
!!Définition
*Troubles de la personnalité
!!Critères diagnostic
(Ne se diagnostiquent qu'à l'âge adulte)
''__DSM-IV (Troubles de la personnalité)__''
*Déviation des conduites dans'' ≥2 domaines'' : ''cognitif'', ''affectif'', ''fonctionnement'' ''interpersonnel'', contrôle des ''pulsions''
*''Durable'', ''envahissant''
*''Souffrance'' significative
*''Début'' ''adolescence''
*Pas conséquence d'un autre trouble mental
*Pas du à une substance ou une autre affection médicale
''__DSM-5 (Trouble de la personnalité borderline)__''
Mode général ''d’instabilité'' des ''relations'' ''interpersonnelles'', de ''l’image de soi et des affects'', ≥5/9 critères
*''Efforts'' pour ''éviter'' les ''abandons''
*''Relations'' ''interpersonnelles'' intenses et instables
*''Perturbation'' de ''l’identité''
*''Impulsivité'' dans au moins deux domaines dommageables pour le sujet
*''Comportements'' ''suicidaires'', automutilations
*''Instabilité'' ''affective''
*''Sentiment'' de ''vide''
*''Colère'' ''intense'', inappropriée
*''Idéation'' ''persécutoire'' ou ''symptômes'' ''dissociatifs'' ''transitoires'' dans des situations de stress
//''Comportements'' ''auto''-''dommageable'' sont pas pathognomoniques -> stratégie pour diminuer la tension, "manipulation", forme de communication//
!!Epidémiologie
*''4-6% de la population générale ''
*10% des patients ambulatoires en psychiatrie
*15-20% des individus hospitalisés en psychiatrie
*75% sont des ''femmes'' en clinique (mais autant d'hommes que femmes dans les études en population générale)
!!Etiologie
!!!Facteurs génétique
*''Héritabilité'' du trouble ''40-60%''
*Parents borderline : 5x plus de risque -> transmission de dimensions telles que l’impulsivité et la dérégulation émotionnelle
!!!Neurobiologique
*''Hyperréactivité'' de l’axe ''hypothalamo''-''hipophyso''- ''surrénalien'' (HHS) (en lien avec ''l’hypersensibilité au stress'' et autres facteurs environnementaux)
*''Augmentation de l’activité de l’amygdale'' avec une ''diminution de l’inhibition de régions préfrontales '' si exposition à des visages exprimant des émotions «négatives» (-> dérégulation émotionnelle)
*''Diminution de sécrétion de l’ocytocine'' (-> difficultés des relations interpersonnelles)
*Perturbation du ''système'' ''opioïdergique'' (-> différences ressenties dans les seuils de la douleur)
!!!Psycho-sociaux
*''Pertes'' et ''séparations'' des ''parents'' (au travers de divorce, décès etc..)
*''Difficultés'' ''relationnelles'' avec les ''parents''
*''Abus'' ''sexuel'' (enfance et adolescence) jusqu’à 80% selon certaines études (50-60% par la famille)
*''Négligences'' ''affectives'' et ''physiques'' dans l’enfance (>50% des patients)
!!!Interactions gènes - environnement
Le trouble borderline résulterait de l’interaction répétée entre une ''vulnérabilité biologique'' (génétique) induisant une dysrégulation émotionnelle de base et ''un environnement « invalidant » ''(rôle important des maltraitances émotionnelles: abus et négligences émotionnelles)
!!Sémiologie
Important ''polymorphisme'' ''clinique'' et psychopathologique: Compte tenu des 9 critères DSM-V et du fait qu’il en faut 5 pour retenir le diagnostic, il y a 151 combinaisons possibles de ces critères !
=> Regrouper les symptômes en'' 4 grands domaines ''
__''La dérégulation émotionnelle ''__
*''Instabilité affective'' due à une réactivité marquée de l'humeur (dysphorie épisodique intense, irritabilité ou anxiété d’une durée allant de quelques heures à quelques jours)
**//(Très heureux sans raison = bipolaire ; réaction émotionnelle très forte aux choses, non contrôlable et non approprié lors de borderline)//
*''Colères'' ''intenses'' et ''inappropriées'' ou difficulté à contrôler la colère (fréquentes manifestations de mauvaise humeur, colère constante ou bagarres répétées)
*''Sentiment chronique de vide''
''Régulation'' des ''émotions'': consciemment ou inconsciemment influence l’occurrence, l’expérience, l’expression, la durée et la magnitude des émotions
*''Modulation'' de la ''réponse'' : changer l'expérience comportementale, physiologique et psychologique d'une émotion (p.ex prendre des drogues ou relaxation)
*''Changement'' de ''perspective''/perception d'une situation -> changer la réponse émotionnelle
*''Changer'' son ''attention'' dans une situation pour réduire /accroitre l'impact émotionnel (se distraire)
*''Changer'' la ''situation'' ou le contexte pour réduire les chances de se retrouver dans une situation avec émotions trop intenses (évitement)
Lors de ''dysrégulation'', il peut y avoir une ''perturbation'' des ''systèmes'' de ''régulation'' des émotions (-> vulnérabilité émotionnelle accrue : émotions plus intenses ; avec un retour lent à la ligne de base) ou un ''manque'' de ''compétences'' pour ''réguler'' adéquatement les émotions intenses (incapacité de nommer et ressentir les émotions -> sentiment de vide, incapacité à se distancer des stimuli qui réactivent les émotions)
{{Dysrégulation émotionnelle.jpg}}
*Les comportements auto-dommageables -> stratégie non-adaptée (= inadéquate) de régulation des émotions.
*Jugement par les soignants -> difficile pour les borderline
__''L’impulsivité ''__
*''Impulsivité'' dans au ''moins deux domaines potentiellement dommageables pour le sujet'' (dépenses, sexualité, toxicomanie, conduite automobile dangereuse, crises de boulimie)
*''Répétition'' de comportements, de gestes ou de menaces suicidaires, ou d’automutilations
''Définition''
*Prédisposition à fournir des ''réactions'' ''rapides'' et ''irréfléchies'' en réponse à des stimuli internes ou externes'' sans prise en compte des conséquences ''négatives pour soi ou autrui.
*''Réactions'' souvent ''prématurées'', inappropriées et associées à des résultats indésirables ou délétères
*''Difficulté'' à ''inhiber'' une action/ un comportement
*''Difficulté'' à ''attendre'' pour avoir une récompense
''Conséquences''
*''75% des patients ''présentent des ''comportements auto-dommageables''
*''10 % décèdent d’un suicide'' ou des conséquences d’un comportement auto-dommageable (risque diminue avec le temps)
*Conséquences à long terme: plus grand risque de ''maladies'' ''sexuellement'' ''transmissibles'', plus d’exposition à des'' facteurs environnementaux négatifs'' (viols, drogues etc....)
__''Les difficultés interpersonnelles ''__
*''Efforts'' ''effrénés'' pour ''éviter'' les ''abandons'' réels ou imaginaires
*Mode de ''relations'' interpersonnelles ''instables'' et ''intenses'' caractérisées par l’alternance entre les positions extrêmes d’idéalisation excessive et de dévalorisation.
//Impression que la vie ne vaut pas la peine d’être vécue si ne se sent pas connectées à une personne dont la personne imagine qu’il/elle se soucie vraiment d’eux. Mais le “prendre soin d’eux” = niveaux inatteignables de disponibilité et de validation
=> ''Idéalisation'' ''initiale'' peut rapidement se changer en une ''dévalorisation'', quand la personne idéalisée ne répond pas aux attentes ou quand l’individu ressent du rejet
''Relations'' ''amoureuses'' et affectivement intenses caractérisées par un ''manque de confiance en l’autre ''ou un besoin de réassurance constant lié à cette peur de l’abandon//
(Ceci interfère également avec la relation thérapeutique)
''Etiologie''
*''Manque'' ''d’empathie'', la difficulté à reconnaître les émotions et les besoins d’autrui ou un déficit de mentalisation
*''Hypersensibilité'' aux ''stimuli'' environnementaux avec parfois une ''mauvaise'' ''interprétation'' des signaux donnés par l’autre (se sentir facilement agressé et insulté), biais sélectif pour les signaux négatifs émanant de l’autre
*Dérégulation émotionnelle menant à des ''crises'' ''émotionnelles'' intenses et difficilement compréhensibles par autrui
*''Impulsivité'' et les comportements dysfonctionnels qu’elle induit au sein des relations
=> ''Déficit'' dans la ''cognition'' ''sociale'' (Seuls 20% des personnes souffrant d’un trouble de la personnalité borderline ont atteint un niveau de fonctionnement social dit « normal » et seuls 30% ont maintenu un travail à plein temps au bout de 10 ans de suivi. Moins de chance de mariage et plus de risque de divorce, relations sentimentales souvent avec hommes anti-sociaux).
Mais amélioration des sx bipolaires avec le temps -> évitement des relations intimes conflictuelles (mais plus le trouble est sévère moins bon sera le niveau de fonctionnement au long court)
__''Le trouble identitaire et les symptômes dissociatifs''__
*''Perturbation'' de ''l’identité'': instabilité marquée et persistante de l’image ou de la notion de soi
*''Apparition'' ''transitoire'', dans des situations de stress, d’une ''pensée'' ''persécutoire'' ou de ''symptômes'' ''dissociatifs'' ''sévères''
''Définition de L’identité''
*''Caractéristiques'' qu’un individu ''identifie'' ''comme'' ''siennes'' et auxquelles il accorde une valeur pour s’affirmer et se reconnaître. (contient aussi l'engagement et la responsabilité envers les autres)
*Une identité suffisamment stable permet une ''perception'' ''continue'' de soi dans le temps, une ''représentation'' ''stable'' de soi au fil de diverses situations, un ''idéal'' de soi (« c’est ce que je voudrais être ») et la perception de soi dans la réalité, de ''déterminer'' ''son'' ''rôle'' en général, et d’avoir une vision du monde qui donne du ''sens à la vie''
''Trouble identitaire''
*''Perturbation'' du ''développement'' normal de l’identité (très lié avec l’expérience de trauma dans l’enfance): à l’extrême, les patients souffrant d’un trouble bipolaire ''se définissent au travers du seul regard des autres ''(habitudes, désirs, valeurs, attitudes).
*-> Incapacité à intégrer les représentations positives et négatives de soi et des autres avec changement rapide du rôle que l’on s’attribue (ex: de victime à abuseur, de dominant à dominé).
**Sens subjectif d’incohérence
**Difficulté à se trouver un rôle dans la vie ou faire des choix occupationnels (changent souvent de but ou d’amis dans la vie)
**Une tendance à confondre ses désirs, sentiments et attributs avec ceux d’autrui dans les relations intimes
**Craindre de perdre son identité lorsqu’une relation s’arrête
''Symptômes dissociatifs sévères''
*Déréalisation et dépersonnalisation (séquelles de maltraitance émotionnelles dans l'enfance -> perturbation de l'axe du stress)
''Symptômes psychotiques''
*''20–50% ''des patients borderline font l’expérience de ''symptômes'' ''psychotiques'' (hallucinations et idées de persécution), qui peuvent être similaires à celles observées chez les patients psychotiques
*En lien ++ avec les ''maltraitances'' dans l’enfance (plus la maltraitance est sévère plus le risque de symptômes psychotiques sera important)
*//Apparaissent lors de crises et mettent quelques jours-semaine à diminuer (surtout délire, hallucinations partent plus vite.)//
!!DD
*Le trouble ''[[bipolaire|bipolaire-schema.jpg]]''
*''Trouble'' ''dépressif''
*Autres ''trouble'' de la ''personnalité''
*''Psychoses'' (schizophrénie ou trouble schizo-affectif)
!!Evolution
*Taux de rémission ''45% à 2ans et 85% à 10ans'', mais seul 25% des patients ont un emploi à plein temps après 20ans de suivi et 40% reçoivent une rente d'invalidité.
!!Comorbidités
* ''>80%'' ont un ''autre'' ''trouble'' ''associé'': (trouble de ''l’humeur'', trouble ''anxieux'', ''dépendance'', abus de ''substance'')
* ''>70%'' ont un ''autre'' ''trouble'' de la ''personnalité''
*''40%'' ont une PTSD
!!Traitement
!!!Médicamenteux
*Les traitement médicamenteux devraient ''généralement être évités, prescrits que durant les crises'' et pas plus d’une semaine
*Il n’y a aucune évidence de l'efficace des médicaments dans le trouble borderline -> si les patients n’ont pas de comorbidité, un effort devrait être fait pour diminuer leur traitement.
*SSRIs et Stabilisateurs de l’humeur : minime effet sur la labilité émotionnelle et impulsivité- agressivité
*Faibles doses d’antipsychotiques: minimes effets sur la dissociation, symptômes psychotiques, impulsivité et agressivité
!!!Psychothérapeutique et psychosocial
Les ''psychothérapies spécialisées'' ont prouvé leur supériorité par rapport au traitement standard avec:
*Diminution de 80 à 90% des hospitalisations
*Diminution des visites aux urgences
*Diminution de l’utilisation de médicaments
*Diminution de 50% des comportements auto-dommageables et de la suicidalité avec un effet durable dans le temps (sur 2 à 5 ans environ).
__''Elements communs ''__
*''Un seul thérapeute ''pour le patient qui discute du diagnostic, évalue les progrès et s’assure de la communication avec d’autres intervenants et membres de la famille => relation de confiance importante ++ (main de fer dans un gant de velours) ➔ empathie +++ (et en même temps responsabilisant)
*Thérapie structurée (manualisée) avec un but précis et un rôle bien défini du thérapeute
*''Thérapeute'' ''validant'' et ''comprenant'' la ''détresse'' du patient, actif dans les séances (interrompt les silences et les digressions) et qui se focalise sur «l’ici et maintenant», à l'aise avec les comportements suicidaires et auto-dommageables (plan de traitement) et qui reconnaît qu’il peut avoir besoin d’aide ou de supervision
*Un patient motivé au changement
=> ''Thérapie comportementale dialectique ''
*Thérapie ''individuelle'' et ''groupale'' (2-3x/sem) sur ''1 an ''(traitements avec l’évidence ''la plus solide'')
*''Concept'' : déficit dans l’acquisition de compétences sociales et comportementales au cours du développement en raison de l’interaction entre un milieu dit invalidant et une vulnérabilité biologique -> « coaching » et enseignement: ''apprentissage de compétences'' (pour retrouver un contrôle de leurs sentiments notamment)
*''Interventions'': auto-évaluation, travail à domicile, disponibilité du thérapeute même en dehors des séances -> Apprendre au patient comment réguler ses émotions et comportements via des chaînes comportementales, un travail cognitif, un travail sur la gestion des émotions, et la relaxation (mindfulness)
=> ''Thérapie basée sur la mentalisaiton''
*Thérapie groupale et individuelle 2-3x/semaine sur 18mois
*Déficit de mentalisation comme conséquence des interactions précoces avec le ou les « donneurs de soin » -> développer le processus mentalisation par un focus sur les « ruptures » de celui-ci et l’utilisation de techniques visant à le restaurer, posture de non savoir (travailler sur les pensées, les émotions, de l’autre et de soi (ce qui est propre à soi et à autrui) en développant la curiosité, le doute et le respect de l’opacité des esprits plutôt que la certitude et l’alternance entre idéalisation et dévalorisation)
=> ''Thérapie focalisée sur le transfert''
*Thérapie ''individuelle'' 2x/semaine sur'' 1an''
*Orientation psychodynamique: focus sur les relations d’objet marquées par le clivage et la projection comme manifestation d’une expérience de soi non intégrée -> monitoring des dyades en œuvre dans la relation patient-thérapeute et de leurs renversements et les porter à la conscience du patient dans « l’ici et maintenant » (relier les images négatives et positives entre elles du patient à partir des images positives et négatives du thérapeute afin d’en permettre l’intégration)
=> ''General Psychiatric Managment''
*Thérapie groupale et individuelle (plus intégration famille), 1- 2x/sem, Pas de durée spécifique
*Thérapie d’orientation psychodynamique -> attitude thérapeutique psychoéducative et validante (focus sur les relations interpersonnelles à l’extérieur de la thérapie et non sur la psychologie du patient. Accent mis sur la psychoéducation des patients et de la famille (diagnostic, traitement))
!!Notes
*''Trouble de l'axe II'' : trouble de la personnalité (durable, commence dès la fin de l'adolescence-début de l'âge adulte) (stable dans le temps)
*''Trouble de l'axe I'' : Les troubles majeurs cliniques (trouble de l'humeur, schizophrénie, troubles anxieux, dissociatifs, du comportement alimentaire)
*''Dysthymie'' : "dépression chronique" mais moins forte (spectre dépressif)
*''10%'' des patients borderline meurent par ''suicide'' (dépression, impulsivité, etc).
*''FR'' ''suicide'' : OH, homme, ATCD de tentamen, isolement social et âge avancé.
*''Trouble de la personnalité ''
**''Cluster'''' A '': bizarre (paranoïde, schizotypique, sychizoïde)
**''Cluster'' ''B'' : thératraux, émotions, labilité (borderline, histronique, narcissique, antisocial)
**''Clsuter C'' : peur (trouble évitant, TOC, dépendant)
*''Emotions''
**''Emotion'': réaction à un stimulus affectif, environnemental, physiologique ou psychologique, perçue comme pertinente en regard des besoins de la personne
**''Emotions'' de ''base'': nombre limité d’émotions, avec un pattern spécifique de réponses psychologiques, physiologiques et motrices, correspondant à une expérience subjective unique: ''joie, peur, colère, dégoût, surprise, tristesse''
**''Emotions'' ''secondaires'': constituées d’une ''combinaison des émotions de base,'' p.ex. la nostalgie (tristesse+peur), la honte (peur+colère), la culpabilité (colère+tristesse) etc….
''__Anamnèse__''
*''Idées'' ''suicidaires'', ''dysthymie'', ''anxiété'', ''comorbidités'', abus de ''substance''.
*''Enfance'' (maltraitance, abus), historique de ''relation amoureuses'' instable.
*''Caregiver'' : dénigrement et invalidation, AF+
*Comorbidités (trouble associé, PTSD -> flashback)
*Héréditaire : schizophrénie (10% si un parent) et trouble bipolaire
{{borreliose_lyme_endemie_carte.jpg}}
!! Définition
*La ''Borreliose'' ou Maladie de Lyme est causée par //Borrelia burgdorferi//, une bactérie ''transmise par les tiques'' (//Ixodidae scapularis//), bien que la majorité des morsures ne cause pas d'infection.
*Elle est ''endémique'' dans certaines régions de suisse, surtout ''près des lacs''.
*A ne pas confondre avec la ''MEVE'' (''Meningo-Encephalite Verno-Estivale'', aussi causée par les tiques, dont on peut se protéger par ''vaccination'' dans les zones endémiques
!! Clinique
La maladée évolue en ''trois phases:''
# ''__De 3 à 30j après la piqûre__'': un ''erythème migrans'' en forme de ''cible'' (assez grand, souvent sur la cuisse ou région axillaire, non douloureux) avec fatigue'''', ''grippe'' et ''arthralgies''.
#__''Après plusieurs semaines''__: on assiste à la ''dissémination'' avec:
#* ''Méningite / Encéphalite''
#* ''atteinte des nerfs crâniens'' (dont [[Paralysie Faciale|Paralysie Faciale]])
#* ''neuropathies'' et ''radiculites''
#* ''arthrites''
#* ''troubles de la conduction cardiaque'' (cardites)
#__''Après plusieurs années''__:
#* ''Neuroborreliose tardive''
#*''Arthrite chronique ''
#* [[Acrodermatite chronique atrophiante |lyme_borreliose_acrodermatite_chronique_athrophiante.jpg]]
{{borreliose_erytheme_migrans.jpg}}
!! Investigation
*La ''Clinique'' et les ''Sérologies'' permettront de poser le diagnostic.
*A noter que les patients ne se souviennent pas forcément avoir été piqués par la tique
*Les [[IgM|Immunoglobulines_schema.jpg]] indiquent une ''infection récente'' car ils ''disparaissent'' après quelques mois, tandis que les [[IgG|Immunoglobulines_schema.jpg]] ''persistent'' donc n'aident pas à distinguer récent vs chronique.
!! Traitement
*Les ''Antibiotiques PO'' sont indiqués, à durée plus ou moins variées en fonction de la gravité de la maladie:
**''Doxycycline''
**''Amoxycycline''
*Traiter 10j pour la première phase et 30j si signes de disséminations
*Traiter 30j IV si signes plus graves (cardite, neuroborreliose)
undefine
undefine
{{botulisme.jpg}}
!!Définition
*le ''Botulisme'' est une maladie ''paralytique'' rare mais grave, d'origine ''alimentaire'' principalement. Elle est due à la ''toxine botulique'', une neurotoxine produite par la bactérie //clostridium botulinum//.
*On en trouve particulièrement dans des aliments mal rangés (mis en ''bocaux ''p.ex ), ou encore les ''saucissons'' en espagne ou au portugal.
*Les toxines peuvent être désactivées en cuisant les aliments à 100°C pendant 10min
*Une autre source peut être les ''plaies contaminées''.
*la Clinique est variable, avec des symptomes légers, modérés voir mortels
!!Clinique
*''Crampes abdominales''
*''Diarrhées'', ''vomissements''
*''Paralysie flaccide symétrique descendante'', commençant par:
*#Bouche sèche
*#Diplopie
*#Dysarthrie
*#Paralysie des membres
!!Investigations
*D'abord ''clinique''
*Diagnostic définitif par ''Identification de la toxine'' dans le serum, les selles ou le liquide gastrique
!!Traitement
*''Surveillance respiratoire rapprochée'' et mettre sous ''Ventilation mécanique'' si besoin
*''Lavage Gastrique dans les premières heures'' peut aider
*''Antitoxine '' équine
*Si blessure contaminée, débrider et donner de la pénicilline
undefine
![ext[Bouche.pdf|./pdf/Bouche.pdf]] <!-- Texte caché pour la recherche La cavité buccale Nicolas Dulguerov Chef de clinique Orl et chirurgie cervico-faciale Forum ORL 2015 • Anatomie et physiologie • Pathologies: – Congénitales – Infectieuses et inflammatoires – Lésions pré-cancéreuses – Tumeur bénigne et Cancer • Chirurgie de la cavité buccale • Anatomie et physiologie – Préparation du bol alimentaire: • homogénéiser la nourriture • acquisition de propriété physico- chimiques qui rendent la nourriture "avalable" – Initiation de la déglutition – phase orale – Goût – Articulation – Respiration • Anatomie et physiologie: – Ant: lèvre – Sup: palais – Inf: plancher – Post: • Isthme du gosier • V lingual • M palato-glosse • Jonction palais mou et dur • Anatomie et physiologie: -->
{{BPCO_clinique.jpg}}
!!Définition
*La ''BPCO'' ou //BronchoPneumopathie Chronique Obstructive //, ou //COPD// en anglais est une ''pneumopathie chronique'' avec des composantes plus ou moins marquées de ''Bronchite chronique'' et d'''Emphysème''.
*La BPCO est surtout retrouvée chez les patients ''tabagiques'' et les patients exposés à l'inhalation de ''polluants''.
*Elle est caractérisée par un ''déclin progressive irréversible des fonctions pulmonaires'', qu'on peut quantifier via la ''classification GOLD'' qui utilise la spiromètrie avec les valeurs du ''//VEMS/CVF //''(ou //Tiffenau//) ainsi que la ''//VEMS post-bronchodilatateurs//''.
|!GOLD|!BPCO|!VEMS/CVF|!VEMS post-BD|
|''GOLD A (I)''|BPCO Légère| <70% | ''>80%'' |
|''GOLD B (II)''|BPCO Modérée| <70% | ''50-80%'' |
|''GOLD C (III)''|BPCO Sévère| <70% | ''30-50%'' |
|''GOLD D (IV)''|BPCO Très Sévère| <70% | ''<30%'' |
!!Clinique
''Bronchite Chronique'': //(blue bloaters)//
{{BPCO_bronchite.jpg}}
*''Toux'' et ''Expectorations'' presque tous les jours durant >3mois consécutifs sur au moins 2 ans consécutifs
*''obesité'' et ''cyanose'' avec ''polyglobulie'' (cephalées, vertiges, troubles visuels, tinnitus, HTA, thromboses)
''Emphysème'': //(pink puffers)//
{{BPCO_emphyseme.jpg}}
*//Elargissement irréversible// des alvéoles avec //destruction des parois//, sans fibrose
*''Dyspnée'' au premier plan
*''cachexie''
*Déformation du [[thorax en tonneau|BPCO_thorax_tonneau.jpg]], qui est ''Hypersonore'' à la percussion et avec une ''diminution du murmure vésiculaire'' à l'auscultation
''Exacerbation d'une BPCO''
*L'exacerbation d'une BPCO est définie par l'augmentation de la ''Dyspnée'' ou des ''Expectorations'' ou de la ''Toux'' habituelle du patient, nécessitant un ''changement de traitement''.
*On distingue:
**''Exacerbation légère'': gérée avec l'adaptation du traitement
**''Exacerbation modérée'': nécessite ATB et/ou Corticoiïdes
**''Exacerbation sévère'': nécessite une hospitalisation
*Les ''causes d'exacerbation'' comprennent:
**''Bronchite aigue infectieuse'' ++
**Pas de cause retrouvée ++
**Pollution atmosphérique
**Non-prise du TTT. de Fond
**Prise de médicaments (psychotropes, diurétiques)
**Insuffisance Cardiaque Gauche
**EP
**Pneumonies
*Les 3 ''critères d'Anthonisen'' permettent de suspecter la''// surinfection bactérienne//'', afin de donner des ''Antibiotiques'' au patient:
*#''Augmentation du volume des expectorations''
*#''Changement de qualité des expectorations'' (purulence)
*#''Aggravation de la dyspnée''
*Les bactéries les plus impliquées sont les //s.pneumoniae//, les //h.influenzae// et les //m.catarrhalis//
!!Investigations
*''RX thorax'' qui montrera les multiples [[signes de la BPCO|BPCO_rx.jpg]]. démontrant globalement l'''//hyperinflation//'':
**Elargissement du diamètre A-P
**Hyperclarté pulmonaire
**Aplatissement des coupoles diaphragmatiques
**Proéminence des artères pulmonaires
*''Labo'' avec:
**FSC (infection, anémie)
**Ionogramme (hyponatriémie par SIADH, hypokaliémie du aux B2ago, hyperglycémie du au cortico)
**Albuminémie (evaluation nutritionelle a compenser par supplément nutritionnel)
**Troponine, BNP, CRP, PCT (recherche etiologique et gravité)
*''Gazométrie'' permet d'estimer la gravité de l'atteinte
*''Culture des expectorations'' surtout dans les cas d'urgence.
!!Hospitalisation
*''Hospitalisation'': peut se décider via la ''gazo'' avec:
**une hypoxémie inférieure à 6.6 kpa
** une hypercapnie supérieure à 5.9 kpa
** un pH inférieur à 7,35.
*''Admission aux SI'': Si tableau de:
**Insuffisance réspiratoire sévère aigue (PaO2 <5.3 kpa, PCO2 >8kpa)
**Nécessiter de Ventilation Invasive
*''Admission en Pneumologie'':
**Pas de critère de gravité
**Traitement médical suffisant
*''Soins Intermédiaires'':
**Entre deux
!!Traitement
''Selon GOLD''
|!GOLD I|!GOLD II|!GOLD III|!GOLD IV|
|''Bronchodilatateurs courts'' (Beta2ag.+ Anticholinergiques)|''Bronchodilatateurs longs'' (Beta2ag.+ Anticholinergiques) //Dospir//|''Bronchodilatateurs longs'' (Beta2ag.+ Anticholinergiques) |''Bronchodilatateurs longs'' (Beta2ag.+ Anticholinergiques)|
||''Réhabilitation à l’effort''|''Réhabilitation à l’effort''|''Réhabilitation à l’effort''|
|~||''Corticoïdes inhalés ''(si exacerbations)|''Corticoïdes inhalés'' (si exacerbations)|
|~|~||''Oxygène'''' à domicile''|
''End-stage disease''
*Aux stade C ou D, on peut envisager une ''réduction de volume'' par chirurgie ou voie endoscopique (coils, colle/vapeur, valves) pour faire le pont avant une transplantation
*quand il ne reste vraiment plus de parenchyme, la ''transplantation'' pulmonaire est indiquée
''Aux Urgences''
*''Oxygenotherapie titrée''
** ''cible'' ''88-92%'' pour éviter la détresse resp. hypercapnique
**Avec ''controle gazo régulier'' pour voir l'évolution
**Oxygénothérapie (lunette, masque), voir [[Optiflow|optiflow.jpg]], ''VNI'' ou ''Intubation''
*''Bronchodilatateurs'' (B2ago.rapide: salbutamol), ''Anticholinergiques inhalés'' (Ipatropium) au masque
*''Corticoïdes'' PO ou IV suivant la gravité (attention pas si diabète, infections ou IC !): Prednisone 0,5 mg/kg/j.
*''ATB'' visant les germes les plus fréquents (Amoxyclav 3g/j)
*''Prophylaxie anti-Thrombotique'': énoxaparine 0,4 mL
''Prévention''
*L'''arrêt du tabac'' est la seule façon de ralentir la maladie
*Faire un ''Vaccin anti-streptocoques pneumoniae'' et ''anti-Grippe''
//Mollécules//
*''Bronchodilatateurs'' (Beta2ag.+ Anticholinergiques): //Dospir//
*''Corticoïdes inhalés'': //Symbicort//
*le ''Spiriva'' est Tiotropium (antichoc) de longue durée d'action
*le ''Ventolin'' est salbutamol (b2) de courte durée
*le ''Servent'' est B2 de longue durée
undefine
undefine
undefine
undefine
undefine
<<tabs "[[Bradycardie Sinusale (BS)]][[Bloc sinoauriculaire (BSA)]][[Bloc atrioventriculaire (BAV)]]" "Bradycardie Sinusale (BS)" "" "tc-vertical">>
!! Bradycardie Sinusale (BS)
{{ECG_BS.jpg}}
*Une ''Bradycardie Sinusale '' correspond à un ''Rythme Sinusal <60/min''.
*Les ''Causes'' de BS sont:
**chez les ''Athlèthes'' (physiologique)
**réaction ''Vaso-Vagale''
**''Beta-Bloqueurs''
*''Hypothermie''
*''Hypothyroïdie''
{{ECG_BS_schema.jpg}}
{{bronchiectasies_schema.jpg}}
!!Définition
*les ''bronchiectasies'' sont des ''dilatations irréversibles des bronches'' qui sont provoquées par une ''destruction inflammatoire des parois'' des bronches. Les bronches dilatées font une importante ''stase de mucus infecté'' qui résulte en une ''obstruction'' des bronches.
*La bactérie la plus fréquente dans ce mucus est le //''p.aeruginosa''//, mais on trouve aussi le //s.aureus// et le //h.influenzae//.
!!Causes
//Obstructions//
*''Tumeur''
*''corps étranger''
//Infections//
*''Pneumonie''
*''TBC''
*''Coqueluche'' et ''Rubéole''
*''Aspergillose'' et ''Mycobactéries Atypiques''
//Autres//
*''Mucoviscidose''
*''Syndrome de Kartagener''
*''Fibrose pulmonaire'' par traction
!!Clinique
*''Toux productive'' avec sputum ''purulent'' en grosses quantités
*''Hémoptysies'' qui peuvent être massives
*''Pneumonies à répétition''
*''Détresse respiratoire'' au stade avancé
*''Auscultation'': on trouve des [[râles crépitants grossiers |bronchiectasie_rales_crepitants_grossiers.mp3]] et des [[sibilances|asthmes_sibilances.mp3]].
!!Imagerie
''Rx thorax''
*Ce sont surtout l'''épaississement des parois'' des bronches que l'on voit, sous la forme de:
**Lésions ''parallèles'' en ''Rails de tram'' quand les bronches sont vues en longitudinales.
**Lésions ''kystiques'' quand les bronches sont vues en axiales.
{{bronchiectasies_rx_rails_tram.jpg}}
''CT-scan''
*Le CT est l'''examen de choix'' pour étudier la bronchiectasie
*Le signe typique est l'aspect des bronches en ''bague à sceau'' (ou //bague à chaton//, //signet ring//) correspondant aussi à l'épaississement des parois des bronches, avec au "sommet de la bague" l'//artère pulmonaire// accompagnant la bronche.
*On peut aussi trouver l'aspect parallèle en ''rails de trams'' comme dans la Rx.
{{bronchiectasies_ct_bague.jpg}}
!!Traitement
*Suivi des ''fonctions respiratoires''
*''Physiothérapie'' respiratoire de drainage bronchique tous les jours
*''Bronchodilatateurs'' et ''Mucolytiques'' au besoin
*//ATB ciblées// lors de surinfections et //Vaccins// //anti-grippe //et// anti-pneumoccoque // en prophylaxie
undefine
undefine
undefine
![ext[bronchiolite.pdf|./pdf/bronchiolite.pdf]] <!-- Texte caché pour la recherche Bronchiolitis Bronchiolitis is the commonest serious respiratory infection of infancy: 2–3% of all infants are admitted to hospital with the disease each year during annual winter epidemics; 90% are aged 1–9 months (bronchi olitis is rare after 1 year of age). Respiratory syncytial virus (RSV) is the pathogen in 80% of cases. The remain der are accounted for by human metapneumovirus, parainfluenza virus, rhinovirus, adenovirus, influenza virus, and Mycoplasma pneumoniae. Dual infection with RSV and human metapneumovirus is associated with severe bronchiolitis. Clinical features Coryzal symptoms precede a dry cough and increasing breathlessness. Feeding difficulty associated with increasing dyspnoea is often the reason for admission to hospital. Recurrent apnoea is a serious complication, especially in young infants. Infants born prematurely who develop bronchopulmonary dysplasia or with other underlying lung disease, such as cystic fibrosis or have congenital heart disease, are most at risk from severe bronchiolitis. The characteristic findings on examination (Fig. 16.5) are: • • • • • • • • Sharp, dry cough Tachypnoea Subcostal and intercostal recession Hyperinflation of the chest: – – Prominent sternum Liver displaced downwards Fine end inspiratory crackles - High pitched wheezes – expiratory > inspiratory - Tachycardia 282 Cyanosis or pallor. Respiratory disorders Summary The child with stridor Clinical features to assess Toxic, ill looking Exhaustion Fever Hoarse, barking cough Cyanosis O 2 saturation Level of consciousness Drooling saliva Stridor Chest recession: • Mild – at rest only • Severe – marked sternal recession even at rest Clinical conditions Croup • Mostly viral • 6 months to 6 years of age • Harsh, loud stridor • Coryza and mild fever, hoarse voice Epiglottitis: • Caused by H. influenzae type b, rare since Hib immunisation • Mostly aged 1–6 years • Acute, life-threatening illness • High fever, ill, toxic-looking • Painful throat, unable to swallow saliva, which drools down the chin Bacterial tracheitis: • High fever, toxic • Loud, harsh stridor Inhaled foreign body • Choking on peanut or toy in mouth • Sudden onset of cough or respiratory distress Laryngomalacia or congenital airway abnormality: • Recurrent or continuous stridor since birth Other rare causes: • See Box 16.1 Bronchiolitis Figure 16.5 Clinical features of severe bronchiolitis in an infant. Apnoea in infants <4 months O 2 therapy via nose Sharp, dry cough Cyanosis or pallor Hyperinflation of the chest: Intravenous infusion Liver displaced downwards • sternum prominent • liver displaced downwards Subcostal and intercostal recession Auscultation: • fine end-inspiratory crackles • prolonged expiration 283 1 2 3 4 Respiratory disorders infants. Its use is limited by cost and the need for multiple intramuscular injections. 16 Pneumonia - The incidence of pneumonia peaks in infancy and old age, but is relatively high in childhood. Pneumonia is a major cause of childhood mortality in resource poor countries. It is caused by a variety of viruses and bacteria, although in over 50% of cases no causa tive pathogen is identified. Viruses are the most common cause in younger children, while bacteria are commoner in older children. In clinical practice it is difficult to distinguish between viral and bacterial pneumonia. - Figure 16.6 In acute bronchiolitis, the chest X ray shows hyperinflation of the lungs with flattening of the diaphragm, horizontal ribs and increased hilar bronchial markings. However, chest X ray is rarely helpful in bronchiolitis. The pathogens causing pneumonia vary according to the child’s age: - • • • • Newborn – organisms from the mother’s genital tract, particularly group B streptococcus, but also Gram negative enterococci - Investigations Respiratory viruses are now usually identified by PCR analysis of nasopharyngeal secretions. A chest X ray is unnecessary in straightforward cases, but if performed, typically shows hyperinflation of the lungs due to small airways obstruction, air trapping (Fig. 16.6) and often focal atelectasis. Pulse oximetry is used to measure and monitor arterial oxygen saturation continuously. Blood gas analysis, usually a capillary sample, is only per formed in severe disease to identify hypercarbia when additional ventilatory support is considered. - Infants and young children – respiratory viruses, particularly RSV, are most common, but bacterial infections include Streptococcus pneumoniae or Haemophilus influenzae. Bordetella pertussis and Chlamydia trachomatis can also cause pneumonia at this age. An infrequent but serious cause is Staphylococcus aureus Children over 5 years – Mycoplasma pneumoniae, Streptococcus pneumoniae and Chlamydia pneumoniae are the main causes. At all ages Mycobacterium tuberculosis should be considered. Management This is supportive. Humidified oxygen is delivered via nasal cannulae; the concentration required is deter mined by pulse oximetry. The infant is monitored for apnoea. Mist, antibiotics, steroids and nebulised bronchodilators, such as salbutamol or ipratropium, have not been shown to reduce the severity or dura tion of the illness. Fluids may need to be given by nasogastric tube or intravenously. Assisted ventilation in the form of nasal or facemask CPAP or full ventila tion is required in a small percentage of infants admit ted to hospital. RSV is highly infectious, and infection control measures, particularly good hand hygiene, are needed to prevent cross infection to other infants in hospital. - Prognosis Most infants recover from the acute infection within 2 weeks. However, as many as half will have recurrent episodes of cough and wheeze (see below). Rarely, usually following adenovirus infection, the illness may result in permanent damage to the airways (bronchioli- tis obliterans). Prevention A monoclonal antibody to RSV (palivizumab, given monthly by intramuscular injection) reduces the number of hospital admissions in high risk preterm -->
{{bronchite_aigue.jpg}}
!!Généralités
*La ''Bronchite Aigue'' est une inflammation des bronches d'origine principalement ''Virale'' et plus rarement bactérienne
*La ''Toux'' et les ''expectorations'' sont les symptômes principaux.
*La ''Durée ''est d'environ ''1-2 semaines'' bien que la toux puisse rester jusqu'à 4 semaines.
*le patient peut encore présenter de l'inconfort, de la fièvre ou de la dyspnée
*ne ''pas faire d'investigations''. Eventuellement une Rx thorax si suspicion de [[Pneumonie|Pneumonie Acquise en Communauté (PAC)]] .
*ne ''pas donner d'ATB''
*on peut traiter ''symptomatiquement'' avec de la ''codéine'', éventuellement des ''bronchodilatateurs''.
undefine
undefine
{{brucellose.jpg}}
!!Définition
*la ''brucellose'' (ou //Fièvre de Malte //, ou //Fièvre Méditéranéeen//) est une infection bactérienne par une bactérie du genre //Brucella//, intracellulaire.
*On peut les contracter en buvant du ''lait non pasteurisé'' (ou autres produits laitiers) ou en mangeant de la viande mal cuite, ou encore en entrant en contact avec l'animal directement
*les gens à risque sont par exemple les ''vétérinaires'' , le ''personnel d'abattoire'' ou encore les ''laborantins''.
*Il existe différentes bactéries, en fonction des animaux touchés.
!!Clinique
*Symptomes généraux non-spécifiques
*HSM
*ADP
*Diarrhées ou Constipation
!!Investigation
*Sérologie
*Isolement du germe dans le sang, la moelle osseuse ou le tissus affecté
*On peut aussi faire de la PCR
*ATTENTION prévenir le labo, risque de CONTAGION élevé !
!!Traitement
*ATB
undefine
undefine
!!''Généralités''
!!!Epidémiologie
*60% ''accidents'' ''domestiques''
*25% ''accidents'' du ''travail''
*7% suicides
*8% accidents de circulation, divers
!!!Fonctions de la peau
{{fonciton-peau.jpg}}
!!Types de Brûlures
*''Thermique'' 90% : Contact (Fer, braise / Eau, huile) Flamme (Essence, alcool à brûler), Rayonnement
*''Electrique'' (Arc électrique : 2500° ➜ brûlure thermique / Éclairs)
*''Chimique'' (caustique, acide)
*''Radiations'' (Accidents nucléaires, RT médicale -> on voit les tatouages de marque du champs, on sait donc qu'il y a eu RT)
//Electrique//
*''Passage du courant'' dans ''l'organisme'' : courant = chaleur selon la résistance du tissu -> chemine le long des axe vasculo-nerveux et chauffe l’os (résistance ++) -> ''nécrose'' ''musculaire''
*''Clinique'' : Petites ''brûlures'' ''ponctiformes'', dommage tissulaire profond extensif.
**Lésions profondes : point d'entrée et de sortie (Toujours chercher l'entrée et la sortie. Le courant chemine par les nerfs et les vaisseaux car faible résistance et la peau à une résistance plus importante (l'humidité diminue la résistance))
*''Effet'' direct sur les organes :
**''Coeur'' = ''FA''
**''Tétanie'' ''musculaire'', ''syndrome'' des ''loges''
**''Cataracte''
**''Fractures'' ''osseuses''
**''Epilepsie''
**''IRA'' sur relâchement de myoglobine
**''Thrombose'' ''vasculaire'' ➔ nécrose tissulaire
*''Evolution'' : progressive, débridement itératif
*''Complications'' : ''Thromboses'' ''vasculaires'' extensives, ''anévrismes'', ''rupture'' des ''troncs'' ''artériels'' et ''surinfections'' anaérobes.
*''Traitement'' : ''Agents'' ''topiques'' (silfadiazine d’argent), ''Débridement'', ± ''amputaiton'', ''Monitorage'' ''cardiaque'' et ''clinique''.
//Chimique//
*Mécanisme : ''coagulation'' des ''protéines'' du tissu -> ''nécrose''.
*''Acide'' : ''Étendue'' et ''profondeur'' ''limitée'', Nécrose de coagulaiton (p.ex ac. fluorhydrique : traitement par chélation - gluconate de Ca)
*''Base'' : ''Profondes'', ''évolutives'', ''Saponification'' puis ''nécrose'' liquéfactive
*''Traitement'' : Enlever vêtements souillées, ''Laver'' 20-30min ''eau'' froide, Solution alcaline (''bicarbonate'')
//Radiations//
*''Cicatrisation plus lente'' que brûlures thermiques
*Même traitement
*''Pas de chirurgie ''
!!Gravité
!!!Surface
*Règle des 9 de [[Wallace|regle-Wallace.jpg]] (en fonction de la surface corporelle = 100%)
!!!Profondeur
*Dépend de la ''T°'' (Chaud ++ : graisse chaude, métal fondu, habits enflammés ; Chaud : eau), ''durée'', ''épaisseur de la peau'' (Résistant : paume des mains et plante des pieds ; Sensible : paupière, dos des mains, enfants)
{{degrés-brulures.jpg}}
__''Brûlures superficielles''__
(Ne laissent pas de cicatrices)
*''1er'' ''degré''
**Brûlure épithéliale
**Erythème "''coup'' ''de'' ''soleil''", douleur ++
**Histo : couche superficielle de l'épiderme
*''2ème'' ''degré'' ''superficiel''
**''Phlyctènes'', peu rosée dessous, ''poils'' ''tiennent'', douleur ++
**Histo : couche profonde épiderme, mais jonction dermo-hypodermique ± épargnée.
__''Brûlures profondes ''__
(Laissent des cicatrices)
*''2ème degré profond '':
**''Lésions suintantes'' ± phylctènes (déchirées, fond blanc rouge), ''poils'' ''tiennent'' ''faiblement'' (peu de follicules pileux), ''peu de douleur'', piqûre : sensible si profond, saigne un peu
**Histo : atteinte de la jonction dermo-hypodermique
**''Facteurs aggravants '': infections, diminution de la perfusion cutanée.
*''3ème degré''
**Zone ''blanche'', ''cartonnée'', ''insensible'', poils partent sans résistance
**Histo : atteinte de tout l'épiderme, du derme, et des annexes cutanées (poils, glandes)
*''Full thickness circonferential burn''
**Collagène coagulé : consistance de cuir, pas d'élasticité. Quelques heures après accident, il y a formation d'un oedème, dans ce milieu rigide, ce qui provoque un syndrome des loges (nécessite une Incision de décharge)
**Traitement : escharotomie, incision.
{{profondeur-brûlures.jpg}}
@@background-color:MistyRose;
!!!''Facteurs aggravants''
*''Âge'' : (enfants et âgés)
*''Lésions'' ''respiratoires'' ''associées''
*''Co-morbidités''
@@
!!!Critères de gravité
{{gravité-brulures.jpg}}
*''Légères'' : traitement ambulatoire
*''Moyennes'' (et parfois graves) : service de chirurgie plastique ± soins intensifs de chirurgie
*''Graves'' et ''gravissimes'' : centre spécialisé (CHUV)
!!Prise en charge immédiate
*Eteindre le feu avec eau ou en enroulant le patient dans une couverture
*''ABC''
*Evaluer la ''détresse'' ''respiratoire'' éventuelle
*''Déshabiller'' et ''laver'' à grande ''eau'' (Pour brûlure chimique, permet d'enlever le produit)
*''Evaluer la surface'' et la ''profondeur'' de la brûlure (-> 10-15% de surface atteinte : hôpital)
*''Refroidir'' pour extraire la chaleur des tissus brûlés (8-25°, permet de diminuer la douleur, oedème, améliorer la micro circulation, limiter aggravation secondaire)
!!En milieu hospitalier
*__''Rappel tétanos''__
*__''Premiers gestes''__
**Evaluer ''état'' ''respiratoire'' (Diagnostiquer une détresse respiratoires due à des brulures oro-pharyngées ou à l'inhalation de gaz toxique)
***Gazo
***Rx thorax
***Examen ORL
***Bronchoscopie
***Intubation préventive si lésion à l'examen
**''Remplissage'' ''vasculaire'' (corriger hypovolémie)
***Bilan sanguin
***2 VVP dans les zones saines
***1 VVC si brûlure grave (non brûlé) (Bilan biologique, débit de perfusion suffisant, PVC)
***Sonde urinaire (Bilan urinaire)
**''Contrôle'' de la ''douleur''
***Dérivés morphiniques
***Intubation pour AG si gravissimes
***Prévention de l’ulcère de stress par IPP
*__± ''SNG''__ (si 30% surface brûlée)
@@background-color:MistyRose;
!!!''Critères d'hospitalisation''
*''Adultes'' :'' >15%''
*''Enfants'', ''âgée'' : ''8-10%''
*Hospitalisation dans un ''centre'' ''de'' ''brûlés''
**Brûlures de ≥2ème degré des mains, pieds, OGE, visage, yeux, oreilles, articulations majeures ou périnée
**2ème degré superficiel ≥20% corps (≥10% si <10 ou >50ans)
**3è degré ≥5%
**Brûlures électriques ou chimiques ou d’inhalation
*Minimum 24-48h
@@
!!Traitement
__''1. Hydratation'' __
//Brûlure = barrière épithéliale inexistante -> perte d’eau, protéines, chaleur (attention au cooling) par augmentation de la perméabilité capillaire (« trou capillaire ») = shift de liquides de l’espace intra- vasculaire vers l’interstice en continu durant le premier jour ➜ risque de choc hypovolémique !//
#''But'' : Trouver un ''équilibre'' entre pertes et apports
##//(Excès d’apport en liquides -> pression hydrostatique augmentée donc plus d’œdème interstitiel, aussi dans les poumons vs Pas assez de perfusion tissulaire (souvent) -> acidose métabolique locale et approfondissement de la brûlure !)//
#''Ringer''-''lactate'', ''cristalloïde'' de 130mEq/L (formule de [[Parkland|Parkland.jpg]] pour calculer la quantité)
#Administration de ''colloïdes'' après 24h (albumine 5%, 0.1mg/kg/%, en 2-3h)
##//Car perte importante de protéines à cause de la perméabilité capillaire (mais selon étude animale : fuite de protéines importante les premières 14 à 16 h, et diminue vite après)//
__''2. Inhalation'' __
Lésions oropharynx : œdème et occlusion, lésions alvéolaires : distress respiratoire et bronchopneumonie
#''Profil'' du ''patient'' qui a ''inhalé'' : Feu/fumée dans un espace fermé, Brûlures aux visage, Poils du nez atteints, Dépôts carbonisés au fond de la gorge, Bronchoscopie : érythème et suie, Carboxyhémoglobine >15%, //CAVE : Pas toujours hypoxémie!!//
#10-20% des patients brûlés hospitalisés
#''Augmente'' ++ les ''besoins liquidiens''
#''Augmente'' la ''mortalité'' ( la majorité des grands brûlés survivra la période de réanimation (72h), pour mourir d’un sepsis pulmonaire)
#''Traitement'' :
##Intubation prophylactique,
##Pas de ventilation agressive, ni de C-PAP, ni d'ATB prophylactique ni stéroïdes (stéroïdes baissent réponse immunitaire, ATB car risque de résistance)
__''3. Traitement des brûlures''__
#''1er degré''
##''Crèmes'' ''hydratantes'', ''AINS''
##''Nettoyage'' au ''NaCl'' 4-6x/j
##''Evolution'' : ''Epidermisation en 4j'', Prurit intense, desquamation
#''2ème degré superficiel''
##''Désinfection'' avec ''chlorhexidine'' ''aqueuse''
##''Laisser'' les ''phlyctènes'' ''3-4j ''(sauf trop grands)
##''Pansement'' ''gras'', ''topique'' ''antibactérien'', ''Flammazine'' ou ''Ialugen'' (pommades cicatrisantes et anti-bactériennes)
##Evolution : ''Epidermisation en 10j'', Troubles passagers de la pigmentation, Pas de cicatrice
#''2ème degré profond''
##//Guérison surtout par les bords de la plaie//
##''Traitement'' ''conservateur'' : si surface de la plaie étroite (mais : cicatrices visibles, contractures) : pansement gras, etc.,
###''Puis'' ''excision'' de la ''cicatrice'' hypertrophique par la suite
##''Traitement'' ''chirurgical'' (Si grande plaie) : ''Débridement'' jusqu’au tissu viable + ''Greffe de peau'' dans les 2-3 premiers jours
#''3ème degré''
##//Guérison seulement par les bords de la plaie//
##''Traitement'' ''conservateur'' possible si largeur <1cm __ET__ sans limitation fonctionnelle
##''Sinon'' toujours ''traitement'' ''chirurgical''
###''Excision'' (décapage chirurgical)
###''Greffe'' (en urgence ou dans les 3-4 premiers jours)
###//Peut atteindre graisse sous-cutanée, fascina, muscle et os -> tout doit être excisé et couvert//
###''Incision'' de ''décharge'' si ''circonférentiel''
###''Pansements'' ''gras'' ''anti''-''abctériens''
###''Débridements'', ''greffes''
###''Greffe'' ''meshée'' pour augmenter la surface (filet) (se fait que avec les greffes de peau mince mais la greffe ne prend pas si exposition de tendons/os sans périoste etc. -> dans ce cas : lambeau)
##''Séquelles'' : ''Cicatrices'', ''Alopécie'', ''Troubles'' ''fonctionnels''
{{traitement-brulures.jpg}}
__''4. Rééducation'' __
#''1-3 ans'' de réhabilitation pour un grand brûlé
#Physio-ergothérapie
#Appareillages
#Centres de rééducation SUVA (sion)
#Cure thermale (Lavey les bains)
#Support psy: modification du schéma corporel
//Les ''ATB'' : ne se donnent pas d'emblée (risque de résistance), mais seulement si infection//
!!Séquelles
*''Prurit'' -> ''corticoïdes'' ''locaux'' ou ''anti''-''histaminiques''
*Troubles de la ''pigmentation'' -> pas de traitement, ''éviter'' le ''soleil'' pendant 1an
*''Cicatrices'' ''hypertrophiques'' -> traitées par ''compression'' ''continue'' (vêtements faits sur mesure),'' Gel de silicone'', ''Douches filiformes''
*Les réactions cutanées peuvent induire des'' troubles fonctionnels'' (paupière, nez, bouche) si brûlure profondes
**Reconstruction du nez : Greffe de peau totale répétées ± lambeaux
**Paupière: mettre greffes épaisses, laisser cicatriser paupière fermée
*''Diminution amplitudes articulaires''
**Traitement ''préventif'' : ''Physiothérapie'', ''Attelle''
**Traitement ''secondaire'' : ''Greffe'' ou ''Lambeau''
!!Effets systémiques des brûlures graves
*''Réponse de l'organisme''
**''Activité'' ''métabolique'' ''augmentée'' et trouble de la régulation thermique (''sensation'' de ''froid'')
**Atteintes ''respiratoires'' : avec risque d'infections secondaires
***Lésions ''directes'' : air chaud, gaz caustique
***Lésions ''indirectes'' : oedème interstitiel
*''Trouble'' de la ''coagulabilité'' (si brûlure massive uniquement -> à cause de l’inflammation)
**Hypocoagulabilité
**Puis hypercoagulabilité dès 2j
{{reponse-organisme-brulures.jpg}}
!!Notes
*''Cicatrices'' ''hypertrophique'' vs ''chéloïde''
**Cicatrice hypertrophique : respecte l'endroit de la cicatrice
**Chéloïde: boules qui grandissent, surtout chez peaux noires
**Toujours greffes de peau mince (sauf paupières parfois) -> greffe vascularisée par diffusion
*''Visage'' ''cicatrise'' ''mieux'' que MI car bien irrigué
*Quand on ''prélève'' les ''greffes'', il faut travailler avec des ''compresses'' ''aminées'' pour éviter le saignement
*''Cicatrice'' ''rouge'' ''travaille''. Cicatrice blanche ne va plus bouger
undefine
undefine
undefine
{{budd-chiari.jpg}}
!!Généralités
*le ''Syndrome de Budd-Chiari'' est un syndrome rare qui correspond à l'''occlusion d'une veine hépatique'' entrainant une ''congestion'' et une ''Ischémie'' hépatique.
*La maladie est ''indolente'' et finit souvent par une ''HTP'' voir une ''Insuffisance Hépatique''
*les ''Causes'' sont:
**''Idiopathique'' très souvent
**''Hypercoagulabilité''
**''Grossesse''
**''Cancers''
**''Polycythemie vraie''
**''Syndrome Myéloprolifératifs''
*la ''Clinique'' ressemble à celle de la cirrhose:
**''Ictère''
**''Hepatomégalie''
**''Douleur QSD''
**''Ascite''
**''HTP''
*Les ''Investigations'' sont:
**''Veinographie hépatique'' et ''CT ''avec mise en évidence de la thrombose ± compression de l'IVC
*le ''Traitement'' passe par:
**Medicaments peu efficaces (anti-coagulants, thrombolytiques, diurétiques)
**''Chirurgie'' avec pose de ''Stent''
{{stent_hepatique.jpg}}
undefine
!!Définition
*Une ''Bursite'' corresponde à une ''inflammation d’une bourse séreuse'', dont la fonction de diminuer les frictions de l’articulation.
*Les ''Causes'' sont des ''traumatismes'' ou ''micro-traumatismes'' répétés. On peut aussi avoir des ''infections'' ou des ''maladies rhumatismales''
*Les ''Facteurs de risques'' sont surtout les ''activités sportives''.
*Les ''Localisation'' les plus fréquents sont:
**''Prépatellaire''
**''Olécranienne''
**''Epaule''
**''Hanche''
{{bursites_localisations.jpg}}
!!Diagnostic
*Le diagnostic est ''surtout clinique'', avec une ''douleur, tuméfaction, érythème'' et ''chaleur'' locale. Diagnostic différentiel avec les tendinites et capsulites.
{{bursite_prepatellaire.jpg}}
{{bursite_olecrane.jpg}}
!!Investigations
*Une ''ponction'' du liquide de la bourse pourra permettre de déterminer l’origine inflammatoire, mécanique ou infectieuse de la bursite.
*L’echographie permet de localiser la collection et aide à ponctionner la bourse.
!!Traitement
*Le traitement implique le ''repos'', surtout l’arrêt du sport, une ''protection locale'', la ''glace'', les ''AINS'' et ''Paracetamol'', voir une ''infiltration corticoïdes''.
*Le recours à la chirurgie reste un traitement exceptionnel.
undefine
undefine
undefine
{{calculs_urinaires.jpg}}
!!Définition
*les ''calculs urinaires'' ou //urolithiases//, peuvent se développer à plusieurs niveaux:
**''Calices''
**''Bassinet''
**''PUJ''
**Croisement avec les ''vx.iliaques''
**''UVJ'' comme le plus fréquent
*les ''Facteurs de risque'' sont:
**''Faible Hydratation'', le plus fréquent
**''ATCD familial''
**''Maladies'' (Crohn, Goutte, HyperParathyroïdie)
**''Médicaments'' (Diurétiques de l'Anse, acetazolamide, ...)
**''Hommes''
**''IU Hautes'' avec un pH alcalin sur bactéries à uréase
*la ''composition des calculs'' comprend:
**''Calcium'' majoritairement, souvent en lien avec une hypercaliciurie
**''//Acide urique//'' (non-radioopaques) sur une hyperuricémie ou encore une goutte,
**''//Struvite//'' Font des calculs ''coraliformes'' et font des infections urinaires à ''proteus mirabilis''.
*l'''obstruction'' aura lieu surtout si le calcul est de ''>1cm'', tandis que les calculs de <0.5cm on tendance à se clearer spontanément
*les ''récurrences'' sont fréquentes
!!Clinique
*''Colique rénale'', quand il y a un spasme de l'uretère sur un calcul coincé. Une ''douleur aigue'' et paroxystique, localisé ''au flanc'', avec irradiation à l'aine avec un patient qui ne ''//tient pas en place//''
*''Nausées / vomissements'' fréquents
*''Hématurie'' dans la majorité des cas
*Clinique d'IU Haute
!!Investigations
*''Stick'': hematurie, signes d'ITU, pH à la recherche d'une alkalémie sur bacétires à uréase
*''Sédiment urinaire'' pour chercher les calculs
*Culture d'urine si suspicion d'infection
*''Urines sur 24h'' pour regarder l'excrétion des minéraux
*''Créatinine'' et ''Urée'' (signes d'IR)
*''RX du bassin'' pour visualiser les calculs d'oxalates ou de struvite, mais pas d'acide urique
*''URO-CT'' low-dose sans contraste, gold standard, trouvera tous les calculs
*On peut aussi faire un ''US'' mais il ne verra pas tous les calculs
!!Traitement
''mesures générales''
*''Analgesie'' (morphine IV, AINS)
*''Hydratation vigoureuse''
*ATB si il y a une IU Haute
*Hospitalisation seulement si douleur ingérable, Infection, Calculs >1cm ou Problèmes Rénaux
//douleur modérée//
* attendre que le calcul passe spontanéent
//douleur sévère, vomissements//
*Lithotripsie par ondes extra-corporelles
*Nephrotomie perctuanée
''Prévention''
*''bien boire'', mesure essentielle
*limiter les protéines animales si calculs d'acide urique ± Allopurinol
*limiter le calcium si calculs calciques ± Thiazides
{{calculs_urinaires_rx.jpg}}
undefine
undefine
!!Definition *The ductus arteriosus remains patent in many preterm infants. Shunting of blood across the ductus, from the left to the right side of the circulation, is most common in infants with RDS. *It may produce no symptoms or it may cause apnoea and bradycardia, increased oxygen requirement and difficulty in weaning the infant from artificial ventilation. * The pulses are ‘bounding’ from an increased pulse pressure, the precordial impulse becomes prominent and a systolic murmur may be audible. With increasing circulatory overload, signs of heart failure may develop. *More accurate assessment of the infant’s circulation can be obtained on echocar diography. * If the infant is symptomatic, pharmacologi cal closure with a prostaglandin synthetase inhibitor, indometacin or ibuprofen, is used. If these measures fail to close a symptomatic duct, surgical ligation will be required.
!!Définition
*Le CLE et CCE sont des ''sténoses spinales'' (ou claudication spinale, claudication neurogène).
*Ils sont caractérisés par une ''évolution insidieuse'' et touchent surtout les gens de >''40ans''.
*Les racines nerveuses sont souvent touchées sur plusieurs niveau, avec une clinique multi-étagée.
*Il existe beaucoup de sténoses spinales ''asymptomatiques'' de découverte fortuite chez les patients âgés.
!!Canal lombaire étroit
{{canal_lombaire_etroit.jpg}}
*La ''Clinique'' comportera des ''douleurs intermittentes lombaires et dans les deux jambes''. Ces douleurs apparissent surtout ''à la marche'' et sont ''aggravées en extension''. Elles sont aussi ''soulagées assis'' et ''penché en avant''.
*Le patient décrit également une ''parésie'' associée.
*On peut tester en mettant le patient en ''hyperlordose'' et voir si cela reproduit le même type de douleurs.
*Les ''investigations'' comprennent surtout un ''IRM lombaire'' qui confirmera la présence et la localisation de la sténose spinale. On peut aussi voir la pathologie [[au CT-Scan|canal_lombaire_etroit_ct.jpg]].
*Le ''Traitement'' est d'abord ''conservateur'' avec des ''AINS'' et de la ''physiothérapie''. Si ça ne suffit pas on fait de la ''chirurgie'' (laminectomie et décompression nerveuse)
!!Canal cervical étroit
{{canal_cervical_etroit.jpg}}
*La ''Clinique'' est peu spécifique, avec des ''malaises'', des ''parésies des membres'' (bras et jambes De séverité variable). Selon la séverité on peut avoir des ''paresthésies diffuses'' sous le niveau atteint, des ''douleurs cervicales''.
*A l'examen clinique on peut noter des ''troubles de la marche'', une ''hyperreflexie'' et un ''Babinski'' pathologique, mais peu de trouvailles spécifiques
*Le ''Diagnostic'' se fera par la clinique combinée à un ''IRM''.
*Le ''Traitement'' est d'abord ''conservateur'' avec des ''AINS'' et de la ''physiothérapie''. Si ça ne suffit pas on fait de la ''chirurgie'' (laminectomie et décompression nerveuse), ce qui arrive fréquement dans le CCE.
undefine
undefine
undefine
{{cancer_colo-rectal_stades.jpg}}
!!Définition
*le ''Cancer Colo-Rectal'' est un des cancers les plus fréquents et les plus mortels. C'est généralement un ''adénocarcinome''
*La diète riche en graisse, pauvre en fibres et riche en viande rouge est un facteur de risque.
*La propagation peut se faire de manière locale, hématogène, lymphatique ou intraluminale
*Les mx à distances sont le plus souvent ''hépatiques''.
*le ''screening'' se fait des ''50ans'' par des ''coloscopies /10ans'', il peut se faire dès 40ans si anamnèse familiale positive.
*Il existe deux voies d'ongogeneses principales, ''FAP'' et ''Lynch (HNPCC)''
''FAP'' //(Familial Adenomatous Polyposis)//
*1ere voie d'oncogénèse du cancer colo-rectal
*90% des cancers ''sporadiques''
*Les patients ont [[100-200 polypes|cancer_colorectal_FAP.jpg]] types ''adénomes'', qui vont évoluer en ''adenocarcinomes''
*Voie ''APC-Bcatenine'', des gènes supresseurs de tumeurs
''LYNCH (HNPCC)'' //(Heredytary Non-Polyposis Colorectal Cancer)//
*Cancer-Colorectal ''Héréditaire''
*voie d'''instabilité des microsatellites'' (réparation d'ADN)
*pas de polypose
*partie plutot ''proximale'' du colon (colon ascendant)
!!Clinique
*''Asymptomatique'' très souvent
*''Hématochezise'' (plus distal) ou ''Méléna'' (plus proximal)
*''Changement dans les selles''
*''Douleur abdominale''
**''Masse palpable''
**''Obstruction intestinale''
**''Perte de poids'', ''Fatigue''
*''Anémie''
!!Investigations
*''Coloscopie'', c'est le gold standard
*''Lavement Baryté'' qui peut montrer le [[apple core sign|apple_core_sign_colorectal.jpg]].
*''Labo''
**''Fsc''
**''Tests hépatiques''
**''CEA''
**''Recherche de sang occulte'' et ''TR'' comme dépistage peu sensible
*''PET-CT'' pour le staging
!!Traitement
*''Chirurgie'' ± chimiothérapie ou radiothérapie
**Récurrences fréquentes, donc suivi régulier après la résection.
{{cancer_gastrique.jpg}}
!!Définition
*le ''Cancer de l'Estomac'' est divisé en deux entités: l' ''Adénocarcinome'' et le ''Carcinome diffus''
''Adénocarcinome''
*C'est de loin le plus ''fréquent'' des deux
*Il touche les personnes de ''>55 ans''
*Il est en lien avec les ''gastrites chroniques'', le ''tabac'', //''H.pylori''// ou encore ''anémie perincieuse''.
*Il a ''[[4 formes|adenicarcinome_gastrique_4_formes.jpg]]'':
**superficiel
**ulcérant
**polypoïde
**diffus
*Il a un '' meilleur pronostic'', surtout la ''forme superficielle''
*A l'histologie on voit des [[métaplasies intestinales|adenocarcinome_gastrique_metaplasie_intestinale_histo.jpg]].
''Carcinome Diffus''
*Il a un aspect macroscopique en [[linite plastique|carcinome_diffus_estomac_linite_plastique_histo.jpg]], durcie et épaissie.
*Il est composé de cellules en[[ bague à sceau |carcinome_diffus_estomac_bague_sceau_histo.jpg]]isolées.
*Il touche les personnes plus jeunes
*il a un ''mauvais pronostic''
!!Clinique
*''Douleur abdominale''
*''Perte de poids''
*''Baisse de l'appétit'' ou satiété plus rapide
*''Nausées'' et ''Vomissements''
!!Diagnostic
*''Endoscopie'' avec de ''multiples biopsies''
*''TOGD'' evenutellement
*''CT-scan'' pour le bilan et les métastases
*Recherche de ''sang occulte'' dans les selles
!!Traitement
*''Excision chirurgical'' avec de grandes marges, allant jusqu'à la gastrectomie
*Chimiothérapie parfois
{{cancer_estomac_chirurgie.jpg}}
{{cancer_oesophage_staging.jpg}}
!!Définition
*Le ''Cancer de l'Oesophage'' est divisé en deux entités: le ''Carcinome Epidermoïde'' et l'''Adénocarcinome''
*Il a un ''mauvais pronostic'', surtout si disséminé
''Carcinome Epidermoïde''
*Plutôt situé dans le ''tiers supérieur'' de l'oesophage
*Lié au ''Tabac'' et a l'''Alcool''
*A l'histologie on trouve notamment des [[globes cornés|carcinome_epidermoide_oesophage_histo.jpg]].
''Adénocarcinome''
*Plutôt situé dans le ''tiers inférieur'' de l'oesophage
*Lié à l'''Oesophage de Barret'', trouvé par exemple dans le [[RGO|Reflux Gastro-Oesophagien]].
!!Clinique
*''Dysphagie''
*''Odynophagie'' (douleur en avalant)
*''Perte de poids''
*''Hématémèse''
*Voix rauque (atteinte du n.laryngé récurrent)
*Symptomes pulmonaires (atteinte locale)
!!Diagnostic
*un ''TOGD''// (transit oeso-gastro-duodénal)//, un examen radiologique avec du Baryte, montrera la suspicion
*une ''OGD ''avec ''biopsie'' confirmera le diagnostic.
*un ''CT'' et ''scintigraphie'' pour le staging complet du cancer
!!Traitement
*''Chirurgie'' pour les stades très peu avancés (0, 1, 2A), avec ''Chimio'' et ''Radio''
*''Palliatif'' pour les stades plus avancés
{{cancer_oesophage_togd.jpg}}
![ext[dermato_carcinomes.pdf|./pdf/dermato_carcinomes.pdf]] <!-- Texte caché pour la recherche Carcinomes - Carcinome = tumeur épithéliale, peu létal - 1 er cancer (>50% >65ans), 90% baso-/spinocellulaire - Kératose actinique : précancérose due aux UV. Fréquence en augmentation (>60% >60ans). Risque de carcinome spino¢. - Maladie de Bowen : 40ans, carcinome spino¢ in situ à croissance lente. Etio : UV, radiations ionisantes, dermatoses chroniques (LSA), immunosuppression, HPV (!). Progression en spino¢ dans 30-50%. - Spinocellulaire : dû aux UV, rayons ionisant, dermatoses chronique (inflammation, ulcère, LSA, cicatrices tendues), expo chronique chaleur-suie-arsenic, HPV, immunosuppression (post tx). Métastases : si langue, vulve, pénis ++ ou >3cm (<3cm : guérison 90%) - Basocellulaire : 50-70ans, « semi-malin », infiltration et destruction locale. Tumeur ø bénigne la plus frqt. PAS de lésion précancéreuse. Etio : UV chronique (phototype I-II, UV-B), génétique, immunosuppression, infla chronique, cicatrices tendues, arsenic. Métastases très rares (FR : cancers grands, profonds, ulcérés, récidivants) → ADP régionales 50%, hématogène 50%. Répond mal à CT classique, survie médiane 18mois - Kératose actinique : hyperkératose sur zones photo-exposées → crâne, oreilles, front - Maladie de Bowen : psoriasiforme, érosif, coule (→ croûtes) → tronc, partie distale des membres, muqueuses, OGE ! - Spinocellulaire : nodule hyperkératosique, érosif, squame attachée - Basocellulaire : → visage et cou (photoexposé) (PAS de sqames) Solide : papule translucide, marge perlée, télangiectasies, Superficiel : plaque érythémateuse, Pigmenté, Sclérodermiforme : cicatriciel - Bowen : eczéma, dermatophyte, psoriasis (si ø réponse ttt → Bx !) - Basocellulaire : superficiel = eczéma nummulaire, dermatophytes, psoriasis. Pigmenté = mélanome, nævus, kératose séborrhéique Dermatoscopie Spinocellulaire : Bx - Bilan d’extension : palpation systématique des aires ganglionnaires ± US des aires ganglionnaires si >2cm, touche OGE (év. si oreille). Basocellulaire : Bx si dx incertain ou avant chirurgie (tumeur basaloïde nodulaire circonscrite, fente tumeur-stroma, ¢ basaloides (bleu) avec palissade en périphérie). Superficiel : tumeur basophile, nodules bien définis. Sclérodermiforme : mal définit, invasif. - Kératose actinique : thérapie photo-dynamique (gold standard), curetage, cryochirurgie (azote liquide), CT topique (5-FU), imiquimod (immunomodulation topique), laser etc. - Bowen : exérèse chirurgicale complète, laser pour les muqueuses (2 e : cryochirurgie, imiquimod, 5-FU topique, photo-dynamique) - Spino¢ : exérèse complète (→ histo + confirmation marge saine) (2 e : cryothérapie, RT, CT) + traitement photo-dynamique du champ de cancérisation (la zone autour n’est aussi pas N). - Baso¢ : exérèse chirurgicale avec marge de sécurité >3-5mm (→ histo + marge saine) par chirurgie micrographique de Mohs (excision avec marquage pour permettre exérèse totale) (2 e : RT, imiquimod, 5FU, photodynamique, curetage → si petit/superficiel mais moins bon cô). Si méta (cas extrême) : vismodégib = inhibiteur voie hegdehog (EI++). - Avantages non-chir : pas de cicatrice, rapide, bonne pénétration. - Désavantage : pas d’histo, compliance, plus de récidive. - PAS de précancérose pour les carcinomes basocellulaires ! - Lichen scléreux atrophique (LSA) : induration + rétraction peau OGE. - Kératocanthome : spino¢ bien différencié, symétrique, bien délimité (excision facile, bon pronostic) - Autre : carcinome à ¢ de Merckel (rechutes ++, mauvais pronostic) GEN CLIN DD INV TTT CAVE -->
![ext[cancer_prostate.pdf|./pdf/cancer_prostate.pdf]] <!-- Texte caché pour la recherche Prostate Cancer A. General characteristics: Prostate cancer is the second most common form of cancer in men worldwide (see also Clinical Pearl 7-8). Ninety-five percent are adenocarcinomas. 1. Risk factors a. Age (most important risk factor) b. African-American race c. High-fat diet d. Positive family history e. Exposure to herbicides and pesticides—certain occupations, such as farming and work in industrial chemical industry, present a higher risk B. Clinical features Quick HIT 1. Early—it is most commonly asymptomatic. Cancer begins in the periphery of the gland and moves centrally. Thus, obstructive symptoms occur late. In fact, by the time prostate cancer causes urinary obstruction, it often has metastasized to bone or lymph nodes. Vertebral metastasis may manifest itself as low back pain in an elderly man with prostate cancer. 2. Later—symptoms due to obstruction of the urethra occur: difficulty in voiding, dysuria, and increased urinary frequency. 3. Late—bone pain from metastases (most commonly vertebral bodies, pelvis, and long bones in legs), weight loss. C. Diagnosis 1. Digital rectal examination (DRE). a. Carcinoma is characteristically hard, nodular, and irregular. b. Normal prostate feels like a thenar eminence. Cancer feels like a knuckle. Men with induration, asymmetry, or palpable nodularity of prostate need a biopsy, especially if over age 45. c. When palpable, 60% to 70% have spread beyond the prostate. d. If DRE is abnormal, transrectal ultrasonography (TRUS) with biopsy is indi- cated, regardless of the prostate-specific antigen (PSA) level. 2. PSA—not used routinely as a screening test. Quick HIT a. PSA is not cancer specific. PSA levels also increase as a result of the following: • Prostatic massage (but DRE does not change PSA levels) The combination of DRe and PSa levels can detect up to 60% of prostate cancers while they are still localized. • Needle biopsy • Cystoscopy • BPH • Prostatitis • Advanced age b. Refinements of the PSA assay—some strategies for improving the diagnostic capability of the PSA test include: • Age-adjusted PSA (because PSA normally increases with age). • PSA velocity—analysis of the rate of increase in the level with time. Diseases of the Renal and Genitourinary System DISEaSES Of ThE RENal aND GENITOURINaRy SySTEM ● 299 • Quantifying free and protein-bound forms of serum PSA—PSA produced by prostate cancer tends to be bound by plasma proteins, whereas PSA produced by normal cells is more likely to be free in plasma. • PSA density—correlation of PSA levels with prostate volume. Quick HIT Key points about PSa: 3. TRUS with biopsy 1. The higher the PSa, the higher the cancer risk a. May need to repeat biopsies for definitive diagnosis b. Indications 2. Normal PSa does not rule out prostate cancer • PSA > 10 ng/dL (or possibly lower). If PSA is >10, chance of finding cancer is over 50%. • PSA velocity >0.75 per year • Abnormal DRE 4. Other tests in the evaluation include a bone scan, plain radiographs of the pelvis and spine, and a CT scan of the pelvis to evaluate for metastatic disease. D. Treatment 1. Localized disease (to prostate)—this is usually a curable disease. The definitive therapy is radical prostatectomy. However, watchful waiting is warranted in older men (i.e., those whose remaining natural life expectancy is <10 years) who are asymptomatic. Most common complications of prostatectomy are erectile dysfunc- tion and urinary incontinence. 2. Locally invasive disease—give radiation therapy plus androgen deprivation (not curative, but decreases the local spread). 3. Metastatic disease—reduce the amount of testosterone with any of the following: a. Orchiectomy (removes testes)—more common in patients who are noncompli- ant with medical therapy. 3. Not used as a screening test 4. If patient requests the test, order it Quick HIT Stages of Prostate Cancer • Stage a—nonpalpable, confined to prostate • Stage B—palpable nodule, but confined to prostate • Stage C—extends beyond capsule without metastasis • Stage D—metastatic disease b. Antiandrogens. c. Luteinizing hormone–-releasing hormone agonists (leuprolide) d. GnRH antagonists—suppress testosterone by binding to receptors in the pitu- itary without causing a transient surge of LH or FSH (Degarelix). -->
{{cancer_vesicule.jpg}}
!!Généralités
*le ''cancer de la vésicule biliaire'' correspond principalement à un ''adénocarcinome''.
*Les'' facteurs de risques'' principaux sont:
**''calculs vésicaux''
**[[vésicule en porcelaine|vesicule_porcelaine.jpg]]
**fistule vésiculo-entérique
*la ''Clinqiue'' est non spécifique et suggère une ''obstruction biliaire extrahépatique '' (ictère, colique biliaire, anorexie, perte de poids, masse QSD)
*le ''traitement'' est la ''chirurgie'' principalement, mais il y a un très mauvais pronostic
{{cancer_vessie.jpg}}
!!Définition
*le ''carcinome de la vessie'' //(ou carcinome urothélial de la vessie, carcinome transitionnel de la vessie) //est la tumeur la plus fréquente du tractus urinaire. 90% sont des ''carcinomes à cellules de transition''.
*les cancer à cellules de transition peuvent aussi survenir au niveau du bassinet et de l'uretère.
*les ''facteurs de risque'' principaux sont:
**le ''Tabac'' surtout
**les produits industriels (teintures)
**le traitement à long terme de cyclophosphamide
!!Clinique
*''hématurie'' généralement ''indolore'', comme symptôme principal
*Dysurie
!!Investigations
*''examen des urines'' pour exclure l'infection
*''cytoogie des urines'' pour chercher des cellules tumorales
*''cystogramme de la vessie'' qui peut montrer un défaut de remplissage
*''cystoscopie et biopsie'' comme test définitif
*''CT'' pour le staging
!!Traitement
*''Tis'': chimiothérapie intra-vésicale
*''Ta'': résection trans-urétérale
*''T1-T3'': cystectomie radicale avec évidement ggl.
*''T4'': cystectomie + evidement + chimiothérapie
{{cystogramme_Vessie_cancer.jpg}}
{{cancer_pancreas.jpg}}
!!Définition
*le ''Cancer du Pancréas'' le plus fréquent est l'''Adénocarcinome''. Il touche surtout les patients de ''> 75 ans'' et est rare avant 40 ans.
*Les ''Localisations'' les plus fréquents sont, dans l'ordre:
*#''Tête du pancréas''
*#Corps du pancréas
*#Queue du pancréas
*le ''Tabac'' est le facteur de risque majeur, mais on trouve aussi le diabète et la pancréatite chronique, ainsi que l'alcool et l'exposition à certains chimiques (benzidine, β-naphthylamine)
!!Clinique
*''Ictère'' (signe d'obstruction)
*''Douleur abdominale''
*''Perte de poids'', ''Anorexie'' (cancer et aussi malabsorption)
*Diabète léger
*Faiblesse, Fatigue
*''//Signe de Courvoisier//'': vésicule distendue palpable = signe d'obstruction en aval
!!Diagnostic
*''ERCP'' et ''CT''
*''CA 19-9'' et ''CEA''
!!Traitement
*''Chirurgie'' avec la procédure de Whipple, seul espoir de traitement.
*Pronostic très sombre, survie de ''10% à 5ans''
*Sinon il faut placer un stent, avec soins palliatifs.
{{whipple_cancer_pancreas.jpg}}
{{cancer_poumon.jpg}}
!!Définition
*Le ''Cancer du Poumon'' est un ensemble de ''4 cancers'' différents répartit en ''2 sous groupes'' importants car la prise en charge est différente:
**''SCLC'' (//Small-Cell Lung Carcinoma//) (le pire, 10% de survie à 5ans)
**''NSCLC'' (//Non Small-Cell Lung Carcinoma//) comprenant l'''Adénocarcinome'' (le plus fréquent), le ''Carcinome Epidermoïde'' et le ''Large cell carcinoma''
*le ''Tabac'' est le facteur de risque majeur du cancer du poumon. On peut aussi trouver l'''//Asbestose//'' ou le ''//Radon//'' (trouvé dans les caves)
*On parle de ''tumeur de pancoast'' si la tumeur atteint l'apex du poumon, provocant des syndromes de la veine cave supérieure et des syndromes de horner, ainsi que des lyses costales. Le carcinome épidermoïde est le plus impliqué.
!!Clinique
*''Toux''
*''Hemoptysie''
*''Pneumonies récurrentes'' (sur obstruction)
*''fatigue'', ''perte de poids'', ''faiblesse''
*''syndrome de la veine cave supérieure'' parfois. la [[compression de la VCS|syndrome_veine_cave_sup.jpg]] fait un œdème facial et distension veineuse. Le SVCS est surtout du au SCLC.
*''//paralysie du nerf phrénique//'': rare, résultant en une paralysie d'un hémidiaphragme
*''//paralysie du nerf laryngé recurrent//'': avec changement de la voix
*''//Syndrome de Horner//'' si invasion des chaines cervicales sympathiques (anhidrose unilatérale, myosis, ptose)
*''Epanchement pleural'' (mauvais pronostic, équivalent à des métastases)
*''Métastases'' au cerveau, os, surrénales et foie
*''Syndrome paranéoplasique'': avec le ''//SIADH//'', la ''//sécrétion d'ACTH//'' ou encore la ''//sécrétion de PTH//''
!!Diagnostic
{{cancer_poumon_rx.jpg}}
*la ''RX'' est anormale dans la plupart des cas. On peut trouver une masse ou une atelectasie par exemple
*le ''CT avec contraste'' permet de mieux caractériser la lésion, et aide à voir les adénopathies et l'invasion locale
*l'''examen cytologique du sputum'' et la ''biopsie bronchoscopique'' permettent de diagnostiquer des tumeurs centrales mais pas périphériques
*le ''PET-CT'' permet de mieux [[définir la tumeur |cancer_poumon_nx.jpg]]et de trouver des métastases.
*la ''biopsie trans-thoracique'' (guidée en fluoroscopie ou ct) permet de diagnostiquer les tumeurs périphériques suspectes
!!Traitement
''NSCLC''
*la ''chirurgie'' est le traitement principal
*la ''radiothérapie'' est un bon traitement complémentaire
*Des metastases sont une contre-indication à la chirurgie
*la chimiothérapie est incertaine
''SCLC''
*la ''Rxthérapie + Cxthérapie'' est à utiliser pour une maladie ''//limitée//''
*la ''Cxthérapie seule'' est à utiliser pour une maladie ''//étendue//''.
*les tumeurs sont généralement non-réséquables par la chirurgie
![ext[cancer_rein.pdf|./pdf/cancer_rein.pdf]] <!-- Texte caché pour la recherche Urological Neoplasms Approach to Renal Mass Ultrasound Percutaneous needle biopsies of cystic There renal masses is controversy may lead over to optimal peritoneal management seeding of small renal masses Cystic Hypoechoic No calcification Thin wall Stop Dense Calcified Septated CT with contrast* Possible aspiration or biopsy CT (exclude angiomyolipoma) Large mass (≥4 cm) Surgery Small mass (≤4 cm) Surgery Surveillance Possible surveillance Tuberous Sclerosis Syndrome characterized by mental retardation, epilepsy, and adenoma sebaceum. 45-80% of patients also present with angiomyolipomas which are often multiple and bilateral Figure 9. Workup of a renal mass *Imaging modality may be different in cases of contrast allergy or elevated creatinine Benign Renal Neoplasms CYSTIC KIDNEY DISEASE • simple cysts: usually solitary or unilateral very common: up to 50% at age 50 usually incidental finding on abdominal imaging Bosniak Classification is used to stratify for risk of malignancy based on cyst features from contrast CT • polycystic kidney disease autosomal recessive: multiple bilateral cysts, often leading to early renal failure in infants autosomal dominant: progressive bilateral disease leading to HTN and renal failure, adult- onset • medullary sponge kidney: cystic dilatation of the collecting ducts usually benign course, but patients are predisposed to stone disease • von Hippel-Lindau syndrome: multiple bilateral cysts or clear cell carincomas (50% incidence of RCC) renal cysts, cerebellar, spinal and retinal hemangioblastomas, pancreatic and epididymal cysts, pheochromocytomas Table 15. Bosniak Classification of Renal Cysts Class Description Features Risk of Malignancy Management Plan I Simple cyst Round, no septations, no calcifications, no solid component Near zero Follow-up usually not required II Simple cyst A few thin septa, no true enhancement, well-marginated, uniform high attenuation, <3 cm Minimal Follow-up usually not required IIF Minimally complex cyst with extra features that require follow-up Still well-marginated and non- enhancing, but now multiple thin septa or some thickening/ calcification of septa/wall, >3 cm 5-20% Requires follow-up with imaging q6-12mo If the lesion evolves, may require surgical resection III Complex cyst Thicker or more irregular walls with measurable enhancement >50% Requires surgical resection IV Clearly malignant Class III + enhancing soft-tissue components >90% Requires surgical resection U21 Urology Urological Neoplasms Toronto Notes 2016 Table 16. Benign Renal Masses Angiomyolipoma (Renal Hamartoma) Renal Oncocytoma Renal Adenoma Epidemiology <1% of adult renal tumours F>M 20% associated with tuberous sclerosis (especially if multiple, recurrent) 3-7% of renal tumours M>F Oncocytomas also found in adrenal, thyroid and parathyroid glands Most common benign renal neoplasm M:F = 3:1 Incidence increases with age Found in 7-23% of all autopies Characteristics Clonal neoplasm consisting of blood vessels (angio-), smooth muscle (-myo-), and fat (-lipoma) May extend into regional lymphatics and other organs and become symptomatic Spherical, capsulated with possible central scar Histologically organized aggregates of eosinophilic cells originating from intercalated cells of collecting duct Small cortical lesions <1 cm Majority are solitary but can be multifocal Diagnosis Incidental finding on CT Negative attenuation (-20 HU) on CT is pathognomonic Rare presentation of hematuria, flank pain, and palpable mass (same as RCC) Incidental finding on CT Difficult to distinguish from RCC on imaging – treated as RCC until proven otherwise Biopsy may be performed to rule out malignancy Incidental finding on CT Rarely symptomatic Controversy as to whether this represents benign or pre-malignant neoplasm Management May consider surgical excision or embolization if symptomatic (pain, bleeding) or higher risk of bleeding (e.g. pregnancy) Potential role for mTOR inhibitors in unresectable/ metastatic disease Follow with serial U/S Partial/radical nephrectomy for large masses HIFU or RFA for smaller masses If mass >3 cm, likely not a benign adenoma; will require partial/radical nephrectomy due to increased likelihood of malignancy Malignant Renal Neoplasms RENAL CELL CARCINOMA Etiology • cause unknown • originates from proximal convoluted tubule epithelial cells in clear cell subtype (most common) • hereditary forms seen with von Hippel-Lindau syndrome and hereditary papillary renal carcinoma Epidemiology • 8th most common malignancy (accounts for 3% of all newly diagnosed cancers) • 85% of primary malignant tumours in kidney • M:F = 3:2 • peak incidence at 50-60 yr of age Pathology • histological subtypes: clear cell (75-85%), papillary (10-15%), chromophobic (5-10%), collecting duct • sarcomatoid elements in any subtype is a poor prognostic factor Risk Factors • top 3 risk factors: smoking, HTN, obesity • miscellaneous: horseshoe kidney, acquired renal cystic disease • role of environmental exposures (aromatic hydrocarbons, etc.) remains an unproven risk factor for development of RCC Clinical Features • usually asymptomatic: frequently diagnosed incidentally by U/S or CT • poor prognostic indicators: weight loss, weakness, anemia, bone pain • classic “too late triad” found in 10-15% gross hematuria 50% flank pain <50% palpable mass <30% • was called the “internist’s tumour” because of paraneoplastic symptomatology – now called the “radiologist’s tumour” because of incidental diagnosis via imaging • metastases: seen in 1/3rd of new cases; additional 20-40% will go on to develop metastases bone, brain, lung and liver most common site may invade renal veins and inferior vena cava lumen. This may result in ascites, hepatic dysfunction, right atrial tumour, and pulmonary emboli Investigations • routine labs for paraneoplastic syndromes (CBC, ESR, LFTs, extended electrolytes) • U/A (60-75% have hematuria) • renal U/S: solid vs. cystic lesion Gerota’s fascia T4 Adrenal gland Vein T3 Artery T2 T1 >7 cm Ureter ≤7 cm Renal capsule Renal cortex Renal medulla © Carly Vanderlee 2011 Figure 10. RCC staging Role of environmental exposures (aromatic hydrocarbons, etc.) remains an unproven risk factor for development of RCC RCC Systemic Effects: paraneoplastic syndromes (10-40% of patients) • Hematopoietic disturbances: anemia, polycythemia, raised ESR • Endocrinopathies: hypercalcemia (increased vitamin D hydroxylation), erythrocytosis (increased erythropoietin), HTN (increased renin), production of other hormones (prolactin, gonadotropins, TSH, insulin, and cortisol) • Hepatic cell dysfunction or Stauffer syndrome: abnormal LFTs, decreased WBC count, fever, areas of hepatic necrosis; no evidence of metastases; reversible following removal of primary tumour • Hemodynamic alterations: systolic HTN (due to AV shunting), peripheral edema (due to caval obstruction) U22 Urology Urological Neoplasms Toronto Notes 2016 • contrast-enhanced CT: higher sensitivity than U/S for detection of renal masses and for staging purposes • MRI: useful for evaluation of vascular extension • renal biopsy: to confirm diagnosis if considering observation or other non-surgical therapy Staging • involves CT, CXR, liver enzymes and LFTs, bone/head imaging (if symptoms dictate) Table 17. 2010 TNM Classification of Renal Cell Carcinoma Tumour may invade renal veins and inferior vena cava lumen. This may result in ascites, hepatic dysfunction, right atrial tumour, and pulmonary emboli T N M T1: tumour <7 cm, confined to renal parenchyma T1a: <4 cm T1b: 4-7 cm T2: tumour >7 cm, confined to renal parenchyma T2a: tumour >7 cm but ≤10 cm in greatest dimension, limited to the kidney T2b: tumour >10 cm, limited to the kidney T3: tumour extends into major veins or perinephric tissues, but NOT into ipsilateral adrenal or beyond Gerota’s fascia T3a: into renal vein or sinus fat T3b: into infradiaphragmatic IVC T3c: into supradiaphragmatic IVC T4: tumour extends beyond Gerota’s fascia including extension into ipsilateral adrenal N0: no regional nodes N1: metastasis to a single node, <2 cm N2: metastasis to a single node between 2-5 cm or multiple nodes <2 cm N3: node >5 cm M0: no evidence of metastasis M1: presence of distant metastasis Treatment • surgical radical nephrectomy: en bloc removal of kidney, tumour, ipsilateral adrenal gland (in upper pole tumours) and intact Gerota’s capsule and paraaortic lymphadenectomy partial nephrectomy (parenchyma-sparing): small tumour (roughly <4 cm) or solitary kidney/bilateral tumours surgical removal of solitary metastasis may be considered • ablative techniques (cryoablation, RFA) • palliative radiation to painful bony lesions • therapy for advanced stage tyrosine kinase inhibitors for metastatic disease (e.g. sunitinib, sorafenib) anti-angiogenesis/anti-VEGF (e.g. bevacizumab) mTOR inhibitors (e.g. temsirolimus, everolimus) high-dose IL-2 (high toxicity but able to induce long-term cure in 5-7% of patients) IFN α: monotherapy has been largely replaced by molecularly targeted agents listed above Prognosis • stage at diagnosis most important prognostic factor T1: 90-100% 5 yr survival T2-T3: 60% 5 yr survival metastatic disease: <5% 10 yr survival Carcinoma of the Renal Pelvis and Ureter Etiology • risk factors include smoking chemicals/dietary exposures (industrial dyes and solvents; aristolochic acid) analgesic abuse (acetaminophen, ASA, and phenacetin) Balkan nephropathy Epidemiology • rare: accounts for 5% of all urothelial cancers • frequently multifocal, 2-5% are bilateral • M:F = 3:1 • relative incidence: bladder:renal:ureter = 100:10:1 Pathology • 85% are papillary urothelial cell carcinoma; others include SCC and adenocarcinoma • UCC of ureter and renal pelvis are histologically similar to bladder UCC Clinical Features • gross/micrscopic hematuria • flank pain • storage or voiding symptoms (dysuria only if lower urinary tract involved) • flank mass ± hydronephrosis (10-20%) Sorafenib in Advanced Clear-Cell Renal Cell Carcinoma – TARGET Trial NEJM 2007;356:125-134 Study: Phase III, double-blind RCT comparing multikinase inhibitor, sorafenib, with placebo in treatment of advanced clear-cell renal cell carcinoma. Methods: Patients with clear cell renal cell carcinoma, resistant to standard therapy. The main intervention and outcome were sorafenib and overall survival, respectively. Results: Progression-free survival in intervention group was 5.5 mo, compared with 2.8 mo in the placebo group. The survival improvement was associated with an increased number of adverse events. Axitinib vs. Sorafenib as Second-Line Treatment for Advanced Renal Cell Carcinoma: Overall Survival Analysis and Updated Results from a Randomized Phase 3 Trial Lancet Oncol 2013;14:552-562 Study: Phase 3 trial of patients with clear cell metastatic renal cell carcinoma randomized to receive axitinib 5 mg twice daily (n=361) or sorafenib 400 mg twice daily (n=362). Results: Median overall survival was 20.1 mo with axitinib (16.7 -23.4) and 19.2 monwith sorafenib (17.5-22.3) (HR 0.969, 95% CI 0.800-1.174). Median progression-free survival was 8.3 months with axitinib (6.7-9.2) and 5.7 mo with sorafenib (4.7-6.5) (HR 0.656, 95% CI 0.552-0.779). Conclusions: Axitinib should be a second-line treatment option for patients with metastatic renal cell carcinoma. Radiotherapy With or Without Chemotherapy in Muscle-Invasive Bladder Cancer NEJM 2012;366:1477-1488 Study: Phase 3 trial with random assignment of 360 patients with muscle-invasive bladder cancer to radiotherapy with or without chemotherapy. Results: At 2 yr, rates of locoregional disease-free survival were 67% in the chemoradiotherapy group and 54% in the radiotherapy group (HR 0.68, 95% CI 0.48-0.96). Five year overall survival rates were 48% in the chemoradiotherapy group and 35% in the radiotherapy group (HR 0.82, 95% CI 0.63-1.09). Conclusions: Chemotherapy with fluorouracil and mitomycin C in combination with radiotherapy improves locoregional control of bladder cancer compared to radiotherapy alone, with no significant increase in adverse events. U23 Urology Urological Neoplasms Toronto Notes 2016 Investigations • IVP/CT urogram • cystoscopy and retrograde pyelogram Treatment • radical nephroureterectomy with cuff of bladder • distal ureterectomy for distal ureteral tumours • emerging role for endoscopic laser ablation in patients with low grade disease, poor baseline renal health -->
![ext[cancer_testi.pdf|./pdf/cancer_testi.pdf]] <!-- Texte caché pour la recherche -->
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{candidose_buccale.jpg}}
!!Définition
*le ''//Candida Albicans//'' est le spécimen le plus fréquent de candida. Il colonise la bouche et peut dégénérer en ''Candidose'' si le patient est:
**sous ''ATB''
**''Diabétique''
**''Immunosupprimé''
*Les ''Régions ''touchées par la candidose sont:
**la ''Bouche'' en premier lieu, avec des //plaques blanches//
**le ''Vagin'' avec une [[atteinte des muqueuses|candidose_vaginale.jpg]], avec écoulement blanc non purulent mais prurigineux
**la ''Peau'', notamment dans les //[[plis cutanés|candidose_cutanée_plis.jpg]]//.
**l'''Oesophage'' avec une //[[oesophagite à candida|candidose_oesophage.jpg]]// qui peut être symptomatique ou non.
*''Candidose disséminée'' chez les patients immunosupprimés, avec des //chocs septiques//, //méningites// ou encore //abcès// variés.
!!Investigations
*le ''diagnostic'' est surtout ''clinique''. On peut confirmer le candida par un examen au ''KOH''.
!!Traitement
*''Antifongiques topiques'' sous forme de rincage pour la bouche (//clotrimazole//, //nystatin//)
*Antifongiques topiques sous forme de crème pour le vagin (clotrimazole)
*Antifongiques topiques sous forme de poudre pour la peau
*Antifongiques systémiques pour la forme systémique (//amphoterecin B//, //fluconazole//)
undefine
undefine
undefine
undefine
!!Définition
*La Capsulite Rétractile est fait partie des ''Périarthrites Scapulo-Humérales'', un ensemble de pathologies de l’épaule dont fait aussi partie les tendinopathies de la coiffe des rotateurs.
*La ''Capsulite Rétractile'', ou « ''Epaule Gelée'' », ou Capsulite adhésive, est caractérisée par un ''épaississement et une rétraction de la capsule articulaire de l’épaule''.
*Cet pathologie induit une ''limitation progressive de la mobilité articulaire'' de l’articulation gléno-humérale, jusqu’à un stade de limitation ''sévère''.
*La ''durée'' de cette maladie est en moyenne de ''1.5-2 ans'' avec une ''rémission spontanée''.
{{capsulite_retractile_schema.jpg}}
!!Etiologie
*La ''forme primaire'' est la plus fréquente. Elle est ''idiopathique'' mais souvent ''associée au diabète''. C’est cette forme qui dure 1.5-2 ans.
*La ''forme secondaire'' peut être due à une ''immobilisation de l’épaule'', à un ''trauma'' ou à un ''AVC''. Son pronostique est plus sombre.
!!Clinique
*Le patient présente une clinique proche de celle de la ''coiffe des rotateurs''. Il aura des ''douleurs diffuses'', une ''limitation progressive de la mobilité'', exprimée par des ''difficultés à l’habillement'' par exemple.
*La douleur n’est pas présente au repos, mais elle ''empêche de dormir sur le côté atteint'' la nuit.
*On peut tester la fonction générale de l’articulation de l’épaule en faisant le test de la ''distance Pouce-C7''
{{test_distance_pouce_c7.jpg}}
!!Investigations
*Il faut juste faire une ''RX standard'' de l’épaule afin d’éliminer ''une lésion osseuse'' sous-jacente.
*Le ''diagnostic est clinique'' avec l’anamnèse et l'examen.
!!Traitement
*Il faut en priorité ''rassurer le patient'' sur la longue durée de sa maladie. Il faut aussi penser à ''traiter la cause sous-jacente'' comme le diabète.
*Pour l’analgésie on peut commencer par des ''AINS'' puis par des ''injections de corticoïdes'', le tout avec de la ''physiothérapie''. Référer à un spécialiste en cas d’échec du traitement.
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{octreotide.jpg}}
!!Examen
*les ''Tumeurs Carcinoïdes'' ont souvent un grand nombre de ''récepteurs à la somatostatine''.
*On injecte de l'''I123-Octréotide'', qui est un analogue de la somatostatine avec une plus grande demi-vie et qui se fixera dans la tumeur avec une grande sensibilité.
*On fait des images à ''6h'', puis ''24h''. S'il y a encore de l'activité digestive dans la zone suspectée on peut faire un image plus tardive à ''48h.''
*Un ''Laxatif'' est utilisé pour diminuer l'activité digestive.
*L'Octréotide stable est aussi utilisé pour traiter les symptômes de certaines tumeurs neuroendocrines.
!!Exemple
<$button popup="$:/octreotide_normal.jpg" >
[img width=64 [images/octreotide_normal.jpg]]
</$button><$reveal type="popup" state="$:/octreotide_normal.jpg"><div class='tc-tiddler-frame'>
{{octreotide_normal.jpg}}
</div>
</$reveal>Octréotide Normal
<$button popup="$:/octreo_mn.jpg" >
[img width=64 [images/octreo_mn.jpg]]
</$button><$reveal type="popup" state="$:/octreo_mn.jpg"><div class='tc-tiddler-frame'>
{{octreo_mn.jpg}}
Le scanner montre trois lésions intra-hépatiques.
La scintigraphie à la Somatostatine marquée à l'Indium 111 (Octréoscan) met en évidence :
- une hyperfixation intense dans la région latéro-abdominale droite, en dessous du rein droit correspondant à la lésion primitive de topographie grêle;
- plusieurs zones d'hyperfixation intra-hépatiques peu intenses correspondant a des métastases hépatiques.
</div>
</$reveal>Bilan de diarrhées, SS élevée au labo
undefine
{{CHC.jpg}}
!!Définition
*le ''CHC'' est un cancer des hépatocytes, représentant la majorité des cancers hépatiques. Il est divisé en deux entités:
**le ''CHC Non-Fibrolamellaire'' est le principal, il est lié à ''HCV'', ''HBV'' ainsi qu'aux ''Cirrhoses''. Il a un mauvais pronostic (non-réséquable)
**le ''CHC Fibrolamellaire'' est rare, chez les adolescents et jeunes adultes, non lié à HCV, HBV et aux fibroses. Il a un meilleur pronostic (réséquable)
*les ''Facteurs de risques'' principaux d'un CHC sont
**''Cirrhose'' surtout, que ça soit du à l'''Alcool'' ou aux ''HBC'' et ''HBV''. 10% des cirrhoses ont un CHC
**Adénome Hépatique (10% risque de transformation)
**Aflatoxine et autres carcinogènes alimentaires
**Déficit en A-AT
**Maladie de WIlson
**Hemochromatose
**Schistosomiase
**Tabac
**Glycogenose type I (Von Gierke)
!!Clinique
*''Douleur abdominale''
*''HSM''
*''Anorexie'', ''Perte de poids'', ''Fatigue''
*''HTP'', ''Jaunisse'', ''Ascite'', etc.
!!Diagnostic
*''Biopsie hépatique'' comme diagnostic définitif
*''Sérologies'' des ''HCV'' et ''HBV''
*dosage de l'''AFP''
*''CT'', ''IRM''
!!Traitement
*''Chirurgie'' avec //Hepatectomie//, faisable que dans 10% des cas
*''Transplantation'' si le diagnostic est fait assez tôt
*''Chimio-Embolisation'', ''Radio-embolisation'' ou ''Radiotherapie'' si non réséquable
{{radio-embolisation.jpg}}
undefine
undefine
undefine
@@background-color:Tomato; !'' Cardiologie '' @@ <<list-links "[tag[Cardiologie]sort[title]]">>
{{Cardiomyopathies_schema.jpg}}
!! Généralités
*Les ''Cardiomyopathies'' sont des affections du ''myocarde'', caractérisée par un muscle ''structurellement et fonctionnellement anormal''.
*La pathologie doit ne pas être suffisamment expliquée par un maladie coronarienne, une HTA, une valvulopathie ou une cardiopathie congénitale.
*La ''Classification des Cardiomyopathies ''comprend:
**''CMD'' (//Cardiomyopathie Dilatée//)
**''CMH'' (//Cardiomyopathie Hypertrophique//)
**''CMR'' (//Cardiomyopathie Restrictive//)
**Cardiomyopathie arythmogène du VD
**Cardiomyopathies non classées.
!! Cardiomyopathie Dilatée (CMD)
{{CMD.jpg}}
*la ''CMD'' ou //Cardiomyopathie Dilatée// correspond à une ''dilatation et perte de fonction systolique du VG''. Le VD peut aussi être touché.
*C'est la plus fréquente des Cardiomyopathies.
*L'''Etiologie ''est la plus souvent ''génétique'' avec une majorité des cas avec une atteinte familiale. Les autres causes sont les ''ischémies'' (maladie coronarienne), l'''alcool'' ou les ''myocardites.''
*La ''Clinique'' comprend des signes d'''insuffisance cardiaque chronique'' gauche et aussi droit des fois.
*Les ''Investigations'' comprennent:
**une ''RX'' à la recherche d'une [[cardiomégalie|CMH_rx.jpg]].
**une ''Echo cardio'' qui montrera une ''dilatation du VG '' accompagnée d'une diminution de la ''FEVG <40%''
**on peut aussi faire un ''IRM cardiaque'' qui montrera la dilatation du VG plus en détails.
**il faut aussi faire un ''ECG'' car les CMD peuvent souvent s'accompagner d'''arythmies'' dues à l'élargissement
*Le ''traitement'' est le même que pour l'insuffisance cardiaque, à base de:
**''Diurétiques'', ''Digoxine'' et ''Vasodilatateurs''
**''Traitement de la cause''
**Possible ''pose de Pacemaker''
**Possible besoin d'''Anticoagulation''
!!Cardiomyopathie Hypertrophique (CMH)
{{CMH.jpg}}
*la ''CMH'' ou //Cardiomyopathie Hypertrophique// correspond à une ''épaississement et masse augmentée du Myocarde''. Elle est définie par une épaisseur de >15mm.
*La CMH provoque une ''dysfonction diastolique'' due au manque de place.
*L'''Etiologie ''est la plus souvent ''génétique'' avec une majorité des cas avec une atteinte familiale. A ne pas confondre avec un coeur d'athlète.
*Dans la forme de ''CMH Obstructive'' il y a en plus une [[obstruction|CMH obstructive.jpg]] due à un contact entre un feuillet mitral et le septum, ce qui donne un ''souffle systolique'' qui a la particularité d'être ''dynamique'' avec une meilleure audibilité en passant de la ''position accroupie à debout'', ou avec un ''Valsalva''.
*La ''Clinique'' comporte des ''dyspnées'', ''angines'', ''palpitations'', ''syncopes aggravées au Valsalva'' ou encore Arythmies.
*Chez certains jeunes athlètes il peut y avoir une ''mort subite''.
*Le ''Diagnostic'' se pose par l'histoire familiale et peut se confirmer par un ''ECG pathologique'' et surtout une ''Echo-coeur''.
*Le ''Traitement'' comprend surtout de ''limiter les efforts intenses'' pour prévenir la mort subite. Sinon:
**Si le patient est ''asymptomatique'', il n'y a ''pas besoin de traitement''.
**Si le patient est ''symptomatique'', on peut donner des ''Beta-Bloqueurs'' ou des bloqueurs calciques comme le ''Verapamil''.
**Si le patient a une ''CMH obstructive sévère'' on peut faire de la ''Chirurgie'' par une septotomie ± plastie mitrale. Une alternative endoscopique est la création d'un mini-infarctus septal par ''alcoolisation'' d'une branche septale de l'IVA.
!!Cardiomyopathie Restrictive (CMR)
{{CMR.jpg}}
*La ''CMR'' ou //Cardiomyopathie Restrictive// est due à une ''infiltration du myocarde'', en présence d'un coeur avec des ''parois normales'', amenant à une ''Systole et Diastole réduites.''
*La CMR est la forme la moins fréquente de Cardiomyopathies.
*Les ''Causes ''sont:
**l'''Amyloïdose''
**La ''Sarcoïdose''
**La ''Sclérodermie''
**Les causes ''Post-Radiques'' ou post-chimio
**''Familiale''
**Et d'autres encore
*La ''Clinique'' comprend une ''dyspnée'' et une ''intolérance à l'effort'' du au défaut de remplissage diastolique. Il y a aussi beaucoup de symptômes d'''IC Droite'' (TJ, Odèmes, Epanchements, Ascite, Hepatomégalie).
*Le ''Diagnostic Différentiel'' à toujours garder en tête est la ''[[Péricardite Constrictive|Péricardite Constrictive]]''.
*Le ''Diagnostic ''se fait par une ''Echographie'' qui montrera des ventricules normaux avec des oreillettes élargies et permettra par la même occasion d'exclure la Péricardite Constrictive. Une ''Biopsie myocardique'' permet de confirmer le diagnostic.
*Le ''Traitement'' comporte:
**''Traitement causal''
**On peut donner des ''diurétiques'', mais attention a ne pas donner la Digoxine en cas d'Amyloïdose (qui augmente la toxicité des digitaliques)
**Les patients peuvent avoir besoin d'une ''transplantation cardiaque'' à long terme.
undefine
![ext[CTG.pdf|./pdf/CTG.pdf]] <!-- Texte caché pour la recherche La surveillance du bien-être fœtal le cardiotocogramme Dr S. De Oliveira Dr Y. De Dycker AMC 2016 Cardiotocogramme (CTG) Le RCF fait intervenir différents mécanismes neurologiques, locaux et endocriniens: Orthosympathique : responsable d’une tachycardie foetale SN autonome Parasympathique : devient progressivement prédominant avec la maturité fœtale abaissant le RCF à 120-160 à terme Chémorecepteurs sensibles à la baisse de la PO2 baisse brutale entraine bradycardie baisse progressive entraine tachycardie compensatoire Barorécepteurs sensibles aux variations de TA Hypotension entrainera une tachycardie Hypertension entrainera une bradycardie Cardiotocogramme (CTG) Le RCF fait intervenir des mécanismes complexes neurologiques, endocrininens et locaux: Métabolisme aérobie: réserves fœtales intactes en présence d’oxygène: adaptation foetale sans souffrance fœtale glucose +O2 (jours) Métabolisme anaérobie: mécanisme d’adaptation si la pression partielle en oxygène baisse: redistribution du débit sanguin préférentiellement vers les organes nobles et métabolisme anaérobie dans les organes périphériques: glycogènolyse > production d’acide lactique, libération d’ions H+ > acidose métabolique et baisse du pH (heures) Asphyxie: en l’absence de correction de la situation, le mécanisme d’adaptation est dépassé et le métabolisme anaérobie prend place dans les organes nobles aboutissant à: lésions définitives des organes nobles (minutes) Cardiotocogramme (CTG) !! Attention aux situations à risques: - La réaction du fœtus confronté à une hypoxie dépend de son état initial : ! si réserves fœtales en glycogène diminuées: prématurité, RCIU - insuffisance utéro-placentaire (mauvais échanges placentaires gazeux) due à une pathologie maternelle: hypertension artérielle maternelle chronique, pré-éclampsie, diabète, tabac.. - redistribution du débit sanguin maternel (pathologie cardiaque maternelle, hypotension artérielle, anémie) - hypercinésie utérine et contracture utérine: contractions utérines rapprochées ou prolongées interrompant les échanges gazeux au niveau placentaire Facteurs de risques cliniques ØPrématurité / post-terme ØRetard de croissance intra-utérin ØLiquide amniotique méconial ØSaignements pendant la grossesse ØHypertension artérielle ØGrossesse multiple ØDiabète maternel ØÂge maternel > 40 ou >35 avec 2 autres FR Influence sur le RCF Ø Infection (chorioamnionite, état fébrile maternel) Ø Anémie fœtale Ø Oligoamnios Ø Médicaments (trandate, péthidine) Ø Décollement placentaire/ rupture utérine Cardiotocogramme RCF normal RCF anormal Preuve solide que le fœtus se porte bien au moment de l’enregistrement Bonne valeur prédictive négative (99.7%)pour exclure une souffrance fœtale Peut être le signe ou non d’une souffrance fœtale Mauvaise valeur prédictive positive (40%) d’une souffrance fœtale Berkus et al., Elcetronic fetal monitorigf:what’s reassurring?, Acta Obstetica Gynecol Scan 1999; 78:15-21 RCOG, The Use of electronic fetal monitoring: Evidence-based Clinical Guideline Number 8. 2001 Cardiotocogramme RCF normal Interprétation du CTG selon des critères définis et en corrélation avec le partogramme et l’histoire obstétricale Réaliser des mesures complémentaires pour: vérifier le bien-être fœtal prévenir des mauvaises issues périnatales RCF anormal M E D I C O - L E G A L RCOG, The Use of electronic fetal monitoring: Evidence-based Clinical Guideline Number 8. 2001 PLAN - Critères d’interprétation du CTG selon la RCOG 2001 et classification du CTG - Que faire face à un CTG suspect ou pathologique - Les mesures complémentaires pour s’assurer du bien-être foetal - Exemples et cas cliniques Paramètres du CTG Paramètres du CTG -->
undefine
undefine
{{cepahlees_schema.jpg}}
!! Généralités
* les ''céphalées'' sont classées en ''céphalées primaires'' et ''céphalées secondaires''
*les ''céphalées primaires'' comprennent:
**''Migraines''
**''Céphalées de Tension''
**''Cluster Headaches''
*les ''céphalées secondaires'' sont souvent détectées par les ''Reds Flags''. Elles comprennent:
**''Trauma''
**''Horton''
**''AVC''
**''Méningite''
**''HTIC''
**''GAFA''
**''Thrombose du Sinus Caverneux''
!! Reds Flags
!!! ''A l'anamnèse''
*''coup de tonnerre''
*''céphalées inaugurales'' surtout chez l'adulte
*''changement en intensité ou fréquence''
*''Fièvre / Immunosuppression''
*''Trauma''
!!! ''A l'examen clinique''
* ''Papillodeme''
* ''Baisse de l’Etat de Conscience''
* ''Fièvre''
* ''Méningisme''
*'' Déficits neurologiques focaux''
!! Migraines
{{migraine_aura_schema.jpg}}
*Les ''Migraines'' sont plutôt ''unilatérales'' et ''pulsatiles''.
*Elles sont souvent associées à des ''nausées ou vomissements''
*La ''douleur'' est d'intensité ''moyenne à forte''
*On les trouve surtout chez les ''femmes'', en particulier avec une ''anamnèse familiale positive''.
*Elles sont accompagnées de ''photophobie'', ''phonophobie'' et parfois des ''auras'', des symptômes neurologiques durant généralement <1h qui comprennent:
**''parésies, paresthésies''
**''Troubles visuels''
**''Aphasie''
*le ''Traitement des crises'' comprend des ''AINS'', de l'''Aspirine'', des ''Triptans'' et l'''Ergotamine''
*le ''Traitement de fond'' comprend des ''anticonvulsivants'', des ''antidépresseurs tricycliques'' et du ''propanolol''.
!! Céphalées de Tension
{{cephalees_tension.jpg}}
*Les ''Céphalées de Tension'' sont plutôt ''bilatérales'' et ''constantes'', non pulsatile. Ce sont les céphalées les plus fréquentes
*la ''douleur ''est d'''intensité moyenne'', cependant ''moins pire que la migraine''.
*La céphalée est ''déclenchée par le stress et le manque de sommeil''
*Elle n'est PAS associée à une photophobie, ni phonophobie, ni nausées / vomissements.
*Le ''Traitement des crises'' comprend surtout les ''AINS''
*Le ''Traitement de fond'' comprend les ''antidépresseurs tricycliques'' et est souvent nécessaire.
!! Cluster Headaches
{{cluster_headache_schema.jpg}}
*Les ''Cluster Headaches'', ou céphalées en grappes, sont plus rares mais provoquent des ''douleurs insupportables'' ("//la pire douleur de ma vie//")
*Les ''douleurs'' sont ''brèves'' (quelques minutes à 3h) et ''récurrentes'' (crises quotidiennes pendant 1-2mois). Elles sont situées surtout au niveau ''péri-orbitaire''.
*Elles sont associées avec des ''larmoiements'', une ''injection conjonctivale'' et un ''[[Horner unilatéral|Syndrome de Horner]]'' (pseudo-ptose, myosis et enophtalmie, avec anhydrose)
*Le patient ''ne tient pas sur place'', contrairement aux deux autres qui aiment la tranquillité d'une pièce sombre.
*Le ''traitement de la crise'' comprend l'''oxygène au maximum'' ainsi que des ''triptans''.
*le ''traitement de fond'' comprend le ''verapamil'', le ''lithium'' et la ''prednisolone''.
undefine
![ext[CMT.pdf|./pdf/CMT.pdf]]
<!-- Texte caché pour la recherche
-->
{{charcot-marie-tooth.jpg}}
undefine
undefine
undefine
@@background-color:Crimson; !''Chirurgie'' @@ <<list-links "[tag[Chirurgie]sort[title]]">>
{{choc_tableau.jpg}}
!!Définition
*L’''état de choc'' est un syndrome clinique secondaire à une ''insuffisance circulatoire'' aiguë, avec une ''hypoxie tissulaire'' induisant la production de l''lactates'' et globalement une ''défaillance des organes multiple''.
*La ''compensation initiale'' d'un choc met en jeu le ''système sympathique'', le ''RAA'' ainsi que la libération de ''cortisol'' et d'''ADH'', qui ont pour but de redistribuer le sang aux organes vitaux.
**Le ''choc compensé'' s'exprime par une ''tachycardie'', une ''tachypnée'' et un ''maintien de la tension''.
**Le ''choc avéré'' survient lors que la compensation est dépassée. Il est manifesté par des signes d'''hypoperfusion'', avec comme point central l'''hypotension <90 mmhg''.
*Les ''Critères du Choc'' et ''Critères d'Hypoperfusion'' permettent de poser le diagnostic. On peut soit avoir 1 Critère de Choc + 1 Critère d'Hypoperfusion, ou alors 3 Critères d'Hypoperfusion
|!Critères de Choc|
|''Tension systolique <90mmhg''|
|ou baisse de la tension habituelle >30%|
|ou TAM <60mmhg|
|!Critères d'Hypoperfusion|
|Troubles de l'état de conscience|
|Oligurie|
|Tachypnée >20/min|
|Température <36°|
|Extremités froides ou [[Livedo reticularis|livedo_reticularis.jpg]]|
|Lactates >5 mmol/l|
!!Investigations
*''ECG'' pour rechercher tout ce qui sera IM, Arythmies, Hyperkaliémie, Péricardite
*''pH'', ''pO2'', ''lactates'' et ''pCO2'' pour évaluer l'acidose et l'hypoxémie
*''Hb'' pour l'hémorragie
*''Glucose'' pour l'hypoglycémie
*''Electrolytes ''pour l'hyperkaliémie
*''RX thorax'' pour l'OAP, la Tamponnade, Le Pneumothorax, EP et Pneumonie
*le ''FAST US'' pour une évaluation liquidienne péritonéale et péricardique ainsi qu'un examen du coeur, de l'aorte et de la VCI.
!! Définition * une ''réaction anaphylactique'' est une ''réaction allergique'' de [[Type I|hypersensibilites_types.jpg]] et de[[ Stade III/IV|allergies_stades.jpg]], impliquant une ''dégranulation'' massive de médiateurs puissants par les ''mastocytes''. Cette réaction est médiée par les [[IgE|Immunoglobulines_schema.jpg]] * La réaction arrive dans les ''secondes / minutes'' après exposition au produit allergène. Il s'agit souvent de ''nourriture'' (cacahuètes,..) mais on trouve aussi les ''venins'' d'insectes, les médicaments, le latex, etc. * la réaction anaphylactique peut dégénérer rapidement en ''choc anaphylactique'', menaçant la vie. * __Rappel__ une réaction anaphylactoïde n'est PAS médiée par les [[IgE|Immunoglobulines_schema.jpg]]. C'est une réponse systémique violente face au premier contact d'un allergène, avec libération DIRECTE d'histamine et autres médiateurs. !! Clinique * Au ''stade I '' on trouve les symptômes ''cutanés'': **''prurit'' ** ''erythème'' ** ''urticaire'' * Au ''stade II'' s'ajoutent les symptomes ''gastro-intestinaux'': ** nausées **vomissements ** [[angioodème|anaphylaxie_angioodeme.jpg]] (stade II) * Au ''stade III'' viennent les ''symptomes respiratoires'': **''dyspnée'' **''dysphagie'' **''détresse respiratoire'' **''asphyxie'' *Au ''stade IV'' viennent les symptômes ''cardiaques'': **Choc anaphylactique **Arythmies ** Arrêt cardique !! Traitement de l'Anaphylaxie Sévère (III/IV) # ''Réanimation'' (possible intubation), ''Remplissage'' (NaCl 0.9%) et ''Oxygène'' (au masque ou lunettes) # ''Adrenaline IM (Epipen)'' ou IV possible aussi # ''Corticoïdes IV'' et ''Anti-histaminiques IV'' !! Traitement de l'Anaphylaxie Lègère / Modérée (I/II) # ''Eviction'' de l'agent causal # ''Antihistaminiques PO'', IV si plus sévère, ''±Corticoïdes PO'' # ''Accès veineux'' et ''Surveillance'' 4-24h (risque d'aggravation !)
undefine
{{cholangite.jpg}}
!!Définition
*la ''cholangite'' correspond à une ''infection'' du cholédoque avec ''stase biliaire'', suite à une ''cholédocolithiase'' principalement.
*D'autres causes plus rares sont des cancers, des sténoses, des kystes ou post-ERCP
*la cholangite est une ''urgence'' potentiellement mortelle.
*une complication dangereuse est un abcès hépatique
!!Clinique
*la ''Triade de Charcot'' présente dans 50% des cas comprend:
*#''Ictère''
*#''Fièvre''
*#''Douleur QSD''
*la ''Pentade de Reynolds'' comprend
*#''Ictère''
*#''Fièvre''
*#''Douleur QSD''
*#''choc septique''
*#''baisse de l'Etat de Conscience''
!!Investigations
*''Labo'': hémoc, FSC, bilirubine, transaminases
*''US'' comme premier examen
*''ERCP'' seulement quand la cholangite s'est calmée (>48h afébrile), pour aussi ''traiter'' le calcul
!!Traitement
*''ATB IV''
*''Fluides IV'' et ''Analgesiques''
*''ERCP'' avec sphincterotomie, voir laparotomie, a distance on fait une CCK.
undefine
{{cholecystite.jpg}}
!!Définition
*la ''Cholécystite Aigue'' correspond à une ''inflammation'' de la vésicule biliaire induite par un ''calcul'' biliaire.
*Si les cholécytites aigues sont récurrentes, le patient peut développer une cholécystite chronique
*10% des patients avec des lithiases biliaires vont développer une cholécystite
*les ''Complications'' possibles sont:
**cholécystite gangréneuse
**perforation de la vésicule
**emphysème de la vésicule
**empyème de la vésicule
**fistule avec le duodénum et iléus biliaire
*10% des cholécystites sont sans calculs, souvent idiopathiques chez des patients très malades
!!Clinique
*''Douleur au QSD'', peut irradier à l'épaule ou la scapula
*''Signe de Murphy'' caractéristique avec un blocage de l'inspiration à la palpation profonde
*Fièvre
*Leucocytose
*Diminution des bruits intestinaux
!!Investigation
*''Echographie'' comme examen de choix. avec épaississement de la paroi, distension, fluide périphérique et présence de calculs
*''CT-scan'' possible, voit mieux les complications
!!Traitement
*''Hydratation'', ''NPO'', ''Analgesiques''
*''ATB IV''
*''Chirurgie'' avec cholecystectomie
undefine
{{cholecystite.jpg}}
!!Définition
*la ''cholédocolithiase'' correspond à la ''présence de calculs dans le cholédoque''.
*Tout comme la cholélithiase, les calcus ne sont pas forcément symptomatiques, tant qu'il n'y a pas de blocage.
*la majorité des calculs viennent de la ''vésicule'' biliaire (calculs secondaires) mais certains peuvent venir du cholédoque (calculs primaires)
*Le calcul peut s'infecter et donner une ''cholangite'' ou une ''pancréatite'', ce qui peut être dangereux.
!!Clinique
*''Asymptomatique'' durant des années des fois
*''Ictère'' et ''Douleur'' epigastrique ou QSD
!!Investigations
*''Labo'': bilirubine, PA
*''US'' comme premier examen, mais ne montrera pas tous les calculs, donc peu sensible
*''ERCP'' //(Endoscopic retrograde cholangiopancreatography)// comme gold standard, permet aussi de ''traiter'' au passage
!!Traitement
*l'''ERCP'' avec sphincterotomie et mise en place d'un stent est le traitement standard
*Choledocotomie laparoscopique parfois
{{cholecystite.jpg}}
!!Définition
*La ''Cholelithiase'' correspond à des calculs dans la vésicule
*Il existe trois types de calculs
**''cholesterol'': associé obesité, diabète, MICI, contraception, grossesses multiples, cirrhose, mucoviscidose
**''pigmentaires'' associé à l'hémolyse ou la cirrhose alcoolique
**''mixtes'': sont les calculs les plus fréquents
*les ''5-F'' sont un moyen mnémotechnique pour les facteurs de risque:
**Fat
**Female
**Forty
**Fertile (déjà accouché)
**Fair (caucasien)
*Les ''Complications'' possibles sont:
**''Cholécystite'' si obstruction prolongée
**''Cholédocolithiase'' si migration du calcul dans les voies biliaires
**//''Iléus Biliaire''//
**//''Cancer de la vésicule''//
!!Clinique
* généralement ''asymptomatique''
*parfois on peut avoir un calcul qui se coince temporairement, donnant une ''colique biliaire''.
*La'' douleur QSD'' vient des contractions de la vésicule.Elle survient surtout ''la nuit'' et ''après le repas''.
!!Investigations
*''US'' comme examen de choix
**''CT'' ou encore ''IRM''
!!Traitement
*''Pas de traitement'' si le patient est ''asymptomatique'' (sauf si porcelaine ou polypes car risque de cancer! )
*''Chirurgie'' avec cholecystectomie elective si ''récurrences de coliques biliaires''.
*La ''cholestase gravidique'' se manifeste par de ''fortes'' ''démangeaisons'' (prurit) au niveau de la ''paume des mains'', de la ''plante des pieds'' ou du corps entier. Les *démangeaisons se font plus fortes au fil des jours et peuvent devenir telles qu’elles ''empêchent la maman de dormir''. *Dans les formes les plus graves et en l’absence de prise en charge, un ''ictère'' (jaunisse) peut apparaître. Un bilan hépatique (transaminases, acides biliaires) permet alors de confirmer le diagnostic et d’évaluer le degré de la cholestase. *Faire un'' bilan hépatique'' (enzymes seront augmentées) Dans les cas important, on peut décider de ''déclencher'' ''l'''''accoucement'' dés qu'il y a maturité, car ''risque'' pour le bébé.
!!Définition *La Chondrocalcinose, ou ''pseudogoutte'' est une ''arthropathie microcristalline''. Elle est caractérisée par la présence de ''cristaux de Pyrophosphate de Calcium (CPPD''), qui forment des ''dépots'' dans la ''cavité synoviale'' (contrairement à la goutte) et dans les tissus. !!Etiologie *Il existe une ''forme idiopathique'' qui est plutôt observée chez les sujets de >''80ans'' *Il existe aussi une ''forme secondaire'' surtout chez les sujets de <''50ans''. Les causes sont l’hyperparathyroïdie, l’hypothyroïdie et l’hypomagnésémie !!Clinique *La ''crise de pseudogoutte aiguë'' se manifeste par une atteinte surtout ''monoarticulaire''. Les symptômes sont ''comme la goutte'' mais souvent moins forts. Les articulations touchées sont surtout le ''genou'' et le ''poignet''. !!Investigation *Une ''analyse du liquide synoviale'' montrera des ''cristaux de pyrophosphate de calcium'' avec une ''forme rhomboïde'' et une ''biréfringence faiblement positive''. *une ''RX'' pourra montrer des ''calcification des fibrocartilages''. Les trois fibrocartilages concernés sont le ''[[ménisque|chondrocalcinose_rx_menisque.jpg]]'', le ''[[ligament triangulaire du carpe|chondrocalcinose_rx_TFCC.jpg]]'' et la ''[[symphyse pubienne|chondrocalcinosis_rx_pubis.jpg]]''. !!Traitement *Le traitement est ''moins efficace que pour la goutte''. On va donner globalement la même chose, c’est-à-dire des ''AINS'' en premier lieu, de la ''Colchicine'' et une ''infiltration de corticoïdes''.
undefine
undefine
undefine
!!Définition
*La chondromalacie patellaire (ou syndrome rotulien, syndrome fémoro-patellaire) est une ''gonalgie fréquente de l’adolescent''. Elle correspond à une ''douleur antérieur du genou'', qui est due à un ''mauvais cheminement de la patella'' lors de la mobilisation du genou.
*Les pratiquants de la ''course à pied'' sont fréquemment atteints. La pathologie touche plus souvent les ''femmes''.
{{chondromalacie_patellaire_schema.jpg}}
!!Clinique
*Le patient se plaint d’une ''douleur antérieure du genou'', au niveau de la rotule. Le patient décrit souvent la douleur en faisant des cercles autour de la rotule.
*La douleur apparait de manière ''insidieuse'' et peut ''fluctuer''. Elle est souvent ''augmentée par la position assise prolongée'' (« signe du cinéma ») ou la ''montée/descente des escaliers''. Souvent elle ne survient que lors de ''course à pied''.
*L’articulation peut être ''instable'' ou montrer des ''crépitements''.
!!Diagnostic
*Le ''Diagnostic est clinique''. Pas besoin de faire de l’imagerie pour commencer le traitement
*L’Imagerie, à faire si les symptômes persistent, comprennent une ''Rx'' conventionnelle du genou. Plus rarement il est nécessaire d’aller jusqu’à ''l'IRM'' pour chercher des dégâts du cartilage.
!!Traitement
*Le ''Traitement conservateur'' est à initier en premier lieu. Cela passe par le ''Repos'' et surtout de la ''physiothérapie''. On prescrit souvent des ''AINS''.
*La chirurgie est réservée aux cas les plus problématiques (anomalie structurelle et échec du traitement) ce qui reste rare.
undefine
undefine
undefine
undefine
undefine
![ext[cicatrisation.pdf|./pdf/cicatrisation.pdf]] <!-- Texte caché pour la recherche cicatrices stades chéloide cheloide cheloïde chéloïde hypertroph scar -->
undefine
{{cirrhose.jpg}}
!!Définition
*la ''Cirrhose'' Hépatique correspond à un mélange de //''Fibrose + Inflammation''// du foie.
*Histologiquement on retrouve des ''nodules'' de cirrhose entourés de ''tissus fibreux''
*la ''Séverité'' est estimée par le ''Score de Child-Pugh'' qui est séparé en [[CHILD A, B ou C|CHILD_PUGH_score.jpg]].
*les ''Causes'' principales sont:
**''Alcool'' le plus souvent
**''HCV'' surtout mais aussi ''HBV''
**''Médicaments'' (Paracetamol, Methotrexate)
**''NASH''
**Hepatite Autoimmune
**Cirrhose Biliaire Primitive (CBP)
**Hémochromatose, Maladie de Willson
**Déficit en A-AT
*La maladie est d'abord ''Asymptomatique'', de durée variable suivant les patients
!!Clinique
*''HTP''(varices oesophagiennes, varices gastriques, hemorroïdes)
*''Ascite'' (du à HTP + Hypoalbuminémie)
*''Encéphalopathie hépatique'' (surtout l'Ammoniac NH3), avec confusion, asterixis, hyperreflexie, rigidité, foetor hepatique
*''Syndrome Hépatorénal'': dialation splanchnique -> hypoperfusion rénale - > Insuffisance Rénale
*''PBS'' //(péritonite bactérienne spontanée)// surtout à //E.Coli//
*''Angiomes Stellaires'' avec irradiation en[[ toile d'araignée|angiome_stellaire.jpg]].
*''Diathèse Hémorragique'' avec déficit en AVK et INR augmenté
*''CHC'' chez 20% des patients en cirrhose
!!Traitement
*''STOP'' la cause
*''Transplantation'' comme seul vrai traitement, dépend d'une abstinence d'alcool et de certains autres critères d'inclusions
![ext[cbp_csp.pdf|./pdf/cbp_csp.pdf]] <!-- Texte caché pour la recherche -->
undefine
{{CIVD.jpg}}
!!Généralités
*la CIVD est caractérisée par des ''thromboses'' et des ''hémorragies'' de manière ''simultanée''. Elle est causée par une ''activation massive'' de la ''coagulation'' et de la ''fibrinolyse'' amenant à une ''consommation des plaquettes, fibrine'' et ''facteurs de coagulation''.
*Elle peut être aigue (risque de mortalité) ou plus chronique. Elle survient typiquement chez des patients aux soins intensifs.
*La ''Cause'' est surtout les ''infections (Sepsis'' surtout, mais pas que). On peut aussi trouver les ''chocs hémorragiques'', les ''néoplasies'', les ''trauma'', le ''venin de serpent'', etc.
*A la ''Clinique'' on observe surtout des ''hémorragies (pétéchies, hématomes, Gastro-intestinales'', etc.). Les thromboses surviennent surtout lors des cas chroniques.
*le ''Diagnostic'' se fait par le ''Labo''. On y retrouve une ''diminution des plaquettes'', une ''diminution du fibrinogène'', une ''augmentation des D-Dimères'' et un ''allongement du TTP'' et du ''Quick(TP'') ou de l’INR.
*le ''Traitement'' passe d’abord par le ''traitement de la cause''. Pour ce qui est du ''traitement de substitution'' on peut donner des ''transfusions de plaquette'' et du ''PFC'' (Plasma Frais Congelé qui contient les facteurs et inhibiteurs de coagulation), en fonction des déficits.
undefine
undefine
<<tabs "[[Rhumatologie]] [[Hématologie]] [[Endocrinologie]] [[Neurologie]] [[Cardiologie]] [[Pneumologie]] [[Gastro-Entérologie]] [[Néphrologie]] [[Infectiologie]] [[Chirurgie]] [[Pédiatrie]] [[Gynéco-Obstétrique]] [[Psychiatrie]] [[Ophtalmologie]] [[Dermatologie]] [[ORL]] [[Oncologie]] [[ECG]] [[Prescriptions]] [[FINAL]] [[LIVRES]]" "Rhumatologie" "Rhumatologie" "tc-vertical">>
Clinique
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{Coarctation_aorte_schema.jpg}}
!!Généralités
*la ''Coarctation de l'aorte'' est une ''Cardiopathie Congénitale'' de type ''obstructive'' et ''non cyanogène''.
*Elle consiste à un ''rétrécissement de l'aorte juste après la crosse'', le plus souvent ''au niveau du ductus arteriosus''.
*Elle est fréquement ''associée'' a une ''valve bicuspide'' ou à un ''syndrome de Turner''.
*La ''Clinique ''est souvent ''asymptomatique''.
*A l'''Examen Clinique'' on note une ''différence de pression entre le MS et le MI'', avec comme différence significative ''>20mmhg''.
*On peut aussi noter une ''dissociation des pouls fémoraux-brachiaux''.
* On peut aussi noter un ''souffle systolique''.
*Si la sténose est''sévère'', on peut trouver un ''choc à la fermeture du ductus'' à la naissance.
*Le diagnostic se fait par ''US'' ou ''IRM.'' A noter qu'à la ''RX'' on peut noter des //''rib notching''// qui est du aux vx. intercostaux dilatés.
{{coarctation_aorte_rib_notching_rx.jpg}}
undefine
undefine
undefine
!!Définition *''Réaction'' provoquée par les petites quantité de ''protéines de lait de vache'' provenant de l’''alimentation maternelle'' présentent dans le ''lait maternel''. *''Symptômes'': __''Sang frais isolé dans les selles chez nourrisson en parfait état général.''__ *Laboratoire: SPT ou sp IgE négatifs *''Traitement'': __''Régime sans lait et laitiers chez la mère''__ *Pronostic: Guérison spontanée avant l’âge de 1 an
{{colique_ischemique.jpg}}
!!Généralités
*la ''colite ischémique'' est la forme la plus courante d'''ischémie intestinale'', qui peut être très sévère. Elle touche plutôt les ''personnes âgées''.
*Elle est due à des artères rétrécies ou occlues.
*le colon est vascularisé par la ''SMA'' ainsi que la ''IMA'', qui sont anastomosées par l'[[arcade de Riolan|arcade_riolan.jpg]].
*le rectum a une autre vascularisation via les artères iliaques, donc est peu sujet à l'ischémie
*Les ''Causes'' peuvent être:
**''athérosclérose'' avec rétrécissement
**''hypotension'' sur IC, une chirurgie, un trauma ou un choc
**une ''occlusion'' d'une artère voir une veine thrombosée
**une ''vasculite''
*La ''Clinique'' comprend
**''douleur abdominale''
**''sang dans les selles''
**''diarrhées''
*les ''Complications'' comprennent:
**''nécrose'' du segment
**''perforation'' intestinale
**Sténose ischémique
*les ''Investigations'' comprennent:
**''CT-scan''
**''Angio-CT''
*le ''Traitement'' dépend de la sévérité:
**''Antibiotiques''
**''Chirurgie'' pour les cas avancés, sinon la maladie est auto-limitante
{{colite_pseudomembraneuse.jpg}}
!!Définition
*La ''colite pseudomembraneuse'' //(ou colite associée aux antibiotiques)// est une colite à ''//c.difficile//'' survient chez les patients sous ''traitement antibiotique''.
*Les antibiotiques tuent les bactéries qui inhibent le //c.difficile//, ce qui fait que la bactérie prolifère, elle et ses ''//toxines//''.
*N'importe quel ATB peut la déclencher, mais particulièrement la //clindamycine//, //l'ampicilline//, and //la céphalosporine//.
*Les symptômes apparaissent généralement ''dans la semaine'' du traitement, mais peuvent survenir //jusqu'à 6 semaines// après les ATB. La sévérité est variable.
!!Clinique
*''Diarrhées abondantes'' généralement ''non sanglantes''.
*''Crampes abdominales'' douloureuses
*[[Megacolon Toxique]] dans les cas graves
!!Investigations
*Mise en évidence de la ''toxine de''''// c.difficile//'' ''dans les selles'', mais le résultat prend ''minimum 24h'' à parvenir
*''Sigmoidoscopie flexible'' est l'examen le plus rapide a réaliser mais très ''inconfortable'' donc peut fait
**Le ''Labo'' peut mettre en évidence une ''Leucocytose''
**faire une ''RX '' pour exclure le [[Megacolon Toxique]]
!!Traitement
*''STOP ATB'' si possible
*le ''Metronidazole'' est l'ATB de choix pour //c.difficile//
*les ''récidives'' sont fréquentes, 2-8 semaines après le traitement
undefine
undefine
undefine
!! Définition
* Le ''Coma'' est une ''altération de l'état de conscience'' avec ''diminution de réponse aux stimulations'', avec un incapacité à l'éveil.
*la ''profondeur'' du coma est estimée par la ''GSC'' qui n'est valide que pour les trauma. Un ''Coma = Glasgow ≤8''
*Le Coma implique souvent une atteinte des Cortex et du SRAA (Système Réticulé Activateur Ascendant) responsable de l'état d'éveil.
*A ne pas confondre avec le ''locked-in syndrome'' qui est souvent dû à un ''AVC ischémique basilaire'' avec atteinte du pont donnant une ''tétraplégie et mutisme'' mais avec ''conservation de la conscience et du regard vertical''
*A ne pas non plus confondre avec une ''conversion hystérique psychogène'' dans laquelle il persiste une ''réponse occulo-vestibulaire normale'' témoignant d'un tronc cérébral efficace, ainsi que des ''manoeuvres d'évitement du bras'' fonctionelles.
!! Prise en charge
# Constater l'Inconscience avec ''AVPU'' (Alert, Verbal, Pain, Unresponsive) et ''GSC''
#''A'': libérer les voies respiratoires + C-spine. Le risque n°1 est la mauvaise protection des voies aériennes et l'incapacité d'avaler ses sécrétions.
#''B'': respiration, [[type de respiration|respirations_types.jpg]], besoin d'intubation ? (ACR si absent)
#''C'': Pouls (ACR si absent) pouvant être tachycarde ou bradycarde (HTIC), Perfusion, Cyanose.
#''D'': Examen neurologique de base avec Pupilles et Reflexes Occulo-Céphalique et Occulo-Vestibulaire (//COWS//: Cold Opposite Warm Side)
#''Equipement'': Pulsoxymètre, Tension, VVP, analyses sanguines
#''± donner un [[Cocktail Intoxication|Intoxications]]''
!!Glasgow Coma Scale
{{glasgow_coma_scale.jpg}}
![ext[communication_interauriculaire.pdf|./pdf/communication_interauriculaire.pdf]] <!-- Texte caché pour la recherche Atrial septal defect There are two main types of atrial septal defect (ASD): • • Secundum ASD (80% of ASDs) (Fig. 17.5a) Partial atrioventricular septal defect (primum ASD, pAVSD) (Fig 17.5b). Both present with similar symptoms and signs, but their anatomy is quite different. The secundum ASD is a defect in the centre of the atrial septum involving the foramen ovale. Partial AVSD is a defect of the atrioventricular septum and is characterised by: • • An inter atrial communication between the bottom end of the atrial septum and the atrioventricular valves (primum ASD) - Abnormal atrioventricular valves, with a left atrioventricular valve which has three leaflets and tends to leak (regurgitant valve). Clinical features Symptoms • • • None (commonly) Recurrent chest infections/wheeze Arrhythmias (fourth decade onwards). Physical signs (Fig. 17.5c) • • • An ejection systolic murmur best heard at the upper left sternal edge – due to increased flow across the pulmonary valve because of the left to right shunt - - (see Fig. 17.13d) Pitfalls • P wave morphology is rarely helpful in children - • Partial right bundle branch block – most are normal children, although it is common in ASD • Sinus arrhythmia is a normal finding. ASD, atrial septal defect. A fixed and widely split second heart sound (often difficult to hear) – due to the right ventricular stroke volume being equal in both inspiration and expiration With a partial AVSD, an apical pansystolic murmur from atrioventricular valve regurgitation. Investigations Chest radiograph (Fig. 17.5d) 306 Cardiomegaly, enlarged pulmonary increased pulmonary vascular markings. arteries and Cardiac disorders Atrial septal defect (a) (c) (b) (d) Secundum atrial septal defect Enlarged heart Enlarged pulmonary arteries Increased pulmonary vascular markings A2 P2 Partial AVSD Right (e) (f) Secundum ASD V 1 RSR 1 in V 1 axis deviation Right bundle branch block Partial AVSD – Fixed AVF Superior axis (negative deflection in lead AVF) 2 6 3 6 1 6 Figure 17.5 Atrial septal defect (a) The ostium secundum atrial septal defect (ASD) is a deficiency of the foramen ovale and surrounding atrial septum. (b) Partial atrioventricular septal defect (AVSD) is a deficiency of the atrioventricular septum. (c) Murmur. (d) Chest radiograph. (e,f) ECG. (g) Examples of an occlusion device used to close secundum atrial septal defects. (g) ECG • Secundum ASD – partial right bundle branch block is common (but may occur in normal children), right axis deviation due to right ventricular enlargement (Fig. 17.5e) • Partial AVSD – a ‘superior’ QRS axis (mainly negative in AVF) (Fig 17.5f ). This occurs because there is a defect of the middle part of the heart where the atrioventricular node is. The displaced node then conducts to the ventricles superiorly, giving the abnormal axis. Echocardiography This will delineate the anatomy and is the mainstay of diagnostic investigations. Management Children with significant atrial septal defect (large enough to cause right ventricle dilation) will require treatment. For secundum ASDs, this is by cardiac cath eterisation with insertion of an occlusion device (Fig 17.5g), but for partial AVSD, surgical correction is 1 2 4 3 307 5 Cardiac disorders required. Treatment is usually undertaken at about 3–5 years of age in order to prevent right heart failure and arrhythmias in later life. -->
![ext[communication_interventriculaire.pdf|./pdf/communication_interventriculaire.pdf]] <!-- Texte caché pour la recherche Ventricular septal defects Ventricular septal defects (VSDs) are common, account ing for 30% of all cases of congenital heart disease. There is a defect anywhere in the ventricular septum, perimembranous (adjacent to the tricuspid valve) or muscular (completely surrounded by muscle). They can most conveniently be considered according to the size of the lesion. Small VSDs These are smaller than the aortic valve in diameter, perhaps up to 3 mm. Clinical features Symptoms • Asymptomatic. Physical signs • Loud pansystolic murmur at lower left sternal edge (loud murmur implies smaller defect) • Quiet pulmonary second sound (P 2 ). Investigations Chest radiograph • Normal. ECG • Normal. Summary Left-to-right shunts Echocardiography • 17 Demonstrates the precise anatomy of the defect. It is possible to assess its haemodynamic effects using Doppler echocardiography. There is no pulmonary hypertension. Management These lesions will close spontaneously. This is ascer tained by the disappearance of the murmur with a normal ECG on follow up by a paediatrician or paedi atric cardiologist and by a normal echocardiogram. While the VSD is present, prevention of bacterial endo carditis is by maintaining good dental hygiene. - Large VSDs These defects are the same size or bigger than the aortic valve (Fig. 17.6a). Clinical features Symptoms • • Heart failure with breathlessness and failure to thrive (faltering growth) after 1 week old Recurrent chest infections. Physical signs (Fig. 17.6b) • • • • Tachypnoea, tachycardia and enlarged liver from heart failure Active precordium Soft pansystolic murmur or no murmur (implying large defect) Apical mid diastolic murmur (from increased flow across the mitral valve after the blood has circulated through the lungs) - Lesion Symptoms Signs Management ASD Secundum None ESM at ULSE Fixed split S 2 Catheter device closure at 3–5 years Partial AVSD None ESM at ULSE Fixed split S 2 Pansystolic murmur at apex Surgery at 3 years VSD Small (80–90% of cases) None Pansystolic murmur at LLSE None Large (10–20% if cases) Heart failure Active precordium, loud P 2 , soft murmur, tachypnoea, hepatomegaly Diuretics, captopril, calories Surgery at 3–6 months old PDA None Continuous murmur at ULSE ± bounding pulses Coil or device closure at cardiac catheter at 1 year, or ligation ASD, atrial septal defect; AVSD, atrioventricular septal defect; VSD, ventricular septal defect; PDA, persistent ductus arteriosus; ESM, ejection systolic murmur; ULSE, upper left sternal edge; LLSE, lower left sternal edge. 308 Cardiac disorders Large ventricular septal defect (a) (c) (b) A2 P2 Ventricular septal defect (d) V 1 Inverted T wave suggests no pulmonary hypertension Upright T wave indicates pulmonary hypertension Enlarged heart Enlarged pulmonary arteries Increased pulmonary vascular markings Figure 17.6 Ventricular septal defect. (a) Ventricular septal defect showing a left to right shunt. (b) Murmur. (c) Chest radiograph. (d) ECG. - - • Loud pulmonary second sound (P 2 ) – from raised pulmonary arterial pressure. Investigations Chest radiograph (Fig. 17.6c) • Cardiomegaly • Enlarged pulmonary arteries • Increased pulmonary vascular markings • Pulmonary oedema. ECG (Fig. 17.6d) • Biventricular hypertrophy by 2 months of age. Echocardiography • Demonstrates the anatomy of the defect, haemodynamic effects and pulmonary hypertension (due to high flow). Management Drug therapy for heart failure is with diuretics, often combined with captopril. Additional calorie input is required. There is always pulmonary hypertension in children with large VSD and left to right shunt. This will ultimately lead to irreversible damage of the pul monary capillary vascular bed (see Eisenmenger syn drome, below). To prevent this, surgery is usually performed at 3–6 months of age in order to: - - • • Manage heart failure and failure to thrive Prevent permanent lung damage from pulmonary hypertension and high blood flow. -->
<<tabs "[[Examen Clinique]] [[ECG]] [[Auscultation]]" "Examen Clinique" "" "tc-vertical">>
undefine
undefine
undefine
!!''Prévention du déficit du tube neural''
*Supplémentation en acide folique de 8-12 semaines pré-conceptionnelles jusqu'à la fin du 1er trimestre
*0.4-1mg/j pour toutes les femmes ; 5mg si ATCD de déficit du tube neural, médicaments anti-épileptiques, DM, ou BMI >35.
!!''Déficit en fer durant la grossesse''
*Sx et investigations idem adulte
*80% des anémie non physiologiques durant la grossesse
{{fer-grossesse.jpg}}
!!''Hyperémèse gravidique''
*''Définition''
**N/V résistants, en général durant le 1er trimestre (puis diminution, mais parfois peut persister durant toute la grossesse)
**1% des grossesses
*''Etiologie '': multifactoriel (hormonal, immunologique, psychologique). Probablement dû à l'augmentation rapide de la beta-HCG et des niveaux d'oestrogènes.
*''Investigations''
**Exclure une cause systémique (inflammation GI, PNA, thyréotoxicose)
**Exclure des autres causes obstétriques : grossesses multiple, HELLP
**FSC, électrolytes, BHU, créatinine, analyse urinaire, tests hépatiques
**US
*''Traitement''
*Suppléments en thiamine
*Non pharamcologique : éviter de mélanger les solides et fluides, repas petits et fréquents, augmenter le repos.
*Pharmacologique : métoclopramine, ondansetron etc.
*Si sévère : admission à l'hopital, SNG, ev liquide IV, traiter un éventuel déséquilibre hydroélectrique.
*''Complications''
*Maternelle : DH, désorder électrolytique
**Syndrome de Malloey-Weiss (déchirure entre le cardia et l'estomac provoqué par les vomissements répétés -> hémorragie digestive haute)
**Enchépahlopathie de Wernicke si dure
**Décès
*Foetus : en général rien, RCIU si perte de >5% du poids pré-grossesse.
!!''Grossesse multiple''
*Incidence des jumeaux 1/80
*2/3 sont dizygotes (FR de dizygotes : FIV, âge maternel, pilule arrêtée il y a peu, ethnie)
**Déterminé par le nombre de placentas, l'épaisseur des membranes, le sex et le groupe sanguin
*Monozygote 1/250
{{grossesse-multiple.jpg}}
*''Complications''
{{complicaitons-grossesse-multiple.jpg}}
{{complicaitons-grossesse-multiple2.jpg}}
__''
Syndrome de transfusion twin-twin ''__
*10% des monochorioniques
*Le sang du jumeau donneur passe à travers le placenta dans la veine du jumeau receveur
*Jumeau donneur : RCIU, hypovolémie, hypotension, anémie, oligohydramnios
*Jumeau receveur, hypervolémie, HTA, IC chronique, polycythémie, oedème, polyhydramnios, ictère nucléraire en néonatal. *Investigations: US, doppler
*Traitement : amniocentèse thérapeutique pour décomprimer le polyhydramnios du jumeau receveur et diminuer la pression sur le placent ; transfusion intrautérine au jumeau donneur, occlusion laparoscopique des vaisseaux du placenta
*''Prise en charge''
**US pour déterminer la chorionicité durant le 1er trimestre (8-12 SA)
**Surveillance anténatale augmentée (US chaque 2-3 semaines dès 24 SA pour voir la croissance)
**Accouchement vaginal si le jumeau 1 est en présentation céphalique, sinon CS (parfois jumeau 1 AVB et 2 CS)
!!''Abruptio Placentae''
*= Décollement placentaire
*''Classification''
**Total (mort foetale inévitable) vs partiel
**Externe/révélé/apparent : le sang dissèque vers le bas en direction du col
**Interne / caché (20%) : le sang dissèque vers le haut en direction du foetus.
{{abruptio-placentae.jpg}}
*''Clinique'' :
**Saignement vaginal ''Douloureux'' (sauf si le saignement est caché), sensibilité utérine, cotnractions utérines
**Douleur d'apparition brutale, constante, du bas du dos et utérus.
**Choc/anémie dysproportionnée p/r à la perte de sang
**± Détresse foetale, liquide amniotique sanglant
**± Coagulopathie
*''Complications''
**Mortalité périnatale du foetus, prématurité, hypoxie intra-utérine
**Maternelle : mortalité <1%, CIVD (20%), IRA, anémie, choc hémorragique, nécrose pituitaire, embolie amniotique.
*''Investigations'' : diagnostic clinique <font color = "red"> (US pas sensible !) </font>
*''Prise en charge''
**Stabilisation maternelle (liquide IV, O2) et monitoring maternel : SV, BHU, perte de sang, FSC, crase
**CTG
**''Accouchement''
!!''Grossesse prolongée''
*''Définition'' : grossesse >42 SA
*5% des grossesses
*''Etiologie'' :
**Idiopathique ++
**Foetus anencéphale (sans glande pituitaire)
**Déficit en sulfatase placentaire (rare)
*''Présentation clinique'' :
**''Syndrome de post-maturité'' (10-20%) : perte de poids foetale, diminution de la graisse sous cutanée, peau sèche (dû à l'insuffisance placentaire), corps long et fin, yeux ouverts, alerte, longs ongles, paumes et plantes ridées.
**Avec l'âge gestationnel qui augmente, le risque augmente de : ''infection intra-utérine, asphyxie, aspiration de méconium, insuffisance placentaire, infarctus placentaire, macrosomie, dystocie, détresse foetale, accouchement instrumenté, pneumonie, épilepsie, USI''.
*Prise en charge :
**40-41SA : expectative sauf si FR
** >41 SA : déclenchement de l'accouchement par voie basse si pas de CI (diminue le risque de CS, de changement de ryhtme cardiaque doetal, de liquide méconial, de macrosomie, et de décès)
**Surveillance : mouvements foetaux, fluide amniotique. Déclencher l'accouchement si le liquide amniotique diminue.
*Pronostic : si >42 SA: mortalité périnatale 2-3x plus haute (causé par l'insuffisance utéroplacentaire progressive). La mortalité est d'autant plus haute s'il y a une HTA, un DM, une grossesse multiple, etc.
!!''HTA''
!!!Pré-existante
*TA'' >140/90 avant 20 SA ''et'' persistant >7 semaines post-partum ''
*HTA essentielle associée avec un risque augmenté d'HTA gestationnelle, de décollement placentaire, de RCIU et de mort in utéro.
!!!Gestationnelle
*''TAs >140 ou TAd >90 se développant après 20 SA ''chez une femme normotendue avant la grossesse.
*''FR'':
**Primigeste
**Première conception avec un nouveau partenaire
**ATCD ou AF+ pour le diabète gestationnel
**DM, HTA chronique ou IR
**Syndrome anti-PL
**Âge maternel extrême (<18ans ou >35ans)
**ATCD de FC ou de mort in utéro
**FR foetaux : RCIU, oligohydramnios, néoplasie trophoblastique gestationnelle, grossesse multiple, hydrops feotal.
*''Sx '': Douleur du quadrant supérieur D, céphalées, troubles visuels
{{sx-HTA-gravite.jpg}}
*''Evaluation'' :
**Maternelle : poids, SNC (céphalées, problèmes visuels, trembelement, irritabilité, hyperréflexie -> sévérité), saignement, pétéchies, dig (douleur épigastrique ou HD, N/V ++), rénal (flux), oedème des mains et du visage
**Foetus : mouvements, CTG, croissance, doppler
**Labo : FSC, crase, ALAT/ASAT, urée-créat, protéinurie
*''Complications ''
**Maternelle : dysfonction rénale et hépatique, épilepsie, décollement placentaire, IC D / OAP, CIVD, HELLP syndrome (traiter avec échange plasmatique), AVC hémorragique
**Foetal (2° à l'insuffisance placentaire) : RCIU, prématurité, décollement placentaire, mort IU.
{{HELLP.jpg}}
*Pré-eclampsie
*Eclampsie
*Prise en charge
**si peu sévère (<160/<105) : labetalol, nifédipine PO (But : TAH 130-155 / 80-105)
**Si sécère (>160/110) : labétalol IV, nifédipine haute dose
**//NB : IEC, durétiques CI//
!!''Diabète''
*Complique 2-4% des grossesse
*''Classification''
**DM type 1-2
**Diabète gestationnel : débute durant la grossesse (vers 24-28 SA)
***Etiologie : facteurs anti-insuline produits par le placenta et cortisol maternel élevé -> augmentation de la résistance périphérique à l'insuline (-> Diabète gestationnel ou péjoraiton d'un DM déjà existant)
''Prise en charge d'un diabète pré-existant''
*''Pré-conceptionnel'' :
**Planification de la grossesse
**Optimiser le contrôle glycémique
**Expliquer à la patiente les risques et complications
**Check : rétinopathie diabétique, neuropathie, maladie coronarienne
*''Grossesse'' :
**Si médicament PO -> switch pour insuline (tératogénicité inconue pour les hypoglycémiants oraux)
**Contrôle glycémique rapproché
**Contrôle de la grossesse normal + protéinurie de 24h et Clcr de base, examen de la rétine, HbA1c
***HbA1c >140% de la valeur pré-gestationnelle augmente le risque de FC et de malformations congénitales
**Surveillance foetale augmentée, ± écho-cardiographie pour chercher des anomalies cardiaques
*''Accouchement''
**Si le glucose est bien contrôler, on peu attendre un accouchement spontanné
**Déclencher dès 38 SA
**Plus de risque de dysproportion céphalo-pelvienne et de dystocie des épaules -> plus de risque de CS
*''Post-partum '':
**Risque d'hypoglycémie néonatale
**Les besoins en insuline de la mère diminuent rapidement dès expulsion du placenta (pas d'insuline pour les 1er 48-72h du post partum en général)
''Prise en charge du diabète gestaitonnel''
*Dépistage : toutes les femmes enceintes entre 24-28 SA
*Test de tolérance au glucose avec 75g de glucose
**Diagnostic si glucose à jeun ≥5.1, 1h post prandial ≥10, 2h post prandial ≥8.5 mmol/L.
*Prise en charge :
**1er : modifications de la diète et augmentation de l'activité physique.
**Insuline si les cibles gyécmiques ne sont pas atteintes dans les 2 semaines de modifications du style de vie
**Cibles : glucose à jeun <5.3, 1h post prandial <7.8 et 2h post prandial <6.7 mmol/L.
*Suivi : test de tolérance au glucose avec 75g de glucose 6 semaines post-partum (et par la suite tous les 2ans).
''Pronostic''
*Complications maternelles et foetales dues à l'hyerglycémie
*DM 1 et 2 : risque de rétinopathie progressive et néphropathie
*Diabète gestationnel : 50% de risque de développer un DM2 dans les 20 années suivantes.
''Complications du diabète ''
{{Complications-DM.jpg}}
{{Complications-DM2.jpg}}
!!''Epilepsie''
*Complique 1/200 grossesses
*Risque de décès maternel, de mauvais développement foetal et les anti-épileptiques sont souvent tératogènes
!!!''Pré-conceptionnel''
*Conseil et éducation
*Supplément d'acide folique de 0.4mg/j depuis min 1mois avant la conception. La dose augmente à 4mg si la femme prend des anti-épieptiques durant la grossesse.
*Médication en monothérapie avec le médicament le moins tératogène si possible. On peut considérer de retirer les médicaments si la maman n'a pas eu de crises depuis ≥2ans.
!!!''Durant la grossesse''
*''Risque d'augmentation de la fréquence des crises'' (avec risque de mortalité ainsi que de malformations foetales).
*Risque augmenté surtout car le niveau d'anti-épileptique peut être ''infra-thérapeutique'' ainsi qu'un s''euil épileptogène plus bas''.
**Le niveau infra-thérapeutique de médicament est notamment dû aux complications de la grossesse tels que les N/V, diminution de la motilité GI, IPP (diminue absorption), hypervolémie de la grossesse, induction d'enzymes hépatiques et augmentation de la filtration glomérulaire.
**La baisse du seuil épileptogène est partiellement dû au manque de sommeil lié à la grossesse et à l'hyperventilation et la douleur durant le travail,
''Complications''
*Plus de risque de CS, d'HTA, de pré-éclampsie et d'hémorragie du post-partum, ainsi que de dépression du post partum. Les BB ont également 10x plus de chance de développer une épilepsie.
*''Tératogénicité'' : dû aux médicaments anti-épileptiques
|!Phénitoïne|Syndrome cranio-facial, syndrome hydanotin feotal hypoplasie des ongles, déficit de croissamce, anomalies foetales, fente labio-palatine |
|!Phénobarbital|Bec de lièvre, anomalies cardiaques, malformaitons urinaires|
|!Valproate|Déficit du tube neural, bec de lièvre, anomalies cardiaques, retard de développement|
|!Carbamazépine|spina bifida, syndrome hydanotin feotal |
|!Lamotrigine|Bec de lièvre |
|!Topiramate|Bec de lièvre |
//NB : syndrome hydantoine foetale : RCIU, retard mental, dysmorphogenèse faciale, anomalies congénitales //
''Prise en charge''
*Traitement contre les N/V
*Eviter les stimuli provoquant des crises
*Compliance médicamenteuse
*Rechercher des anomalies à l'US au milieu de la grossesse si anti-épileptiques.
!!''Dermatoses de la grossesse ''
*5% des grossesses
*Apparence similaire, prurit fréquent
#''Choléstase intra-hépatique gestationnelle''
##Fréquent, causé par une élévation des niveaux sanguins d'acide biliaire.
##Clinique : ictère, prurit ou les deux
##Pas de lésion primaire, lésions de grattage
##Augmente le risque de morbidité
##Ttt : antiprurigineux, cholestyramine acide ursodeoxycholique
#''Papules urticariennes prurigineuses et plaques de grossesse (PUPPP)''
##Fréquent
##Papules erythémateuses ou plaques, patchy ou généralisé sur l'abdomen, les cuisses, les fesses, en particulier dans les vergetures mais pas sur l'ombilic
##Ttt : antiprurigineux, émollients, stéroides topiques ou PO si sévère
#''Eruption atopique de la grossesse ''
##Eczema de la grossesse (fréquent) : patch secs et rouges sur les plis de flexion des extrémités, le cou et le visage
##Prurigo de la grossesse (fréquent) : papules rouges prurigineuses 1-5mm sur les surfaces des extenseurs et le tronc
##Folliculite pruritique de la grossesse (rare) : petites papules rouges, pustules stériles sur le tronc
##Ttt : antiprurigineux, émollients, stéroides topiques ou PO si sévère
#''Pemphigoide gestationnel ''
##Rare
##Papules, plaques, vésicules et bulles purigineuses érythémateuses, sur l'abdomen (et l'ombilic) et les extrémités
##Complicaitons : prématurité, RCIU, lésions néonatales transitoires
##Ttt : antiprurigineux, émollients, stéroides topiques ou PO si sévère
!!Mastite
*''Définition'' : inflammation de la glande mammaire
*''DD'' : carcinome inflammatoire, éctasie du canal mammaire (femmes post-ménopause surtout = bouchon d'un canal mammaire)
*''Types'' :
{{mastite.jpg}}
!!!Crevasses
*''Définition'' : Plaie traumatique au mamelon, essentiellement les premiers jours de l'allaitement
* ''Facteurs'' ''favorisants'' :
**Mauvaise mécanique de succion ou mauvaise position de l’enfant,
**Macération ou dessèchement excessif du mamelon,
**Mauvaise hygiène (en général par excès avec neutralisation de la substance lubrifiante et désinfectante sécrétée par glandes sébacées)
*''Clinique'' : gerçure sensible -> ulcération (mamelon rouge vif, saignement et douleur ++ lors des tétées), porte d'entrée microbienne
*''Complications'' : lymphagite, abcès
*''Traitement'' : Favoriser cicatrisation (séchage, interrompre la succion dès la fin de la tétée). Si nécessaire laisser le sein au repos pendant 6-12h
!!Inversion utérine
*''Définition'' : inversion de l'utérus à travers le cervix ± introit vaginal
*''Etiologie'' : iatrogène (lors de la délivrance si on tire trop), tocolytiques, surtout si multipare (ligament utérin lax)
*''Présentation'' ''clinique'' : réponse vasovagal profonde avec bradycardie, vasodilatation et choc hypovolémique (choc disproportionné p/r à la perte de sang maternelle)
*''Traitement'' :
**ABC (cristalloides IV)
**Tocolytiques ou nitroglycérine IV pour relâcher l'utérus et faciliter la réduction.
**Réduire l'utérus sans enlever le placenta, puis enlever doucement le placenta.
**Ocytocine IV une fois que utérus en place
!!EF du post partum
*''Définition'' : EF >38° durant 2 jours des 10 premiers jours du post-partum, excepté J1.
*''Etiologie'' : endométrite, infection de plaie (CS, épisiotomie), mastite/engorgement, ITU, atélectasie, pneumonie, thrombophlébite, TVP
{{etiologie-postpartum-EF.jpg}}
*''Traitement'' :
**Infection : ATB empirique (endométrite : clindamicine + gentamicine IV) (mastite : cloxacilline ou céphalexine) (infection de plaie : cephalexine)
**TVP : anticoagulation
!!!Endométrite
*''Définition'' : Infection du myomètre utérin et des paramètres
*''Clinique'' : EF, frissons, douleur abdominale, douleur utérine, pertes malodorante, lochie (pertes vaginale du post partum).
*''Facteurs de risque'' : CS, chorioamnionite intrapartum, travail prolongé, rupture des membranes prolongées, multiples examens vaginaux.
*''Investigations'' : hémocultures, cultures génitales
*''Traitement'' : ATB oral ou IV si sévère
**Prophylaxie de l'endométrite post CS : ATB dès clampage du cordon, 1-3 doses de céphazoline.
!!Dépression du post partum
*''Définition'' : Dépression majeure des femmes dans les 6mois après accouchement
*''Fréquent'' (10-15%, risque de récurrence 50%)
*''FR '': ATCD personnel ou AF+ de dépression, dépression ou anxiété préénatale, situation de vie stressante, peu d'entourage, grossesse non désirée, enfant malade ou avec des coliques.
*''Présentation'' ''clinique'' : labilité émotionnelle, tristesse, augmentation de la sensibilité à la critique, fatigue, irritabilité, anxiété, insomnie, mauvaise concentration, durant ''≥2 semaines'' ou si les ''symptômes'' des 2 premières semaines sont ''sévères'' (désintérêt pour le BB, idées de suicide ou infanticide)
*''Traitement'' : antidépresseurs, psychothérapie
*''Pronostic'' : peut avoir des effets à long terme car interfère avec la relation mère-BB
!!Psychose du post partum
*''Définition'' : apparition de symptômes psychotiques durant 24-72h durant le premier mois du post-partum (peut être dans le contexte d'une dépression)
*''Rare''
!!Incontinence urinaire
*Un ''prolapsus'' du ''plancher'' ''pelvien'' peut arriver après un AVB (le risque est augmenté avec un accouchement instrumenté ou un travail prolongé)
*Induit une incontinence urinaire de ''stress'' ou de type ''urgence''.
*''Traitement'' : phsyiothérapie, pessaires, modifications du style de vie ou bandelette vaginale.
!!Incontinence fécale
*Lors d'accouchement AVB, il peut y avoir une déchirure du périnée allant jusqu'aux muscles du sphincter anal.
*Risque d'incontinence fécale
*''Traitement'' : chirurgie
undefine
undefine
undefine
![ext[Contraception.pdf|./pdf/Contraception.pdf]] <!-- Texte caché pour la recherche Historique The History of contraception museum Historique L'infanticide mentionné par l'empereur chinois Shên Nung (2737-2696 av J.-C.) Le coït interrompu Potions à base de plantes La gousse d'une plante proche du gombo sert de préservatif féminin en Guyane Spermicides tels que l'acide tannique, extrait de la noix de galle, est contenu dans les tampons des femmes de Sumatra. les Antillaises rinçaient leur vagin au jus de citron. Au Dahomey les femmes utilisent des tampons de racines broyées. Préservatifs masculins, en peau de serpent ou en boyaux d'animaux, reconnus « contraceptifs » qu’au XVIIIe siècle. Les Arabes pratiquaient le stérilet, au moins dans son principe : ils plaçaient des pierres rondes dans l'utérus de leurs chamelles. Méthodes Contraceptives HORMONALE NON – HORMONALES Contraceptif oral combiné Préservatif féminin et masculin Anneau vaginal Cap et diaphragme Patch DIU contenant du cuivre Pilule progestative Calendrier Injection trimestrielle Ligature tubaires et vasectomie Implant hormonal Aménorrhée de lacatation DIU LNG Contraception d’urgence 4 Efficacité des mesures contraceptives • L’évaluation de l’efficacité d’un contraceptif dépend de plusieurs facteurs: – Taux de grossesse pour une utilisation PARFAITE: efficacité intrinsèque du moyen de contraception – Taux de grossesse pour une utilisation TYPIQUE: utilisation habituelle (parfois incorrecte ou inconstante) du moyen de contraception – Taux de grossesse pour une utilisation incorrecte: utilisation incorrecte ou inconstante du moyen de contraception – Taux d’utilisateurs parfaits: reflète comme il est difficile d’utiliser un moyen de contraception correctement et de façon constante. Source: contraceptive failure in USA, Trussell J, Contraception, 2011 L’Index de Pearl Nombre de grossesses accidentelles observées en un temps d’exposition à une méthode contraceptive donné Unité de temps: La Femme-Année Unité de mesure: Index de Pearl: Nombre de grossesses accidentelles observées pour 100 Femme-Année (1200 mois ou 1300 cycles) Plus l’index est proche de ZÉRO plus la méthode est fiable et moins l’on observe de grossesses accidentelles La Contraception hormonale Contraceptifs hormonaux ŒstroProgestatifs (COP) MECANISMES D ’ ACTION: 1. Central: Inhibition de la libération de gonadotropines hypophysaire, suppression de l’ovulation. 2. Utérin: atrophie de la muqueuse de l’endomètre, anti-nidatoire, contragestif 3. Cervical: mucus épaissit: bloque l’ascension des spermatozoïdes/germes Les contraceptifs hormonaux oestroprogestatifs sont donc la contraception de premier choix en raison de leur excellente tolérance et de leur efficacité. 8 Effet progestatif du contraceptif • Repos complet axe HT-HP après 7j contraception • Glaire hostile au spermatozoides 3-4h après prise d’un Pg oral et dans les 24h après Pg longue durée (Stérilet Pg / Implant) • Glaire rendue perméable dès 27h après le dernier cp contraceptif • Atrophie endométriale (effet anti-nidatoire contragestif) Effet oestrogénique du contraceptif • EthinyloEstradiol (EE), œstrogènes naturels tels que le valérate d’œstradiol (un ester du 17β- œstradiol naturel humain) et le 17β-œstradiol. • L’oestrogène contenu dans un contraceptif hormonal combiné joue un rôle central dans la stabilisation de l’endomètre afin de minimiser les spottings ou saignements plus importants résultant de l’atrophie endométriale liée au progestatif. -->
undefine
![ext[convulsions_febriles.pdf|./pdf/convulsions_febriles.pdf]] <!-- Texte caché pour la recherche Febrile seizures A febrile seizure is a seizure accompanied by a fever in the absence of intracranial infection due to bacterial meningitis or viral encephalitis. These occur in 3% of children, between the ages of 6 months and 5 years. There is a genetic predisposition, with a 10% risk if the Box 27.2 Causes of seizures Epilepsy • Idiopathic (70–80%) – cause unknown but presumed genetic • Secondary 27 child has a first degree relative with febrile seizures. The seizure usually occurs early in a viral infection when the temperature is rising rapidly. The seizures are usually brief, and are generalised tonic clonic seizures. About 30–40% will have further febrile seizures. This is more likely the younger the child, the shorter the dura tion of illness before the seizure, the lower the tem perature at the time of seizure and if there is a positive family history. - - Simple febrile seizures do not cause brain damage; the child’s subsequent intellectual performance is the same as in children who do not experience a febrile seizure. There is a 1–2% chance of developing epilepsy, similar to the risk for all children. However, complex febrile seizures; i.e. those which are focal, prolonged, or repeated in the same illness, have an increased risk of 4–12% of subsequent epilepsy. The acute management of seizures is described in Chapter 6. Examination should focus on the cause of the fever, which is usually a viral illness, but a bacterial infection including meningitis should always be con sidered. The classical features of meningitis such as neck stiffness and photophobia may not be as appar ent in children <18 months of age, so an infection screen (including blood cultures, urine culture and lumbar puncture for CSF) may be necessary. If the child is unconscious or has cardiovascular instability, lumbar puncture is contraindicated and antibiotics should be started immediately. Parents need reassurance and information. Advice sheets are usually given to parents. Antipyretics have not been shown to prevent febrile seizures and tepid sponging is no longer recommended. The family should be taught the first aid management of seizures. If there is a history of prolonged seizures (>5 min), rescue therapy with rectal diazepam or buccal midazolam can be supplied. Oral prophylactic anti epileptic drugs are not used as they do not reduce the recurrence rate of seizures or the risk of epilepsy. An EEG is not indicated as it does not serve as a guide for treatment; nor does it predict seizure recurrence. - – Cerebral dysgenesis/malformation – Cerebral vascular occlusion – Cerebral damage, e.g. congenital infection, hypoxic ischaemic encephalopathy, intraventricular haemorrhage/ischaemia - Summary • Cerebral tumour • Neurodegenerative disorders • Neurocutaneous syndromes Non-epileptic • Febrile seizures • Metabolic Febrile seizures • Affect 3% of children; have a genetic predisposition • Occur between 6 months and 6 years of age • Are usually brief, generalised tonic clonic seizures occurring with a rapid rise in fever - – Hypoglycaemia – Hypocalcaemia/hypomagnesaemia – Hypo/hypernatraemia • If a bacterial infection, especially meningitis, is present, it needs to be identified and treated • Advise family about management of seizures, consider rescue therapy • Head trauma • Meningitis/encephalitis • Poisons/toxins. • If simple – does not affect intellectual performance or risk of developing epilepsy • If complex, 4–12% risk of subsequent epilepsy. -->
![ext[coqueluche.pdf|./pdf/coqueluche.pdf]] <!-- Texte caché pour la recherche diteper DiTePer hould be admitted to hospital and isolated from other children. - If the diagnosis of epiglottitis is suspected, urgent hospital admission and treatment are required. A senior anaesthetist, paediatrician and ENT surgeon should be summoned and treatment initiated without delay. The child should be transferred directly to the intensive care unit or an anaesthetic room, and must be accompanied by senior medical staff in case respira tory obstruction occurs. The child should be intubated under controlled conditions with a general anaesthetic. Rarely, this is impossible and urgent tracheostomy is life saving. Only after the airway is secured should blood be taken for culture and intravenous antibiotics such as cefuroxime started. The tracheal tube can usually be removed after 24 h and antibiotics given for 3–5 days. With appropriate treatment, most children recover completely within 2–3 days. As with other serious H. influenzae infections, prophylaxis with rifampicin is offered to close household contacts. The organism can be identified early in the disease from culture of a per nasal swab, although PCR is more sensitive. Characteristically, there is a marked lymphocytosis (>15 × 10 9 /L) on a blood count. Although erythromycin eradicates the organism, it decreases symptoms only if started during the catarrhal phase. Siblings, parents and school contacts may develop a similar cough, and close contacts should receive eryth romycin prophylaxis, and unvaccinated infant contacts should be vaccinated. Immunisation reduces the risk of developing pertussis and the severity of disease in those affected, but does not guarantee protection. The level of protection declines steadily during childhood. - - Summary Pertussis • Caused by Bordetella pertussis • Paroxysmal cough followed by inspiratory whoop and vomiting; in infants, apnoea rather than whoop, which is potentially dangerous Minutes count in acute epiglottitis. • Diagnosis: culture of organism on per nasal swab, marked lymphocytosis on blood film. - Bronchitis There is controversy about the term bronchitis in child hood. While some inflammation of the bronchi produc ing a mixture of wheeze and coarse crackles is often a feature of respiratory infections, bronchitis in children is very different from the chronic bronchitis of adults. In acute bronchitis in children, cough and fever are the main symptoms. The cough may persist for about 2 weeks, or longer with pertussis or Mycoplasma infections. There is no evidence that antibiotics, cough suppressants or expectorants speed recovery. Whooping cough (pertussis) This is a highly contagious respiratory infection caused by Bordetella pertussis. It is endemic, with epidemics every 3–4 years. After a week of coryza (catarrhal phase), the child develops a characteristic paroxysmal or spasmodic cough followed by a characteristic inspir atory whoop (paroxysmal phase). The spasms of cough are often worse at night and may culminate in vomit ing. During a paroxysm, the child goes red or blue in the face, and mucus flows from the nose and mouth. The whoop may be absent in infants, but apnoea is a feature at this age. Epistaxis and subconjunctival haemorrhages can occur after vigorous coughing. The paroxysmal phase lasts 3–6 weeks. The symptoms gradually decrease (convalescent phase) but may persist for many months. Complications of pertussis, such as pneumonia, convulsions and bronchiectasis, are uncommon, but there is still a significant mortality, particularly in infants. Infants who have -->
undefine
undefine
undefine
![ext[Cou.pdf|./pdf/Cou.pdf]] <!-- Texte caché pour la recherche REGION CERVICALE Pavel Dulguerov Service d’Oto-Rhino-Laryngologie et de Chirurgie Cervico-Faciale Hôpital Universitaire de Genève Dulguerov - 1 Région cervicale - Plan Anatomie topographique du cou Sémiologie Investigations Malformations Infections Inflammations Tumeurs bénignes Tumeurs malignes (métastases cervicales) Approche diagnostique des masses cervicales Dulguerov - 2 Les structures du cou sont séparées pas des fascia Fascia superficiel Fascia profond Couche superficielle Pré-trachéale Couche intermédiaire (viscérale) Couche profonde (pré‐vertébrale) Dulguerov P - 3 Anatomie topographique 3 Espaces du cou sous- hyoïdien 1 1. Viscéral 4 2. Rétro-pharyngé 2 * 3. Cervical antérieur 4. Carotidien 6 5. Cervical postérieur 5 6. Nuque * Dulguerov - 4 Dr. Minerva Becker – Radiologie, HUG -->
{{coup_du_lapin.jpg}}
!! Généralités
* le ''coup du lapin'' ou traumatisme cranio-cervical par accélération est un ''traimatusme du rachis cervical'' principalement dû à des ''accidents de voiture''
*Le rachis fait une ''hyperextension'' qui peut entrainer une ''lésion ligamentaire'' ou des ''fractures'' avec ''lésions neurologiques''
*Il faut faire une évaluation du rachis par ''Rx profil'' (pour les fractures) et ''IRM'' (pour les lésions neurologiques)
undefine
!! Généralités
*La ''maladie de Creutzfeldt-Jackob'', ou ''maladie à prions'', est une maladie ''rare mais mortelle'' composée de protéines atypiques (ou ''prions'') induisant une ''[[encéphalopathie spongiforme|encephalopathie spongiforme.jpg]]'' (vacuoles / spongiose au niveau histologique).
* Les ''prions'' ont une ''forme saine'' (hélice-alpha) pouvant évoluer en ''forme mortelle'' (feuillets-beta) si elle est mélangée avec d'autres prions mortels. Ils sont présents en très faible quantité dans le sang.
*Les prions mortels font des ''amas dans les neurones'', amenant à une ''dégénerescence neuronale rapide'', suivie d'un décès.
*la ''Clinique'' comprend un ''état confusionnel'' qui progresse en une ''démence'', des ''troubles moteurs'' (myoclonies, ataxies) et enfin un ''mutisme akinétique''
*Les ''causes'' sont
**''Forme sporadique'': la plus fréquente
**''Forme acquise'': transmis par la ''viande bovine'' (vache folle)
**''Forme héréditaire''
*Les ''investigations'' comprennent un ''IRM'', une analyse du ''LCR'' et un ''EEG''.
*Il n'existe ''aucun traitement''.
{{prions_propagation_schema.jpg}}
undefine
undefine
!!Définition *Le ''CRUSH syndrome'' ou //Syndrome de Bywaters// décrit chez des ''blessés ensevelis'', survient aujourd'hui dans d’autres circonstances qui ne revêtent pas le même caractère dramatique : chez des ''myopathes'', chez des ''drogués en overdose ''ou chez certains'' opérés'' ''installés longtemps dans des postures particulières'' * Il est dû à un ''écrasement prolongé d'un membre avec compression lente des masses musculaires''. *La gravité de ce type de syndrome est l'''IRA'' toujours redoutée. * Au choc hypovolémique initial va succéder, lors du dégagement d’un écrasé ou de la levée d’un garrot, une phase de ''revascularisation'' marquée par la libération de ''potassium'' (Hyperkaliémie) et de ''myoglobine'' (Rhabdomyolyse massive), avec une acidose.
![ext[cryptorchidie.pdf|./pdf/cryptorchidie.pdf]] <!-- Texte caché pour la recherche cryptorchidie Undescended testis 348 An undescended testis has been arrested along its normal pathway of descent (Fig. 19.5). At birth, about 4% of full term male infants will have a unilateral or bilateral undescended testis (cryptorchidism). It is more common in preterm infants because testicular descent through the inguinal canal occurs in the third trimester. Testicular descent may continue during early infancy and by 3 months of age the overall rate of cryp torchidism in boys is 1.5%, with little change thereafter. Contrary to previous teaching, it is now recognised that occasionally a testis which is fully descended at birth can ascend to an inguinal position during childhood, - Genitalia Internal inguinal ring Testis Vas deferens Testicular vessels Figure 19.5 A left undescended testis with an empty hemiscrotum. accounting for some late presenting ‘undescended’ or ‘ascended’ testes. This phenomenon may be due to a relative shortening of cord structures during growth of the child. - Examination This should be carried out in a warm room, with warm hands and a relaxed child. The testes can then be brought down into a palpable position by gently mas saging the contents of the inguinal canal towards the scrotum. Classification Retractile The testis can be manipulated into the bottom of the scrotum without tension, but subsequently retracts into the inguinal region, pulled up by the cremasteric muscle. The testis has usually been found in the scrotum at a neonatal check and been noted by parents on bathing their baby. With age, the testis resides permanently in the scrotum. Follow up is advis able as, rarely, the testis subsequently ascends into the inguinal canal. - Palpable The testis can be palpated in the groin but cannot be manipulated into the scrotum. Occasionally, a testis is ectopic, when it lies outside its normal line of descent and may then be found in the perineum or femoral triangle. Impalpable No testis can be felt on detailed examination. The testis may be in the inguinal canal, intra abdominal or absent. - Investigations Useful investigations include: • Ultrasound – this has a limited role in identifying testes in the inguinal canal in obese boys but cannot reliably distinguish between an Figure 19.6 Laparoscopic appearance of an intra abdominal testis. - intra abdominal or absent testis. It is performed in children with bilateral impalpable testes to verify internal pelvic organs. - • • Hormonal – for bilateral impalpable testes, the presence of testicular tissue can be confirmed by recording a rise in serum testosterone in response to intramuscular injections of human chorionic gonadotrophin (HCG); these boys may require specialist endocrine review. Laparoscopy (Fig. 19.6) – the investigation of choice for the impalpable testis. Under anaesthesia, inguinal examination is first carried out to check that the testis is not in the inguinal canal. Management Surgical placement of the testis in the scrotum (orchidopexy) is undertaken for several reasons: • • Fertility – to optimise spermatogenesis, the testis needs to be in the scrotum below body temperature. The timing of orchidopexy is controversial, but orchidopexy during the second year of life may optimise reproductive potential. After 6 months of age descent of testis is unlikely and referral for paediatric surgical review at that age is recommended. Fertility after orchidopexy for a unilateral undescended testis is close to normal. In contrast, fertility is reduced to around 50% after bilateral orchidopexy for palpable undescended testes, and men with a history of bilaterally impalpable testes are usually sterile. Malignancy – undescended testes have histological abnormalities and an increased risk of malignancy. The risk is greater for bilateral undescended testes and the greatest risk is for testes which are intra abdominal. Although the evidence is somewhat contradictory, some studies have suggested that early orchidopexy for a unilateral undescended testis reduces the risk to nearly the same as a normal testis. A scrotal testis can also be more easily self examined than an inguinal or ectopic one. - - 349 1 Genitalia Testicular torsion Twisted epididymis and testis Black testis Testicular torsion Hydatid torsion Epididymitis Incidence according to age 19 Twisted hydatid Inflamed epididymis Epididymitis Hydatid Testicular torsion torsion Small hydrocele (b) Small hydrocele (c) Slightly swollen testis 5 10 15 Age (years) (a) (d) Figure 19.7 (a) Testicular torsion. (b) Hydatid torsion. (c) Epididymitis. (d) Incidence in relation to age. • Cosmetic and psychological – if a testis is absent, a prosthesis can be used but this is best delayed until a larger adult sized prosthesis can be inserted. -->
undefine
undefine
undefine
![ext[Cycle Menstruel.pdf|./pdf/Cycle Menstruel.pdf]] <!-- Texte caché pour la recherche Phase lutéale • Phase lutéale tardive 1. En réponse à la diminution des hormones stéroïdiennes 2. Plus de feedback négatif sur l ’axe hypothalame-hypophysaire 3. Augmentation progressive de la FSH 4. Endomètre: A. Perte de l’apport sanguin de l’endomètre B. Nécrose artères spiralées/décollement de l’endomètre C. Vasospasme produit par prostaglandines UN NOUVEAU CYCLE COMMENCE 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 24 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 25 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 26 RECAPITULATIF… https://youtu.be/RQIeY--edtE 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 27 APPLICATIONS CLINIQUES • Cycle Normal: • Durée moyenne du cycle : 28 jours (21-35) • Durée moyenne des menstruations : 4 jours (1-7) • Quantité moyenne de pertes sanguines : 30-40 ml • Quantité maximale de pertes sanguines : 60-80 ml (environ 6 serviettes ou tampons par jour) 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 28 APPLICATIONS CLINIQUES • Troubles de la durée du cycle: • Polyménorrhées (< 25j) • Oligoménorrhées/spanioménorrhées (> 35j) • Aménorrhées: - primaire: absence de ménarche à 16 ans - sécondaire: absence de règles pdt > 3 mois consécutifs • Troubles de la quantité du flux sanguin: • Hyperménorrhée • Hypoménorrhée • Troubles de la durée des menstruations: • Ménorragies • Autre: • Métrorragies • Règles douloureuses: dysménorrhées 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 29 TAKE HOME MESSAGE • Processus qu’a pour but la libération d’un ovocyte mature et la préparation de l’endomètre à l’implantation • Effets stimulants et inhibitoires d’origine hormonal/autocrine et paracrine • Guidé par l’axe hypothalame-hypophyse –gonadotrope • Pas de folliculogénèse après la naissance: déplétion de la réserve ovarienne • Le J1 des règles est le J1 du cycle • Phase folliculaire: règles-jour avant du pic LH • Phase Lutéale: Pic LH-règles du cycle prochain 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 30 TAKE HOME MESSAGE • Pic de LH évènement neuroendocrine vital: Feedback nég.→ Feedback positif (mécanisme peu connu) • Durée moyenne du cycle 28 jours • Peu de variabilité entre 20-40 ans • Variabilité importante 5 premières années après ménarche et 10 ans avant la ménopause • Phase folliculaire variable: 14-21 jours. Phase lutéale plus constante 14 jours (durée de vie du corps jaune) 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 31 FIN 31/10/16 COURS AMC GYNECOLOGIE - LE CYCLE MENSTRUEL 32 -->
undefine
undefine
{{cystogramme_reflux_DTPA.gif}}
!!Examen
*la ''cystographie mictionelle'', ou ''CUM'' est une technique de choix pour l'évaluation et le suivi des ''reflux vésico-uretéral''
*L'examen est plus sensible et moins irradiant que la cystographie radiologique avec PC.
*[[Protocole|protocole_cystographie_DTPA.jpg]]: on instille le ''TC99m DTPA'' via un ''catheter intravésical'', mélangé à de l'eau saline afin de ''remplir complètement la vessie''.
*On fait une ''phase de vidange passive'' ou prend des images dynamiques depuis le début du remplissage jusqu'à l'apparition d'une vidange passive
*On fait ensuite une ''phase de vidange active'' ou un prend des images dynamiques depuis le second remplissage ainsi que la vidange active du patient
*On peut calculer finalement le ''résidu post-mictionel''
!!Interprétation
*''Patient normal'': pas de reflux du traceur dans les reins ou les uretères (pas toujours évident)
*''Reflux minimal'': reflux limité à l'uretère
*''Reflux moderé'': reflux atteignant le pyélo-caliciel
*''Reflux Sévère'': dilatation intrarénale ou dilatation tortueuse de l'uretère
!!Exemples
<$button popup="$:/cystographie_mictionelle_normale.jpg" >
[img width=64 [images/cystographie_mictionelle_normale.jpg]]
</$button><$reveal type="popup" state="$:/cystographie_mictionelle_normale.jpg"><div class='tc-tiddler-frame'>
{{cystographie_mictionelle_normale.jpg}}
</div>
</$reveal>
10.11.2016: cystographie mictionelle normale
<$button popup="$:/22.09.2016_CUM.jpg" >
[img width=64 [images/22.09.2016_CUM.jpg]]
</$button><$reveal type="popup" state="$:/22.09.2016_CUM.jpg"><div class='tc-tiddler-frame'>
{{22.09.2016_CUM.jpg}}
Reflux vésico-urétéral remontant au système pyélo-calciel du greffon rénal en FID
</div>
</$reveal>
22.09.2016: Reflux pyelo-caliciel
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{demence_corps_lewy.jpg}}
*la ''démence à corps de lewy'' est un syndrompe parkinsonien qui correspond à 5% des démences. Elle est caracterisée par la présence de ''corps de Lewy dans le cortex et le tronc cérébral''.
*Cette démence est associée au ''syndrome de Parkinson''
*Dans la ''Clinique'' on retrouve une prédominance de ''Symptômes Extra-Pyramidaux'' (tremblements, hypertonie spastique, bradykinesie), une ''déterioration des fonctions cognitives'' ainsi que des ''hallucinations visuelles précoces''
{{demence_frontotemporale_schema.jpg}}
*La ''démence Fronto-Temporale'' correspond à une ''atrophie des lobes frontaux et temporaux'' sans élément en faveur d'une démence de type Alzheimer.
*Les principaux ''Symptômes'' comprennent une ''déshinibition'' et un ''trouble du langage'' ainsi que des ''troubles psychiatriques'' (dépression, manie), le tout avec une ''évolution progressive''.
*Dans cette démance, les inhibiteurs de l'acétylcholine-esterase (utilisés pour Alzheimer) n'ont aucun effet
*Les praxies les gnosies et la mémoire sont préservés.
{{demence_vasculaire_irm.jpg}}
*la ''démence vasculaire'' correspond à environ 20% des démences. Elle est caractérisée par une ''évolution par pallier'' est surtout associée à des ''FRCV''.
*elle est due à des ''multi-infarctus''
*la ''clinique'' comprend des ''déficits neurologiques focaux'' associés à des ''déficits cognitifs'' semblables à ceux de l'Alzheimer. On trouve facilement des ''hyper-reflexies'' et un ''babinsky positif''.
*l'''IRM'' montrera des ''infarcissements multiples''. Il existe plusieurs formes de démences vasculaires avec des imageries différentes.
undefine
undefine
undefine
!!Généralités
{{demances_tableau.jpg}}
*les ''démences'' sont généralement des maladies ''progressives'' typiquement caractérisées par une ''déterioration intellectuelle'' mais ''sans altération de la conscience''.
*le ''facteur de risque'' le plus important des démences est l'''âge''.
*certaines démences sont réversibles (surtout les problèmes aigus réversibles et les maladies métaboliques)
!! Alzheimer
{{Alzheimer}}
!! Démence Vasculaire
{{Démence Vasculaire}}
!! Démence Fronto-Temporale
{{Démence Fronto-Temporale}}
!! Démence à Corps de Lewy
{{Démence à Corps de Lewy}}
!! Autres démences
Dans les autres démences, on retrouve:
*Les ''démences infecieuses''
*La démence de ''[[Creutzfeldt-Jackob|Creutzfeldt-Jackob / Prions]]''
*La démence due à l'[[Hydrocéphalie à Pression Normale]]
*Les ''démences métaboliques'' (Korsakoff, Endocrinopathies, Hypovitaminoses)
*La ''[[Maladie de Huntington]]''
*La ''Paralysie Supranucléaire progressive''
*La ''Dégénérescence corticobasale''
*La ''Dégénérescence Nigro-Striée''
{{dengue.jpg}}
!!Définition
*la ''Dengue'' est une infection virale transmise par les moustiques.
*Elle est endémique dans les régions ''tropicales'' et subtropicales, avec une prédilection pour les ''zones urbaines'' et semi-urbaines
!!Clinique
*Syndrome grippal
!!Investigation
*PCR
*Sérologies
*Test Antigénique
!!Traitement
*Pas de traitement spéicfique
{{dengue_map.jpg}}
undefine
undefine
undefine
undefine
!!''Humeur dépressive et représentations négatives : ''
*''Tristesse''
*''Anhédonie'' (ne sent rien dedans)
*''Irritabilité''
*''Anxiété''
*''Perte de confiance et d'estime de soi''
*''Culpabilité''
*''Hypocondrie''
*''Pessimisme et perte d'espoir ''
*''Ralentissement''
**Inhibition
**Ralentissement moteur
**Ralentissement psychique (cognitif et affectif)
*''Désir de mort et conduites suicidaires ''
**Idéations morbides
**Intentionnalité suicidaire
**Planification
!!''Symptômes somatiques''
*Troubles du sommeil
*Troubles de l'appétit
*Troubles sexuels
*Autres troubles somatiques
!!''Diagnostic''
*Il faut au moins tristesse ou anhédonie
*Il faut depuis au moins deux semaines, tous les jours.
*Avec impact fonctionnel
**''Tristesse ou anhdédonie ''
**''Ralentissement ou agitation ''
**''Trouble du sommeil ''
**''Anxitété'' (présent chez 80% des déprimés).
***//On peut donner les BZD 1 semaine puis arrêter en attendant effet anti-dépresseur. //
**''Appétit'' (diminution ou augmentation) => perte ou prise de poids ? (5% en 1mois sans régime est significatif)
**''Fatigue ou perte d'énergie'' (80-90%)
**''Dévalorisation, culpabilité, inutilité''
**''Troubles cognitifs'' (Trouble de la concentration, difficultés à prendre des décisions, trouble de la mémoire - surtout chez les personnes âgées)
**''Idées suicidaires'' (60-80%) => ''URGENCE PSY''
!!Formes cliniques
*''Intensité''
**Dépression légère, moyenne, sévère, mélancholique (= endogène, patients prostrés, hypomoimes, parlent peu, mange peu, dort peu, fatigue ++, idées suicidaires ++, risque de passer à l'acte quand va mieux etc.)
*''Dépressions'' ''avec caractéristiques psychotiques ''
*''Selon l'âge'' (dépression de l'enfant, de l'adolescent, de l'adulte, du sujet âgé)
!!''Epidémiologie''
*5-10% de dépression majeure dans le monde (sur la vie entière 5-12% homme et 10-25% femme)
*Episodes récurrents dans >60% des cas.
*20% des dépressions évoluent vers la chronicité.
*Rémission incomplète (sx résiduels) dans 10-30%
*Retentissement sur le fonctionnement social, professionnel et économique.
* >50% des suicides surviennent dans un contexte dépressif
*Touche tous les âges, prévalence encore plus importante chez personnes âgés
*//20% des patients ne cherchent pas de l'aide//
!!''Classifications''
*''Dysthymies''
**Tristesse non constante
**Surtout femme avec traumatismes
**Peut être associé avec troubles de la personnalité (TOC)
*''Dépressions récurrents''
*''Dépressions saisonnières''
**Dépression pendant l'hiver, liée au manque de luminosité
**F>H
**Hypersomnie-hyperphagie, fatigue ++, ralentissement
**Ttt: luminothérapie
*''Troubles de l'humeur secondaire''
*''Troubles bipolaires''
*''Dépression post-partum'' (dans les 4 semaines après l'accouchement). Fréquent dans les femmes avec dépression ou trouble psy pré-existant.
**Labilité émotionnelle
**Irritabilité
**Hyposomnie
**Risque de suicide pour mère et BB (risque d'infanticide => délire : ce n'est pas mon BB)
*''Dépression chronique''
** >3ans, surtout si OH ou toxicomane.
**Très difficile à soigner.
*//CAVE : la dépression peut se présenter avec des troubles cognitifs, surtout chez la personne âgée (on peut essayer de donner des dépresseurs). //
!!''Facteurs de risque de suicide''
*''Caractéristique démographique'' (âge - âgés ou ado-, sexe)
*''AF'' (suicide dans la famille)
*''Personnalité'' (impulsivité, agressivité)
*''Expériences traumatiques précoces''
*''Troubles mentaux'' (y inclus addictions) (p.ex hospitalisation dans un milieu psychiatrique)
*''Problèmes somatiques''
**Neurodégénératif (Alzheimer)
**Parkinson (70%), SEP (50%), AVC, encéphalite à HIV
**Hypothyroïdie (50%), hyperthyroïdie (25%), hyperparaTSH (60%)
**IM (et associé à un mauvais pronostic cardiaque), mucoviscidose
**MICI, diabète
**Cushing (60%), Addison
**Cancer
**Médicaments : beta-bloquants, corticostéroïdes, pilule contraceptive, BZD, anti-malariques (mefloquine), analgésiques, neuroleptiques classiques (Haldol)
**Toxiques : OH, cannabis, cocaïne
*''Crise psychosociale''
*''Accès à des moyens de suicide
''
*''Exposition à des modèles ''(médias, stars etc)
*''Isolement social''
*''Divorce de couple''
*//Hommes utilisent les méthodes plus violentes en général//
!!''Etiologie''
*''Facteurs génétiques ''(37% monozygotes, polymorphsme génétique)
**Hypothèse d'un déficit monoaminergique (sérotonine)
**Anomalie du système hypothalmo-hypophyso-surrénalien
**Avec sécrétions de corticotrophine releasing hormone -> hypophyse -> corticotrophines -> surrénales avec augmentation des glucocorticoïdes avec manque de rétrocontrôle négatif
*''Facteurs psychologiques ''
**Traits de personnalité
**Modèles psychanalytiquse (Freud, Klein)
**Théories cognitives (Beck)
*''Facteurs socio-environnemento-professionnel ''
**Facteurs de vulnérabilité précoces (perte parentale durant l'enfance, sévices précoces)
**Facteurs de vulnérabilité contemporains de la période dépressive (manque de soutien social, facteurs de stress, interactions des différents facteurs de vulnérabilité)
*''Environnement professionnel''
**Absence de neutralité de l'activité professionnelle (soit bonne pour la santé, soit mauvaise)
**Ecart entre le travail prescrit et le travail réel
**3 modèles
***Equilibre demande-contrôle (support)
***Equilibre effort-réconpense
***Justice organisationnelle
**Ne pas oublier de contacter le médecin du travail en cas de plainte d'origine professionnelle.
!!''Traitement''
*''But'' :
**Prévenir un geste suicidaire
**Raccourcir la durée de l'épisode
**Obtenir une rémission complète
**Eviter la rechute
*''Méthode'':
**''Traitements pharmacologiques ''
***__SSRI__ (citalopram)
***__Inhibiteurs mixtes de la sérotonine et NA__ (SNRI - Venlafaxine)
***__Inhibiteurs sélectifs de la NA__ (Réboxétine - si manque d'énergie)
***__Action sur les 5-HT2__ (Mirtazapine)
***__IMAO-A__ (Moclobémide)
***__Rythme nycthéméral__ (Agomélatine)
***__Inhibiteurs non-spécifiques de la recapture de NA__ (clomipramine)
***__Inhibiteurs mixte sérotoninergique > NA__ (Réméron : sédatif, diminue troubles anxieux)
***__Tricyclques__ : utilisés uniquement quand sévère (car risque de problèmes cardiaques et effets anti-cholinergiques ++)
***''EI'' : céphalées, nausées, vomissements, diarrhées (surtout les premières semaines).
***//Si traitement marche pas : vérifier compliance. Si marche pas après plusieurs semaines, combinaison ou changer de classe. Si marche toujours pas, ajouter le lithium ou anti-psychotiques atypiques ou lamotrigine pour effet synergique. Si toujours pas : stimulaiton trans-cranienne ou électro-convulso-thérapie//
**''Psychothérapies''
**''Traitements physiques ''
**''Enquête dans l'entreprise ''si facteurs professionnels en cause pour améliorer les conditions de travail (médecin du travail)
!!Envoyer chez un psychiatre
*Idées suicidaires
*Symptômes psychotiques
*Envie du patient (refus des médicaments)
*Bipolaire
*Dans le cadre d'un trouble de la personnalité (borderline)
{{Capture d’écran 2016-10-18 à 14.23.45.jpg}}
!!''Notes''
* ''Aripriprazole'' : agoniste partiel dopaminergique (donc moins d'effets extra-pyramidaux, mois de fatigue également).
*On peut donner ''Ritaline'' en même temps que ''anti-psychotique'' car agissent pas au même endroit, mais risque.
*''Anti-psychotiques ont pas d'activité anti-dépresseur ''(sauf léger effet de closapine et kétiapine). Potentialisent effets SSRI, et aident dans la dépression bipolaire (valproate, carbamazépine, anti-psychotiques atypiques, lithium => stabilisateurs de l'humeur).
*''EI anti-dépresseurs'' : moins d'EI que les anti-psychotiques.
*''Effet rebond'' si arrêt trop précoce des anti-psychotiques.
*''Risque de décompensation corrélé à la longueur de la stabilité''. Il faut aussi attendre de stabiliser les facteurs de risque avant d'arrêter les anti-psychotiques.
*''Manie'' : désinhibition, grandiosité, irritabilité, insomnie, impulsivité, ...
*''Technique'' : essayer de comprendre comment il voit le monde et de construire quelque chose de commun avec le patient.
*Si épisodes maniaques = bipolaire
*Si pas d’épisodes maniaques = dépression
*Mariage = protecteur
![ext[dermato_dermatite_seborrheique.pdf|./pdf/dermato_dermatite_seborrheique.pdf]] <!-- Texte caché pour la recherche Dermatite séborrhéique - Faussement appelé eczema séborrhéique - N’est PAS un eczema - Physiopatholoique : rôle sébum, levures (malassezia furfur) - Fréquent : 1-3%, chronique et récidivant - Lié au stress - Squames grasses dans les plis naso-géniens, sur le front et le menton - PAS de croutes et vésicules (PAS eczema) - Acné - Métronidazole - Associé au Parkinson ou immunosupprimés, AVC (CAVE HIV) GEN CLIN DD TTT CAVE -->
@@background-color:#ffd479; !''Dermatologie'' @@ <<list-links "[tag[Dermatologie]sort[title]]">>
!!Généralités
*La ''Dermatomyosite'' est une ''maladie inflammatoire de la peau et des muscles''. Si la maladie touche que les muscles et pas la peau, elle s’apelle la ''polymyosite''.
*Cette maladie de cause inconnue est souvent ''associée à des cancers''.
*Les ''Signes dermatologiques aigus'' comprennent un ''[[œdème lilacé en lunette|dermatomyosite_erytheme_lilace_lunette.jpg]]'', une photosensibilité, un [[rash malaire |dermatomyosite_rash_malaire_photosensibilite.jpg]]et un[[ érythème des ongles|dermatomyosite_erytheme_periungeal.jpg]].
*Les ''Signes dermatologiques chroniques'' comprennent les ''[[papules de Gottron pathognomoniques|dermatomyosite_papules_gottron.jpg]]'' (papules kératosiques du dos des mains), des [[calcifications cutanées|dermatomyosite_calcinose_cutanee.jpg]] et une [[poikilodermie|dermatomyosite_poikilodermie.jpg]].
*Les ''Signes Musculaires'' comprennent des ''myalgies'' et des ''faiblesse'' au niveau des ''muscles proximaux'' (ceinture scapulaire et pelvienne).
*Les ''Investigations'' comprennent une ''biopsie musculaire'' ainsi que des mesures d’EMG. Au niveau du ''labo'', les ''CK'' sont augmentés, et il y a une association avec les anticorps ''anti-JO1'', les ''ANA'', les Anit-MI-2 et les Anti-SRP.
*Le ''traitement'' implique des ''corticoïdes à haute dose'', du Méthotrexate, Cyclospirne et Aziathioprine, Ainsi que des Immunoglobulines (IVIG)
*Ne pas oublier aussi de ''rechercher le cancer sous-jacent''. Typiquement le cancer du sein.
{{polymyosite_muscles_proximaux.jpg}}
undefine
undefine
undefine
undefine
undefine
undefine
undefine
![ext[dermato_dermatophytes.pdf|./pdf/dermato_dermatophytes.pdf]] <!-- Texte caché pour la recherche Mycoses - Dermatophytes (trichophyton, epidermophyton, microsporon). Pathogène obligatoire ! Rechercher contact animaux. - Levures : candida, malassezia (trichosporum, cryptococcus : rare, immunosuppression). - Moisissures (scopulariopsis, aspergillus, penicillium) (peu important, touche surtout les ongles, si immunosuppression, ± dermatophyte) - Anthropophiles / zoophiles, géophiles (plus d’inflamma1on) - Transmission H-H, H-animal et objet/sol-H/animal. Examen direct : natif (KOH) /coloré + florescence (UV, blankophor) Culture (milieu sabouraud) (1-2j candida, 3sem dermatophyte) Examen en lumière de Wood (UV), PCR (mais pas remboursé) -No Hair/Nais : N’importe quel-Conazole (ttt local) -HAIR/NAILS (± paumes/plantes ± lésions étendues) : Topical won’t penetrate = Systemic oral Dermatophytes Kératinophile (peau/cheveux/poils/ongle). Chaud, humide. ± Prurit. - Des plis : auto-inoculation à partir d’une mycose des pieds ++ (a rechercher !), contact proche, vêtements, linges (spores !), H>F - Des mains/pieds : H>F, pieds>mains (mains 2° au pied). FR : chaleur, humidité, hyperhydrose, chaussures imperméables, OMI chronique. - Du cuir chevelu : le + frqt. Contagion ++, foyers scolaires. Guérison spontanée puberté (ø cicatrice). Microsporiques vs trichophytiques. - Des ongles : contaminaiton à partir d’un foyer pré-existant ou sol. - Peau glabre (= tinea corporis, dermatophytose circiné) : plaques érythémateuses annulaire et centrifuge, bords nets et inflammatoires ± papuleux/vésiculeux (si confluent : polycyclique). ± Atteinte duvet. - Des plis (= tinea cruris, intertrigo dermatophytique, eczema marginé d’Herbra) : plaque érythémato-squameuse, bordure inflammatoire ++ ± vésiculeuse. Atténuation centre. Touche tous plis, scrotum N. - Des mains/pieds (tinea pedis) : intertrigo exsudatif ou squameux ± rhagades sur les plis interdigiraux (4 e ++) ou sous-digitaux, extension possible (plante, dos du pied). Hyperkératosique ou dyshydrosique. - Du cuir chevelu (tinea capitis, teignes tondantes) : plaques alopéciques (uniques ou peu), finement squameuses, qq cheveux gris. - Des ongles : début sur bord libre/latéral. Tache blanche (jaune-brun-verte) qui s’étend, perte transparence. Ongle épaissi, friable, irrégulier - Peau glabre : eczéma nummulaire, psoriasis, LED subaigue, PRG - Des plis : intertrigo candidosique/microbien, psoriasis inversé - Des ongles : candidose ungéale, psoriasis, lichen plan - Des cheveux : pelade de stress (alopécie aux nerfs, lymphocytes ds follicules pileux, Résolution spontanée). Folliculite, acné (barbe). - Prélever bord lésion (bords actifs), si bulle → toit (dyshidrose, alors que herpès = plancher), ongle → dessous. - Du cuir chevelu : analyse cheveu + racine : microsporiques (wood +, verte, ectothrix : sur la surface du cheveux), trichophytique (wood-, ø fluorescence, endothrix : internalisation dans le cheveux). - Local : alyllamines (terbinafine) > imidazol (± ttt animal infecté !) - Systémique : terbinafine, itraconazole PO 3mois (si étendu ou mains/pieds : 2sem) (pour les ongles : laser pourrait marcher) - Teigne favique : trichophyton schönleini. Eradiqué Europe. Contage si sous-alimentation, hygiène → cupules jaunes périfolliculaire (filaments++), confluant, cheveux cassés. Alopécie cicatricielle si ø ttt. - Teigne suppurée (sycosis mycosique) : dermatophytes zoophiles ++, milieu rural. Barbe peut être touchée → Pustules folliculaires, EF, ADP. DD : folliculite. Risque alopécie cicatricielle sans traitement. - Intertrigo = inflammation des plis (non spécifique). Porte d’entrée ! - DD dyshidrose : eczema, hyperhydrose (été) ou mycose GEN INV TTT GEN CLIN DD INV TTT CAVE Mycoses suite : Candidose - Levure (champi uni¢ arrondi). Se reproduit par bourgeonnement ± pseudofilaments. - Le plus fréquent : candida albicans. - Saprophyte du TD. Lésions cutanées par auto-inoculation depuis dig (± vaginal) - FR : obésité, diabète, hygiène, ATB (vaginal ++), immuosuppresseurs. Pour onyxis : humidité (ménage) INV : Prélever les pustulettes en périphérie. - Intertrigo candidosique : pustulette à base érythémateuse. Peut confluer ou se rompre car fragile (placards rouges à bord émietté). Rechercher les pustulettes en périphérie. → Atteinte des plis (inguinaux, inter-/sous-fessiers, sous-mammaire, interdigitaux) (scrotum atteint !) - Bucco-digestive : perlèches (pt édenté), stomatite chez NN ou âgé ++ (« muguet » : érythème diffus de la muqueuse, brillante, douloureuse, sèche, lisse (se dépapille), puis dépôts blancs et grumeleux → sensation de brûlure, sécheresse, goût métallique), (chéilite : rare). - Génitale : vulvo-vaginite (prurit, leucorrhée, brûlure), balanite/blalano-posthite, urétrite (distal). - Onyxis et périonyxis : périonyxis (= inflammation de la peau périungéale : tuméfaction, replis sus-/sous-périungéal, pus) onyxis secondaire (a<einte de la lunule en 1 er ). - Génitofessière infantile : surinfection de dermite fessière (dermite des langes) Dermatophyte - Local ++ (nystatine > imidazol) (violet de gentiane pour muguet) - Systémique si lésion étendue, immunosuppression (fluconazole, itraconazole) - Vaginal : topique + ovule ou fluconazole PO Pathogène si : - Grossesse, DM, CS, ATB, immunosuppresseurs - Macération, irritation chronique, humidité Pityriasis versicolor - Levure : Malassezia globosa (ovalis). Lipophile, saprophyte. - Pathogène lors d’hypersécrétion sébacée, hypersudations. - Adultes jeunes → Tronc, racines des membres - Colorée : taches/nappes maculeuses chamois/rosées, surface fripée, squames (signe du copeau : squames grasses se détachent si on gratte) - Hypochromique (peau pigmentée) : inhibition de la mélanogenèse - Wood : florescence verte - Examen direct : amas de spores rondes, courts filaments. Local par shampoing de la tête aux pieds 3j (imidazol, sulfure de sélénium). CAVE : si hypochromique les taches resentent jusqu’à ce que retourne au soleil. GEN CLIN DD TTT CAVE GEN CLIN INV TTT -->
!! Définition
* Le ''Diabète'' est une maladie métabolique comprenant un ''état d'hyperglycémie'' chronique, secondaire soit à un ''manque d'insuline'', soit à une ''résistance à l'insuline'', soit ''les deux.''
*On distingue:
**le ''Diabète de type 1'' surtout pédiatrique et autoimmun
**le ''Diabète de type 2'' surtout adulte et lié à l'obesité
**le ''[[Diabète Gestationnel]]'' (cf. Gynéco-Obstétrique)
* Le diabète est source de ''complications aigues et chroniques''. La cause la plus importante de ''mortalité'' vient des ''complications cardio-vasculaires'', tandis que la meilleur façon de la réduire est l'''arrêt du tabac''.
* La ''Définition'' du diabète se fait suivant des valeurs de ''labo'' en mesurant la ''glycémie à jeun'', la ''tolérance au glucose'' (glycémie 2h après prise de 75g de glucose) et l'''Hb-Glyquée'' (qui est le reflet de la glycémie sur 3 mois)
*Classiquement on peut parler de Diabète après ''Deux valeurs de Glycémie à Jeun >7mmol/l''.
{{diabete_valeurs_schema.jpg}}
!! Diabète de Type 1
{{Diabète de Type 1}}
!! Diabète de Type 2
{{Diabète de Type 2}}
!! Complications Aigües
{{Diabète: Complications Aigues}}
!! Complications Chroniques
{{Diabète: Complications Chroniques}}
!! Prévention
''SCREENING''
* Faire un ''Contrôle de l'Hb Glycée tous les 3 mois'', avec un ''obectif <7%'' si possible.
*Le patient doit ''surveiller ses glycémies'' à la maison. Un patient sous insuline doit vérifier avant chaque repas, et si possible 1-2h après chaque repas.
*A chaque visite, il faut ''regarder les pieds'' du patient, à la recherche d'ulcères. Le patient doit aussi le faire à la maison
*Il faut aussi profiter des visites pour mersurer la ''tension artérielle''
*un ''screening annuel'' comprend:
**chercher une ''microalbuminurie''
**doser la ''créatinine''
**chercher la ''rétinopathie'': l'envoyer chez un ophtalmo
**doser le ''cholesterol''
*Il faut aussi faire le ''vaccin du pneumocoque'' et ''donner de l'aspirine et faire des ECG annuels si >40ans''.
''LIFESTYLE''
*Il faut encourager le patient à ''faire de l'exercice'', ce qui permet à la fois de diminuer la tension et d'améliorer la résistance à l'insuline
*l'''arrêt du tabac'' est la mesure la plus efficace contre la mortalité chez le patient diabétique
*Un ''régime sain'' avec limitation des sucres, des lipides, du sel, du café et de l'alcool.
!! Traitement
''SCHEMA''
| !//si diabète type 2 confirmé: // |<|<|<|<|
| 1. ''Style de vie'' |<|<|<|<|
| 2. ''Metformine PO'' |<|<|<|<|
|~|~|~|~|~|
| !//si Hb glyquée>7.0%: // |<|<|<|<|
|3. +''Insuline Basale''|ou| 3. +''Sulfonylurés''|ou| 3. +''Glitazone'' |
| !//si Hb glyquée>7.0%: // |<|<|<|<|
|4. ''augmenter insuline''|ou| 4. +''Glitazone''|ou|4. +''Sulfonylurés'' |
| !//si Hb glyquée>7.0%: // |<|<|<|<|
|5. ''augmenter insuline''|ou|5. +''insuline basale''|ou|5. +''insuline basale'' |
| !//si Hb glyquée>7.0%: // |<|<|<|<|
| 6. ''consultation'' |<|<|<|<|
''ANTIDIABETIQUES ORAUX (ADO)''
*La ''Metformine'' (//Glucophage©//):
** Il est de de la classe des ''Biguandine''
** On l'utilise comme traitement de départ du diabète type 2
**Elle a un double effet avec ''augmentation de la sensibilité à l'insluline'' ainsi que **''diminution de la production hépatique de glucose''
** Son effet secondaire principal comprend des ''maux de ventres et diarrhées''. Il ne fait pas prendre de poids.
*Les ''Sulfonylurés'' (//glicazide©//):
**ils permettent d'''augmenter la sécrétion d'insuline'' par les cellules beta du pancréas
**Leur effet secondaires principaux sont les risques d'''hypoglycémie'' et la ''prise de poids''.
*Les ''Glitazones'' (pioglitazone, //Actos©//):
**Ils permettent une ''augmentation de la sensibilité à l'insuline'' par les tissues périphériques
**leur effet secondaire principal est un risque d'''odèmes'' et d'''insuffisance cardiaque chronique''
''INSULINE''
*L'''insuline'' est utilisée comme ''traitement principal du Diabète Type 1'' et peut finir par s'ajouter dans le Diabète de type 2.
*Elle peut s'injecter ''injections IV'', par '' injections Sous-cutané'' ou par ''pompe Sous-Cutanée continue''.
*Il existe des ''Insulines Basales'' agissant sur toute la journée, qui peuvent être d'''action prolongée''(Insuline Glargine //Lantus©//) ou d'action ''intermédiaire'' (NPH).
*Il existe des ''Insulines Rapides'' à s'injecter avant les repas (insuline aspart //novorapid©//)
*Il existe plein de schémas et variations différentes ! Un des schémas graduels possible est le suivant:
|!Début de l'insulinothérapie|
|''Insuline bedtime d'action prolongée'' avec glycémies de contrôle à jeun le matin|
|!//si Hb Glyquée >7.0%//|
|+controles glycémiques avant les repas et +''insuline rapide'' avant les repas qui sont associés à une glycémie trop haute|
|!//si Hb Glyquée >7.0%//|
|+controles glycémiques après les repas et ''augmenter la dose d'insuline rapide'' avant les repas qui sont associés à une glycémie trop haute|
{{insulines_schema.jpg}}
* le ''Diabète de type 1'' (ou DID / diabète insulino-dépendant / diabète juvénile) est principalement du à une ''destruction autoimmune'' des ''cellules beta'' du pancréas, amenant à un ''manque d'insuline'' sévère. * Il apparait surtout ''chez l'enfant'' de moins de 20 ans, mais peut se déclarer n'importe quand. *Il est associé à des ''anticorps'' *Les patients diabétiques type 1 sont à risque de faire des ''acidocétoses'', ce qui est souvent le mode de découverte. (Les type 2 font plutot des Etats hyperosmolaires Hyperglycémiques). *Contrairement au type 2, il n'est PAS associé à l'obesité *Le déficit étant sévère depuis un âge jeune, les diabétiques type 1 ''développe tôt des complications''. *Lors de la découverte de la maladie, il y a souvent une ''honeymoon period'' ou les cellules beta ne sont pas encore épuisées et ou le traitement ne demande que peu d'insuline. *Le ''traitement'' passe par l'''insulinothérapie''.
* Le ''Diabète de type 2'' (ou DNID, Diabète Non-Insulinodépendant, Adult-Onset diabetes) est dû d'abord à une ''résistance à l'insuline'' qui va progressivement dégénérer en un ''déficit relatif d'insuline'' par dysfonction des cellules Beta, puis un ''déficit absolu d'insuline''. *Le Diabète de type 2 inclut aussi le "Latent Autoimmune Diabetes in Adult (LADA)" qui est une forme de diabète auto-immun de l'adulte. *Il est lié principalement aux ''adultes'', surtout les ''obèses'', mais il devient de plus en plus fréquent en pédiatrie à cause de l'augmentation des enfants obèses. *Contrairement au diabète de type 1 qui fait des Acidocétoses Diabétiques, le diabète de type 2 fait plutot des ''Etats Hyperosmolaires Hyperglycémiques''. *le ''traitement'' ne passe pas que par l'insuline mais aussi les changements d'habitue de vie, les Anti-Diabétiques Oraux et les Incrétines.
![ext[diabete_grossesse.pdf|./pdf/diabete_grossesse.pdf]] <!-- Texte caché pour la recherche Classification Diabète gestationnel • Diabète pré-existant: – type 1 ou insulino-dépendant – type 2 • Diabète gestationnel Physiopathologie • Diabète type 1 (=insulino-dépendant) – diagnostic dans l'enfance ou l'adolescence – lésion auto-immune du pancréas – absence de sécrétion d'insuline endogène – injection d'insuline à vie (ou greffe pancréas) – risque de coma acido-cétosique – complications à moyen terme Physiopathologie • Diabète type 2 – diagnostic habituellement après 40 ans – obésité – résistance à l'insuline, sécrétion d'insuline augmentée – traitement par les anti-diabétiques oraux – risque de coma hyperosmolaire – complications à long terme Complications à long terme – rénales – vasculaires – neuropathie – oculaires • A l'âge de la grossesse, surtout chez les femmes avec diabète type 1 Fréquence du diabète pd la grossesse • Diabète type 1: <1% • Diabète type 2: rare, mais en augmentation (cf obésité, sédentarité) • Diabète gestationnel: 2-15% 3% à Genève – prévalence du DG probablement 5-10% avec les critères IADPSG 2010 – variable suivant l'ethnie et suivant les critères de dépistage Effet de la grossesse sur le métabolisme du glucose • Pourquoi une résistance à l'insuline lors de la grossesse? – Hormones diabétogènes: HPL, progesterone, prolactine et cortisol – Prise de poids • Augmentation des acides gras libres • Diminution des acides aminés Métabolisme lors du jeûne modifié Risques lors de la grossesse chez des femmes diabétiques (type 1): mortalité maternelle et périnatale Relation entre la glycémie moyenne rapportée dans les études et la mortalité périnatale Diabète pré-existant Type 1 Type 2 -->
!! Définition * Le'' diabète insipide'' est dû à une ''diminution d'ADH'', soit due à une ''baisse de production'' soit à une ''résistance périphérique'', avec comme conséquence des ''pertes d'eau'' importantes. !! Etiologie *Le ''Diabète insipide central'' est le plus fréquent. Il est dû à une une ''baisse de production de l'hypophyse postérieure''. Il est souvent ''idiopathique'' mais peut arriver suite à un ''trauma / chirurgie'' ou à cause d'une ''tumeur''. *Le ''Diabète insipide Néphrogénique'' est plus rare. Il est dû à une production normale d'ADH mais une ''résistance au niveau des tubules''. Il est le plus souvent du au ''lithium''. !! Clinique *Le patient aura surtout une ''polyurie'' et ''polydipsie''. *Entre ''5-15L'' d'urines peuvent être produites par jour ! L'urine est totalement ''décolorée'' car diulée à l'extrême *L'apport en eau est maintenu par une ''soif'' accompagnant la polydipsie. *Le patient aura aussi une ''nycturie'' associée. !! Diagnostic *Les ''Urines'' auront une ''osmolarité basse'' tandis que le ''plasma'' aura une ''osmolarité augmentée'' *le ''Test de déprivation'' permet de poser le ''diagnostic'' et de différencier ''central vs néphrogénique'' et ''diabète insipide vs polydipsie psychogène'': *# On ''stoppe'' tout apport hydrique et on mesure l'''osmolarité urinaire'' chaque heure *# Quand elle est stable on injecte de la ''Desmopressine'' (agoniste AVP) et on mesure la ''réponse''. |!|!Osm. après privation|!Osm. après Desmopressine| |!Normal| ↑ | ↑ ↑ ↑ | |!DI central| - | ↑ | |!DI périphérique| - | - | !! Traitement * Pour le ''DI central'' on donne de la ''desmopressine'' * Pour le ''DI périphérique'' on donne de la ''chlorpropamide'' *Il faut aussi traiter les causes sous-jacentes (tumeurs...)
undefine
''ACIDOCETOSE'' *L'Acidocétose est une complication aigue surtout trouvée dans le ''diabète de type 1''. C'est une urgence médicale ! *Elle peut être ''déclenchée'' par un ''manque d'insuline'' (mauvaise gestion, decouverte du diabète) ou à un ''Stress'' (chirurgie, infections, trauma ,...) *On retrouve: **Une ''Hyperglycémie'' **Une ''Diurèse Osmotique'' **Des ''Acides Gras Libres'' ainsi que des ''Corps Cetoniques'' (avec pH sanguin acide) **Une ''Glycosurie'' et une ''Cetonurie'' (le rein est dépassé) *''Cliniquement'' on trouve: **Une ''Polyurie'', ''Polydipsie'' et ''Polyphagie'' **Une ''Fatigue'', ''Faiblesse'' et ''Perte Pondérale'' **Des ''nausées / vomissements'' **Une ''Déshydratation'' (Peau sèche, Tachycardie) **Une ''Respiration de Küssmaul'' ([[comme une hyperventilation|respirations_schema.jpg]]) *Le ''Traitement'' implique: **''Réhydratation IV'' (NaCl 0.9%) **''Insuline IV'' jusqu'à ''résoudre l'acidose'', pas juste la glycémie **''Potassium IV'' afin ''d'éviter'' ''l'hypokalémie'' induite par l'insuline (qui fait aussi rentrer le K+ dans la cellule) **''Bicarbonate IV'' si le ''pH <7.0'', sinon ne pas en donner ''ETAT HYPEROSMOLAIRE HYPERGLYCEMIQUE'' *L'Etat Hyperosmolaire Hyperglycémique est trouvé généralement chez les ''diabétiques type 2''. Il se développe sur ''quelques jours'' à quelques semaines. Il y a un risque de Mortalité ! *Contrairement à l'acidocétose diabétique, il ''reste un peu d'insuline'', ce qui ''évite l'acidose et la cétose'' car il n'y a pas la production d'acides gras et corps cétoniques par lipolyse. *Il peut être ''déclenché'' par un ''stress'' (trauma, chirurgie, infection, ...) *On retrouve: **Une ''Hyperglycémie'' (avec des glycémies TRES élevées parfois > 30 mmol/l !) **Une ''Diurèse Osmotique'' **Un risque de ''Coma'' (effet de l'osmolarité sur les neurones), qu'on ne trouve pas dans l'acidocétose *''Cliniquement'' on trouve: **Des ''Symptômes Insidieux'' car l'apparition est plus ''progressive'' que dans l'acido-cétose. **Une ''Déshydratation'' (plus importante, les patients sont souvent vieux) **Des ''troubles de la consience'' qui peuvent évoluer en coma **Pas de Respiration de Küssmaul *Le ''Traitement'' implique: **''Réhydratation IV'' (NaCl 0.9%) **''Insuline IV'' jusqu'à résoudre la glycémie **''Potassium IV'' afin ''d'éviter'' ''l'hypokalémie'' induite par l'insuline (qui fait aussi rentrer le K+ dans la cellule)
''MACROVASCULAIRES'' *Les complications macrovasculaires sont dues à l'apparition d'''Atherosclérose'' et à ses conséquences. Il s'agit d'une ''importante cause de mortalité'' chez les patients diabétiques ! : **Risque de ''Syndrome Coronarien'' (attention à l'angine silancieuse !) **Risque d'''AVC'' **Présence d'''Artériopathie Périphérique'' (IAMI) avec risque de [[Pied diabétique]] (cf. Dermatologie) avec ulcère. ''MICROVASCULAIRES'' *''Néphropathie diabétique'' ** La néphropathie diabétique commence par un épaissisement des capillaires glomérulaires, évoluant en ''microalbuminurie'', puis en ''protéinurie'', puis finalement un ''insuffisance rénale terminale''. *''Rétinopathie diabétique'' **La Rétinopathie est d'abord ''non-proliférative'', puis ''proliférative'', avant de finir par dégénérer en ''maculopathie'' **On doit dépister ''chaque année'' la rétinopathie diabétique, et continuer les contrôles de manière encore plus rapprochées une fois celle-ci déclarée. ** cf. [[Rétinopathie Diabétique]] (Ophtalmologie) *''Neuropathie diabétique'' **La ''polyneuropathie'' est une complication avec ''perte sensitive'' touchant la ''sensibilité profonde'',commençant d'abord dans les ''jambes'', avec ensuite ascension progressive. On observe aussi une ''perte des reflexes achiléens et rotuliens''. **On trouve aussi une ''neuropathie motrice'' avec des ''troubles de la posture'' et de la'' coordination''. **Finalement on trouve aussi la ''neuropathie autonome'', avec ''tachycardie au repos'', ''hypotension orthostatique'', ''Gastroparésie'', ''Impuissance'' (aussi due à l'atteinte vasculaire) et ''rétention urinaire'' (atonie vésicale)
@@background-color:lemonchiffon; !'' Diagnostic Différentiel '' @@ <<list-links "[tag[Diagnostic Differentiel]sort[title]]">>
![ext[Diagnostic_prenatal.pdf|./pdf/Diagnostic_prenatal.pdf]] <!-- Texte caché pour la recherche OBJECTIFS I. Surveillance d‘une grossesse normale II. Surveillance en cas de Maladies infectieuses MAP (Menace d‘accouchement prématuré) Diabète Grossesse multiple III. Surveillance périnatale Signes de souffrance foetale Risques liés à l‘accouchement prématuré et grossesse multiple SURVEILLANCE PRÉNATALE: COMMENT? COMMENT POSER UN DIAGNOSTIC EN PN Détecter les grossesses à risques Bien être foetal et maternel GROSSESSE A RISQUE Anamnèse et antécédents âge (<18, > 35 ans) multiparité fausse couche tardive (FC) MIU (mort in utéro) césarienne ou chirurgie utérine prématurité Pathologies maternelles Diabète, HTA , cardiaques, pulmonaires, rénales infectieux ( HIV) collagénoses ( lupus) Abus de substance (alcool,tabac,cocaine...) GROSSESSE À RISQUE Grossesse actuelle MERE Grossesse multiple Maladie hypertensive Diabète gestationnel MAP Infections Abus de substances, tabac Hémorragie : placenta praevia, décollement placentaire Immunisation rhésus GROSSESSE À RISQUE Grossesse actuelle FOETUS RCIU (retard de croissance intra-utérin) Macrosomie Malformations Présentation 1ere consultation :1er trimestre (8-12SA) Déterminer âge gestationnel, terme et facteurs de risque Anamnèse DR, cycles, contraception Antécédents familiaux, personnels, gynéco- obstétricaux Médicaments, allergies, tabac, drogues, alcool L’ÉCHOGRAPHIE DU 1ER TRIMESTRE 11 0/7 – 14 SEM Localisation de la grossesse Nombre d’embryons Grossesse évolutive ? CRL – Biométrie Datation – Age gestationnel Mesure de la clarté nucale Morphologie précoce CRL • Distance mesurée entre les extrémités céphaliques et caudale de l’embryon. • Mesure du CRL est reportée sur une table graphique pour comparaison à l’âge gestationnel. • Si l’âge calculé sur la base des DR diffère de = ou > 7jrs, correction de l’age gestationnel 12 sa CRL • Plan de coupe sagittal strict passant par le tubercule génital, tête en position intermédiaire. • PLUS DE MODIFICATION DU TERME ETABLI LE BIP (DIAMETRE BIPARIETAL): L’ÉCHOGRAPHIQUE DU 1ER TRIMESTRE VA PERMETTRE: Localisation de la grossesse Nombre d’embryons Grossesse évolutive ? CRL – Datation – Age gestationnel Mesure de la clarté nucale Morphologie précoce -->
![ext[dislocation_epaule.pdf|./pdf/dislocation_epaule.pdf]] <!-- Texte caché pour la recherche épaule -->
{{stanford_classification.jpg}}
!! Généralités
* une ''Dissection aortique'' correspond à une ''déchirure de l'intima'' qui se remplit de sang et ''dissecte la media''. La dissection peut s'arrêter là ou sortir par un point de ré-entrée.
*La'' classification de Stanford'' est la plus importante car elle a une implication chirurgicale
**''Stanford A'': Implique l'aorte ascendante, le traitement est chirurgical
**''Stanford B'': N'implique pas l'aorte ascendante, le traitement est conservateur
*L'''Etiologie ''est surtout reliée à l'''HTA'' bien que les syndromes de Marfan et Ehler-Danlos peuvent exister.
*La ''Clinique'' est une ''douleur soudaine transfixiante irradiant dans le dos''. le patient peut présenter une ''asymétrie de tension entre les deux bras''. Suivant les vaisseaux impliqués il peut y avoir des ''syndromes ischémiques'' divers et variés.
*Si la dissection rupture, on peut trouver des hémoptysie (''plèvre''), des hypotensions (''péritoine'') ou des tamponnades (''péricarde'')
*Les ''Investigations ''passent surtout par une echographie ou un ''CT-injecté'' qui montrera en détail la dissection et la fausse lumière.
*Le ''traitement médical'' passe par les ''B-Bloquants'' pour diminuer la tension
*Le ''traitement chirurgical'' pour les Stanford A passe par un remplacement de l'arc aortique par des prothèses ainsi qu'un remplacement des valves.
{{dissection_aortique_cta.jpg}}
undefine
![ext[diverticule_meckel.pdf|./pdf/diverticule_meckel.pdf]] <!-- Texte caché pour la recherche Meckel diverticulum 226 Around 2% of individuals have an ileal remnant of the vitello intestinal duct, a Meckel diverticulum, which contains ectopic gastric mucosa or pancreatic tissue. Most are asymptomatic but they may present with severe rectal bleeding, which is classically neither bright red nor true melaena. Other forms of - Gastroenterology Figure 13.7 Technetium scan showing uptake by ectopic gastric mucosa in a Meckel diverticulum in the right iliac fossa. presentation include intussusception, volvulus around a band, or diverticulitis which mimics appendicitis. A technetium scan will demonstrate increased uptake by ectopic gastric mucosa in 70% of cases (Fig. 13.7). Treatment is by surgical resection. Summary Meckel diverticulum • Occurs in 2% of individuals. • Generally asymptomatic, but may present with bleeding (which may be life threatening), intussusception, volvulus or diverticulitis. - • Treatment is by surgical resection. -->
undefine
{{diverticulite_ct.jpg}}
!!Définition
*La ''diverticulite'' est une ''inflammation d'un diverticule''.
*Elle survient lors de ''l'impaction de matière fécale'' dans le ''[[diverticule|Diverticulose]]'', avec ''érosion'' et ''microperforation'', puis ''inflammation'' locale progressive.
*Elle peut être ''non-compliquée'' (stades de Hinchey 1+2) ou ''compliquée'' (stades de Hinchey 3 et 4)
!!Clinique
*''douleur abdominale'', souvent au quadrant inférieur gauche.
*''fièvre'' et ''leucocytose''
*diarrhées, consitpations, vomissements.
!!Investigations
*''CT-Scan'' avec ''contraste oral et IV''
*ne ''PAS'' faire de lavement baryté ou de coloscopie car il y a un ''risque de perforation''.
!!Traitement
''Diverticulite non-compliquée''
*''ATB IV''
*''STOP Per Os''
*''Fluides IV''
''Diverticulite compliquée''
*''Chirurgie''
{{hinchey_diverticulite.jpg}}
undefine
{{diverticulose.jpg}}
!!Définition
*la ''diverticulose'' correspond à un colon avec des diverticules, qui peuvent s'inflammer et faire des [[diverticulites|Diverticulite]].
*les ''diverticules'' sont des ''herniations de la muqueuse'' à travers la paroi colique. Ils sont fréquents ''après 50 ans'' et se trouvent le plus souvent dans la région du ''sigmoïde''.
*La ''pression augmentée'' est un facteur de risque pour l'apparition des diverticules. Par extension, la ''constipation'' et le ''régime pauvre en fibres'' sont des facteurs de risque.
!!Clinique
*''Asymptomatiques'' généralements. on les découvre lors des ''coloscopies'' ou des ''Lavements Barytés ''de façon fortuite.
*Inconfort vague au quadrant inférieur gauche
*constipation / diarrhée
//complications//
*''Saingement'' indolore du rectum. Le saignement se résoud spontanément sans besoin de traitement
*''[[Diverticulite|Diverticulite]]'' lors de l'impaction de matière fécale dans le diverticule, avec érosion et microperforation
!!Investigation
*''Lavement Baryté'' qui est le gold-standard et montrera bien les [[diverticules|diverticulose_lavement_baryte.jpg]].
!!Traitement
*''régime riche en fibres''
{{diverticule_ct.jpg}}
undefine
undefine
undefine
@@background-color:lightgrey; !!!''External Docs'' @@ *[ext[fahrnipedia.ch/docs|./docs]] @@background-color:lightgrey; !!!''Tutos Tiddlywiki'' @@ <<list-links "[tag[Tutos]sort[title]]">>
...
!!Généralités * La ''Drépanocytose'' (ou Anémie Falciforme) est une ''maladie héréditaire'' à transmission ''autosomale dominante''. Il s'agit de l'Hémoglobinopathie la plus fréquente. Elle résulte en une Hémoglobine anormale: ''Hb S'' (au lieu de l'Hb A), donnant un ''[[Aspect en Faucille des GR|drepanocytose.jpg]]'' au frottis sanguin. * Les Erythrocytes en Faucilles donnent une ''viscosité augmentée'' et induisent des ''obstructions de la microcirculation'' avec ''risque cardio-vasculaire''. * Les ''patients hétérozygotes'' (HB AS) sont habituellement ''asymptomatiques''. Le seul ''risque'' pour eux est de s'exposer à de l'''O2 diminué'' (plongée, hypoxémie, froid, infection). Ce trait est souvent présent chez les ''africains''. * Les ''patients homozygotes'' (HB SS) présentent des symptomes ''dès 6-18mois après la naissance'', avec une ''anémie hémolytique'' , une ''jaunisse'', une ''splénomégalie'' et un ''retard staturo-pondéral''. De plus les patients peuvent présenter des ''crises vaso-occlusives'' avec infarctus aigus de divers organes * Au ''labo'', en plus de la ''FSC'' et du ''frottis'' on peut aussi faire une ''Electrophorèse de l'HB'' afin de détecter l'HB s. !!Crise vaso-occlusive ''Facteurs Déclenchants'' *hypoxémie *Fièvre, Infection *Deshydratation ''Organes touchés'' *Os (dont nécroses aseptiques) *Abdomen (infarctus hépatique, splénique, mésentérique) *Coeur (infarctus, diminution FEVG) *Pumons (thrombo-embolique, HTAP) *Immunitaire (infections par asplénie fonctionelle) *Reins (NTA) *Peau (ulcères des jambes) *Yeux (rétinopathie *Pénisme (priapisme)
undefine
undefine
undefine
!! Généralités
*Les ''Dysautonomies'' sont de multiples symptômes dûs à un ''malfonctionement du système autonome'', Plus particulièrement c'est une ''neuropathie'' du système autonome.
*Le ''diagnostic'' passe par la réalisation de plusieurs ''tests'' objectivant un des symptômes caractéristiques.
!! Etiologie
*La ''Dysautonomie Primaire'' correspond à une atteinte ''idiopathique'' ou ''neurodégénérative''.
*La ''Dysautonomie Secondaire'' est dûe à
**''Médicaments''
**''Diabète''
*''Maladie de Lyme''
**''Lésion cerebrale''
**''Maladie de Parkisnon''
**''SEP''
**''Alcool chronique''
!! Clinique
* la ''Clinique comprend un des symptômes suivant'':
**''Hypotension Orthostatique''
**''Xerostomie'' (bouche sèche)
**''Anhydrose'' (insuffisance de transpiration)
**''Tachycardie''
**''Incontinence Urinaire''
**''Incontinence Digestive''
**''Constipation''¨
**''Dysfonction érectile''
**''Vision floue'' ou ''Vision tunnel''
!! Traitements
*''Difficile à traiter'', il faut déjà ''traiter les causes sous-jacentes'' s'il y en a
** les ''IPP'' et les ''Anti-H2'' peuvent aider au niveau ''digestif''
**le ''sidenafil'' est utilisé pour l'''impuissance''.
{{dysautonomies_schema_sna.jpg}}
undefine
![ext[dyslipidemie.pdf|./pdf/dyslipidemie.pdf]] <!-- Texte caché pour la recherche LDL Cholesterol Dyslipidemie dyslipidémie statine statines -->
!!Definition *Infants who still have an oxygen requirement at a post menstrual age of 36 weeks are described as having bronchopulmonary dysplasia (BPD) or chronic lung disease. *The lung damage comes from pressure and volume trauma from artificial ventilation, oxygen toxicity and infection. *The chest X ray characteristically shows widespread areas of opacification, sometimes with cystic changes . *Some infants need pro longed artificial ventilation, but most are weaned onto continuous positive airways pressure (CPAP) followed by additional ambient oxygen, sometimes over several months. Corticosteroid therapy may facilitate earlier weaning from the ventilator and often reduces the infant’s oxygen requirements in the short term, but concern about increased risk of abnormal neuro development including cerebral palsy limits use to those at highest risk and only short courses are given. *Some babies go home while still receiving additional oxygen. *A few infants with severe disease may die of intercurrent infection or pulmonary hypertension. Sub sequent pertussis and RSV (respiratory syncytial virus) infection may cause respiratory failure necessitating intensive care.
!!Généralités
*Primaire : en absence de maladie organique
*Secondaire : du à une maladie organique
{{dysmenorrhees.jpg}}
!!DD
*Primaire / idiopathique
*Secondaire
**Endométriose (endomètre en dehors de la cavité utérine)
**Adénomyose (endomètre dans le myomètre)
**Léiomyome (tumeurs bénignes du muscle lisse dans l'utérus)
**Malformation utérine (ex utérus bicorne non communiquant)
**Polypes utérins
**Synéchies intra-utérines
**Kystes ovariens
**Sténose cervicale
**Hymen non perforé, septum vaginal transverse
**PID
**Corps étranger
undefine
undefine
{{dystrophie_duchenne.jpg}}
!! Généralités
*La ''Dystrophie de Duchenne'' est une ''maladie liée à l'X'' retrouvée exclusivement chez les mâles, avec une ''mutation de la dystrophine'', ce qui amène à une mort des cellules musculaires, sans inflammation.
*L'''enfant'' présente rapidement une ''faiblesse musculaire généralisée progressive'' avec les ''muscles proximaux atteints en premiers'', comme la ceinture pelvienne.
*L'atteinte finit par toucher les ''muscles respiratoires'', avec ''chaise roulante'' et ''décès'', ce qui arrive aux environt de la ''troisième décennie''.
*Pour se lever, l'enfant effectue la ''manoeuvre de Gowers'' en utilisant ses mains posées contre le sol comme appui, puis posées sur les genoux
*Les ''mollets s'hypertrophient'', d'abord par du muscle puis remplacé par du tissus adipeux (''pseudohypertrophie'').
*Le ''diagnostic '' se fait d'abord par des niveaux de ''creatine phosphate élevée'' et se confirme par des ''tests ADN''.
*Le ''traitement'' de soutien comporte des ''corticostéroïdes'', ainsi que parfois de la ''chirurgie de scoliose'' qui finit par se développer.
undefine
@@background-color:OrangeRed; !''ECG'' @@ <<list-links "[tag[ECG]sort[title]]">>
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{echinococcose.jpg}}
!!Définition
*l'''Echinococcose'' est une ''zoonose potentiellement'' ''mortelle'', due au ''//Ténia//'' nommé //Echinococcus multilocularis// (''Echinococcose Alvéolaire'') ou //Echinococcus granulosus// (''Kyste Hydatique'')
*Cet article parle essentiellement de l'''Echinococcose Alvéolaire'', trouvée dans'' nos régions'', tandis que le Kyste Hydatique se trouve plutôt en //Amérique du sud//.
*Le Ténia mature habite le ''renard'' et parfois le ''chien''. On retrouve ensuite ses ''oeufs dans les selles de l'animal'', qui sont ensuite mangés par l'homme quand il touche le chien ou mange des ''//fraises des bois//'' par exemple.
*l'être humain est un //hôte aberrant//, ayant pris la place de l'hote intermédiaire (le rongeur)
*Une fois ingerés, les larves migrent ''par le sang'' d'abord au niveau du ''foie'', puis parfois dans d'autres organes comme les ''alvéoles''.
*''30% des renards'' sont infectés par// E. multilocularis //en moyenne, ceci aussi bien en ville qu’en campagne
{{echinococcose_regions.jpg}}
!!Clinique
*longue période d'''incubation asymptomatique'' suivie d’une maladie chronique invasive d’évolution lente évoquant une'' maladie tumorale''.
*Le ''Foie'' est le premier organe touché généralement (malgré le nom //alvéolaire//), puis il y a une ''invasion périphérique '' ( diaphragme, espace périrénal, ganglions péritonéaux, pancréas), puis des ''Metastases'' (os, poumons, cerveau, rate). On retrouve
**''Douleur abdominale''
**''Ictère''
!!Diagnostic
*''US'' et ''CT'', voir ''IRM'', montrant des''// pseudotumeurs calcifiées//''
*''Sérologie''
*Histologie après Biopsie
*PCR
!!Traitement
*''Antiparasitaire'': ''albendazole'' généralement, redonnant un bon pronostic a la maladie. Stabilise les lésions plutôt que de les éliminer
*''Chirurgie'' par //Hepatectomie Partielle// si possible
**En cas de complications: traitements endoscopiques ou interventionnels percutanés
{{echinococcose_alveolaire_CT.jpg}}
undefine
undefine
undefine
//en construction//
![ext[dermato_eczema.pdf|./pdf/dermato_eczema.pdf]] <!-- Texte caché pour la recherche Eczema - Inflammation dermo-épidermiques prurigineuse. - Réaction retardée de type IV (immunité adaptative : Th1-2 → IFNgamma et IL4) Exogène : eczéma de contact (PAS de prédisposition génétique !) Endogène (symétrique) : dermatite atopique Autres : nutritionnel, microbien - Craquelé (astéatosique, âgés, membres, sur fond xérose, aspect en « dallage irrégulier en pierres plates », peu sx TTT : emollients) - De stase (secondaire hyperpression MI, le long des trajets veineux, début malléole interne) - Nummulaire (arrondis 1-5cm, bien délimité (!), séparées, MI ++, aggravé par OH, tabac, insuffisance veineuse chronique / évoquent DA, foyer infectieux à distance) - Dysidrosique (palmo-plantaire, face latérale des doigts ; atopie, 2° à mycose à distance, allergie au nickel, hyperhydrose ; évolution : vésicules sèchent (brun-jaune) puis desquament avec collereDe vs bulles, hémorragie vs dissémination vs surinfection) Erythème (vasodilatation), papules (œdème dermique), vésicules (collections épidermiques), suintements et croûtes (rupture vésicule), bordure effritée, éruptions à distance si eczema continue - Palmo-plantaire : dysidrose (car couche cornée épaisse) - Visage (paupières) ± OGE : oedèmes ++ -> vésicules Lésions secondaires : squames (réparation) et guérison sans cicatrice OU eczema chronique (persistance : fissures, croûtes) → lichénification (eridermopoïèse : brillant, plissements marqués, prurit - réversible) - Zona ou infection herpétique - Dermite irritative de contact : non allergique, fréquent ++ → brûlure, ø prurit, apparition rapide (h), bordure nette, pas de lésion disséminée, érythème vernissé squameux, pas de micro-vésiculations, patch test nég) (irritants = non spécifiques) - Psoriasis (numulaire, dyshydrose) - Bx : spongiose (vésicules) et lymphocytes dans épiderme (pas toujours utile) - Surinfection = croûtes méllicériques (staph strepto) - Prick test = réaction immédiate (urticaire) - Si eczéma non traité : érythrodermie (extension), surinfection bactérienne, retentissement socio-professionnel - Acquis, fréquent (1,2-5%), PAS de prédisposition génétique - Provoqué par contact avec allergène – haptène. Le risque d’exzema est plus grand si allergène puissant (poison ivy) ou que l’exposition est important (nickel) - Phase de sensibilisation (qq j → plusieurs années). Puis révélation (eczema) avec activation des ¢T mémoires 24-48h post contact sur la zone exposée. - Allergènes les plus fréquents : nickel, chrome, résines epoxy, parfums, cosmétiques, vernis → manuportage sur paupières etc. - INV : tests épicutanés (posé 48h, lecture 3j après), photo patch test (poduit et produit + UVa) → derma?te photoallergique - TTT : (CS topiques), émollients, éviction allergène, ascomycines topiques = tacrolimus (anti IL2, évite EI CS) GEN CLASS CLIN DD INV CAVE E. ALLERGIQUE DE CONTACT Eczema Suite - Prédisposition génétique avec barrière cutanée altérée due à un défaut de fillagrine (FR : asthme, RCA, allergies respiratoires → type I, même si eczema = type IV – Th2). - Peau atopique : laisse sortir trop d’eau (sèche) laisse entrer les allergènes (protéiques ++) → réaction inflammatoire (hypersensibilité retardée de contact aux allergènes de l’environnement) - 2 formes : extrinsèque (atopique = IgE = eczema atopique) et intrinsèque (AI, pas de terrain atopique, pas d’IgE) - Fréquent en pédiatrie (2-5% enfants), apparition vers 2m-2ans. CLIN : Symétrique, siège et type varie selon âge, phénotype atopique - Nourrisson (tête : joues-front, respect centre visage, convexités, eczéma aigu), grand enfant (plis, visage, cou, lichénifié) et adulte (plis, cou, mains, mammelons, lichénifié) - Phénotype atopique : xérose (peau sèche), cheilite, prelèches, pâleur centrofaciale, replis sous palpébral de Dennie-Morgan), intolérance à la laine, intertrigo du lobe de l’oreille - Dermatographisme blanc DIAG : CLINIQUE (pas de bx) A : Prurit (obligatoire) B : ≥3 : morphologie et distribution typique → ATCD personnels d’atteinte du visage-faces extension <10ans ou plis de flexion adulte/ AP ou AF d’atopie (asthme, RCA, DA) / ATCD de xérose généralisé dans la dernière année / Eczema des grands plis visibles ou joues-front-convexités <4ans / début des signes <2ans INV: diagnostic clinique - (Ev : FSC = éosinophlie, IgE totaux élevés). - Tests allergo (prick test, IgE, épicutanés) : pas dx, utile pour rechercher facteur d’entretien ou aggravation TTT : CS topiques classe III = mométhasone (poussées : 1x/j pendant 10j puis dégressif, PAS sur visage ou fesses enfants), ascomycine (⊣ calcineurine : tacrolimus, dès 2ans, visage possible, pas de risque d’atrophie cutanée, ø absorption cutanée, ø dermatite périorale). Plus on traite vite, moins on a de lymphocytes matures →cô dans le temps - Hydratation peau, antiH1 PO - ATB topiques, bains (car peau atopique = infecté par staph ++) - AC anti-IL4R (dupilumad) CAVE : risque de développer asthme (50%) et RCA (75%) Risque erythrodermie, infections (herpès), mycoses, tr psy CAVE : øAINS ou anti-H1 topiques → inefficace et photoSN DERMATITE ATOPIQUE (DA) CAVE -->
{{embolie_pulmonaire_ct.jpg}}
!!Définition
*L'''EP'' (Embolie Pulmonaire) est une des deux facettes de la MTEV (Maladie Thrombo-Embolique Veineuse), en compagnie la TVP ([[Thrombose Veineuse Profonde|Thrombose Veineuse Profonde]]).
*Elle survient lorsqu'un ''thrombus'' venant d'une veine inférieure vient se coincer dans une ''artère pulmonaire''.
*L'apport sanguin en aval est bloqué et la pression pulmonaire en amont est augmentée. Un effet espace mort est créée dans la zone dévascularisée. La vascularisation bronchique prévient en général l'infarctus pulmonaire, sauf dans les terrains d'IC gauche chronique.
*Le résultat est une ''hypoxémie'' et une ''hypercarbie'', développant une ''tachypnée''
*Les ''Facteurs de Risque'' sont importants:
*# ''Immobilisation, Trama ou Chirurgie récents''
*# ''Maladie inflammatoire''
*# ''Cancer''
*# ''Pathologie médicale aigue'' (AVC, Sepsis, BPCO, IC)
*# ''Grossesse ou Pillule''
*# ''Varices''
*# ''Age''
*# ''ATCD de MTEV''
*# ''Thrombophilies'' (Mutation PC, PS, Leiden V)
!! Clinique
*''Douleur pleurétique''
*''Dyspnée''
*''Toux''
*''Tachypnée'' et ''Tachycardie''
*Hémotpysie
*Signes de TVP
*Syncope
Le ''Score de Genève révisé'' permet de mieux apprécier la probabilité pré-test d'EP:
|!''Score de Genève''|!''Score''|
|Age >65 ans| 1 |
|ATCD de TVP ou EP| 3 |
|Chirurgie sous AG récente| 2 |
|Cancer récent| 2 |
|Douleur unilatérale d'un MI| 3 |
|Hémoptysie| 2 |
|Douleur à la palpation d'une veine| 4 |
|Tachycardie à >74 ou >94| 3 ou 5|
|!Probabilité faible/moyenne (5-15%)|!0-10|
|!Probabilité Forte (50%) |! >10|
!! Investigations
{{embolie_pulmonaire_algorithme.jpg}}
*Faire le ''Score de Genève''.
**''Probabilité clinique faible/intermédiaire'': les ''D-Dimères >500 ng/ml'' permettront de dire si on va au CT ou si on abandonne la piste d'EP.
**''Probabilité clinique forte'': passer directement a l'''Angio-CT'' pour trouver l'EP. Si le CT ne trouve rien et que la probabilité clinique reste forte, on peut tenter un ''US des MI'' pour trouver l'EP. Si un __US trouve la thrombose dans la jambe__, ca équivaut au diagnostic, pas besoin de CT on traite. (Ps: la VFSuperficielle = une veine profonde, c'est comme l'AFS)
*La ''Scintigraphie V/Q'' a plutôt été remplacée par l'Angio-CT. Elle peut être utile en cas de contre-indication et montrera un [[missmatch ventilation-perfusion|embolie_pulmonaire_nx.jpg]].
*la ''Rx thorax'' est ''normale'' en général.
*l'''ECG ''montrera un[[ S1Q3T3|embolie_pulmonaire_s1q3t3_ecg.jpg]].
*Si c'est une ''Récidive '',faire un ''bilan hématologique'' a la recherche d'une ''thrombophilie''.
**Si c'est une ''EP idiopathique'' et qu'on a un doute clinique, il faut ''chercher un cancer''.
!!Traitement
#''Oxygène''
#''Anticoagulation'' (Héparine ou HBPM) mais ça ne va pas dissoudre le caillot.
#//''Thrombolyse''// IV seulement si EP massive (qui est une définition clinique: hypotension) et ''//Thrombectomie//'' si résistance ou C-I à la lyse.
#''ACO'' à long terme avec INR entre 2-3
{{embolies_pulmonaires_nucl.jpg}}
!!Examen
''Scintigraphie Ventilation/Perfusion (V/Q)''
* Une ''Scintigraphie Ventilation / Perfusion (V/Q)'' est réalisée pour chercher l'EP.
*L'irradiation de ''2 mSv'' est plus faible que pour le CTA
*la ''gravité'' impacte la ventilation et la perfusion, avec les apex qui reçoivent moins de ventilation et de perfusion que les bases
*normalement il y a un ''match'' entre l'intensité de la ventilation et l'intensité de la perfusion
*Lors de ''//ventilation diminuée//'' (pneumonie, asthme, emphysème, bronchite, il y a une //vasoconstriction hypoxique// entraînant une ''//perfusion diminuée//''. Ce qui donne au final un ''match V/Q''
*dans l'''EP'' en revanche, il y a juste une ''//perfusion diminuée//'', accompagnée d'une ''//ventilation normale//''. au final cela donne un ''missmatch V/Q'' dans les territoires occlus-
*on utilise ''deux traceurs'' pour ce faire:
**un ''traceur ventilé'' pour l'aération. Il en existe deux types: les ''radiogaz'' et les'' radioaérosols''.
**un ''traceur injecté'' pour la perfusion, composé de petites particules qu vont faire des //micro-embols// dans la circulation pulmonaire et s'y déposer
*on demande toujours une ''Rx thorax'' datant de ''<24h''
!!Traceurs
|!Traceur|!Utilisation|!1/2 vie|!keV|!Commentaire|
|''Tc99m-MMA''|Perfusion|4-6h|140|Micro-embols|
|''Tc99m-Technegaz''|Ventilation|6h|140|Radioaérosol|
|//Tc99m-DTPA//|Ventilation|6h|140|Radioaérosol|
|//Xenon123//|Ventilation|5.25j|81|Radiogaz|
|//Krypton81m//|Ventilation|13sj|190|Radiogaz|
*Le ''TC99m-MMA'' //(Magroagrégats d'Albumine)// est un traceur de ''Perfusion'' qui va aller se déposer dans les capillaires pulmonaires. on administre entre 200'000-500'000 particules. Moins et on ne verrai pas assez le poumon. Trop et on pourrait aggraver l'embolie. Vu qu'on trouve environ 280 milliard de capillaires, il résulte que seul ''0.1-0-3% des capillaires sont embolisé''. Le produit se dégrade par la suite. On administre moins de particules pour les enfants, les Hypertension Pulmonaires, les Shunt D-G et les Grossesses
*le ''Tc-99 Technegas'' est un traceur de ''ventilation'', constitué de //microparticules de graphites// contenues dans du //gaz d'argon//. Le gaz inhalé va aller adhérer aux parois alvéolaires et se propage loin en périphérie. On peut aussi observer la trachée.
!!Terminologie
*''Match V/Q'': défect dans les deux scans, de même région et de même taille
*''Missmatch V/Q'' perfusion anormale dans une région de ventilation normale, ou déficit de perfusion bien plus grand que celui de ventilation
*''Triple Match V/Q'': défect dans les deux scans + la RX Thorax
*''defect ségmentaire'': défect généralement en forme de cale, correspondant à un segment pulmonaire. peut être large (>75% du segment), modéré (>25-75% du segment) ou petit (<25% du segment)
*''défect non-segmentaire'': défect n'étant pas de forme de cale, ou ne correspondant pas un à segment pulmonaire
!!Interprétation
//''Rx-Thorax''//
*Obtenir d'abord un RX thorax de moins de 24h et rechercher une cause de //tripe missmatch//:
**Infiltrat
**atéléctasie
**épanchement
*Chercher aussi une cause de //défect non-ségmentaire//:
**coupoles diaphragmatiques élevées
**cardiomégalie
**hiles élargis
//''Ventilation''//
*la Ventilation doit être semblable à la perfusion, mais avec moins de coups.
*les bases sont plus denses que les apex
*le coeur induit un léger défect au niveau de la base antérieure gauche
*le ''[[DD d'une hypoventilation|dd_hypoventilation.nucl.jpg]]'' comprend:
**bronchite
**bronchiectasie
**bulles
**asthme
**bronchospasme COPD
**bouchon muqueux
**carcinome
**pneumoine
**odème alvéolaire
*le produit peut se faire ''[[avaler|technegaz_avale.jpg]]'' et être visualisé dans la bouche, l'oesophage ou l'estomac.
''//Perfusion//''
*La Perfusion normale suit une distribution homogène au niveau de tous les lobes
*La Perfusion est considérée anormale non seulement si elle est absente mais aussi si elle est diminuée
*les hiles sont souvent photopéniques et le coeur induit une diminution d'activité au niveau de la base gauche.
*le sternum et le rachis diminuent l'activité au niveau médial
*la gravité a un effet sur la distribution, plus élevée aux bases
*le traceur peut se fixer au niveau des reins, de la thyroïde et de l'estomac, mais ne passe pas la BHE. si on en voit dans le cerveau c'est qu'il y a un Shunt D-G
*Le DD d'une hypoperfusion comprend:
**lésion vasculaire (EP, autres embols, vasculite, atrésie/hypoplasie d'artère pulmonaire)
**lésion de ventilation (pneumonie, bouchon de mucus, odème, atelectasie, asthme, COPD)
*Effet de masse (tumeur, adénopathie, épanchement)
*Iatrogène (chirurgie, fibrose post-radique)
//''Embolie Pulmonaire''//
<$button popup="$:/embolie_pulmonaire_nucl.jpg" >
[img width=64 [images/embolie_pulmonaire_nucl.jpg]]
</$button><$reveal type="popup" state="$:/embolie_pulmonaire_nucl.jpg"><div class='tc-tiddler-frame'>
{{embolie_pulmonaire_nucl.jpg}}
</div>
</$reveal>
*L'apparence classique comprend de ''multiples defects ségmentaires moderés à large'', le plus souvent situés au niveau des ''lobes inférieurs''.
*dans la ''phase aigue'' de l'EP, la ventilation est conservé et on trouve un ''Missmatch V/Q''
*la probabilité augmente avec le nombre de missmatchs
*il est important que les défects suivent les [[segments pulmonaires|segments_pulmonaires.nucl.jpg]].
*il est peu probable d'avoir un match dans une EP, mais il est possible d'avoir des petits missmatchs sans EP, notamment chez les fumeurs ou dans les bases des maladies restrictives.
*Généralement les défects ne disparaissent pas en >24h et vont surement persister si présents encore après >3mois
!!Exemples
<$button popup="$:/31.10.2016.jpg" >
[img width=64 [images/31.10.2016.jpg]]
</$button><$reveal type="popup" state="$:/31.10.2016.jpg"><div class='tc-tiddler-frame'>
{{31.10.2016.jpg}}
</div>
</$reveal>31.09.2016: V/Q normal
undefine
undefine
undefine
undefine
undefine
undefine
{{emphyseme_pulmonaire_type_ct.jpg}}
!!Emphysème Centrolobulaire
*l'''Emphysème Centrolobulaire'' est limité au bronchioles respiratoires et aux parties centrales des acini
*Il est surtout associé au ''tabac''
*Il est le plus sévère dans les lobes supérieurs
{{emphyseme_centrolobulaire.jpg}}
!!Emphysème Panlobulaire
*l'''Emphysème Panlobulaire'' implique l'entier de l'alvéole.
*Il est surtout associé aux ''déficits en alpha1-antitrypsine''
*Il est le plus sévère dans les lobes inférieurs
{{emphyseme_panlobulaire.jpg}}
!!Emphysème Paraseptal
*l'''emphysème paraseptal'' est le moins fréquent
*Il est situé proche des plèvres
*Il peut amener à la formation de ''bulles'' qui peuvent se rompre et faire des ''pneumothorax''.
{{emphyseme_paraseptal.jpg}}
!!Emphysème à la RX thorax
*La ''RX thorax'' montrera globalement l'''//hyperinflation//'':
**Elargissement du diamètre A-P
**Hyperclarté pulmonaire
**Aplatissement des coupoles diaphragmatiques
**Proéminence des artères pulmonaires
{{BPCO_rx.jpg}}
undefine
undefine
undefine
undefine
{{empyeme.jpg}}
!!Généralités
*Un ''empyème'', ou //pyothorax//, correspond à une ''collection de pus'' située ''dans la plèvre'', généralement ''unilatéral''. En soi c'est un //épanchement pleural exsudatif//.
*C'est une situation dangereuse qui nécessite un traitement immédiat.
*Les ''Causes'' peuvent être:
**''Pneumonie'', le cas le plus fréquent
**''Abcès pulmonaire''
**''Post-traumatique'' ou ''Post-chirurgical''
*La ''Clinique'' du patient sera principalement de la ''fièvre'' et des ''douleurs pleurétiques''.
*Le ''Diagnostic'' se fait surtout via
**''Rx thorax'' qui montrera un épanchement pleural, avec une tendance à adhérer aux parois, avec un aspect lenticulaire.
** Le ''CT-scan'' montrera la collection liquidienne, souvent avec des petites bulles de gaz. [[empyeme_ct.jpg]]
**la ''Thoracocentèse'' avec analyse du liquide permettra de confirmer le diagnostic, avec des PMN et une culture positive.
*Le ''Traitement'' se fait par un ''drainage'' de la collection associé à des ''ATB sur 4-6 sem.'' ciblés sur le germe.
*Les empyèmes loculés sont plus difficiles à drainer et doivent souvent se faire drainer par des processus chirurgicaux.
{{empyeme_rx.jpg}}
undefine
undefine
undefine
!! Généralités
*Une ''Encéphalite'' est une ''inflammation du parenchyme cérébral'' souvent vue en association avec une méningite.
*Les ''Causes'' sont souvent ''Virales'', avec comme prinicpal agent l'''Herpes''. Mais d'autres virus tels que les Arbovirus ou Entérovirus peuvent en faire
*La ''clinique'' implique souvent des ''céphalées'', ''malaises'' et ''myalgies''. On trouve souvent des ''signes de méningite'' (''raideur de nuque'', ''photophobie'', ''fièvre''). On trouve aussi facilement une ''altération de l'état de conscience'', des ''déficits neurologiques focaux'' et des ''crises d'épilepsie''
*La ''Ponction lombaire'' donne une ''lymphocytose'' mais ''sans diminution du glucose'' (qu'on trouve dans les causes bactériennes). Il faut aussi faire une ''PCR du LCR'' pour trouver le virus concerné.
*L'''IRM'' permet de démontrer des signes d'encéphalites herpetiques au niveau ''fronto-temporal''
*Le ''traitement'' passe surtout par de l'''acyclovir'' pendant 2-3semaines.
{{HSV_encephalite_irm.jpg}}
undefine
undefine
undefine
{{endocardite.jpg}}
!!Définition
*l'''Endocardite bactérienne'' est une infection de l'endocarde, mais surtout une ''infection des valves cardiaques''.
*On distingue l'endocardite ''aigue'' de l'endocardite ''subaigue''.
**L'''Endocardite Aigue ''se fait sur une ''valve saine ''et est généralement due au ''//Staph. aureus//'' est peut être ''mortelle'' si elle n'est pas rapidement traitée.
**L'''Endocardite Subaigue'' se fait sur une ''valve endommagée'' et est plutôt due au ''//Staph. Viridans//'' ainis qu'à l'''//Enterococcus//''. Elle est moins dangereuse que l'endocardite aigue.
*Les ''Organismes'' pouvant causer une endocardite se distinguent en:
**''Flore Native'': avec d'abord le ''//Staph. viridans//'' et aussi le ''//Staph.aureus//'', le //''Staph.epidedidirmis'', l'''//Enterococci//'' et le// groupe ''HACECK'' (//Haemophilius//,// Actinobaccilus//, //Cardiobacterium//, //Eikenella// et //Kingella//)
**''Flore de valve prothétique'': avec dans les premières semaines de chirurgie plutôt le ''//Staph. epidedidirmis//'' et ''//Staph. aureus//'' puis plus tardivement le ''//Streptococcus//''
**''Chez les Toxicomanes'' avec infection I.V on retrouve surtout le ''//Staph aureus//''. On peut trouver plus rarement des ''//Candida//'' et ''//Pseudomonas//''. L'endocardite est souvent surtout à droite.
*Les ''Complications'' que l'on redoute sont:
**''Insuffisance Cardiaque''
**''Abcès du Myocarde''
**''Glomerulonephrite''
**''Embols infectieux''
!!Critères de Duke
*Les ''Critères de Duke'' sont utilisés pour poser le ''diagnostic'' de l'endocardite. On la le choix entre ''2 critères Majeurs'' ou ''1 critère Majeur + 2 mineurs'' ou enocre ''5 critères mineurs''.
*Ils se basent principalement sur une ''Echograhpie'' (commencer par une ETT puis une ETO) et sur la réalisation de ''deux hémocultures''.
|!Critères Majeurs|
|''Hémocultures'' positives pour une endocardite dans ''deux'' hémocultures|
|''Echographie'' positive pour une endocardite ou ''Souffle valvulaire'' nouveau à l'auscultation|
|!critères mineurs|
|''valvulopathie'' connue ou drogues IV.|
|''fièvre'' >38°C|
|''Phénomènes vasculaires'': Embolies artérielles / Infarctus pulmonaire / Anévrysme mycotique / Pétéchies / Lesions de [[Janeway|osler_janeway.jpg]]|
|''Phénomènes immunologiques'': glomérulonéphrite, nodules d'[[Osler|osler_janeway.jpg]], |
|''echographie'' suspecte ou ''hémocultures'' positive pour des germes atypiques d'une endocardite|
!!Traitement
* On commence par une ''Antibiothérapie'' si possible ciblée sur le germe, durant 2 à 6 semaines.
*On peut aussi faire de la ''chirurgie'' si on est face à une IC réfractaire ou à un Abcès par exemple.
undefine
@@background-color:LawnGreen; !''Endocrinologie'' @@ <<list-links "[tag[Endocrinologie]sort[title]]">>
@@background-color:LightGreen; !''Endocrinologie'' @@ <<list-links "[tag[Endocrinologie.nucl]sort[title]]">>
![ext[Endométriose.pdf|./pdf/Endométriose.pdf]] <!-- Texte caché pour la recherche • Généralités “This is just part of being a woman” “It’s just cramps with your period” « If five million men suffered unbearable pain during sex, bowel movements, and exercise, and were offered feminizing hormones or surgical castration as treatment, our attitudes would be quite different… » By RN Petersen Director, St. Charles Endometriosis Oregon USA Treatment Program "ENDOMETRIOSE" J.-M.Wenger Consultation Endométriose Service de Gynécologie, Hôpital Universitaire Genève Endométriose • • • • • • Généralités Histoire Définitions/pathologie/pathogenèse Clinique Examen complémentaires Traitement • Conclusions “This is just part of being a woman” “It’s just cramps with your period” • Généralités « If five million men suffered unbearable pain during sex, bowel movements, and exercise, and were offered feminizing hormones or surgical castration as treatment, our attitudes would be quite different… » By RN Petersen Director, St. Charles Endometriosis Treatment Program Oregon USA "ENDOMETRIOSE" J.-M.Wenger Consultation Endométriose Service de Gynécologie, Hôpital Universitaire Genève Endométriose • Généralités • Histoire • Définitions/pathologie/pathogenèse • Clinique • Examen complémentaires • Traitement • Conclusions Maladie chronique Prévalence inconnue De plus en plus fréquente Sous diagnostiquée Conscience médicale de la maladie très basse Diagnostic difficile Douleurs /infertilité Traitement chirurgical peut être difficile et pas sans danger Traitement empirique long terme Team multidisciplinaire (Gynécologie, chirurgie, urologie, médecine alternative, sexologie, psychologie, alimentation) chirurgien pelvien Pourquoi la suspecter ? 1 out of 10 women has endometriosis during during reproductive years • Fréquente :10-15% des femmes (Kennedy 2005) Delayed diagnosis 23# 26# 34# 8#years# Symptoms# start# First# Physician## visit# Diagnosis# 3#years# 11"years" !global study of women's health 2009 (n=21,746) • Retard diagnostic: 6.7 ans (Rogers 2013) 18 Earlier puberty The widening impact of endometriosis THE YOUNG Individual impact Societal impact Delay in diagnosis Dysmenorrhea Dyspareunia Chronic pelvic pain Medical costs Surgical costs Caregiver costs Absenteeism Reduced productivity at work Nnoaham KE et al. Fertil Steril 2011. Un peu d’histoire... • Histoire Goethe «la base scientifique repose sur l’observation précise» Johannes Peter Müller 1801-1858 Vesalius, Fallopius, Fabricius, Spigelius Giovanni Battista Morgagni 1682-1771 De Sedibus et Causis Morborum per Anatomen Indagatis LES LIEUX ET CAUSES DES MALADIES DOIVENT ÊTRE RECHERCHEES DANS L’ANATOMIE Rokitansky DECOUVERTE DE L’ ENDOMETRIOSE 1860 Pr. Karl Freiherr von Rokitansky, pathologue, politicien, philosophe The life history of ovarian hematomas of endometrial type, Am. J. Obst. & Gynec., 4:451-512, Nov.1922. John Albertson Sampson (1873-1946) Thomas Stephen Cullen (1868 –1953) Cullen,T.S.: Adenomyoma uteri diffusum benignum, Johns Hopkins Hospital Reports 6:133, 1896 OFFSITE co>.rrscN?N^^f^?m° ' HEAL7M HX64168123 ^^^^.^^^^,0, RG371 C894 - RECAP The Distribution of Adenomyomas Containing Uterine Mucosa By THOMAS S. CULLEN, M. B. Baltimore jmwenger@bluewin.ch 10%-15% des femmes (remorgida 2007) Pic entre 25 et 35 ans Nombreuse consultations (Pugsley, 2007) Répercussions psychologiques importantes (Siedentopf, 2008) Rare lors de la période prébubertaire ou ménopausique (Hediger, 2005) • Définitions/pathologie/pathogenèse jmwenger@bluewin.ch Prévalence • C/patientes stérilisées 1 à 7% • C/patientes pour douleurs pelviennes 12 à 32% • C/patientes infertiles 9-50% • C/Jeunes filles avec dysménorrhée résistant au TT 70% Laufer, 1997 Endométriose 2 Grands groupes d’endométriose jmwenger@bluewin.ch TACHES ou SPOTs OVAIRE OVAIRE NODULES COLON COLON ENDOMETRIOSE SUPERFICIELLE ENDOMETRIOSE PROFONDE < 5 mm s > 5 mm Complexe 21 ENDOMETRIOSE OVARIENNE ENDOMETRIOSE PROFONDE ENDOMETRIOSE PERITONEALE ENDOMETRIOSE , C’EST QUOI ? • Définitions/pathologie/pathogenèse Pathogenèse 23 cellules endométriale cellules endométriosique Reflux Retrograde Dissemination Vasculaire , Lymphatique Cellules souches Toxiques Génétique Reflux (Sampson, 1927) Metaplasia coelomique (Ferguson , 1969) Metastatique/embolisation , veineuse, lymphatique (Sampson, 1927) Immunologique (Osteen, 1997) Génétique Toxique «La femme n’est pas conçue pour avoir des menstruations» POURQUOI ? Association de taux élevés de bisphénols polychlorés, pesticides chlorés et endométriose (Lebel, 1998) Production expérimentale d’endométriose par exposition aux métabolites de la dioxine (2,3,7,8Tetrachlorodibenzo-p-dioxin) (Bruner-Tran,1999) Relation entre dioxine et endométriose par des méchanismes non élucidés et associés à la forme profonde de la maladie (Anger,2008) Revue de 12 ètudes èpidémiologiques : La forme profonde de la maladie est associée à de hauts niveau de bisphénols polychlorés et à des composés dioxine-like (Heilier, 2008) POURQUOI ? POURQUOI ? jmwenger@bluewin.ch Endométriose CA RESSEMBLE A QUOI FINALEMENT ? AU MICROSCOPE A LA VUE jmwenger@bluewin.ch Endométriose • Anatomo-pathologie: définitions Stroma cytogène GLANDES Endometriales-Like Endometriose GLANDES Endometriales-Like Stroma cytogène CML Myofibroblastes ADENOMYOSE G+SC MF NERFS jmwenger@bluewin.ch Endométriose INFILTRATIONS DES NERFS ! jmwenger@bluewin.ch Endométriose INFILTRATION DU VAGIN jmwenger@bluewin.ch Endométriose INFILTRATIONS INTESTIN ! jmwenger@bluewin.ch Endométriose METASTASES GANGLIONNAIRES RECIDIVE MAIS CE N’EST PAS UN CANCER ! 41 -undifferencié (40%) - mixte (37%) - granulaire bien differentié (42%) - undifferentié glandulaire (33%) - glandulaire mixte (47%) Infiltrante Nerfs Ganglion Colon Colon Présentations Cliniques 42 localisations typiques Pelvis Urinaire Intestin Tractus génital localisations atypiques Paroi abdominale Plèvre, Poumon, Diaphragme Ombillic Foie Cerveau Nerfs Placenta • Clinique CLINIQUE Symptômes Endométriose superfcielle & profonde Douleurs menstruelles importantes II-III Dyspareunie profonde Douleur pelvienne chronique (cyclique ou non) Infertilité Dyschèzie,rectorragie (Redwine,1991,Sutton, 1994, Garry,2000) Syndrome Obstructif (Kavallaris) Symptômes urinaires Neuralgies, dysesthésies Troubles neurovegétatifs Examen Externe, speculum, vagin & rectal Examen douloureux Sister Mary Joeph nodule (umbelical endo) Nodules douloureux du fond vaginal (fornix postérieur) Nodules bleu Rigidité , strictures douloureuses des ligament utéro-sacrés Examen neurologique anormal dysménnorhée dyspareunie douleur pelvienne chronique mictalgie dyschèzie (Fauconnier et al 2002, Ballard, 2009) symptomatologie neuro (Possover, 2011) SEUL LA DISCHEZIE MENSTRUELLE + KYSTE BENIN EST PRDICTIF st. III-IV ENDOMETRIOSI (Nnoaham et al, 2012). anamnèse DYSMENNORRHEE SEVERE (> 6 VAS) DISPAREUNIE PROFONDE (>7 VAS) DYCHEZIE MENSTRUELLE DOULEUR PELVIENNE CHRONIQUE (Nnoaham et al, 2012). Sensibilité 70.9% Specificité 72.8% Sensibilité 84.9% Specificité 75.8% DOULEUR/NODULE FORNIX POSTERIEUR/ DOLEURE MASSE ANNEXIELLE / ENDOMETRIOME (Nnoaham et al, 2012). examen clinique jmwenger@bluewin.ch Investigations • Echographie vaginale • RMN (Résonance magnétique nucléaire) • Echographie endorectale • Autres Endométriose jmwenger@bluewin.ch Echographie vaginale Endométriose image hypoéchogène de l’ovaire jmwenger@bluewin.ch RMN (Résonance magnetique nucléaire) Endométriose jmwenger@bluewin.ch RMN (Résonance Magnetique Nucléaire) Endométriose jmwenger@bluewin.ch Echographie endorectale Endométriose jmwenger@bluewin.ch U.I.V (urographie intra-veineuse) Endométriose Dilatation pyelocalicielle jmwenger@bluewin.ch Pathologies associées Endométriose Endométriose 75% Pudendalgie Fibromialgie Adhérences 0-90% (Diamond 2004) Anomalie du plancher pelvien Colon spastique 50-80% Cystite intersticielle 38% jmwenger@bluewin.ch Endométriose Pourquoi faire le diagnostic (le plus vite possible) ? • Expliquer les symptômes • diminuer ou faire disparaître les symptômes • Arrêter l’évolution de la maladie • Prévenir la récidive Traitement chirurgical médical • Traitement Traitement Médical Non-steroidal anti-inflammatory drugs oral contraceptives gestogens antigestogens or GnRH agonist. Suppression des symptômes, mais n’est pas curatif et souvent associé à des effets secondaires importants (Vercellini P, 2009) Trattamento jmwenger@bluewin.ch • Comment faire le diagnostic de certitude? LAPAROSCOPIE • Traitement jmwenger@bluewin.ch PAR CHRURGIE MINIMALE INVASIVE Endométriose VIDEO-CHIRURGIE PAR CHRURGIE MINIMALE INVASIVE 1978: TO DIAGNOSE ENDOMETRIOSIS BY LAPAROSCOPY «too experimental!» . Laparoscopic repair of full-thickness bowel injury. J Laparoendosc Surg 1991;1(2):119-22. Reich H Laparoscopic repaire of full-thickness bowel injury J Reprod Med. 1991 Jul;36(7):516-22 Reich H, McGlynn F, Salvat J.. Laser C02 beam Video camera ANATOMIE du PELVIS Jean-Marie Wenger jmwenger@bluewin.ch UTERUS OVAIRE TROMPE COLON OVAIRE OVAIRE LIGAMENT US COLON COLON VESSIE UTERUS URETERES Diagnostic (Pluchino-Wenger 2014). ON ARRIVE SOUVENT TARD (TROP)!! DEGÂTS !! Lésions superficielles & cicatrices RECIDIVE ? PERSISTENCE ! • connaître l’anatomie DOULEURS / INFERTILITE Conclusions Conclusions DYSMENNORRHEE SEVERE (> 6 VAS) DISPAREUNIE PROFONDE (>7 VAS) DYCHEZIE MENSTRUELLE DOULEUR PELVIENNE CHRONIQUE DOULEUR/NODULE FORNIX POSTERIEUR DOLEURE / MASSE ANNEXIELLE ENDOMETRIOME Traitement Médical CHIRURGIE -->
![ext[enterocolite_necrosante_nourrisson.pdf|./pdf/enterocolite_necrosante_nourrisson.pdf]] <!-- Texte caché pour la recherche Necrotising enterocolitis 164 Necrotising enterocolitis is a serious illness mainly affecting preterm infants in the first few weeks of life. It is associated with bacterial invasion of ischaemic bowel wall. Preterm infants fed cow’s milk formula are more likely to develop this condition than if they are fed only breast milk. The infant stops tolerating feeds, milk is aspirated from the stomach and there may be vomiting, which may be bile stained. The abdomen becomes distended (Fig. 10.16a) and the stool - Neonatal medicine Cranial ultrasound in preterm infants Coronal section Parasagittal section Normal anatomy Sylvian fissure Choroid plexus Lateral ventricle Third ventricle Intra- and periventricular haemorrhage with dilatation of both lateral and third ventricles Germinal layer haemorrhage Intraparenchymal haemorrhage Figure 10.15b Large intraventricular haemorrhage with parenchymal haemorrhagic infarction on the right. Germinal layer haemorrhage Dilated lateral ventricles Intraventricular haemorrhage Severe periventricular leukomalacia Periventricular cysts and increased echodensity of white matter Figure 10.15c Dilatation of lateral ventricles following intraventricular haemorrhage. Figure 10.15a Cranial ultrasound in preterm infants. Figure 10.15d Widespread cysts in periventricular leukomalacia. sometimes contains fresh blood. The infant may rapidly become shocked and require artificial ventilation because of abdominal distension and pain. The charac teristic X ray features are distended loops of bowel and thickening of the bowel wall with intramural gas, and there may be gas in the portal tract (Fig. 10.16b). The disease may progress to bowel perforation, which can be detected by X ray or by transillumination of the abdomen. - and artificial ventilation and circulatory support are often needed. Surgery is performed for bowel perfora tion. The disease has significant morbidity and a mor tality of about 20%. Long term sequelae include the development of strictures and malabsorption if exten sive bowel resection has been necessary. - - Retinopathy of prematurity Treatment is to stop oral feeding and give broad spectrum antibiotics to cover both aerobic and anaero bic organisms. Parenteral nutrition is always needed -->
!!Prescriptions DPI *boire, manger *pipi, caca *physio mob/AC *physio resp/O2 *ttt.habituel *ttt. a ajouter (liste problème, tabac/OH) *ttt. en réserve (antalgie, sedatif, laxatif) *surveillance, score, glycémies *examens complémentaires *allergies *Attitude !!A penser *Oxygène en R *Vigigerme
!!''Anamnèse'' ''Général'' *fatigue *perte de poids *perte d'appétit *fèvre, frissons *sudations nocturnes *troubles du sommeil ''Cardio'' *DRS, oppression *palpitations *syncope *odèmes MI *dyspnée *orthopnée, DPN, nycturie ''Pulmonaire'' *toux *expecto (fréquence, couleur) *IVRS, notion de contage ''Dig'' *douleur abdo *nausées/vomissements *diarrhée/constipation *sang dans les selles ''Uro'' *douleur/brulures urinaires *hématurie *pollakyurie *incontinence / difficultés urinaires ''Neuro'' *orienté (temps, espace) *céphalées *vertiges *perte de force *perte de sensibilité ''O/A'' *douleur membres/articulations ''MOMA / Habitudes'' *Maladies *Opérations *Médicaments *Allergies *Tabac *Alcool *Metier *MT !!''Examen clinique'' *FC: *TA: *FR: * T°: * Sat: ''General'' *EG conservé *BHBP *Anicterique *Acyanotique ''Cardio'' *B1B2BF *TJ, RHJ *PPP *OMI ''Pulmo'' *Eupnéique *MVS ''Dig'' *BNFT *ASI *Murphy *HSM ''Uro'' *Globe *LRSI ''Neuro'' *GSC 15/15 *NC *Voies longues *Mingazzini *Tonus *Reflexes *Marionettes *Doigt-Nez
![ext[enuresie_primaire.pdf|./pdf/enuresie_primaire.pdf]] <!-- Texte caché pour la recherche Nocturnal enuresis Children can wet themselves by day or night, but in colloquial speech, ‘enuresis’ is synonymous with bed wetting. It is quite common: about 6% of 5 year olds and 3% of 10 year olds are not dry at night. Boys out number girls by nearly 2 to 1. There is a genetically determined delay in acquiring sphincter competence, with two thirds of children with enuresis having an affected first degree relative. There may also be inter ference in learning to become dry at night. Small chil dren need reasonable freedom from stress and a measure of parental approval in order to learn night time continence. It is well recognised that emotional stress can interfere and cause secondary enuresis (relapse after a period of dryness). Most children with enuresis are psychologically normal and the treatment of secondary enuresis still relies mainly on the sympto matic approach described below, although any under lying stress, emotional or physical disorder must be addressed. - - - - - - - Organic causes of enuresis are uncommon but include: • Urinary tract infection • Faecal retention severe enough to reduce bladder volume and cause bladder neck dysfunction A urine sample should always be tested for glucose and protein and checked for infection. Daytime and sec ondary enuresis are considered in Chapter 18. The management of nocturnal enuresis is straight forward but needs to be painstaking to succeed. After the age of 4 years, enuresis resolves spontaneously in only 5% of affected children each year. In practice, treatment is rarely undertaken before 6 years of age. Explanation The first step is to explain to both child and parent that the problem is common and beyond conscious control. The parents should stop punitive procedures, as these are counterproductive. Star chart The child earns praise and a star each morning if the bed is dry. Wet beds are treated in a matter of fact way and the child is not blamed for them. - - Enuresis alarm If a child does not respond to a star chart, it may be supplemented with an enuresis alarm. This is a sensor, usually placed in the child’s pants or under the child, which sounds an alarm when it becomes wet. In order to be effective, the alarm must wake the child, who gets out of bed, goes to pass urine, returns and helps to remake a wet bed before going back to sleep. It is not necessary to reset the alarm that night. Parental help can be enlisted in the night using a baby alarm to trans mit the noise of the alarm to the parents’ bedroom. The alarm method takes several weeks to achieve dryness but is effective in most cases so long as the child is motivated and the procedure is followed fully. About one third relapse after a few months, in which case repeat treatment with the alarm usually produces lasting dryness. - Desmopressin Short term relief from bedwetting, e.g. for holidays or sleepovers, can be achieved by the use of the synthetic analogue of antidiuretic hormone, desmopressin, taken as tablets or sublingually. This achieves a sup pressant effect rather than a lasting cure. - Self-help groups These provide advice and assistance to parents and health professionals, e.g. the Enuresis Resource and Information Centre (ERIC). Summary Nocturnal enuresis • Common, males more than females • Most affected children are psychologically and physically normal • Treatment usually considered only at >6 years of age • Management – explanation, star charts, enuresis alarm, sometimes desmopressin. --> ![ext[enuresie_secondaire.pdf|./pdf/enuresie_secondaire.pdf]] <!-- Texte caché pour la recherche Enuresis Primary nocturnal enuresis This is considered in Chapter 23. Daytime enuresis This is a lack of bladder control during the day in a child old enough to be continent (over the age of 3–5 years). Nocturnal enuresis is also usually present. It may be caused by: • Lack of attention to bladder sensation: a manifestation of a developmental or psychogenic - - A urine sample should be examined for microscopy, culture and sensitivity. Other investigations are per formed if indicated. An ultrasound may show bladder pathology, with incomplete bladder emptying or thick ening of the bladder wall. Urodynamic studies may be required. An X ray of the spine may reveal a vertebral anomaly. An MRI scan may be required to confirm or exclude a non bony spinal defect such as tethering of the cord. - - Affected children in whom a neurological cause has been excluded may benefit from star charts, bladder training and pelvic floor exercises. Constipation should be treated. A small portable alarm with a pad in the pants, which is activated by urine, can be used when there is lack of attention to bladder sensation. Anticholinergic drugs, such as oxybutynin, to damp down bladder contractions, may be helpful if other measures fail. Secondary (onset) enuresis The loss of previously achieved urinary continence may be due to: • • • Emotional upset, the commonest cause UTI Polyuria from an osmotic diuresis in diabetes mellitus or a renal concentrating disorder, e.g. sickle cell disease or chronic renal failure. Investigation should include: • • • Testing a urine sample for infection, glycosuria and proteinuria Assessment of urinary concentrating ability by measuring the osmolality of an early morning urine sample. Rarely, a formal water deprivation test may be needed to exclude a urinary concentrating defect Ultrasound of the renal tract. 335 1 2 3 4 5 6 Kidney and urinary tract disorders Summary Enuresis Daytime enuresis • Consider causes – developmental or psychogenic, bladder instability or neuropathy, urinary tract infection, constipation, ectopic ureter. Secondary (onset) enuresis • Consider – emotional upset, UTI, polyuria from an osmotic diuresis in diabetes mellitus or a renal concentrating disorder. -->
![ext[epanchement_pleural.pdf|./pdf/epanchement_pleural.pdf]] <!-- Texte caché pour la recherche Epanchement pleura11-s [J90] Gén: Plus de 30 % des patients avec un épanchement pleural infecté nécessite un drainage chirurgical ou meurent.5 Liquide pleural • Cellules Valeurs normales . < 1000/µL - < 10 % leucocytes neutrophiles - 2-30 % lymphocytes - < 10 % leucocytes éosinophiles (l'accumulation d'air ou du sang dans la cavité pleurale augmente le nombre de leucocytes éosinophiles!) - 30-75 % macrophages - 30-70 % cellules mésothéliales • pH • Protéines • LDH 1. Exsudat: pH= 7.30-7.46 - Si pH < 7.20-7.33 il faut penser à une origine néoplasique! 2. Transsudat: pH = 7.45-7.55 . . 10-20 g/L (dont 50-70 % albumine) < 50 % de l'amylase sérique • Glucose . Env. même valeur que dans le sérum • Amylase Env. même valeur que dans le sérum Tableau: Valeurs normales du liquide pleural (incl exsudat et transsudat comme liquide intraplreural pathologique). 1. Exsudat Déf:• Gén: DD: • Exsudat = présence de 2: 1 des 3 critères de LIGHT: 1. Protéines pleurales I protéines sériques .... > 0.5 2. LDH pleurales/ LDH sériques .................... > 0.6 3. LDH pleurales ............................................>%de la valeur sup. des LDH sériques Tableau: Définition d'un exsudat. Les critères de LIGHT ont une sensibilité de > 90 % et une spécificité d'env. 80 %_ Autres paramètres en faveur d'un exsudat: Cholestérol pleural > 1.5 mmol/L (si > 5.2 mmol/L penser à un pseudochylothorax) - Gradient de l'albumine* ,,; 12 g/L - Si pH< 7.2-7.3 il faut penser à une origine néoplasique! Si le diagnostic clinique indique un transsudat (ex: insuffisance cardiaque), mais que les critères de LIGHT indiquent un exsudat, le gradient de l'albumine* est une aide diagnosti- que supplémentaire. Néoplasie (40-50 % de tous les exsudats) Epanchement parapneumonique Embolie pulmonaire (chez env. 30 % des patients avec une embolie pulmonaire) Pancréatite Maladie systémique: LED, PAR, PAN, granulomatose avec polyangiite (GPA; ancienne- ment WEGENER) autres Idiopathique Uusqu'à 20 % ) 2. Transsudat Déf: DD: • Transsudat = Epanchement pleural qui ne remplit pas les critères diagnostiques d'un exsudat (ci-dessus). Insuffisance cardiaque: 80-90 % des transsudats sont d'origne cardiaque Cirrhose hépatique (même avec peu d'ascite) Embolie pulmonaire (chez env. 10 % des patients avec une embolie pulmonaire) Hypoalbuminémie (typiquement lorsque !'albuminémie est < 25 g/L) Syndrome néphrotique (suite à une hypoalbuminémie) Atélectasie (par baisse de la pression intrapleurale) St. post bypass aorto-coronarien Voie veineuse centrale avec fuite intrapleurale Syndrome de la veine cave supérieure Péricardite constrictive Idiopathique * Gradient de l'albumine = Albumine sérique - albumine du liquide pleural (sensibilité de ce gradient 87 % et spécificité 92 %) -->
undefine
!!Définitions
*L’epicondylite ''latérale (tennis elbow'') correspond à une inflammation du ''tendon commun des extenseurs'' dont l’insertion se fait sur l’épicondyle latéral du coude
*L’épicondylite ''médiale (golfer elbow'') correspond à une inflammation du ''tendon commun des fléchisseurs'' dont l’insertion se fait sur l’épicondyle médias du coude.
*L’Origine des ces pathologies est une ''utilisation répétée'' de ces muscles, souvent lié au sport en question.
{{epicondylite_schema_flechisseurs_extenseurs.jpg}}
!!Clinique
*Le patient présentera une ''douleur localisée'' au niveau de l’épicondyle concerné. Cette douleur sera ''déclenchée par le mouvement des muscles concernés'' (extension du poignet = latéral, flexion du poignet = médial)
*La pathologie ''finit par se résoudre'' mais ça peut prendre jusqu’à ''6-18 mois'' pour se faire.
!!Traitement
*Le traitement est ''surtout conservateur'', avec du ''repos'', de la ''glace'', des ''bandes'', des ''AINS'' et de la ''physiothérapie''. On peut aussi faire une ''injection de corticoïdes''.
*La ''chirurgie'' sera indiquée pour un ''échec'' du traitement conservateur ''après 6-18mois''. Elle comprend une désinsertion des épicondyliens et une libération du nerf.
undefine
!!Definition * Infection of the epididymis. The common offending organism in children and elderly patients is Escherichia coli; in young men, sexually transmitted diseases are more com- mon (gonorrhea, Chlamydia). *A swollen, tender testicle; dysuria; fever/chills; scrotal pain; and a scrotal mass. *Rule out testicular torsion, and administer antibiotics. !!Quick HIT *Epididymitis may be difficult to differentiate from testicular torsion.
![ext[epiglottite_ped.pdf|./pdf/epiglottite_ped.pdf]] <!-- Texte caché pour la recherche Acute epiglottitis Acute epiglottitis is a life threatening emergency due to the high risk of respiratory obstruction. It is caused by H. influenzae type b. In the UK and many other coun tries, the introduction of universal Hib immunisation in infancy has led to a >99% reduction in the incidence of epiglottitis and other invasive H. influenzae type b infections. - There is intense swelling of the epiglottis and sur rounding tissues associated with septicaemia. Epiglot titis is most common in children aged 1–6 years but affects all age groups. It is important to distinguish clinically between epiglottitis and croup (Table 16.1), as they require quite different treatment. Case History The onset of epiglottitis is often very acute (see Case History 16.1), with: • • • • high fever in an ill, toxic looking child - an intensely painful throat that prevents the child from speaking or swallowing; saliva drools down the chin soft inspiratory stridor and rapidly increasing respiratory difficulty over hours the child sitting immobile, upright, with an open mouth to optimise the airway. Table 16.1 Clinical features of croup (viral laryngotracheitis) and epiglottitis Croup Epiglottitis Onset Over days Over hours Preceding coryza Yes No Cough Severe, barking Absent or slight Able to drink Yes No Drooling saliva No Yes Appearance Unwell Toxic, very ill Fever <38.5°C >38.5°C Stridor Harsh, rasping Soft, whispering Voice, cry Hoarse Muffled, reluctant to speak 16.1 Acute epiglottitis This 5 year old girl developed a severe sore throat, drooling of saliva, a high fever and increasing - - difficulty breathing over 8 h (Fig. 16.4a) Epiglottitis was diagnosed and her airway was guaranteed with a nasotracheal tube. Antibiotics were started immedi ately (Fig. 16.4b,c). She made a full recovery. (a) (b) (c) Figure 16.4 Acute epiglottitis. (a) At presentation. (b) At 16 h, with nasotracheal and nasogastric tubes and an indwelling cannula for intravenous antibiotics. (c) At 36 h, following removal of the nasotracheal and nasogastric tubes. 281 1 2 3 4 Respiratory disorders 16 In contrast to viral croup, cough is minimal or absent. Attempts to lie the child down or examine the throat with a spatula or perform a lateral neck X ray must not be undertaken as they can precipitate total airway obstruction and death. should be admitted to hospital and isolated from other children. - If the diagnosis of epiglottitis is suspected, urgent hospital admission and treatment are required. A senior anaesthetist, paediatrician and ENT surgeon should be summoned and treatment initiated without delay. The child should be transferred directly to the intensive care unit or an anaesthetic room, and must be accompanied by senior medical staff in case respira tory obstruction occurs. The child should be intubated under controlled conditions with a general anaesthetic. Rarely, this is impossible and urgent tracheostomy is life saving. Only after the airway is secured should blood be taken for culture and intravenous antibiotics such as cefuroxime started. The tracheal tube can usually be removed after 24 h and antibiotics given for 3–5 days. With appropriate treatment, most children recover completely within 2–3 days. As with other serious H. influenzae infections, prophylaxis with rifampicin is offered to close household contacts. -->
!!Définitions
*Un ''Crise d'Epilépsie'' correspond à un ''déficit neurologique transitoire'', du à une ''décharge excessive de neurones '', qu'on observe par une altération paroxystique du comportement ou de l'EEG
*L'''Epilepsie'' est une ''condition chronique'' caractérisée par ''>2 crises non provoquées''
*La ''Cause '' des crises épileptiques peut être:
**''Génétique'' (idiopathique)
**''Lesionnelles'':
***''AVC'' (cause majeure chez les >50ans)
***''Méningite'',''Encéphalite''
***''Tumeur Cérébrale''
*** ''Sevrage alcoolique''
*** ''Affection dégénérative cérébrale''
*Ne pas confondre l'''Etat de mal'' (Status epilepticus = crise convulsive >5min), le ''Grand-mal'' (crise tonico-clonique) et le ''petit-mal'' (absences).
!! Clinique
{{epilepsie_classification.jpg}}
!!!''Crise partielle simple''
*La ''crise partielle simple'' ne présente ''pas d'altération de l'état de conscience''
*si elle est ''Motrice'': le patient présentera des ''rigidités musculaires focales'', des ''secousses'' ainsi qu'une ''marche jacksonienne'' (Convulsions qui partent d’un endroit... et se propagent le long du membre... pouvant envahir tout l'hémicorps)
*si elle est ''Sensorielle'': le patient présentera des ''sensations inhabituelles'' qui peuvent toucher n'importe lequel des ''cinq sens'' (audition, vision, toucher, goût, odorat)
*si elle est ''Autonome'', le patient présentera des symptômes de type ''transpiration'',''pâleur'',''rougeur'',''piloérection'',''mydriase'' et ''inconfort épigastrique''
*les crises partielles simples psychiatriques sont rares
{{epilepsie_partielle_simple.jpg}}
!!!''Crise partielle complexe''
*La ''crise partielle complexe'' comprend une ''altération de l'état de conscience''. Le patient ''semble conscient'' à première vue mais ne l'est pas.
*Elle est caracterisée par des ''automatismes'' un peu bizarres tels des ''mâchonnements'', ''avalements'', ''claquement des lèvres'' ou ''grattements''.
*On peut trouver d'autres formes plus bizarres encore, avec des déjà-vu, des hallucinations ou une désorientation.
{{epilepsie_partielle_complexe.jpg}}
!!!''Crise généralisée''
*La ''crises généralisée'' comporte une ''altération de l'état de conscience''.
# Les @@background-color:Orange;''Absences''@@, ou ''petit-mal'' correspondent à un état ''non-convulsif'' avec ''arrêt d'activité ''et absence de réponse ''pendant 5-10s'', avec @@background-color:Orange;3hz spikes@@ et slow-waves à l’EEG. Elles sont typiquement ''pédiatriques''.
# Les crises ''Toniques'' correspondent à une ''rigidité musculaire'' en ''flexion ou extension'' des membres.
# Les crises ''Cloniques'' correspondent à des ''convulsions répetées''. attention à la ''morsure de langue'' dans ces cas !
# les crises ''Tonico-Cloniques'', ou ''Grand-mal'', correspondent à d'abord une ''phase tonique'', puis une ''phase clonique'', puis une ''phase post-ictale'' avec des muscles flaccides et douloureux (CK élevée, EEG plat), des confusions, maux de tête et une amnésie des faits.
# les crises ''Myocloniques'' correspondent à des ''contractions localisées'' de groupes musculaires.
# les crises ''Atoniques'' correspondent à une ''perte de tonus'' musculaire, avec ''chute''.
{{epilepsie_generalisee.jpg}}
!! Investigations
*''Labo''
**''FSC''
**''Glycémie''
**''Alcool'' ± toxicologie
**''CK''
*''Imagerie''
**''CT'' ou ''IRM'', en particulier chercher un AVC si crise inaugurale et surveiller 6h le patient
*''EEG''
**Seulement 50% des EEG trouvent l'épilepsie du premier coup, mais jusqu'à 90% si l'examen est répeté. On trouve typiquement des Spikes anormaux.
!! Traitement
!!!''Anti-épileptiques''
* ''Lamotrigine'' __Lamictal©__
* ''Levetiracteam'' __Keppra©__
* ''Acide valproique'' __Depakene©__
* ''Carbamazepine'' __Tegretol©__
* ''Phenobarbital''
* ''Phenitoine''
* ''Ethosuximide'' (Pour les Absences) __Zarontin®__
* ''Pregabalin'', ''Gabapentine''
* ''Tigabine'', ''Vigabatrine''
!!!''Permis de conduire''
*''simple crise'': 3 mois sans nouvelle crise
*''maladie épileptique'': 1 an sans nouvelle crise
!! Status Epilepticus (Etat de Mal)
*Le ''Status Epilepticus'' correspond à une ''crise convulsive de >5min''. C'est une ''urgence'' et il ne faut pas attendre 5min avant d'agir.
*Elle est la source de nombreuses ''complications'':
**''20% de Morts''
**''Œdème cérébral''
**''Ischémie cérébrale''
**''Infarctus du Myocarde''
**''Arrythmies''
**''Rhabdomyolyse et IR''
**''Pneumonies d'aspiration''
*Le ''traitement d'urgence'' comprend:
#''ABC'' avec surtout voies aériennes
#''Glucose IV''
#''Lorazepam IV''
#''Phenobarbital IV''
#''Phenytoine IV''
Attention on risque de devoir intuber le patient, dépression respiratoire des Benzo. Penser a mettre en tout cas le masque O2.
{{epilepsie_status_epilepticus_algorithme.jpg}}
undefine
undefine
undefine
undefine
undefine
!!Généralités
*L’Epiphysioloyse est un ''glissement de la plaque épiphysaire'' au niveau de l’articulation ''de la hanche''. Elle survient chez les ''__adolescents__'', surtout en ''surpoids'', lors du pic de puberté.
*L’enfant présentera une ''douleur aiguë'' de l’articulation souvent ''référée au genou'', accompagnée d’une ''__boiterie__'', avec ''__marche en rotation externe__''.
*une ''rx de la hanche'' (AP, frog-leg et latérale) montrera une ''__discontinuité de la ligne de Klein__'' (repère radiologique)
{{epiphysiolyse_schema_ligne_klein.jpg}}
*Le ''Traitement est chirurgical'', avec une rentabilisation de l’articulation, parfois jusqu’à la pose de vis.
*les ''complications'' sont une ''nécrose aseptique'' de la tête fémorale, une ''arthrose secondaire'' et des limitations de la mobilité articulaire.
{{epiphysiolyse_rx_hanche.jpg}}
undefine
undefine
![ext[erytheme_infectieux.pdf|./pdf/erytheme_infectieux.pdf]] <!-- Texte caché pour la recherche Parvovirus B19 Parvovirus B19 causes erythema infectiosum or fifth disease (so named because it was the fifth disease to be described of a group of illnesses with similar rashes), also called slapped cheek syndrome. Infections can occur at any time of the year, although outbreaks are most common during the spring months. Transmission is via respiratory secretions from viraemic patients, by vertical transmission from mother to fetus and by transfusion of contaminated blood products. Parvo virus B19 infects the erythroblastoid red cell precursors in the bone marrow. - - Parvovirus causes a range of clinical syndromes: • Asymptomatic infection – common; about 5–10% of preschool children and 65% of adults have antibodies • Erythema infectiosum – the most common illness, with a viraemic phase of fever, malaise, headache and myalgia followed by a characteristic rash a week later on the face (’slapped cheek’), progressing to a maculopapular, ‘lace’ like rash on the trunk and limbs; complications are rare in children, although arthralgia or arthritis is common in adults to severe anaemia, although the majority of infected fetuses will recover. Summary Parvovirus • Usually asymptomatic or erythema infectiosum • Can cause aplastic crisis in haemolytic anaemias (e.g. sickle cell) or the fetus (causes hydrops). Enteroviruses Human enteroviruses, of which there are many (includ ing the coxsackie viruses, echoviruses and poliovi ruses), are a common cause of childhood infection. Transmission is primarily by the faecal–oral route. Following replication in the pharynx and gut, the virus spreads to infect other organs. Infections occur most commonly in the summer and autumn. Over 90% of infections are asymptomatic or cause a non specific febrile illness, sometimes with a rash usually over the trunk that is blanching or consists of fine petechiae. A history of loose stools or some vomiting, or a contact history, would be supportive. The child is not usually systemically unwell, but if the rash is non blanching, admission for observation and 48 h of parenteral antibiotics (such as ceftriaxone) is indicated. It is better to treat a number of enteroviral infections than to send home a child with meningo coccal disease, only to have them return moribund 12 h later. - - Other characteristic clinical syndromes exist and are listed below. (For polioviruses, see the Immunisation section, below.) Hand, foot and mouth disease Painful vesicular lesions on the hands, feet, mouth and tongue, and often on the buttocks. Systemic features are mild. The disease subsides within a few days, with fluids and analgesia. Herpangina - Vesicular and ulcerated lesions on the soft palate and uvula causing anorexia, pain on swallowing and fever. Resolves with fluids and analgesia. - Meningitis/encephalitis Aseptic meningitis is caused by many of the entero viruses. Complete recovery can be expected. • • Aplastic crisis – the most serious consequence of parvovirus infection; it occurs in children with chronic haemolytic anaemias, where there is an increased rate of red cell turnover (e.g. sickle cell disease or thalassaemia); and in immunodeficient children (e.g. malignancy) who are unable to produce an antibody response to neutralise the infection Fetal disease – transmission of maternal parvovirus infection may lead to fetal hydrops and death due -->
!!Définition
*L’Erythème noueux est une ''hypodermite septale''. C’est une des hypodermites les plus fréquentes.
*__Rappel:__ Les [[hypodermites|hypodermites_schema.jpg]] sont des inflammations de l’hypoderme de type lobulaire (=panniculite) ou septale.
!!Etiologie
*La majorité sont ''idiopathique'' (40%). On retrouve aussi les MICI avec ''Crohn'' et ''RCUH'', la ''Sarcoidose'', les ''infections à Streptocoques'', les ''sulfonamides'' et les ''lymphomes''.
!!Clinique
*La lésion élémentaire est la ''nouure'', correspondant à un «[[ nodule induré sous la peau|hypodermite_nouure.jpg]] ». La nouure est ''chaude'' et ''douloureuse'', assez mal délimitée. Elle est localisée typiquement au niveau des ''chevilles''.
*Le patient peut aussi avoir de la ''fièvre'' ainsi que des ''arthralgies'' au niveau des lésions.
{{hypodermite_erytheme_noueux_cheville.jpg}}
!!Investigation
*Faire un ''RX des poumons'' pour chercher la pneumonie à streptocoques et la sarcoïdose. Faire aussi un ''frottis de gorge'' et un test d’anticorps ''ASLO'' (Anti-Streptolysine) pour le strepto. et un ''Mantoux'' (PPD) pour la tuberculose.
*Faire une ''biopsie'' pour ''confirmer le diagnostic''. La biopsie dira si c’est septal ou lobulaire mais ne renseigne pas sur la cause.
!!Traitement
*Il faut surtout ''Traiter la cause'' et ''mettre au repos''. Les symptômes vont durer ''2-8 semaines'' avec au final une ''rémission spontanée''.
*Sinon pour les lésion il faut les traiter ''symptomatiquement'' via des ''AINS''.
!!Erythème Polymorphe
*Il s’agit d’une ''dermatose éruptive'', caractérisée par une multitude de ''lesions érythémateuses circulaires'', avec typiquement un ''aspect en cible''. Les lésions touchent les extrémités et faces d’extension des jambes.
{{erytheme_polymorphe_clinique.jpg}}
*Les deux causes principales sont les ''infections'' ainsi que les ''réactions médicamenteuses''.
*La ''forme légère'' est l’érythème ''polymorphe mineur'', elle n’implique que la peau et est peu dangereuse. La ''forme sévère'' est l’érythème ''polymorphe majeur'', elle implique aussi les ''muqueuse'' est plus dangereuse.
{{erytheme_polymorphe_majeur_bouche.jpg}}
*Elle peut ''évoluer'' en forme ''très sévère'' avec une progression vers un ''Syndrome de Steven’s Johnson'' (SJS), puis pire encore vers une ''Nécrolyse Epidermique Toxique'' (NET ou Syndrome de Lyell) qui peuvent être ''mortels''.
!!Syndrome de Stevens Johnson (SJS)
*le SJS est une ''toxidermie médicamenteuse'' (c’est à dire un effet secondaire dermatologique d’un médicament). Les médicaments les plus fréquents sont les ''AINS, Antibiotiques, Anti-épiletpiques'' et ''Allopurinol''.
*Il se présente par un ''[[érythème diffus|SJS_Lyell_Erytheme_diffus.jpg]]'' avec ''bulles'' et ''[[signe de Nikolsky|SJS_Lyell_signe_nikolsky.jpg]]'' (décollement de la peau au toucher)
*C’est le ''même syndrome'' que la ''Nécrolyse Epidermique Toxique'' (NET ou Syndrome de Lyell [DE 36]). Il s’agit en fait d’un continuum, la définition étant que le la ''surface de peau atteinte'' est de ≤''10% pour SJS'' tandis qu’elle est de ≥''30% pour Lyell'', ce qui implique que le Syndrome de Lyell est plus grave que le SJS.
{{SJS_LYELL_continuum.jpg}}
![ext[erytheme_toxique.pdf|./pdf/erytheme_toxique.pdf]] <!-- Texte caché pour la recherche Lesions in newborn infants that resolve spontaneously Box 9.5 Lesions in newborn infants that resolve spontaneously 9 Peripheral cyanosis of the hands and feet – common in the first day Traumatic cyanosis from a cord round the baby’s neck or from a face or brow presentation – causes blue discoloration of the skin, petechiae over the head and neck or affected part but not the tongue Swollen eyelids and distortion of shape of the head from the delivery Subconjunctival haemorrhages – occur during delivery Small white pearls along the midline of the palate (Epstein pearls) Cysts of the gums (epulis) or floor of the mouth (ranula) Breast enlargement – may occur in newborn babies of either sex (Fig. 9.13a). A small amount of milk may be discharged White vaginal discharge or small withdrawal bleed in girls. There may be a prolapse of a ring of vaginal mucosa Capillary haemangioma or ‘stork bites’ – pink macules on the upper eyelids, mid forehead and nape of the neck are common and arise from distension of the dermal capillaries. Those on the - eyelids gradually fade over the first year; those on the neck become covered with hair Neonatal urticaria (erythema toxicum) – a common rash appearing at 2–3 days of age, consisting of white pinpoint papules at the centre of an erythematous base (Fig. 9.13b). The fluid contains eosinophils. The lesions are concentrated on the trunk; they come and go at different sites Milia – white pimples on the nose and cheeks, from retention of keratin and sebaceous material in the pilaceous follicles (Fig. 9.13c) Mongolian blue spots – blue/black macular discoloration at the base of the spine and on the buttocks (Fig. 9.13d); occasionally occur on the legs and other parts of the body. Usually but not invariably in Afro Caribbean or Asian infants. They fade slowly over the first few years. They are of no significance unless misdiagnosed as bruises - Umbilical hernia – common, particularly in Afro Caribbean infants. No treatment is indicated as it usually resolves within the first 2–3 years - Positional talipes – the feet often remain in their in utero position. Unlike true talipes equinovarus, the foot can be fully dorsiflexed to touch the front of the lower leg (Fig. 9.13e,f) - Caput succedaneum (see Fig. 10.6). Figure 9.13a Breast enlargement in a newborn infant. Figure 9.13b Erythema toxicum (neonatal urticaria), often has a raised pale centre. (Courtesy of Dr Nim Subhedar.) Figure 9.13c Milia. (Courtesy of Dr Rodney Rivers.) Figure 9.13d Mon golian blue spot. (e) (f) Figure 9.13e Positional talipes. Appearance at birth. 150 Figure 9.13f The foot can be fully dorsiflexed to touch the front of the lower leg. In true talipes equinovarus this is not possible. -->
undefine
undefine
!!Généralités *L’''escarre'' est une plaie principalement liée à la ''pression'' ''excessive'' et au cisaillement des tissus mous *La ''prévention'' passe par une ''réduction des pressions des zones à risque'' (sacrum, talon, ischion), typiquement en ''retournant le patient /2h'' . *Le ''traitement'', en fonction du stade, ajoutera un ''débridement'' et la pose de ''pansements'' permettant de garder un ''milieu humide'' optimal favorisant le processus de réparation tissulaire naturel. Les ''Antibiotiques'' se font de manière systémique si l'escarre est infecté seulement *En fonction de l’ampleur de l’atteinte, le recours à la ''chirurgie réparatrice ''sera nécessaire *''Complications'' surtout ''infectieuse ''via l'ostéomyélite ainsi que la septicémie, plus rarement le cancer
!!Définition *Un ''ECA'' correspond à une ''baisse de l'attention'' d'installation ''aigue'' et ''fluctuante'', accompagnée de ''désorganisation de la pensée'' ou d'une ''baisse de la conscience''. *Un délirium est ''du à une affection médicale'' mis en évidence lors de l'investigation du problème *Il implique une ''baisse par rapport à l'état de base'' du patient. (importance de l'anamnèse des proches) *On peut tester l'attention et la fonction cognitive par un ''MMS''. *Ce n'est PAS une démence, et PAS une psychose, et PAS une dépression car ça doit dévier de manière aiguë de l'état de base. Mais on les trouves souvent associées. !!Diagnostic // Critères dépistages du CAM// |!1|''Installation rapide'' avec évolution ''fluctuante''| |!2|''Diminution'' ''de'' ''l'attention''| |!3 ou 4|''Désorganisation de la pensée'' ou ''Baisse de la conscience''| //Tests // *Est-ce que les oiseaux ca vole *Qu'est-ce qui pese le plus, 1kg plume, 1kg plomb *Serrez la main quand je dis A (dire une serie de lettre) !!Etiologies * ''Infectieuse'' (toute infection peut déclencher une agitation) *''Néoplasique'' (tumeur cérébrale, syndrome paranéoplasique= *''Cardiologique aigu'' (Insuffisance cardiaque décompensée, Syndrome coronarien aigu) * ''Neurologique aigu'' (AVC, Hématome intracrânien ou sous-durai, HTIC) *''Trbl. électrolytiques'': (hyponatrémie, hypokaliémie, hypercalcémie, hypoglycémie) *''Métabolique'' (Syndrome urémique, Hyperthyroïdie, Hypothyroïdie) *'' Encéphalopathie hépatique'' *''Traumas'' (#col chez le vieux) *''Toxiques'', ''Alcool'' (et ''sevrage alcoolique'', voir Délirium Tremens !), ''Drogues'', *''Médicaments'' (Benzodiazépines Opioïdes, anticholoinergiques, etc.) *''Globe'' ''vésical'',''Fécalome'' *Delirium tremens sur sevrage alcoolique severe * Syndrome de KORSAKOFF (hypovitaminose B1) * Épilepsie (phase post-critique) * Fortes émotions (catastrophe naturelle, guerre)
//en construction//
undefine
!!Euthanasies *''Euthanasie active directe'': meutre sur demande de la victime (mobile honorable, interdit, art. 114) ou pire encore sans demande (meurtre tout court, art. 111) *''Euthanase active indirecte'': injecter morphine pour soulager douleur meme si on connait le gros risque de mort *''Euthanasie passive'': retrait thérapeutique !!Assistance au suicide *Si on pousse la victime au suicide par mobile egoiste, interdit *Ce n'est pas un droit-créance, personne n'est obligé de porter assitance au suicide *La personne doit choisir d'elle meme de mourir et c'est a elle de faire le geste sinon c'est de l'euthanasie active directe
undefine
@@background-color:PowderBlue; !''Examen Clinique'' @@ <<list-links "[tag[Examen Clinique]sort[title]]">>
!!Extrasystole Auriculaire (ESA)
{{ECG_ESA.jpg}}
*Les ''ESA'', ou //Extra-Systoles Auriculaires//, sont des activités auriculaires ''non sinusales'' émanant directement de l'''oreillette''.
*Elles sont généralement ''bénignes'' et sont fortement ''liées à l'âge''.
*Sur l'ECG on observe une ''Onde P''' qui a une ''morphologie différente des ondes P'', sauf dans les cas ou l'onde nait près du noeud A-V. De plus l'''intervalle P-R est plus court que dans le rythme normal'' du patient. Le QRS sui suit est identique aux autres QRS.
*Si les ESA sont régulières on parle d'ESA //Bigeminée// (1:2) ou //Trigéminées// (1:3).
!!Extrasystoles Ventriculaires (ESV)
{{ECG_ESV.jpg}}
*Les ''ESV'' ou //Extra-Systoles Ventriculaires// sont des activités ventriculaires prématurées prenant source au niveau du ventricule.
*L'activité remonte les ventricules jusqu'au noeud AV, où il peut être bloqué ou se propager en rétro jusque dans les oreillettes.
*Au niveau de l'ECG on trouve un ''Complexe prématuré QRS élargi'' systématiquement. Le complexe est différent des QRS habituels.
*Tout comme les ESA, les ESV peuvent être dits //Bigeminés// s'ils sont à (1:2) ou //Trigéminés// s'ils sont à (1:3).
*La majorité des ESV sont ''bénins''.
undefine
Ce site internet regroupe l'ensemble de mes ''Notes Personnelles''. Il n'est pas destiné à être distribué à autrui. //- G.Fahrni//
{{fasciite_necrosante.jpg}}
!!Définition
*la ''Fasciite Nécrosante'' est une infection des fascias profonds à'' progression rapide'' entraînant une ''nécrose des tissus'' potentiellement ''mortelle''.
*les ''Bactéries'' responsables sont principalement //''streptococcus pyogenes''// (bactérie mangeuse de chair) ou encore //c. perfringens//
*les Facteurs de risque sont:
**Chirurgie récente
**Trauma
**Diabètes
**Drogues IV
*Les complications redoutées sont le ''Sepsis'' et le ''Syndrome du Choc Toxique'' couplé à une ''insuffisance multi-organique''.
**Clinique
*''Fièvre''
*''Douleur'' semblant exagérée par rapport à la rougeur de la peau initiale
*''Rougeur'' puis ''Nécrose'' des tissus
**''Crepitus''
**''Anesthésie cutanée''
!!Traitement
*''Excision chirurgicale'' en urgence des zones touchées
*''ATB IV large spectre'', ne suffit pas seule
undefine
!!Définition *With , usually called ''faux-croup'', there is mucosal inflammation and increased secretions affecting the airway, but it is the oedema of the subglottic area that is potentially dangerous in young children because it may result in ''critical narrowing of the trachea''. *Viral croup accounts for over 95% of laryngotracheal infections. @@background-color:Orange;''Parainfluenza''@@ viruses are the commonest cause, but other viruses, such as human metapneumovirus, RSV and influenza, can produce a similar clinical picture. *Croup occurs ''from 6 months to 6 years of age but the peak incidence is in the second year of life''. It is commonest in the autumn. *The typical features are a @@background-color:Orange;''toux aboyante'', ''stridor''@@ and hoarseness, usually preceded by fever and coryza. The symptoms often start, and are worse, at night. *When the upper airway obstruction is mild, the stridor and chest recession disappear when the child is at rest. ''The child can usually be managed at home.'' The parents need to observe the child closely for the signs of increasing severity. *The decision to manage the child at home or in hospital is influenced not only by the severity of the illness but also by the time of day, ease of access to hospital and the child’s age (with a low threshold for admission for those <12 months old, due to their narrow airway caliber), and parental understanding and confidence about the disorder. *Inhalation of warm moist air is widely used but is of unproven benefit. Oral dexamethasone, oral prednisolone and ''nebulised steroids (budesonide)'' reduce the severity and duration of croup, and the need for hospitalisation. *In severe upper airways obstruction, ''nebulised epinephrine ''(adrenaline) with oxygen by facemask provides transient improvement. Close monitoring,
!!Generalités *Déficit enzymatique ''le plus fréquent'', plus fréquent que le déficit en Pyruvate Kinase *Fait des ''anémies hémolytiques'' *Il faut éviter certains aliments et médicaments, comme les ''fèves'' ou la ''dapsone'' *lors d'''infections'' il peut y avoir une ''crise'' avec anémie hémolytique aigue.
![ext[fente_palatine.pdf|./pdf/fente_palatine.pdf]] <!-- Texte caché pour la recherche Cleft lip and palate 176 A cleft lip (Fig. 10.24a) may be unilateral or bilateral. It results from failure of fusion of the frontonasal and maxillary processes. In bilateral cases the premaxilla is Neonatal medicine (a) Figure 10.25 Micrognathia in Pierre Robin sequence. (b) Figure 10.24 Before (a) and after (b) operation for cleft lip. Photographs showing the impressive results of surgery help many patients cope with the initial distress at having an affected infant. (Courtesy of Mr N. Waterhouse.) anteverted. Cleft palate results from failure of fusion of the palatine processes and the nasal septum. Cleft lip and palate affect about 0.8 per 1000 babies. Most are inherited polygenically, but they may be part of a syn drome of multiple abnormalities, e.g. chromosomal disorders. Some are associated with maternal anticon vulsant therapy. They may be detected on antenatal ultrasound scanning. Surgical repair of the lip (Fig. 10.24b) may be per formed within the first week of life for cosmetic reasons, although some surgeons feel that better results are obtained if surgery is delayed. The palate is usually repaired at several months of age. A cleft palate may make feeding more difficult, but some affected infants can still be breast fed successfully. In bottle fed babies, if milk is observed to enter the nose and cause cough ing and choking, special teats and feeding devices may be helpful. Orthodontic advice and a dental prosthesis may help with feeding. Secretory otitis media is rela tively common and should be sought on follow up. Infants are also prone to acute otitis media. Adenoid ectomy is best avoided, as the resultant gap between the abnormal palate and nasopharynx will exacerbate feeding problems and the nasal quality of speech. A multidisciplinary team approach is required, involving plastic and ENT surgeons, paediatrician, orthodontist, audiologist and speech therapist. Parent support groups can provide valuable support and advice for families (Cleft Lip and Palate Association, CLAPA). - - - Pierre Robin sequence The Pierre Robin sequence is an association of micro gnathia (Fig. 10.25), posterior displacement of the tongue (glossoptosis) and midline cleft of the soft palate. There may be difficulty feeding and, as the tongue falls back, there is obstruction to the upper airways which may result in cyanotic episodes. The infant is at risk of failure to thrive during the first few months. If there is upper airways obstruction, the infant may need to lie prone, allowing the tongue and small mandible to fall forward. Persistent obstruction can be treated using a nasopharyngeal airway. Eventually the mandible grows and these problems resolve. The cleft palate can then be repaired. -->
undefine
!!Fibrillation Auriculaire (FA)
{{ECG_FA.jpg}}
*La ''FA'' est une ''Tachyarythmie Supraventriculaire Auriculaire'' due à des ''micro-réentrées'' dans l'auricule, avec la production d'''ondes f''.
*A ne pas confondre avec le [[Flutter Auriculaire]] qui est du à des macro-réentrées et donne des ondes F.
*L'''Oreillette Gauche '' est la plus touchée des deux.
*L'Oreillette "bat" tellement vite et de manière chaotique que le mouvement global resultant est une ''oreillette qui ne bats plus''.
*De temps en temps une dépolarisation atteint le noeud AV et donne un battement ventriculaire, d'ou la définition de la FA par un ''Rythme Sinusal Irrégulier''
*Le ''Volume d'Ejection'' cardiaque est ''diminué de 10-15%'' vu qu'il manque l'aide de l'''//Atrial kick//''.
*la ''Cause'' principale de la FA est l'''Age avancé'' du patient. Chez une jeune, penser à l'hyperthyroidie (dosage de TSH dans le bilan de la FA systematique)
*Une FA risque de donner des ''Embols'' et de faire p.ex des AVC emboliques si elle n'est pas anti-coagulée.
*Les ''Symptômes'' de la FA comprennent:
**''Asynptomatique'' (fréquente)
**''Palpitations''
**''Dyspnées''
**''Syncopes, Pré-Syncopes''
*La ''Forme '' d'une FA peut être
**''FA Paroxystique'' si elle dure >48h
**''FA Persistante'' si elle dure >7j
**''FA de Longue Durée'' si elle dure >1an
**''FA Permanente'' si elle est acceptée par le médecin et le patient
**''FA Silencieuse'' si elle est asymptomatique, ce peut être les 4 formes précédentes
**''FA idiopathique'' ou //Lone FA// si le patient n'a aucun ATCD CV ni preuve echographiqe de cardiopathie structurelle
*La ''Classification EHRA'' évalue la ''répércussion '' de la FA:
**''Classe I'': FA Asymptomatique
**''Classe II'': FA avec Symptômes légers
**''Classe III'': FA avec Symptômes sévères
**''Classe IV'': FA avec Symptômes invalidants
*le ''Traitement '' comprend:
**''Anticoagulants'' via des ''ACO'' ou de l'''Aspirine'', en fonction du ''Score CHADS2''
**''Contrôle de la Fréquence++'' chez les FA légères, via des ''Beta-Bloquants'' et la ''Digoxine''
**''Contrôle du Rythme'' par ''cardioversion electrique ou chimique'' par l'''Amiodarone''. La cardioversion électrique a plus de chance de succès que la cardioversion chimique.
{{ECG_FA_schema.jpg}}
!!Fibrillation Ventriculaire (FV)
{{ECG_FV.jpg}}
*La ''FV'' est une ''dépolarisation chaotique des ventricules'', avec comme résultante des multiples dépolarisation une ''absence de contraction globale'' entrainant une ''Mort immédiate''.
*Elle est souvent la conséquence d'une [[Tachycardie Ventriculaire (TV)]].
*''Cliniquement'' le patient peut en quelques secondes tomber en ''Mort apparente''. La mort est inévitable en l'absence d'une ''Cardioversion immédiate'' par Electrochocs.
{{ECG_FV_schema.jpg}}
!!Définition
*La Fibromyalgie est un ''syndrome douloureux chronique'', qui est assez ''fréquent'' dans la population, surtout chez les ''jeunes femmes'' (entre 25 et 50 ans).
*Elle est ''associée'' fréquemment au ''syndrome de fatigue chronique'' ainsi qu’à des ''troubles psychiatriques''.
*Elle est caractérisée par des ''douleurs musculaires et articulaires'', souvent concentrées sur des points précis appelés « ''Points de fibromyalgie'' ».
*On pense que la maladie est liée à une ''sensibilité accrue au stress'' ainsi qu’à un ''seuil de douleur abaissé''.
{{fibromyalgie_points_douloureux.jpg}}
!!Clinique
*La maladie a un ''début insidieux'' avec l’apparition de ''douleurs musculaires ou articulaires'' qui deviennent avec le temps ''de plus en plus diffuses'' et généralisées.
*La maladie est fréquemment accompagnée de ''3 symptômes'' qui sont la ''fatigue'', les ''troubles du sommeil'' et la ''dysthymie'' (dépression chronique d’intensité moyenne)
*L’examen ''clinique'' du patient est en revanche ''tout à fait normal'', à part au niveau des ''points de fibromyalgie''. Pareil aussi pour le laboratoire qui est tout à fait normal.
!!Investigations
*Ne ''pas faire trop d’investigations laboratoires'' ! On risque de trouver des résultats anormaux sans lien avec la fibromyalgie.
*Se limiter à un ''bilan de base''. FSC, CRP, TSH, Créat, Electrolytes,...
!!Diagnostic
*Le diagnostic est donné par les ''Critères ACR''. Il comprend:
*Des symptômes durant depuis >''3 mois''
*Des ''multiples zones douloureuses'' à la palpation
*Une ''absence d’autre diagnostic'' envisageable
!!Traitement
*En premier lieu ''être à l’écoute du patient''. Il faut bien l’informer que sa maladie est ''fréquente et bénigne''.
*Le premier traitement est un programme d’exercices ''d’hygiène de vie'', qui inclut notamment la ''marche'' et la ''réduction du stress''.
*Ensuite vient le ''traitement pharmacologique'' avec en tout premier lieu l’Amitriptyline (un antidépresseur tricalcique qui permet d’aider au niveau du sommeil). Ensuite on peut ajouter la ''Prégabaline'' (un agoniste GABA utilisé contre les douleurs neurogène), les ''AINS'' (contre les douleurs) et les ''Antidépresseurs SNRI'' (Duloxetine, Venlafaxine)
*Le pronostic n’est pas bon, la maladie reste souvent chronique, mais elle peut disparaître spontanément.
undefine
{{fibrose_pulmonaire_ct.jpg}}
!!Généralités
*La ''Fibrose Pulmonaire'' , ou //Fibrose Interstitielle//est un terme radiologique décrivant un ''excès de fibrose'' dans le poumon.
*A ne pas confondre avec la //Fibrose Pulmonaire Idiopathique// qui est une forme de [[Pneumopathie Interstitielle|Pneumopathies Interstitielles]]
*La fibrose pulmonaire peut être localisée ou atteindre un poumon entier
*On peut la trouver dans un tas de ''pathologies'' différentes:
//Degats pulmonaires//
*Pneumonie
*SDRA
*post-traumatique
*post-radique
//Substances inhalées//
*Asbestose
*Silicose
*Charbon
//Congénital//
*Mucoviscidose (//Cystic Fibrosis//)
//Granulomatoses//
*Sarcoïdose
*TBC
*Wegener
//Autres//
*Affections auto-immunes
*Connectivites
!!Généralités
*la ''Fibrose Rétroperitonéale'' est une maladie inflamamtoire chronique caracterisée par la formation de'' tissus inflammatoire ''rétroperitonéal, typiquement autour de l'''aorte'' ou des ''iliaques'', ainsi que des structures adjacentes (uretère, VCI).
*L'Etiologie est peu claire. ''Idiopathique avec IgG4'' en majorité. Ou secondaire à des aortites athéromateuses, des médicaments, infections, trauma, chirurgies ou encore cancers.
*la Clinique est surtout des ''lombalgies'' et des ''symptômes abdominaux''.
*Une complication fréquente est l'''obstruction urétérale'' secondaire à une fibrose et sténose des uretères.
*Le traitement peut être par ''chirurgie'' ou par ''corticoïdes/immunosuppresseurs'' (comme le tamoxifen). La chirurgie se fait si des complications obstructives sévères surviennent.
*On fait souvent des ''CT/IRM'' mais ils vont difficilement distinguer les lésions actives vs fibrotiques.
*le ''PET-CT'' au FDG est utile pour le ''diagnostic'' de la pathologie ainsi que la ''réponse au traitement'', en montrant l'activité des lésions.
*Le PET a une excellente sensibilité, mais une faible spécificité pour cette pathologie
!!PET-CT
''CT ''
<$button popup="$:/fibrose_retroperitoneale_CT.jpg" >
[img width=64 [images/fibrose_retroperitoneale_CT.jpg]]
</$button><$reveal type="popup" state="$:/fibrose_retroperitoneale_CT.jpg"><div class='tc-tiddler-frame'>
{{fibrose_retroperitoneale_CT.jpg}}
</div>
</$reveal>
*le CT montrera une masse tissulaire bien délimitée mais irrégulière, le long des vaisseaux, enveloppant souvent l'uretère
''PET''
<$button popup="$:/fibrose_retroperitoneale_pet.jpg" >
[img width=64 [images/fibrose_retroperitoneale_pet.jpg]]
</$button><$reveal type="popup" state="$:/fibrose_retroperitoneale_pet.jpg"><div class='tc-tiddler-frame'>
{{fibrose_retroperitoneale_pet.jpg}}
</div>
</$reveal>
*La lésion apparaitra hypermétabolique et se superposera à la masse sur le CT
!!Exemples
<$button popup="$:/9.11.16_fibrose_retroperitoneale.jpg" >
[img width=64 [images/9.11.16_fibrose_retroperitoneale.jpg]]
</$button><$reveal type="popup" state="$:/9.11.16_fibrose_retroperitoneale.jpg"><div class='tc-tiddler-frame'>
{{9.11.16_fibrose_retroperitoneale.jpg}}
suivi d'une FRP, en augmentation, manchon autour de l'aorte et de l'Iliaque commune gauche
</div>
</$reveal> 9.11.2016: FRP péri-aortique
undefine
undefine
undefine
![ext[fievre_ped.pdf|./pdf/fievre_ped.pdf]] <!-- Texte caché pour la recherche The febrile child Most febrile children have a brief, self limiting viral infection. Mild localised infections, e.g. otitis media or tonsillitis, may be diagnosed clinically. The clinical problem lies in identifying the relatively few children with a serious infection which needs prompt treatment. - Clinical features When assessing a febrile child, consider the following. (i) How is fever identified in children? Parents usually know if their child has been febrile. In hospital, it is measured at: • • <4 weeks old by an electronic thermometer in the axilla 4 weeks to 5 years by an electronic or chemical dot thermometer in the axilla or infrared tympanic thermometer. In general, axillary temperatures underestimate body temperature by 0.5°C. (ii) How old is the child? Febrile infants <3 months old present with non specific clinical features (see Box 10.2) and often have a bacte rial infection, which cannot be identified reliably on clinical examination alone. It is uncommon for them to have the common viral infections of older infants and children because of passive immunity from their mothers (Fig. 14.2). Unless a clear cause for the fever is identified, they require urgent investigation with a septic screen (Box 14.1) and intravenous antibiotic therapy given immediately to avoid the illness becom ing more severe and to prevent rapid spread to other sites of the body. This is considered in more detail in the section on neonatal infection (Chapter 10 Neonatal medicine). - (iii) Are there risk factors for infection? These include: • • • • Illness of other family members If a specific illness is prevalent in the community Unimmunised Recent travel abroad, e.g. malaria, typhoid Worldwide causes of death in children < 5 years old Measles 1% HIV/AIDS 2% Figure 14.1 Worldwide causes of death in children <5 years old, 2008 (http://www.who.int, Accessed January 2011). 14 Others 17% Diarrhoea 14% Every year, over half of the 8.8 million deaths of children <5 years old is from infections Pneumonia 14% Neonatal (excluding infection) 29% Injuries 3% Neonatal infection 12% Malaria 8% Malaria • Deaths mostly from cerebral malaria from Plasmodium falciparum in Sub-Saharan Africa • Deaths have been reduced in many countries by insecticide-treated bed nets and early treatment with artemisinin-based combination therapy Diarrhoea • Most <2 years old • Often bacterial, although rotavirus also a major cause globally • Results in undernutrition, poor growth, death • Usually treated with oral rehydration solution, continuing to breast-feed • Antibiotics only for cholera, dysentery, giardiasis, amoebiasis Pneumonia • Risk factors – low birthweight, young age, not breast-fed, vitamin A deficiency, overcrowding • Predominantly bacterial • Strategy to reduce mortality: • Prevention – breast feeding and hand hygiene • Prevention – immunisation • Treatment – effective case management by early diagnosis using WHO guidelines (fever, cough, tachypnoea, chest recession, head nodding) and prompt treatment with antibiotics Measles • Preventable by immunisation Neonatal infection • Remains major cause of death • Mainly early-onset infection acquired at delivery • • Contact with animals, e.g. brucellosis. Increased susceptibility from immunodeficiency. This is usually secondary, e.g. post autosplenectomy in sickle cell disease or splenectomy or nephrotic syndrome, resulting in increased susceptibility to encapsulated organisms (Streptococcus pneumoniae, Haemophilus influenzae and salmonella), or rarely, primary immune deficiency. - (iv) How ill is the child? Red Flag features suggesting serious illness and the need for urgent investigation and treatment are: • • • • • • Fever >38°C if <3 months, >39°C if 3–6 months Colour – pale, mottled, blue Level of consciousness is reduced, neck stiffness, bulging fontanelle, status epilepticus, focal neurological signs or seizures Significant respiratory distress Bile stained vomiting - 242 Severe dehydration or shock. Infection and immunity Management Serum immunoglobin levels (% adult values) Maternally transferred IgG 100 50 IgM IgG IgA Children who are not seriously ill can be managed at home with regular review by the parents, as long as they are given clear instructions (e.g. what clinical fea tures should prompt reassessment by a doctor). Chil dren who are significantly unwell, particularly if there is no focus of infection, will require investigations and observation or treatment in a paediatric assessment unit or A&E department or children’s ward. A septic screen will be required (Box 14.1). 20 30 Birth Gestation (weeks) Total IgG 1 Age (years) 10 Parenteral antibiotics are given immediately to seri ously unwell children, e.g. a third generation cepha losporin such as cefotaxime or ceftriaxone if >3 months old. In infants 1–3 months old, cefotaxime (in case of septicaemia or meningitis) and ampicillin (in case of Listeria infection) are usually given. Aciclovir is given if herpes simplex encephalitis is suspected. Supportive care is given as indicated. - Figure 14.2 Serum immunoglobulin levels in the fetus and infant. When maternal immunoglobulin levels decline, infants become susceptible to viral infections. Box 14.1 Septic screen • Blood culture • Full blood count including differential white cell count • Acute phase reactant, e.g. C reactive protein (CRP) - • Urine sample Consider if indicated • Chest X ray - • Lumbar puncture (unless contraindicated) • Rapid antigen screen on blood/CSF/urine • Meningococcal and pneumococcal PCR on blood/CSF • PCR for viruses in CSF (especially HSV and enterovirus). (v) Is there a rash? Rashes often accompany febrile illnesses. In some, the characteristics of the rash and other clinical features lead to a diagnosis, e.g. meningococcal septicaemia; in many, a specific diagnosis cannot be made clinically. (vi) Is there a focus for infection? Examination may identify a focus of infection (Fig. 14.3). If identified, investigations and management will be directed towards its treatment. However, if no focus is identified, this is often because it is the prodromal phase of a viral illness, but may indicate serious bacte rial infection, especially urinary tract infection or septicaemia. The child should not be underdressed. The use of antipyretic agents should be considered in children with fever who appear distressed or unwell. They should not be given if the child is otherwise well. Either paracetamol or ibuprofen can be used. They can be given alternatively if unresponsive to a single agent. Evidence that antipyretics prevent febrile seizures is lacking. There are NICE guidelines for the management of the child with fever. Summary The febrile child • Upper respiratory tract infection (URTI) is an extremely common cause • Check for otitis media • Serious bacterial infection must be considered if there is no focus of infection, especially urinary tract infection or septicaemia, or there are Red Flag features of life threatening illness - • The younger the child, the lower the threshold for performing a septic screen and starting antibiotics. -->
{{typhoide_saumon.jpg}}
!!Génératliés
*la ''Fièvre Typhoïde'' //(ou fièvre entérique, typhus abdominale) //est une ''infection à Salmonelles'', plus précisément //s.typhi// et //s.paratyphi//,
*c'est un problème de santé publique surtout en Asie, Afrique, Inde et Amérique du Sud
*la bactérie a une incubation de 5-21 jours
*la ''Clinique'' est en ''3 phases'':
*#''1ere semaine'': ''Fièvre'' grimpant graduellement// (bactériémie)//
*# ''2e semaine'': ''Douleur Abdominales'', ''Diarrhées'', ''Erythème ''typique avec ''macules couleur saumon'' localisées surtout au niveau du ''tronc''
*# ''3e semaine'': ''HSM'' , ''hémorragies G-I''
*Les ''Investigations ''comprennent la mise en évidence de la bactérie par:
**''cultures de selles''
**''hémocultures''
*le ''Traitement'' passe par une ''ATBthérapie''
{{fievre_typhoide.jpg}}
undefine
undefine
undefine
undefine
undefine
!!''Examen Ecrit'' ''QCM Retranscrits'' *[ext[QCM AEML.pdf|./final/QCM%20Retranscrits/QCM_AEML.pdf]] *[ext[QCM EFMH.pdf|./final/QCM%20Retranscrits/QCM_EFMH.pdf]] ''QCM UEPF'' *[ext[QCM_Chir_Ortho.pdf|./final/QCM%20UEPF/QCM_Chir_Ortho.pdf]] *[ext[QCM_Chir_Thoracique.pdf|./final/QCM%20UEPF/QCM_Chir_Thoracique.pdf]] *[ext[QCM_Chir_Viscerale.pdf|./final/QCM%20UEPF/QCM_Chir_Viscerale.pdf]] *[ext[QCM_Epidemiologie.pdf|./final/QCM%20UEPF/QCM_Epidemiologie.pdf]] *[ext[QCM_Medecine_Interne.pdf|./final/QCM%20UEPF/QCM_Medecine_Interne.pdf]] *[ext[QCM_Medecine_Legale.pdf|./final/QCM%20UEPF/QCM_Medecine_Legale.pdf]] *[ext[QCM_Medecine_Sociale_Preventive.pdf|./final/QCM%20UEPF/QCM_Medecine_Sociale_Preventive.pdf]] *[ext[QCM_Medecine_Travail.pdf|./final/QCM%20UEPF/QCM_Medecine_Travail.pdf]] *[ext[QCM_MPR.pdf|./final/QCM%20UEPF/QCM_MPR.pdf]] *[ext[QCM_Pediatrie.pdf|./final/QCM%20UEPF/QCM_Pediatrie.pdf]] *[ext[QCM_Pharamcologie.pdf|./final/QCM%20UEPF/QCM_Pharamcologie.pdf]] *[ext[QCM_Urgences.pdf|./final/QCM%20UEPF/QCM_Urgences.pdf]] ''QCM USMLE'' *[ext[Psychiatry.pdf|./final/QCM%20USMLE/Psychiatry.pdf]] *[ext[Surgery.pdf|./final/QCM%20USMLE/Surgery.pdf]] *[ext[Pediatrics.pdf|./final/QCM%20USMLE/Pediatrics.pdf]] *[ext[Gynecology.pdf|./final/QCM%20USMLE/Gynecology.pdf]] *[ext[Cardiology.pdf|./final/QCM%20USMLE/Cardiology.pdf]] *[ext[Respiratory.pdf|./final/QCM%20USMLE/Respiratory.pdf]] *[ext[Gastro-Enterology.pdf|./final/QCM%20USMLE/Gastro-Enterology.pdf]] *[ext[Hepatology.pdf|./final/QCM%20USMLE/Hepatology.pdf]] *[ext[Genitourinary.pdf|./final/QCM%20USMLE/Genitourinary.pdf]] *[ext[Electrolytes.pdf|./final/QCM%20USMLE/Electrolytes.pdf]] *[ext[Rheumatology.pdf|./final/QCM%20USMLE/Rheumatology.pdf]] *[ext[Neurology.pdf|./final/QCM%20USMLE/Neurology.pdf]] *[ext[Endocrinology.pdf|./final/QCM%20USMLE/Endocrinology.pdf]] *[ext[Infectious_Diseases.pdf|./final/QCM%20USMLE/Infectious_Diseases.pdf]] *[ext[Hemato-Oncology.pdf|./final/QCM%20USMLE/Hemato-Oncology.pdf]] *[ext[Dermatology.pdf|./final/QCM%20USMLE/Dermatology.pdf]] *[ext[Poisoning.pdf|./final/QCM%20USMLE/Poisoning.pdf]] *[ext[Preventive_Medicine.pdf|./final/QCM%20USMLE/Preventive_Medicine.pdf]] *[ext[Biostatistics.pdf|./final/QCM%20USMLE/Biostatistics.pdf]] *[ext[Ophtalmology.pdf|./final/QCM%20USMLE/Ophtalmology.pdf]] *[ext[ENT.pdf|./final/QCM%20USMLE/ENT.pdf]] *[ext[Miscellaneous.pdf|./final/QCM%20USMLE/Miscellaneous.pdf]] !!''ECOS'' ''Fiches'' *[ext[Fiches_DD.zip|./final/ECOS/Fiches_DD.zip]] *[ext[Fiches_Evaluations.zip|./final/ECOS/Fiches_Evaluations.zip]]
{{fissure_anale.jpg}}
!!Généralités
*une ''fissure anale'' est une ''déchirure du canal anal'' qui se trouve ''sous le niveau de la ligne dentée''. La ou l'épithélium est très sensible.
*après une première déchirure, il y a très souvent une ''chronicisation'' de la blessure
*les ''Causes'' sont
**''constipation'' avec passage large de selles dure
**''laxatifs'' de manière abusive
**''contracture de l'anus'' trop forcée à cause du stress ou de la douleur
*la ''clinique'' comprend
**''douleurs'' très fortes, surtout après défécation
**''saignements''
**''spasme'' du sphincter
**''//marisque sentinelle //''si chronique
*le ''traitement'' est varié
**''ramolisseurs'' de selles
**''nifédipine'' ou ''nitrogylcérine'' ''locaux'' pour améliorer la circulation
**''bottox''
**la ''Chirurgie'' est le traitement le plus efficace
undefine
undefine
!!Flutter Auriculaire
{{ECG_Flutter_Auriculaire.jpg}}
*Le ''Flutter Auriculaire'' est une ''Tachyarythmie Sinusale Atriale >100/min''
*Il est caractérisée par les ''P en dent de scie en DII'' ou en //toit d'usine//. On les nomme aussi ''ondes F''.
*Il implique souvent des ''P à 300/min'' avec des ''QRS à 150/min'' ce qui donne un ''bloc 2:1'', mais on peut aussi trouvers des 3:1
*La cause est des ''Macro-réentrées'', à ne pas confondre avec les micro-réentrées de la [[Fibrillation Auriculaire (FA)]] qui donnent des ondes f.
*''Traitement'': Ablation (Bruler par radiofréquence) la partie qui fait des réentrées (souvent près de la VC), couplé à un mois d'anticoagulation.
{{ECG_Flutter_Auriculaire_schema.jpg}}
!!Flutter Ventriculaire
{{ECG_Flutter_Ventriculaire.jpg}}
*Le ''Flutter Ventriculaire''est une ''Tachyarythmie Ventriculaire'' , plus précisément une [[TV monomorphe|Tachycardie Ventriculaire (TV)]], avec une ''fréquence à 300/min''.
*A l'ECG, cela donne un ''aspect sinusoïdal''
*Il y a un risque de dégénérescence en [[Fibrillation Ventriculaire (FV)]].
*Elle fait partie des ''rythmes choquables'' en compagnie des autres [[TV |Tachycardie Ventriculaire (TV)]]et des [[FV|Fibrillation Ventriculaire (FV)]].
{{ECG_Flutter_Ventriculaire_schema.jpg}}
undefine
!!Variabilité *Les normes sont en fonction de age, taille et ethnie *On les admets variables a 20% (10% pour le DEP ou DME 25-75%) !!Valeurs *''VEMS'': 3000ml *''CVf'': 4000ml :capacité vitale forcée, inspimax + expimax rapide = air trapping dynamique si diminué par rapport a CVl *''CVl'': 4000ml :capacité vitale lente, inspimax + expimax lente *''Tiffenau'' (VEMS/CVF): 75% : définit un syndrome obstructif si diminué, et si augmenté c'est la fibrose (restrictif) *''VR'': 2000ml :volume residuel, apres expiration forcée: *''CPT'': 6000ml :capacité pulmonaire totale: définit un syndrome restrictif si diminué, une hyperinflation si augmenté *''VR/CPT'': 33%: définit un air trapping statique si augmenté *''DEP'' (ou PF peakflow): teste les grosses voies respiratoire (VAS) *''DME 25-75%'' : 3.5l: petites voies aériennes sup. *''DLCO'': diminué dans anémie, fibrose, odème alveolaire, odème interstitiel, emphysème, embolie, HTP , manque de volume (pneumectomie) *''KCO'': diffusion par unité de volume alvéolaire (normal dans la pneumectomie, le pneumothorax,...) !!Syndromes Obstructifs *''BPCO'': definition clinique (toux 3mois x 2ans) *''Asthme'': definition fonctionelle (syndrome obstructif variable avec le temps ) *''Emphysème'': definition histologique (destruction alveoles) !!Syndromes restrictifs: *''Fibrose'': avec rapport de tiffenau augmenté *''Pneumothorax'' *Pnemectomie *Myopathie !!Autres pathologies: *''Mauvaise compliance'': si tout est normale sauf le DEP et DME, se corrige aux essais *''Stenose des VAS ''(compression externe, tumeur,...): si tout est normal sauf DEP et DME diminué, ne se corrige pas *''Bronchiolite'': small airways disease = Air trapping statique et dynamique *''Anémie'': spirométrie normale, DLCO diminué (le monoxyde de carbone diffuse et se fixe sur l'hb, si il y en a moins il se fixe moins)
undefine
undefine
undefine
*''F''réquence
*''R''ythme
*''A''xe (-30 - 90, regarder D1+ puis AVF+)
*''C''onduction (''PR'' 120-200, QRS >120ms , ''QTc'' < 440, BAV, ''BBD'' rsR' V1, ''BBG'' RsR' V6)
*''H''ypertrophie (''VG'': S V1 + R V6 >35 mm, ''VD'': axe D, R V1, S V6, OG: bifide, OD: pointue)
*''T'' waves
*''I''nfarctus
![ext[donjuan.pdf|./pdf/donjuan.pdf]] <!-- Texte caché pour la recherche Fracture Calcaneus Calcanéum Calcanéus Donjuan Don juan don_juan -->
undefine
undefine
undefine
![ext[fracture_radius_distal.pdf|./pdf/fracture_radius_distal.pdf]] <!-- Texte caché pour la recherche nerf radial main tombante distal -->
![ext[fracture_EDR.pdf|./pdf/fracture_EDR.pdf]] <!-- Texte caché pour la recherche EXTREMITE DISTALE DU RADIUS extrêmité distale du radius EDR -->
![ext[fracture_rotule.pdf|./pdf/fracture_rotule.pdf]] <!-- Texte caché pour la recherche tableau de bord rotuleienne rotulienne rotule -->
![ext[fracture_scaphoide.pdf|./pdf/fracture_scaphoide.pdf]] <!-- Texte caché pour la recherche scaphoide piston schreck -->
![ext[fracture_pelvis.pdf|./pdf/fracture_pelvis.pdf]] <!-- Texte caché pour la recherche -->
*Simple ''supracondylar'' ''fractures'' are typically seen in ''younger'' ''children'' *These injuries are almost always due to ''accidental trauma'' on a'' hyper-extended elbow.'' *''Fat pad sign'' *TTT: ''platre'' pour les stables, avec plus ou moins ''CRIF'''' avec K-wire'' pour les déplacées *''Complications'' **Compression de l'artère radiale (peut evoluer en contracture de Volkmann **Non-union **Atteinte d'un des trois nerfs de la main
!!Généralités
*Fracture du tibia est la fracture'' la plus fréquente des os longs''
*Souvent ''ouverte''
*Souvent associée avec un ''syndrome des loges''
*Souvent associée à des ''lésions neuro-vasculaires''
*Souvent associées à des ''lésions des tissus mous''
!!Classifications
*''Os'' ''touché'', ''côté''
*''Localisation'' : épiphyse, métaphyse, diaphyse (1/3 supérieur, 1/3 moyen, 1/3 inférieur), physe (plaque de croissance)
{{localiastion-os.jpg}}
*''Energie'' du choc
**Basse énergie : blessure de torsion
**Haute énergie (chutes. sport, AVP)
*''Ouverte vs fermée''
**''Fermée'' : peau et tissus mous sont intacts sur et vers la fracture
**''Ouverte'' : peau et tissus mous lacérés ou abrasés autour de la fracture, fracture exposée à l'environnement
**Signes : Saignement continu, gouttelettes de graisse dans le sang.
**[[Classification|classification-fractures-ouvertes2.jpg]] (Gustilo)
{{Gustilo.jpg}}
*''Alignement'' : position du fragment distal p/r au fragment proximal
**''Non'' ''déplacé'' ou ''déplacé''
**''Distracted'' (fragments séparés par un espace, inverse de tassement) vs ''impacted'' (tassement -> compression des fragments, raccourcissement osseux)
**''Translaté''/''shifté'' (% d'overlap au site de fracture)
**''Angulé'' (varus, valgus)
**''Rotated''
*''[[Type de fracture|types-fracture2.jpg]]''
**''Transverse'' (grande énergie)
**''Oblique'' (force angulaire ou rotation)
**''Butterfly''
**''Segmentaire'' : grande énergie
**''Spirale'' : rotation, basse énergie
**''Comminutive'' : ≥2 fragments
**''Inta-articulaire''
**''Avulsion = grande énergie'' (tendon ou ligament déchire ou tire un bout d’os : enfant, haute énergie)
**''Compressé'' (tassement ➔ tibia proximal ou vertèbres)
**''Fracture pathologique'' (causées par une faiblesse osseuse : maladie / tumeur)
**''Principaux types'' : transverse, oblique longue, oblique courte, spiroïde (mécanisme de rotation)
**''Principales classifications'' : aile de papillon, bifocale, comminutive
**''Déplacement'' : angulation, translation, chevauchement, décalage en rotation (dans un plan transversal). Fracture engrenée : elle peut être déplacée ou non.
{{types-fracture.jpg}}
*''Lésions associées''
**''Neurologique''
**''Vasculaire''
!!Symptômes
*Traumatisme
*Incapacité de porter du poids
*Douleur
!!Signes
*Fracture ouverte vs fermée
*Fausse mobilité
*Difficulté à la mobilisation active (douleur)
*± Problèmes vasculaires
*± Problèmes nerveux
!!Examens complémentaire
*Rx
!!Traitement
*Fracture ''ouverte'' : ATB immédiatement, pansement stérile, prophylaxie tétanos, ''chirurgie'' ''en urgence''
**''ATB'' ''IV'' aux urgences / dans l'ambulance pour ''fracture'' ''ouverte'' (céphalosporines 1-2è génération)
**''Prophylaxie'' ''tétanos'' si plaie ouverte (vaccin + ad Ig si vaccin <5ans ou plaie contaminée ou >10ans et plaie peu contaminée)
!!!Fonctionnel
*Mobilisation immédiate du segment osseux, malgré la fracture
*Pas d'opération ni immobilisation.
*p.ex : fracture très parcellaire du rachis.
!!!Conservateur
*''Indication'' : fracture fermée, pas ou peu déplacée
*± ''Réduction'' ''fermée'' (traction dans l'axe du membre + inverser le mécanisme qui a produit la fracture).
*''Immobilisation''
**Plâtre cruro-pédieux
**''8-12 semaines ''
**Puis attelle fonctionnelle
*''Analgésie''
*Avantages : pas de risque opératoire
*Désavantage : risque de position vicieuse et mauvaise circulation.
**Si position vicieuse : [[gypsotomie|gipsotomie.jpg]] = couper le plâtre pour réaligner fracture
!!!Opératoire
*Indication : fracture ouverte ou déplacée
*± Réduction ouverte
{{open-reduction.jpg}}
*Ostéosythèse
**Vis et clou centro-médullaire
**Plaques et vis
**Fixateurs externes
**Utilisé surtout pour les fractures type III (damage control) => permet de donner le temps aux tissus mous de guérir avant de faire une fixation interne.
**Avantage : réglages possibles, vite mis en place, vite enlevé, que 4 bronches dans le corps (moins de risque de fracture)
**Désavantage : désagréable, douleur, stabilité moyenne.
*''Irrigation'' ''opératoire'' et ''débridement'' ''dans les 6-8h'' pour diminuer le risque d’infection si ''fracture'' ''ouverte''
__''Fracture déplacée et fermée''__
*ORIF (open reduction et internal fixation) avec clou intramédullaire, plaque et vis vs broche
*Fixateur externe
{{orif.jpg}}
''__Fracture ouverte__''
*ATB
*Incision et drainage
*Fixation externe
*Clou intra-médullaire
*+ Vascularisation des tissus mous (qui guérissent mal)
**Stade II : suture simple après parage
**Stade III : perte de substance -> couvrir le segment osseux par un lambeau de couverture, musculaire p.ex., en urgence.
!!Evolution naturelle d'une fracture
{{guerison-fracture.jpg}}
*Au niveau de l’épiphyse : 3semaines chez l’enfant, 6 à 8 semaines chez l’adulte
*Au niveau de la diaphyse : 6 semaines chez l’enfant, 3 mois chez l’adulte
*''Test'' ''d'union'' :
**Clinique : pas de sensibilité à la palpation
**Rx : trabécules traversant le site de fracture, cal autour de la fracture
*''Rééducation'' nécessaire
!!!FR Retard de consolidation
*Lié au ''patient'' : ''ostéoporose'', ''âge''
*Lié à la ''fracture'' :
**Consolidation plus difficile au niveau de la ''diaphyse''.
**''Comminution'' (= éclatement du segment osseux) : plus il y a de fragments moins bien ça consolide
**''Perte de substance osseuse ''(ex : fracture ouverte avec morceau perdu dans l’accident)
**''Fracture'' ''ouverte'' : contamination avec l’extérieur.
**''Dégâts'' des ''parties'' ''molles'' (peau, muscle, périoste)
**Survenue sur ''os'' ''infecté''
**Survenue sur ''os'' ''irradié'' (traitement de cancer)
**''Lésion'' ''nerveuse'' tronculaire associée (fracture + paralysie du membre)
*Facteurs liés au ''geste'' :
**''Stabilité'' du montage (mobilité du foyer)
**Persistance d’un ''écart'' ''interfragmentaire'' : Ecart > 5-10 mm augmente le risque (idéal : < 2mm)
**''Ostéosynthèse'''' à ciel ouver''t (= plaque d’ostéosynthèse en ouvrant la peau) : on vide l’hématome (avec facteurs de croissance et cellule) et décolle le périoste (rôle important dans la consolidation) => risque augmenté.
!!Complications d'une fracture
*''Algodystrophie'' (douleurs, tuméfaction d'un membre et troubles trophiques suite à un trauma)
*''Pseudoarthrose'' (non union) et retard de consolidation
*''Cals'' ''vicieux'' (mal union) : rotation, raccourcissement, varus, recurvatum, contraintes pour les articulations (genou, cheville)
*''Infections'' et ''ostéomyélites''
*Risque de ''MTEV'' malgré prophylaxie
*Tibia : ''syndrome des loges, lésion neurovasculaire, atteinte des tissus mous''
{{complic-fracture.jpg}}
*//''Immédiates'' : hémorragie, embol graisseux / complications vasculaires (rare, urgence immédiate -> 6h pour remplacer l'axe artériel) / syndromes des loges//
*//''Tardives'' : Cal vicieux, Déformation, Pseudarthrose, retard de consolidation, Nécrose, Impotence fonctionnelle, Douleur, Infection. //
!Syndrome des loges (URGENCE)
!!Définition
*Augmentation de la pression interstitielle dans un compartiment fibro-osseux (muscle et tissus attachés par fascia et os)
*''Perfusion interstitielle >> perfusion capillaire''
*Nécrose musculaire en 4-6h
*Nécrose nerveuse par la suite
{{syndrome-loges-physiopatho.jpg}}
!!Localisations
*Mollet, avant-bras, mais aussi main, pied, bras, cuisse.
!!Clinique
*''5P''
**''Pain'' (douleur hors de proportion p/r à la blessure = 1er sx / non amélioré par les analgésiques / douleur augmentée par étirement passif des muscles concernés (SN - étirer orteils - doigts) / douleur lors de la contraction active du compartiment)
**Paresthésie
**Tardifs : pâleur, paralysie, pulslessness
*''Compartiment'' ''gonflé'' et ''tendu'' (mollet tendu à la plapation)
!!Causes
*''Extra''-''compartiment'' : pansement constrictif (plâtre circonférentiel, mauvais positionnement durant une chirurgie) ou brûlure circonférentielle
*''Intra''-''compartiment'' : facture (tibia, avant bras, pédiatrique : supracondylaire), blessure de reperfusion, ischémie, crush injury.
!!Examens complémentaires
*Diagnostic ''clinique''
*Si enfant ou inconscient /intubé : Mesure de la pression du compartiment avec un cathéter après que le diagnostic clinique soit fait
**Elevé : ≥30 mmHg = urgent
**N: 0-8/10 mmHg
**Attention entre 20-30mmHg
**Variation pression <30 mmHg = traitement urgent
!!Traitement
*''Opératoire''
**''Fasciotomie en urgence'' dans les 6h post accident
**48-72h post-op : fermeture de la blessure ± débridement du tissus nécrotique.
*''Non opératoire''
**Enlever un pansement constrictif
**Lever la jambe au niveau du coeur
!!Séquelles
*''Contraction ischémique de Volkmann'' :
**Nécrose ischémique du muscle -> calcification et firbose secondaire
**Fracture supracondylaire de l'humérus ++
*''Rhabdomylolyse'' avec IR secondaire à la myoglobinurie.
!Notes
*''Fracture'': rupture de continuité d’un segment osseux.
*''Ostéotomie'' : section d’un segment osseux de façon volontaire (fracture chirurgicale) afin de réaxer l’os.
*''Trait de fracture'' : ligne selon laquelle l’os s’est fracturé, visible sur une radiographie
*''Consolidation'' : succession d’évènements qui aboutit à la réparation complète du segment osseux fracturé.
*''Cal'' ''osseux'' : néoformation osseuse périfracturaire unissant les extrémités fracturées
*Embolie graisseuse : on a un passage de graisse de la moelle osseuse au sang Elle entraîne : un collapsus cardio-vasculaire ; un syndrome de confusion mentale ; des pétéchies sur le corps (= micro-hémorragies) ; des signes au fond d’œil.
![ext[fracture_femur_prox.pdf|./pdf/fracture_femur_prox.pdf]] <!-- Texte caché pour la recherche pertrochanterienne per-trochanterienne per-trochantérienne intertrochantérienne inter-trochanterienne inter-tronchanterienne fracture du col du fémur femur ORIF Gamma Clou DHS Dynamic Hip screw -->
undefine
{{gangrene.jpg}}
!!Définition
*la ''gangrène'' correspond à une ''nécrose des tissus'' irréversible.
*Elle peut être due à:
**''Embolie''
**''Choc''
**''Infection''
**''Exposition au froid''
!!Types de Gangrènes
*''Gangrène Sèche'': sur artérite, embolie ou thrombose. Les tissus deviennent noirs et se déssèchent
*''Gangrène blanche'': due à un arrêt momentané de la perfusion. Les tissus deviennent blanc laiteux.
*''Gangrène humide'': lors d'infection bactérienne, avec gonflement, suintements et putréfactions abondantes.
*''Gangrène gazeuse'': due à //c.perfringens// avec nécrose et crépitements des tissus. C'est la plus mortelle.
*''Gangrene dermique aigue'': correspond à la [[Fasciite Nécrosante]]
*''Noma'': Gangrène fulgurante du visage d'étiologie mal comprise
*Ecthyma Gangrenosum: Pseudomonas, chez patient immunosupprim, gros ulcère de l'abdomen. ATB IV mais pas de TTT.Chir
!!Traitement
*''ATB'' ne font que freiner la maladie
*''Débridement chirurgical'' voir amputation, pour stopper la progression
*Oxygénothérapie Hyperbare aussi possible.
undefine
undefine
undefine
{{gastrite.jpg}}
!!Définition
*la ''Gastrite'' est une inflammation de la muqueuse gastrique. Elle peut être ''aigue'' ou ''chronique''.
*la ''Gastrite Aigue'' est généralement due à
**''AINS'' (toujours penser à prescrire des IPP avec les AINS !)
**''//H.Pylori//''
**''Caffeine''
**''Alcool'', ''Cigarette''
**''Stress extreme'' (Brulures, Choc, Sepsis)
*la ''Gastrite Chronique'' peut être due à:
**''//H.Pylori//'', majoritairement. Les patients sont //asymptomatiques// généralement
**''Gastrite Autoimmune'' avec une Gastrite Chronique Atrophique avec des //anticorps antiparietal// et //anticorps anti-intrinseque//. Cela peut mener à une anémie pernicieuse.
*Les ''Complications'' peuvent être
**''Erosions gastriques''
**''Ulcère peptique''
**''Saignements gastriques''
**''Cancer gastrique''
!!Clinique
*''Asymptomatique'' surtout dans la gastrite chronique
*''Douleur épigastrique''
*''MALT'', un [[lymphome|Lymphomes]] qu'on traite par l'éradication de //H.pylori//.
*La Nourriture calme parfois, aggrave parfois
!!Diagnostic
A faire en cas d'échec du traitement dans la gastrite aigue, ou en cas de gastrite chronique
*''Endoscopie'' avec une ''Biopsie'' (avec clo test: test à l'uréase, ainsi que cultures)
*Autres tests pour trouver ''H.pylori'' (breath test a l'urée)
!!Traitement
*''STOP AINS''
*''IPP'' a l'essai pendant 4 semaines
*''Trithérapie'' si echec du traitement et //H.pylori //détecté, ou si gastrite chronique symptomatique
*#''amoxicilline''
*# ''clarythromicine''
*# ''IPP''
{{h.pylori_biopsie_histo.jpg}}
undefine
{{gastroenterite.jpg}}
!!Définition
*la ''gastro-entérite'' est une ''inflammation de l'estomac'' ainsi que de l'''intestin grêle'' dont la cause la plus fréquente est ''virale''.
*Les ''Germes'' les plus fréquents sont
**''Enfants'': le //''Rotavirus''//
**''Adultes'': le //''Novovirus''//, l'//Adénovirus// et la bactérie //Campylobacter//
*La maladie dure généralement ''3-7 jours'' et se résout d'elle-même
*les symptômes débutent généralement ''1-2j après un contact infectieux''.
!!Clinique
*''Diarrhées'' (peuvent être sanglantes si bactérienne)
*''Vomissements''
*''Crampes abdominales'' (fortes si bactérienne)
*''fièvre'' (surtout si bactérienne)
*''anorexie''
*''myalgies''
*''déshydratation'' (risque principal de complications
!!Prise en charge
*Pas besoin nécessairement d'examens complémentaires
*Traiter la ''déshydratation'' est le plus important
@@background-color:#d4fb79; !''Gastro-Entérologie'' @@ <<list-links "[tag[Gastro-Entérologie]sort[title]]">>
undefine
!!Préparation *1 plateau *1 Gazo (piston un peu tiré ) *1 petite aiguille (Orange 25G ou Brun 26G) *1 désinfectant *Plein de compresses *Un gros morceau de scotch *1 étiquette *gants //''Sans O2'': piquer 10min après arrêt de l’O2// //''Avec O2'': piquer 30min après dernier réglage O2 Nasal, 10min O2 ventilation actif. // !!Geste #Désinfecter mains, mettre gants #Désinfecter patient avec compresses #Se mettre ''confortable'' #Mettre poignet en extension #Bloquer l’artère #Piquer à 45° biseau vers le haut #comprimer 5min, scotcher !!A noter sur la machine *Nom du patient *Température *FiO2 (normale 21%, 24% 1L, 28% 2L, 32% 3L) !!Valeurs *''pH'': 7.35-7.45 *''pCO2'': 5.2-5.8 kPa: reflet de la ventilation alvéolaire (la production de CO2 augmente avec le sport, fièvre, metabolisme. La ventilation est regulée dans le bulbe) *''pO2'': 11.5-13.5 kPa: (régie par l'equation du gradient alvéolo-arteriel AaDo2 car il y a un petit effet shunt anatomique lié aux veines bronchiques et coronaires) *''AaDo2'': Pio2-Pao2 - (Paco2/QR) (QR a 1 pour HC, 0.7 pour lipides) = 21 - 13 - (5.5/0.9) = 1.5 kPa normalement au repos. !!Acidoses metabolique et trou anionique *TA normal = <11. (Na - Cl + HCO3-) *''A trou anionique normal'': on a une perte de HCO3- (diarrhées, urinaires) *''A trou anionique elevé'': on a ajouté de l'acide dans le systeme (lactates, SLIPMECCUP typiquement corps cetosoiques) !!Alcalose metabolique *Perte de H+: vomissements !!Rapport ventilation perfusion *si augmenté: effet espace mort (EP) *si diminué: effet shunt (pneumothorax) !!Stades Asthme: *''Stade I'': Paco2 bas, Pao2 N, pH augmenté *''Stade II'': Paco2 bien bas, Pao2 diminue, pH, augmente bien *''Stade III'': Paco2 Normal, pao2 bien diminué, ph normalise (s'épuise) *''Stade IV'': Paco2 augmenté, pao2 bien diminué, ph diminue !!Diagrame de McCurdy
@@background-color:LemonChiffon; !''Symptômes Généraux'' @@ <<list-links "[tag[Généraux]sort[title]]">>
{{genu_valgum_varum_schema.jpg}}
!!Genu Valgum
*le ''Genu valgum'', le plus fréquent des deux, correspond à des ''jambes en X''. L’enfant présentera des ''genoux qui frottent à la marche'' et une démarche disgracieuse.
*Elle est définie par un ''écart inter-malléolaire >2cm''. Au delà de 10cm, c’est un genu valgus sévère. L’écart peut être ''aggravé si l’enfant est en surpoids'' (pseudo-genu valgum).
*Cette pathologie est ''normale chez un enfant'', elle fait partie d’une ''étape normale du développement''. Il ne faut donc rien faire de spécial. Eventuellement pour les formes sévères une sur-élévation de la partie interne des chaussures, et des conseils diététiques.
*Les formes trop sévères et persistantes peuvent être traitées par chirurgie.
!!Genu Varum
*Le ''Genu Varum'' correspond à des ''Jambes en O''. Cette déviation peut être ''physiologique'' associée à une ''torsion tibiale interne'', avec un ''écart inter-condylien <1.5cm''. Autrement il existe plein de diagnostics différents, devant une évolution atypique il faut demander un avis spécialisé.
*Comme pour le Genu Valgum, les traitements chirurgicaux après bilan Radiologique sont rares, souvent l’évolution naturelle sera suffisante.
undefine
@@background-color:DarkOrange; !''Gestes'' @@ <<list-links "[tag[Gestes]sort[title]]">>
{{gingivo-stomatite_herpétique.jpg}}
!!Définition
*la ''Gingivo-stomatite Herpétique'' est une ''__primo-infection HSV1__'', survenant le plus souvent chez les ''enfants'' de 6mois à 5ans.
*Seuls une petite partie des enfants présentent une primo-infection HSV1 symptomatique.
*La transmission se fait par contact, surtout la ''salive''.
*L'''Incubation'' est de 3 à 6 jours.
!!Clinique
*''Fièvre'' et ''malaise'' général
*''Vésicules'' sur les lèvres principalement, groupées en ''bouquet'' avec lésion secondaire ''__crouteuse__''.
*''Haleine fétide''
*''Adénopathies'' cervicales
*Alimentation difficile voir impossible
!!Investigations
*le ''diagnostic'' est principalement ''clinique''
*on fait tout de même une ''PCR'' pour visualiser le virus
!!Traitement
*''Antiseptique topique'' associé à un ''antalgique topique''
*''Valaciclovir'' pendant 7j
undefine
undefine
![ext[Glandes_salivaires.pdf|./pdf/Glandes_salivaires.pdf]] <!-- Texte caché pour la recherche Glandes salivaires Francis Marchal Pavel Dulguerov Service d’Oto-Rhino-Laryngologie et de Chirurgie Cervico-Faciale HUG - Genève Pavel Dulguerov ~ ORL-CCF, 1 Glandes salivaires - plan ¿ Anatomie ¿ Physiologie ¿ Sémiologie ¿ Infections ¿ Sialolithiase sialendoscopie interventionnelle ¿ Affections inflammatoires ¿ Tumeurs bénignes cancers ¿ Chirurgie parotidectomie sous-maxillectomie Netter: Interactive atlas of anatomy, Ciba. Pavel Dulguerov ~ ORL-CCF, 2 GS -Anatomie ¿ 3 glandes principales parotide sous-maxillaire sub-linguale ¿ Nombreuses glandes accessoires (mineures) 700-1000 cavité buccale + oropharynx * Glandes similaires histologiquement (donc même tumeurs possibles) dans tous les VADS Becker, Naumann, Pfaltz: Précis d'oto-rhino-laryngologie, Flammarion, 1986 (p551) Pavel Dulguerov ~ ORL-CCF, 3 Parotide - anatomie ¿ Paroi antérieure : muscle masséter mandibule muscle ptérygoïde interne * douleurs à la mastication après parotidectomie Lang J: Clinical anatomy of the masticatory apparatus, 1995 (p111) Pavel Dulguerov ~ ORL-CCF, 4 -->
undefine
undefine
|!Grade OMS|!Gliomes|
| I | Astrocytome pilocytique |
| II | ''Astrocytome'', Oligodendrogliome |
| III | ''Astrocytome anaplasique'', Oligodendrogliome anaplasique |
| IV | ''Glioblastome'' |
*Les ''Gliomes'' regroupent l'''ensemble des tumeurs de la glie''. Ils sont classés selon le ''stade OMS''. Le Grade I et II comprend les tumeurs bénignes tandis que le grade III et IV comprend les tumeurs malignes. Ce sont des tumeurs ''intra-axiales'' (contrairement au schwannome et méningiomes)
*Les tumeurs bénignes ont une ''progression en grade'' au fil du temps, pouvant évoluer en tumeurs malignes.
*L'''astrocytome pilocytique'' de grade I est une tumeur pédiatrique rare.
*l'''astrocytome'' de grade II est le gliome le plus fréquent
*l'''astrocytome anaplasique'' de grade III est une tumeur maligne
*le ''Glioblastome'' de Grade IV est une tumeur très agressive.
{{glioblastome_ct.jpg}}
{{glomerulonephrite.jpg}}
!!Généraltiés
*La ''glomérulonéphrite'' est une affection (souvent d'origine inflammatoire) du ''glomérule'' touchant généralement les reins bilatéralement.
* Elle peut être asymptomatique, mais le plus souvent elle est responsable d'''hématurie'' et/ou de ''protéinurie <3g/24h'', formant un ''syndrome néphritique''. Cliniquement on retrouve aussi souvent:
**''HTA'' (rétention hydrosodée)
**''Odèmes'' (rétention hydrosodée)
**''Oligurie'' (insuffisance rénale)
*La glomérulonéphrite peut être ''aiguë'' ou ''chronique''.
*Elle peut aussi être ''proliférative'' ou ''non-proliférative''
*Les glomérulonéphrites sont le plus souvent ''primitives'' mais on peut parfois mettre en évidence des causes ''infectieuses'' (bactériennes, virales ou parasitaires), ''auto-immunes'' ou syndrome paranéoplasique.
*On fait souvent des ''biopsies'' rénales pour connaitre la cause exacte.
*Les ''stéroïdes'' sont souvent utilisés en traitement
*quelque ''exemples'' de glomérulonéphrites:
//proliférative//
**''GN post-streptococcique'' arrive quelques semaines après IVRS
**''GN à dépots d'IgA'' //''(maladie de Berger)''//: la plus fréquente, 24-48h post infection GI ou IVRS
**''GN membrano-proliférative'': auto-immune, progresse en IR terminale
**''GN rapdidement progressive''' (Crescentique): sur Wegener, PAN ou Goodpasture
//non-proliférative//
*''GN membraneuse'' souvent idiopathique
{{syndrome_nephrotique_vs_nephritique.jpg}}
undefine
undefine
{{goodpasture.jpg}}
!!Généralités
*le ''Syndrome de Goodpasture'' est une maladie ''auto-immune'' impliquant des ''anticorps IgG'' dirigés contre:
**''la membrane glomérulaire'' induisant une ''Insuffisance Rénale'' avec ''oligurie'', ''hématurie'', ''protéinurie'' ([[glomérulonéphrite proliférative rapidement progressive|Glomérulonéphrite]])
**''la membrane basale des alvéoles pulmonaire'' induistant une ''Insuffisance pulmonaire'' avec ''pneumonite hémorragique'' (''hémoptysis'' et ''dyspnée'')
*La pathologie pulmonaire précède la pathologie rénale
*On peut confirmer le diagnostic par ''biopsie rénale''.
*Cette pathologie a un ''mauvais pronostic''
*Le ''traitement'' implique de la ''plasmapherese'' (clean les IgG), du ''cyclophosphamide'' et des ''corticoïde''.
undefine
!!Définition
*La Goutte fait partie des ''arthropathies microcristallines''. Elle est caractérisée par un ''trouble du métabolisme des purines'', qui va résulter en une ''hyperuricémie'', .
*L’hyperuricémie induit des ''dépots'' de ''cristaux d’urate de sodium'' principalement dans les ''tissus (tophis'') ainsi que dans les ''membranes synoviales''. Mais pas dans la cavité synoviale comme pour la chondrocalcinose.
*Cette pathologie touche majoritairement ''les hommes'' de >45ans.
*L’hyperuricémie est souvent asymptomatique et n’induit pas à chaque fois de la goutte.
!!Etiologie
*__Rappel:__ L’acide urique vient de la xanthine, qui vient de l’hypoxanthine. Ce métabolisme implique la xanthine oxydase
*L’hyperuricémie ''primaire'' est due à une ''hyposécrétion rénale idiopathique'' d’acide urique.
*L’hyperuricémie ''secondaire'' est liée à l’alimentation (''viande'', bière, fruits de mers) ou aux ''médicaments (diurétiques'' de ''l’anse'' et ''thiazidiques'' mais pas épargneurs potassiques, ainsi que l'aspirine).
!!Clinique
*La ''Crise de goutte aigue'' est caractérisée par des ''intenses douleurs articulaires'', qui ''réveillent la nuit''. Les [[articulations|goutte_articulations_clinique.jpg]] touchées sont ''rouges, chaudes, gonflées''.
*L’atteinte est surtout ''monoarticulaire'' et ''asymétrique'', touchant surtout la ''MTP1'' (podagre), la ''cheville'', le ''genou'' ainsi qu’au niveau de la main les ''IPP (nodules de Bouchard'') et les ''IPD (nodules d’Heberden'')
!!Investigation
*Analyse du ''Liquide Synovial'' qui va montrer des ''[[cristaux d’urate de sodium|goutte_cristaux_aiguille.jpg]]'' en ''forme d’aiguille'' et de ''biréfringence fortement négative''
*La ''RX'' de l’articulation va montrer des ''[[tophis|goutte_rx_tophi.jpg]]'' ainsi qu’une ''érosion périarticulaire'' en « ''[[morsure de rat|goutte_rx_erosions_morsure_rat.jpg]]'' »
*Le ''labo'' va montrer une ''hyperuricémie'', surtout dans les gouttes chroniques, mais des fois l’acide urique est normal.
!!Traitement
*les ''AINS à haute dose'' comme l'indométhacine sont le traitement de ''premier choix'' pour les ''crises de goutte''. Ne pas les donner plus que quelque jours.
*la ''colchicine dans les 12h'' est efficace, mais pas si on la commence tardivement. On peut l’associer avec des ''infiltrations de corticoïdes''.
*''CAVE'' de ''ne pas donner d’allopurinol dans une crise de goutte aigue'' ni après 3-4 semaines. Ce médicament permet de diminuer l’uricémie mais ''précipite les crises'' !
*le traitement chronique comprend l’allopurinol (combiné avec de la colchicine pour limiter les précipitations) ainsi que la diminution des apports alimentaires à risque.
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{grippe.jpg}}
!!Définition
*la ''grippe'' est causée par le virus ''//Influenza//''.
*La transmission se fait par ''goutelettes'' et se retrouve surtout en ''hiver''. Il y a des ''//mutations mineures//'' chaque année du virus.
*Les Pandémies dues à des réarrangements majeurs sont rares mais peuvent être mortelles, surtout chez les jeunes.
*La grippe est ''bénigne sauf'' pour:
**''Très jeunes''
**''Très vieux''
**''Immunosupprimés''
**''Comorbidités médicales importantes''
!!Clinique
*''Fièvre'' et ''frissons''
*''Céphalées'' et ''malaises''
*''Toux non-productive''
*''Pharyngite''
!!Traitement
''Patient sain''
*''Traitement symptomatique''
*Vaccin annuel pas obligatoire
''Patient à risque''
*''Antiviral'' (ostemlavir)
*''ATB'' si surinfection
*Vaccin annuel fortement recommandé
undefine
![ext[GEU.pdf|./pdf/GEU.pdf]] <!-- Texte caché pour la recherche Grossesse extra-utérine (GEU) et Avortements spontanés Dr Patrick Dällenbach Service de Gynécologie Maternité-HUG Vignette 10 AMC 2012 Plan • GEU – Définitions – Clinique – Traitements • Avortements spontanés – Epidémiologie – Clinique – Prise en charge -->
![ext[grossesse_saigne_1ertim.pdf|./pdf/grossesse_saigne_1ertim.pdf]] <!-- Texte caché pour la recherche Avortement fausse couche GEU -->
undefine
undefine
undefine
{{guillain_barre_syndrome.jpg}}
!!Généralités
* Le ''Guillain-Barré'', ou ''GBS'', est une ''polyneuropathie démyélinisante'' due à des ''auto-anticorps'' attaquant la ''myéline '' du système nerveux périphérique, à commencer par les ''extrêmités distales'', de manière aiguë et rapide.
*Elle est souvent précédée d'une ''infection virale''.
*La ''Clinique'' commencerpar des ''parésies distales'', des ''paresthésies distales'' et une ''aréflexie distale''. Elle peut évoluer en ''dysfonction vésicale'' (atteinte du SNA).
*Les investigations comprennent surtout:
**une ''PL'' caractérisée par une ''dissociation albumino-cytologique'', c'est à dire une ''élévation de l'albumine'' mais ''sans élévation des GB''
**un ''ENMG'' démontrera un ''ralentissement de la conduction nerveuse''. Il sert aussi de facteur ''pronostic''.
**le ''Traitement'' comporte surtout des ''Immunoglobulines IV'' et de la ''Plasmaphérèse''. Si le patient finit par développer une ''insuffisance respiratoire'' il peut nécessiter une ''aide à la ventilation''.
!! Miller-Fischer
*La ''variante'' de ''Miller-Fischer'' ne comporte ''Pas de faiblesse musculaire distale'', mais une ''ataxie'' et une ''faiblesse des muscles occulaires''.
undefine
@@background-color:#d783ff; !''Gynéco-Obsétrique'' @@ <<list-links "[tag[Gynéco-Obstétrique]sort[title]]">>
undefine
undefine
undefine
undefine
undefine
@@background-color:DeepPink ; !''Hématologie'' @@ <<list-links "[tag[Hématologie]sort[title]]">>
{{HSA_vs_hematome_parenchymateux.jpg}}
!! Généralités
* l'''Hématome Intra-Parenchymateux'' correspond à un ''saignement dans le parenchyme cérébral'', qui peut être du à plusieurs ''causes'':
**Surtout l'''HTA'', due à des [[micro-anévrismes de Charcot-Bouchard|hematome_parenchymateux_microanevrisme_charcot_bouchard.jpg]] situés principalement au niveau du ''putamen'', ''thalamus'', ''cervelet'' et ''pont''.
**l'''Angiopathie Amyloïde'' qui n'est pas due à l'HTA, qu'on retrouve ''chez les vieux'' et dont la localisation est plutot située [[au niveau ''lobaire''|hematome_parenchymateux_angiopathie_amyloide_ct.jpg]], contrairement à l'HTA située au niveau central.
**les ''Malformations vasculaires'', surtout chez les ''jeunes'', comprenant la ''[[MAV|MAV_irm.jpg]]'' (aspect en nid de serpent), la ''[[DVA|DVA_irm.jpg]]'' (aspect en comète)et le ''[[Cavernome|cavernome_ct.jpg]]'' (aspect en popcorn)
**Les autres causes comprennent les ''anti-coagulants''. la ''cocaïne'' et les ''tumeurs''
*La ''clinique'' comprend des ''cephalées'' et ''vomissements'' plus ou moins ''aigus'', couplées à des ''déficits neurologiques focaux'' difficiles à attribuer à une zone en particulier. Le patient peut aussi présenter des ''troubles de la vigilance'' ainsi que des ''crises d'épilepsie''.
*Les ''facteurs de risque'' sont surtout l'''HTA'' mais aussi l'''alcool''. On peut [[observer les traces de l'HTA à l'IRM|micro-bleeds_leuco-encephalopathie_irm.jpg]] en visualisant des ''micro-bleeds'' et de la ''leuco-encéphalopathie''.
*Les ''investigations'' comprennent d'abord un ''CT natif'' qui montrera une ''collection hyperdense'' (qui devient isodense puis hypodense avec le temps). On peut aussi bien visualiser l'hématome à l'''IRM''.
*le ''Traitement'' passe par la ''diminution de l'HTA'' (mais pas trop car il faut maintenir une perfusion !), un ''contrôle de la TIC'' et ± une ''chirurgie'' avec craniotomie + évacuation, surtout si il y a des signes d'engagement au CT.
{{hematome_parenchymateux_ct_irm.jpg}}
undefine
undefine
undefine
!!Définition *''Devie l'axe vers la gauche'' (contrairement au BBG ou BBD qui ne changent pas l'axe) *On trouve donc un ''Axe hyper-gauche'' (-30). (QRS neg en aVF, positif en DI, neg en DII) *Autre critère Ondes rS profondes en aVF et V6
!! Généralités
* Les ''hémoglobinopathies'' sont des ''maladies héréditaires de la formation de l'hémoglobine'', dues à des ''défaut de synthèse des chaines a et b''.
* Les plus fréquentes sont la ''Thalassémie'' et la ''Drépanocytose''.
!! ''Thalassémie''
{{Thalassémie}}
!! ''Drépanocytose''
{{Drépanocytose}}
!! Définition * Les ''Hémophilies'' sont des ''Maladies Héréditaires liées à l'X'', touchant donc les hommes, avec une ''atteinte de l'hémostase secondaire''. Elles sont classifiée en ''Hémophilie A'' (la plus fréquente) et ''Hémophilie B''. * L'''Hémophilie A'' correspond à un ''manque de Facteur VIII''. On peut la confondre avec la [[Maladie de Von Willebrand]] qui implique aussi un déficit du facteur VIII (car il est transporté par le facteur von Willebrand). * L'''Hémophilie B'' (ou Chrismas Disease) correspond à un ''manque de Facteur IX''. !! Clinique * Le patient présente des ''Hémorragies des muqueuses'' (epistaxis), des ''Hemorragies intra-musculaires'' (pouvant donner des arthropathies invalidantes), des ''Hematuries'', des ''Hematochézies'' et des ''Hemorragies cérébrales'' * La ''séverité'' de l'Hémophilie sera dictée par la ''quantité de facteurs présents'' ** ''Hémophilie légère'': facteurs VIII ou IX à ''>5%'' ** ''Hémophilie modérée'': facteurs VIII ou IX à ''1-5%'' ** ''Hémophilie sévère'': facteurs VIII ou IX à ''<1%'' !! Investigations * ''Labo'' **le ''aPTT est augmenté'' [[(temps de céphaline activée)|hemophilies_aPTT.jpg]] **l'''INR est normal'' (TP/TP témoin, TP= Quick, Temps de Prothrombine) **le ''TT est normal'' (temps de Thrombine) **les ''facteurs VIII ou IX sont diminués'' (suivant le type d'hémophilie) **le ''facteur de vonWillebrand est normal'' !! Traitement * Le traitement se base sur la ''substitution en facteur VIII ou IX'' suivant le type d'hémophilie, via des molécules recombinantes. * Le patient doit aussi éviter les sports avec souffrance articulaire. Les vaccins ne doivent pas se faire par voir IM.
undefine
!!Definition * Le sang doit venir d'un effort glottique * Hémoptysie massive: 200ml/24h = 1Verre (jamais des grandes quantités, le patient meurt de noyade, pas d'hémorragie) * Le point le plus important étant la ''tolérance Clinique'' de l'Hemoptysie *Les'' artères bronchiques'' sont celles qui sont le plus souvent saignantes, car pression systémique *Leur origine vient de deux artères broncho-intercostale, sortant de l'aorte thoracique, se développant en plexus. C'est ces artères qu'on peut emboliser pour stopper le saignement. (Attention risque de communication avec artère spinale , à ne pas emboliser ! (Paraplégie)) !!Etiologie: * Idiopathique++ (Tabagisme, Pollution) * Infectieux (TBC) * Tumoral * EP * IC * Vascularites * Bronchiectasies (Bronchite Chonique) * Coagulation !!Quand demander un scanner *Le gros probleme: Pas la perte de sang (1verre c'est petit) mais surtout * Dans l'hemoptysie massive la répercussion respiratoire (dénaturation), *On finit souvent par faire le CT pour voir l'étiologie *Protocole: Injecté pour voir a.pulm, a,bronchiques et systémiques non bronchiques. * Donc 1CT avec 1aquisition t.arteriel et t,systémique (l'acquisition arrive quand le contraste entre dans le ROI de l'aorte) *Contrairement au CT abdo, on ne voit pas de saignement actif (évent. Une malformation AV) *Le scanner est utile pour la localisation, l'étiologie et l'anatomie et ses variantes !!Prise en Charge *Allo Pneumologue pour discuter Bronchoscopie (pas toujours nécessaire) *Allo Radiologue interventionnel pour emboliser en fonction de la clinique et de la quantité (>250), voir de la récidive. *L'arteriographie ne se fait que pour le traitement, pas pour le diagnostic *Abord fémoral, cathéter, puis microcatheter , envoyant des micro-billes de différentes tailles (entre 40 et 1200 microns) qui vont se loger définitivement dans le plexus
{{hemorragie_digestive_basse.jpg}}
!!Définition
*Une ''Hémorragie Digestive Basse'' est définie par un saignement situé //''en aval de l'angle de Treitz''//.
*les ''Causes'' sont
**''Diverticulose'' comme cause dominante, indolore, chez le patient âgé
**''Angiodysplasie'' cause fréquente chez la personne âgée
**''MICI'' (Crohn, RCUH)
**''Cancer Colorectal''
**''Polypose''
**''Colite ischémique''
**''Hémorroïdes'' et ''fissure anale''
!!Clinique
*''Hématochezie'': Emission de sang frais par l'anus, indique un saignement du colon descendant - rectum. Peut aussi être un saignement GI haut massif !
*''Sang occulte dans les selles''
*''Selles teintées de sang'' surtout si le saignement est au rectum
*//Melena// éventuellement si saignement du grêle, mais généralement c'est un saignement GI haut.
*Signes d'''Anémie'' (paleur, fatigue, dyspnée)
*''Hypovolémie''
!!Investigations
*''Coloscopie''
*''Labo'' avec ''FSC'' pour l'anémie. Si elle est //microcytaire hypochromie//, c'est une [[Anémie Ferriprive]] due à un saignement chronique. Faire aussi la ''coagulation'' et tester le ''sang occulte'' dans les selles.
!!Traitement
*''ABC'' et ''Reanimation'' avec Oxygène, Fluides, Poches de Sang
*''Coloscopie'' qui fera le diagnostic et le traitement souvent
*''Chirurgie'' dans certains cas
{{hemorragie_digestive_haute.jpg}}
!!Définition
*Une ''Hémorragie Digestive Haute'' est définie par un saignement situé //''en amont de l'angle de Treitz''//.
*les ''Causes'' sont
**''Ulcères'' gastriques et duodénaux comme cause dominante
**''Oesophagite de Reflux Erosive'' sur Hernie Hiatale ou RGO
**''Varices oesophagiennes'' sur HTP
**''Erosions Gastriques'' sur gastrite
**''Mallory-Weiss'' sur vomissements répétitifs
**''Cancer gastrique'' ou ''cancer oesophagien''
**''Fistule aorto-duodénale'' souvent post-chirurgie aortique
!!Clinique
*''Hématémese'': vomissement de sang frais, indique un saignement modéré à fort
*''Vomissements en marc de café'' suggère un saignement lent, avec[[ temps de digérer|vomissement_marc_de_cafe.jpg]].
*''Melena'' pour les selles noires. (Attention ça peut venir du //fer//, des //épinards// ou de //charbon//)
*Signes d'''Anémie'' (paleur, fatigue, dyspnée)
*''Hematochézie'': emission de sang frais par l'anus, si saignement GI Haut très ''Massif'' !
*''Hypovolémie''
!!Investigations
*''Endoscopie'' digestive supérieure pour trouver la source du saignement
*Une ''sonde gastrique'' pour aspirer le sang et confirmer l'origine supérieur est faisable
*''Labo'' avec ''FSC'' pour l'anémie. Si elle est //microcytaire hypochromie//, c'est une [[Anémie Ferriprive]] due à un saignement chronique. Faire aussi la ''coagulation''.
!!Traitement
*''ABC'' et ''Reanimation'' avec Oxygène, Fluides, Poches de Sang
*''Endoscopie'' qui fera le diagnostic et l'electrocoagulation
*''Chirurgie'' dans certains cas, avec ligatures
![ext[Hemorragie_3trim.pdf|./pdf/Hemorragie_3trim.pdf]] <!-- Texte caché pour la recherche Hémorragie du 3ème trimestre de la grossesse Dr M. Epiney 2014 Vignette 8, AMC Ce que l’étudiant doit relever Ce qui est discuté Âge Rhésus négatif Discuté à la fin Gestité,parité définition Âge gestationnel Calcul selon DR et US Définition prématurité Clinique Sang noir Douleurs abdominales Mouvements fœtaux Vitalité fœtale; depuis quand? 20 SA Antécédents 1 AVB à terme 1 Césarienne pour siège Fréquence 4% et définition du siège: complet-décomplété mode des fesses et des pieds VCE: quand et comment Ce que l’étudiant doit relever Ce qui est discuté Âge Rhésus négatif Discuté à la fin Gestité,parité définition Âge gestationnel Calcul selon DR et US Définition prématurité Clinique Sang noir Douleurs abdominales Mouvements fœtaux Vitalité fœtale; depuis quand? 20 SA Antécédents 1 AVB à terme 1 Césarienne pour siège Fréquence 4% et définition du siège: complet-décomplété mode des fesses et des pieds VCE: quand et comment Mode d’accouchement: –Critères de voie basse: BIP<96mm, PP 3500g, flexion tête –Césarienne Etude Term Breech Ce que l’étudiant doit relever Ce qui est discuté Macrosomie • Définition, courbe • Estimation clinique par palpation abdominale et estimation échographique • Risques: dystocie des épaules Grossesse actuelle Dépistage et diagnostic prénatal Amniocentèse Echographie Morphologique Placenta normalement inséré Indication? US datation quand ? 8-12 SA Localisation, nbre embryon, CRL,clarté nuchale (11 3/7-13 6/7), trophoblaste,annexes US morphologique: quand ? 20-22 SA Malformation, biométrie,contrôle placentaire,LA Status TA 12/8 pouls 80’ Douleurs abdominales généralisées Lombalgies CU et tonus augmenté TV: col long, fermé, sang Doptone 170’ Contracture = gravité DD des hémorragies du 3ème trimestre 2-4% des grossesses Décollement placenta normalement inséré 30% 1% des naissances Placenta praevia 20% 0.4-0.9% des naissances 50% Début du travail • Lésions génitales basses (col-vagin) Polypes-infections-carcinomes • Cause inconnue Rupture utérine Vasa prævia Rem: AVAC 1/ 3000 naissances Placenta praevia Décollement placentaire Facteurs de risque – Ant de placenta praevia (4-8%) – Ant de césarienne – Ant d’endométrite – Ant de curetage, IVG multiples – Malformation utérine – Grossesse gémellaire – Tabagisme – Multiparité – HTA (50%) – Ant de décollement placentaire (10%) – Traumatisme – Cocaïne, alcool, tabac – Cordon court – Surdistension utérine – Multiparité -->
{{hemorragie_epidurale_sousdurale_schema.jpg}}
!! Généralités
* Une ''Hémorragie Epidurale'' si situe ''entre la dure-mère et le crâne''.
*Elle provient des ''artères méningées moyennes'', qui sont souvent lésées lors de ''traumatisme avec fracture temporo-pariétale'' , typiquement chez des ''Jeunes adultes''
*La ''Clinique'' comprend des ''céphalées intenses" et ''une ''baisse de l'état de conscience'' avec possible ''intervalle lucide de quelques heures'', de terminant par un ''coma'' si on la laisse s'aggraver
*L'''investigation'' à faire est le ''CT sans contraste'', qui montrera:
**''Lentille bi-convexe'' d'aspect hyperdense
**''Ne franchit pas les sutures''
**''Peut franchir les sinus'' (p.ex le [[vertex|hemorragie_epidurale_vertex_ct.jpg]])
*Le ''traitement'' est soit la ''craniotomie'' avec évacuation (Si grand hématome) ou simplement une ''observation'' (si petit hématome)
{{hemorragie_epidurale_typique_ct.jpg}}
{{HSA_vs_hematome_parenchymateux.jpg}}
!! Généralités
*Les ''Hemorragies Sous-Arachnoïdiennes'', ou ''HSA'', sont une des deux grandes causes d'''[[AVC Hémorragique|AVC_classification_schema.jpg]]'', avec les hémorragies parenchymateuses. Ils consistent en la présence de ''sang dans l'espace sous-arachnoïdien''.
*Les ''Causes'' sont majoritairement:
**Majoritairement des ''Anévrysmes'' sacculaires situés surtout [[aux bifurcations |HSA_anevrysmes_localisation.jpg]]des artères, qui se rompent spontanément.
**Suite à un ''trauma'' crânien
**les ''Malformation artérioveineuse'' et autres malformations
*La ''Clinique'' est caracterisée par des ''céphalées en coup de tonnerre'' ("//la pire céphalée de ma vie//"), souvent associée à une ''perte de l'état de conscience''. Parfois la pathologie peut être précédée par des ''céphalées sentinelles'' dans les 3 semaines avant l'événement.
*Les ''Investigations'' comprennent:
*# Réalisation d'un ''CT non injecté'' pour détecter l'HSA
*# Si le CT est négatif (surtout si l'HSA date), on peut tenter une ''PL'' qui peut démontrer une Xanthochromie
*# Quand l'HSA est diagnostiquée, on fait un ''angio-CT'' pour ''trouver l'anévrysme'', majoritairement situé dans le cercle de Willis
* Le ''Traitement'' passe par la chirurgie avec ''coil'' de l'anévrysme
{{ HSA_ct_cta.jpg}}
{{hemorragie_epidurale_sousdurale_schema.jpg}}
!! Généralités
* Une ''hémorragie sous-durale'' correspond à la ''rupture d'une veine-pont'' (briding-veins), souvent causée par un ''trauma'' (p.ex le ''bébé secoué'' ou chez les ''jeunes'' avec une ''contusion'' associée)
*la ''Clinique'' correspond à des ''céphalées'', une ''baisse de l'état de conscience'' progressive, mais ''sans intervalle lucide'' contrairement à l'HED.
*L'''Investigation'' à faire rapidement est le ''CT sans contraste'', qui montrera:
**Une ''masse en croissant'' (concave),
**''Franchit les sutures''
**''Ne franchit pas les sinus''
**Si ''Hyper-aigu'', le sang peut être ''isodense''
**Si ''Aigu'': le sang est ''hyperdense''
**Si ''Sub-aigue'': le sang redevient ''isodense''
**Si ''Chronique'': la collection devient ''hypodense'', à noter qu'on peut avoir un re-saignement aigu sur hématome chronique, avec l'apparition d'un ''niveau'' entre les deux densités.
*Le ''Traitement'' sera une ''craniotomie'' avec décompression, ou une simple ''observation'' si l'hématome est assez petit.
{{hemorragie_sous_durale_ct.jpg}}
undefine
undefine
undefine
undefine
undefine
undefine
{{hemorroides.jpg}}
!!Généralités
*les ''Hémorroides'' sont des ''varices dilatés'' de l'anus et du rectum, qui peuvent se situer soit
** au niveau ''interne'' du rectum, en //dessus de la ligne pectinée//
** au niveau ''externe''. en ''dessous de la ligne pectinée''
*Les ''causes'' sont
**''constipation'' et ''poussées''
**''grossesse''
**''HTP''
**''Obesité''
**''Position assise prolongée'' (comme les conducteurs)
**''sexe anal''
*la ''Clinique'' comprend
**''saignement'' de sang rouge
**[[Prolapsus Rectal]]
**''gonflement douloureux'' seulement lorsque l'hémorroïde se ''//thrombose//''
*le ''Traitement'' passe par
*#''Ramolisseurs'' et ''Diète'' pour diminuer la pression de defecation
*#Si echec: ''chirurgie'' par hemorroidectomie ou ligature
*#les crèmes locales sont juste un traitement symptomatique.
undefine
![ext[hemosiderose.pdf|./pdf/hemosiderose.pdf]] <!-- Texte caché pour la recherche hémosidérose fer hémosiderose hemochromatose hémochromatose hemosidérose -->
undefine
undefine
{{hepatites_virales.jpg}}
!!Définition
*une ''Hépatite virale'' est une ''inflammation hépatique'' due aux différents virus de l'hépatite, HAV, HBV, HCV, HDV et HEV. On peut aussi trouver EBV et CMV comme cause d'hépatites virales chez les patients immunosupprimés.
*la ''Transmission'' varie suivant les virus
**''Fecal-Oral'': pour ''HAV'' et ''HEV'', d'ou leur prévalence dans les ''pays en voie de développement''
**''Par le sang'' (seringue, mère-enfant) et ''Sexuel'': pour ''HBV'' (l'HBV est plus ou moins une TORCH)
**''Par le sang'': surtout avec les seringues pour ''HCV'', rarement sexuel et mère-enfant
**en ''Co-infection HBV'': pour l'''HDV'' qui ne survit pas sans HBsAg
*la ''Chronicisation'' en Hépatite Chronique conrcerne:
**''HCV'' surtout
**''HBV''
**''HDV''
*les ''Hépatites chroniques'' (HCV, HBV, HDV) sont à risque de faire une ''cirrhose'' ainsi qu'un ''CHC''. Le plus gros risque est chez les HCV.
*Une ''Hepatite Aigue'' est définie comme durant ''<6 mois'' tandis qu'une ''Hépatite Chronique'' est définie comme durant ''>6mois''
!!Clinique
''Hepatite Aigue''
//large spectre clinique, de l'asymptomatique à l'''hépatite fulminante''//
*''Jaunisse'' (regarder les sclères)
*''Urines foncées''
*''Douleurs'' au QSD
*Nausées, Vomissements
*Fièvre, Malaise, Myalgies
*Hépatomégalie
''//Hépatite Fulminante//'' //(insuffisance hépatique aigue)//
*''Encéphalopathie Hépatique''
*''Syndrome Hépatorénal'' (vasodilatation splanchnique -> redirection du flux -> IR)
*''Diathèse hémorragique''
''Hépatite Chronique''
*''Asymptomatique''
*''Cirrhose'' et ses complications
**HTP et Varices Oesophagiennes
**Insuffisance Hépatique (Encéphalopathie Hépatique, Diathèse Hemorragique, Syndrome Hépatorenal)
**PBS
**Ascite
*''CHC''
!!Diagnostic
''Serologies et PCR''
|!HAV|''Anti-HAV'' (IgM pour aigue, IgG pour chronique)|
|!HBV|''HBs-Ag'': hépatite active|
|~|''Anti-HBs'': Immun vacciné ou exposé à l'hépatite|
|~|''Anti-HBc'': Immun exposé à l'hépatite|
|~|''//HBe-Ag//'': hépatite active avec séroconversion (mutation) présente|
|~|''//Anti-Hbe//'': signe de séroconversion (mutation inévitable à long terme)|
|~|''//ADN HBV//'': réplication active: utilisé pour la réponse au traitement|
|!HBV|''Anti-HBC'' |
|~|''ARN HBC'': réplication active|
|!HBD|''Anti-HBD'' |
''Enzymes Hépatiques''
*''ASAT''
*''ALAT''
!!Traitement
''HAV''
*''Vaccin''
*''Traitement Symptomatique''
''HBV''
*''Vaccin''
*''INF-alpha''
''HCV''
*''Pas de Vaccin''
*''INF-alpha'' et ''ribavirin'' (analogue guanosine)
*''Nouveaux traitements anti-viraux'' très chers (sofosbuvir et le siméprévir)
*''Transplantation Hépatique'' fréquente (dans les autres hépatites possible aussi)
''HDV''
*''Vaccin de HBV''
''HEV''
*''Pas de Vaccin''
*''Traitement Symptomatique''
undefine
{{hepatopathie_alcoolique.jpg}}
!!Définition
*l'''Hépatopathie alcoolique'' comprend un spectre de maladie:
**''Stéatose'' pure sans inflammation
**''Stéato-Hépatite'' pathologie comprenant la //''ASH''// et la //''NASH''// (Obesité, Diabète, Corticoïdes)
**''Cirrhose hépatique'' micronodulaire
!!Clinique
''Stéatose hépatique pure''
*''Asymptomatique'' le plus souvent
''Stéatohépatite''
*''Asymptomatique'' aux stades initiaux
*''fatigue''
*''perte pondérale''
*''subfébrile'' (37.5-38°C)
*nausées
*''Hépatomégalie'' souvent douloureuse, consistance elastique-dure
*''Splénomégalie'' souvent concomittante
*Parfois ''signes d'insuffisance hépatique'' (Encéphalopathie Hépatique, Diathèse Hemorragique, Syndrome Hépatorenal)
''Cirrhose''
*''Insuffisance hépatique'' (Encéphalopathie Hépatique, Diathèse Hemorragique, Syndrome Hépatorenal)
*''HTP'' avec ''varices oesophagienne''
*''Ictère''
**''Ascite''
**''PBS'' //(Péritonite Bactérienne Spontanée)//
!!Investigations
''Labo''
*''ALAT/ASAT'' augmentés //(destruction hépatique)//
*''PA'' augmentée //(cholestaste)//
*''GGT'' augmentée //(cholestase)//
*''Bilirubine'' augmentée //(insuffisance hépatique)//
*''INR'' augmenté et ''Facteur V'' diminué //(insuffisance hépatique)//
*''Albumine'' diminuée //(insuffisance hépatique)//
*''Thrombocytes'' diminués //(HTP / Effet de l'Alcool)//
*''CDT'' augmenté //(marqueur de consommation dl'Alcool)//
*''Macrocytose''
''Biopsie''
*''Pas nécessaire'' normalement
*''En cas de Doute'' ou de co-pathologies
*A faire en ''//trans-jugulaire//'' car diathèse hémorragique et ascite
!!Traitement
*''B1'' et ''Acide Folique'' en supplémentation
*''Corticothérapie'' si ''score de Maddrey >32'' (bien exclure les infections, dont les hépatites !)
*''Sevrage d'Alcool''
*''AVK en supplémentation'' si besoin
*Regime pauvre en protéine + Lactulose si Encéphalopathie Hepatique (les protéines font du NH3 et un transit ralenti augmente l'absorption de NH3 produit par les bactéries intestinales)
*Restriction Hydrique + Sodée si Ascite
{{score_maddrey.jpg}}
undefine
undefine
![ext[hernie_diaph.pdf|./pdf/hernie_diaph.pdf]]
<!-- Texte caché pour la recherche
Hernie DIaphragmatique hernie diaphragme
diaphragmatic hernia
-->
{{hernie_diaph.pdf}}
{{ hernie_discale_irm.jpg}}
!!Définition
*Il s’agit d’une ''protrusion du nucleus pulposus'', due à une déchirure de l’annulus fibrosus. C’est une pathologie ''fréquente''
*L’hernie peut être ''centrale, postérolatérale'' ou ''latérale''. Elle résulte en une ''compression de racines nerveuses'', ce qui en fait une radiculopathie. Elle est associée ou non à un ''déficit sensitivomoteur''.
*Il existe aussi des hernies discales cervicales.
!!Clinique
*Le patient présente des ''lombalgies basses'' accompagnées d’une ''irradiation douloureuse'' et parfois d’un ''déficit sensitivo-moteur'' associé.
*La zone touchée est souvent ''L4-L5'' ou ''L5-S1'', ce qui implique des lombosciatalgies (nerf L4: face antérieure de la cuisse, nerf L5: dos des pieds, nerf S1: plante des pieds)
*Le ''Lasègue'' (patient sur le dos, on lève sa jambe tendue) pour être positif doit déclencher des ''douleurs et l’irradiation''.
*Un déficit du ''Reflexe Achileen'' montre une atteinte classique ''S1''. Tandis qu’un déficit du ''Reflexe Rotulien'' montre une atteinte ''L4'' moins fréquente.
*Faire aussi marcher le patient et lui faire les tests de Schober et distance doigt-sol latéral pour la documentation.
*les ''Reds Flags'' amenant à la suspicion de ''Cancer/Infection, Fracture vertébrale'' ou ''Syndrome de la queue de cheval'' doivent être éliminés.
!!Red flags
//''Fracture vertébrale''//
*Anamnèse de Trauma
*70ans ou Corticoïdes (ostéoporose)
//''Syndrome de la Queue de cheval''//
*Anesthesie en selle
*Incontinence urinaire ou fécale
*Faiblesse des membres inférieurs
//
''Cancer'' ou ''Infection''//
*Immunosuppresion
*ATCD de cancers
*Perte de poids
*Trop Jeune (<20ans) ou trop vieux (>50)
*Consommation de drogues IV (spondylodiscite)
*Fièvre et Frissons
*Douleurs inflammatoires (nocturne)
!!Investigations
*On fera une ''IRM'' pour le ''diagnostic''. En séquence T2 on voit bien le disque noir faire protrusion.
*Un myélo-ct peut se faire si contre-indication à l'IRM
!!Traitement
''Traitement conservateur''
*A faire en premier, avec ''Antalgie simple + AINS'', voir des ''corticoïdes'' quelque jours, le tout associé à une ''physiothérapie''.
*A ceci on rajoute un traitement topique qui soulage beaucoup: l’infiltration ''radiculaire''.
*La majorité des patients décrivent une ''disparition des douleurs après quelques mois''.
''Traitement chirurgical''
*L’indication à ne pas attendre avant de faire la chirurgie est un ''déficit couplé à l’imagerie'' de type ''brutal'' ou ''progressif''
*Sinon la chirurgie est aussi indiquée après ''échec du traitement conservateur après 6mois''.
*La technique sera une fenestration interlaminaire avec séquestrectomie ±microdiscetomie
{{hernie_hiatale.jpg}}
!!Définition
*une ''Hernie Hiatale'' correspond à une ''herniation'' de la jonction gastro-oesophagienne et d'une partie de l'estomac au-delà du diaphragme.
*Elle entraine souvent un [[Reflux Gastro-Oesophagien]].
*Elle peut entrainer une ''oesophagite de reflux érosive'', avec un ''oesophage de barret'' puis un [[Cancer de l'Oesophage]].
*Le type //''"sliding hernia"''// correspond au ''Type 1'', c'est le type le plus courant, mais il existe [[4 types d'hernies hiatales|hernies_hiatales_types.jpg]]. Le //Type 2// est plus grave (//hémorragies, strangulations)// et demande la chirurgie.
!!Clinique
*''Asymptomatique'' le plus souvent
*''Pyrosis''
*''Douleur thoracique''
*''Dysphagie''
!!Diagnostic
*''Endoscopie'' qui montera l'[[hernie directement|hernie_hiatale_Endoscopie.jpg]].
*''TOGD'' //(transit oeso-gastro-duodenal)// baryté.
!!Traitement
''Type 1 (sliding hernia)''
*Anti-acides
*Petits Repas
*Lever la tête après les repas
''Type 2 ''
*Chirurgie, du au complications
{{hernie_hiatale_TOGD.jpg}}
![ext[hernies_inguinales.pdf|./pdf/hernies_inguinales.pdf]] <!-- Texte caché pour la recherche McVay (1948) Abaissement du tendon conjoint au ligament de Cooper avec incision de décharge. Dénudation du ligament de Cooper et des vaisseaux fémoraux. Tendon conjoint sur le Cooper (points séparés) Cooper sur gaine vasculaire Transverse à l’arcade Lichtenstein (1989) Mise en place d’un filet en avant du fascia transversalis Rives Mise en place d’un filet dans l’espace pré-péritonéal au-delà de la zone de faiblesse Cure laparoscopique Interposition d’un filet dans l’espace pro- péritonéal, venant cravater le cordon, après réduction de la hernie, directe ou indirecte Cure laparoscopique Cure laparoscopique Conclusion Objectif : Le moins possible de récidives et de douleurs post- opératoires …et pas forcément le plus cher -->
undefine
undefine
undefine
undefine
undefine
{{HSV.jpg}}
!!Définitions
*''HSV-1'' est plutôt associé aux lésions des lèvres
*''HSV-2'' est plutôt associé aux lésions génitales
*Mais les deux virus peuvent induire des lésions dans les deux zones. HSV-2 a augmenté en incidence ces temps.
*Le HSV se transmet par ''contact'' de lésions actives. Par exemple les baisers ou le contact sexuel.
*Après l'infection, l'HSV infecte l'épiderme et le derme, puis traverse par les nerfs jusqu'au ganglion de la racine'' nerveuse dorsale''.
*Il y réside dans une ''phase de latence'', puis peut se ''réactiver ''à n'importe quel moment
*La majorité des infections se font dans l'''enfance'', une fois adulte 80% de la population est atteinte
*l'''Herpes Néonatal'' fait partie des ''TORCH'' et peut être fatal pour la ''mère ''et le ''foetus''
!!Clinique
''HSV1''
*''Primo-infection asymptomatique'' généralement non remarquée. sinon: fièvre, malaise, lésions orales
*''Bouton de fièvre:'' vésicules regroupées sur fond erythémateux, doulureux, soignant en 2-6 semaines
''HSV-2''
*''Primo-infection symptomatique'' avec ''fièvre'', ''malaise'' et ''maux de tête''.
*''Vésicules génitales'' douloureuses avec parfois adénopathies
''HSV disseminé''
*Chez les patients ''immunosupprimés''
*''Encéphalite'', ''méningite''
*''Keratite'', ''choriorétinite''
*''Oesophagite'', ''pneumonite''
''HSV ophtalmologique''
*symptomes que les deux herpes peuvent faire
*''kératite''
*''Kérato-conjonctivite''
*''blépharite''
!!Investigations
*Le ''Diagnostic'' peut se faire uniquement par la ''clinique''
*le Tzanck ne se fait plus
*''culture HSV''
*''IF directe'' et ''Elisa''
!!Traitement
*''acyclovir'': traite surtout symptomatiquement
*foscarnet si résistances
*hospitalisation si disseminé, et acyclovir IV
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
![ext[dermato_HPV.pdf|./pdf/dermato_HPV.pdf]] <!-- Texte caché pour la recherche HPV - Spécificité pour le revêtement épithélial - Effet cytopathogène → koïlocytes - Oncogènes : 16-18, verrues : 6-11 - Dure 18mois en moyenne - Verrues vulgaires, filiformes, planes. Piqueté hémorragique après parage. - Myrmécies : paumes, plantes (verrues profondes, aux points d’appui) - Papillome oropharyngé - Condylomes acuminés - Condylomes génitaux (IST, HPV6-11 90%), peut s’étendre au périnée et anus. Malin : immunosupprimés ++, associé HIV - Papulomatose bowenoide (atypies épithélium) - Cancer du col (x7 si HIV+) - Diagnostic clinique - Détection par acide acétique (surtout gynéco) - Test par biologie moléculaire (détection acides nucléiques viraux) - Bx : si suspicion de lésions précancéreuses / cancer (→ formes muqueuses : oropharynx, génital, anal) ou immuniosupprimés (carcinomes cutanés aussi possibles) - Acide acétique 30%, ac salycilique 10-30%, 5FU (adulte) - Condylomes génitaux : podophyllotoxine, imiquimod - Azote liquide, électrocoagulation, chirurgie, laser - Verrues planes : favorisées par soleil et peau sèche - Prévention : préservatif pendant phase de ttt du conjoint, vaccins (gardasil 6-11-16-18 ; cervarix 16-18 – 3 injections sur 6mois), qui ont une immunité croisée donc protègent plus que les 4 (indic : filles 11-12ans avant 1 er RS) GEN CLIN INV TTT CAVE -->
undefine
undefine
undefine
undefine
undefine
!! Généralités
*L'''Hypertension intracranienne'' correspond à une ''PIC >20mmhg pendant plus de 5min.''
*Elle est composée d'une ''triade de Cushing''
*#''HTA''
*#''Bradycardie''
*#''Bradypnée''
On retrouve aussi une ''aggravation le matin'' et des ''nausées, vomissements, tinnitus, flou visuel, odème papillaire''.
*Il existe de ''multiples causes:''
**''Trauma cranien'' (avec ou sans hémorragie cérébrale)
**''Néoplasique'' (par expansion tumorale, ou odème, ou saignements)
**''Infectieuse'' (méningite, encéphalite, abcès)
**''AVC'' (ischémique ou hémorragique)
**''Crise d'HTA''
**''Hydrocéphalie''
**''HTIC idiopathique'' chez le jeune femme obèse, avec un CT normal, Mais on voit un oedème papillaire (=pseudotumor cerebri)
*Ne ''JAMAIS FAIRE DE PL'' en cas d'HTIC car risque d'''[[engagement|herniations_schema.jpg]]''.
*le ''Traitement '' est divers et passe par:
**Empecher la toux (sédation)
**Remplissage volémie
**Catécholamines
**Hypocapnie
**Corticoides
**Mannitol
{{htic_schema.jpg}}
undefine
undefine
![ext[hydrocephalie.pdf|./pdf/hydrocephalie.pdf]] <!-- Texte caché pour la recherche Hydrocephalus In hydrocephalus, there is obstruction to the flow of cerebrospinal fluid, leading to dilatation of the ven tricular system proximal to the site of obstruction. The obstruction may be within the ventricular system or aqueduct (non communicating or obstructive hydro cephalus), or at the arachnoid villi, the site of absorp tion of CSF (communicating hydrocephalus) (Box 27.4). - 487 1 2 3 Neurological disorders Hydrocephalus Burr hole 27 Reservoir Valve Peritoneal catheter (commonest) Right atrial catheter (uncommon) Figure 27.16 Grossly enlarged head and downward deviation of the eyes (setting sun sign) from untreated hydrocephalus. Extra length to allow for growth - Figure 27.17 Ventriculoperitoneal shunt for drainage of symptomatic hydrocephalus. A sufficient length of shunt tubing is left in the peritoneal cavity to allow for the child’s growth. Right atrial catheters require revision with growth. Box 27.4 Causes of hydrocephalus Non-communicating (obstruction in the ventricular system) Congenital malformation • Aqueduct stenosis • Atresia of the outflow foramina of the fourth ventricle (Dandy–Walker malformation) • Chiari malformation Posterior fossa neoplasm or vascular malformation Intraventricular haemorrhage in preterm infant Communicating (failure to reabsorb CSF) Subarachnoid haemorrhage Meningitis, e.g. pneumococcal, tuberculous Some can cause both non-communicating and communicating hydrocephalus. Clinical features In infants with hydrocephalus, as their skull sutures have not fused, the head circumference may be dispro portionately large or show an excessive rate of growth. The skull sutures separate, the anterior fontanelle bulges and the scalp veins become distended. An advanced sign is fixed downward gaze or sun setting of the eyes (Fig. 27.16). Older children will develop signs and symptoms of raised intracranial pressure. Hydrocephalus may be diagnosed on antenatal ultrasound screening or in preterm infants on routine cranial ultrasound scanning. For suspected hydroceph alus, initial assessment is with cranial ultrasound (in infants) or imaging with CT or MRI. Head circumference should be monitored over time on centile charts. Treatment is required for symptomatic relief of raised intracranial pressure and to minimise the risk of neurological damage. The mainstay is the insertion of a ventriculoperitoneal shunt (Fig. 27.17), but endo scopic treatment to create a ventriculostomy can now be performed. Shunts can malfunction due to blockage or infection (usually with coagulase negative staphylo cocci). They then need replacing or revising. Overdrain age of fluid can cause low pressure headaches but the insertion of regulatory valves can help avoid this. - - Summary Hydrocephalus • In infants, presents with excessive increase in head circumference, separation of skull sutures, bulging of the anterior fontanelle, distension of scalp veins and sun setting of the eyes • Older children present with raised intracranial pressure • Treatment is usually with a ventriculo peritoneal shunt. -->
{{ hydrocephalie_pression_normale_ct_irm.jpg}}
!! Généralités
*l'''hydrocéphalie à pression normale'' , ou hydrocéphalie communicante, correspond à un ''elargissement des ventricules'' radiologiquement démontré, mais ''sans augmentation de pression du LCR''.
*Elle est caractérisée par une ''triade'':
*#''troubles de la marche'' (petits pas, élargissement du polygone, démarche magnétique)
*#''incontinence urinaire''
*#''syndrome démentiel''
*Les ''causes'' peuvent être idiopathiques lors d'''HPN Primaire''. Sinon l'''HPN Secondaire'' peut être due à la ''méningite'' ou l'''HSA'' ou une ''néoplasie'', par altération de la résorption de LCR.
*Le ''diagnostic'' est posé par l'''IRM'', bien qu'on la trouve aussi au''CT''. On observe l'élargissement ventriculaire (p.ex la corne frontale), disproportionné par rapport à l'atrophie cérébrale.
*la ''PL'' permet surtout de ''tester la réponse chirurgicale'', en ''enlevant 30-50ml'' de LCR et en testant la réponse sur les symptômes.
*Le ''traitement'' de choix est la dérivation liquidienne par mise en place d'un ''shunt ventriculo-péritonéal''
{{hydrocephalie_pression_normale_shunt_ventriculoperitoneal.jpg}}
undefine
undefine
undefine
!! Définition
*L'''Hyperaldosteronisme primaire'', ou ''syndrome de Conn'' correspond à une ''surproduction d'aldostérone'' par les glandes surrénales, ''indépendente du RAA''.
*L'Aldostérone en excès entraine une ''rétention de Na+'' et une ''Excrétion de K+'' dans la cellule principalle du tube collecteur du rein, ainsi qu'une ''sécretion d'H+ '' par les cellules intercalaires alpha du tube collecteur, avec comme effet:
** Une ''rétention hydrosodée'' avec ''hypervolémie'' et ''hypertension secondaire''
** Une ''hypokalémie''
**Une'' Alcalose métabolique''
*Un ''patient avec hypertension et hypokaliémie'' doit faire suspecter un syndrome de Conn.
{{Aldosterone_tube_collecteur.jpg}}
!! Etiologies
* Un ''Adénome Surrénalien'' est la cause principal
* Une ''Hyperplasie des Surrénales'', souvent bilatéral
* Un ''Carcinome Surrénalien'', rare
!! Clinique
*Le patient présentera surtout
**Une ''Faiblesse'' (hypokalémie)
**Une ''polyurie''
**Une ''Hypertension''
!! Investigations
*au ''Labo'' il faut doser
**l'''Aldostérone'' qui sera ''augmentée''
** La ''Kaliémie'' qui sera ''diminuée''
**la ''Rénine'' qui sera ''diminuée'' (donc la production élevée d'aldostérone ne vient pas du RAA, qui est une cause d'hyperaldostéronisme secondaire)
**le ''Rapport Aldostérone/Rénine'' qui est ''élevé''
* le ''diagnostic'' est posé par un ''test au Captopril'' (un IECA) qui augmente la spécificité du test:
*#mesurer le rapport Aldostérone/Rénine au temps 0
*#mesurer le rapport Aldostérone/Rénine 2h après la prise de Captopril .
** Le ''test est positif si Rapport >80'' après 2h.
*Faire aussi une ''imagerie des surrénales'' à la recherche de l'Adénome Surrénalien.
!! Traitement
*On utilise la ''spironolactone'' (antagoniste de l'aldostérone) et l'''Enalapril'' (IECA) pour inhiber l'effet de l'aldostérone.
*face à ''Adénome Surrénalien'', on traite par une ''excision chirurgicale''
!! Définition
*Le ''syndrome de Cushing'' (ou hypercoticisme) correspond à un ''excès de cortisol'' de manière chronique
*la ''maladie de Cushing'' est une des diverses causes de syndrome de Cushing et correspond à un ''adénome hypophysaire'' sécrétant de l'ACTH.
* la ''source de cortisol'' peut être soit ''endogène'' soit ''exogène''. Par ailleurs, la production élevée de cortisol peut être ''ACTH-dépendant'' (trop d'ATCH) ou ''ACTH-indépendant'' (trop de cortisol):
{{cortisol_secretion_schema.jpg}}
!! Etiologies
*''ACTH-dépendant''
**''Tumeur Hypophysaire'' (maladie de Cushing), fréquent
**''Autre tumeur'' (SLCC, Carcinome bronchique, Carcinoïde, etc.)
*''ACTH-indépendant''
**''Corticothérapie chronique'', fréquent
**''Tumeur surrénalienne primaire'' (adénome ou carcinome)
!! Clinique
*Le patient présentera des [[changement d'apparence|cushing_clinique.jpg]], avec:
** ''obesité centrale'' (lipodystrophie fascio-tronculaire)
** ''hirsutisme''
**''visage lunaire'' (gonflé et rouge)
** ''vergetures''
** ''peau fine et fraglie''
**''Bleus''
**''Acanthosis Nigricans''
**''Acné'' (si ACTH-dépendant)
**''Hyperpigmentation'' (si-ACTH dépendant)
*De plus, le patient présentera une ''fatigue'', une ''faiblesse'' (fonte des muscles), des ''insomines'', une ''oligo-aménorrhée'', de l'''Hypertension secondaire'' , du ''diabète'' (cortisol = hyperglycémiant), des ''Infections'', des ''troubles de l'humeur'' et de l'''Ostéoporose''.
!! Investigations
* Commencer par ''chercher une cause médicamenteuse''
*Il existe ''trois tests de dépistage'' possibles:
*# ''Cortisol urinaire sur 24''
*# ''Cortisol salivaire à minuit'' (là ou le cortisol est normalement le plus bas)
*# ''Test de suppression à la Dexamethasone'': On donne 1mg de Dexamethasone le soir et on mesure le cortisol sérique le matin. L'axe est sensé s'inhiber chez le patient normal, mais le cortisol reste élevé chez le patient atteint de Cushing
* Une fois dépister, faire un ''dosage de l'ACTH'' pour voir si on est dans l'ACTH-dépendant ou non.
* En fonction du diagnostic suspecté, on peut faire une imagerie de la glande pituitaire ou des surrénales. Une tumeur pituitaire à ACTH peut aussi être testée avec un test au CRH, contrairement aux autres tumeurs produisant de l'ACTH.
{{cushing_algorithme.jpg}}
!! Traitement
* ''STOP la corticothérapie ''si c'était la cause
*''Chirurgie'' pour les adénomes et autres tumeurs sécrétantes
* Le mitotane et ketoconazole peuvent diminuer le cortisol
!!Clinique HyperKalemie
*Faiblesse musculalire
*Troubles de la conduction
*Modifications ECG: (Applatissement onde P, QRS elargit, onde T agrandie)
{{hyperK.jpg}}
!!Causes d'Hyperkaliémie
//Diminution d'elimination//
*IR. (Perte de filtration, on leur dit de pas manger trop de K+)
*Diuretiques d'Epargne potassique (amiloride, spironolactone)
*Hypoaldosteronisme
//Apport massif//
*Destruction cellulaire
**Rhabdomyolyse, Syndrome des loges
**Chimiothérapie (Syndrome de Lyse)
**CRUSH syndromes
**Hemolyses
//Redistribution (extra <-> intra)//
*Acidose (Diabète aussi)
*B-Bloquante (les B-Agonistes font entrer en intra)
*Digoxine (Bloque Na/K atpase)
!!Traitement hyperkalémie
//en aigu//
*''Calcium: pour stabliser la membrane'' en priorité
* B-agoniste, Insuline (Shift: baisse la Kaliémie en urgence, ne régle pas le problème)
//plus tranquillement//
*Diuretiques: pour eliminer le K+
*Chelateurs: Resine echangeuse d'Ion (Resonium)
!!Regulation du potasssium
*Doit se retrouver dans les cellules (pool de K+).
*Les reins en filtrent et en reabsorbe beaucoup, ce qui resulte en de legere pertes
*L'excretion est dépendante de la filtration (GFR) ainsi que d'une sécretion tubulaire
!!Physiologie electrolytes
*cellules riche en K, plasma riche en Na, avec des flux d'eaux libres (grace qux AQP) avec un équilibrage d'osmolarité par des mouvements d'eaux
*Le gradient de Na est le facteur le plus important d'équilibrage de la volémie et du volume cellulaire, allant de min. 100 à max 180, contrairement au K avec min. 1,5 et max 9
*L'apport et la perte d'eau est le déterminant principal de la concentration en sodium
*la Tonicité décrit l'effet osmolaire du plasma sur le volume cellulaire. Si on a une hyperosmolarité des deux côtés, il n'y aura pas de mouvement, donc pas de changement de tonicité.
**Hypotonicité = odème cellulaire
**Hypertonicité = perte de volume cellulaire*Une Hypernatrémie fait toujours une hypertonicité
*Une Hyponatrémie ne fait pas toujours une hypotonicité (si on a une hypoNatrémie combiné avec une hyperglycémie ou mannitol, l'osmolarité totale peut etre hyperosmolaire, ou encore si on a une pseudohyponatrémie quand il y a hyperprotéinémie ou hyperlipidémie majeure)
*L'eau libre (ou juste ''eau'') se repartit a 60% dans les cellules, dans 32% du plasma et dans 8% intravasculaire
*donner juste de l'eau est donc peu efficace pour remplir le plasma, mais si on donne avec NaCl 0,9%, il y aura deja ca en moins dans le compartiment cellulaire
*La cellule doit maintenair son volume ainsi que son gradient d'electrolyte. Un changement de Na ou K induit un stress osomlaire (gonfler, shrinker) ainsi que des troubles d'excitabilité (hypo ou hyper)
!!Clinique des Hypo ou Hyper *ECA, Chute, Malaise General *puis Cephalées, somnolence *puis ROT vifs, convulsions, coma, decès !!Causes d'Hypernatrémie //Pertes d'eau libre rénale// *Diabète insipide renal (lithium p.ex) ou central *Diuretiques de l'anse *Diurete osmotique (diabète hyperglycémique, hypercalcémie) //Perte d'eau libre extrarénale// *Deshydratation (boit pas assez) *Vomissements *Diarrhées *Sudations profuses !!Traitement *correction de la cause sous-jacente (administration d'ADP si diabète insipide) *perfusion liquide hypotonique (G5, Glucosalin) *test de la soif si etiologie incomprise (plus boire, doser le na sérique et urinaire fréquemment, quand le sodium devient hypernatrémique les urines se concentre. Si il n'y a pas de sécrétion d'ADH ce n'est pas le cas, un test avec une perfusion d'ADH montrera une correction sauf si resistance periphérique a l'ADH) !!Physiologie electrolytes *cellules riche en K, plasma riche en Na, avec des flux d'eaux libres (grace qux AQP) avec un équilibrage d'osmolarité par des mouvements d'eaux *Le gradient de Na est le facteur le plus important d'équilibrage de la volémie et du volume cellulaire, allant de min. 100 à max 180, contrairement au K avec min. 1,5 et max 9 *L'apport et la perte d'eau est le déterminant principal de la concentration en sodium *la Tonicité décrit l'effet osmolaire du plasma sur le volume cellulaire. Si on a une hyperosmolarité des deux côtés, il n'y aura pas de mouvement, donc pas de changement de tonicité. **Hypotonicité = odème cellulaire **Hypertonicité = perte de volume cellulaire*Une Hypernatrémie fait toujours une hypertonicité *Une Hyponatrémie ne fait pas toujours une hypotonicité (si on a une hypoNatrémie combiné avec une hyperglycémie ou mannitol, l'osmolarité totale peut etre hyperosmolaire, ou encore si on a une pseudohyponatrémie quand il y a hyperprotéinémie ou hyperlipidémie majeure) *L'eau libre (ou juste ''eau'') se repartit a 60% dans les cellules, dans 32% du plasma et dans 8% intravasculaire *donner juste de l'eau est donc peu efficace pour remplir le plasma, mais si on donne avec NaCl 0,9%, il y aura deja ca en moins dans le compartiment cellulaire *La cellule doit maintenair son volume ainsi que son gradient d'electrolyte. Un changement de Na ou K induit un stress osomlaire (gonfler, shrinker) ainsi que des troubles d'excitabilité (hypo ou hyper) !!Regulation Na *Le NaCl 0,9% a une charge Osmolaire de 300 (legerement hyperosomlaire) *Osmorecepteurs dans l'hypothalamus captant la tonicité du plasma. Si la tonicité change il y aura deux reponses: **Soif: regule l'apport d'eau libre (diminue avec l'âge) **Vasopressine: régule l'elimination de l'eau libre (pas d'ADH si diabète insipide) *Hyponatrémie: suppression de la soif et stop secretion ADH (urines se diluent) *Hypernatrémie: induction de soif et induction d'ADH (urines se concentrent) *Pour dépasser la capacité du rein, la potomanie doit être de plus de 1L par heure avant de diminuer la natrémie, dans les conditions normales
!! Définition
*la ''PTH'' est une hormone sécrétée par les glandes parathyroïdes en ''réponse à une baisse de calcémie''. Son action est d'''augemnter la calcémie'' tout en limitant la formation de complexes de Calcium-Phosphate. Elle comprend:
**''Os'': Libération de Ca++ et PO--
**''Digestif'': Augmentation indirecte de l'absorption de Ca++ (stimulation de la synthèse de Vit.D rénale)
**''Rénal'': réabsorption de Ca++ et excrétion de PO--
*L'''Hyperparathyroïdie'' est classée en trois pathologies:
**''Hyperparathyroïdie primaire'', la plus fréquente, liée à un ''adénome'' (85%) , un carcinome (rare) ou une hyperplasie (15%)
**''Hyperparathyroïdie secondaire'', due à une ''hypocalcémie'' par ''insuffisance rénale'' ou ''manque de vitamine D''
**''Hyperparathyroïdie tertiaire'', due à un ''Insuffisance Rénale Chronique'' ayant induit une ''Hyperplasie peristante'' des glandes
{{hyperpatathyroidie_schema.jpg}}
!! Clinique
*La clinique est décrite par la phrase ''"//Stones, Bones, Abdominal Groans and Psychic moans//"'', qui décrivent:
*//Stones//
**''Néphrolithiases''
**''Néphrocalcinose''
*//Bones//
**''Douleurs osseuses''
**''Fractures pathologiques'', dont le risque est augmenté par des Tumeurs d'ostéoclastes ([[Brown Tumor|hyperparathyroidie_brown_Tumor_rx.jpg]])
**
*//Abdominal Groans//
**''Ulcères peptiques''
**''Constipation''
**''Pancréatite''
*//Psychic Moans//
**''Fatigue''
**''Depression''
**''Lethargie''
* A cela il faut encore rajouter une ''polyurie'' et une ''polydipsie''
!! Investigations
*Au ''Labo'' on trouve:
|!|!HPT primaire|!HPT secondaire|!HPT tertiaire|
|!Calcémie| ↑ | ↓ | ↑ |
|!Phosphatémie| ↓ | ↑ | ↓ |
|!Calciurie| ↑ | | |
|!Phosphaturie| ↑ | ↓ | ↓ |
|!PTH| ↑ | ↑ | ↑ |
!! Traitement
''Hyperparathyroïdie primaire''
*Le traitement de choix est la ''Chirurgie'' avec ablation de la parathyroïde.
*Un patient asymptomatique peut éviter la chirurgie, avec encouragement à boire beaucoup.
''Hyperparathyroïdie secondaire''
*Traiter la maladie sous-jacente
*donner de la Vit.D
''Hyperparathyroïdie Tertiaire''
*On donne d'abord le Cincalcet (agent mimétique du Ca++ qui dimunue la PTH)
* Si hors de contrôle on peut faire une ablation chirurgicale
{{adenome_pth_sestamibi.jpg}}
!!Hyperparathyroïdie
*normalement on a 4 glandes paratyhroïdes, situées à la surface postérolatérale de la thyroïde. Elles sont difficiles à visualiser en imagerie
*Les'' adénomes ''de >1cm sont visibles à l'US.
*On en trouve dans 85% des hyperparathyroïdies. 12% sont des hyperplasies et 3% des carcinomes
*80% des adénomes parathyroïdiens sont au niveau de la thyroïdes, mais il peut en avoir des [[ectopiques |parathyroide_ectopique.jpg]]au niveau médiastinal, près du thymus, de l'oesophage ou de la carotide
*Beaucoup de chirurgiens demandent un US couplé à une scintigraphie avnat l'exploration chirurgicale. Ils peuvent même retrouver les adénomes avec une sonde gamma.
!!Examen
*le ''Tc99m-Sestamibi'' est utilisé. Il va aller se localiser dans les mitochondries des tissus parathyroïdiens ainsi que de la thyroïde.
*Un [[scan normal |normal_sestamibi_pth.jpg]]montrera surtout la thyroïde, avec une activité qui diminuera avec le temps. On ne verra pas de parathyroïdes.
*les ''adenomes parathyroïdiens'' sont généralement ''plus intenses'' que la thyroïde dans des phases précoces, et ''diminuent moins'' dans les phases tardives
*En injectant de l'ion ''Tc99m-Pertechnetate'' (TcO4-), on le verra se fixer QUE sur la thyroïde, ce qui permet de faire des images de soustraction ou de voir un void au niveau de l'adénome parathyroïdien.
*Attention le sestamibi peut aussi se concentrer et persister dans certains cancers thyroïdiens, créant des faux positifs
!!Exemple
<$button popup="$:/11.09.16_mibi_normal.jpg" >
[img width=64 [images/11.09.16_mibi_normal.jpg]]
</$button><$reveal type="popup" state="$:/11.09.16_mibi_normal.jpg"><div class='tc-tiddler-frame'>
{{11.09.16_mibi_normal.jpg}}
</div>
</$reveal>11.09.2016: MIBI normal
<$button popup="$:/11.08.2016_adenome_PTH.jpg" >
[img width=64 [images/11.08.2016_adenome_PTH.jpg]]
</$button><$reveal type="popup" state="$:/11.08.2016_adenome_PTH.jpg"><div class='tc-tiddler-frame'>
{{11.08.2016_adenome_PTH.jpg}}
Structure nodulaire de 7x10x14 mm fixant le MIBI, suspect pour la présence d'un adénome parathyroïdien inférieur gauche.
</div>
</$reveal>
11.08.2016: Adénome Inf.G
undefine
undefine
![ext[hyperplasie_cong_surrenal.pdf|./pdf/hyperplasie_cong_surrenal.pdf]] <!-- Texte caché pour la recherche CAh surrenal -->
!!Définition *Prolifération des glandes de l'endomètre, souvent ''femme de >40ans'' *Fait souvent des ''ménorragies'' *Est a risque de ''cancer de l'endomètre'' *Traitement d'abord par ''progesterone'', mais s'il saigne trop ''curettage'' *peut ''récidiver'' après curetage
![ext[hypetrophie_prostate.pdf|./pdf/hypetrophie_prostate.pdf]] <!-- Texte caché pour la recherche Definition • hyperplasia of the stroma and epithelium in the periurethral transition zone History and Physical • include current/past health, surgeries, trauma, current and OTC meds • specific urinary symptoms • physical exam must include DRE for size, symmetry, nodularity, and texture of prostate (prostate is symmetrically enlarged, smooth, and rubbery in BPH) Investigations • urinalysis to exclude UTI and for microscopic hematuria (common sign) • serum PSA: protein produced by prostatic tissue values <4.0 ng/mL: normal, but must take into account patient’s age and velocity of PSA increase 4-10 ng/mL: consider measuring free/total PSA >10 ng/mL: high likelihood of prostate pathology PSA testing is inappropriate in men with a life expectancy less than 10 yr or patients with prostatitis, UTI Name Body/Cap Colour β 2 -Agonists Salbutamol – Ventolin ® Salmeterol – Serevent ® Terbutaline – Bricanyl ® ICS Fluticasone – Flovent ® Budesonide – Pulmicort Combined Long-Acting β Fluticasone/Salmeterol – Advair ® Budesonide/Formoterol – Symbicort ® Ipratropium/Albuterol – Combivent ® ® light blue/navy teal/light teal blue/white orange/peach white/brown 2 -Agonist + ICS purple discus red/white clear/orange Anticholinergics Ipratropium – Atrovent Tiotropium – Spiriva ® ® clear/green white/turquoise More About Inhalers • Aerosols (puffers=MDI, MDI + spacer) MDIs should be used with spacers to: • Reduce side effects • Improve amount inhaled • Increase efficiency of use • Dry Powder Inhalers (discus, turbuhaler, and diskhaler) require deep and fast breathing (may not be ideal for children) • Nebulizers can be used to convert liquid medications into a fine mist: recommended for use if contraindications to MDIs Differential Diagnosis of Wheezing • Allergies, anaphylaxis • Asthma, reactive airway disease • GERD • Infections (bronchitis, pneumonia) • Obstructive Sleep Apnea • COPD • Less common: congestive heart disease, foreign body, malignancy, cystic fibrosis, vocal cord dysfunction When prescribing salbutamol, watch out for signs of hypokalemia: lethargy, irritability, paresthesias, myalgias, weakness, palpitations, N/V, polyuria Self-Management Asthma and COPD Education and Written Action Plan • Education is a key component in management of asthma and COPD • Guided self-management combining education, regular medical review, self-assessment, and written action plan have been shown to reduce hospitalizations, ER visits, and missed days at work or school. • Sample action plans available online: http://www.respiratoryguidelines.ca FM18 Family Medicine Common Presenting Problems Toronto Notes 2016 increased PSA in a younger man is more often due to cancer than other causes abnormal DRE or PSA should trigger further assessment discuss test with men at increased risk of prostate cancer (FHx, African ancestry) or who are concerned about development of prostate cancer decision to test PSA in an asymptomatic man should involve discussion about the risks and possible benefits • other tests Cr, BUN post-void residual volume by ultrasound urodynamic studies, renal ultrasound patient voiding diary • tests NOT recommended as part of routine initial evaluation include: cystoscopy cytology prostate ultrasound or biopsy IVP urodynamic studies Table 11. Symptoms and Complications of BPH Obstructive Symptoms Irritative Symptoms Late Complications Differential Diagnosis Hesitancy (difficulty starting urine flow) Diminution in size and force of urinary stream Stream interruption (double voiding) Urinary retention (bladder does not feel completely empty) Post-void dribbling Overflow incontinence Nocturia Urgency Frequency Nocturia Urge incontinence Dysuria Hydronephrosis Loss of renal concentrating ability Systemic acidosis Renal failure • Prostate cancer • Urethral obstruction • Bladder neck obstruction • Neurogenic bladder • Overactive bladder • Cystitis • Prostatitis Management • referral to urologist if moderate/severe symptoms • conservative: for patients with mild symptoms or moderate/severe symptoms considered by the patient to be non-bothersome fluid restriction (avoid alcohol and caffeine) avoidance/monitoring of certain medications (e.g. antihistamines, diuretics, antidepressants, decongestants) pelvic floor/Kegel exercises bladder retraining (scheduled voiding) • pharmacological: for moderate/severe symptoms _-receptor antagonists (e.g. terazosin [Hytrin®], doxazosin [Cardura®], tamsulosin [Flomax®], alfuzosin [Xatral®]) relaxation of smooth muscle around the prostate and bladder neck 5-_ reductase inhibitor (e.g. finasteride [Proscar®]) only for patients with demonstrated prostatic enlargement due to BPH inhibits enzyme responsible for conversion of testosterone into dihydrotestosterone (DHT) thus reducing growth of prostate phytotherapy (e.g. saw palmetto berry extract, Pygeum africanum) more studies required before this can be recommended as standard therapy considered safe • surgical TURP (transurethral resection of the prostate), TUIP (transurethral incision of the prostate, for prostates <30 g) absolute indications: failed medical therapy, intractable urinary retention, benign prostatic obstruction leading to renal insufficiency complications: impotence, incontinence, ejaculatory difficulties (retrograde ejaculation), decreased libido -->
undefine
{{HTP.jpg}}
!!Définition
*l'''HTP'' ou //Hypertension Portale// est définie par un ''Gradient Porto-Cave > 5mmhg''
*les ''Causes'' sont:
**''Cirrhose''
**''Hépatopathie alcoolique''
**''Thrombose porte''
**''IC Droite chronique''
**''Budd-Chiari''
**Sarcoïdose
**Péricardite Constrictive
!!Clinique
*''Varices Gastro-Oesophagiennes''
*''Splénomégalie''
*''Ascite''
*''Hémorroïdes''
**''Encéphalopathie Hépatique''
**''Thrombocytopénie''
!!Traitement
*''B-Bloqueurs'' pour les varices
*''Shunts'' comme le TIPS
{{stent_hepatique.jpg}}
!!Définition
*L'''Hypertension arterielle'' est présente à 25% dans la population adulte et ''augmente avec l'âge'', atteignant jusqu'à 70% des >70 ans.
*Elle est définit par une ''tension à 140/90 mmhg'' minimum.
*Le ''dépistage de l'HTA'' devrait se faire au moins ''chaque 2 ans'' chez l'adulte.
*L'//HTA blouse blanche// est celle qui est présente seulement au cabinet, tandis que l'//HTA masquée// est celle présente seulement hors du cabinet.
*La ''MAPA'' ou //Mesure Ambulatoire de la Pression Arterielle// permet de mesurer sur 24-48 h la pression du patient toutes les 15min. Elle est plus précise que les mesures cliniques. Elle doit se faire si:
**Effet blouse blanche
**Suspicion d'HTA secondaire
**HTA très variable
**Suspicion d'Hypotensions chez les patients sous traitement anti-hypertenseur
*La ''Classification'' de l'HTA se définit ainsi:
|!Classe|!Tension|
|''Optimale''|<120/80 mmhg|
|''Normale''|120/80 mmhg|
|''Normale haute''|130/85 mmhg|
|''Stade I (Légère)''|140/90 mmhg|
|''Stade II (Modérée)''|160/100 mmhg|
|''Stade III (Sévère)''|180/110 mmhg|
!!Clinique
*l'HTA est surtout une ''Maladie silencieuse''. L'''Atteinte d'organes'' concerne surtout:
**Le ''Cerveau'' avec les AVC
**Le ''Coeur'' avec la maladie coronarienne et l'IC
**Les ''Reins'' avec l'insuffisance rénale
**Les ''Artères'' avec l'IAMI, AAA et Dissection Aortique
**les ''Yeux'' avec la rétinopahtie hypertensive
*Les ''Céphalées'' sont une des manifestations les plus fréquentes de l'HTA.
!!Traitement
*Le ''Traitement'' dépend non seulement de la valeur de tension mais aussi de la présence d'autres ''comorbidités'' chez le patient tels que les ''Atteintes d'organes'', le ''Diabète'' ou la présence d'autres ''FRVC''.
*Les ''Mesures d'Hygiène-Diététique'' sont à appliquer dans tous les cas. Elles comprennent
**''Restriction sodée''
**''Perte de poids''
**''Exercice physique''
**La ''Diminution de l'alcool''
**l'''Arrêt du Tabac''
*Les médicaments ''Anti-Hypertenseurs'' sont divers:
**''IECA'' et ''Antagoniste de l'Angiotensine II''
**''Anticalciques''
**''Diurétiques''
**les B-Bloquants sont un traitement de 2nd choix et sont à éviter ors d'Asthme ou de COPD.
{{anti-hypertenseurs.jpg}}
|!|!HTA légère (140/90 mmhg)|!HTA modérée à sévère (>160/100 mmhg)|
|!Pas de comorbidités|Monothérapie faible dose|Monothérapie ou Polymédication|
|!Comorbiditiés|Monothérapie ou Polymédication|Polymédication|
!!Anti-HTA préférentiel
*''Coronaropathie'': B-Bloquant
*''Insuffisance cardique'': IEC
*''Asthme / COPD'': PAS de B-Bloquant
*''Diabète'': IEC
{{hypertension_pulmonaire_ct.jpg}}
!!Généralités
*L'''Hypertension pulmonaire'' est définie par une ''pression de l'artère pulmonaire >25mmhg au repos''.
*On parle de ''HTP'' de manière générale, et de ''HTAP'' si l'hypertension est située au niveau pré-capillarie.
*On parle d'HTP '''post-capillaire'' due surtout à une cause cardiaque avec stase en amont, vs une HTP ''pré-capillaire'' due plutôt à une cause vasculaire pulmonaire. Pour se faire il faut avoir mesuré par deux catheters les pressions aux deux endroits.
!!Causes
*Les ''Causes '' sont nombreuses. On distingue:
''Resistance dans les veines pulmonaires''
*Sténose Mitrale
*l'Insuffisance Cardiaque
* Myxome de l'oreillette (une tumeur bénigne)
''Hyperkinésie'' (due à des Shunts G-D)
*CIA (Communication inter-atriale)
*CAP (canal artériel persistant)
''Obstruction''
*Embolie pulmonaire
*Sténose de l'Artère pulmonaire
*Maladies du Collagène
''Vasoconstruction''
*Hypoxémie chronique
*BPCO
!!Clinique
*La ''Clinique'' comprend des symptômes tels que:
**''Dyspnée d'effort''
**''Fatigue''
**''Douleur thoracique à l'effort''
**''Syncope à l'effort'' si sévère
!!Complications
*Le ''Cor Pulmonale'' peut résulter d'une HTAP. Il s'agit d'une insuffisance du Ventricule Droit avec hypetrophie, qui se développe suite à une trop grande exposition à l'hypertension pulmonaire.
*Il est accompagné de signes d'Insuffisance Cardiaque Droite comme la TJ, Hépatomégalie, Ascite et Odèmes périphériques.
!!Diagnostic
*l''ECG'' suggère une Hypetrophie du Ventricule Droit (déviation de l'axe à droite)
*La ''RX'' montrera des [[artères pulmonaires élargies|hypertension_pulmonaire_rx.jpg]].
*l'''Echo-cardio'' montrera une dilatation du VD et AD ainsi qu'une AP élargie. On voit aussi que le septum a un mouvement anormal du à l'hypertrophie du VD.
*Le ''Catheter cardiaque'' montrera une pression pulmonaire artérielle à >25mmhg
!!Traitement
*''Traiter la cause'' de l'HTAP
*''Oxygène'' souvent à domicile
*''Médicaments'' comme des vasodilatateurs
*''Transplantation Pulmonaire'' à long terme
!!Généralités *L'''HTA secondaire'' est plutôt rare dans la population mais la détecter est important car certaines causes ont un traitement chirurgical *Les ''Causes'' d'HTA secondaires sont les suivantes ''Atteinte renale parenchymateuse'' *A Rechercher si le patient a des ATCD d'infections urinaires hautes à répétition ou des ATCD de polykystose rénale *Doser la créatine, la clearance, le sédiment, microalbuminurie et albuminurie de 24h *Faire aussi une Echographie Rénale ''Atteinte Reno-Vasculaire'' *A Rechercher en cas d'HTA sévère ou Réfractaire, ou si le patient présente un souffle abdominal *Faire une imagerie des artères rénales ''Hyperaldosteronisme Primaire'' *A Rechercher en cas d'HTA réfractaire ou d'Hypokaliémie *Faire une consultation spécialisée (cf. [[Hyperaldostéronisme Primaire / Conn]]) ''Phéochromocytome'' *A Rechercher si céphaliées + palpitations + sudations (triade de Ménard), ou si pics de HTA paroxystiques *Faire une consultation spécialisée (cf. [[Phéochromocytome]]) ''Autres'' *''[[Hyperthyroïdie|Hyperthyroïdie]]'' si palpitations, tremblements *''[[Cushing|Hypercoticisme / Cushing]]'' si phénotype suggestif
undefine
undefine
!! Définition
*Les ''Hormones Thyroidiennes'' T3 et surtout la T4 (Thyroxine) sont [[sécrétées par la glande thyroïde|thyroide_physiologie.jpg]] à partir de l'Iode sanguin. Dans le sang on les trouves sous forme de ''T3 libre (0.3%)'', ''T4 libre (0.03%)'' et sous forme ''Liée à la Thyroglobuline'' ainsi que liée à l'Albumine. La thyroïde sécrète 90% des hormones sous forme de T4 qui se transforme périphériquement en T3, qui est l'hormone active, avec comme effet une ''augmentation du métabolisme'' ainsi qu'un ''feedback négatif sur TSH''.
*La ''thyrotoxicose'' correspond au syndrome clinique de l'hyperthyroïdie.
*Les ''Etiologies'' principales sont
**La ''Maladie de Graves-Basedow''
**L'''Adénome Toxique''
**Le ''Goitre Multinodulaire''
**Les ''Thyroïdites destructives en phase débutante'' (de Quervain, sliencieuse, post-partum, après elles font de l'hypothyroïdie)
**Les ''Causes médicamenteuses'' (''amiodarone'' et ''produit de contraste iodé'')
*L'Hyperthyroïdie correspond à un ''T4 augmenté''. Elle peut être ''franche'' (TSH basse, T4 augmenté) ou ''subclinique'' (TSH basse, T4 normale).
*Les ''Complications'' les plus fréquentes sont les ''Risques de FA'' ainsi que l'''Ostéoporose'', surtout chez la femme ménopausée.
!! Clinique
Le [[tableau clinique |hyperthyroidie_clinique.jpg]]comporte:
*''Intolérance au chaud''
*''Sudations''
*''Tremblements''
*''Tachycardie''
*''Nervosité, Agitation, Insomnies''
*''Perte de poids''
*''Aménorrhées''
*Exophtalmie / symptômes occulaires (Basedow uniquement)
*Myxodème Prétibial (Basedow uniquement)
!! Investigations
''Labo''
*On fait d'abord un ''dépistage'' en dosant la ''TSH''
*Si la TSH est basse, on dose la ''T4 libre''
*Les résultats s'interprètent ainsi
|!TSH ↓|!T4 ↑| ''Hyperthyroïdie Franche'' |
|!TSH ↓|!T4 ~| ''Hyperthyroïdie Subclinique'' |
|TSH ↓|T4 ~| Doser la T3: possible ESS |
''Imagerie''
*On peut évaluer la ''structure'' et la vascularisation de la thyroïde par une ''echographie''
*On peut évaluer la ''fonction'' de la thyroïde par ''scintigraphie'', en utilisant de [[l'iode-131|hyperthyroidie_NX_scinti.jpg]] radioactif.
!! Maladie de Graves-Basedow
*La maladie de Basedow est la cause la plus fréquente d'hyperthyroïdie
*Elle est due à des ''anticorps anti-TSH Récepteur'', qu'on apelle les ''TSI'' (TSH Stimulating Immunoglobulins), ou encore ''TRAb'', qui vont sur-stimuler le récepteur à TSH.
*C'est la seule qui fait des [[exophtalmies|basedow_exophtalmie.jpg]] et des [[myxodèmes prétibiaux|basedow_myxodeme_pretibial.jpg]].
*Au ''CT de l'orbite'' on peut voir un ''[[épaississement des muscles occulomoteurs|basedow_ct_orbite.jpg]]''
*A la ''scintigraphie'' on voit que la thyroïde ''[[capte diffusément l'Iode-131|hyperthyroidie_NX_scinti.jpg]]''.
*Le ''traitement'' implique:
**''Anti-Thyroïdiens'' ( ''Carbimazole'' ou ''PTU'' si grossesse), qui ont une action anti-TPO, avec un ''risque 1% d'agranulocytose''.
**''Chirurgie'' ou ''Iode Radioactif'' si échec du traitement après 1-2ans
**Puis ''substitution en Levothyroxine''.
!! Goitres Nodulaires
*Les ''Goitres Nodulaires'' comprennent l'''Adénome Toxique'' (une tumeur unique) et le ''Goitre Multinodilaire''
*On les distingue par l'[[aspect clinique|hyperthyroidie_goitre_multinodulaire_clinique.jpg]] du nodule à la palpation ainsi que l'''[[aspect scintigraphique|hyperthyroidie_NX_scinti_goitres.jpg]]'' des scintigraphies à l'Iode-131.
*Le ''traitement'' implique:
** Une phase de stabilisation par des ''Anti-Thyroïdiens'' ( ''Carbimazole'' ou ''PTU'' si grossesse), qui ont une action anti-TPO, avec un ''risque 1% d'agranulocytose''.
** Suivi d'une ''Chirurgie'' ou traitement par ''Iode Radioactif''
**Puis ''substitution en Levothyroxine''.
!! Thyroïdites destructives
*Les ''Thyroïdites destructives'' sont des inflammations de la glande thyroïde impliquant ''d'abord une hyperthyroïdie'' puis s'épuisant en ''hypothyroïdie''.
*Elles se ''traitent symptomatiquent'' par des'' Beta-Bloqueurs'' et des ''AINS'', car elles se ''résolvent spontanément''.
*Il en existe plusieurs typies:
** La ''Thyroïdite Subaiguë de Quervain'' est une thyroïdite ''douloureuse'', probablement due à une ''cause virale''.
**La ''Thyroïdite Silencieuse'' est une variante de la Thyroïdite d'Hashimoto (qui fait peu d'hyperthyroïdies), avec des ''auto-anticorps circulants''
** La ''Thyroïdite du Post-Partum'' est une thyroïdite ''fréquente'' mais ''silencieuse'', survenant durant les 6-12mois post-partum. on la considère comme une variante de la thyroïdite silencieuse.
!! Medicaments
*Les ''Produits Iodés'' peuvent déclencher une hyperthyroïdie, surtout l'''Amiodarone'' (Cordarone, un anti-arythmique) et Les ''Produits de Contrastes Iodés'' (utilisés dans les Radiographies et CT injectés).
*Ensuite, le patient développe une ''hypothyroïdie''
*On peut traiter pour vider l'iode de la thyroide par du perchlorate de potassium KCLO4
!!ESS (Euthyroid Sick Syndrome)
*''Fréquent chez le patient hospitalisé'', il s'agit d'une mise au repos de l'axe thyreotrope en lien avec l'état de maladie du patient
*On trouve une TSH basse, une T4 basse, une T3 basse et une rT3 augmentée (diminution de la conversion de T4->T3 périphérique)
!!Personnes agées
*Valeurs de TSH peuvent etre plus haut que normale sans être pathologique
*Symptomes peuvent etre aspecifiques. hypo/hyper
undefine
undefine
undefine
undefine
undefine
!!Généralités *se fait via l'''indice de Sokolov'' qui se définit par ''RV6 + SV1 > 35mm''. *ce qui fait qu'on trouve un ''déplacement de l'onde de transition'' (le moment ou l'onde QRS s'inverse entre V1-V6, normalement entre V3-V4)
undefine
undefine
undefine
!! Définition * L'''Hypoglycémie'' est définie par un glycémie ''<3.9'' chez le ''patient diabétique ''(<2.7 chez le non diabétique) * L'Hypoglycémie est surtout ''dangereuse pour le cerveau'', car il ne consomme que du glucose. Il y a un ''risque de coma'' ! * Les ''causes'' les plus fréquentes d'hypoglycémies sont les traitements d'''insuline'' ainsi que les ''Anti-diabétiques Oraux'' (comme les Sulfonylurés (//glicazide©//)) *D'autres causes possibles incluent les ''insulinomes'' (tumeurs pancréatiques produisant de l'insuline), l'''alcool'' et l'''hypocorticisme'' (cortisol=hyperglycémiant) *Les ''hormones'' responsables de faire augmenter la glycémie sont **le ''glucagon'' **l'''adrénaline'' **le ''cortisol'' **la ''GH'' * Si le problème vient d'un ''hyperinsulinisme'', on peut distinguer une origine ''endogène vs exogène'' en dosant le ''c-peptide'', protéine séparée de la pro-insuline lors de son clivage en insuline. *Chez le patient diabétique avec ''neuropathie diabétique autonome'', les symptomes d'hypoglycémies (symptomes neuroglycopéniques) peuvent être non perçus, la réponse d'adrénaline abolie, ce qui peut dégénérer rapidement en ''coma'' ! !! Clinique *On trouve la ''Triade de Whipple'', comprenant: **une ''hypoglycémie au labo'' ** des ''Symptomes Typiques'' évoluant avec la baisse de la glycémie: **# une ''réponse adrénergique'' avec sécrétion de glucagon + adrénaline (<3.9 mmol/l) **#des ''symptômes neuroglycopéniques'' avec sécrétion de cortisol + GH (<3.6mmol/l) **# finalement des ''convulsions / coma'' (<2.6mmol/l) ** un ''soulagement rapide au glucose'' |!Glycémie (mmol/l)|!Symptômes Typiques|!Hormones sécrtées| |!3.9-3.6|''réaction adrénergique'': tachycardie, sudation, palpitations, tremblement, anxieté|Glucacon + Adrénaline| |!3.6-2.6|''symptômes neuroglycopéniques'':mal de tête, vertiges, troubles cognitifs, état confusionnel|Cortisol + GH| |!<2.6| ''convulsions / coma'' || !!Investigations *Si suspicion d'''insulinome'', faire un ''test de jeûne'' (l'insuline reste élevée malgré le jeûne et la chute du glucose). *Si suspicion d'hypocorticisme, faire un ''[[test au synacthène|Insuffisance Surrénalienne]]'' !!Traitement *Si ''hypoglycémie peu sévère'', faire simplement ''manger du sucre'' (sucre, sucre de raisin, jus de fruit, sirop,...) * Si ''hypoglycémie sévère'', donner du ''glucose IV'' ou du glucagon SC si pas d'IV possible. *Chez le patient alcoolique, donner de la ''Vitamine B1'' avant le glucose, pour prévenir l'encéphalopathie de Wernicke.
!! Généralités *L'''Hypogonadisme'' décrit une ''perte de fonction des gonades'', donc une perte de fonction des ''ovaires'' ou des ''testicules''. *Les ''gonades'' ont deux fonctions, la production d'''hormones'' et la production de ''gamètes'' (spermatozoïdes, ovaire). Un hypogonadisme peut donc mener à: **un ''défaut du développement sexuel'' **une ''stérilité'' *On classifie l'hypogonadisme en ''hypergonadotrope'' ou ''hypogonadotrope'' !! Hypogonadisme Hypogonadotrope *C'est un hypogonadisme avec un ''manque de gonadotrophines (FSH, LH)'', le défaut est donc ''central'' *les ''causes ''peuvent être une ''tumeur'' (Prolactinome) ou la ''radiothérapie'' *''Chez l'homme'' on trouve: **__Avant la puberté__: retard pubertaire **__Apres la puberté__: regression des caractères sexuels secondaires, fatigabilité musculaire, stérilité, impotence *''Chez la femme'' **Aménorrhée !! Hypogonadisme Hypergonadotrope *C'est un hypogonadisme avec un ''excès de gonadotropes (FSH,LH)'', le défaut est ''périphérique'' *Une des causes est le ''syndrome de Klinefelter 47 XXX'' (testicules dysgénésiques, azoospermie, hypogonadisme)
!!Causes Hypokaliémie //Perte de Potassium // *Diurétiques (sauf epargneurs: aldactone et amiloride) *Vomissements, Diarrhées *Nephropathies avec atteinte des tubules *Hyperaldosteronisme //Apports insuffisant// *Jeune severe (grève de la faim, anorexiques) //Redistribution (extra <-> intra)// *Alcalose *Diabète (Insuline) *Asthmatiques (B-agonistes) !!TTT hypokalémie: *correction probleme *repleter en K+ **Jamais en Bolus ! **Si symptomatique ou aigu: 40-60 mmol/24h **Si asynptomatique ou chronique: KCL 8mmol retard cp ou citrate de potassium 30mmol cp (ne pas donner citrate si patient sous diurétiques car ça l'élimine) !!Regulation du potasssium *Doit se retrouver dans les cellules (pool de K+). *Les reins en filtrent et en reabsorbe beaucoup, ce qui resulte en de legere pertes *L'excretion est dépendante de la filtration (GFR) ainsi que d'une sécretion tubulaire !!Physiologie electrolytes *cellules riche en K, plasma riche en Na, avec des flux d'eaux libres (grace qux AQP) avec un équilibrage d'osmolarité par des mouvements d'eaux *Le gradient de Na est le facteur le plus important d'équilibrage de la volémie et du volume cellulaire, allant de min. 100 à max 180, contrairement au K avec min. 1,5 et max 9 *L'apport et la perte d'eau est le déterminant principal de la concentration en sodium *la Tonicité décrit l'effet osmolaire du plasma sur le volume cellulaire. Si on a une hyperosmolarité des deux côtés, il n'y aura pas de mouvement, donc pas de changement de tonicité. **Hypotonicité = odème cellulaire **Hypertonicité = perte de volume cellulaire*Une Hypernatrémie fait toujours une hypertonicité *Une Hyponatrémie ne fait pas toujours une hypotonicité (si on a une hypoNatrémie combiné avec une hyperglycémie ou mannitol, l'osmolarité totale peut etre hyperosmolaire, ou encore si on a une pseudohyponatrémie quand il y a hyperprotéinémie ou hyperlipidémie majeure) *L'eau libre (ou juste ''eau'') se repartit a 60% dans les cellules, dans 32% du plasma et dans 8% intravasculaire *donner juste de l'eau est donc peu efficace pour remplir le plasma, mais si on donne avec NaCl 0,9%, il y aura deja ca en moins dans le compartiment cellulaire *La cellule doit maintenair son volume ainsi que son gradient d'electrolyte. Un changement de Na ou K induit un stress osomlaire (gonfler, shrinker) ainsi que des troubles d'excitabilité (hypo ou hyper)
!!Hyponatrémie - Hypovolémie //Perte Renale: Una >20// * //Perte Extrarénale: Una < 20// *Diarrhées , Vomissement (perte de sodium, donc volemie, existe aussi si perte deau donc natremie fait hypernatremie) !!Hyponatrémie - Euvolémie //UNa < 20 (le rein fonctionne bien mais est dépassé) *Potomanie //UNa > 20 (le rein continue a concentrer les urines malgré l'hypoNa) *SIADH !!Hyponatrémie - Hypervolémie TTT: diurétiques de l'anse (font un effet hypernatrémique en plus) !!Effet Cerebral des corrections *Plus la correction est rapide, plus les degats sont à risque **Si le trouble s'est rapidement installé, on peut être rapide, mais risque d' ''odème cerebral'' si correction rapide d'une Hypernatremie (surtout en pédiatrie) **Si le trouble est chronique, il faut y aller tranquillement sinon risque de ''demyelinisation osmotique'' si correction rapide d'une Hyponatrémie **les mêmes symptomes peuvent arriver à l'inverse sur une installation rapide d'une hyperna/hypona *la cellule peut tenter de s'adapter en accumulant ou relarguant des osmolites cellulaires (glutamate, taurine, myo-isonitol) pour equilibrer le déséquilibre, mais elle le fait avec une limite et ça prend quelques heures à quelques jours) *''Attention ''particulière d'un patient qui a une hyponatrémie chronique sans symptomes. Attention surtout a ne pas enlever d'un coup un patient qui a un ''thiazide'' (hyponatrémiant) ! *Si il y a des ''symptômes severes'' on peut corriger quand même assez rapidement !!Clinique des Hypo ou Hyper *ECA, Chute, Malaise General *puis Cephalées, somnolence *puis ROT vifs, convulsions, coma, decès !!Traitement *Hypervolemique: diuretiques de l'anse (furosémide) *Hypovolemique: perfusion de nacl 0.9% (corriger la volémie suffit) *Euvolemique Potomane: Stop boire (difficile) *Euvolemique SIADH: **Hypernatremie Aigu: Bolus de NaCl Hypertonique (3%) qui sera clairement hypernatrémiante. BOlus de 100ml ou perfusion de 1ml/kg/h et verifier toutes les heures. **Hypernatrémie Chronique: Restriction Hydrique et Comprimés de sels. Il existe aussi les vaptants (antagonistes de l'ADH). Pas augmenter la natrémie de plus de 8-12 mmol/l par heure. Si c'est le cas, diluer un peu avec AVP, liquide hypotonique) !!Physiologie electrolytes *cellules riche en K, plasma riche en Na, avec des flux d'eaux libres (grace qux AQP) avec un équilibrage d'osmolarité par des mouvements d'eaux *Le gradient de Na est le facteur le plus important d'équilibrage de la volémie et du volume cellulaire, allant de min. 100 à max 180, contrairement au K avec min. 1,5 et max 9 *L'apport et la perte d'eau est le déterminant principal de la concentration en sodium *la Tonicité décrit l'effet osmolaire du plasma sur le volume cellulaire. Si on a une hyperosmolarité des deux côtés, il n'y aura pas de mouvement, donc pas de changement de tonicité. **Hypotonicité = odème cellulaire **Hypertonicité = perte de volume cellulaire*Une Hypernatrémie fait toujours une hypertonicité *Une Hyponatrémie ne fait pas toujours une hypotonicité (si on a une hypoNatrémie combiné avec une hyperglycémie ou mannitol, l'osmolarité totale peut etre hyperosmolaire, ou encore si on a une pseudohyponatrémie quand il y a hyperprotéinémie ou hyperlipidémie majeure) *L'eau libre (ou juste ''eau'') se repartit a 60% dans les cellules, dans 32% du plasma et dans 8% intravasculaire *donner juste de l'eau est donc peu efficace pour remplir le plasma, mais si on donne avec NaCl 0,9%, il y aura deja ca en moins dans le compartiment cellulaire *La cellule doit maintenair son volume ainsi que son gradient d'electrolyte. Un changement de Na ou K induit un stress osomlaire (gonfler, shrinker) ainsi que des troubles d'excitabilité (hypo ou hyper) !!Regulation Na *Le NaCl 0,9% a une charge Osmolaire de 300 (legerement hyperosomlaire) *Osmorecepteurs dans l'hypothalamus captant la tonicité du plasma. Si la tonicité change il y aura deux reponses: **Soif: regule l'apport d'eau libre (diminue avec l'âge) **Vasopressine: régule l'elimination de l'eau libre (pas d'ADH si diabète insipide) *Hyponatrémie: suppression de la soif et stop secretion ADH (urines se diluent) *Hypernatrémie: induction de soif et induction d'ADH (urines se concentrent) *Pour dépasser la capacité du rein, la potomanie doit être de plus de 1L par heure avant de diminuer la natrémie, dans les conditions normales !!Secretion non Osmotique d'ADH *la sécrétion d'ADH se fait aussi en réponse à un état de choc (hypotensions) a cause de son effet vasoconstricteur, ce qui se paye par une hyponatrémie. Deux situations principales: **un patient super hypovolémique va sécréter beaucoup d'ADH **a l'inverse, un patient en IC severe, cirrhose, syndrome nephrotique est aussi interpreté comme de l'hypovolémie (probablement mauvais remplissage du lit vasculaire), avec beaucoup de sécrétion d'ADH *dans le SIADH, il y a une hypersécrétion d'ADH dans un patient euvolémique, qui est due souvent à: **Nausée, Douleur **Médicaments (beaucoup, probablement le plus fréquent) **Pathologies intracranienne (HSA, Tumeur) **Pathologie pulmonaire (Pneumonie, Tumeur, fibrose,...) **Syndrome paranéoplasique (chercher cause si persistance du SIADH)
!! Définition *L'''Hypoparathyroïdie'' est majoritairement due à un effet ''post-chirurgie'', typiquement: **Post parathyroïdectomie **Post ''thyroïdectomie'' **Post ablation de cancer ORL !! Clinique * On trouve une clinique d'''hypocalcémie'' avec: **''Arythmies Cardiaques'' **''Ostéomalacie, Rachitisme'' **''Tétanie, Parésie'' **''QT long'' !! Investigation: *Au ''Labo'': **''Hypocalcémie'' **''Hyperphosphatémie'' **''PTH basse'' !! Traitement * Donner du ''Calcium oral'' pour les cas modérés, ou du ''Gluconate de calcium IV'' pour les cas sévères * Donner aussi de la ''Vitamine D'' pour augmenter l'absorption intestinale de Ca++ *''CAVE'' car ces traitements peuvent ''précipiter des calculs'', donc les donner avec précaution.
undefine
![ext[hypospadias.pdf|./pdf/hypospadias.pdf]] <!-- Texte caché pour la recherche Hypospadias In the male fetus, urethral tubularisation occurs in a proximal to distal direction under the influence of fetal testosterone. Failure to complete this process leaves the urethral opening proximal to the normal meatus on the glans and this is termed hypospadias (Fig. 19.10). This is a common congenital anomaly, affecting about 1 in every 200 boys. Recent studies suggest that the incidence is increasing. confirms testicular torsion (Fig. 19.9). After detorsion, the testis appears viable and is conserved. It is fixed with sutures to minimise the risk of further torsion. The left testis is also fixed, as the anatomical variant which predisposes to torsion occurs bilaterally. This case highlights: • The clinical features of testicular torsion are varia ble and can be potentially misleading, with pain predominantly referred to the abdomen or inguinal region and minimal pain felt in the testis itself • Abdominal examination is never complete without inspection and gentle palpation of both testes • With torsion, the testis is always tender. Figure 19.9 Torsion of the testis at surgery. • Chordee – a ventral curvature of the shaft of the penis, most apparent on erection. This is only marked in the more severe forms of hypospadias (Fig. 19.12). Glanular hypospadias may be a solely cosmetic con cern, but more proximal varieties may cause func tional problems including an inability to micturate in a normal direction and erectile deformity. With more severe varieties of hypospadias, additional geni tourinary anomalies should be excluded and some times it is necessary to consider disorders of sexual differentiation. Surgery Correction is often undertaken before 2 years of age, often as a single stage operation. The aims of surgery are to produce: - • • • A terminal urethral meatus so that the boy can micturate in a normal standing position like his peers Hypospadias consists of: A ventral urethral meatus – in most cases the urethra opens on or adjacent to the glans penis, but in severe cases the opening may be on the penile shaft or in the perineum (Fig. 19.11) A hooded dorsal foreskin – the foreskin has failed to fuse ventrally A straight erection • • A penis that looks normal. Infants with hypospadias must not be circumcised, as the foreskin is often needed for later reconstructive surgery. 351 1 Genitalia Hypospadias 19 Normal urethral meatus Urethral groove Commonest types Increased incidence of other genitourinary abnormalities Urethral meatus Glanular Coronal Midshaft Penoscrotal Figure 19.10 Varieties of hypospadias. Circumcision Types of hypospadias Figure 19.11 Penile shaft hypospadias with dorsal hooded foreskin, showing the urethral groove (arrow) and urethral meatus (arrow) -->
*Les ''Hormones Thyroidiennes'' T3 et T4 (Thyroxine) sont [[sécrétées par la glande thyroïde|thyroide_physiologie.jpg]] à partir de l'Iode sanguin. Dans le sang on les trouves sous forme de ''T3 libre (0.3%)'', ''T4 libre (0.03%)'' et sous forme ''Liée à la Thyroglobuline'' ainsi que liée à l'Albumine. La T4 se transforme périphériquement en T3, qui est l'hormone active, avec comme effet une ''augmentation du métabolisme'' ainsi qu'un ''feedback négatif sur TSH''.
*L'''Hypothyroïdie'' correspond à une ''T4 basse''. Elle peut être ''franche'' (TSH augmentée, T4 basse), ''subclinique'' (TSH augmentée, T4 encore normal) ou ''centrale'' (TSH basse, T4 basse, du à une tumeur hypophysaire avec défaut de sécrétion de TSH)
*On parle d'''Hyperthyroïdie primaire'' lorsque l'affection atteint la glande thyroïde (la majorité des cas), et d'''Hyperthyroïdie secondaire'' lorsque l'affection atteint la glande pituitaire avec baisse de sécrétion de TSH (hypothyroïdie centrale)
!! Etiologies
les ''Etiolgies'' principales sont:
*la ''Thyroïdite autoimmune de Hashimoto'' (Anticorps anti-TPO)
*les autres ''Thyroïdites'' (''silencieuse'',''post-partum'',''de Quervain''), après leur premier stade hyperthyroïdique
*la ''Chirurgie'' et la ''Radiothérapie'' au niveau de la glande thyroïde
*Les ''Médicaments'' (''amiodarone'' et ''produits de contraste iodés)'', après leur premier stade hyperthyroïdique
*Le Lithium
*la ''Carence en Iode''
*L'''Hypothyroïdie secondaire'' (surtout le ''macroadénome hypophysaire'', mais toute autre pathologie atteignant l'hypophyse)
!! Clinique
La ''Clinique'' correspond à peu près à l'inverse de l'hyperthyroïdie:
*''Frilosité''
*''Peau sèche'' (Cheveux et ongles cassants)
*''Bradycardie''
*''Fatigue, ralentissement psychomoteur, dépression''
*''Prise de poids, Odèmes''
*''Macroglossie''
!! Investigations
''Labo''
*On fait d'abord un ''dépistage'' en dosant la ''TSH''
*Si la TSH est haute, on dose la ''T4 libre''
*Les résultats s'interprètent ainsi
|!TSH ↑|!T4 ↓| ''Hyperthyroïdie Franche'' |
|!TSH ↑|!T4 ~| ''Hyperthyroïdie Subclinique'' |
|!TSH ↓|!T4 ↓| ''Hyperthyroïdie Centrale'' |
*Il faut aussi doser les ''AC anti TPO'' pour le Hashimoto
*Pas besoin de Scintigraphie
*Pas besoin d'échographie si pas de nodule palpé
!! Traitement
*On fait une ''subsitution'' en hormones thyroïdiennes via la ''Levothyroxine'' (//Euthyrox©)//, à prendre à distance du calcium et du fer pour une bonne absorption.
*Les doses doivent être diminuées pour les patients âgés et augmentées pour les femmes enceintes
*Il faut ensuite ''contrôler la TSH'' une fois par an. Attendre minimum 6 semaines avant le premier contrôle car elle s'adapte lentement. (suivre la T4 si cause centrale)
{{hypothyroidie_controles_TSH.jpg}}
undefine
undefine
undefine
undefine
undefine
undefine
* ''Perte de mémoire aigue transitoire'' * ''Trouble ménisque'' ''le plus fréquent'' en neurologie * ''Idiopathique'', touche les gens de'' 50 ans e''nviron * La personne ne se ''souvient de rien des derniers moments'' et ''oublie au fur et a mesure''. (Amnésie rétrograde et antérograde) * La ''mémoire ancienne est conservée'' cependant. * Les ''symptômes disparaissent après quelques heures'', il n'y a pas de traitement particulier
{{Immunoglobulines_schema.jpg}}
{{Immunoglobulines_schema.jpg}}
{{Immunoglobulines_schema.jpg}}
{{Immunoglobulines_schema.jpg}}
{{Immunoglobulines_schema.jpg}}
{{ileus_rx.jpg}}
!!Généralités
*un ''Ileus'' est une ''absence de peristaltisme'' du tube digestif entraînant une ''distention intestinale''
*L'''Ileus mécanique'' est due à une ''stase du contenu gastrique'' en amont d'une ''obstruction'' intestinale. C'est la cause la plus fréquente. On retrouve:
**Cancers
**Adhesions
**Brides
**Hernies
**Volvulus
**Ileus biliaire
**Ileus meconial
**Bezoar)
*L'''Ileus paralytique'' est du à une ''paralysie du muscle'' intestinal. on retrouve
**Troubles Electrolytiques
**Sepsis
**Peritonite
**Post-Op
**Myopathies
**Neuropahties
**Opiacés
*Si l'Ileus n'est pas traité, il peut entrainer une ''nécrose'' et une ''perforation''.
!!Clinique
*Bruits intestinaux ''métalliques aigus'' puis a long terme ''absence de bruits'' avec l'absence de péristaltisme.
!!Investigations
*La ''RX conventionnelle'' montrera les anses distendues.
!!Traitement
''Ileus mécanique''
*''décompression'' par sonde gastrique
*''chirurgie'' suivant la gravité du cas
''Ileus paralytique''
*''STOP medicament'' responsable
*Traiter la cause
undefine
//en construction...//
undefine
![ext[Incontinence.pdf|./pdf/Incontinence.pdf]] <!-- Texte caché pour la recherche 1/3 des médecins posent systématiqueme nt des questions sur l’incontinence 80% des incontinenc es urinaires peuvent être améliorées EPIDEMIOLOGIE Chez les femmes: Prévalence: 25-45 % Incontinence HTA Dépression Diabète 35% 25% 20% 1 Anger JT et al. J Urol 2006 8% Colporraphie antérieure Colporraphie antérieure Colpectomie Colporraphie postérieure Colporraphie postérieure : Dissection recto-vaginale Colporraphie postérieure PROLAPSUS NOS PESSAIRES Pessaires de support Traitement conservateur ANNEAU SHAATZ / FALK ANNEAU URETRAL Pessaires Soins quotidiens, minimum hebdomadaires Contrôle 1x/2sem puis 1x/4-6sem. Tailles 50-100mm Prolapsus modéré Stade I-II Périnée compétent Tailles 55-95mm Prolapsus modéré Stade I-II Périnée moyennement compétent Pessaires de remplissage Tailles 45-100mm Incontinence d’effort Périnée compétent DONUT CUBE GELLHORN Tailles 50-100mm Prolapsus avancé Stade III Périnée effondré Tailles 0 - 5 Prolapsus avancé Stade III-IV Périnée effondré Changement quotidien Tailles 50-90mm Prolapsus avancé Stade III-IV Périnée effondré Rédaction et mise en page: Nikolaus Veit-Rubin et Séverine Benoist Service de gynécologie Unité de périnéologie CAS CLINIQUE Petit quiz d’entraînement CAS CLINIQUE Petit quiz d’entraînement CAS CLINIQUE Petit quiz d’entraînement Merci pour votre attention!!! -->
undefine
{{infarctus_pulmonaire_rx.jpg}}
!!Généralités
*L'''infarctus pulmonaire'' est le plus souvent du à l'''Embolie Pulmonaire'' sous fond d'''Insuffisance Cardiaque gauche chronique''
*En général les poumons sont rarement touchés par les infarctus car ils ont une ''//double vascularisation//'' avec les artères pulmonaires et bronchiques
*Après une embolie pulmonaire, les artères bronchiques continuent à donner de l'oxygène.
*Des anastomoses font que leur pression plus élevée font des dégâts aux capillaires et résultent en une extravasions de globules rouges, qui sont normalement résorbées.
*Mais si il y a une IC gauche chronique ou certaines autres co-morbidités pulmonaires, l'hémmoragie progresse et résulte en infarctus du parenchyme
*la ''RX thorax'' et le ''CT-thorax'' montreront des ''opacifications en forme de cale''
{{infarctus_pulmonaire_ct.jpg}}
*L'''infarctus du VD'' est ''sensible a la précharge''. Cliniquement on aura une ''distension jugulaire''. *Ne ''pas donner'' de la ''morphine'' ni de ''nitrés'' car la vasodilatation est mauvaise pour l'infarctus droit contrairement au gauche. *Le traitement est le ''remplissage'' afin d'augmenter la précharge
undefine
undefine
@@background-color:Gold; !''Infectiologie'' @@ <<list-links "[tag[Infectiologie]sort[title]]">>
![ext[infection_neonatale.pdf|./pdf/infection_neonatale.pdf]] <!-- Texte caché pour la recherche -->
![ext[infection_urinaire_ped.pdf|./pdf/infection_urinaire_ped.pdf]] <!-- Texte caché pour la recherche -->
{{infections_urinaires.jpg}}
!!Définition
*une ''infection urinaire basse'' peut être soit une ''cystite'' (majoritairement), soit une ''uréthrite'' soit une ''prostatite''.
*Ies IU sont les infections les plus fréquentes chez les femmes
*Les ''IU basses simples'' et les ''IU basses compliquées'' ont une importance pour le traitement et se distinguent par la présence ou non de ''Facteurs de Risque''
|!Facteurs de risque d'IU compliquée|
|''Hommes''|
|''Diabète''|
|''Grossesse''|
|''Immunosuppression''|
|''ATCD ''de ''calcul ''urinaire, ''pyélite ''ou ''anomalie ''des voies|
|''Sonde a deumeure ''récente|
|''Intervention urinaire'' récente|
|''Hospitalisation'' actuelle|
|''ATB'' récents|
|''Age avancé''|
|''Infections récidivantes'' >4/an|
''Récidives''
*Dans les ''récidives'' on distingue les ''rechutes ''des ''réinfections''.
*une ''rechute'' indique un échec d’élimination des bactéries (résistance aux ATB, anomalie anatomique, calculs surinfectés, prostatite chronique)
*une ''réinfection'' est une nouvelle infection avec un germe différent.
''Germes'':
//infections communautaires//
*''//E.coli//'' (première cause, gram-)
*//''Proteus''// (enterobactérie, gram-)
*''//Klebsielle//'' (entérobactérie, gram-)
*//staph. coagulase négative// (gram+)
//infections compliquées//
*Pareil avec en plus:
*//''Pseudomonas''// (gram-)
*''//Entérocoques//'' (gram+)
//cas de l'Urétrite (qui est une MST)//
*//''Chlamydia trachomatis''//
*''//N.gonorrhoea//'' (gram-)
!!Clinique
''IU basse: Cystite non-compliquée'' (95% des IU)
*''Dysurie''
*''Pollakyurie''
*''Douleur sous-pubienne''
*Urines ''troubles'' et ''malodorantes''
*Parfois Hématurie macroscopique (cystite hémorragique)
*Les ''Facteurs favorisants'' de la cystite sont:
**rapports sexuels fréquents
**douches vaginales, crèmes spermicides, oestrogènes topiques
**ATCD d'IU
*il est difficile de différencier ces symptômes avec ceux de la ''vaginite'' (+écoulement vaginal, prurit, dyspereunie) ou d'une ''urétrite'' (+partenaire symptomatique)
''IU basse compliquée''
*pareil que l'IU basse simple dans les symptômes, mais présence de ''facteurs de risques''.
!!Investigations
''IU basse simple''
*rechercher des ''signes d'IU haute'' (fièvre, douleur loges rénales, N/V, durée >7j)
* ''Stick urinaire'' (un [[test rapide qualitatif par bandelette|stick_urinaire.jpg]]) qui montrera:
**''leucocytes'' (via la leucocyte esterase)
**''nitrites'' (si bactéries Gram-)
**''globules rouges''
*PAS de sédiment ni de cultures
''IU basse compliquée''
*Pareil que IU simple mais rajouter:
*''Sédiment urinaire'' ([[analyse microscopique|sediment_urinaire.jpg]] des urines) qui peut montrer une ''leucocyturie >8/champ'' et une ''hématurie >10/champ''
*''Culture d'urine'' (p.ex sur [[Uricult|uricult.jpg]]) avec une culture positive si ''>10^2 cfu/ml chez une femme symptomatique'' (//colonies//) qui distingue les Gram+ / Gram - et dont la présence de deux germes parle en faveur d'une contamination
!!Traitement
'' IU basse simple''
*''nitrofurantoine'' PO 3x10mg / 5j
*''fosfomycine'' PO 3g dose unique
*en 2eme intentions les fluoroquinolones (norfloxacine) qu'on essaie d'épargner et d'utiliser que si nécessaire
''IU basse compliquée''
*''nitrofurantoine'' PO 3x10mg / 7j
*''Fluoroquinolone'' (norfloxacine) / 7j
''Récidives invalidantes''
*''Prophylaxie'' Fosfomycine tous les 10j + Co-trimoxazole toutes les 2 sem.
*ou alors ''traitement de réserve'' de courte durée initiée par la patiente grace à des ''stick auto-testés''
{{infections_urinaires.jpg}}
!!Définition
*une ''infection urinaire haute'' est principalement une ''Pyélonéphrite'', mais peut aussi être une ''Pyélite''.
*Les ''IU basses simples'' et les ''IU basses compliquées'' ont une importance pour le traitement et se distinguent par la présence ou non de ''Facteurs de Risque''
*La Pyélonéphrite obstructive est celle qui est due à un calcul ou autre obstacle
|!Facteurs de risque d'IU compliquée|
|''Hommes''|
|''Diabète''|
|''Grossesse''|
|''Immunosuppression''|
|''ATCD ''de ''calcul ''urinaire, ''pyélite ''ou ''anomalie ''des voies|
|''Sonde a deumeure ''récente|
|''Intervention urinaire'' récente|
|''Hospitalisation'' actuelle|
|''ATB'' récents|
|''Age avancé''|
|''Infections récidivantes'' >4/an|
''Germes'':
//infections communautaires//
*''//E.coli//'' (première cause, gram-)
*//''Proteus''// (enterobactérie, gram-)
*''//Klebsielle//'' (entérobactérie, gram-)
*//staph. coagulase négative// (gram+)
//infections compliquées//
*Pareil avec en plus:
*//''Pseudomonas''// (gram-)
*''//Entérocoques//'' (gram+)
!!Clinique
''IU haute non-compliquée''
//signes de Pyélonephrite//
*''Fièvre'' et Frissons
*''Douleur loge rénale''
*Nausées, Vomissements
*Symptômes persistants >7j
//signes de Cystite souvent présents//
*''Dysurie''
*''Pollakyurie''
*''Douleur sous-pubienne''
*Urines ''troubles'' et ''malodorantes''
*Parfois Hématurie macroscopique (cystite hémorragique)
''IU haute compliquée''
*pareil que l'IU haute simple dans les symptômes, mais présence de ''facteurs de risques''.
!!Investigations
''IU haute simple''
* ''Stick urinaire'' (un [[test rapide qualitatif par bandelette|stick_urinaire.jpg]]) qui montrera:
**''leucocytes'' (via la leucocyte esterase)
**''nitrites'' (si bactéries Gram-)
**''globules rouges''
*''Culture d'urine'' (p.ex sur [[Uricult|uricult.jpg]]) avec une culture positive si ''>10^2 cfu/ml chez une femme symptomatique'' (//colonies//) qui distingue les Gram+ / Gram - et dont la présence de deux germes parle en faveur d'une contamination
*''US'' si >48h ou si fortes douleurs, à la recherche de ''complications'' (abcès ou obstruction)
''IU haute compliquée''
*''Stick urinaire''
*''Culture'' urinaire
!!Traitement
''IU haute simple''
*''ciprofloxacine'' (quinolone) PO pendant 7-10j
*''cefuroxime'' Po pendant 10-14j
*traitement ''ambulatoire'' possible, pour autant qu'on fasse un contrôle téléphonique 48h après, et que le patient n'ait pas une clinique trop importante
''IU haute compliquée''
*''ciprofloxacine'' et adapter à l'ATBgramme
*''hospitalisation'' souvent nécessaire avec ATB ''IV''
![ext[dermato_infections.pdf|./pdf/dermato_infections.pdf]] <!-- Texte caché pour la recherche Maladies impetigo bactériennes GEN : Infection du poil. Staph doré (strepto), cuisses ++ (frottement jeans), fongique sur la barbe (sycosis) CLIN : papulo-pustules centrés sur poil DD : psoriasis (pustule sans poil), acné TTT : ne?oyer au savon GEN : Infection profonde du poil, staph doré, sécrète toxine (→ trou, érythème). FR : porteurs chroniques/diabète/hygiène. CLIN : douleur, papules érythémateuse ulcérée TTT : soins local, ATB PO/IV (anthrax), prévention : réduction portage. CAVE : anthrax si agglomérat de furoncles. GEN : Infection de l’épiderme sous cornéen avec décollement remplit de PMN. Enfants ++, associé peau sèche/eczéma. 1 e cause de bulles. Germes : Staph doré ou strepto. Contagion ++ CLIN : érosions superficielles, croûtes mélicériques INV : Dx clinique, év gram/culture/ASLO TTT : locaux + ATB PO (prévient la glomérulonéphrite post strepto) CAVE : Sur dermatose existante = impétignisation GEN : erysipèle = dermo-hypodermite infectieuse (forme de cellulite). Œdème épiderme + dilatation vascu FR : patho lymphatique. CLIN : EF élevé, frisson chez BSH, plaque érythémateuse + oedémaFée DD : TVP, zona, arthrite INV : Rechercher porte d’entrée (fissure entre les orteils ?) TTT : Immobilisation, ATB IV (coque gram+), TTT porte d’entrée CAVE : Risque de fasciite nécrosante (hypoesthésie, crépitements) GEN : Complication d’une dermo-hypodermite. Risque létal. Germe : strepto groupe A (M1 et M3) CLIN : mauvais EG, masses nécrotiques, décollement épidermique gris, Nikolski+, hypoesthésie, crépitements. Extension rapide. INV : év Rx/IRM pour recherche gaz si doute TTT : ATB IV + débridement chirurgical en urgence (+ greffe peau). GEN : Lors de toxines → Manifestations cutanées à distance. Ex : scarlatine avec strepto A sécrète toxine codée par bactériophage Autre : TSSS sur tampon infecté. CLIN : pharyngite, plaques érythémateuses aux plis, langue framboise, desquamation des mains en doigt de gant après 10j. Bras et jambes = froid et sec = staph epidermis Sous les bras, aine = chaud et humide = bactéries +++ Visage et haut du corps = propionum acnès, m. furfur (pellicules) Folliculite Furoncle Impétigo Erysipèle Fasciite Scarlatine CAVE -->
!!''Vaginite'' ''infectieuse''
{{vulvuvaginite.jpg}}
{{germes-vulvovaginite.jpg}}
!!''Infections'' ''sexuellement'' ''transmissibles''
*''Facteurs de risque ''
**ATCD de MST
**Contact avec une personne infectée
**Sexuellement active <25ans
**Nouveau partenaire dans les 3 derniers mois
**RS non protégés
**Homeless, drogues
!!!Trichomoniase
*cf vaginite
!!!Chlamydia trachomatis
*La plus fréquente, souvent associée au gonocoque
*Présentation clinique
**Asx 80%
**Pertes endocervicales muco-purulentes.
**Syndrome uréthral (dysurie, pollakiurie, pyurie, pas de bactérie à la culture)
**Douleur pelvienne
**Saignements post-coitaux ou intermenstruel
**Partenaire sexuel symptomatique
*''Investigation'' : PCR
**Dépistage : groupe à haut risque, durant la grossesse, lors de l'initiation de la contraception orale
*''Traitement'' : azithromycine 1g PO en d.u, traiter le partenaire
*''Complications''
**Salpingite, PID
**Inflammation de la capsule hépatique (Fitz-Hugh-Curtis syndrome)
**Artrite réactive, conjonctivite, urétrite
**Infertilité (obsutrction tubaire post salpingite)
**GEU
**Douleur pelvienne chronique
**Infection périnatale : pneumonie, conjonctivitie
!!!Nesseria gonorrhea
*''Présentation clinique ''
**Asx
**Pertes endocervicales muco-purulentes.
**Syndrome uréthral (dysurie, pollakiurie, pyurie, pas de bactérie à la culture)
**Douleur pelvienne
**Saignements post-coitaux ou intermenstruel
**Partenaire sexuel symptomatique
*''Investigation'' : PCR, gram (diplocoque gram- intracellulaire)
**Dépistage : groupe à haut risque, durant la grossesse, lors de l'initiation de la contraception orale
*''Traitement'' : ceftriaxone IM et azithromycine PO + traitement partenaire
!!!HPV
*IST la plus fréquente
*Beaucoup de sous-types (6-11 : faible risque, 16-18 : haut risque)
*''Présentation clinique''
**Asymptomatique en général
**Verrues génitales (condylome)
***Zone anale, périanale, pénis, vulve, vagin, col
***Traitement : cryothérapie, électrocautérisation, excision au laser, thérapie topique.
*''Investigations'' : cytologie (pap test), colposocpie
*''Traitement'' : excision selon le grade
*''Prévention'' : vaccin
!!!HSV génital
*90% HSV2, 10% HSV1
*''Présentation'' ''clinique''
**Asx
**Prodromes (prurit, brulure) puis ulclération nombreuses et douloureuses 7-10j après le RS (lésions contagieuses).
**ADP inguinale, EF, malaise en général lors de la primoinfection
**Dysurie et rétention urinaire si la muqueuse uréthrale est affectée
**infection récurrente : moins sévère, moins fréquente, plus faible durée
*''Investigations'' : culture virale si lésions, cytologie, sérologie
*''Traitement'' : acyclovir
!!!Syphilis
*''Primaire'' : 3-4 semaine après exposition, chancre indolore sur la vulve, le vagin ou le col. ADP inguinale insensible.
*''Secondaire'' : 2-6mois après infection, malaise, anorexie, ADP diffuse, rash maculopapulaire généralisé (paumes, plantes, tronc, membres), condylomata lata (lésions grises), sérologie +
*''Latente'' : sérologie +
*''Tertitaire'' : SNC (tabes dorsalis, parésie général), CV (anévrisme de l'aorte), gomme vulvaire
*''Congénitale'' : anomalies foetales, stillbirth, décès néonatal
*''Investigations'' aspiration de l'ulcère : microsocpie ; VDRL
*''Traitement'' : pénicilline
{{syphilis.jpg}}
!!!HIV
*On connait
!!''Bartholinite''
*''Etiologie'' : anaérobe et polymicrobienne (N. gonorrhoea, C. thrachomatis, E.coli, P.mirabilis, streptocoque spp.)
**Blocage du canal
*''Présentation'' ''clinique'' :
**Gonflement unilatéral et douleur à l'ouverture inférieure et latérale du vagin
**S'asseoir et marcher peuvent devenir difficile / douloureux
*''Traitement '':
**Bains de siège, compresses chaudes
**ATB : céphalexin x1 semaine
**Incision et drainage sous anesthésie locale avec placement d'un cathéter pour 2-3 semaines
{{abces-bartolin.jpg}}
!!''PID''
*20% des admissions hospitalières en gynécologie
*Inflammation du tractus génital supérieur (endomètre, trompes, ovaires, péritoine pelvien)
!!!Etioloige
*C trachomatis +++
*N gonorrhea ++
*Flore endogène : E. coli, Staphylocoque, Streptocoque, Entérocoque, etc. (associé à l'instrumentation, souvent cause de PID récurrente)
!!!FR
*Âge <30ans
*Douches vaginales
*Comportement sexuel à risque (cf MST)
*DIU (dans les 10j suivant l'insertion)
*Procédures gynécologiques invasives
!!!Présentation clinique
*2/3 asx
*Fréquent : EF >38, 2°, douleur abdominale basse, pertes anormales (cervicales ou vaginales)
*Maladie chronique (chlamydia ++) : douleur pelvienne constante, dysparéunie, masse palpable
!!Diagnostic
{{PID-diagnostic.jpg}}
!!!Traitement
*ATB à large spectre : ceftriaxone + doxycycline p.ex
!!Complications (I FACE PID)
*Infertility (13% si 1 épisode, 36% si 2)
*Fitz-Hugh-Curtis syndrome
*Abscesses
*Chronic pelvic pain
*Ectopic pregnancy
*Peritonitis
*Intestinal obstruction
*Disseminated infection (sepsis, endocarditis, arthritis, meningitis) (-> bactériémie)
*//Adhésions//
{{nosocomial.jpg}}
!!Définition
*les ''Infections Nosocomiales'' sont des infectins acquises ''>48h'' après admission à l'hopital.
*Les ''Facteurs de Risque'' pour attraper d'une Infection Nosocomiale sont:
**''Séjour prolongé''
**''Traitement ATB''
**''Chirurgie''
**''Soins Intensifs''
**''Colonisation d'un organisme résistant'' (présence du germe sans infection)
**''Immunosuppression''
*l'''Hygiène des Mais'' est essentielle pour les prévenir. Les ''5 indications ''du lavage de main sont:
*#''Avant ''de toucher le patient
*#''Avant'' un geste aseptique (contact muqueuse ou peau non-intacte)
*#''Après'' l'exposition à un liquide biologique (sauf sueur)
*#''Apres'' avoir touché le patient
*#''Après'' avoir touché les affaires du patient
*Les ''Germes'' inciriminés sont
**''E.coli''
**''Enterocoque''
**''MRSA''
**''MSSA''
**''C.difficile''
**''P.aeroginosa''
**...
!!Clinique
//Manifestations les plus fréquentes//
*''Bacteriémie''
*''Pneumonie''
*''Infection urinaire''
*''Infection du site chirurgical''
undefine
![ext[Infertilité.pdf|./pdf/Infertilité.pdf]] <!-- Texte caché pour la recherche Facteur utérin: plus difficilement impliqué comme facteur unique mais plutôt comme facteur associé. • Utérus myomateux: probable effet si impact sur la cavité ou plus que 5 cm intra-mural ou si impact sur départ des trompes. • Polype intracavitaire: ( démontré si 1 cm, discuté en dessous.) • Adénomyose: probable diminution de l’implantation embryonnaire. • Malformations: plutôt effet sur risque d’avortement, d’accouchement prématuré etc. effet moins connu sur l’infertilité. Fibrome sous muqueux Etiologies masculines: Insuffisance testiculaire causée par : Cryptorchidie : stérilité dans 25 à 70% des cas de cryptorchidie unilatérale (retard de maturation des spermatogonies et des cellules de Leydig (observable dès la naissance, aggravées à partir de 2 ans), chute du nombre de spermatogonies observée dès l’âge de 2 ans). Orchites (inflammation/infection testiculaire entraînant des troubles de la spermatogenèse et l’atrophie testiculaire). Ischémie (torsions testiculaires), traumatismes. Altérations toxiques: radiothérapie, chimiothérapie, médicaments, tabagisme, alcoolisme, facteurs environnementaux tels que les disrupteurs endocriniens, dont on pense actuellement qu’ils sont une des causes de la baisse générale de la fertilité masculine dans les pays industrialisés (pesticides, plastiques alimentaires, métaux, etc.). Varicocèle: dilatation du système veineux entraînant un trouble circulatoire provoquant une élévation de la température dans le testicule qui perturbe la spermatogenèse (spermogrammes anormaux dans 20 à 40% des cas). Microdélétions du chromosome Y et anomalies du caryotype (3 régions : AZFa, AZFb, AZFc sont sur le chromosome Y et leur délétion entraîne une Infertilité). Etiologies masculines: Troubles endocriniens : Hypogonadisme (origine hypothalamique, hypophysaire ou périphérique) pouvant résulter d’un déficit congénital (anomalies génétiques de GnRH, LH, FSH ou de leurs récepteurs, anomalies chromosomiques, dysgénésie ou agénésie) ou d’un déficit acquis (tumeurs hypothalamiques ou hypophysaires, maladies générales et chroniques). Troubles obstructifs : Congénital : agénésie bilatérale des canaux déférents ABCD (mucoviscidose génitale) Acquis : Inflammation/infection des glandes annexes (prostate, vésicules séminales), des voies génitales (épididyme) ou des voies urinaires entraînant leur altération fonctionnelle ou leur obstruction, Iatrogène : vasectomie, cure de hernie inguinale avec lésion du canal déférent. Causes Diverses Problèmes sexuels Infertilités auto-immunes : Auto-anticorps anti-spermatozoïdes provenant du contact pathologique entre antigènes de surface des spermatozoïdes et cellules immunitaires suite à un traumatisme. Idiopathique : fréquente Etiologies masculines: Urétrite à Gonocoque Bilan d’infertilité: A débuter: • Pour tous les couples: peut être proposé après 1 an de rapports sexuels réguliers sans avoir obtenu de grossesse. • Certaines situations feront proposer un bilan après 6 mois déjà: • Troubles ovulatoires clairs, pathologie tubaire connue, femmes à partir de 35 ans etc. • D’autres feront proposer une prise en charge avant même d’avoir testé la fertilité: préservation de la fertilité avant un traitement gonado toxique. Bilan d’infertilité: une anamnèse détaillée: FEMME: Age Origine ethnique Désir d'enfants depuis … Grossesses conçues dans le couple ou lors d’union(s) antérieures(s) Antécédents familiaux: stérilité, avortements spontanés, maladies héréditaires, ménopause précoce Antécédents médicaux: maladies chroniques, tuberculose, endocrinopathies, médicaments. Antécédents chirurgicaux: appendicectomie, péritonite. Antécédents gynécologiques: Contraception antérieure, MST, PID, vulvovaginites, cervicites; opérations gynécologiques (abdominales, curetages, cervicales) Ménarche, modifications du cycle et cycle actuel, dysménorrhée, dyspareunie. Habitudes de vie: profession, tabac, alcool, drogues, fréquence et qualité des rapports; troubles sexuels. Bilan d’infertilité: une anamnèse détaillée: HOMME: Age Origine ethnique Grossesses avec partenaires antérieures Antécédents familiaux: stérilité, avortements spontanés Antécédents médicaux et chirurgicaux: maladies chroniques; infections récidivantes, états fébriles, allergies; médicaments, radiothérapie. Troubles urogénitaux: cryptorchidie; orchite (oreillons); torsion du cordon spermatique; épididymite, prostatite, urétrite, cystite; traumatisme testiculaire. Opérations urogénitales: orchidopexie, hernie inguinale, orchidectomie, varicocèle, opérations prostatiques, vésicales, urétrales. Habitudes de vie: profession, tabac, alcool, drogues, fréquence et qualité des rapports; troubles sexuels. Bilan d’infertilité: Examen clinique conclusions du bilan: • A la fin de chaque bilan, on propose une attitude au couple, selon les possibilités d’après résultats des 2 partenaires. • Il ne s’agit toujours que de proposition, puis c’est au couple de décider s’il veut avoir recours à une procréation médicalement assistée (PMA) ou pas. • Un soutient psychologique est toujours proposé mais pas obligatoire. • Les différentes possibilités sont: • Abstention ( si situation défavorable ou désir du couple) • Augmentation de la fertilité naturelle: conseils, information au couple (timing RS). • Chirurgie : tubaire, utérine, cure de varicocèle. • Induction de l’ovulation • Inséminations artificielles avec sperme du coinjoint (IAC), avec sperme de donneur IAD. • Fécondation in vitro. Myomectomie hystéroscopique Hystéroscope mono/ Bipolaire Risques: Perforation limites séreuse Intoxication à l’eau max 45 min, bilan entrées sorties. Malformation type distilbène -->
!! Définition
*l '''IMC'' est une ''infirmité motrice suite a de multiples causes pré-natales''. Il s'agit d'une pathologie non héréditaire, non du a la prématurité ni a l'asphyxie.
*L'''espérance de vie'' dépend essentiellement du degré d'atteinte motrice et du degré d'atteinte intellectuelle.
!! Etiologie
*L'étiologie est souvent ''obscure''. Les seules causes identifiables sont des ''asphyxies anténatales'' et des ''lésions post-natales'' (''infections'', ''asphyxies'', ''traumas'').
*La pathologie est aussi associée avec un ''faible poids de naissance''
!! Clinique
*Au niveau moteur on notera des ''postures et tonus anormaux''
*On notera des ''retards de développement'' et des ''retards d'apprentissage''
*L'enfant peut présenter une ''vision ou audition anormale''.
*Il peut avoir aussi une ''microcéphalie'' ou des ''crises d'épilepsies''.
{{infirmite_motrice_cerebrale.jpg}}
undefine
@@background-color:Lightcoral; !''Inflammatoire'' @@ <<list-links "[tag[Inflammatoire.nucl]sort[title]]">>
//en construction...//
undefine
!Insomnie
!!Critères
Plainte subjective du patient d'avoir dies difficultés d'initiation ou de maintien du sommeil avec, en association à cette plainte nocturne, des difficultés de fonctionnement diurne.
*''Réveil précoce, difficulté d'endormissement, réveils fréquents ''(difficultés de maintien du sommeil)
*''Fréquence'' : ≥3x/sem
*''Durée'' : ≥3mois
*Dans des conditions convenables avec fenêtre temporaire acceptable.
*Impact avec fatigue la journée, problème de concentration/mémoire
*Somatique : Céphalées, inconfort gastro-intestinal
*Toujours exclure qu'il n'y ait pas un problème somatique ou psychiatrique qui soit la cause de ce problème.
*//Il n'y a pas de nombre d'heure dans la définition, c'est quelque chose qui est individuel et génétiquement définit - court dormeur : 3-4h et long dormeur : 9-10h//
*//L'âge est aussi un facteur : les BB dorment 22h puis diminue. A l'adolescence, il faudrait 9h, puis ça diminue avec le temps.//
{{Capture d’écran 2016-10-21 à 13.58.27.jpg}}
{{Capture d’écran 2016-10-21 à 13.58.34.jpg}}
Il n'y a pas besoin d'examen complémentaire pour poser le diagnostic, il suffit que le patient vienne avec sa plainte et ait les critères.
En général, le diagnostic d'insomnie se pose avec l'aide des agendas du sommeil, de l'actimétrie, de différents échelles psychométriques ± polysomnographie en laboratoire (si suspicion de trouble respiratoire du sommeil, jambes sans repos, parasomnies, narcolepsie, etc).
!!Somnolence
Il y a une ''diminution de la vigilance''. Echelle d'Epworth permet de définir.
Il n'y a en général pas de problème de sommeil la nuit (un insomniaque somnolent a plus de risque d'avoir un problème sous-jacent)
//Il est important de décrire quand et quelle activité font somnoler et la définition de la somnolence. P.ex SAOS sera somnolent toute la journée. //
!!Fatigue
Sentiment, plus ''vague et subjectif''. Ça peut être psychologique plus que physique.
!!Phases
*''Phase 1''- Pas d'insolmie
**''Prédisposition''/facteur de vulnérabilité (fond anxieux ou perfectionniste)
*''Phase 2''- Insomnie à court terme (≤3mois)
**Facteurs ''précipitants'' : stress, changements hormonaux, substances, voyage, médicament, été - chaud et lumière -, bruit, maladie somatique, altitude
**Au bout d'un moment, il y a une adaptation et ça disparait
**Si les facteurs prédisposants sont suffisants, même les personnes non prédisposées peuvent subir une insomnie.
*''Phase 3''- Insomnie chronique
**Facteurs ''perpétuants'' (maintien de l'insomnie en place)
**Facteurs ''comportementaux'' (mauvaise hygiène du sommeil, écrans le soir, rompre association lit-sommeil en faisant d'autres choses au lit - stratégie de coping-, horaire : l'insomniaque se couche trop tôt -> temps excessif passé au lit, irrégularité de rythme)
**Facteurs ''cognitifs'' (anxiété car se dit qu'arrivera pas à dormir -> SNS + au niveau cérébral bloque l'endormissement, effort pour dormir fait la même chose)
**On peut agir sur les facteurs perpétuants.
{{Capture d’écran 2016-10-21 à 17.55.26.jpg}}
!!Etiologie
''Hyperéveil'' chez les insomniaques :
*Somatique (système sympathique up : augmentation de la fréquence cardiaque, du métabolisme de base, ou d’une augmentation de l’activité de l’axe hypothalmo-hypophyso-surrénalien)
*Cortical (augmentation de la quantité des fréquences rapides de l’EEG au réveil et sommeil)
*Cognitif (incapacité « d’arrêter de penser » avec la présence de pensées intrusives et/ou d’une anxiété)
!!Co-morbidités
*Insomnie ''sans comorbidités : 10%''
*Insomnie'' avec comorbidités : 90%''
**''Psychiatrique'' (n°1 : 60%) : dépression, trouble anxieux, PTSD, trouble psychotique, démence.
***//Les patients souffrant d'insomnie comorbide nécessitent souvent une prise en charge spécifique et un traitement pharmacologique adapté (antidépresseurs sédatifs, antipyschotiques, anyxiolytiques, en fonction de la co-morbidité)//
**''Maladie'' ''somatiques'' (hyperthyroïdie, Cushing, RGO acide réveil la nuit, asthme, problèmes cardiaque et pulmonaires, parkinson, douleurs)
***Maladies neurologiques (Parkinson)
***Maladies CV (IC avec dyspnée nocturne)
***Maladies broncho-pulmonaires (asthme nocturne)
***GI (RGO acide nocturne)
***IR
***Maladies rhumatismales (douleur)
**''Médicaments''/''substances'' (OH perturbe le sommeil - car initialement endort car agit sur GABA-A, mais métabolite toxique actifs -> SNS, effet rebond. Corticostéroïdes. Quinolones empêchent de dormir (antagoniste GABA). Ne pas oublier de demander si prend des hormones coupe-faim -> hormones thyroïdiennes et amphétamines)
**''Autres troubles du sommeil'' (SAOS, impatience des jambes - syndrome des jambes sans repos, cauchemars etc)
__''SAOS''__
{{Capture d’écran 2016-10-21 à 15.29.53.jpg}}
*Traitement : C-PAP, propulseur mandibulaire, traitement positionnel
''__Impatiences des MI__''
*Problème sous-diagnostiqué
*Touche 2-5% des la population
*=> ''insomnies d'endormissement''
*Sensations désagréables des MI, rarement des MS :'' picotements, décharges électriques, chaleur, tension, engourdissement'', etc.
*Surviennent au repos, surtout en cours de soirée,'' au lit -> besoin impérieux de bouger'' (mouvements = soulagement au moins partiel)
*Parfois nécessite des rituels ± complexes (masser, douches froides), qui retardent le moment du coucher et l'endormissement.
*''Pathologie des mouvements périodiques des membres'' est souvent associée (80%).
**Mouvements de jambes / bras durant la nuit
**Diagnostic plus difficile à poser (inconcient). Signes : fatigue dans les membres le matin au réveil ou lit défait. Hétéro-anamnèse importante.
**Diagnostic : polysomnographie en laboratoire
*''Traitement'' : agonistes dopaminergiques ou certains anti-épileptiques
''__Troubles du rythme circadien__''
Faciles à confondre avec une insomnie primaire
*''Retard de phase''
**Impossibilité de s'endormir dans un créneau horaire habituel (-> ''somnolence et endormissement surviennent vers 1-6h du matin'')
**Problématique si le patient doit se lever le matin à une heure précise (-> privation de sommeil ou insuffisance de sommeil)
**Facilement confondu avec insomnie d'endormissement
**Fréquent chez le sujet jeune (apparaît à l'adolescence) et peut être aggravé par une mauvaise hygiène de sommeil.
*''Avance de phase''
**''Endormissement survient vers 18-21h'' et le sujet se réveille tôt le matin (2-5h du matin).
**Peut être confondue avec une insomnie terminale (réveil précoce)
**Mais le patient ne présente aucune raccourcissement de la durée du sommeil. C'est uniquement le timing qui n'est pas convenable.
**Fréquent chez le sujet âgé
*Peuvent être aggravés par le comportement du patient, mais l'étiologie n'est pas d'origine psychologique.
*C'est un ''problème de fonctionnement de la régulation circadienne du sommeil et une modification de la sensibilité aux synchroniseurs extérieurs''.
*''Traitement'' : consignes de chronothérapie (avance ou retard progressif de l'heure du coucher et du lever), luminothérapie et/ou traitement par mélatonine.
''Parasomnie''
*''Somnambulisme, terreurs nocturnes, cauchemars''
*Rare motif d'insomnie. Mais le patient peut se réveiller après un accès et rester réveillé en raison d'une anxiété, surtout après un cauchemar.
*En général, ''pas de traitement spécifique'' (parfois si épisode parasomniaque très violent : médicament ou thérapie cognitivo-comportementale)
''Narcolepsie''
*Se plaignent rarement d'insomnie
*Maladie rare, provoque une ''somnolence diurne excessive''.
*''Symptômes'' :
**Accès de sommeil inopinés dans la vie quotidienne (alors que insomniaque a une impossibilité de s'endormir aussi bien dans la journée qu'au cours de la nuit)
**Sommeil très perturbé (insomnie de maintien, surtout après une certaine durée de maladie)
**Cataplexies (pertes du tonus musculaire déclenchées par les émotions)
**Paralysies du sommeil (absence de tonus musculaire persistante après le réveil)
**Hallucinations hypnagogiques et hypnopompiques
*''Traitement'' : psychostimulants (modafinil, méthylphénitdate) ou antidépresseurs ou oxybate de sodium.
!!Traitement
*<font color = "darkviolet"> ''Thérapie cognitivo-comportementale''</font> sur 6-8 séances pour les insomnies chroniques sans co-morbidités
**LE traitement de choix (si sans co-morbidité) car traite la cause des facteurs perpétuants.
**Le protocole comporte des parties éducatives, comportementales et cognitives, avec comme but atténuation des facteurs de maintien.
!!!Médicaments
*''Hypnotiques'' (surtout dans le cadre d’un traitement à court terme)
*''Antidépresseurs sédatifs'' (en cas de comorbidité dépressive) (Mirtazapine, Trazodone). (Boostant = ISRS)
*''Antipsychotiques'' (p. ex. chez les patients présentant une insomnie comorbide avec un trouble psychotique)
*''Mélatonine'' (indication relativement restreinte, nécessite une bonne coopération du patient : utilisée à des heures inappropriées peut avoir un effet néfaste au niveau du rythme circadien)
!!!Benzodiazépines
*''Zolpidem'' : pas une BZD (mais même mécanisme), agoniste GABBA-A.
*''BDZ'' : agoniste GABA-A.
*''Effet agoniste GABA-A''
**Sédatif, anxiolytique
**Hypnotique
**Somnifère
**Myorelaxant
**Anti-épileptique
**Amnésiant
*''EI'' :
**Sédation résiduelle au réveil (limité si on donne des demi-vies courtes)
**Amnésie (midazolam +++ - on utilise lors de gestes endoscopiques)
**Dépression respiratoire et coma (mais large marge thérapeutiques donc moins de risque)
***FR : si opioïdes, inhibiteur des cytochromes, surdosage, BPCO, IC, syndrome hypoventilaiton-obésité (car rétention de CO2)
*''Demi-vie ''permet de déterminer ce qu'on choisit (inducteur du sommeil avec courte demi-vie p.ex). Mais si demi-vie courte, risque d'effet rebond (7 demi-vie pour formellement éliminer, mais on peut compter 4 demi-vie = reste 6%)
*Tous deux font une dépendance car passent rapidement la BHE
!!Notes
__''Dépendance''__
*''Physique'' = pharmacologique : adaptation de l'organisme à la présence de la substance (manifestation : syndrome de sevrage lors d'arrêt qui est l'effet inverse). Tout le monde a cette dépendance physique (diminution progressive pour diminuer le risque de dépendance).
*''Psychique'' = comportemental = addiction. Notamment tolérance, craving, etc. Le médicament peut être une stratégie importante de coping.
{{IC_gauche_droite.jpg}}
!!Définitions
*L'''Insuffisance Cardiaque'' est le résultat au long cours de plusieurs pathologies cardiaques. Les ''deux pathologies ''les plus fréquentes causant l'IC sont:
*#La ''Maladie Coronarienne'' Athérosclérotique, causant généralement une I''C Systolique''.
*#L'''Hypertension'', causant généralement une ''IC diastolique''.
*La ''Classification Temporelle'' de l'IC comprend :
*#''IC aigue'' qui peut évoluer en
*#''Décompensation d'IC aigue'' qui termine en
*#''IC Chronique''
{{IC_temporel.jpg}}
*La ''Classification Fonctionelle'' de l'IC comprend:
**L'''IC systolique'' ou //''IC à FEJV diminuée''//, définie par une ''FEVJ <35%'',
**L'//IC a FEVJ intermédiaire//, ou il y a une //Zone grise//, définie par une //FEVJ à 30-50%//
**L'''IC diastolique'' ou //''IC à FEJV normale''//, définie par une ''FEVJ >50%''
{{IC_systolique_diastolique.jpg}}
*La ''Classification NYHA'' évalue la répercussion de la Dyspnée:
|!Classification|!Symptomes|
|''Classe I''|Pas de Dyspnée à l'effort|
|''Classe II''|Dyspnée légère lors d'effort|
|''Classe III''|Dyspnée sévère lors d'effort|
|''Classe IV''|Dyspnée au moindre effort|
*La ''Classification de Killip'' évalue l'IC post-infarctus
|!Classe|!Symptomes|
|''Killip I''|Pas de signes d'IC|
|''Killip II''|Présence d'un B3 ou de Râles pulmonaires|
|''Kilip III''|Odème Pumlonaire Aigu|
|''Kilip IV''|Choc cardiogène|
!!Clinique
*''Dyspnée'' et ''Fatigue'' d'abord à l'effort, puis au repos
*''Orthopnée'' (devoir mettre des coussins) qui peut aussi donner une ''Dyspnée Paroxystique nocturne'' (devoir se lever pour respirer) en fonction de la sévérité
*''Toux'' surtout nocturne
*''[[Turgescence jugulaire|Turgescence_jugulaire.jpg]]'' et ''Reflux Hépatojugulaire'' (TJ= VJE, RHJ= VJI en appuyant sur le ventre)
*''Odèmes ''dans les jambes prenant le godet, ainsi que ''Prise de poids'' du patient
*''[[Râles crépitants fins|rales_crepitants_fins.mp3]]'' (comme du //velcro// ou des //pas dans la neige//)
*''Matité pulmonaire'' (Epanchement pleural)
*''Ascite''
*''Hépatomégalie''
*''Choc de pointe déplacé''
*''Souffle Cardiaque''
*Présence d'un [[B3 à l'auscultation|bruits_cardiaques.jpg]] (bruit [[juste après B2|bruits_cardiaques.jpg]])
!!IC Aigue
*L'''IC aigue'' a deux origines:
*#''IC nouvelle'', due p.ex à un IM, une tamponnade, une arythmie, une valvulopathie, une cardiomyopathie ou un choc
*#''Décompensation d'IC chronique'' dues p.ex à une non-compliance, une hypervolémie (sel), une infection, une Insuffisance rénale, une BPCO, une arythmie, un infarctus ou des B-Bloqueurs.
*Elle nécessite les ''Investigations'' suivantes:
**''ECG''
**''RX thorax''
**''BNP'' et ''pro-BNP''
**''Echo-cardio''
!!Traitement
*Les ''Traitements'' sont divers et variés, ils impliquent notamment:
**''Traiter la Cause'' ayant donné ou précipité l'IC aigue
**''Réanimation'' avec voies veineuses, oxygène, monitiring
**''Diurétiques'' (si patient hypervolémique)
**''IECA''
**''Beta-bloquants'' (pas pour l'IC décompensée)
**''Antagonistes de l'Aldostérone''
**''ARA''
**''Digoxine''
{{insuffisance_hepatique_aigue.jpg}}
!!Définitions
''Insuffisance hépatqiue aigue'': Facteur de Coagulation V > 50%
''Hépatite Fulminante'': Facteur de Coagulation V > 50% et Encéphalopathie Hépatique suite à un ictère récent < 2sem
''Hépatite sub-fulminante'': Facteur de Coagulation V > 50% et Encéphalopathie Hépatique suite à un ictère datant entre 2sem - 3 mois
{{encephalopathie_hepatique.jpg}}
!!Diagnostic
''Présence d'une cause'':
*''Hépatite virale Aigue''
*''Paracetamol'', ''Amanite Phalloïde'' et autres médicaments
*Stéatose Aigue de Grossesse
*Maladie de WIlson
!!Prise en charge
*''Soins intensifs''
*''Attention à l'hypoglycémie'' souvent des les insuffisances hépatiques aigues
*''Bilan labo complet'' (FSC, crase, chimie, electrolytes, sérologies, toxico,...)
*''US hépatique'' et ''IRM ou CT cérébral'' si encéphalopathie
*Lactulose pour l'Encéphalopathie
*gestion de la crase
*''Transplantation hépatique en urgence'' si indiction
{{amanite_phalloide.jpg}}
{{insuffisance_respiratoire_aigue.jpg}}
!!Définition
*l'''Insuffisance Respiratoire Aigue'' est définie par une ''Saturation <92%'' sans forcément impliquer une détresse respiratoire.
*les ''sources'' sont nombreuses:
//défaillance de l'échange//
*''Atelectasie'' //(shunt)//
*''Obstruction d'une bronche'' //(shunt)//
*''Pneumonie'' //(shunt)//
*''Asthme'' //(shunt)//
*''Embolie Pulmonaire'' //(espace mort)//
//défaillance de la pompe//
*''Fatigue respiratoire''
*''Alcalose métabolique''
*Overdoses
!!Prise en Charge d'Urgence
*''Oxygène'' par masque à débit maximal, voire ''VNI''
*''SCOPE'' (pulsoxymètre, brassard à tension, ECG)
*''VVP'' gros veinflon
*Il faudra surement intuber le patient
*''Gazométrie'' artérielle
*''RX thorax'' (penser a l'EP si normal)
!!Causes et Traitements
*''Obstruction des VAS'': Libérer la VA (main, pince, nasofibroscope), Intubation, Cricotomie d'urgence
*''Crise d'Asthme'': Prednisone, Beta-Agonistes, Anticholinergiques
*''Epanchement pleural / aérien'': Drainer l'Epanchement
*''OAP'': Diurétiques et Vasodilatation
*''EP'': Heparine, ACO, fibrinolyse / thrombectomie
{{Oxygenation_schema.jpg}}
!! Définition *L'''insuffisance surrénale'' est un état de dysfonction de la glande surrénale avec des '' déficit en cortisol''. *Il existe ''deux grandes causes'': ** Un ''arrêt brusque d'une corticothérapie'' est de loin la cause la plus importante, surtout dans les corticothérapies chroniques. Elle induit une ''insuffisance surrénale secondaire aiguë'', qui est une ''urgence médicale'' et doit être évitée à tout prix ! Une autre cause possible serait une ''tumeur hypophysaire'' avec diminution d'ACTH. ** La ''maladie d'Addisson'', ou ''insuffisance surrénale primaire'' est plus rare. Elle est surtout du à une cause ''autoimmune'' ([[pays indistrualisés|addison_kennedy.jpg]]) ou à la ''tuberculose'' (tiers-monde). !! Clinique *La clinique est ''différente'' entre une insuffisance primaire ou secondaire: |!|!Insuffisance secondaire|!Maladie d'Addison| | !Hyperpigmentation (peau,muqueuses) | - | OUI | |!Fatigue, Faiblesse, Perte de poids| OUI | OUI | |!Hypotension Orthostatique| OUI | OUI | |!Déficit d'aldosterone (hypekalémie, hyponatremie, perte hydrique)| - | OUI | |! taux d'ACTH| Diminué | Normal | !! Investigation *il faut faire un ''test au Synacthène (ACTH)'', en mesurant le cortisol au temps 0 puis à 60min en réponse à l'injection |!|!Insuffisance secondaire|!Maladie d'Addison| |! t = 0 min| mesure du taux de base | mesure du taux de base | |! t = 60 min|taux de base doublé ou triplé | taux de base n'arrive pas à doubler | !! Traitement *L'''insuffisance surrénalienne secondaire'' se traite par des ''glucocorticoïdes oraux'' quotidiens (hydrocortisone ou prednisone) *L'''insuffisance surrénalienne primaire'' se traite par ''glucocorticoïdes oraux'' quotidiens (hydrocortisone ou prednisone) et ''minéralocorticoïdes oraux'' (fludrocortisone) *L'''insuffisance surrénalienne aigue'' est ''dangereuse''! elle se traite par ''glucocorticoïdes IV'' (hydrocortisone) et ''remplissage de fluides'', ainsi qu'ajout de glucose si le patient fait des hypoglycémies par manque de réaction adrénergique.
undefine
undefine
undefine
![ext[guide_diabete.pdf|./pdf/guide_diabete.pdf]]
undefine
undefine
undefine
{{intox_CO.jpg}}
!!Définition
*le ''Monoxyde de Carbone'' est un Gaz:
**''Inodore''
**''Incolore''
**''Non Irritant''
**Absorbé rapidement par voie respiratoire
*On le trouve dans les ''mauvais chauffages'', les ''garages mal ventilés'',
*Au niveau du ''Sang'': il va se ''fixer sur l'Hb'' et donner de la ''carboxyhémoglobine HbCO'', car il a une ''affinité 250x'' plus élevée pour l'Hb que l'Oxygène
*Au niveau du ''Muscle'': il fa se fixer sur la myoglobine et former de la ''carboxymyoglobine''
**Au niveau de la ''mitochondrie'' il va faire un ''blocage mitochondrial'' entrainant une ''hypoxie''
*L'''Elimination'' est spontanée par la respiration, mais prend du temps:
|!''Air normal''| Elimination en'' 2j''|
|!''FiO2 100%''| Elimination en ''12h''|
|!''O2 Hyperbare''| Elimination en ''90min''|
!!Clinique
''Intoxication Hb-CO'': Hypoxique, Réversible, potentiellement Létale
*''Céphalées''
*''Vertiges''
*''Toux'' -> ''OAP''
*''Infarctus''
*''Coma''
''
Syndrome Post-Intervallaire'' ''Hp-CO'' (bloquage mitochondrial): Hypoxique, Irréversible, Séquellaire
*10-30% des Intoxications
*1 à plusieurs ''semaines'' post-intoxication
*''Toubles du comportement'' / ''troubles cognitifs'' / ''troubles mnésiques''
!!Invesitgations
*''CO'', ''Hb-CO'', ''CO percutanée''
*Les Valeurs sont différentes chez les fumeurs.
{{CO_fumeur.jpg}}
!!Traitement
*''Oxygène'' minimum ''au masque'' avec une ''FiO2 à 100%'' et pendant ''12h''
*Oxygène Hyperbare si disponible
{{CO_courbe.jpg}}
!!Généralités
*L'''intoxication au plomb'', ou saturnisme, est particulièrement nocif pour les ''enfants''. On le trouve surtout dans les ''maisons anciennes'' (dans la peinture). Chez les adultes, c'est surtout au travail que l'exposition à lieu.
*On le ''diagnostic'' par la ''plombémie'' sanguine élevée, associée à une ''anémie microcytaire''.
*La ''clinique'' comporte des ''douleurs abdominales'' et des ''symptômes neurologiques''
*Chez l'enfant, le plomb ''s'accumule dans les métaphyses'' en croissance, ce qui donne à la ''rx'' des ''bandes hyperdenses''.
*Le ''traitement'' passe par des ''chélateurs du plomb'': le ''EDTA'' et le ''dimercaprol''.
{{intoxication_plomb_rx.jpg}}
undefine
!! Maintien des fonctions vitales #''ABCDE'' , avec monitoring de la tension, voie veineuse avec remplissage ~NaCL et saturomètre #''Cocktail'' des intoxications en fonction des symptômes: #*''Oxygène'' pour tout le monde #*''Glucose + Thiamine'' si hypoglycémie ou si glycémie inconnue (contre l'encéphalopathie de Wernicke) #* ''Naloxone'' (antagoniste Opiacés) si hétéroanamnèse positive, traces d'injection, patient connu ou si myosis et bradypnée. Attention aux fréquents syndromes de sevrages (convulsions) #* ''Flumazenil'' (antagoniste Benzo) qui a une demi-vie courte donc un intérêt surtout diagnostic mais peut faire des troubles du rythmes si intoxication mixte. Le donner si on a un doute diagnostic et peu de chance d'intoxication mixte. !! Identification des Toxiques * A l'''Anamnèse'', se renseigner si possible sur le ''type de substance'', sur la ''quantité'' prise, sur l'''heure de la prise'', sur le ''mode de prise'' ainsi que sur les ''antécédents'' du patient. *Le ''Toxidrome'' consiste à certains syndromes reliés à certaines substances. |!Toxidrome|!Clinique|!Mollécule| |''Sympathomimétique''|Agitation, HTA, Mydriase, tachypnée, sudations, tremor|Cocaïne, Amphétamine, Caféine| |''Opioïdes''|Bradypnée, Myosis, Dépression, coma, hypothermie, hypotension, bradycardie, traces d'injection|Opiacés| |''Anticholinergique''|Agitation, HTA, Mydriase, tachypnée, mais muqueuses sèches et rétention urnaire|Anti-histaminique, Atropine, tricycliques| |''Cholinergique''|Confusion, coma, bradycardie, myosis, salivation et lacrimation|Nicotine, Piolcarpine| |''Sérotoninergique''|Agitation ou Coma, Mydriase, tachycardie, HTA, tachypnée, tremor et rigidité , hyperrreflexie, myotonie |SSRI| *le ''Dosage toxicologique'' doit se faire de façon ciblée, car il prend du temps et ne change pas la prise en charge immédiate du patient. mais certains médicaments valent la peine d'être dosés, notamment le ''Paracétamol'' pour son antidote N-AC, la ''Digoxine'' pour le calcul de l'anticorps anti-digoxine, ou encore le ''Lithium'' pour décider si on fait une hémodialyse *Le Toxzentrum de Zurich (tel. ''145'') donne des plus amples informations sur les toxiques. !! Empêcher l'absorption des toxique *On donne surtout le ''Charbon activé'', les autres méthodes étant trop barbares (laxative, lavage gastrique,...) *Le Charbon activé est ''efficace <1h de la prise'', il permet de diminuer l'absorption intestinale de la substance. Les rares effets secondaires sont des nausées ou un risque d'inhalation si le patient est trop comateux (ce qui est une C-I). *Certaines substances comme le ''Lithium'' ne sont pas adsorbées par le charbon activé. !! Augmenter l'élimination *la ''Diurèse alcaline'' a comme principe d'alcaliniser le plasma avec du ''bicarbonate'' pour que des acides faibles tels que les ''Salicylates'' puissent passer sous forme ionique et ne pas être réabsorbées par le rein, entrainant la diurèse. On fait ce procédé pour les ''intoxications à l'aspirine'' typiquement. *l'''hémodialyse'' doit se faire pour les substances hautement toxiques. Par exemple le ''Lithium'' qui est mal éliminé du corps. !! Administration des Antidote *Un antidote idéal doit ne pas faire mal au patient sain, être spécifique, simple et bon marché et finalement influencer sur la morbidité et mortalité. |!Substance|!Antidote| |Opiacés|Naloxone| |Paracetamol|N-AcétylCystéine| |Benzodiazépines|Flumazénil| |Coumarines (AVK)|Vitamine K| |Digoxine|Anticorps Anti-Digoxine (FAB)| |Cyanure|Hydroxocobolamine, thiosulfate| |Beta-Bloquant|Glucagon|
![ext[invagination.pdf|./pdf/invagination.pdf]] <!-- Texte caché pour la recherche Intussusception Intussusception describes the invagination of proximal bowel into a distal segment. It most commonly involves ileum passing into the caecum through the ileocaecal valve (Fig. 13.6a). Intussusception is the commonest cause of intestinal obstruction in infants after the neo natal period. Although it may occur at any age, the peak age of presentation is between 3 months and 2 years. The most serious complication is stretching and constriction of the mesentery resulting in venous obstruction, causing engorgement and bleeding from the bowel mucosa, fluid loss and subsequently bowel perforation, peritonitis and gut necrosis. Prompt diag nosis, immediate fluid resuscitation and urgent reduc tion of the intussusception are essential to avoid complications. Presentation is typically with: • • • • • Paroxysmal, severe colicky pain and pallor – during episodes of pain, the child becomes pale, especially around the mouth, and draws up his legs. He initially recovers between painful episodes, but subsequently becomes increasingly lethargic May refuse feeds, may vomit, which may become bile stained depending on the site of the intussusception - A sausage shaped mass – often palpable in the abdomen (Fig. 13.6b) - Passage of a characteristic redcurrant jelly stool comprising blood stained mucus – this is a characteristic sign but tends to occur later in the illness and may be first seen after a rectal examination - Abdominal distension and shock. Usually, no underlying intestinal cause for the intus susception is found, although there is some evidence that viral infection leading to enlargement of Peyer’s patches may form the lead point of the intussuscep tion. An identifiable lead point such as a Meckel diver ticulum or polyp is more likely to be present in children over 2 years old. Intravenous fluid resuscitation is likely to be required immediately, as there is often pooling of fluid in the gut, which may lead to hypovolaemic shock. An X ray of the abdomen may show distended small bowel and absence of gas in the distal colon or rectum. Sometimes the outline of the intussusception itself can be visualised. Abdominal ultrasound is helpful both to confirm the diagnosis and to check response to treat ment. Unless there are signs of peritonitis, reduction of the intussusception by rectal air insufflation is usually attempted by a radiologist (Fig. 13.6c). This procedure should only be carried out once the child has been - 225 1 Gastroenterology Intussusception 13 Figure 13.6a Intussusception, showing why the blood supply to the gut rapidly becomes compromised, making relief of this form of obstruction urgent. Figure 13.6b A child with an intussusception. The mass can be seen in the upper abdomen. The child has become shocked. Figure 13.6c An abdominal X ray demonstrating an intussusception (see arrowhead), taken during reduction by air insufflated per rectum. - Figure 13.6d Intussusception at operation showing the ileum entering the caecum. The surgeon is squeezing the colon to reduce the intussusception. Summary Intussusception • Usually occurs between 3 months and 2 years of age • Clinical features are paroxysmal, colicky pain with pallor, abdominal mass, redcurrant jelly stool • Shock is an important complication and requires urgent treatment • Reduction is attempted by rectal air insufflation unless peritonitis is present • Surgery is required if reduction with air is unsuccessful or for peritonitis. -->
{{IRA.jpg}}
!!Définition
*l'''IRA'' //(Insuffisance Rénale Aigue)// correspond à un déclin rapide de la ''fonction rénale'' avec une ''augmentation de la créatinine sérique'' (prend un peu de temps à s'installer et avec une ''diminution du GFR''.
*Elle se définit suivant les critères ''RIFLE'' et ''AKIN''
|!RIFLE|!AKIN|!Critères|
|!Risk| !''I'' |''Créatinine >1.5x''|
|~|~|GFR < 25%|
|~|~|Urine < 0.5 ml/kg/h pdt. 6h|
|!Injury| !''II'' |''Créatinine > 2x''|
|~|~|GFR < 50%|
|~|~|Urine < 0.5 ml/kg/h pdt. 12h|
|!Failure| !''III '' |''Créatinine > 3x''|
|~|~|GFR < 75%|
|~|~|Urine < 0.5 ml/kg/h pdt. 24h|
|~|~|Anurie pdt. 12h|
|!Loss| !|''Dialyse > 1mois'' |
|~|~|Perte totale de fonction|
|!End-Stage|! |''Dialyse > 3mois'' |
|~|~|Perte totale de fonction|
*Les ''Odèmes'' et la ''Prise de poids'' et l'''Oligo-Anurie'' sont les symptômes les plus souvent présents
*une IRA n'est pas forcément oligurique/anurique, li peut y avoir des IRA non-anuriques
*L'IRA récupère bien chez 30% des patients, mais en général plus le patient est âgé, moins bon est le pronostic
''IRA Prérénale (30-50%)''
*Due à une ''Hypoperfusion rénale''. C'est la cause la plus fréquente d'IRA, souvent réversible. On parle d'//IRA Fonctionelle//.
*les ''causes'' possibles sont:
**''Hypovolémie'' (déshydratation, diurétiques, diarrhées/vomissements, brulures, hémorragies, choc)
**''IC Chronique'' (baisse du débit)
**Obstruction vasculaire rénale (occulsion des gros vx)
**Cirrhose avec syndrome hépatorénal
*les ''Facteurs Aggravants ''sont:
**les ACE, les AINS et les ARA
**Le veil âge
**l'Insuffisance Cardiaque
**l'insuffisance Hépatique
*La ''complication'' à long terme sera une ''Nécrose Tubulaire Aigue'' due à l'ischémie prolongée.
''IRA Rénale (10-20%)''
*Due à une ''Lésion parenchymateuse'' rénale.
*Les ''causes'' possibles sont:
**''NTA'' (nécrose tubulaire aigue) survenant surtout lors d'IRA prérénales ou encore via des toxiques (produit de contraste, hémoglobinurie, myoglobinurie, etc.)
**''Néphrites Interstitielles''
**''Glomérulonéphrites''
**''Autres pathologies rénales'' (Athérosclérose, SHU, PTT, CIVD, maladies systémiques, ...)
''IRA Post-Rénale (20-30%)''
*Dues aux ''obstructions'' dans les tubules ou en aval. Surtout risqué en cas de ''rein unique''.
*Les ''causes'' peuvent être:
**''Dépots Tubulaires'': oxalate, acide urique, myoglobine, hémoglobines, chaines légères, sulfonamides, aciclovir
**''Calculs urinaires'' et autres causes d'obstructions urinaires
undefine
{{IRC.jpg}}
!!Définition
*l'''IRC'' //(Insuffisance Rénale Chronique)// est définie par une diminution de la fonction rénale durant ''>3 mois''.
*Les ''causes'' les plus fréquentes sont:
**''Diabète''
**''Hypertension''
**Glomérulonéphrites Chroniques
**Obstructions
**Nephrites Interstitielles
**Maladie Polykystique
!!Clinique
''Cardio-vasculaire''
*''Hypertension'' due à une ''//rétention hydro-sodée//'' (le GFR diminué stimule le RAA)
**''IC Chronique'' (hypervolémie, hypertension, anémie)
**''Péricardite'' (urémie)
''Gastro-Intestinal''
*''Nausées / Vomissements'' (urémie)
*''Perte d'Appétit'' (urémie)
''Neurologique''
*''Lethargie / Confusion '' (urémie, hypocalcémie)
*Neuropathie périphérique (urémie)
''Hématologique''
*''Anémie'' normochrome normocytaire (baisse d'EPO)
*Hémorragie (urémie -> dysfonciton plaquettaire)
''Endocrine''
*''Hyperphosphatémie'' -> Moins de production de Vit.D -> ''Hypocalcémie'' -> ''Hyperparythroïdie Secondaire''
*Le tout causant une ''Ostéodystrophie Rénale'' (os affaiblit, fracture)
*''Prurit'' difficile à traiter
undefine
{{IAMI_exemple.jpg}}
!! Définition
*Le ''IAMI'' ou// Insuffisance Artérielle des Membres Inférieurs//, ou encore //Claudication Intermittente// ou //Artériopathie Périphérique//, correspond à une ''ischémie artérielle'' des ''membres inférieurs'' déclenchée ''pendant l'effort''.
*Les rétrécissements vasculaires sont dues à l'''athérosclérose''.
*La ''Clinique'' comprend principalement des ''douleurs à l'effort dans les MI'', de type ''crampe'', avec la particularité de ''disparaitre au repos.''
*Chez certains patients on peut noter une ''absence de pouls pédieux''
*la ''Séverité'' du IAMI est dictée par l'échelle de ''Leriche et Fontaine'':
|!Classification|!Symptômes|
|''Stade I''|Asymptômatique |
|''Stade IIa''|Pas de limitation des activités quotidiennes (marche >200m)|
|''Stade IIb''|Limitation des activités quotidiennes (marche <200m)|
|''Stade III''|Douleur au repos|
|''Stade IV''|Troubles Trophiques (Ulcérations)|
*Lors de stade III et IV on parle d'''Ischémie Critique des Membres Inférieurs''
!! Prise en charge
Le ''bilan'' du IAMI comprendra:
*Mesure de l'[[index de pression systolique cheville-bras|index_cheville-bras.jpg]] (ou ''IPS'')
*Mesure de la ''TcPO2 aux orteils''
*''Echo-Doppler des MI''
*A ce bilan peut s'ajouter un ''angio-CT'' ou un ''angio-IRM'' pour une meilleur analyse de la zone avant intervention.
Le ''traitement'' comprend
#Diminution des ''FRVC''
# ''Aspirine''
#''Statines''
#''Programmes de Marche''
#''Traitement endovasculaire'' (Angioplastie + Stent)
{{IAMI_algorithme.jpg}}
!!Définition *''Terminaison active d'une grossesse '' *''Interruption volontaire de grossesse ''-> 12 semaines (avec signature d'un document de consentement disant que la mère est en situation de détresse) *I''nterruption thérapeutique / médicale de grpssesse'' dès 12 semaines (avec avis médical : elle est nécessaire pour écarter le danger d'une atteinte grave à l'intégrité physique ou état de détresse profonde de la femme enceinte - le danger doit être d'autant plus grave que la grossesse est avancée) !!Indications *incapacité de mener à terme la grossesse du à une condition médicale ou sociale !!Prise en charge *''Médical'' : **<9 semaines : méthotrexate + misoprostol (-> 7 semaine, peut se faire à la maison, entre 7-9 : hospitalier) *''Chirurgical'' : **<12 semaines : dilatation + aspiration ± curettage ** >12 semaines : dilatation et évacuation, induction précoce de l'accouchement !!Complications *Douleur ou inconfort *Parfois : hémorragie, perforation de l'utérus, lacération du col, risque d'infertilité, d'infection/endométrite, syndrome d'Asherman (adhésions utérines). !!Suites *Suivi, contraception
{{jambes_sans_repos.jpg}}
!! Généralités
* Le ''syndrome des jambes sans repos'' (ou restless leg syndrome) est une ''pathologie du sommeil'' fréquente caractérisée par la présence de ''dysesthésies'' et ''paresthésies'' localisées aux ''membres inférieurs'', survenant au ''repos'', ''aggravées dans la soirée et la nuit'' et'' améliorées par le mouvement''.
*En dehors de ''formes'' ''idiopathiques'', le SJSR et la ''pathologie psychiatrique'' sont souvent associés et des études récentes ont montré une association entre le SJSR et le traitement antidépresseur.
*Le ''diagnostic'' du syndrome des jambes sans repos est presque ''uniquement clinique''. ''Quatre critères'' essentiels doivent être réunis
*#''besoin irrésistible de bouger''
*# ''présence exclusive ou aggravation au repos''
*# ''activité motrice répétitive''
*# ''aggravation ou apparition préférentielle des symptômes en soirée ou la nuit''
*''Aucun examen complémentaire'' ne permet de confirmer ou d'infirmer le diagnostic.Il s'agit d'une ''affection chronique ''dont la sévérité varie au cours de l'existence.
*La physiopathogénie peut rester méconnue bien qu'un trouble du métabolisme du fer et/ou un dysfonctionnement dopaminergique semblent impliqués.
*Le ''traitement est symptomatique''. Quatre classes de médicaments peuvent être proposées : les agents ''dopaminergiques'', les sédatifs hypnotiques, les opiacés et les antiépileptiques.
undefine
![ext[jaunisse.pdf|./pdf/jaunisse.pdf]] <!-- Texte caché pour la recherche Jaundice Over 50% of all newborn infants become visibly jaun diced. This is because: • there is marked physiological release of haemoglobin from the breakdown of red cells because of the high Hb concentration at birth (Fig. 10.19) • the red cell life span of newborn infants (70 days) is markedly shorter than that of adults (120 days) • hepatic bilirubin metabolism is less efficient in the first few days of life. Neonatal jaundice is important as: • it may be a sign of another disorder, e.g. haemolytic anaemia, infection, metabolic disease, liver disease. • unconjugated bilirubin can be deposited in the brain, particularly in the basal ganglia, causing kernicterus. Kernicterus This is the encephalopathy resulting from the deposi tion of unconjugated bilirubin in the basal ganglia and brainstem nuclei (Fig. 10.20). It may occur when the level of unconjugated bilirubin exceeds the albumin binding capacity of bilirubin of the blood. As this free bilirubin is fat soluble, it can cross the blood–brain barrier. The neurotoxic effects vary in severity from transient disturbance to severe damage and death. Acute manifestations are lethargy and poor feeding. In severe cases, there is irritability, increased muscle tone causing the baby to lie with an arched back (opisthot onos), seizures and coma. Infants who survive may develop choreoathetoid cerebral palsy (due to damage to the basal ganglia), learning difficulties and sensorineural deafness. Kernicterus used to be an important cause of brain damage in infants with severe rhesus haemolytic disease, but has become rare since the introduction of prophylactic anti D - - - 100 80 60 40 20 0 (a) 22 23 24 25 Gestational age (weeks) Died in delivery room Died NICU Survived to 30 months Severe disability 13% No problems 16% Moderate disability 31% Mild impairments 40% (b) Figure 10.18 The EPICure study, a population based study of mortality and disability in the UK and Ireland in 1995 of all infants born alive at 22–25 weeks’ gestation. (a) Survival. (Adapted from Wood NS, et al. 2000. Neurologic and developmental disability after extremely preterm birth. EPICure Study Group. - New England Journal of Medicine 343:378–384). (b) Proportion of survivors with disability at 11 years of age. (Adapted from Johnson S et al. 2009. Neurodevelopmental disability through 11 years of age in children born before 26 weeks of gestation. Pediatrics 124:e249–e257). Preterm babies born in 2006 show a 30% increase in numbers born at <26 weeks and increased survival. Long term follow up is in progress. - - immunoglobulin for rhesus negative mothers. However, a few cases continue to occur, especially in slightly preterm infants (35–37 weeks), which has led NICE to issue guidelines on the management of neona tal jaundice. - Clinical evaluation Babies become clinically jaundiced when the bilirubin level reaches about 80 µmol/L. Management varies according to the infant’s gestational age, age at onset, bilirubin level and rate of rise, and the overall clinical condition. Age at onset 168 The age of onset is a useful guide to the likely cause of the jaundice (Table 10.2). Neonatal medicine Live births (%) Breakdown of haemoglobin and other haem proteins Unconjugated bilirubin bound to albumin Free unconjugated bilirubin can cross blood–brain barrier and cause kernicterus Conjugation (glucuronyl transferase) Conjugated bilirubin Excretion in bile Enterohepatic circulation Stercobilinogen Urobilinogen Figure 10.19 The breakdown product of haemoglobin is unconjugated bilirubin (indirect bilirubin), which is insoluble in water but soluble in lipids. It is carried in the blood bound to albumin. When the albumin binding is saturated, free unconjugated bilirubin can cross the blood–brain barrier, as it is lipid soluble. Unconjugated bilirubin bound to albumin is taken up by the liver and conjugated by the enzyme glucuronyl transferase to conjugated bilirubin (direct bilirubin), which is water soluble and excreted in bile into the gut and is detectable in urine when blood levels rise. Reabsorption of bilirubin from the gut (enterohepatic circulation) is increased when milk intake is low. - Haemolytic disorders Rhesus haemolytic disease – Affected infants are usually identified antenatally and monitored and treated if necessary (see Ch. 9). The birth of a severely affected infant, with anaemia, hydrops and hepatosplenomeg aly with rapidly developing severe jaundice, has become rare. Antibodies may develop to rhesus anti gens other than D and to the Kell and Duffy blood groups, but haemolysis is usually less severe. Figure 10.20 Postmortem brainstem and cerebellum showing kernicterus with yellow bilirubin staining of brainstem nuclei (arrows). Jaundice <24 h of age Jaundice starting within 24 h of birth usually results from haemolysis. This is particularly important to iden tify as the bilirubin is unconjugated and can rise very rapidly and reach extremely high levels. ABO incompatibility – This is now more common than rhesus haemolytic disease. Most ABO antibodies are IgM and do not cross the placenta, but some group O women have an IgG anti A haemolysin in the blood which can cross the placenta and haemolyse the red cells of a group A infant. Occasionally, group B infants are affected by anti B haemolysins. Haemolysis can cause severe jaundice but it is usually less severe than in rhesus disease. The infant’s haemoglobin level is usually normal or only slightly reduced and, in contrast to rhesus disease, hepatosplenomegaly is absent. The direct antibody test (Coombs’ test), which demon strates antibody on the surface of red cells, is positive. The jaundice usually peaks in the first 12–72 h. - - - G6PD deficiency (see Ch. 22) – Mainly in people origi nating in the Mediterranean, Middle East and Far East - 169 1 2 3 4 Neonatal medicine Table 10.2 Causes of neonatal jaundice Jaundice starting at <24 h of age Haemolytic disorders: Rhesus incompatibility ABO incompatibility transition from fetal life. The term ‘physiological jaun dice’ can only be used after other causes have been considered. 10 Breast milk jaundice G6PD deficiency Spherocytosis, pyruvate kinase deficiency Jaundice is more common and more prolonged in breast fed infants. The hyperbilirubinaemia is unconju gated. The cause is multifactorial but may involve increased enterohepatic circulation of bilirubin. - Congenital infection Physiological jaundice Breast milk jaundice Infection, e.g. urinary tract infection Haemolysis, e.g. G6PD deficiency, ABO incompatibility Bruising Polycythaemia Crigler–Najjar syndrome Unconjugated: Physiological or breast milk jaundice Infection (particularly urinary tract) Dehydration Jaundice at 24 h to 2 weeks of age Jaundice at >2 weeks of age In some infants, the jaundice is exacerbated if milk intake is poor from a delay in establishing breast feeding and the infant becomes dehydrated. Breast feeding should be continued, although the bilirubin level would fall if it were interrupted. In some infants, intravenous fluids are needed to correct dehydration. - - Infection An infected baby may develop an unconjugated hyper bilirubinaemia from poor fluid intake, haemolysis, reduced hepatic function and an increase in the entero hepatic circulation. If infection is suspected, appropri ate investigations and treatment should be instigated. In particular, urinary tract infection may present in this way. Hypothyroidism Haemolytic anaemia, e.g. G6PD deficiency High gastrointestinal obstruction, e.g. pyloric stenosis Other causes Conjugated (>25 µmol/L): Bile duct obstruction Neonatal hepatitis Although jaundice from haemolysis usually presents in the first day of life, it may occur during the first week. Bruising and polycythaemia (venous haematocrit is >0.65) will exacerbate the infant’s jaundice. The very rare Crigler–Najjar syndrome, in which the enzyme glu curonyl transferase is deficient or absent, may result in extremely high levels of unconjugated bilirubin. The causes and management of jaundice at >2 weeks of age (persistent neonatal jaundice), (3 weeks if preterm), are different and are considered separately below. Severity of jaundice or in African Americans. Mainly affects male infants , but some females develop significant jaundice. Parents of affected infants should be given a list of drugs to be avoided, as they may precipitate haemolysis. Spherocytosis – This is considerably less common than G6PD deficiency (see Ch. 22). There is often, but not always, a family history. The disorder can be identi fied by recognising spherocytes on the blood film. Congenital infection Jaundice at birth can also be from congenital infection. In this case, the bilirubin is conjugated and the infants have other abnormal clinical signs, such as growth restriction, hepatosplenomegaly and thrombocyto penic purpura. Jaundice at 2 days to 2 weeks of age Physiological jaundice Most babies who become mildly or moderately jaun diced during this period have no underlying cause and the bilirubin has risen as the infant is adapting to the - Jaundice can be observed most easily by blanching the skin with one’s finger. The jaundice tends to start on the head and face and then spreads down the trunk and limbs. If the baby is clinically jaundiced, the bilirubin should be checked with a transcutaneous bilirubin meter or blood sample. It is easy to underes timate in Afro Caribbean, Asian and preterm babies, and a low threshold should be adopted for measuring the bilirubin of these infants. A high transcutaneous bilirubin level must be checked with a blood laboratory measurement. It is now recommended in the UK that all babies should be checked clinically for jaundice in the first 72 h of life, whether at hospital or home, and if clinically jaundiced, a transcutaneous measurement made. - Rate of change 170 The rate of rise tends to be linear until a plateau is reached, so serial measurements can be plotted on a chart and used to anticipate the need for treatment before it rises to a dangerous level. Neonatal medicine Gestation Preterm infants are more susceptible to damage from raised bilirubin, so the intervention threshold is lower. Clinical condition Infants who experience severe hypoxia, hypothermia or any serious illness may be more susceptible to damage from severe jaundice. Drugs which may dis place bilirubin from albumin, e.g. sulphonamides and diazepam, are therefore avoided in newborn infants. Management Poor milk intake and dehydration will exacerbate jaun dice and should be corrected, but studies have failed to show that routinely supplementing breast fed infants with water or dextrose solution reduces jaun dice. Phototherapy is the most widely used therapy, with exchange transfusion for severe cases. - Phototherapy Light (wavelength 450 nm) from the blue–green band of the visible spectrum converts unconjugated bilirubin into a harmless water soluble pigment excreted pre dominantly in the urine. It is delivered with an over head light source placed the optimal distance above the infant to achieve high irradiance. Although no long term sequelae of phototherapy from overhead light have been reported, it is disruptive to normal nursing of the infant and should not be used indis criminately. The infant’s eyes are covered, as bright light is uncomfortable. Phototherapy can result in tem perature instability as the infant is undressed, a macular rash and bronze discoloration of the skin if the jaundice is conjugated. - - Summary Continuous multiple (‘intensive’) phototherapy is given if the bilirubin is rising rapidly or has reached a high level. Exchange transfusion Exchange transfusion is required if the bilirubin rises to levels which are considered potentially dangerous. Blood is removed from the baby in small aliquots, (usually from an arterial line or the umbilical vein) and replaced with donor blood (via peripheral or umbilical vein). Twice the infant’s blood volume (2 × 80 ml/kg) is exchanged. Donor blood should be as fresh as possible and screened to exclude CMV, hepatitis B and C and HIV infection. The procedure does carry some risk of morbidity and mortality. Phototherapy has been very successful in reducing the need for exchange transfusion. In infants with rhesus haemolytic disease or ABO incompatibility unresponsive to intensive phototherapy, intravenous immunoglobulin reduces the need for exchange transfusion. There is no bilirubin level known to be safe or which will definitely cause kernicterus. In rhesus haemolytic disease, it was found that kernicterus could be pre vented if the bilirubin was kept below 340 µmol/L (20 mg/dl). As there is no consensus among paediatri cians in the UK on the bilirubin levels for phototherapy and exchange transfusion, guidelines have been pub lished by NICE to ensure uniform practice. Jaundice at >2 weeks of age Jaundice in babies more than 2 weeks old (3 weeks if preterm), is called persistent or prolonged neonatal jaundice. The key feature is that it may be caused by biliary atresia, and it is important to diagnose Assessment of neonatal jaundice Severity? Gestation? Age? Well or unwell? Risk factors? Needing treatment? Clinical assessment – press skin to assess jaundice, which progresses from head to limbs, may underestimate if dark skin or preterm If clinically jaundiced – check bilirubin with transcutaneous meter or blood sample Lower treatment threshold if preterm If <24 hours old – likely to be haemolysis and potentially serious If > 2 weeks (3 weeks if preterm) – persistent neonatal jaundice. Need to check if unconjugated or conjugated. Check for clinical evidence of sepsis and if dehydrated Haemolysis – check for antenatal antibodies, if mother is blood group O (ABO incompatability), if Mediterranean, Far-Eastern or Afro-Caribbean (G6PD deficiency) Sepsis, unwell, acidosis, low serum albumin (if measured) Plot bilirubin on gestation specific chart according to age since birth Plot rate of change of bilirubin to identify potentially high levels -->
![ext[kawasaki.pdf|./pdf/kawasaki.pdf]] <!-- Texte caché pour la recherche Kawasaki disease Kawasaki disease (KD) is a systemic vasculitis. Although uncommon, it is an important diagnosis to make because aneurysms of the coronary arteries are a potentially devastating complication. Prompt treat ment reduces their incidence. Kawasaki disease mainly affects children of 6 months to 4 years old, with a peak at the end of the first year. The disease is more common in children of Japanese and, to a lesser extent, Afro Caribbean ethnicity, than in Caucasians. Young infants tend to be more severely affected than older children and are more likely to have ‘incomplete’ cases, in which not all the cardinal features are present. Although the specific cause is unknown, it is likely to be the result of immune hyperreactivity to a variety of triggers in a genetically susceptible host (a polymorphism in the ITPKC gene, a negative regulator - Box 14.2 Causes of prolonged fever Infective: • Localised infection • Bacterial infections: e.g. typhoid, Bartonella henselae (cat scratch disease), Brucella • Deep abscesses: e.g. intra abdominal, retro peritoneal, pelvic - - • Infective endocarditis • Tuberculosis • Non tuberculous mycobacterial infections: - There is no diagnostic test; instead, the diagnosis is made on clinical findings (Fig. 14.17). In addition to the classic features, affected children are strikingly irritable, have a high fever that is difficult to control, and may also have inflammation of their BCG vaccination site. They have high inflammatory markers (C reactive protein, ESR, white cell count), with a platelet count that rises typically in the second week of the illness. The coronary arteries are affected in about one third of affected children within the first 6 weeks of the illness. This can lead to aneurysms which are best visualised on echocardiography (see Case History 14.2). Subse quent narrowing of the vessels from scar formation can result in myocardial ischaemia and sudden death. Mor tality is 1–2%. - - Prompt treatment with intravenous immunoglo bulin (IVIG) given within the first 10 days has been shown to lower the risk of coronary artery aneurysms. Aspirin is used to reduce the risk of thrombosis. It is given at a high anti inflammatory dose until the fever subsides and inflammatory markers return to normal, and continued at a low antiplatelet dose until echo cardiography at 6 weeks reveals the presence or absence of aneurysms. When the platelet count is very high, antiplatelet aggregation agents may also be used to reduce the risk of coronary thrombosis. Children with giant coronary artery aneurysms may require long term warfarin therapy and close follow up. Chil dren suspected of having the disease but who do not have all the clinical features should still be considered for treatment. Sometimes, fever recurs despite treat ment and these children are given a second dose of IVIG. Persistent inflammation and fever may require treatment with infliximab (a monoclonal antibody against TNF α), steroids or ciclosporin. - - - - Prolonged fever – check – is it Kawasaki disease? Summary e.g. Mycobacterium avium complex • Viral infections: e.g. EBV, CMV, HIV • Parasitic infections: e.g. malaria, toxocariasis Non-infective: • Systemic juvenile idiopathic arthritis (SJIA) • Systemic lupus erythematosus (SLE) • Vasculitis (including Kawasaki disease) • Inflammatory bowel disease • Sarcoidosis • Malignancy: e.g. leukaemia, lymphoma, neuroblastoma • Macrophage activation syndromes: e.g. HLH (haemophagocytic lymphohistiocytosis) • Drug fever • Fabricated or induced illness. Kawasaki disease • Mainly affects infants and young children • The diagnosis is made on clinical features – fever >5 days and four other features of non purulent conjunctivitis, red mucous membranes, cervical lymphadenopathy, rash, red and oedematous palms and soles or peeling of fingers and toes - • ‘Incomplete’ (formerly called ‘atypical’) cases can occur, especially in infants, so a high index of suspicion should be maintained in a febrile child • Complications – coronary artery aneurysms and sudden death • Treatment – intravenous immunoglobulin and aspirin. -->
!!Clinical features of Klinefelter syndrome * Infertility – most common presentation * Hypogonadism with small testes * Pubertal development may appear normal (some males benefit from testosterone therapy) * Gynaecomastia in adolescence * Tall stature * Intelligence usually in the normal range, but some have educational and psychological problems.
undefine
@@background-color:Hotpink; !''Laboratoire'' @@ <<list-links "[tag[Laboratoire]sort[title]]">>
![ext[Larynx.pdf|./pdf/Larynx.pdf]] <!-- Texte caché pour la recherche Larynx Lx Anatomie: muscles × tension CV: ß m. thyro-aryténoïdien (m. vocal) Netter, Atlas Pavel Dulguerov - ORL~ CCF - 20 QCM: Anatomie du larynx Chez un patient avec une paralysie cordale la corde se trouve sur la ligne médiane. Ceci provient d'une paralysie du muscle: 1. Inter-aryténoïdien 2. Crico-aryténoïdien postérieur 3. Crico-aryténoïdien latéral 4. Thyro-aryténoïdien 5. Crico-thyroïdien Pavel Dulguerov - ORL~ CCF - 21 Lx Anatomie: Musculature extrinsèque - élévation Tous les …hyoïdiens de la langue sont elevateurs ¿ 5 muscles extrinsèques: m. digastrique (VII, V 3 ) m. stylohyoïdien (VII) m. mylohyoïdien (V 3 ) m. géniohyoïdien (XII) m. thyro-hyoïdien (anse cervicale) Bonfils, Chevallier: Anatomie ORL, Flammarion, 1998 (p.31) Pavel Dulguerov - ORL~ CCF - 22 Lx Anatomie: Musculature extrinsèque - abaisseurs Tous les …hyoïdiens du sternum et omoplate ont abaisseurs ¿ 3 muscles extrinsèques: m. sterno-thyroïdien m. sterno-hyoïdien m. omo-hyoïdien Bonfils, Chevallier: Anatomie ORL, Flammarion, 1998 (p.33) Pavel Dulguerov - ORL~ CCF - 23 Lx Histologie Lehmann, Pidoux, Widmann: Larynx. MLS et Histopathologie, Inpharzam, 1981 (p.15+16) Pavel Dulguerov - ORL~ CCF - 24 PHYSIOLOGIE du LARYNX (ΨLx): Production de sons ¿ Énergie + Vibreur + Résonateur Pavel Dulguerov - ORL~ CCF - 25 ΨLx: Théorie myoélastique-aérodynamique Dulguerov. Unpublished, 1993 Pavel Dulguerov - ORL~ CCF - 26 ΨLx: Onde muqueuse laryngée Pavel Dulguerov - ORL~ CCF - 27 Dulguerov. Unpublished, 1993 -->
!!Conversion *''Torem à introduire'' = ''Lasix actuel x 0.5'' *''Lasix à introduire = Torem actuel x 2'' *//Lasix PO = Torem PO x 4// *//Lasix IV = Lasix PO x 0.5// !!Doses *Torem 2.5 : 1x/j le matin (HTA légère) *Torem 5/10/20mg: 1x/j le matin (traitement d'oedemes dans IC)
!!Traitement *d'abord ''pursana'' 15-30ml matin ou soir (laxatif osmotique figues+sorbitol) *si ça va pas: ''laxoberon'' 5-10 mg le soir (picosulfate de sodium: laxatif de contact qui stimule motilité + sécrétion) ou ''movicol'' 1 sachet/j (laxatif osmotique) *Ne pas hésiter a en donner en R pour les patients vieux ou suspects, afin d'anticiper la demande infirmière
undefine
undefine
undefine
{{leptospirose.jpg}}
!!Définition
*la ''Leptospirose'' est une maladie infectieuse due à la bactérie //Leptospira//, un spirochète qu'on retrouve dans les déjections des rongeurs ou dans les fermes.
*Elle se contracte dans les ''eaux souillées'', par exemple sur des ''blessures'' au pied.
!!Clinique
''Forme classique: Maladie de Weil''
*''Ictère/Hemmoragie''
*''Rash''
*Urines foncées
*ADP
*Symptômes généraux
!!Investigation
*Isolation de la bactérie dans le sang ou les urines
*Tests Hépatiques
!!Traitement
*''ATB'' type tetracycline ou doxycycline
{{leptospirose_rash.jpg}}
undefine
undefine
![ext[ligaments_croises.pdf|./pdf/ligaments_croises.pdf]] <!-- Texte caché pour la recherche LCA LCP Ligament Croisé antérieur anterieur posterieur postérieur Lachman Lachmann Tiroir -->
1. Bonjour stagiaire guillaume lettre transfert a BS , Faveretto, 12.12.1933, sejour jusqua …... 2. Adressé a medecin en charge à Loex, copie à MT Docteur Mitsuko Oestreicher à Châtelaine 3. MOTIF HOSPITALISATION, DIAGNOSTIC PRINCIPAL, DIAGNOSTIC SECONDAIRE: Copier coller avis de transfert 4. COMORBIDITES: copier coller de note d’admission 5. SYNTHESE DE L’HOSPITALISATION ET PRISE EN CHARGE DES PROBLEMES: Monsieur Faveretto est un patient de.... 6. Traitement prescrit à la sortie …que je dicte selon DPI medicamenteux et en Reserve. 7. Suivi à la sortie 8. La lettre est signée par Karen lister CDC, par moimeme et contre signée par Amandine Berner
!! Définition
* Les ''Leucémies Aigues'' sont des ''neoplasmes hematologiques'' impliquant un ''trouble de la différentiacion'' et une ''prolifération'' rapide de ''cellules précurseurs hématopoiétiques'' d'abord ''[[dans la moelle|leucemies_aigues_histo.jpg]]'' puis ''dans la circulation sanguine''.
* Les ''Cellules précurseurs lymphoïdes'' sont celles qui devaient devenir des lymphocytes. Elles donnent des [[Leucémies Lymphoblastiques Aigues (LLA)|Leucémie Lymphoblastique Aigue]], qui atteignent surtout ''les enfants''.
* Les ''Cellules précurseurs myéloïdes'' sont celles qui devaient devenir des granulocytes (PMN) ou monocytes. Elles donnent des [[Leucémies Myéloïdes Aigues (LMA)|Leucémie Myéloïde Aigue]], qui atteignent surtout ''les adultes''.
*Les Leucémies Aigues sont de ''haut grade'': elles sont ''agressives'' et ont un ''traitement curatif'', contrairement aux[[ syndromes myéloprolifératifs|syndromes_myeloproliferatifs.jpg]] et [[syndromes myélodysplasiques|syndromes_myelodysplasiques.jpg]] qui sont des néoplasmes de bas grades: indolent et traitement non curatif.
* L'accumulation des cellules proliférantes va ''interférer avec les autres cellules'' de la moelle, ce qui va cliniquement résulter par des ''anémies'', des ''neutropénies'' et des ''thrombocytopénies''.
{{neoplasmes_hematologiques.jpg}}
!!Clinique
* Le patient présentera une ''anémie normochrome normocytaire'', avec les symptômes associés (fatigue, dyspnée,...)
* Le patient aura aussi un risque augmenté d'''infections bactérienes'' qui peuvent être potentiellement ''dangereuses'', dues à la neutropénie
* Le patient présentera aussi des ''saignements'' (muqueuses, gencives, epistaxis, hematomes etc.) du à la thrombocytopénie
* Au niveau des organes, on pourra trouver une ''splénomégalie'', une ''hépatomégalie'' et des ''adénopathies''
* Au niveau osseux on peut trouver des ''douleurs ostéo-articulaires'' dues à l'envahissement du périoste
* Finalement on peut trouver une ''atteinte du SNC'' (méningites, épilepsie), une atteinte des ''testicules'' (ALL), une ''masse médiastinale antérieure'' (T-ALL) ou des ''nodules cutanés'' (AML)
!!Investigation
*le ''Diagnostic'' se fait via une ''biopsie de moelle osseuse'', ou on peut observer la prolifération et la différenciation hors de contrôle. Dans la ''LLA'' on retrouvera des ''lymphoblastes''. Dans la ''LMA'' on retrouvera des [[Auer rods|leucemie_myeloide_aigue_auer_rods.jpg]] (petites épines dans les cellules). On peut aussi retrouver ces blastes caractéristiques dans le dans le ''frottis sanguin''.
* Il faut aussi faire une ''FSC'', et investiguer l'''anémie'', la ''thrombopénie'' et la ''neutropénie''
!! Traitement
* Le traitement passe par une ''chimiothérapie agressive'' sur ''plusieurs semaines'', suivie d'une ''transplantation de moelle osseuse''
* Il faut aussi traiter l'anémie et la thrombopéne (''transfusions'') et les infections !
* La réponse au traitement est meilleure pour les LLA que les LMA.
!! ''Leucémies Lymphoblastiques Aigues''
{{Leucémie Lymphoblastique Aigue}}
!! ''Leucémies Myéloïdes Aigues''
{{Leucémie Myéloïde Aigue}}
{{leucemies_schema.jpg}}
* Les ''Leucémies Lymphoblastiques Aigues (LLA)'' sont des ''néoplasmes hématopoïétiques'' impliquant une prolifération et un trouble de la différenciation des ''précurseurs des lymphocytes''. * C'est une @@background-color:Orange;maladie essentiellement ''Pédiatrique'',@@ avec atteinte des enfants <15 ans. * ''Histologiquement'', on observera une prédominance de ''lymphoblastes'', avec une moelle hypercellulaire (prolifération et différenciation hors de contrôle) et une présence de blastes dans le sang. *Cliniquement on aura un @@background-color:Orange;enfant entre 2-5 ans@@, avec une @@background-color:Orange;progression insidieuse@@ de @@background-color:Orange;symptomes sytémiques@@ au fur et a mesure de l'envahissement des organes. L'infiltration de la moelle donnera une @@background-color:Orange;anémie (paleur), une thrombopénie (petechies) et neutropénie (infections) @@, associé à @@background-color:Orange;des douleurs osseuses@@. L'infiltration d'organes reticulo-endothéliaux donne une @@background-color:Orange;Hepato-Splenomegalie et des Adénopathies.@@. D'autres organes comme le SNC (nausées, cephalées) ou les testicules peuvent être envahis mais c'est plus rare. * Cette leucémie ''répond bien au traitement'', avec plus de 75% de réussite.
!! Définition
* la ''Leucémie Lymphoïde Chronique (LLC)'' est la ''leucémie la plus fréquente de l'adulte''. Elle touche souvent les adultes de <60 ans et elle est de ''cause inconnue''. C'est la leucémie la ''moins agressive'', sa survie est meilleure que celle de la LMC. Son évolution est ''indolente'' et les patients meurent souvent d'autre cause
*Elle est due à une ''prolifération de lymphocytes B matures monoclonaux dans le sang''. Ces lymphocytes sont par ailleurs immuno-incompétents.
{{leucemies_schema.jpg}}
!! Clinique
* Elle est souvent ''asymptomatique'' et découverte de façon ''fortuite'' par une ''lymphocytose à la FSC''.
* Sinon le patient peut présenter des ''adénopathies indolores généralisées'', une ''splénomégalie'' ou encore des ''infections''
* Le stade plus avancé de la maladie induit des symptomes plus généraux comme la fatigue, la perte de poids et des douleurs ostéo-articulaires
!! Investigations
*au ''Labo'' on trouve des ''leucocytes à 5-20 G/L'' (normal 4-11 G/L), on peut aussi trouver une ''anémie'' et une ''thrombopénie''.
*le ''Frottis sanguin'' est souvent ''diagnostic''. On retrouve une [[lymphocytose|leucemie_lymphocytaire_chronique_frottis.jpg]] avec plein de lymphocytes matures (petits).
*La ''cytométrie de flux'' montre une concentration de ''[[cellules B monoclonales|leucemie_lymphocytaire_chronique_cytometrie_flux.jpg]]'' exprimant certains marqueurs précis
!! Traitement
* On peut faire de la ''chimiothérapie'', mais elle n'est ''pas curative'' ! Elle doit surtout se faire si le patient est ''symptomatique'' et dans les ''stades avancés''.
* Les ''Leucémies Myéloïdes Aigues (LMA)'' sont des ''néoplasmes hématologiques'' impliquant une prolifération et un trouble de la différentiation des ''Précurseurs myéloïdes'' (granulocytes, monocytes).
* Ce sont des tumeurs atteignant surtout ''les adultes'', avec un âge moyen à 65 ans.
* Les ''Facteurs de risque'' sont la transformation d'un [[syndrome myélodysplasique|syndromes_myelodysplasiques.jpg]] ou d'une [[LMC|Leucémie Myéloïde Chronique]], l'exposition aux ''radiations'', aux ''benzènes'' et aux ''agents alkylants'' (''Chimiothérapie''), ainsi que le ''syndrome de Down''.
* la ''réponse au traitement'' est ''moyenne'', pas aussi bonne que pour l'ALL chez les enfants.
!! Définition
* La ''Leucémie Myéloïde Chronique'' est une leucémie touchant les ''adultes'', avec prolifération de ''granulocytes monoclonales''.
*C'est un des [[Syndromes Myéloprolifératifs]]
*Elle est caractérisée par une ''phase indolente chronique'' cliniquement stable qui dure plusieurs années et qui peut finir par évoluer en [[Leucémie Myéloïde Aigue]] (on parle de ''phase accélerée'' puis de ''crise blastocytaire'')
*Elle est associée à la ''translocation t9:22'', apelée aussi ''chromosome de Philadelphie''.
{{leucemies_schema.jpg}}
!! Clinique
* Le patient est souvent ''asymptomatique'', la maladie étant une ''découverte fortuite à la FSC'', montrant une Leucocytose.
* On peut trouver des symptomes généraux tels que la ''fatigue'', les ''sudations nocturnes'' ou les ''pertes de poids''
* On peut aussi trouver des symptomes d'''anémie'', de ''thrombopénie'' et des ''infections''.
!! Investigations
* au ''Labo'' on trouve une ''leucocytose à 5-20 G/L'' (normal 4-11 G/L) avec une ''augmentation des granulocytes'' et ''eosinophilie'', on peut aussi trouver une ''anémie'' et une ''thrombopénie''.
*Le ''Frottis sanguin'' peut poser le ''diagnostic'' en montrant plein de ''[[myélocytes|leucemie_myeloide_chronique_frottis.jpg]]'', les précurseurs des granulocytes (de grosses cellules).
*On trouve aussi une ''diminution'' de l'''alkaline phosphatase leucocytaire''
!! Traitement
* La prise d'un ''inhibiteur de la Tyrosine-Kinase (imatinib)'' permet de traiter cette pathologie. Malheureusement au stade de la crise blastocytaire le pronostic reste mauvais.
undefine
undefine
undefine
undefine
undefine
undefine
undefine
![ext[dermato_lichen_plan.pdf|./pdf/dermato_lichen_plan.pdf]] <!-- Texte caché pour la recherche Lichen Plan - Dermatose lymphocytaire ⇒ cutanée, muqueuse et phanères - Etiologie AI ? Prévalence 0.5% - Bénin, chronique. - Cutané : papules polygonales, rouges-violines, brillantes, stries de Wickham, confluentes, groupement linéaire, PRURIT, Phenomène de Koebner (dermatose provoquée sur endroit traumatisé) ⇒ Face ant poignets, avant-bras, face ant jambes, région lombaire. - Muqueuses : réticulations blanches (valeur Dx ++) ⇒ Joues, génitale - Phanères : alopécie cicatricielle (définitive), ongles : trachéolychie linéaire (risque de destruction définitive) ⇒ Cheveux et ongles - Erosion muqueuses, paumes et plantes (douloureux ++) - Psoriasis : phénomène de Koebner aussi - Lupus : infiltrat inflammatoire à la MB en bande aussi - Muguet (candidose) : mais part quand on frotte - Bx : hyperkératose, hypergranuleuse en V, acanthose irrégulière en dent de scie, corps colloïdes (= kératinocytes nécro<que, car a>aque par lymphocytes), infiltrat inflammatoire à la MB lymphocytaire, en bande. - Labo : HCV - CS topiques ou injectables - Photothérapie - Guérison parfois spontanée en 12-15mois - Formes graves : ciclosporine - Formes particulières = unguéal, pilaire (alopéciant), érosif - EROSIF : évolution en cancer spinocellulaire (2-10%) - Prévalence plus élevée de l’hépatite C (surtout si érosif) GEN CLIN DD INV TTT CAVE -->
undefine
*''[ext[fahrnipedia.ch/livres|/livres]]'' *''[ext[fahrnipedia.ch/cours|/cours]]'' <!-- Texte caché pour la recherche -->
undefine
!!Définition *Les ''lombalgies simples'' sont des lombalgies aigues sans signe de gravité (redflags). Elles sont ''fréquentes'' et souvent d’origine ''mécanique'' avec ''résolution spontanée en quelques jours''. *Rapplel: Les lombalgies aigues sont des lombalgies durant <6 semaines. Les lombalgies chroniques durent >12 semaines, entre deux on parle de lombalgies subaigues. *Il faut surtout faire attention à ne ''pas rater les red flags'', et dans le cas de lombalgies simple à ne ''pas faire d’investigations inutiles''. !!Red flags //''Fracture vertébrale''// *Anamnèse de Trauma *70ans ou Corticoïdes (ostéoporose) //''Syndrome de la Queue de cheval''// *Anesthesie en selle *Incontinence urinaire ou fécale *Faiblesse des membres inférieurs // ''Cancer'' ou ''Infection''// *Immunosuppresion *ATCD de cancers *Perte de poids *Trop Jeune (<20ans) ou trop vieux (>50) *Consommation de drogues IV (spondylodiscite) *Fièvre et Frissons *Douleurs inflammatoires (nocturne) !!Investigations *Ne ''pas faire d’examen radiologique'' en présence d’une lombalgie simple ! Les CT et IRM sont réservés aux Reds-Flags !!Traitement ''Non-médicamenteux'' *il faut à tout prix ''Eviter le repos au lit'' ! au contraire un ''encouragement précoce à la mobilisation'' est recommandé. Pareil pour l’arrêt de travail qu’il faut minimiser. ''Médicamenteux'' *Surtout le ''Paracetamol'' et les ''AINS''. * On peut supporter avec des opiacés (tramadol) * Si contractures on peut aussi mettre des myorelaxants (tizanidine), attention mettre le soir car ça fait dormir. !!Evolution *En général il y a un ''bon pronostic'' de résolution de l’épisode aigu, cependant il y a ''beaucoup de récidives''. *Le gros ''risque'' est la ''chronicisation des douleurs''. *Les ''Facteurs de risque de chronicisastion'' sont les suivants: *Une ''comorbidité psychiatrique'' *Un ''environnement professionnel défavorable'' (insatisfaction) *Des ''conflits assécurologiques passés'' *Des ''peurs ou convictions erronées''. *Un ''role passif du patient dans son traitement''.
{{lupus_spectre.jpg}}
!!Définition
*le Lupus Erythémateux Systémique (LED) est une ''connectivite chronique'' avec ''production d’auto-anticorps'' (surtout ''ANA''), avec atteinte multiple d’organes: ''peau, reins, articulations, système nerveux'' et ''séreuses'' (plèvre, péritoine, péricarde).
*La maladie évolue par des ''phases de poussées aiguës'' suivies de ''phases chronique de rémission''.
*Le Lupus est d’étiologie ''inconnue'' mais il existe divers facteurs pouvant le causer comme les ''médicaments'' (lupus médicamenteux), les ''oestrogènes'', les ''UVs'', le ''post-viral'' et la ''génétique'' (lupus néonatal)
!!Clinique
{{lupus.jpg}}
*Typiquement une ''Jeune femme'' qui se présente avec un ''état général diminué'' (fièvre, fatigue, perte de poids), une ''arthrite'' (arthralgies, myalgies), une ''photosensibilité'' (__rash__ __malaire__), des ''ulcères buccaux'' et la présence d’auto-''anticorps'' au labo
*L’Atteinte ''dermatologique'' est classifié en ''Lupus aigu'' (rash malaire en papillon ulcérations buccales), ''Lupus subaigu'' (Pas d’atteinte du visage, lésions annulaires et polycycliques) et ''Lupus Chronique'' (Lésions Discoïdes. atteintes du visage).
*L’Atteinte ''rénale'' se caractérise surtout par une ''__Glomérulonéphrite__'', avec protéinurie, érythrocytes au sédiment, HTA secondaire
*L’Atteinte ''neurologique'' se caractérise par divers symptômes dont le plus important (dangereux) est la ''myélite transverse'' ! , urgence médicale pouvant amener à une paraparésie irréversible.
*L’Atteinte ''vasculaire'' comprend un ''phénomène de Raynaud'' et un ''Livedo réticulaire''.
*L’Atteinte ''cardiaque'' peut amener une ''péricardite'', une ''endocardite'' et une maladie coronaire précoce
*l’Atteinte ''pulmonaire'' est caractérisée par une ''Pleurésie'', des ''épanchements pleuraux'' ou encore une ''pneumopathie interstitielle''.
!!Investigations
''Labo''
*Tester les différents ''anticorps. ANA'' (positif mais non spécifique), ''anti-ADN, anti-Sm, anti-SSA/RO, anti-SSB/LA, anti-phospholipides, anti-Histones''
''Recherche d’atteintes d'organe''
*Faire un ''stix urinaire'' à la recherche de cylindres erythrocitaires, protéinurie, érythrocytes dysmorphiques
*Faire une ''rx thorax'' afin de chercher l’atteinte pulmonaire ou pleurale.
*Faire un ''rx des articulations atteintes'' au cas par cas.
!!Traitement
''Dermatologique''
*''Eviter le soleil'' et mettre de la ''crème solaire''.
*On utilise les ''stéroïdes topiques'' ainsi que l’hydroxychloroquine
''Articulaire''
*On utilise les ''AINS'' et aussi l’hydroxychloroquine
''Atteinte d’organe''
*Divers traitements agressifs comme la ''prednisone haute dose'' ou la ''methylprednisone IV'', les agents non corticoïdes comme le ''Methotrexate, Azathioprine'' et ''Mycofénolate Mofétil''. Pour les cas très sévères on peut aussi utiliser le ''cyclophosphamide''.
*L’atteinte d’organe est un facteur de mauvais pronostic. L’insuffisance des organes et ce qui finit par tuer.
undefine
undefine
![ext[luxation_congenitale_hanche.pdf|./pdf/luxation_congenitale_hanche.pdf]] <!-- Texte caché pour la recherche DYSPLASIE CONGENITALE DE LA HANCHE Barlow Ortolani -->
![ext[luxation_post_epaule.pdf|./pdf/luxation_post_epaule.pdf]] <!-- Texte caché pour la recherche luxation postérieure épaule epaule luxation crise convulsive épilepsie -->
undefine
{{lymphadenite.jpg}}
!!Définition
*la ''lymphadénite'' est une inflammation d'un (ou plusieurs) ganglion lymphatique due à une ''infection bactérienne locale'', de la ''peau '' ou du ''tissus sous-cutané''.
*les ''germes'' sont généralement le ''//strepto gr.A//'' ou le ''//staph. doré//''
*Elle peut se compliquer en ''sepsis'' ou en thrombose des veines adjacentes
!!Clinique
*''fièvre''
*''ADP'' rouge, chaude, douloureuse
*''Cellulite'' en regard
!!Investigations
*''hémocultures''
*''cultures de plaie''
!!Traitement
*''ATB''
*Drainage de la plaie
!Lymphadénite Tuberculeuse
*Est plus ''chronique'' que aigue.
*Inflammation avec ''necrose caséeuse'' d'un ganglion (cellules géantes multénucléées et cellules langerhans entourées de cellules épitheloïdes.)
*Le test de mantoux devrait être positif.
*@@background-color:Orange;Un test de mantoux intermédiaire fait penser à une lymphadénite à mycobactérie atypique (qu'on trouve souvent dans la terre, plus fréquentes que la TBC)@@
undefine
!!Définition
*La ''lymphangite'' est une i''nflammation des vaisseaux lymphatiques''. Les causes principales sont :
**infection (streptocoque, staphylocoque…)
**compression des vaisseaux lymphatiques (tumeur bénigne ou maligne, envahissement par lymphangite carcinomateuse)
*Elle se traduit par un gonflement, plus ou moins douloureux du vaisseau lymphatique impliqué, une rougeur locale avec œdème. On retrouve le plus souvent un ganglion lymphatique gonflé et sensible en aval du trajet. Le traitement dépend de la cause de cette lymphangite.
{{lymphangite.jpg}}
undefine
!! Définition
* Le ''Lymphome de Hodgkin'' implique des ''Lymphocytes B''
* Il est caractérisé par une prolifération de ''[[cellules de Reed-Sternberg|Lymphome_de_Hodgkin_cellule_Reed_Sternberg.jpg]]'', de ''grandes cellules bi-nucléées'', assez rare à trouver sur une coupe histologique (CD15+, CD30+).
* Son ''épidémilogie'' est caractérisée par un ''double pic d'âge'', avec une atteinte des ''15-30ans'' et des'' >50ans'' en particulier.
* Il est aussi ''associé à EBV'', surtout chez les enfants, vieux, VIH et autres immunosuprimés.
!! Clinique
* Le patient se présente souvent avec une ''Adénopathie Indolore'' située au niveau ''supra-diaphragmatique'' (typiquement le cou) et qui ''progresse localement''.
*On retrouve aussi fréquemment les ''Symptômes B'' (''fièvre'',''perte de poids'',''sudations nocturnes''), ce qui implique un stade b.
* On peut aussi trouver un ''prurit'' et une ''splénomégalie'', ainsi que des ''douleurs à l'alcool''.
!! Investigations
* Le ''diagnostic'' passe par une ''biopsie du ganglion'', qui montrera les cellules de Reed-Sterberg ainsi qu'une[[ architecture nodulaire|Lymphomes_architecture_nodularie.jpg]].
*Le ''bilan'' implique aussi de réasliser un ''PET-CT'' pour l'extension, ainsi qu'une ''biopsie de la moelle osseuse'' pour voir si elle est atteinte. Il faut faire aussi un ''Labo'' comprenant ''FSC'', ''Serologied VIH et Hépatites''
* La ''prévention des effets secondaires du traitement'' implique aussi de réaliser un bilan de ''fonctions pulmonaires'', de ''FEJ VG'' et un ''Prélévement de Sperme''.
!! Traitement
* Le traitement dépend des stades mais implique globalement la ''Chimiothérapie'' ainsi que de la ''Radiothérapie''
* Les molécules souvent impliquées dans la chimio sont les ''ABVD'' (''Anthracycline'',''Bleomycines'', ''Vinblastine'' et ''Dacarblacine''). Elles sont souvent responsables des ''effets secondaires'' et on dit souvent que le ''patient meurt de complications plutôt que du lymphome''.
* Les principales ''complications'' sont des risques d'''Infarctus'' (Anthracycline), une ''Toxicité Pulmonaire'' (Bléomycine) et une ''Stérilité'', d'où les bilans de ces organes avant le traitement.
!! Définition
* Le ''Lymphome Non-Hodgkinien'' est composé d'un groupe de différents lymphomes impliquant des ''Lymphocytes B ou T'', sachant que les ''Lymphomes B sont les plus fréquents.'' On fait aussi la distinction des lymphomes B de ''low grade'' et ''high grade''.
* Les ''Lymphomes B low grade'' impliquent des ''cellules matures''. Ils sont ''Indolents'' et ont un ''Traitement Non-Curatif''.
* Les ''Lymphomes B high grade'' impliquent des ''cellules Immatures''. Ils sont ''Agressifs'' et ont un ''Traitement Curatif''.
*A savoir que les lymphomes de low grade peuvet ''évoluer'' en high grade avec le temps.
*Les patients atteints ont souvent ''>50 ans''
On peut résumer la classification des Lymphomes Non-Hodgkinien ainsi:
|!Lymphomes B: low grade |! Spécialités|
|''Lymphome Folliculaire''|Fréquent, Indolore, Bonne survie, [[architecture nodulaire|Lymphomes_architecture_nodularie.jpg]], translocation(14:18), bcl-2|
|''CLL''|Entre lymphome et leucémie, clinique variable, [[petites cellules|Lymphomes_small_cells.jpg]], [[architecture diffuse|Lymphomes_architecture_diffuse.jpg]]|
|''Manteau'' (entre low et high grade)|pronostic variable, atteinte digestive, bcl-1, [[architecture diffuse|Lymphomes_architecture_diffuse.jpg]], [[petites cellules|Lymphomes_small_cells.jpg]]|
|!Lymphomes B: high grade |!Spécialités|
|''DLBCL''|fréquent. urgence médicale, [[grandes cellules|lymphomes_grandes_cellules.jpg]], [[architecture diffuse|Lymphomes_architecture_diffuse.jpg]], |
|''Burkitt''|TRES agressif, urgence médicale, enfants africains (malaria,EBV, VIH),mib 100%, c-myc, [[atteinte extranodale explosive|lymphome_burkitt.jpg]], [[architecture diffuse|Lymphomes_architecture_diffuse.jpg]], [[ciel étoilé|lymphomes_burkitt_ciel_etoile.jpg]] |
|!Lymphomes T |!|
|Lymphomes T matures|agressif|
|Lymphomes T immatures|agressif|
!! Clinique
* Le patient présente généralement une ''Adénopathie indolore'', qui peut ou non être accompagnée de ''Symptomes B'' (''fièvre'',''perte de poids'', ''sudations nocturnes'').
* D'autres symptômes sont possibles, comme la ''spénomégalie'', les ''infections'' ou encore le ''syndrome cave supérieur''
!! Investigations
* Le ''Diagnostic'' sera posé par la ''biopsie ganglionnaire''
* On fait aussi un ''bilan'' avec ''PET-CT'', ''Labo'' et ''Biopsie de moelle osseuse''.
!! Traitement
* Le traitement est ''variable''. Les lymphomes de low grade ont un traitement non-curatif tandis que ceux de high grade ont un traitement curatif
* Les possibilités sont l'''Observation'', la ''Chimiothérapie'' (souvent ''CHOP'' ± le ''Rituximab''), la ''Radiothérapie'' ou une ''combinaison Chimio-Radiothérapie''.
undefine
undefine
!! Définition
* Les ''Lymphomes'' sont des ''cancers de lymphocytes'', qui vont aller s'accumuler ''dans les ganglions et tissus lymphoïdes''.
* La majorité des lymphomes sont dus aux ''lymphocytes B''.
* La ''classification des lymphomes'' les sépare surtout en deux grandes entités: le ''[[Lymphome de Hodgkin]]'' et le ''[[Lymphome Non-Hodgkinien]]''.
{{lymphomes_classification.jpg}}
!! Stades
* Le ''degré d'atteinte'' des lymphomes est classifié en 4 stades, en fonction du ''nombre'' et de la ''localisation'' des ''ganglions'':
|! |!Atteinte |!Pronostic |
|!Stade I |1 ganglion|99% |
|!Stade II |2+ ganglion du même coté du diaphragme |95% |
|!Stade III |2+ de part et d'autre du diaphragme |60-95%|
|!Stade IV|Atteinte d'organe|60%|
* Les stades peuvent aussi être ''a ou b'' (ex: Stade IIb):
**''Stade Xa'': pas de symptômes B
**''Stade Xb'': présence de symptômes B
!! ''Lymphome de Hodgkin''
{{Lymphome de Hodgkin}}
!! ''Lymphome Non-Hodgkinien''
{{Lymphome Non-Hodgkinien}}
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{lymphoscintigraphe.jpg}}
!!Examen
*La ''Lymphoscintigraphie avec ganglion sentinelle'' est effectuée dans le cas de certains ''cancers'' avec ''premières métastases locales'', comme par exemple:
**Le ''Mélanome''
**Le ''Cancer du Sein''
**Cancers Gyénco
**Cancers ORL
*On va faire une ''injection '' (sc., id. ou autres) de ''Tc99m-nanocolloïde'' pour ''mapper les ggl. régionaux'' qui pourraient être porteurs de métastases occultes.
*Les ganglions ne sont donc pas forcément pathologiques, mais on va les analyser histologiquement, ça évite de faire des opérations radicales
*On apelle ce ou ces ganglions qui drainent directement la zone de la tumeur des ganglions sentinelles.
*Une fois identifié, le ganglion peut être excisé et analysé histolgiquement. On les identifie au bloc via une sonde gamma , on peut aussi injecter du bleu pour une identification visuelle.
*Ce procédé est une amélioration par rapport aux excisions larges qui se faisaient à l'époque, entrainant des lymphoedèmes.
*Cet examen se fait surtout pour des patients à risque, sans métastases connues
!!Interprétation
*Le ''premier Hot Spot'' visualisé correspond au ''ganglion sentinelle''.
* Si d'autres ggl. sont visualisés, ils seront aussi enlevés
!! Généralités * la ''Macroglobulinémie de Wäldenstorm'' (ou lymphome lymphocytaire) est définie par une ''prolifération de lymphocytes plasmacytoïdes'', sécrétant des ''paraprotéines [[lgM|Immunoglobulines_schema.jpg]]'', qui est très volumineuse et cause une ''hyperviscosité sanguine''. * Contrairement au [[Myélome Multiple]], il n'y a ''pas de lésions osseuses'' *la ''clinique'' comprend la ''fatigue'', ''perte de poids'', ''symptomes neurologiques'' et ''syndrome d'hyperviscosité''. *Au ''labo'' on note une ''augmentation des [[IgM|Immunoglobulines_schema.jpg]]''. A la ''biopsie de moelle osseuse'' on peut observer une ''prolifération de lymphocytes plasmacytoïdes'' *le ''traitement'' passe par des ''chimiothérapies'' et de la ''plasmaphérèse''.
!!Définition * Maternal hyperglycaemia causes fetal hyperglycaemia as glucose crosses the placenta. As insulin does not cross the placenta, the fetus responds with increased secretion of insulin, which promotes growth by increasing both cell number and size. *About 25% of such infants have a birthweight greater than 4 kg compared with 8% of non diabetics. *The macro''''somia predisposes to ''cephalopelvic'' ''disproportion'', birth ''asphyxia'', ''shoulder'' ''dystocia'' and ''brachial'' ''plexus'' ''injury''. *On ''Propose une céasarienne ''aux mamans avec un macrosome
undefine
undefine
{{maladie_coeliaque_histo.jpg}}
!!Définition
*la ''maladie coeliaque''est une ''inflammation chronique'' avec ''destruction des villosités'' au niveau de l'''intestin grêle'', causée par une ''allergie au gluten'', une vraie allergie.
*la maladie est ''déclenchée par l’ingestion de gluten'' (la gliadine du gluten) lors de ''l’introduction vers 6mois des céréales'' etc. La maladie coeliaque n’apparait que ''2- 4mois après l’introduction du gluten''.
*La ''malabsorption'' qui en résulte induit une ''cassure de la courbe staturo-pondérale''
*La maladie a un ''prédisposition génétlique''
*le lait maternel serait un facteur protecteur
*une incidence de cancer de l'intestin grêle est liée, mais disparait avec le régime sans Gluten
!!Clinique
*''Anorexie'' et ''Retard de développement''
*''Diarrhées '' et ''Vomissements''
*''Hippocratisme Digital''
*''Irritabilité''
*beaucoup de ''manifestations extra-intestinales'' comme l'''anémie ferriprive'' ne répondant pas au fer.
!!Diagnostic
*''Anicorps IgA anti-Transglutaminases'' ou Anticops-anti-endomysium
*la ''biopsie'' pose le diagnostic certain, avec présence de ''muqueuse aplatie''.
!!Traitement
*Régime ''sans Gluten'' a vie
!!Généralités
*La maladie de Bechet est une ''vasculite ANCA négative'' atteignant les ''vaisseaux de taille variable''.
*L’atteinte est ''multisystémique''. Les manifestations les plus connues sont des ''aphtes buccaux et génitaux'', une atteinte oculaire fréquente sous forme d’uvéite, ainsi qu’une ''arthrite'' .
{{maladie_behcet.jpg}}
*__Rappel:__ une ''vasculite'' correspond à l’inflammation avec ±nécrose de la ''paroi des vaisseaux''. Elle implique souvent une ''lésion ischémique de l’organe en aval''. les vasculites sont ''classées suivant la taille des vaisseaux atteints'': grand vaisseaux, moyens vaisseaux, petits vaisseaux, vaisseaux de taille variable. Une autre classification sépare les ''vasculites ANCA positives'' des vasculites ANCA négatives.
!!Définition *La ''maladie de Buerger'' ou thromboangéite oblitérante (à ne pas confondre avec la maladie de Berger), est une maladie survenant habituellement chez ''l'homme'' ''jeune'' dans un contexte ''d'intoxication'' ''tabagique'' ''importante''. *C'est une ''artériopathie'' ''inflammatoire'' exclusivement ''distale'', touchant et oblitérant les vaisseaux, artères et veines, de moyen et petit calibre. Il existe une composante génétique et ethnique. C'est une maladie relativement ''rare mais grave'', représentant 1 à 2 % des artériopathies des membres inférieurs. *Le ''sevrage tabagique total'' reste le seul moyen de limiter la progression de la maladie. * La sympathectomie (section d'un nerf sympathique d'un membre levant la vasoconstriction en distalité), pouvant être couplée à une chirurgie de pontage est une alternative thérapeutique.
{{crohn_RCUH.jpg}}
!!Définition
*la ''Maladie de Crohn'' fait partie des ''MICI'' //(Maladies Inflamatoires Chroniques Intestinales )//, en compagnie de la [[RCUH]].
*Elle est due à une ''agression auto-immune'' du tube digestif, possiblement par des cross-réactions avec des antigènes bactériens
*Elle est caractérisée par une ''inflammation transmurale'' de la paroi intestinale, qui peut survenir ''de la bouche à l'anus''. La région la plus touchée est l'''iléon terminal''.
*Elle suit une ''distribution patchy''.
*Elle comprend les ''lésions'' suivantes:
**''inflammation transmurale'' avec ''épaississement de la paroi''
**''sténoses''
**''fissures''
**''granulomes'' non caséeux
**''infiltration de la graisse''
*Les ''Complications'' comprennent:
**''abcès''
**''fistules''
**''obstructions''
**risque de ''cancer''
**''megacolon toxique''
*malabsorption de B12 et de Bile
*La maladie évolue par des ''poussées-rémissions''
!!Clinique
*''Diarrhées'' généralement non-sanglantes
*''Malabsorption'' et ''perte de poids''
*''Douleurs abdominales''
*Nausées, Vomissements, Fièvre
*Manifestations Extraintestinales (Uvéites, Arthrites, Spondylarthrite Ankylosante, Erythema Nodosum, Lithases biliaires et rénales)
!!Investigations
*''Endoscopie'' couplée d'une ''biopsie'' qui montrera des ulcères, un aspect en pavé, des pseudo-polypes inflammatoires ainsi que des lésions patch.
*''Lavement Baryté''
*''CT'' et ''IRM''
!!Traitement
''Medicaments''
*''Sulfasalazine''
*''Metronidazole''
*''Immunosupresseurs''
''Chirurgie''
*''resection du segment'' touché
*finit par survenir chez tous les patients
*surtout lors de ''complications''
!!Définition
*Il s’agit d’une ''fibrose rétractile progressive de l’aponévrose palmaire'', une membrane située entre les fléchisseurs des doigts et la peau.
*Elle est associée avec ''l’Alcool'' ainsi que le ''Diabète'' ainsi que d’autres facteurs.
*Elle est prévalente surtout chez les ''Européens''.
!!Clinique
*La maladie commence avec l’apparition de ''nodules indolores'' le long de l’aponévrose. Il y a ensuite l’apparition de ''brides'' palmaires et digitales.
*Le doigt le plus affecté est ''l’auriculaire''.
*Penser à chercher le Diabète et l’Alcool
{{dupuytren_schema.jpg}}
!!Traitement
*Les ''nodules'' simples et ''brides'' palpables mais sans ''limitation d’extension'' n’impliquent ''pas de chirurgie''.
*Les atteintes plus sévères avec ''limitation d’extension'' sont une indication pour une ''chirurgie'' par ''fasciotomie''
*Ne pas attendre un stade de déformation articulaire irréversible car la chirurgie est moins efficace à ce moment.
*La maladie ''peut revenir'' après la chirurgie.
![ext[hirschprung.pdf|./pdf/hirschprung.pdf]] <!-- Texte caché pour la recherche Hirschsprung disease The absence of ganglion cells from the myenteric and submucosal plexuses of part of the large bowel results in a narrow, contracted segment. The abnormal bowel extends from the rectum for a variable distance proxi mally, ending in a normally innervated, dilated colon. In 75% of cases, the lesion is confined to the rectosig moid, but in 10% the entire colon is involved. Presenta tion is usually in the neonatal period with intestinal obstruction heralded by failure to pass meconium within the first 24 h of life. Abdominal distension and later bile stained vomiting develop (Fig. 13.15). Rectal examination may reveal a narrowed segment and with drawal of the examining finger often releases a gush of liquid stool and flatus. Temporary improvement in the obstruction following the dilatation caused by the rectal examination can lead to a delay in diagnosis. Figure 13.15 Abdominal distension from Hirschsprung disease. - Summary Hirschsprung disease • Absence of myenteric plexuses of rectum and variable distance of colon Occasionally, infants present with severe, life threatening Hirschsprung enterocolitis during the first few weeks of life, sometimes due to Clostridium difficile infection. In later childhood, presentation is with chronic constipation, usually profound, and associated with abdominal distension but usually without soiling. Growth failure may also be present. - • Presentation – usually intestinal obstruction in the newborn period following delay in passing meconium. In later childhood – profound chronic constipation, abdominal distension and growth failure • Diagnosis – suction rectal biopsy. -->
{{choree_huntington_clinique.JPG}}
!! Généralités
*La ''Chorée de Huntington'' est une maladie ''autosomale dominante'' (Répétitions GAG) touchant les patients de 30-50 ans, avec évolution fatale en 15 ans.
*Elle est caracterisée par une ''perte des neurones GABBA dans le striatum'', avec en conséquence une dilatation de la corne antérieure des ventricules latéraux.
*La ''Clinique'' comprend des ''chorées'' du visage et des membres associée à des ''changements de la personnalité'' majeurs et des ''psychoses''. Les patients développent très souvent une ''démence'' associée. A la fin de la maladie le patient devient ''bradykinésique'' et ''rigide''.
*Le ''diagnostic'' est posé par l'''IRM'' qui montre l'atrophie du noyau caudé associé à l'élargissement des cornes frontales des ventricules latéraux. la ''génétique'' permet de confirmer le diagnostic.
*il n'y a ''pas de traitement'' pour la maladie. les symptômes psychotiques ainsi que la chorée peuvent être limités par des antidépresseurs, antipsychotiques, neuroleptiques, benzodiazépines.
{{choree_huntington_irm.jpg}}
!!Généralités
*La'' maladie de Paget'', ou « Ostéodystrophie déformante » est une maladie métabolique osseuse définie par une ''destruction et réparation excessive de l’os''.
*Elle est possiblement associée à une ''infection virale de paramyxovirus'' qui infecteraient les ostéoclastes, mais on sait pas trop. Il y a aussi un fort ''lien héréditaire''.
*Il y a une ''sur-activation des ostéoblastes'', ce qui mêne à une ''sur-réponse des ostéoblastes''. L’os formé trop est de ''mauvaise qualité architecturale'', avec une plus grande ''fragilité''.
*La maladie est souvent ''Asymptomatique''. On la découvre par une ''RX anormale'' (zones trop ostéo-denses) ou un ''Labo anormal'' (augmentation ++ de la ''Phosphatase Alcaline'')
*Quand elle est symptomatique, le patient se plaint de ''douleurs osseuses''. On peut trouver des ''déformités'', la taille du crâne peut augmenter (taille du chapeau).
*Les complications sont des ''fractures'' et une ''rare transformation sarcomateuse''.
*Le ''traitement des douleurs'' se fait par des ''AINS'' tandis que le ''traitement de la maladie'' se fait par de la ''calcitonine'' et des ''biphosphonates''
{{maladie_paget_rx_densite.jpg}}
!!Définition
*La'' maladie de Pott'' correspond à une ''spondylodiscite à TBC''.
*les patients ont souvent des ''douleurs dorsales'' et une ''cyphose'', associé à des ''symptomes systémiques''.
{{POTT.jpg}}
!! Définition
*La ''maladie de Von Willebrand'' est une maladie à ''transmission autosomale dominante'' atteignant à la fois l'''hémostase primaire'' et la ''coagulation''. Elle est due à un ''Déficit en Facteur von Willebrand'' ainsi qu'un ''Déficit en facteur VIII''
* il existe ''trois formes'' de la maladie
**''Type 1'': Déficit en vW (fréquent)
**''Type 2'': Mauvaise qualité du vW
*''Type 3'': Absence de vW
*__Rappel__: le Facteur Von Willebrand est présent dans les granules alpha des plaquettes, dans l'endothelium et dans le sous-endothelium. Il pertmet l'adhesion des plaquettes au sous-endothelium. Il transporte aussi le facteur VIII de la coagulation.
{{facteur_von_willebrand.jpg}}
!! Clinique
* On trouve surtout des ''Saignements'' (cutanés, epistaxis, ménorragies, Gastro-Intestinal etc.
* Les Blessures ont tendance à trop saigner (Hémophilie)
!! Diagnostic
* au ''Labo'', on trouve un ''temps de saignement augmenté'' mais des ''plaquettes normales''
*on trouve surtout un ''déficit en vW plasmatique'' ainsi qu'un ''déficit en facteur VIII''.
!! Traitement
* Le ''type 1'' (le plus fréquent) peut se traiter par ''desmopressine (DDAVP)'', une molécule qui ''stimule la sécrétion de vW par les plaquettes'' (donc ne marche pas pour le type 3)
*donner aussi une ''substitution de facteur vW''.
{{whipple.jpg}}
!!Définition
*la ''maladie de Whipple'' est une maladie rare provoquée par la bactérie //Tropheryma whipplei//.
*L'infection entraine des dégats dans les villosités intestinales
!!Clinique
*''Perte de poids''
*''Diarrhées''
*''Douleurs articulaires''
!!Investigation
*''biopsie'' de l'intestin avec mise en évidence de ''Macrophages'' et de la ''Bactérie'' au niveau de la ''muqueuse'' intestinale.
!!Traitement
*''ATB'' durant 1 à 2 ans
{{griffes_du_chat.jpg}}
!!Définition
*la ''Maladie des Griffes du Chat'' est due à //Bartonella henselae//. On l'attrape sur des griffures de //''chat infectés par une mouche''//.
!!Clinique
*''griffure originelle'' avec souvent ''vésicule / papule''
*''adénopathies'' sur le trajet lymphatique de la griffure
!!Investigations
*''Sérologies'', posent le diagnostic en combinaison avec la clinique
!!Traitement
*Généralement ''pas besoin'' de traitement
*Doxycycline ou Ciprofloxacine si sévère
![ext[maladie_membrane_hyaline.pdf|./pdf/maladie_membrane_hyaline.pdf]] <!-- Texte caché pour la recherche Respiratory distress syndrome In respiratory distress syndrome (RDS), (also called hyaline membrane disease), there is a deficiency of sur factant, which lowers surface tension. Surfactant is a mixture of phospholipids and proteins excreted by the type II pneumocytes of the alveolar epithelium. Surfactant deficiency leads to widespread alveolar col lapse and inadequate gas exchange. The more preterm the infant, the higher the incidence of RDS; it is common in infants born before 28 weeks’ gestation and tends to be more severe in boys than girls. Surfactant deficiency is rare at term but may occur in infants of diabetic mothers. The term hyaline membrane disease derives from a proteinaceous exudate seen in the airways on histology. Glucocorticoids, given antenatally to the mother, stimulate fetal surfactant production and are given if preterm delivery is anticipated (see Ch. 9.) The development of surfactant therapy has been a major advance. The preparations are natural, derived from extracts of calf or pig lung. They are instilled directly into the lung via a tracheal tube. Multinational placebo controlled trials show that surfactant treat ment reduces mortality from RDS by about 40%, without increasing the morbidity rate (Fig. 10.11). - At delivery or within 4 h of birth, babies with RDS develop clinical signs of: • • tachypnoea >60 breaths/min laboured breathing with chest wall recession (particularly sternal and subcostal indrawing) and nasal flaring 1 2 3 159 4 Neonatal medicine Stabilising preterm or sick infants Airway, breathing • Respiratory distress: tachypnoea, laboured breathing with chest wall recession, nasal flaring, expiratory grunting, cyanosis • Apnoea Management, as required: • Clear the airway • Oxygen • High flow humidified oxygen therapy - • CPAP (continuous positive airway pressure) • Mechanical ventilation Monitoring • Oxygen saturation (maintain at 88–95% if preterm) • Heart rate • Respiratory rate • Temperature • Blood pressure • Blood glucose • Blood gases • Weight Temperature control • Place in plastic bag at birth to keep warm if extremely preterm • Perform stabilisation under a radiant warmer or in a humidified incubator to avoid hypothermia. Figure 10.8 Stabilising preterm or sick infants is important to prevent complications. This preterm infant has leads on his limbs for monitoring heart rate and respiratory rate, temperature and oxygen saturation. There are arterial and intravenous cannulae and a nasotracheal tube for artificial ventilation. Venous and arterial lines 10 Peripheral intravenous line Required for intravenous fluids, antibiotics and other drugs. Umbilical venous catheter May be used for intravenous access at resuscitation, in extremely preterm infants for the first few days or to administer high osmolality fluids (e.g. high concentration dextrose) or medications needing central delivery (e.g. inotropes). - Arterial line • Inserted if frequent blood gas analysis, blood tests and continuous blood pressure monitoring are required. Usually umbilical artery catheter (UAC), sometimes peripheral cannula if for short period or no umbilical artery catheter possible. • The arterial oxygen tension is maintained at 8–12 kPa (60–90 mmHg) and the CO 2 tension at 4.5–6.5 kPa (35–50 mmHg). Continuous non invasive transcutaneous arterial blood gas monitoring may also be used. - Central venous line for parenteral nutrition, if indicated Inserted peripherally when infant is stable. Chest X-ray with or without abdominal X-ray Assists in the diagnosis of respiratory disorders and to confirm the position of the tracheal tube and central lines. Investigations • Haemoglobin, neutrophil count, platelet count • Blood urea, creatinine, electrolytes and lactate • Culture – blood ± CSF ± urine • Blood glucose • CRP/acute phase reactant • Coagulation screen if indicated Antibiotics Broad spectrum antibiotics are given. - Minimal handling All procedures, especially painful ones, adversely affect oxygenation and the circulation. Handling the infant is kept to a minimum and done as gently, rapidly and efficiently as possible. Analgesia should be provided to prevent pain as necessary. Parents Although medical and nursing staff are usually fully occupied stabilising the baby, time must be found for parents and immediate relatives to allow them to see and touch their baby and to be kept fully informed. 160 Neonatal medicine The preterm infant: maturational changes in appearance and development Figure 10.9 (a) Preterm infant. (b) Term infant. (a) (b) Table 10.1 The preterm infant compared with the term infant Gestation 23–27 weeks Term (37–42 weeks) Birthweight (50th centile) At 24 weeks – male 700 g, female 620 g At 40 weeks – male 3.55 kg, female 3.4 kg Skin Very thin (Fig. 10.9a) Thick skin (Fig. 10.9b) Dark red colour all over body Pale pink colour Ears Pinna soft, no recoil Pinna firm, cartilage to edge, immediate recoil Breast tissue No breast tissue palpable One or both nodules >1 cm Genitalia Male – scrotum smooth, no testes in scrotum Male – scrotum has rugae, testes in scrotum Female – prominent clitoris, labia majora widely separated, labia minora protruding Female – labia minora and clitoris covered Breathing Needs respiratory support. Apnoea common Rarely needs respiratory support. Apnoea rare Sucking and swallowing No coordinated sucking Coordinated (from 34–35 weeks) Feeding Usually needs TPN (total parenteral nutrition), then tube feeding Cries when hungry. Feeds on demand Cry Faint Loud Vision, interaction Eyelids may be fused. Infrequent eye movements. Not available for interaction Makes eye contact, alert wakefulness Hearing Startles to loud noise Responds to sound Posture Limbs extended, jerky movements Flexed posture, smooth movements Figure 10.10a Parental involvement in neonatal care. Skin to skin contact between infant and parent (Kangaroo care) promotes bonding. - - (a) (b) Figure 10.10b Parental involvement in neonatal care. Mother giving her baby expressed breast milk (in syringe) via nasogastric tube, allowing close eye and skin contact between mother and baby. 2 3 161 1 4 Neonatal medicine Respiratory distress syndrome • Common in very preterm infants 10 • Caused by surfactant deficiency • Antenatal corticosteroids and surfactant therapy markedly reduce morbidity and mortality. Decreased risk Increased risk Pneumothorax Patent ductus arteriosus Intraventricular haemorrhage Bronchopulmonary dysplasia Mortality 0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 Odds ratio (95% confidence interval) 1.6 Figure 10.12 Chest X ray in respiratory distress syndrome showing a diffuse granular or ‘ground glass’ appearance of the lungs and an air bronchogram, where the larger airways are outlined. The heart border becomes indistinct or obscured completely with severe disease. A tracheal tube and an umbilical artery catheter are present. - Figure 10.11 Meta analysis of treatment of preterm infants with natural surfactant, showing a dramatic reduction in pneumothoraces and mortality. - • • expiratory grunting in order to try to create positive airway pressure during expiration and maintain functional residual capacity cyanosis if severe. The characteristic chest X ray appearance is shown in Figure 10.12. Treatment with raised ambient oxygen is required, which may need to be supplemented with continuous positive airway pressure (delivered via nasal cannulae) or artificial ventilation via a tracheal tube. The ventilatory requirements need to be adjusted according to the infant’s oxygenation (which is meas ured continuously), chest wall movements and blood gas analyses. Mechanical ventilation (with intermittent positive pressure ventilation or high frequency oscilla tion) may be required. High flow humidified oxygen therapy, via nasal cannulae, may be used to wean babies from added oxygen therapy. - - - Figure 10.13 Chest X ray showing bilateral pneumothoraces in a preterm infant with respiratory distress syndrome. - Surfactant therapy reduces morbidity and mortality of preterm infants with respiratory distress syndrome. -->
undefine
undefine
undefine
undefine
undefine
{{malaria.jpg}}
!!Définition
*la ''Malaria'', ou ''Paludisme'' peut être causé par ''4 parasites'' différents:
**''//p.falciparum//'' (la plus dangereuse)
**//p.ovale//
**//p.vivax//
**//p.malariae//
*le ''moustique '' tranportant le parasite est prévalent au niveau de l'''afrique'' ainsi que d'autres régions
{{palu_map.jpg}}
!!Clinique
*''Fièvre'', frissons (constante pour //p.falciparum//, en pics récurrents pour les autres)
*''Myalgies''
*''Céphalées''
*''Diarrhées''
*''Nausées / Vomissements''
*Les symptomes peuvent débuter des ''semaines'' après l'infection
!!Investigations
*''frottis sanguin'', avec visualisation du [[macromegatocyte|malaria_macrogametocyte.jpg]], généralement avec la coloration //''Giemsa''//.
!!Traitement
*''Chloroquine'', mais beaucoup de résistances, surtout dans certains pays
*Sinon ''Quinine'' et ''Tetracycline''
*Alternatives: Mefloquine, Atrovaquone-Proguianil
*//p.vivax// et //p.ovale// peuvent faire des récurrentes car dormant dans le foie
*''prophylaxie'' par ''Mefloquine'' pour les voyageurs dans les réions endémiques
undefine
undefine
undefine
undefine
{{mallory_weiss.jpg}}
!!Généralités
*le ''Syndrome de Mallory-Weiss'' correspond à une ''déchirure dans la muqueuse'' au niveau de la ''jonction gastro-duodénale''.
*Elle est due à des ''vomissements à répétition'', souvent liée au ''binge drinking''.
*L'''Hématémèse'' est le symptôme toujours présent, il peut être de quantité variable.
*Le ''Syndrome de Boerhaave'' (ou rutpure de l'oesophage) correspond lui à une ''déchirure transmurale'' avec ''perforation''.
*Le ''Diagnostic'' passe par l'''endoscopie''.
*Le ''Traitement'' est généralement ''pas nécessaire'' car 90% des cas guérissent spontanément. On donne des ''anti-acides'' pour aider à guérir
*Dans les cas qui ne guérissent pas, la chirurgie peut être faite, voir une embolisation.
{{mallory_weiss_endoscopie.jpg}}
![ext[malrotation.pdf|./pdf/malrotation.pdf]] <!-- Texte caché pour la recherche Malrotation During rotation of the small bowel in fetal life, if the mesentery is not fixed at the duodenojejunal flexure or in the ileocaecal region, its base is shorter than normal, and is predisposed to volvulus. Ladd bands may cross the duodenum, contributing to bowel obstruction (Fig. 13.8). Figure 13.8 The commonest form of malrotation, with the caecum remaining high and fixed to the posterior abdominal wall. There are Ladd bands obstructing the duodenum. Dotted lines show normal anatomy. the right and the caecum and appendix on the left. The malrotation is not ‘corrected’, but the mesentery broadened. The appendix is generally removed to avoid diagnostic confusion in the event the child sub sequently has symptoms suggestive of appendicitis. Summary Malrotation • Uncommon but important to diagnose • Usually presents in the first 1–3 days of life with intestinal obstruction from Ladd bands obstructing the duodenum or volvulus • May present at any age with volvulus causing obstruction and ischaemic bowel There are two presentations: Obstruction Obstruction with a compromised blood supply. Obstruction with bilious vomiting is the usual presen tation in the first few days of life but can be seen at a later age. Any child with dark green vomiting needs an urgent upper gastrointestinal contrast study to assess intestinal rotation, unless signs of vascular compromise are present, when an urgent laparotomy is needed. • • At operation, the volvulus is untwisted, the duode num mobilised and the bowel placed in the non rotated position with the duodenojejunal flexure on - • Clinical features are bilious vomiting, abdominal pain and tenderness from peritonitis or ischaemic bowel • An urgent upper gastrointestinal contrast study is indicated if there is bilious vomiting • Treatment is urgent surgical correction -->
![ext[maltraitance_ped.pdf|./pdf/maltraitance_ped.pdf]] <!-- Texte caché pour la recherche -->
undefine
undefine
![ext[Masses Médiastinales.html|./html/masses_mediastinales.html]] <!-- Masses médiastinales Généralités - [ ] Les tumeurs médiastinales se développent en général au dépens du poumon (qui est peu résistant) et donc l’effet de masse passe inaperçu (Asx ++) Symptômes - [ ] Toux - [ ] Douleur thoracique - [ ] Dyspnée - [ ] Infections récurrentes - [ ] Dysphagie - [ ] Dysphonie - [ ] Oedèmes de la face et des membres supérieurs (syndrome de la veine cave supérieure) - [ ] Syndromes paranéoplasiques (myasthénie grave pour les thymomes) Anatomie du médiastin Antérieur Moyen Postérieur - [ ] Antéro-sup: sup et ant du coeur (thymus, Rx adipeux et lymphoïde) - [ ] Moyen; péricarde et coeur + cœur + Ao asc, VCS, Ns Phréniques, trachée, bronches souches et lymphatiques. - [ ] Postérieur : Ao desc, cond tho, v Azygos et hémiazygos, œsophage, n vague, tronc nerveux autonome, paquets intercostaux. - [ ] Nerfs (vague, phrénique), vaisseaux, ganglions, trachée œsophage, thymus, etc. - [ ] Accessible par le cou, à travers le sternum ou entre les côtes - [ ] Médiastin = tout le contenu thoraciques sauf les poumons (et le coeur, œsophage et gros vaisseaux) 70% des tumeurs primaires sont bénignes - [ ] Tumeurs neurogènes - [ ] Tumeurs et kystes thymiques - [ ] Lymphomes - [ ] Tératomes - [ ] Kystes DD tumeurs médiastinales Médiastin antérieur (antéro-supérieur) 4T - [ ] Tyroïde (goître plongeant) Tumeurs du thymus Généralités - [ ] Fréquent - [ ] 75% bénigne Association syndromique - [ ] Myasthénie Ac anti-R-acétylcholine, EMG - [ ] Hypogammaglobulinémie - [ ] Anémie érythroblastopénique FSC - [ ] Traitement = exérèse Thymome - [ ] M>H - [ ] Entre 40-60ans - [ ] 50% associé à la myasténie grave FR - [ ] Myasthénie grave - [ ] Syndromes paranéoplasiques Présentation - [ ] Aux ++ - [ ] Douleur poitrine - [ ] Toux - [ ] Paralysie du nerf phrénique Investigations - [ ] CT thorax et/ou IRM Marqueurs de cellules germinales tumorales - [ ] β-hcg - [ ] α-foetoprotéines - [ ] Fonction thyroïde Traitement - [ ] Être sur que pas de myasthénie avant opération du thymus (risque d'arrêt respiratoire). Association thymome et myasthénie car maladies immunologiques, les deux = présence d'Ac. Pas chaque thymome est dans le cadre d'une myasthénie mais il faut vérifier - [ ] Résection du thymus par stéréotomie médiane - [ ] ± RT post-opérative selon stade Si pas opératoire - [ ] CT néoadjuvante ou palliative - [ ] Chirurgie - [ ] Chimiothérapie post-opératoire Pronostic - [ ] Selon stade - [ ] Tumeurs à croissance longue - [ ] Carcinome thymique Tératome (et Tumeurs germinales) - [ ] Structures bizarre calcifiées - [ ] Bilan: β-HCG et α-fœtoprotéine Bénignes: tératomes (ecto-méso-endoderme) - [ ] Freq chez adolescents. Sexe 1:1 - [ ] Contiennent: poils, dents et glandes sébacées - [ ] Radio: souvent ont de calcifications int. - [ ] TTT: chir - [ ] 20% malignes (mauvais pronostic) Malignes: séminome (c germinale), carcinome embryonnaire, tératocarcinome, choriocarcinome, mésoblastome - [ ] Homme et médiastin ant-sup - [ ] symptomatiques Séminomes - [ ] Jeune adulte - [ ] Ni aFP ni bHCG Tumeurs non séminomateuses - [ ] Agressives - [ ] aFP et bHCG + - [ ] Traitement: chimio 1e puis chir T-cell lymphoma (ou Terrible lymphoma) - [ ] Lymphome de Hodgkin - [ ] Lymphome non Hodgkinien - [ ] Se longent vers le thymus - [ ] Kyste péricardique - [ ] Lipome - [ ] Aussi possible tumeur primaire du poumon - [ ] Adénome parathyroïdens ectopiques, souvent dans le thymus Médiastin moyen Kyste péricardique - [ ] Kystes médiastin aux les plus fréquents. - [ ] A la jonction diaphragme-péricardes - [ ] A Droite surtout - [ ] Ttt : ponction percutanée - [ ] Chirurigie si récidive ou doute diagnostic Kyste/tumeur bronchogénique - [ ] Carène ou poumon - [ ] Altération lors de la ramification trachéo-bronchite - [ ] Peuvent fistulines dans les bronches (niveau hydroaérique, infection, abcès) - [ ] Traitement: chirurigie - [ ] Kystes para-œsophagiens (Zenker) - [ ] Anévrisme aortique (aorte ascendante) ADP - [ ] Lymphome - [ ] Cancers pulmonaires - [ ] TB - [ ] Sarcoïdose Médiastin postérieur - [ ] IRM pour le DD Tumeurs neurogènes Présentation - [ ] Opacité rondes - [ ] Homogènes - [ ] En général Asx Mais 5% de compression médullaire - [ ] Souvent associé à la maladie de Recklinghausen (= neurofibromatose) (10% de dégénérescence, cutanée et nerveuse) - [ ] Rarement malignes - [ ] Fréquence ++ chez adulte - [ ] Hauteur: sillon costo-vertébral Se développent au dépend de la chaine sympathique ou d’un nerf intercostal Des gaines - [ ] Schwannomes (=neurnome), schwanosarcome - [ ] Neurofibrome / neurofibrosarcome Des cellules sympathiques - [ ] Sympathome / sympathoblastome - [ ] Ganglioneurome / ganglioneuroblastome Des cellules chromaffines - [ ] Paragangliome Traitement - [ ] Exérèse chirurgicale Parfois, précédée pour sécurité par une artériographie spinale à la recherche d’une artère d’Adamkiewicz haute qu’il faut respecter lors de l’exerèse (pour éviter paraplégie postopératoire) - [ ] Car elles peuvent compresser - [ ] Et à cause de l’incertitude diagnostique - [ ] Méningocèle - [ ] Kystes entériques - [ ] Lymphomes - [ ] Hernies diaphragmatiques - [ ] Tumeur oesophagiennes - [ ] Anévrisme aortique Examens complémentaires PS - [ ] T4-TSH - [ ] α-foeto-protéine et β-HCG pour tumeur d’origine embryonnaire - [ ] LDH et β2-microglobuline pour lymphome Imagerie Rx thoracique - [ ] Face - [ ] Profile CT thoracique avec contraste IV - [ ] Localisation anatomique - [ ] Densité - [ ] Relation avec les structures vasculaires médiastinale) - [ ] IRM pour les nerfs, PET pour les cancers - [ ] Scintigraphie Fibroscopie bronchique - [ ] Systématique en cas d'opiacé pulmonaire - [ ] LésionI proximale ++ - [ ] Bx possibles - [ ] Lavages possibles Ponction percutanée sous CT pour le diagnostic Ponction trans-bronchique (EBUS) - [ ] Nouvel outil performant - [ ] Lésions pulmonaire et médiastinales - [ ] Staging cancer pulmonaire - [ ] Faux négatifs Ponction trans-pariétale - [ ] Lésions pulmonaire et médiastin ales - [ ] Staging des lésions thymiques - [ ] Sous CT Médiastinoscopie (biopsie) - [ ] Se fait en AG - [ ] Incision cervicale - [ ] Longe la trachée avec un score - [ ] Permet Bx - [ ] Médiastinotomie antérieure - [ ] Se fait plus - [ ] Invasif ++ Thoracotomie-thoracoscopie - [ ] Plus invasif - [ ] Médiastin antérieur, moyen et postérieur atteignable par thoracotomie Diagnostic - [ ] Ponction percutanée sous CT - [ ] Médiastinoscopie (Bx) Syndrome de la VCS - [ ] Résulte d’une diminution du retour veineux Drainage de la tête, du cou et des MS - [ ] Causé par une compression ou un envahissement de la VSC Etiologie - [ ] Cancer pulmonaire à petites cellules +++ (du lobe supérieur D) - [ ] Aussi possible mais moins fréquent : lymphomes et tumeurs médiastin antérieur - [ ] ➜ Maligne ++ - [ ] Bénignes: médiastin te chronique post TB ou RT, tumeur médiastin, anévrisme aorte, thrombose VCS Manifestations - [ ] Turgescence de la face - [ ] Dilatation veineuse (visible sous la langue) - [ ] Oedème « en pèlerine » : bras, cou, tête et haut du thorax avec complément des creux sus-claviculaires - [ ] Dyspnée, toux HTIC - [ ] Céphalées - [ ] Troubles de la vigilance - [ ] Vertiges - [ ] Acouphènes - [ ] Epistaxis, saignements - [ ] Dysphonie - [ ] Rougeur du visage - [ ] Turgescence jugulaire bilatérale - [ ] Collatérales sur le thorax si pas trop aigu - [ ] Cyanose du territoire cave supérieur Signe de Pemberton - [ ] A la levée des deux bras au dessus de la t'ete - [ ] Flush facial - [ ] Cyanose - [ ] Distension des veines du cou Traitement - [ ] Stéroïdes Traitement causal - [ ] RT pour cancer épidermoïde ou lymphome - [ ] Chimio : cancer à petites cellules, lymphomes. - [ ] Chir: si cancer résecable - [ ] Eventuellement remplacement prothétique de la VCS -->
undefine
undefine
<<tabs "[[Rhumatologie]] [[Hématologie]] [[Endocrinologie]] [[Neurologie]] [[Cardiologie]] [[Pneumologie]] [[Gastro-Entérologie]] [[Néphrologie]] [[Infectiologie]]" "Rhumatologie" "" "tc-vertical">>
<<tabs "[[Pulmonaire.nucl]] [[Osseux.nucl]] [[Rénal.nucl]] [[Oncologie.nucl]] [[Neurologie.nucl]] [[Inflammatoire.nucl]] [[Endocrinologie.nucl]]" "Pulmonaire.nucl" "" "tc-vertical">>
!!Généralités
*la ''Médiastinite'' est une pathologie urgente et ''mortelle'', correspondant à une inflammation du médiastin. Elle peut être ''aigue ''ou ''chronique''.
''Médiastinite Aigue''
*les ''Causes'' les plus fréquentes sont ''post-opératoires'', typiquement opérations cardio-vasculaires ou thoraciques, ou encore les ''endoscopies'' ou les ''abcès retro-pharyngés''.
*la ''Clinique'' comprend des ''douleurs sous-sternales'' et de la ''fièvre''. on trouve aussi un ''pneumomédiastin'' qui peut s'entendre à l'auscultation en synchronisation avec le rythme cardiaque (//signe de Hamman//)
*le ''traitement'' comprendra le ''drainage'' ainsi que les ''antibiotiques''
{{acute_mediastinitis_ct.jpg}}
''Médiastinite Chronique''
*C'est un ''diagnostic radiologique'' montrant une ''fibrose'' des tissus du médiastin.
*La ''cause'' est surtout les maladies ''granulomateuses'' et les ''précédentes infections'' (histoplasmose, syphilis, TB, sarcoïdose) ou encore ''post-radique''.
*Les ''symptômes'' sont généralement dus à la ''compression'' des vaisseaux ou voies aériennes du médiastin, comme le ''syndrome cave supérieur'' ou l'''odème pulmonaire'' par compression des veines pulmonaires.
{{mediastinite_chronique_ct.jpg}}
undefine
@@background-color:mediumpurple; !''Médicaments'' @@ <<list-links "[tag[Médicaments]sort[title]]">>
//en construction//
{{megacolon_toxique.jpg}}
!!Généralités
*le ''megacolon toxique ''est une ''inflammation du muscle digestif avec paralysie''.
*C'est une ''urgence''
*les ''Causes'' principales sont
**''RCUH'' comme première cause
**''Crohn''
**''Colite infectieuse''
**Autres Colites, comme la [[Colite Pseudomembraneuse]]
*la ''Clinique'' comprend
**''douleur abdominale''
**''balonnement''
**''fièvre''
*la ''Radiologie'' permet de le mettre en évidence le megacolon
*le ''Traitement'' comprend
*#Tenter une ''décompression'' en premier lieu
*# ''Chiurgie'' si échec
{{megacolon_toxique_rx.jpg}}
undefine
undefine
undefine
![ext[dermato_melanome.pdf|./pdf/dermato_melanome.pdf]] <!-- Texte caché pour la recherche Mélanome - 2è cancer CH <40ans, touche « jeunes ». Incidence croissante. - Métastases : pulmonaires, osseuses, cérébrales, cardiaques - FR Non modifiables : phototype I/IV, yeux bleus, roux, éphélides, sy nævi atypique, nombreux nævi, ATCD de mélanome, AF de mélanome (pire si syndrome du nævus atypique), xeroderma pigmentosum (AR) - FR Modifiables : soleil, UV artificiels (cabines de bronzage, photothérapie), immuosuppression (tx organes, ttt biologiques) In situ, à extension superficielle (polymorphe, 1 e extension horizontale puis verticale), nodulaire (extension 1 e verticale, killer, ± achromique), acro-lentigineux (prolifération en 1 couche le long MB), lentigo maligna (prolifération maligne sur la Mb et les annexes « in situ » sur zone photoexposées), mélanome sur lentigo maligna. - Règle ABCDE : Asymetry, Border (irrégulier, mal défini), Color (≥2 couleurs), Diameter (>6mm), Evolving (change couleur/taille/forme). - Indice de mélanome (dermatoscope) : zone sans structure excentrée – cercles/lignes/points/clods (globules) gris – pseudopodes/lignes radiaires segmentaires – lignes blanches – points/clods noirs segmentaires – lignes réticulées épaisses – vaisseaux polymorphes -1 (SN) : Dépistage pt à risque (lésion changeante/sx, nouveau si âgé, atypique, analyse « ugly duckling », par photo/ vidéodermoscopie) (reconnaissance différentielle : 1 est différent des autres) -2 (SP) : ABCDE, dermatoscope (patrons bénins ou indices malignité) -3 : Si suspect → Exérèse (pas Bx !) + histo (thèques mélanocytes → couche cornée = migration pagétoïde, atpyie¢, trouble différenciation, fusion thèques, fibroplasie papillaire, infiltrat PMN) Pronostic : Breslow++ (mm) (et pas stade N/M), Niveau de Clark I = intra-épithélial (0.5cm), II = derme papillaire partiel (1.5cm), 3 = total (2cm), IV = derme réticulaire (4cm), V = graisse (facteur pronostic) - In situ : ø bilan - Breslow <1mm : US abdo et aires ggl + Rx thorax - Breslow >1mm : CT thoraco-abdo, bx ggl sentinelle (SLND) : lymphoscitigraphie, bleu de méthylène (excision + analyse) ± PET. - In situ : chirurgie, marge 0.5cm, cô 1x/an - Breslow <1mm : chir, marge 1cm → fascia. Cô 2x/an 5ans puis 1x/an. - Breslow >1mm : chirurgie, marges 1-2cm → fascia, ± SLND : si+ → curage ggl sélectif. Cô clinique + Rx 3x/an 3ans puis 2x/an 2ans puis 1x/an. Bilan d’extension 1x/an 5ans. - Stade III : adjuvant si ø résiduel: IFN-α, immunothérapie ⊣checkpoint Si résiduel/méta en transit : CT locale, vaccinothérapie (T-vec virus oncolytique : herpès recombinant, GM-CSF) - Stade IV : maladie évolutive BRAF muté : ttt BRAF + MEK inhibiteurs. Si BRAF ø muté : CT ou idem stable. Si stable : immunothérapie (check-point ± anti-CTLA4, anti-PD1) - ABCDE pas efficace pour les carcinomes nodulaires. - Mélanome des ongles : mélanolychie en bande/épaisseur irrégulière - CAVE : Mélanome peut être achromique (mal différencié)!! - Stade III : ADP méta (>2cm de tumeur 1° ; <2 = lésion satellite), Stade IV : méta systémique. GEN CLASS CLIN INV BILAN TTT TTT (suite) CAVE -->
{{melanoma.jpg}}
!!Melanome
*L'''Epaisseur'' de la lésion primaire du mélanome est le ''facteur pronostic'' le plus important, qu'on estime via l' ''Indice Breslow''
*Avec des métastases à distance, le pronostic est très mauvais
*le mélanome des patients à ''haut risque'' //''(Breslow >4mm)''// peut ''métastasier n'importe ou'' (peau, sous-cutané, organes,...), justifiant de un //''WB PET-CT''//.
*Pour les //''patients à risque intermédiaire''// ''//(Breslow >1.5mm)//'' on fait un[[ ganlion sentinelle|Lymphoscintigraphie (ganglion sentinelle aux nanocolloïde)]] pour voir si le Melanome a métastasié à distance.
<$button popup="$:/11.09.16_melanome.gif" >
[img width=64 [images/11.09.16_melanome.gif]]
</$button><$reveal type="popup" state="$:/11.09.16_melanome.gif"><div class='tc-tiddler-frame'>
{{11.09.16_melanome.gif}}
</div>
</$reveal>11.09.2016: Multiples métastases
![ext[MAP.pdf|./pdf/MAP.pdf]] <!-- Texte caché pour la recherche Ce que l’on doit relever Ce qui est discuté Diagnostics •Menace d’accouchement prématuré •Pyélonéphrite Traitement Hospitalisation Repos Tocolyse Hydratation Antibiothérapie Prévention Repos Maturation pulmonaire Cultures urinaires post-traitement Complications néonatales en cas de prématurité Immaturité pulmonaire Entérocolite nécrosante Hémorragie intraventriculaire Immaturité cardiovasculaire Séquelles neurologiques (à court et à long terme) Décès Objectifs d‘apprentissage • Définition/classification • Facteurs de risque de l‘accouchement prématuré • Anamnèse et examen clinique et examens complémentaires en cas de menace d’accouchement prématuré • Traitements de la menace d’accouchement prématuré • Les complications néonatales en cas de prématurité • Les mesures de prévention Menace d’accouchement prématuré (MAP) et Accouchement prématuré (AP) • MAP: Association de modifications cervicales et de CU régulières et douloureuses entre 22 et 36 SA révolues • AP: Accouchement <37 semaines • Classification: – Prématurité moyenne: entre 32 et 37 SA. Elle représente 80% des naissances prématurées. – Grande prématurité: entre 28 et 31 SA. Elle représente 10% des naissances prématurées. – Très grande prématurité: avant la 28e SA. Elle représente 10% des naissances prématurées. • 25% des prématurités sont iatrogènes • 30% des AP sont dus à la rupture prématurée des membrane. Facteurs de risque Facteurs maternels – Bas niveau socio-économique – Ethnie – Age maternel <18 ans ou >40 ans – Maigreur préconceptionnelle – Tabac et toxicomanie – Diabète et HTA – Maladies cardiovasculaires – Anémie – Non suivi de la grossesse – Grossesses rapprochées Causes utérines et obstétricales –Surdistension utérine (↑ liquide amniotique, grossesse multiple) –Malformations et tumeurs utérines –Problèmes cervicaux utérins –Traumatismes obstétricaux –Rupture prématurée des membranes –Hémorragie –Complications foetales Antécédents Obstétricaux – Antécédents d’AP – Antécédent de FC à répétition et FC tardives Infection - Chorioamnionite - Infections cervico-vaginales - Infections dentaires, urinaires et systémiques Divers Sites potentiels d’infection Bilan diagnostique • Anamnèse • Examen clinique général – Tension artérielle • Examen gynéco- obstétrical – Température – Auscultation cardiorespiratoire – Palpation abdominale et rénale – Palpation abdominale et mensurations – Spéculum – Toucher vaginal (proscrit si RPM) Bilan diagnostique • Examens complémentaires – Formule sanguine complète – Cultures cervico-vaginales – Bandelette urinaire et culture urinaire * Si suspision de RPM: test au bromothymol, fern test, actimprom ou amniosure – Monitoring fœtal – Echographie abdominale et transvaginale – Fibronectine fœtale Echographie Cervical Length Measured by Transvaginal Ultrasonography at 24 Weeks of Gestation (Solid Line) and Relative Risk of Spontaneous Preterm Delivery before 35 Weeks of Gestation. Echographie Echographie -->
!! Généralités
* Le ''méningiome'' est une tumeur ''bénigne'' neurologique ''extra-axiale'', se développant à partir de la ''dure-mère''. C'est la tumeur extra-axiale la plus fréquente.
*A ne pas confondre avec le Schwannome qui est une tumeur des nerfs périphériques (cellules de schwann)
*On la visualise par l'''IRM'' principalement,comme une masse bien délimitée se ''rehaussant fortement avec le contraste'', avec le ''signe de la queue de la comète'' (la "queue" de la comète rejoins les méninges). De plus, étant une tumeur extra-axiale, elle est ''séparée du cerveau par une couche de LCR'', plus ou moins visible
*Le ''traitement'' est l'''exérèse chirurgicale'', avec un pronostic excellent.
{{meningiome_irm.jpg}}
undefine
![ext[meningite_encephalite.pdf|./pdf/meningite_encephalite.pdf]] <!-- Texte caché pour la recherche Meningitis in Chapter 6 on Paediatric Meningitis occurs when there is inflammation of the meninges covering the brain. This can be confirmed by finding inflammatory cells in the cerebrospinal fluid (CSF). Viral infections are the most common cause of meningitis, and most are self resolving. Bacterial men ingitis may have severe consequences. Other causes of non infectious meningitis include malignancy and autoimmune diseases. - - 243 1 2 Infection and immunity The febrile child 14 Upper respiratory tract infection Very common, may be coincidental with another more serious illness Otitis media Always examine tympanic membranes in febrile children Tonsillitis Erythema or exudate on the tonsils? Stridor Epiglottitis? Viral croup? Bacterial tracheitis? Pneumonia Fever, cough, raised respiratory rate, chest recession, abnormal auscultation. In infants, auscultation may be normal – diagnosis may require chest X-ray Septicaemia Can be difficult to recognise in absence of rash before shock develops. Early signs are tachycardia, tachypnoea and poor perfusion. Need to start antibiotics on clinical suspicion without waiting for culture results Meningitis/encephalitis Lethargy, loss of interest in surroundings, drowsiness or coma, seizures. Older children - headache, photophobia, neck stifness, positive Kernig sign (pain on leg straightening). Younger children and infants - non-specific symptoms and signs. Raised intracranial pressure - reduced concious level, abnormal pupillary responses, abnormal posturing, Cushing triad (bradycardia, hypertension, abnormal pattern of breathing). Late signs – papilloedema, bulging fontanelle in infants, opisthotonus (hyperextension of head and back) Figure 14.3 Some diagnostic clues to evaluating the febrile child. Seizure Febrile convulsion? Meningitis? Encephalitis? Periorbital cellulitis Redness and swelling of the eyelids. May spread to orbit of the eye Rash Viral exanthem? Purpura from meningococcal infection (Fig. 6.10) Urinary tract infection Urine sample needed for any seriously ill young child or any febrile illness that does not settle Abdominal pain Appendicitis? Pyelonephritis? Hepatitis? Diarrhoea Gastroenteritis? Fever with blood and mucus in the stool: Shigella, Salmonella or Campylobacter Osteomyelitis or septic arthritis Suspect if painful bone or joint or reluctance to move limb Prolonged fever Bacterial infection, e.g. UTI, bacterial endocarditis. Other infections – viral, fungal, protozoal. Kawasaki disease. Drug reaction. Malignant disease. Connective tissue disorder Bacterial meningitis Over 80% of patients with bacterial meningitis in the UK are younger than 16 years old. Bacterial meningitis remains a serious infection in children, with a 5–10% mortality. Over 10% of survivors are left with long term neurological impairment. Pathophysiology Bacterial infection of the meninges usually follows bacteraemia. Much of the damage caused by menin geal infection results from the host response to infec tion and not from the organism itself. The release of - inflammatory mediators and activated leucocytes, together with endothelial damage, leads to cerebral oedema, raised intracranial pressure and decreased cerebral blood flow. The inflammatory response below the meninges causes a vasculopathy resulting in cere bral cortical infarction, and fibrin deposits may block the resorption of CSF by the arachnoid villi, resulting in hydrocephalus. Organisms 244 The organisms which commonly cause bacterial men ingitis vary according to the child’s age (Table 14.1). Infection and immunity Table 14.1 Organisms causing bacterial meningitis according to age Neonatal–3 months Group B streptococcus E. coli and other coliforms Listeria monocytogenes Neisseria meningitidis Streptococcus pneumoniae Haemophilus influenzae Neisseria meningitidis Streptococcus pneumoniae certain parts of the world. The length of the course of antibiotics given depends on the causative organism and clinical response. Beyond the neonatal period, dexamethasone administered with the antibiotics reduces the risk of long term complications such as deafness. - Cerebral complications 1 month–6 years >6 years These include: • • • • • • Hearing loss. Inflammatory damage to the cochlear hair cells may lead to deafness. All children who have had meningitis should have an audiological assessment promptly, as children who become deaf may benefit from hearing amplification or a cochlear implant. Local vasculitis. This may lead to cranial nerve palsies or other focal lesions. Presentation The clinical features are listed in Figure 14.4. The early signs and symptoms of meningitis are non specific, especially in infants and young children. Only children old enough to talk are likely to describe the classical meningitis symptoms of headache, neck stiffness and photophobia. But neck stiffness may also be seen in some children with tonsillitis and cervi cal lymphadenopathy. As children with meningitis may also be septicaemic, signs of shock, such as tachy cardia, tachypnoea, prolonged capillary refill time, and hypotension, should be sought. Purpura in a febrile child of any age should be assumed to be due to meningococcal sepsis, even if the child does not appear unduly ill at the time; meningitis may or may not be present. - Investigations The essential investigations are listed in Figure 14.4. A lumbar puncture is performed to obtain CSF to confirm the diagnosis, identify the organism responsible, and its antibiotic sensitivity. If any of the contraindications listed in Figure 14.4 are present, a lumbar puncture should not be performed, as under these circum stances, the procedure carries a risk of coning of the cerebellum through the foramen magnum. In these circumstances, a lumbar puncture can be postponed until the child’s condition has stabilised. Even without a lumbar puncture, bacteriological diagnosis can be achieved in at least 50% of cases from the blood by culture or polymerase chain reaction (PCR), and rapid antigen screens can be performed on blood and urine samples. Throat swabs should also be obtained for bacterial and viral cultures. A serological diagnosis can be made on convalescent serum 4–6 weeks after the presenting illness if necessary. Management It is imperative that there is no delay in the administra tion of antibiotics and supportive therapy in a child with meningitis. The choice of antibiotics will depend on the likely pathogen. A third generation cepha losporin, e.g. cefotaxime or ceftriaxone, is the preferred choice to cover the most common bacterial causes. Although still rare in the UK, pneumococcal resistance to penicillin and cephalosporins is increasing rapidly in - Local cerebral infarction. This may result in focal or multifocal seizures, which may subsequently lead to epilepsy. Subdural effusion. Particularly associated with Haemophilus influenzae and pneumococcal meningitis. This is confirmed by CT scan. Most resolve spontaneously but may require prolonged antibiotic treatment. Hydrocephalus. May result from impaired resorption of CSF (communicating hydrocephalus) or blockage of the ventricular outlets by fibrin (non communicating hydrocephalus). A ventricular shunt may be required. - Cerebral abscess. The child’s clinical condition deteriorates with the emergence of signs of a space occupying lesion. The temperature will continue to fluctuate. It is confirmed on CT scan. Drainage of the abscess is required. - Prophylaxis Prophylactic treatment with rifampicin to eradicate nasopharyngeal carriage is given to all household con tacts for meningococcal meningitis and Haemophilus influenzae infection. It is not required for the patient if given a third generation cephalosporin, as this will eradicate nasopharyngeal carriage. Household con tacts of patients who have had group C meningococcal meningitis should be vaccinated with the meningococ cal group C vaccine. - Partially treated bacterial meningitis Children are frequently given oral antibiotics for a non specific febrile illness. If they have early meningitis, this partial treatment with antibiotics may cause diagnostic problems. CSF examination shows a markedly raised number of white cells, but cultures are usually nega tive. Rapid antigen screens and PCR are helpful in these circumstances. Where the diagnosis is suspected clini cally, a full course of antibiotics should be given. Viral meningitis Two thirds of CNS infections are viral. Causes include enteroviruses, Epstein–Barr virus, adenoviruses and mumps. Mumps meningitis is now rare in the UK due to the MMR vaccine. Viral meningitis is usually much less severe than bacterial meningitis and a full recovery 1 - 245 2 Infection and immunity Assessment & investigation of meningitis/encephalitis History Fever Headache Photophobia Lethargy Poor feeding/vomiting Irritability Hypotonia Drowsiness Loss of consciousness Seizures Examination Fever Purpuric rash (meningococcal disease) Neck stiffness (not always present in infants) Bulging fontanelle in infants Opisthotonus (arching of back) Positive Brudzinski/Kernig signs Signs of shock Focal neurological signs Altered conscious level Papilloedema (rare) Investigations 14 Full blood count and differential count Blood glucose and blood gas (for acidosis) Coagulation screen, C-reactive protein Urea and electrolytes, liver function tests Culture of blood, throat swab, urine, stool for bacteria and viruses Rapid antigen test for meningitis organisms (can be done on blood, CSF, or urine) Lumbar puncture for CSF unless contraindicated (see below for tests on CSF) Serum for comparison of convalescent titres PCR of blood and CSF for possible organisms If TB suspected: chest X-ray, Mantoux test, gastric washings or sputum, early morning urines Consider CT/MRI brain scan and EEG Signs associated with neck stiffness Brudzinski sign – flexion of the neck with the child supine causes flexion of the knees and hips Kernig sign – with the child lying supine and with the hips and knees flexed, there is back pain on extension of the knee Contraindications to lumbar puncture: • Cardiorespiratory instability • Focal neurological signs • Signs of raised intracranial pressure, e.g. coma, high BP, low heart rate or papilloedema • Coagulopathy • Thrombocytopenia • Local infection at the site of LP • If it causes undue delay in starting antibiotics Best time for LP? Diagnostically useful but potentially dangerous Typical changes in the CSF in meningitis or encephalitis, beyond the neonatal period Aetiology — Bacterial Viral Tuberculosis Viral/unknown Appearance Clear Turbid Clear Turbid/clear/ viscous Clear White blood cells 0–5/mm 3 Polymorphs:↑↑ Lymphocytes:↑ (initially may be polymorphs) Lymphocytes:↑ Normal/↑ lymphocytes Protein 0.15–0.4 g/L ↑↑ Normal/↑ ↑↑↑ Normal/↑ Glucose Normal Meningitis Encephalitis ≥50% of blood ↓↓ Normal/↓ ↓↓↓ Normal/↓ Figure 14.4 Assessment and investigation of meningitis and encephalitis. can be anticipated. Diagnosis of viral meningitis can be confirmed by culture or PCR of CSF; culture of stool, urine, nasopharyngeal aspirate, throat swabs; and serology. Uncommon pathogens and other causes Where the clinical course is atypical or there is failure to respond to antibiotic and supportive therapy, unusual organisms, e.g. Mycoplasma or Bor- relia burgdorferi (Lyme disease), or fungal infections need to be considered. Uncommon pathogens are particularly likely in children who are immunodeficient. Rarely, recurrent bacterial meningitis may occur in the immunodeficient or in children with structural abnormalities of the skull or meninges which facilitate bacterial access. Aseptic meningitis may be seen in malignancy or autoimmune disorders. Neonatal meningitis 246 See Chapter 10. Infection and immunity Summary Meningitis • Predominantly a disease of infants and children • Incidence has been reduced by immunisation • Clinical features: non specific in children under 18 months – fever, poor feeding, vomiting, irritability, lethargy, drowsiness, seizures or reduced consciousness; late signs – bulging fontanelle, neck stiffness and arched back (opisthotonos) - • Septicaemia can kill in hours; good outcome requires prompt resuscitation and antibiotics • Any febrile child with a purpuric rash should be given intramuscular benzylpenicillin immediately and transferred urgently to hospital. Encephalitis/encephalopathy Whereas in meningitis there is inflammation of the meninges, in encephalitis there is inflammation of the brain substance, although the meninges are often also affected. Encephalitis may be caused by: • Direct invasion of the cerebrum by a neurotoxic virus (such as herpes simplex virus, HSV) • Delayed brain swelling following a disordered neuroimmunological response to an antigen, usually a virus (post infectious encephalopathy), e.g. following chickenpox Figure 14.5 Herpes simplex encephalitis. The CT scan shows gross atrophy from loss of neural tissue in the temporoparietal regions (arrows). - EEG and CT/MRI scan may show focal changes, particu larly within the temporal lobes (Fig. 14.5). These tests may be normal initially and need to be repeated after a few days if the child is not improving. Later confirma tion of the diagnosis may be made from HSV antibody production in the CSF. Proven cases of HSV encephalitis or cases where there is a high index of suspicion should be treated with intravenous aciclovir for 3 weeks, as relapses may occur after shorter courses. Untreated, the mortality rate from HSV encephalitis is over 70% and survivors usually have severe neurologi cal sequelae. • A slow virus infection, such as HIV infection or subacute sclerosing panencephalitis (SSPE) following measles. In encephalopathy from a non infectious cause, such as a metabolic abnormality, the clinical features may be similar to an infectious encephalitis. - The clinical features and investigation of encephali tis are described in Figure 14.4. Most children present with fever, altered consciousness and often seizures. Initially, it may not be possible to clinically differentiate encephalitis from meningitis, and treatment for both should be started. The underlying causative organism is only detected in 50% of cases. In the UK, the most frequent causes of encephalitis are enteroviruses, res piratory viruses and herpesviruses (e.g. herpes simplex virus, varicella and HHV6). Worldwide, microorganisms causing encephalitis include Mycoplasma, Borrelia burgdorferi (Lyme disease), Bartonella henselae (cat scratch disease), rickettsial infections (e.g. Rocky Mountain spotted fever) and the arboviruses. Herpes simplex virus (HSV) is a rare cause of childhood encephalitis but it may have devastating long term consequences. All children with encephalitis should therefore be treated initially with high dose intravenous aciclovir, since this is a very safe treatment. Most affected children do not have outward signs of herpes infection, such as cold sores, gingivostomatitis or skin lesions. The PCR of the CSF may be positive for HSV. As HSV encephalitis is a destructive infection, the - - Summary Encephalitis • Onset can be insidious and includes behavioural change • Consider if HSV (herpes simplex virus) could be the cause • Treat potential HSV with parenteral high dose aciclovir until diagnosis is excluded. -->
undefine
![ext[Menopause.pdf|./pdf/Menopause.pdf]] <!-- Texte caché pour la recherche Prise en charge de la Ménopause: Place de l’Hormonothérapie de Substitution en 2014 Pyramide des âges de la France métropolitaine en 2005 (en trait continu, la pyramide de 1990) Age Déficit des naissances dû la guerre 1914-1918 90 Baby-boom 80 Déficit des naissances dû la guerre 1939-1945 70 60 50 Hommes 40 Femmes 30 20 10 0 400 300 200 100 En milliers 100 200 300 400 Recensement de la population, INSEE Fréquence des bouffées de chaleur dans le monde - Fréquence aussi élevée dans les pays du tiers monde qu’en occident - Fréquence plus basse au japon 90 80 70 60 50 40 30 20 10 0 US Canada Europe Japon Estimation basse Estimation haute Autres pays d’Asie Afrique Moyen Orient Obermeyer Ménopause 2000; 7: 184-192 Fréquence des symptômes liés à la ménopause avant et après une hormonothérapie substitutive % 60 50 40 30 20 10 0 Avant traitement Après traitement 63,8 60,8 51,9 48,9 38,1 34,3 32,6 32,5 32,1 28,1 26,6 25,7 20,4 18 15,3 15,1 16,1 13,6 15,3 12,8 12,8 11 11,3 7,9 7,9 7,1 Sudations Bouffées de chaleur Sécheresse vaginale Céphalées Arthralgies Palpitations Total des plaintes Troubles du sommeil Asthénie Dépression Irritabilité Nervosité Vertiges Wiklund et coll. Maturitas 1992; 14: 211-22 FSH, LH, E2, E1 de la périménopause à la ménopause pmol/l 1000 800 600 400 200 25 20 15 10 5 µg/l FSH LH E E 1 2 0 0 -8 -6 -4 -2 0 2 4 6 8 10 Années Ménopause Rannevik G. et al Maturitas, 1995; 21: 130-13 Comment faire le diagnostic de ménopause Femmes de la cinquantaine en aménorrhée + Bouffées de chaleur Clinique suffisante Test au progestatif éventuel Les cas particulier Dosages hormonaux FSH > 35 mUI/ml E2 < 14 pg/ml } = ménopause Hystérectomisée Lorsqu’apparaissent des troubles évocateurs ou à partir de 50 ans FSH-E2 Prenant un c.o. A partir de 50 ans FSH-E2 Le 7ème jour de l’intervalle d’arrêt < 45 ans en aménorrhée + bdc Suspicion de m. précoce : antécédent familiaux ? FSH-E 2 -Prl Chronologie et fréquence moyenne des troubles liés à la carence estrogénique Chronologie années -2 Fréquence % Périménopause Ménopause Troubles vasomoteurs, fonctionnels et psychologiques 60-70 1 Atrophie vaginale Altération de la peau et des phanères Troubles urinaires 20-30 5 7 Ostéoporose 25-35 10 Athérosclérose Risque doublé Affections les plus fréquentes après la ménopause 0 100 200 300 400 500 600 700 800 900 1000 Affections coronariennes Fractures par ostéoporose Cancer du sein Mortalité Cancer de l’endomètre Morbidité Ross et coll. Am J Obstet Gynecol 1989; 160: 1301-6 Osteoporotic Bone Loss Osteoporosis Normal Dempster DW, et al. J Bone Miner Res. 1986; 1:15-21 Reprinted with permission from the American Society for Bone and Mineral Research Physiopathologie schématique de l'ostéoporose ménopausique Unité de remodelage osseux RESORPTION Ostéoclastes FORMATION QUIESCENCE Ostéoblastes Avant la ménopause Après la ménopause Os calcifié Os calcifié Ostéoïde non minéralisé ancien nouveau ACCÉLÉRATION du remodelage osseux devenu DÉFICITAIRE Qu’est ce que l’ostéoporose ménopausique ? Définition actuelle : masse minérale osseuse faible, DMO < 2,5 DS en T-score (OMS 1994) Formes cliniques variées : Fractures diverses et trompeuses :poignets, vertèbres, tous les os sont concernés… Fractures graves : col du fémur Conséquences socioéconomiques majeures : Décès Invalidité Perte d’autonomie Mise en institution Un coût élevé difficile à estimer car plurifactoriel Ostéoporose trabéculaire ou ostéoporose vertébrale Raréfaction de l'os spongieux avec corticales plus ou moins bien conservées RR = 3 chez la femme par rapport à l'homme entre 60 et 70 ans Le 1 er tassement vertébral apparaît en moyenne vers 68 ans (soit 18 ans après le début de la ménopause) -->
{{mesotheliome.jpg}}
!!Généralités
*Le ''mésothéliome malin'' est un ''cancer de la plèvre'' qui est généralement lié avec une exposition à l'''asbestose''.
*Il se manifeste des ''décennies après exposition'' à l'asbestose, même en petite quantité.
*L'asbestose produit aussi de l'''épanchement pleural'' et des ''plaques pleurales'' qui sont bénins, typiquement 10 ans après exposition.
*La fumée n'est pas facteur de risque de mésothéliome, en revanche tabac + asbestose se potentialisent comme facteur de risque de [[Cancer du Poumon]].
*La ''Clinique'' comprend:
**une ''dyspnée''
** de la ''toux''
**une ''perte de poids''
**un ''liquide pleural hémorragique''
*On peut observer un mésothéliome par une [[RX thorax|mesotheliome_rx.jpg]] ainsi qu'un ''CT-scan'' thoracique.
*le ''traitement'' est ''chirurgical'' avec une résection, cependant il est rarement efficace et la maladie a un ''sombre pronostic'' (quelques mois de survie).
{{mesotheliome_ct.jpg}}
undefine
undefine
undefine
undefine
!! Généralités
* Les ''metastases cérébrales'' s'évaluent principalement à l'aide de l'''IRM''. Elle peuvent se situer à n'importe quel endroit, que ça soit extra-axial ou intra-axial. Mais l'endroit le plus fréquent est les ''hémisphères cérébraux''.
*Le plus souvent, les métastases sont ''multiples'', mais on peut trouver des uniques. L'aspect peut être ''solide'' ou ''kystique''.
*Parfois, la ''biopsie'' est nécessaire pour confirmer qu'il s'agit bien d'une métastase
*l'''origine'' des métastases cérébrales comprend:
**''carcinome du poumon''
**''carcinome du sein''
**''mélanome''
**carcinome du rein
**carcinome de la thyroïde
**choriocarcinome
{{metastases_cerebrales_irm.jpg}}
{{metastases_hepatiques.jpg}}
!!Généralités
*les ''Métastases Hépatiques'' sont le site le plus fréquent de métastases.
*Elles sont aussi le ''Premier Cancer hépatiqeu'', plus fréquentes que le [[CHC|Carcinome Hépatocellulaire (CHC)]].
*les ''Cancers'' fréquements impliqués sont
**''Colo-Rectal''
**''Estomac''
**''Oesophage''
**''Pancréas''
**''Sein''
**''Poumon''
**''Ovaire''
**''Rein''
**''Mélanome''
*la ''Clinique'' est souvent asymptomatique, on trouve les Mx lors de l'investigation du cancer primaire. On peut trouver:
**''ascite''
**''fièvre''
**''douleur QSD''
**''Ictère''
*les ''Investigations'' comprennent:
**''US''
**''CT''
**''IRM''
*le ''Traitement'' peut être
**''Chirurgie'' surtout pour le Colo-Rectal car le foie peut souvent être le seul site
**''Chimioembolisation''
**''Radioembolisation''
!!Définition
*Les Mx osseuses sont les ''tumeurs osseuses les plus fréquentes''. L’âge en général est à >40 ans.
*Les sources sont principalement les cancers du:
**''sein''
** ''prostate''
**''reins''
**''poumons''
** ''thyroïde''.
*Les métastases sont surtout ''ostéolytiques'' (75%), sauf la prostate et seins qui sont plutôt ostéocondensante.
*Les localisations les plus fréquentes sont le ''bassin'', les ''vertebres'', les ''cotes'', le ''fémur proximal'' et l’humérus.
{{mx_osseuses_schema.jpg}}
!!Clinique
*Les plaintes peuvent être des ''douleurs mécaniques'' ou des ''douleurs nocturnes''. On peut aussi trouver des ''fractures pathologiques'' ainsi que de l’hypercalcémie.
!!Investigations
*Plusieurs ''imageries'' sont possibles. la ''Rx conventionnelle'' montre l’atteinte osseuses, le ''PET-CT'' et la ''scintigraphie'' montrent l’activité tumorale et l’IRM montre l’atteinte des tissus mous.
*Une ''biopsie'' de la tumeur donnera le diagnostic définitif
!!Traitement
*Premièrement un contrôle de la douleur via des ''analgésiques'', ainsi que des ''biphosphonates'' (zoledronate) ou le ''denosumab''
*__Rappel:__ les biphosphonates inhibent l’activité ostéoclastique en se fixant sur leur site d'action (CAVE effet 2nd: nécrose osseuse!). Le denosumab fait pareil en inhibant RANK-L (par ailleurs sécrété en abondance dans les tumeurs ostéoloytiques )
*Si la lésion est plutôt grande, douloureuse, dans des régions importantes (péri-trochanterique), on propose de la ''chirurgie'', qui implique des ''fixations par vis'', et ''ciment''.
*Si le patient a peu de temps à vivre et que ses mx. ne sont pas symptomatiques, on peut se limiter à de ''l'observation''.
{{prostate_SPECT.jpg}}
!!Traceur
*le ''TC99m-HMDP'' //(HydroxyMethylene DiphosPhonate, dit aussi HDP)// est utilisé. Il donne une[[ image détaillée|HMDP_normal.jpg]] de l'anatomie osseuse. Il possède une demi-vie de 6h.
*Les ''//cristaux d'apatite Ca,,10,,(PO,,4,,),,6,,(OH),,2,,//'' constituent la structure inoragnique osseuse. Le HMDP va se déposer dans le minéral.
*Le HMDP une fois injecté va rapidement se distribuer dans le volume extracellulaire et se [[déposer à la surface de l'os|HMDP_uptake.jpg]].
*Il sera plus concentré dans les zones à blood flow augmenté mais au final il se distribuera dans les os avec une ''formation/réparation osseuse augmentée'', comme par exemple des [[métastases|HMDP_metastases.jpg]].
*50% du traceur sera pris par les os, le reste sera excrété par les reins
*les clichés sont pris généralement 2-4h post-injection pour avoir une bonne phase tardive osseuse.
*On peut faire soit un [[protocole WB |HMDP_protocole_wb.jpg]]avec clichés 2-4h post-injection, soit un [[protocole 3 phases dynamique|HMDP_protocole_3phases.jpg]] (spot view) qui sera [[centré sur le site|HDMP_3phases_exemple.jpg]] (phase artérielle 5s, phase tissulaire précoce 5min, phase osseuse tardive 2-4h)
*Les[[ spots views|HMDP_spot_view.jpg]] ont l'avantage d'être plus détaillés anatomiquement.
*les[[ camera SPECT |HMDP_SPECT.jpg]]peuvent faire des images planaires (caméra fixe) ou des images 3D (caméra en rotation)
!!Cancer de la Prostate
*Chez un patient sans douleurs osseuses avec un cancer modéré et un ''PSA ''à <10ng/l, le risque de métastases est très faible (2%)
*L'incidence de métastases augmente en fonction du Stade I, II, ou III du cancer.
*Il faut non-seulement rechercher les'' foyers d'hyperactivité'', mais aussi les ''foyers d'hypoactivité''.
!!Exemples
<$button popup="$:/mx_os_31.10.16.jpg" >
[img width=64 [images/mx_os_31.10.16.jpg]]
</$button><$reveal type="popup" state="$:/mx_os_31.10.16.jpg"><div class='tc-tiddler-frame'>
{{mx_os_31.10.16.jpg}}
multiples mx osseuses en régression par rapport aux comparatifs
</div>
</$reveal>
31.10.2016: multiples mx. osseux
{{mx_pulmonaires_rx.jpg}}
!!Généralités
*Les ''Tumeurs'' faisant souvent des métastases pulmonaires sont:
**''Sein''
**''Colon''
**''Pancréas''
**''Estomac''
**''Reins''
**''Tumeurs cervicales''
*En plus, un ''cancer pulmonaire'' peut métastasier au niveau des deux plages pulmonaires.
*La ''Dissémination hématogène'' est la plus fréquente, dans ce cas les métastases sont plus souvent localisées aux ''//bases//'' pulmonaires.
*la ''taille'' est très variable, on peut avoir un//'' aspect miliaire ''//ou une ''//grande taille//''.
*le ''nombre'' est aussi variable, on peut avoir un //''nodule solitaire''// ou un ''//lâcher de balons//''.
*le ''Diagnostic'' peut se faire par
**la ''Rx thorax'' avec l'aspect typique du lâcher de ballon
**le ''CT-thorax'' est l'examen le plus performant
**le ''contexte clinique'' est important, avec la présence d'une ''//tumeur primaire connue//''.
**la ''biopsie'' peut être nécéssaire
{{mx_pulmonaires_ct.jpg}}
undefine
undefine
![ext[metrorragies.pdf|./pdf/metrorragies.pdf]] <!-- Texte caché pour la recherche metrorragie metrorrhagies métrorrhagies FIGO Traitement • Stades précoces (1a, 1b voir 2a) • Chirurgie: • Conisation seule (1a1) • Hystérectomie élargie avec lymphadénectomie. à Conservation des ovaires possible chez la femme jeune. • Radiothérapie (à partir du 1a2) • Stades plus avancés: • Chimiothérapie (à base de Cisplatine) • Radiothérapie • Brachithérapie Pronostic • Stade 1b à 2a sans ADP: survie à 5 ans à 90% • Stade 1b à 2a avec ADP: survie à 5 ans à 70% • La survie diminue rapidement avec les stades plus élevés et le nombre de ganglions envahis. Prévention primaire: Vaccin • Cervarix (HPV2) : actif contre HPV-16 et HPV-18. • Gardasil (HPV4) : actif contre HPV-16,18, 6, 11. àcouvre 70% des cancers du col. Protection pour 5-8 ans. Après ? • Gardasil 9 (HPV9) : actif contre HPV-16, 18, 6, 11, 31, 33, 45, 52, 58. à couvre 80% des cancers du col. • Mais alors faut-il faire le dépistage ? -->
undefine
undefine
undefine
!!Diagnostic différentiel *Monoarthrites infectieuses **''[[Arthrite septique|Arthrite Septique]]'' *Monoarthrites cristallines **''[[Goutte|Goutte]]'' **''[[Chondrocalcinose|Chondrocalcinose]]'' (Pseudogoutte) *Monoarthrites dégénératives **''[[Arthrose|Arthrose]]'' *Monoarthrites inflammatoires **''[[Polyarthrite Rhumatoïde|Polyarthrite Rhumatoïde]]'' débutante *Monoarthrites traumatiques !!Analyse du Liquide Synovial (3C) *''Liquide Synovial normal'' **Couleur ''jaune paille'' avec aspect ''clair'' **Cellularité <''2’000 leucocytes'' et <''25% PMN'' **Culture négative *''Inflammation'' **Couleur jaune paille avec aspect ''trouble'' **Culture négative **Cellularité entre ''2’000 - 50’000 leucocytes'' *''Infection'' **Couleur jaune à vert avec aspect ''trouble'' **Cellularité >''50’000 leucocytes'' et >''75% PMN'' **Culture ''positive'' (souvent du à staph.aureus)
{{mononucleose.jpg}}
!!Définition
*la ''mononucléose'' est une infection virale causée par ''EBV'' //(Epstein Barr Virus)//
*Parfois un CMV peut faire un syndrome mononucléosique
*On le retrouve souvent chez les ''adolescents'' et jeunes adultes. chez les enfants l'infection est asymptomatique généralement
*La transmission se fait par la ''salive'', typiquement les premiers bisous des ados, avec une incubation de 2-5 semaines
*90% des adultes sont porteurs. Une infection suffit pour développer une immunité à vie
!!Clinique
*''fièvre'' qui peut chauffer jusqu'à 40°C
*''fatigue''
*''ADP tonsillaires / cervicales'' qui sont douloureuses
*''Manteau blanc ''sur les tonsilles
*''hyperémie pahryngée''
*''splénomégalie'' avec ''risque de rupture'', attention à ce que le patient ne fasse ''pas de sport pendant 3-4 semaines''.
*''rash Maculopapulaire'' rare mais surtout présent si on donne de l'[[ampicilline|rash_ampicilline_ebv.jpg]]. ne PAS donner d'Ampicilline !
!!Investigation
*''Serologie'' via le ''Monospot '' qui détect l'''//antigène hétérophile//'' qui est positif que lors d'infection aigue dans les 4sem post-infection. Devient indétectable à >6 mois
*Le Monospot est très sensible et spécifique, il ne marche pas pour les monoculéoses à CMV
*On peut aussi faire la ''serologie Elisa'' dans les cas douteux
*faire un strepto-test si on a une hyperémie laryngée
!!Traitement
*''pas de traitement'' en général, les patients récupèrent dans les 3-4 mois
*Eviter le sport pendant 3-4 semaines sinon risque de rupture de rate !
undefine
undefine
undefine
undefine
{{morsure_animal.jpg}}
*Les ''morsures'' sont majoritairement causées par les ''chiens'' et à moindre mesure les ''chats''. Les modeurs plus rares sont la vipère et le renard.
*Les ''extrêmités'' sont le plus souvent touchées. Chez l'enfant c'est souvent le visage.
*Les morsures de chats sont punctiformes et profondes tandis que celles des chiens sont lacérantes.
*Les morsures sont considérées anodines à tort, car elles peuvent souvent s'''infecter'' avec la flore locale du mordeur.
*La bactérie la plus fréquente est la //Pasteurella//. La //Capnocytophaga canimorsus// est dangereuse car peut provoquer le décès chez un patient asplénique
*La Rage n'est pas à suspecter sur un animal suisse. La prophylaxie post-expositionelle n'est à envisager que dans des cas spéciaux.
!!Traitement
*''ATB empirique'' couvrant //strepto//, //staph//, //pasteurella// et si c'est un chien chez un asplénique le //capnocytophaga//.
undefine
!! Définitions !!! ''Mort apparente'' *''Absence de signes vitaux'' *Mais ''Absence de signes de mort'' *''Retour à la vie possible'' Exemples (Hypothermies, Intoxications) !!!''Mort relative'' *''Pas de retour spontané à la vie'' *''Reanimation possible'' !!! ''Signes certains de mort'' *Lividité cadavérique *Rigidité Cadaverique *Signes d'alterations cadaveriques !!! ''Signes incertains de mort'' Permettent de diagnostiquer le terme de Mort cerebrale, les ''8 signes'' doivent être testés par 2 medecins qualifiés: #''Absence de Respiration'' #*''Test d'apnée ''= le dernier reflexe a tester: couper le respirateur, laisser le CO2 venir et voir si le patient respire #''Coma'' # ''Mydriase bilatérale aréactive'' #''Reflexe cornéen'' #''Reflexes Oro-Pharyngé'' (Chatouiller fond de la gorge) #''Toux'' (Sonde d'aspiration pour chatouiller la trachée) #''Reaction au stimuli douloureux'' #''Reflexe occulo-cephalique '' #*''Eau froide ''= Nystagmus #*T''ourner la tete ''pour voir si les yeux suivent Conclusion: *''8/8 = Mort certaine'' *''7/8 = Mort cerebrale''
undefine
![ext[dermato_MST.pdf|./pdf/dermato_MST.pdf]] <!-- Texte caché pour la recherche MST - Bactéries : chlamydia trachomatis ++ (urétries/lymphogranulome), nesseria gonorrhea, syphilis (treponema pallidum), mycoplasma genitalium (MST émergente, urétrite), haemophilus durcreyi (chancre mou - douloureux, pas en CH) - Viral : HSV1-2 (30% en CH), HPV (herpes genital), HIV (1%), HBV-HCV. - Parasites : morpions (pediculus humanus), sarcoptes scabiei (gale), trichomonas (trichomonas vaginalis) - Champignons : candida albicans (controversé) Prévention (RS protégés 3m), dépistage (syphilis, VIH ± HBC/HCV), partenaire (information, dépistage, ttt). NB : Déclaration obligatoire pour les MST Urétrites - Inflammation de l’urètre, rougeur du méat urétral, écoulement pus - Douleur en urinant, EF léger, ADP multiples - Gonorrhée : incubation 2-8j post RS H, >2sem F, sem → 1an pour gonococcie disséminée (si non traité) - Non gonococciques : chlamydia ++ (1 er MST), mycoplasma genitalium (asx, dx PCR), ureplasma, trichomonas vaginalis, HSV Gonorrhée : (chaude pisse, blennorragie). - H : Sx++, urétrite (écoulements pus ano-rectal, proctite, dlr à la défécation, angine, conjonctivite (NN++, rare adulte)). - F : 75% asx, urétrite (ano-rectal, oropharynx, yeux) - Gonococcie disséminée : pustules hémorragiques à centre nécrotique (distribution accrale) + ténosynovite, arthrite septique (asymétrique) ± hépatite, myopéricardite, méningite. Chlamydia : asx ++ - Urétrite : ITU ? (év faire un stix) - Stix urinaire (leucocyturie ? DD) - Gonocoque : examen direct (gram- = gono), PCR urines (24-48h), év culture (urètre, rectum, oropharnyx). Disséminée : culture urètre/anus/gorge ++ vs bx/liquide articulaire. - Chlamydia : PCR urines, ø culture (intra¢ obligatoire), gram inutile (minuscule) - Gonocoque : ceftriaxone 250mg IM + azithormycine PO (chlamydia associée ++). Abstinence 1sem après ttt. Si disséminé ceftriaxone IM/IV 1g → 48h post amélioration. - Chlamydia : azithromycine 1g PO - Complications gonorrhée : sans ttt → prostatite, épididymite, septicémie (1%) chez H / PID, salpingite, péritonite avec risque de stérilité et septicémie rare chez F. Gonococcie disséminée (dissémination hématogène + embols septiques + 1 articulation touchée) - CAVE : R aux quinolones pour gonorrhée - Complications chlamydia : stérilité, F : salpingite, GEU, H : épididymite, NN : conjonctivite, pneumonie. HIV et PEP Primo-infection : EF, fatigue, sx grippaux, macules rosées sur le torse, mal défini + aphtes ou ulcère génital 3-4 sem post RS DD : roséole syphilitique, toxidermie INV : virémie, AG p24 CAVE : risque de 3% RS anal, 0.15% vaginal, 0.3% piqûre aiguille HIV+ Pris en charge par assurance (sans franchise !) Indic : RS avec VIH+ (vaginaux, anaux, sperme dans la bouche) / utilisation de seringues communes avec VIH+ Délais : <72h (et faire séro personne source) TTT : bi-/trithérapie pendant 4 semaine. GEN TTT GEN CLIN DD INV TTT CAVE HIV PEP MST suite : Syphilis - Treponema pallidum - Incubation 21j (10-90), syphilis secondaire 2-6mois post infection (dissémination hématogène treponema), tertiaire : 2-60ans. - Sérologie : TPHA (hémagglutination : SP, positive si syphilis active ou traitée car reste + après ttt) + VDRL (pas SP, aussi + si lupus, virose aigue, grossesse, mais nég après ttt → suivi ttt ; différence cicatrice sérologique et syphilis latente) → THPA et VDRL nég (pas de syphilis vs syphilis débutante aux 1 e jours du chancre vs syphilis traitée précocement) →TPHA nég et VDRL + (faux + : lupus, grossesse) →TPHA + et VDRL nég (syphilis traitée ou év. tertiaire) → TPHA et VDRL + (syphilis active non traitée) - Primaire : chancre dur = ulcération unique, indolore, ferme, bordure surélevée (lèvre, OGE) (douleur possible si extra-génitaux) + ADP régionnale ± sx généraux - Secondaire : sx généraux + exanthème maculo-erythémateux à bord mal définis, asx, ≥1 éruptions (1e = roséole), alopécie diffuse « en clairière », perte cils/sourcils Secondaire tardive : papules brunâtres sur le tronc + paumes/plantes (pathognomonique : papules éparses cuivrées avec desquamation autour, des mains/pieds). Papules érosives des muqueuses. - Tertiaire : Gommes (masse brunâtre, caoutchouteuse, nécrosée, ulcérée) ± neurosyphilis, atteinte CV. - Chancre : carcinome basocellulaire, chancre mou, herpès chronique, chancre TB, aphtose, etc. - Roséole : toxidermie, primo-infection VIH - Tertiaire : carcinome épidermoïde, métastase, brûlure, etc. - Primaire : fond noir, sérologie (AC arrivent en 4-6sem) - Secondaire : sérologie, fond noir - Tertiaire : sérologie, Bx, fond noir négatif - Primaire, secondaire, latente : pénicilline retard (benzathine pénicilline) 1 dose IM (ttt facile, mais mauvais SNC), si ancienne 1x/sem pendant 3 semaines. Si allergie : doxy - Tertiaire, neurosyphilis : pénicilline G (IV toutes les 4h pendant 3sem) On parle de syphilis sérologique si TPHA+ et patient asx. Syphilis tertiaire : atteinte hépatique, SNC (neurosyphilis), osseuse, cardiaque (aortite, anévrisme aorte ascendante) GEN CLIN DD INV TTT CAVE -->
![ext[mucoviscidose.pdf|./pdf/mucoviscidose.pdf]] <!-- Texte caché pour la recherche Cystic fibrosis Epidemiology, genetics and basic defect 294 Cystic fibrosis (CF) is the commonest life limiting auto somal recessive condition in Caucasians with an inci dence of 1 in 2500 live births and carrier rate of 1 in 25. - Respiratory disorders Case History 16.2 Foreign body inhalation A previously well 3 year old boy presented with a 5 day history of severe cough and wheeze. His symptoms developed after choking on some peanuts. A chest X ray revealed a hyperlucent right lung (Fig. 16.18). Bronchoscopy was performed and revealed a peanut wedged in the right main bronchus. - - - - (a) (b) Figure 16.18 Hyperlucency of the right lung and mediastinal shift to the left. (Courtesy of Dr Abbas Khakoo.) Figure 16.17 Bronchiectasis on CT scan of the chest. (a) Generalised and (b) focal, in the right upper lobe. It is well recognised but less common in other ethnic groups. Average life expectancy has increased from a few years to the mid 30s, with a projected life expect ancy for current newborns into the 40s. - The fundamental problem in CF is a defective protein called the cystic fibrosis transmembrane conductance regulator (CFTR). CFTR is a cyclic AMP dependent chloride channel found in the membrane of cells. The gene for CFTR is located on chromosome 7. Over 1000 different gene mutations have been discov ered that cause a number of distinct defects in CFTR, but by far the most frequent mutation in the UK is delta F508. The correlation between genotype and pheno type is relatively weak for CF lung disease but stronger for gastrointestinal disease. This suggests that addi tional factors are important in determining the severity of lung disease, including different microbial patho gens, passive smoking, social deprivation and other ‘modifier’ genes. - Identification of the gene mutation involved within a family allows prenatal diagnosis and carrier detection in the wider family. Pathophysiology CF is a multi system disorder which results mainly from abnormal ion transport across epithelial cells. In the airways this leads to reduction in the airway surface liquid layer and consequent impaired ciliary function and retention of mucopurulent secretions. Chronic - endobronchial infection with specific organisms such as Pseudomonas aeruginosa ensues. Defective CFTR also causes dysregulation of inflammation and defence against infection. In the intestine, thick viscid meconium is produced, leading to meconium ileus in 10–20% of infants (see below). The pancreatic ducts also become blocked by thick secretions, leading to pancreatic enzyme deficiency and malabsorption. Abnormal function of the sweat glands results in excessive concentrations of sodium and chloride in the sweat. Clinical features In the UK, screening of newborns is now performed as part of the heel prick bloodspot biochemical screen (Guthrie test). The majority of children with CF are iden tified by screening; however, children may still present clinically with recurrent chest infections, poor growth or malabsorption (Box 16.4). Chronic infection with specific bacteria – initially Staphylococcus aureus and Haemophilus influenzae and subsequently with Pseudomonas aeruginosa or Burkholderia species results from viscid mucus in the smaller airways of the lungs. This leads to damage of the bronchial wall, bronchiectasis and abscess formation (Fig. 16.19). The child has a persistent, loose cough, productive of purulent sputum. On examination there is hyper inflation of the chest due to air trapping, coarse inspiratory crepitations and/or expiratory wheeze. With - 295 1 2 3 4 Respiratory disorders Weight (kg) 20 16 99.6th 98th 91st 75th 15 10 5 0 50th 25th 9th 2nd 0.4th Figure 16.19 A chest X ray in cystic fibrosis showing hyperinflation, marked peribronchial shadowing, bronchial wall thickening and ring shadows. - Box 16.4 Clinical features of cystic fibrosis Newborn • Diagnosed through newborn screening Infancy • Meconium ileus in newborn period • Prolonged neonatal jaundice • Failure to thrive • Recurrent chest infections • Malabsorption, steatorrhoea Young child • Bronchiectasis • Rectal prolapse • Nasal polyp • Sinusitis Older child and adolescent • Allergic bronchopulmonary aspergillosis (ABPA) • Diabetes mellitus • Cirrhosis and portal hypertension • Distal intestinal obstruction (DIOS, meconium ileus equivalent) • Pneumothorax or recurrent haemoptysis • Sterility in males established disease, there is finger clubbing. Ultimately, 95% die of respiratory failure. Over 90% of children with CF have pancreatic exocrine insufficiency (lipase, amylase and pro teases), resulting in maldigestion and malabsorption. Untreated, this leads to failure to thrive (Fig. 16.20) and passing frequent large, pale, very offensive and greasy stools (steatorrhoea). Pancreatic insufficiency can be diagnosed by demonstrating low elastase in faeces. About 10–20% of CF infants present in the neonatal period with meconium ileus, in which inspissated meconium causes intestinal obstruction with vomiting, abdominal distension and failure to pass meconium in Diagnosis of cystic fibrosis 1 2 3 Age (years) Figure 16.20 Growth chart of a child with cough and recurrent wheeze. Only when the diagnosis of cystic fibrosis was made and appropriate treatment started did he gain weight. (Adapted from growth chart, © RCPCH/WHO/Department of Health.) the first few days of life. Initial treatment is with Gas trografin enemas, but most cases require surgery. Diagnosis The essential diagnostic procedure is the sweat test, to confirm that the concentration of chloride in sweat is markedly elevated (Cl 60–125 mmol/L in cystic fibrosis, 10–40 mmol/L in normal children). Sweating is stimu lated by pilocarpine iontophoresis. The sweat is col lected into a special capillary tube or absorbed onto a weighed piece of filter paper. Diagnostic errors are common if there is an inadequate volume of sweat collected, so the test must be performed by experi enced staff. Confirmation of diagnosis can be made with testing for gene abnormalities in the CFTR protein. If a child is homozygote with two identified mutations then they have cystic fibrosis. Management 296 The effective management of CF requires a multi disciplinary team approach, including paediatricians, physiotherapists, dieticians, specialist nurses, the primary care team, teachers and, most importantly, the child and parents. All patients with CF should be reviewed at least annually in a specialist centre. The aims of therapy are to prevent progression of the lung disease and to maintain adequate nutrition and growth. - Respiratory disorders Respiratory management Recurrent and persistent bacterial chest infection is the major problem. In younger children, respiratory status is monitored on symptoms; older children should have their lung function measured regularly by spirometry. The FEV 1 (forced expiratory volume in 1 second), expressed as a percentage predicted for age, sex and height, is an indicator of clinical severity and declines with disease progression. With regular treatment, most infants and children with CF should have no respiratory symptoms, and often have no abnormal signs. From diagnosis, chil dren should have physiotherapy at least twice a day, aiming to clear the airways of secretions. In younger children, parents are taught to perform airway clear ance at home using chest percussion and postural drainage. Older patients perform controlled deep breathing exercises and use a variety of physiotherapy devices for airway clearance. Physical exercise is ben eficial and is encouraged. Many CF specialists recommend continuous pro phylactic oral antibiotics (usually flucloxacillin), with additional rescue oral antibiotics for any increase in respiratory symptoms or decline in lung function. Per sisting symptoms or signs require prompt and vigor ous intravenous therapy to limit lung damage, usually administered for 14 days via a peripheral venous long line. Increasingly, parents are taught to administer courses of intravenous antibiotics at home, so decreas ing disruption of normal activities such as school. Chronic Pseudomonas infection is associated with a more rapid decline in lung function, and this is slowed by the use of daily nebulised antipseudomonal anti biotics. Nebulised DNAse or hypertonic saline may be helpful to decrease the viscosity of sputum and so increase its clearance. The macrolide antibiotic azithromycin, given regularly, decreases respiratory exacerbations, probably due to an immunomodula tory effect rather than antibiotic action. Regular, neb ulised hypertonic saline may decrease the number of respiratory exacerbations. More severe CF requires more regular intravenous antibiotic therapy. If venous access becomes trouble some, implantation of a central venous catheter with a subcutaneous port (e.g. Portacath) simplifies venous access, although they require monthly flushing and complications may develop. Bilateral sequential lung transplantation is the only therapeutic option for end stage CF lung disease. For tunately, this is rarely required during childhood. Out comes following lung transplantation continue to improve with >50% survival at 10 years. Meticulous assessment, for example with regard to comorbidities and microbiology, psychological preparation, optimal timing of transplantation and expert post transplant care, are all essential parts of the multidisciplinary transplant process. - - Nutritional management Dietary status should be assessed regularly. Pancreatic insufficiency is treated with oral enteric coated pancre atic replacement therapy taken with all meals and snacks. Dosage is adjusted according to clinical - response. A high calorie diet is essential, and dietary intake is recommended at 150% of normal. To achieve this, overnight feeding via a gastrostomy is increas ingly used. Most patients require fat soluble vitamin supplements. - - Teenagers and adults Most children with CF now survive into adult life. With increasing age come increased complications, most commonly diabetes mellitus due to decreasing pancreatic endocrine function. Up to one third of patients will have evidence of liver disease with hepatomegaly on liver palpation, abnormal liver func tion on blood tests or an abnormal ultrasound; regular ursodeoxycholic acid, to improve flow of bile, may be beneficial. Rarely, the liver disease progresses to cirrhosis, portal hypertension and ultimately liver failure. Liver transplant is generally very successful in CF related liver failure. - - In distal intestinal obstruction syndrome (meco nium ileus equivalent), viscid mucofaeculent material obstructs the bowel. This is usually cleared by oral Gastrografin. There may be increasing chest infections, as well as other late respiratory complications including pneu mothorax and life threatening haemoptysis. There is increasing concern over transmission of virulent strains of Pseudomonas and Burkholderia cepacia between patients, causing rapid decline in lung function. Conse quently, patients are often segregated and advised not to socialise with other people with CF. - Females have normal fertility, and unless they have severe lung disease, tolerate pregnancy well. Males are virtually always infertile due to absence of the vas def erens, although they can father children through intra cytoplasmic sperm injection (ICSI). The psychological repercussions on the affected child and family of a chronic and ultimately fatal illness which requires regular physiotherapy and drugs, fre quent hospital admissions and absences from school are considerable. The CF team should provide psycho logical and emotional support. Adolescents have par ticular needs which must receive special consideration. Older adolescents with CF should transfer to specialist adult CF care. Gene therapy is currently being assessed but is unlikely to be of practical value in the immediate future. Screening All newborn infants born in the UK are screened for CF. Immunoreactive trypsinogen (IRT) is raised in CF patients and can be measured in routine heel prick blood taken for biochemical screening of all babies (Guthrie test). Those samples with a raised IRT are then screened for common CF gene mutations, and infants with two mutations have a sweat test to confirm the diagnosis. - Early identification of CF allows the early introduc tion of regular treatment. This leads to better nutrition in childhood and improved neurodevelopmental outcome. It also allows proactive institution of 297 1 2 3 4 Respiratory disorders Summary Assessment of the adolescent with cystic fibrosis 16 Siblings may be affected – autosomal recessive condition Sweat – salty, may lead to dehydration in hot weather Central venous line, e.g. Portacath – for intravenous antibiotics to aggessively treat infection Chest – determine if: Hyperexpansion due to air trapping Harrison sulcus Coarse inspiratory crepitations and/or expiratory wheeze Chest infection Clubbing of fingers Scar from operation for meconium ileus as neonate (10–20%) Monitor for potential complications: Nasal polyps, sinusitis, rectal prolapse Allergic bronchopulmonary aspergillosis (ABPA) Diabetes mellitus (often insulin-dependent) Cirrhosis and portal hypertension Distal intestinal obstruction syndrome (DIOS, meconium ileus equivalent) Pneumothorax or recurrent haemoptysis Concern about sterility in males Sputum – evidence of infection – acute or chronic with Pseudomonas species or Burkholderia cepacia Growth: Aim for normal growth Nutrition: Gastrostomy for overnight feeding for extra calories Pancreatic exocrine insufficiency – taking sufficient pancreatic replacement therapy? – Taking fat-soluble vitamins? Review of chest problems: Spirometry – for deterioration Regular breathing exercises? Physiotherapy and exercise? Bronchodilator therapy – is it optimal? Chest infection – acute or chronic and its treatment? Nebulised antipseudomonal antibiotics and DNase? Avoidance of direct contact with other affected patients other than family members? General overview: School attendance and performance Specific problems with managing their disease Psychological needs respiratory management and avoids the morbidity and parental anxiety experienced prior to the clinical diag nosis being established. It also enables early genetic counselling for the parents about the one in four risk of recurrence and the possibility of prenatal diagnosis in future pregnancies. Cystic fibrosis should be considered in any child with recurrent infections, loose stools or failure to thrive. -->
undefine
undefine
undefine
undefine
undefine
undefine
{{myasthenie_grave_schema.jpg}}
!! Définition
*La ''Myasthénie Grave'' est ''maladie de la JNM''. C'est une ''maladie auto-immune progressive'' avec une présence d'''anticorps anti ACh récepteur'' qui saturent rapidement le récepteur à l'AcéthylCholine.
*La Maladie est parfois ''associée à un Thymome'', et souvent associée à une hyperplasie du Thymus
!! Clinique
*Le patient présentera une ''parésie occulaire'' avec ''ptose'' et ''diplopie'' en premier lieu
*Ensuite le patient présentera des ''parésies de membres'' et une ''fatiguabilité'' musculaire
!! Investigations
*Le ''test au Glaçon'' permet de démontrer la disparition du Ptosis lors de l'application d'un glaçon sur la paupière
*Le ''test au Tensilon'' ou a Mestinon, qui sont des inhibiteurs de l'ACh-Esterase permettent aussi de montrer l'amélioration des symptômes
*un ''ENMG'' montre une diminution progressive de la réponse à des stimulations répétées.
*un ''dosage des anticorps Anti-ACh'' permet de démontrer leur présence, bien que dans certains cas les anticorps MUSK sont présents a la place
*un ''CT/IRM ''du Thymus à la recherche d'un Thymome
!! Traitement
*Le ''Tensilon'' (inhibiteur de l'ACh-Esterase) est efficace comme traitement symptomatique
*Des ''Immunosuppresseurs'' avec les ''corticostéroïdes'', l'Aziazhioprine, la Cyclophosphamide, le Mycophenolate Mofetil et les IVIG et Plasmapherese sont aussi utilisés
*la thymectomie en cas de thymome
undefine
undefine
undefine
!! Définition
* Le ''Myélome Multiple'' correspond à une ''prolifération de plasmocytes monoclonaux'', principalement au niveau de la ''moelle osseuse'', avec aussi un atteinte d'''organes cibles (CRAB)''.
*Le pic d'âge des patient atteints est de ''65 ans'', l'incidence est deux fois plus élevée chez les ''africains''.
*On distingue plusieurs ''types'' :
**le ''myélome sécrétant'' (99% des myélomes) qui produit des [[IgA ou IgG|Immunoglobulines_schema.jpg]] monoclonaux.
**le ''myélome non-sécrétant'' (1% des myélomes) qui ne produit pas d'Ig
**le ''plasmocytome solitaire osseux'', une[[ tumeur unique|plasmocytome_solitaire_osseux_rx.jpg]] sans dissémination.
!! Clinique
La clinique est définie par l'abréviation ''CRAB'' ou CRABi:
* ''C''alcium (hypercalcémie)
* ''R''énal (Insuffisance Rénale due à une précipitation d'Ig)
* ''A''némie (normocytaire normochrome)
* ''B''one (lésions ostéolytiques: vertebre, crâne, )
A ceci il faut ajouter les ''Infections'' dues à la ''déplétion d'Ig'', typiquement des infections pulmonaires ou urinaires. Elles sont la ''cause principale de mortalité'' dans cette maladie.
!! Investigations
*L'''Electrophorèse'' du ''sérum'' ou de l'''urine'' permet de trouver un [[spike de protéine monoclonale|myelome_multiple_electrophorese.jpg]], qui correspond à l'immunoglobuline et qu'on apelle ''Protéine M''.
*les ''Rx conventionelles'' permettent de détecter les lésions lytiques, typiquement au niveau des [[vertèbres|myelome_multiple_rx__winking_owl_sign.jpg]] ("winking owl sign" ou "pedicle sign") et du [[crâne|myelome_multiple_rx_crane.jpg]] (aspect typique).
* la ''biopsie osseuse'' permet d'y trouver la présence de ''plasmocytes monoclonaux''.
*au ''labo'' on peut trouver une ''hypercalcémie'', une ''créatinine élevée'', des [[rouleaux erythrocytaires|myelome_multiple_rouleaux_erythrocytaires.jpg]] au frottis (qui font une ''vs augmentée'') et la ''protéine Bence Jones'' (chaines kappa et lambda libre) dans l'''urine''.
!! MGUS et Myelome plasmocytaire asymptomatique
*Le ''MM'' est diagnostiqué par ''3 critères'':
**Paraprotéine monoclonale sérique >30g/l
**Plasmocytes monoclonaux dans la moelle >10%
**présence d'un CRAB
*le ''Myelome plasmocytare asymptomatique'' (ou myélome indolent, smoldering myeloma) comprend les mêmes critères mais ''sans CRAB''. Cette pathologie ne se ''traite pas''.
*le ''MGUS'' (ou Monoclonal Gammapathy of Undetermined Signifiance) n'a ''que quelques paraprotéines monoclonales <30gl/l'' et a 1% de chance par année d'évoluer en MM complet. Cette pathologie ne se ''traite pas''.
|!|!Myélome Multiple|!Myélome indolent|! MGUS|
|!paraprot. monoclonale sérique | >30g/l | >30g/l | <30g/l |
|!plasm. monoclonaux dans la moelle| >10% | >10% | <10% |
|!présence d'un CRAB| OUI | - | - |
!! Traitement
* L'''auto-greffe autologue de cellules hématopoïétiques'' (si <65ans) et la ''chimiothérapie'' (si >65ans) sont les traitements à choix.
*On donne aussi des ''Biphosphonates'' pour l'atteinte osseuse. La chirurgie se fait aussi pour les atteintes des vertèbres.
*le ''pronostic'' s'évalue via la ''Beta2-microglobuline'' et ''Albumine'', il peut être assez mauvais.
undefine
undefine
undefine
undefine
undefine
{{schema_moelle.jpg}}
!! Syringomyélie
*La ''Syringomyélie'' est une ''cavité kystique centrale'' de la moelle epinière due à une ''collection de liquide'' anormale à cet endroit. Elle est souvent ''progressive''.
*L'''Etiologie ''est le plus souvent due à ''Arnold Chiari I'', mais on peut trouver des causes ''tumorales'', ''post-infectieuses'' ou ''post-traumatiques''.
*La'' clinique'' est très souvent ''asymptomatique'' avec une [[découverte fortuite à l'IRM|syringomyelie_irm.jpg]]. Quand elle est symptomatique on trouve:
**''Perte de douuleur et température bilatérale en bande'' (atteinte du croisement du tractus antéro-latéral au centre)
**''Toucher et proprioception préservés''
*le ''Traitement'' varie en fonction de la pathologie.
**Arnold Chiari I: décompression de la fosse postérieure
**Tumeur: résection
**etc.
{{syringomyelie.jpg}}
!! Brown-Séquard
*Le ''Brown Sequard'' correspond à une ''hémisection de la moelle'', située le plus souvent au niveau cervical.
*Les ''causes'' peuvent être principalement ''traumatiques'' ou ''tumorales''. On peut aussi trouver des ''abcès''.
*La ''clinique ''caractéristique se compose de:
**''Hémiparésie ipsilatérale'' (le TCS décusse au niveau du tronc cérébral)
**''Perte de proprioception/vibration ipsilatérale'' (le LM décusse au niveau du tronc cérébral)
**''Perte thelmo-algique contralatérale'' (le AL décusse au centre de la moelle)
{{brown_sequard_schema.jpg}}
!! Myélite transverse
*La ''Myélite transverse'' est une affection ''rare'' de la moelle épinière, comprenant une ''inflammation sur plusieurs segments'' de la moelle, surtout de la moelle thoracique, avec une ''progression rapide''.
*La ''cause'' est ''inconnue'' mais arrivent souvent en ''post-viral''.
*La ''clinique'' comprend:
**une ''parésie''
**des ''troubles de sensibilité''
**des ''dysfonctions sphincteriennes'' (rétention vésicale surtout)
**des ''douleurs dorsales''
*le ''diagnostic'' passe par une[[ imagerie par IRM|myelite_transverse_irm.jpg]].
*le ''traitement'' implique des ''stéroïdes haute dose'', mais l'efficacité ainsi que le pronostic sont très variables.
{{myelite_transverse_schema.jpg}}
!! Poliomyélite
*la ''Poliomyélite'' est due au __poliovirus__ et affecte la ''corne antérieure'' de la moelle, causant des symptômes du'' MNI''.
*la ''Clinique'' comprend:
**''Parésie flaccide'' (surtout les jambes)
**''Perte des reflexes tendineux''
**''Atrophie musculaire''
**''Sensation préservée''
**Une ''atteinte Bulbaire'' (15-20%) peut amener à des compications avec ''[[atteinte respiratoire|polio_respirateurs.jpg]]'' et atteinte cardio-vasculaire.
**''Pas de traitement'' disponible, en revanche la maladie est entièrement prévenue par la ''vaccination''.
{{poliomyelite_schema.jpg}}
{{myocardite.jpg}}
!!Généralité
*La ''Myocardite'' est une ''inflammation du myocarde'', qui peut être due à plusieurs causes différentes. Elle touche le plus souvent les ''hommes jeunes''.
*L'''Etiologie'' peut être
**''Virale'': Coxsackie Virus, parvovirus B19, HHV.6. C'est la cause la plus fréquente.
**''Bactérienne'': Strepto Gr. A, Lyme, Mycoplasme
**''Inflammatoire'': Lupus, Medicaments (Sulfonamides)
**''Idiopathique''
*Au ''Labo'' on trouve typiquement des ''CK et Troponines'' augmentés
*Le ''Traitement'' est surtout de ''traiter la cause'' et les complications.
undefine
{{myopathies_schema.jpg}}
!! Généralités
* Les ''Myopathies'' sont caractérisées par une ''faiblesse musculaire proximales'' sans perte sensorielle associée.
* La ''Clinique'' globalement impliquera des ''difficultés à se lever d'une chaise ou à monter des escaliers ''(pour les jambes) et des ''difficultés à se coiffer ou se laver les cheveux'' (pour les mains).
*Les ''Causes'' comprennent notament
**Les ''[[Dermatomyosites|Dermatomyosite]]'' et Polymyosites
**La ''Sarcoïdose''
**l'[[Hypercoticisme / Cushing]]
**les ''statines'', l'''alcool ''et les ''corticoïdes''
**La [[Dystrophie Musculaire de Duchenne]]
** Et d'autres causes rares.
undefine
!!Généralités
*Les myosites infectieuses peuvent être causées par des bactéries, virus, champignons ou parasites. L’agent le plus fréquent est le ''staph doré''. Deux formes connues sont la ''gangrène gazeuse'' ainsi que ''l’abcès du psoas''.
!! Gangrène gazeuse
*La ''gangrène gazeuse'' est une complication redoutée des traumas, souvent des ''blessures de guerres''. Elle est due à ''clostridium perfringens'' et implique une ''nécrose musculaire'' rapidement progressive et des ''crépitements'' à l’examen clinique. Elle implique souvent une ''amputation''.
{{gangrene_gazeuse.jpg}}
!! Abcès du Psoas
*L’abcès ''du Psoas'' est une collection de pus au niveau de ce muscle. Il nécessite un ''drainage''.
{{abces_muscle_psoas.jpg}}
![ext[dermato_naevi.pdf|./pdf/dermato_naevi.pdf]] <!-- Texte caché pour la recherche Naevi - Nævi dysplasique (≠ précancérose, c’est un terme histologique). Acquis, FR pour un mélanome (mais pas le naevus qui se transforme). - Nævus bénin congénital : 1% BB, dermique et péri-annexielle, pb esthéthique. FR mélanome si >20cm (?). TTT : chirurgie (év dermabrasion, laser) Nævi bénins (acquis = photoinduit ou congénital mais invisible NN) - Jonctionnel (macule pigmentée, thèque JDE), composé (papule pigmentée, thèques JDE + dermique), dermique (papule achromique ¢ non fonctionnel, avec poils: celui des sorcières), bleu (papule idem dermique mais fonctionnel → bleu), congénital (visible dès NN, peut être grand++. Signal de prolifération toutes structures peau : poils, glandes), de Reed (pigmenté), Spitz (rouge) (bénin mais à croissance rapide. ¢ fusiformes, Dx à Bx), de Sutton (halo nævus) (involution, dépigmentation permanente, multifocal++), résurgence naevique (naevus arraché ou mal excisé. Aspect clinique inquiétant) Nævi dysplasiques - Isolé vs multiple. Ressemble à un mélanome. Lésions pigmentées non mélanocytaires : - Kératose séborrhéique : bénin, multiples. Acanthose kératinocytaire (les mélanocytes travaillent normalement donc pigmentation). Fréquent ++ chez âgé. Dx clinique (bordure nette, dermatoscope). Ttt : curetage, cryothérapie, électrocoagulaiton. - Ephélide : dépôt de pigment (pas plus de mélanocytes) - Carcinome baso¢ pigmenté : cancer cutané n°1, malignité locale. Âgé++, zone exposée. Dx histologique. Ttt : chirurgie micrographique (RT, cryochirurgie, 5-FU, imiquimod) - Lésions vasculaires : angiome, bénignes, ± trombosées (avec aspect inquiétant). Dx : dermatoscope. - Autres : histiocytofibrome (réaction cicatricielle), angiokératome (tumeur épidermique), sarcome de kaposi (tumeur vasculaire, immunosupprimé) - Bx : dx de naevus dysplasique (atypies ¢, ponts entre thèques, infiltrat lymphocytaire, fibroplasie papillaire) (terme histologique) Naevus : thèques (nids ¢) mélanocytaires, différenciation vers la profondeur (¢ petites, pigmentées) Syndrome du naevi atypique (dysplasique) : (ttt : suivi, ø excision) 1- AF de mélanome (car c’est un grand FR de mélanome) 2- >50 naevi de grande taille avec grand hétérogénéité (taille, coloration, contour), difficiles à catégoriser. 2- Histologie : dysplasie avérée pour certaines lésions. GEN CLIN DD INV CAVE -->
{{narcolepsie_schema.jpg}}
!! Généralités
*la ''Narcolepsie'' est un ''trouble du sommeil chronique'' caractérisé par une ''capacité de s'endormir n'importe quand''. Elle est souvent génétique avec une atteinte ''familiale''.
*ces ''"attaques de sommeil"'' peuvent survenir durant n'importe quelle activité ''meme en consuisant'', et ont une durée de ''quelques minutes''.
*Elle est souvent associée à la ''cataplexie'', c'est à dire que le patient a une ''perte de tonus lors d'emotions fortes'' comme le rire ou la colère.
*Elle est aussi associée à des ''paralysies du sommeil'' ainsi qu'à d'autres troubles du sommeil.
*Le ''traitement'' inclut le ''modafinil'', le ''methylphenidate'' (Ritaline®) ou la ''Métemphetamine''.
*En Suisse, la ''conduite peut être autorisée'' par le médecin traitant si le niveau d'attention obtenu grâce à la ''médication'' est jugé satisfaisant. A noter que les ''siestes organisées'' permettent de diminuer le besoin de traitement médicamenteux.
undefine
!!Generalités *Dans la ''NTA'', il y a'' nécrose des cellules épithéliales des tubules'' du rein *Typiquement chez le vieux qui fait un sepis ou une hypovolémie, car une ''cause'' majeur de NTA sont les ''insuffisances rénales pré-rénales'' *Une autre cause sont les médicaments ''néphrotoxiques'' *La NTA induira une ''insuffisance rénale rénale'' une fois qu'elle est installée. Ca se verra car le rein va ''perdre du na'' par son incompétence à le ré-absorber. !!Diagnostic *''Fraction d'ejection du sodium >3%'' *Le sédiment montrera des ''cellules tubulaires''
undefine
!! Généralités * Le groupe des ''NEM'' regroupe un ensemble de ''pathologies endocriniennes héréditaires'', toutes à ''transmission autosomale dominante'', avec propension à développer de ''multiples tumeurs des organes endocriniens''. *Il existe ''trois types de NEM'': *''NEM Type I'' (ou syndrome de Wermer), "les 3 P's": **NEM Type IIa (Syndrome de Wermer) **NEM type IIb !! NEM Type I *Le ''NEM Type I'' ou ''Syndrome de Werner'' est caractérisé par ''"PPP"'': **''Hyperplasie __P__arathyroïde'' (la plus fréquente): [[hyperparythroïdie primaire|Hyperparathyroïdie]]. **''Tumeur __P__ituitaire'': [[Prolactinomes, Acromégalie|Tumeur Hypophysaire]] **''Tumeur __P__ancréatique'': Gastrinomes (Zollinger-Ellison), Insuilnomes, Glucagonomes,PP-nomes, SS-nomes, VIP-nomes **Carcinoïdes !! NEM Type IIa *Le ''NEM Type IIa'' ou ''Syndrome de Sipple'' est caractérisé par ''"MPP"'': **''Carcinome Thyroïdien __M__édullaire à Cellules C '' (le plus fréquent) **''__P__héochromocytome'' (cf. [[Phéochromocytome]]) **''Hyper-__P__arathyroïdie'' !! NEM Type IIb *Le ''NEM Type I'' ou ''Syndrome de Werner'' est caracterisé par ''"MMMP"'': **''Carcinome Thyroïdien __M__édullaire à Cellules C '' **''Neuronome __M__uqueux'' **''Syndrome Marfanoïde'' **''__P__héochromocytome'' (cf. [[Phéochromocytome]])
undefine
{{nephrite_interstitielle_aigue.jpg}}
!!Généralités
*la ''néphrite interstitielle aigue'' correspond à une ''inflammation de l'interstice'' des reins, avec à l'histologie un ''odème'', un ''infiltrat inflamamtoire'' ainsi que des ''lésions tubulaires''.
*L'inflammation finit par induire une ''fibrose'' avec ''atteinte irréversible de la fonction rénale''.
*les glomérules et les vaisseaux sont par contre normaux
*Les ''causes'' comprennent:
**''médicaments'' (réactions allergiques, notamment Oméprazole, ATB (clinda, pénicillines, bactrim)) et AINS, le patient refait la même chose si ré-exposé)
**''Infections''(de tout type)
**''Maladies systémiques '' (Lupus, sjögren, sarcoïdose)
**''Lymphomes'' ou autres infiltrations malignes
**''TINU'' (syndrome associé à une uvéite)
*les ''Investigations'' comprennent:
**''biopsie rénal'' pour le diagnostic
**''clinique'' peu spécifique, avec une ''IRA'', des signes d'urémie ou des douleurs sourdes dans les loges rénales
**''labo'' avec des trouvailles variables, on a souvent une ''protéinurie'', parfois hématurie, leucocyturie, cylindres.
*le ''Traitement'' comprend surtout:
**STOP medicaments
**Traiter la causes
**Parfois stéroides mais pas forcément
undefine
![ext[wilms_nephroblastome.pdf|./pdf/wilms_nephroblastome.pdf]] <!-- Texte caché pour la recherche néphroblastome tumeur de wilms Wilm's Wilms Wilms tumour (nephroblastoma) Wilms tumour originates from embryonal renal tissue and is the commonest renal tumour of childhood. Over 80% of patients present before 5 years of age and it is very rarely seen after 10 years of age. Clinical features Most children present with a large abdominal mass, often found incidentally in an otherwise well child. Other clinical features are listed in Box 21.2. Wilms tumour Investigations Ultrasound and/or CT/MRI (Fig. 21.13) is usually charac teristic, showing an intrinsic renal mass distorting the normal structure. Staging is to assess for distant metas tases (usually in the lung), initial tumour resectability and function of the contralateral kidney. Management In the UK, children receive initial chemotherapy fol lowed by delayed nephrectomy, after which the tumour is staged histologically and subsequent treat ment is planned according to the surgical and patho logical findings. Radiotherapy is restricted to those with more advanced disease. Prognosis is good, with more than 80% of all patients cured. Cure rate for patients with metastatic disease at presentation (~15%) is over 60%, but relapse carries a poor prognosis. Soft tissue sarcomas Rhabdomyosarcoma is the most common form of soft tissue sarcoma in childhood. The tumour is thought to originate from primitive mesenchymal tissue and there are a wide variety of primary sites, resulting in varying presentations and prognosis. Box 21.2 Presentation of Wilms tumour Common Uncommon Abdominal mass Abdominal pain Anorexia Anaemia (haemorrhage into mass) Haematuria Hypertension About 5% have bilateral disease at diagnosis. Large tumour, showing the characteristic mixed tissue densities (cystic and solid). It arises within the kidney and envelops a remnant of normal renal tissue Remnant of left kidney Liver Normal kidney Figure 21.13 Large Wilms tumour arising within the left kidney, showing characteristic cystic and solid tissue densities. -->
@@background-color:Yellow; !''Néphrologie'' @@ <<list-links "[tag[Néphrologie]sort[title]]">>
undefine
undefine
undefine
!! Neurofibromatose Type I (Reckinghausen)
{{neurofibromatose_type_I.jpg}}
{{Neurofibromatose Type I (Recklinghausen)}}
!! Neurofibromatose Type II
{{neurofibromatose_type_II.jpg}}
{{Neurofibromatose Type II}}
*La ''Neurofibromatose de Type I'' ou ''Maladie de Reckinghausen'' est une maladie génétique à transmission ''autosomale dominante''. *Elle est caractérisée par: **des ''taches café au lait'' **des ''neurofibromes'' pouvant être [[défigurants|neurofibromatose_visage.jpg]] **des ''tumeurs du CNS (gliomes, méningiomes)'' dont entre autres le ''gliome du nerf optique''. **des ''nodules de Lisch'' (harmartomes de l'Iris) **des ''lésions osseuses'' et des ''scolioses'' *Le ''traitement chirurgical'' doit se faire globalement pour les ''lésions symptomatiques''.
*la ''Neurofibromatose de type II'' est une maladie génétique à transmission ''autosomale dominante'', comme le type I mais ''moins fréquente''. *Elle est surtout caracterisée par: *des ''neurinomes accoustiques''( ou ''Schwannome du VIII'' ou Schwannomes vestibulaires) souvent bilatéraux, [[prenant le contraste à l'IRM |schwannome_vestibulaire_irm_gd.jpg]]injecté au Gd+. , avec un ''effet de compression local'' sur les nerfs. *on trouve aussi des ''méningiomes'', ''taches café au lait'' et ''neurofibromes'' comme dans le type I mais ''plus rarement''. *Les Schwannomes sont des tumeurs à croissance lente.
undefine
undefine
undefine
@@background-color:Lavender; ! ''Neurologie'' @@ <<list-links "[tag[Neurologie]sort[title]]">>
@@background-color:lightgrey; !''Neurologie'' @@ <<list-links "[tag[Neurologie.nucl]sort[title]]">>
{{nevralgie_trijumeau_schema.jpg}}
!! Définition
*La ''Névralgie du Trijumeau'' (ou //Tic douloureux facial//, ou //suicide disease//) est une des ''pathologies les plus douloureuses'' connues.
*Elle est d'origine généralement ''idiopathique'' mais quelques causes secondaires impliquent une ''SCA tortueuse'' qui compresserai le nerf trijumeau, ou encore une ''tumeur de l'angle ponto-cérebelleux'' ou aussi une ''SEP''.
*Elle touche plus souvent les ''femmes'' d'âge moyen.
!! Clinique
*Le patient reçoit des ''décharges électriques paroxystiques récurrentes'' au niveau des territoires de V1, V2 et V3, de manière ''unilatérale''. La douleur est insoutenable.
*Les ''crises'' peuvent durer ''de quelques secondes a quelques heures'' et peuvent être récurrentes durant des semaines.
*Il n'y a ''pas d'atteinte sensorielle ni de parésie'' des territoires concernés
!! Investigations
*Le ''diagnostic est clinique'' de manière générale.
*Un ''IRM'' peut être fait pour exclure une[[ tumeur de l'angle ponto-cerebelleux |nevralgie_trijumeau_irm_tumeur.jpg]]ou pour valider l'origine vasculaire par [[compression de la SCA|nevralgie_trijumeau_irm_sca.jpg]].
!! Traitement
*Le médicament de choix est la ''carbamazépine'' qui est généralement efficace pour traiter les douleurs. On peut assi ajouter le Baclofen ou la Phenytoin. Avec le temps le patient peut devenir résistant au traitement.
*La ''chirurgie de décompression'' se fait lors d'échec du traitement
undefine
undefine
undefine
!!Généralités
*Le névrome de Morton correspond à un ''épaississement pseudo-tumoral'' (comme une boule) d’un nerf situé ''entre les métatarses III et IV'' du pied. L’espace entre ces deux métatarses étant très serré, le nerf subit une ''compression chronique''.
*Les symptômes sont très précis, avec des ''douleurs, brûlures et paresthésies'' situées au niveau du ''troisième espace intermetatarsien'', qu’on peut aussi ''reproduire à la palpation''.
*Un ''IRM'' permettra de démontrer l'''[[épaississement du nerf|nevrome_morton_irm.jpg]]''.
On peut traiter ce syndrome par une ''excision chirurgicale'' du névrome.
{{nevrome_morton_schema.jpg}}
undefine
undefine
![ext[Nez.pdf|./pdf/Nez.pdf]] <!-- Texte caché pour la recherche Examen • Radiologie: Computer Tomographie (CT), Scanner Normal Polypes Bonne appréciation osseuse Examen • Radiologie: Imagerie Résonance Magnétique (IRM) Normal Anosmie congénitale Méningiome Bonne appréciation de tissues Examen • Radiologie: Digitale Volume Tomography (DVT); Cone beam Appréciation osseuse comme CT Moins de Rayons Bremke, Acta ORL, 2009 Examen • Radiologie: Images Standard Valeur clinique limité en rhinologie, Obsolète ! Contribue quasi jamais a une décision clinique Fracture du nez Diagnostique clinique •Emphysème sous-cutané •Hématomes / Suffusions •Fausse mobilité •Déviation pyramide nasale Symptômes • Epistaxis, Obstruction nasale, Gène esthétique Thérapie • Réposition (dans les 10 jours); Septo-Rhinoplastie à distance Complications • Hématome septale, Affaissement nasale Imagerie •Valeur médicolégale, pas médicale ni décisionnelle Hématome septale Thérapie • Incision-Drainage Borner & Landis, J Pediatrics 2013 Imagerie • Radiologie: – CT: Complications de sinusites, préopératoire (fenêtres osseuses) – IRM: Suspicion de tumeur – DVT (Digitale Volume Tomography) – (Radio Standard) – (US / Trans-illumination) Examen • Rhinométrie acoustique Très bonne méthode pour évaluer les parties antérieures du nez Examen • Mesure du NO par chémo-luminescence Examen • Rhinomanométrie Resistance nasale Pathologies Causes • Congénital • Malformative • Traumatique (Postopératoire) • Inflammatoire (Systémique / Local) • Infectieux • Tumoral • Toxique / Médicamenteux Rhinosinusite Complexe osteomeatale sinus nose sinusitis rhinitis Physiologique : Ostium perméable Transport muco-ciliaire fonctionne Pathologique : Inflammation bloque l’Ostium Transport muco-ciliaire interrompue -->
!! Généralités
*Les noudules Thyroïdiens sont ''majoritairement bénins (95%)'', avec comme causes bénignes:
**L'''Adénome Toxique''
**Le ''Goitre Multinodulaire''
**La ''Thyroïdite d'Hashimoto''
**Les ''Kystes Simples'' ou ''Hémorrhagiques''
**Les ''Adénomes folliculaires'' ([[tumeurs indolores, froides|thyroide_adenome_folliculaire_histo.jpg]])
**La ''Thyroïdite subaigue de Quervain''
*Les ''Cancers Thyroïdiens (5%)'' sont rares et peu agressifs/Lentement évolutifs. Ils comprennent:
**''Cancer Papillaire'' (75%) ([[associé aux rayons|thyroide_carcinome_papillaire_histo.jpg]])
**''Cancer Folliculaire'' (15%) ([[plus agressif que le papillaire|thyroide_carcinome_folliculaire_histo.jpg]])
**''Cancer Anaplasique'' ([[rare mais très agressif|thyroide_cancer_anaplasique_histo.jpg]], évolution des deux autres)
**Autres Cancers (Cancer medullaire à cellule C, lymphomes, métastases)
*Le ''Traitement des cancers'' implique en général
**une ''Thyroidectomie totale'' avec ''curage ganglionnaire''
**une ''Radiotherapie à l'Iode Radioactif''
**suivi d'une ''substitution par lévothyroxine''
*L'''Evaluation'' d'un nodule peut se faire via:
**le ''Labo'' (TSH, T4)
**l'''US'' (taille suspecte si >10mm), permet aussi de guider la ponction
**la ''scintigraphie'' (iode-131) permet d'exclure un cancer si le nodule est chaud
**la ''cytoponction'' via la PAF (Ponction à l'Aiguille Fine), avec comme critère d'évaluation de malignité les [[critères de Bethesda|nodule_thyroidien_bethesda.jpg]].
*La ''Découverte d'un Nodule'' implique un ''Algorithme'' pour investiguer s'il est toxique, bénin ou malin:
{{hyperthyroidie_algorithme.jpeg}}
undefine
undefine
undefine
!!Définition
* ''Détresse respiratoire majeure'', ''tachypnée'' (> 20/min) et ''orthopnée''
* ''Râles crépitants sur les plages pulmonaires''
* ''Sa02 (à l'air ambiant) généralement< 90 %''
!!Etiologies
//Dysfonction du ventricule gauche://
* ''Syndrome coronarien aigu'', MCAS, post-infarctus du myocarde, myocardite, autres
*'' Pic hypertensif''
* ''Arythmie''
* ''Valvulopathie ''(ex: sténose mitrale ou aortique)
*'' Embolie pulmonaire''
*Epanchement péricardique
* Maladie de haute altitude(---+ oedème pulmonaire de type «perméabilité accrue»)
* SDRA
* OAP allergique ou anaphylactique
* OAP toxique/médicamenteux(---+ OAP de type «perméabilité accrue»): héroïne, gaz
*Insuffisance rénale sévère
* Iatrogène (ex: post ponction d'épanchement pleural; éviter de ponctionner> 1.5 Là la fois)
!!Clinique
* ''Tachypnée ''+ ''dyspnée''; ''mousse ''dans les voies respiratoires et dans la bouche
* ''Toux''
* Peau moite, cyanosée
* Asphyxie, angoisse
!!Prise en charge
* Troponine, CK, ± CK-MB, BNP ou NT-proBNP
* Na•, K•, AST, créatinine, d-dimères, glycémie, lactates, gaz artériel
*'' Traiter IMMEDIATEMENT'' l'OAP et chercher simultanément son ''origine''!
* ''ÉCG ''(exclure: IMA, arythmie, autres anomalies nécessitant une intervention STAT)
* ''Échocardiographie ''et autres investigations si jugées opportunes
*Mnémotechnique: ''LMNOP'' (Lasix, Morphine, Nitrés, Oxygène, Peep (CPAP))
*''RX thorax'', avec les 3 stades de l'IC
<$button popup="$:/stades_ic_rx.jpg" >
[img width=64 [images/stades_ic_rx.jpg]]
</$button><$reveal type="popup" state="$:/stades_ic_rx.jpg"><div class='tc-tiddler-frame'>
{{stades_ic_rx.jpg}}
</div>
</$reveal>
!! Définition
* L'''Obesité'' est considerée comme une''épidémie globale'', en particulier dans les pays développés.
*On la calcule via l'''IMC '':
|!''IMC'' = ''Poids'' (kg) / Taille (m) ^2 |
*L'IMC permet de définir des ''degrés d'obesité'':
|!|!IMC|!Classe|
|!maigreur| <18.5 ||
|!normal| 18.5-25 ||
|!surpoids| 25-30 | |
|!obesité moderée| 30-35 | I |
|!obesité sévère| 35-40 | II |
|!obesité morbide| >40 | III |
|!superobèse| >50 | IV |
!! Etiologies
*La cause primaire est dûe à l'''alimentation''.
*Les causes secondaires comprennent:
**''corticothérapie'', ''cushing''
**''hypothyroïdie''
**''neuroleptiques''
**''insuline'', ''sulfonylurés'', ''insulinome''
**''SOPK''
!! Complications
*L'Obesité est la cause de nombreuses complications:
**''Hypertension''
**''Maladies Cardio-vasculaires''
**''Hyperlipidémie''
**''AVC''
**''Diabète Type 2''
**''Arthrose''
**''Stéatose hépatique''
**''Apnées du Sommeil''
**''Dépression''
**''Syndrome Obesité-Hypoventilation''
!! Traitment
*Le ''style de vie'' est le traitement prinicpal
*Au niveau médicamenteux, on utilise l'''Orlistat'', un inhibiteur des lipases intestinales
*La ''Chirurgie Bariatrique'' (''bypass gastrique'' et autres option) peut s'envisager si le patient a un ''BMI > 40'' (ou >35 avec complications) et a subit un ''echec du traitement non-chirurgical''.
{{obstruction_urinaire.jpg}}
!!Définitions
*une ''Obstruction Urinaire'' peut amener à une ''Insuffisance Rénale'' et à une ''[[Hydronéphrose|hydronephroses.jpg]]'' avec dilatation pyélo-calicielle
*Elle est plus courante chez les ''hommes'', à causes de l'Hypertrophie Prostatique et du Cancer de la Prostate
*Elle ne fait PAS d'IRA normalement, tant qu'elle touche un rein et que l'autre est sain
*On distingue:
**''Obstruction Urinaire Haute'': au-dessus de l'UVJ, faisant surtout des coliques rénales
**''Obstruction Urinaire Haute'': au dessous de l'UVJ, faisant surtout des problèmes mictionnels
*les ''Causes'' principales comprennent:
//Obstruction Urinaire Haute//
*''Calculs urinaires''
*''Caillots de sang''
*''Nécrose Papillaire''
*Tumeurs
*Sténoses
*Maladies de la PUJ ou de la VUJ
*Fibrose Rétroperitonéale
*Endométriose, cancers externes, anévriysmes aortiques
//Obstruction Urinaire Basse//
*''HBP'' et ''Cancer de la prostate''
*''Calcul urinaire''
*Sténose de l'urètre
*Vessie Neurogène (SEP, Diabète)
*Trauma
*Cancer de la Vessie
!!Clinique
//dépend de la cause//
*''Douleurs en Colique'', le signe le plus fréquent
*''Oligurie''
*''Hématurie''
*''IU Hautes récurrentes''
*Insuffisance Rénale
!!Investigations
*''US '' rénal, ne voit pas tout, ainsi que ''RX pelvienne'' voir ''URO-CT'' à la recherche de calcul
*''Analyses urinaires''
*Cystoscopie pour évaluer le bas
!!Traitement
//dépend de la cause//
{{obstruction_MAG3.gif}}
!!Examen
*Le ''Néphrogramme Isotopique avec test au LASIX'' permet de chercher une ''obstrutction urinaire''
*Le scan se fait de manière ''dynamique'' avec la création de ''TAC ''(Time-Activity-Curve), divisée en[[ trois phases |TAC_rein_normale.jpg]](phase vasculaire,phase parenchymateuse, phase de clearance)
*On injecte du Furosémide (Lasix)'' après 20min.''
*Une obstruction urinaire haute induira une sur-pression (hydronéphrose, hydro-uretère) avec une atteinte aigue des vaisseaux et des tubules. Dans les heures suivant l'obstruction, le flux rénal et la filtration glomérulaire diminuent.
*Si l'obstruction est corrigée rapidement, le rein peut récupérer complètement. En revanche si elle dure sur plus d'une semaine, la récupération peut être seulement partielle.
*La scintigraphie permet donc d'évaluer l'impact fonctionnel de la pathologie sur le rein, et la réponse au traitement.
*Dans le cas des dilatations, le contraste peut être retenu de manière prolongée du à un effet réservoir.
*Le Furosémide (LASIX) ajouté va augmenter le Flux urinaire et donc le wash-out chez un patient normal.
*Mais dans une obstruction mécanique, la lumière sténosée va empêcher le wash-out et on retrouvera une rétention, qui peut être [[quantifiée sur les TAC|TAC_MAG3_dd.jpg]].
*Le Néphrogramme est peu fiable si le patient est en insuffisance rénal, avec un mauvais GFR.
!!Traceur
*le ''Tc-99m MAG3'' //(MercaptoAcetylTriGlycine)// est excrété exclusivement par [[sécrétion tubulaire|fixation_rein.nucl.jpg]], car il est lié aux protéines et non filtré, ce qui fait qu'il n'évalue pas le GFR contrairement au DTPA.
*Il possède une haute sécrétion de premier pasage et sa liaison à 97% aux protéines plasmatiques font qu'il reste dans le compartiment vasculaire, avec un bon TBR
*La route alternative de clearance passe par les voies biliaires, ce qui fait qu'on peut y voir de l'activité.
!!Interprétation
''Rein normal''
<$button popup="$:/MAG3_normal.jpg" >
[img width=64 [images/MAG3_normal.jpg]]
</$button><$reveal type="popup" state="$:/MAG3_normal.jpg"><div class='tc-tiddler-frame'>
{{MAG3_normal.jpg}}
</div>
</$reveal>
*La TAC atteint rapidement un pic sharp et se clear rapidement. La diurèse du Furosemide accélere le wash-out.
*Sur une ROI placée sur un uretère, on peut retrouver un spike après l'injection du diurétique, indiquant le passage d'un bolus accumulé dans le pelvis.
''Rein dilaté avec obstruction''
<$button popup="$:/TAC_obstruction_mecanique.jpg" >
[img width=64 [images/TAC_obstruction_mecanique.jpg]]
</$button><$reveal type="popup" state="$:/TAC_obstruction_mecanique.jpg"><div class='tc-tiddler-frame'>
{{TAC_obstruction_mecanique.jpg}}
</div>
</$reveal>
*La TAC montre une accumulation en plateau, sans aucune réponse au diurétique
''Rein dilaté sans obstruction''
<$button popup="$:/TAC_obstruction_fonctionelle.jpg" >
[img width=64 [images/TAC_obstruction_fonctionelle.jpg]]
</$button><$reveal type="popup" state="$:/TAC_obstruction_fonctionelle.jpg"><div class='tc-tiddler-frame'>
{{TAC_obstruction_fonctionelle.jpg}}
</div>
</$reveal>
*la TAC est semblable initialement à celle d'un rein normal, cependant le pic n'est pas sharp. Tandis que le système dilaté se remplit, le TAC continue de s'accumuler sur un plateau de 20-30 min. Après injection.
*Après l'injection du Furosémide cependant, l'absence d'obstruction fait que le rein clear rapidement le flow d'urine augmenté
!!Exemples
<$button popup="$:/2.11.2016_obstruction_MAG.jpg" >
[img width=64 [images/2.11.2016_obstruction_MAG.jpg]]
</$button><$reveal type="popup" state="$:/2.11.2016_obstruction_MAG.jpg"><div class='tc-tiddler-frame'>
{{2.11.2016_obstruction_MAG.jpg}}
</div>
</$reveal>
02.11.2016:Hydronéphrose avec obstruction nette
undefine
undefine
undefine
undefine
undefine
undefine
undefine
![ext[omphalocele.pdf|./pdf/omphalocele.pdf]] <!-- Texte caché pour la recherche Exomphalos/gastroschisis - 178 • • • Atresia or stenosis of the jejunum or ileum – there may be multiple atretic segments of bowel Malrotation with volvulus – a dangerous condition as it may lead to infarction of the entire midgut Meconium ileus – thick inspissated meconium, of putty like consistency, becomes impacted in the - These lesions are often diagnosed antenatally (see Ch. 9). In exomphalos (also called omphalocele), the abdominal contents protrude through the umbilical ring, covered with a transparent sac formed by the amniotic membrane and peritoneum (Fig. 10.28). It is often associated with other major congenital abnor malities. In gastroschisis, the bowel protrudes through a defect in the anterior abdominal wall, adjacent to Neonatal medicine the umbilicus, and there is no covering sac (see Fig. 9.2). It is not associated with other congenital abnormalities. Figure 10.28 Small exomphalos with loops of bowel confined to the umbilicus. Care needs to be taken not to put a cord clamp across these lesions. Gastroschisis carries a much greater risk of dehydra tion and protein loss, so the abdomen of affected infants should be wrapped in several layers of clingfilm to minimise fluid and heat loss. A nasogastric tube is passed and aspirated frequently and an intravenous infusion of dextrose established. Colloid support is often required to replace protein loss. Many lesions can be repaired by primary closure of the abdomen. With large lesions, the intestine is enclosed in a silastic sac sutured to the edges of the abdominal wall and the contents gradually returned into the peri toneal cavity. -->
@@background-color:blueviolet; !''Oncologie'' @@ <<list-links "[tag[Oncologie]sort[title]]">>
@@background-color:Salmon; !''Oncologie'' @@ <<list-links "[tag[Oncologie.nucl]sort[title]]">>
!!Généralités *l'''onde Q ''peut être normale ou patologique. **si elle est petite ( physiologique), on parle d' ''onde q'' (large de <30 ms). **si elle est profonde ou large, on parle d' ''onde Q'' *La ''dépolarisation'' du ventricule se fait en deux grandes phases: **d'abord le ''septum'' qui va vers la droite, avec une petite onde r en V1 et une petite onde q en V6. **puis le ''VD->VG'' avec la grande pointe qui va vers la gauche (positive en V6, négative en V1) *la ''mesure'' se fait en prenant la distance entre le début de l'onde q (partie supérieure de la ligne du tracé) et de relier horizontalement avec le point ou l'onde est remontée. *Une ''onde QS'' est une onde Q pas suivie par une onde R. On en trouve souvent en V1, V2 V3 ou ce n'est pas forcément une séquelle, mais peut correspondre à un BBG ou HVG *l'''onde de transition'' correspond au moment ou le QRS passe de majorité S en V1 à une majorité R en V6, généralement on la trouve en V3-V4.
undefine
undefine
@@background-color:#73fcd6; !''Ophtalmolgie'' @@ ![ext[ophtalmo_oli.pdf|./pdf/ophtalmo_oli.pdf]] <!-- Texte caché pour la recherche -->
undefine
undefine
![ext[Oreille_Externe.pdf|./pdf/Oreille_Externe.pdf]]
<!-- Texte caché pour la recherche
AFFECTIONS DE L'OREILLE EXTERNE
LE PAVILLON
Molformathms
1
Elles consistent en l'absence de plis, oreilles 'décollées, microties ou absences de pavillon. Ces deux dernières atteintes sont souvent associées à des malformations du conduit auditif externe ou de l'oreille moyenne. On parle d' atrésie.
Périchondrite et érysipèle
en s'agit d'infections bactériennes, le plus souvent à staphylocoques dorés pour les périchondrites, à pneumocoques pour les érysipèles.
Traitement Pour 1' essentiel, il consiste en des antibiotiques par voie intraveineuse.
Périchondrite du pavillon. Le lobule est d'aspect normal, bien que 1'infection concerne le cartilage et épargne les régions qui en sont dépourvues. Cela permet de différencier la périchondrite d'un érisypèle qui touche 1'ensemble du pavillon
Dermochondrite de Winkler
Il s'agit d'une inflammation qui touche une zone bien délimitée du pavillon, le plus souvent dans sa partie supérieure, douloureuse au toucher. Typiquement, les malades disent ne plus pouvoir mettre la tête sur l'oreiller et sont obligés de dormir sur le côté sain.
Traitement Il est chirurgical.
29 Elles sont rares, se développent au dépens de la peau ou des glandes du fond de la conque.
Tumeur bénigne du fond de la conque. Ils 'agissait d'un papillome.
Iumeur:s malignes
Elles sont plus fréquentes que les tumeurs bénignes et sont, pour l'essentiel des carcinomes épidermoïdes, survenant surtout chez la personne âgée.
Iraumat~m~s
Citons les plaies cutanées et l'oethématome, hématome du pavillon, qui peut entraîner, si les traumatismes se répètent, des modifications chroniques et disgracieuse du pavillon, comme chez le boxeur ou le joueur de rugby !
30 AFFECTIONS DU CONDUIT AUDITIF EXTERNE
Malfurmations
Les atrésies
eLe conduit auditif externe est étroit, ou absent. L'oreille moyenne est souvent malformée aussi, par contre l'oreille interne est souvent normale et fonctionne. Ces anomalies représentent une gêne esthétique et fonctionnelle, en raison du déficit auditif de transmission.
Traitement ill vise deux buts, le premier d'ordre esthétique (faire ou refaire le pavillon de l'oreille), le second d'ordre fonctionnel, restaurer l'audition. Les opérations se font en plusieurs étapes, la partie fonctionnelle venant en dernier. Elle consiste à forer un conduit auditif externe, en partant du fond de la conque du pavillon reconstruit et à corriger la chaîne des osselets malformés. Si le résultat esthétique est excellent dans la plupart des cas, le résultat fonctionnel est souvent médiocre. Actuellement, la tendance est de réaliser la chirurgie esthétique et de corriger le déficit auditif non par chirurgie mais par une prothèse particulière, le 'BAHA' ('bone anchored hearing aid'). Il s'agit d'un vibreur osseux qui transmet les vibrations du son par une vis implantée dans la corticale de l'écaille de l'os temporal. [Kosetcou 2002 1
Atrésie de l'oreille. Le Ct scan montre là où devrait normalement être le conduit auditif externe (flèches rouges). Dans le cas de cet enfant, le déficit auditif a été corrigé par un vibreur osseux qui transmet les vibrations du son à l'oreille interne par une vis implantée dans l'os du crâne (à droite), une prothèse 'BAHA ' (bone anchored hearing aid).
AOUtions inOammatoire.s 2u inœ~ti~J.Jse.s
Les bouchons de cérumen
eLes glandes cérumineuses sont situées dans la portion latérale, cartilagineuse du conduit. Le cérumen est transporté naturellement vers 1' extérieur. Chez certaines personnes, le cérumen ne sort pas spontanément du conduit. Le problème est fréquent chez celles qui utilisent des coton-tiges. Avec les coton-tiges, le cérumen est poussé en profondeur et le système 'auto- nettoyant' est altéré. Rien ne vaut la douche, pour des oreilles saines et propres, s'il n'y a pas une perforation de la membrane du tympan ! Un bouchon laissé longtemps en place peut être à l'origine d'une otite, bactérienne ou mycotique.
31 Otite externe virale Elle aussi cause de vives douleurs, lancinantes, exacerbées à la palpation. Les téguments sont diffusément rouges, tuméfiés, parfois avec un écoulement clair, jaune citrin, parfois pulsatile. Le plus souvent, le virus en cause est l'Influenza virus.
Mvringite bulleuse L'inflammation est parfois limitée à la membrane tympanique. L'épiderme est décollé de la lamina propria et forme des 'bulles' remplies d'un liquide séreux ou séro-sanguin. Les douleurs sont souvent très vives.
Zona otique La présentation est caractéristique, avec des bulles, parfois sur la seule membrane tympanique, parfois le long du plancher du conduit auditif externe, et dans la zone de Ramsay-Hunt, au fond de la conque. L'infection peut se compliquer d'une labyrinthite avec un déficit auditif neurosensoriel, un déficit vestibulaire et, classiquement, une paralysie faciale.
Myringite bulleuse. A gauche, une bulle séro-hémorragique ; à droite, plusieurs bulles remplies d'un liquide séreux.
Otite externe mycosique Elle ne cause aucune ou que peu de douleur. Elle peut s'accompagner d'un écoulement verdâtre avec une odeur de fromage. Les germes sont l'Aspergillus noir ou blanc, le Candida albicans, plus rarement le Mucor, Cladosporium, Paecilomyces.
Aspergillus blanc. Ce patient utilise Aspergillus noir. Des dépôts de des coton-tiges et on voit une cérumen couvrent le manche du érosion rougedtre de la surface du marteau. Les spores sont visibles tympan. Les spores (flèche rouge) (flèche).
sont visibles dans
Candida albicans.
33 Les traitements Evidemment, il est indispensable de traiter la douleur par des antalgiques efficaces !
- Otite localisée, le furoncle Le plus souvent, une pommade antibiotique active contre le staphylocoque doré est suffisante. Parfois, une incision du furoncle est nécessaire.
- Otite externe bactérienne diffuse Un traitement topique suffit, sous forme de gouttes, ou, si elles ne peuvent pénétrer en raison d'une sténose inflammatoire du conduit auditif externe, par la mise en place d'une mèche imbibée d'une solution antibiotique et anti-inflammatoire.
- Otite externe virale Un traitement topique d'anti-inflammatoire et désinfectant suffit.
- Myringite bulleuse Percer les bulles avec une lancette soulage les douleurs immédiatement, tout au moins partiellement. Aucune anesthésie n'est nécessaire, seul l'épiderme étant incisé, et les fibres sensitives étant dans la lamina propria. Par la suite, un traitement topique d'anti- inflammatoire et désinfectant est nécessaire, sans oublier des antalgiques par voie orale.
- Zona otique Le traitement est symptomatique. La prescription d'un agent antiviral est recommandée par certains, mais son bénéfice n'a pas encore été démontré de façon indiscutable. Certains préconisent des corticostéroïdes. [voir 'nerf facial']
- Otite externe mycosique Un traitement topique par un agent antimycotique topique est suffisant.
Prévention iDes mesures préventives sont parfois nécessaires, comme éviter les traumatismes résultant de l'utilisation de coton-tiges, les bains avec des savons alcalins, et assécher l'oreille si elle est maintenue humide par le port d'appareils obstruant le conduit ou par une perforation laissant remonter l'humidité des voies aériennes supérieures. Le conduit est un milieu naturellement acide et sec. Dans certains cas, la prescription d'une solution d'acide acétique, le correction chirurgicale d'un méat ou d'un conduit auditif externe trop étroit, le fraisage d'exostoses [voir 'Exostoses'] ainsi que la fermeture d'une perforation de la membrane tympanique permettent de prévenir les récidives.
Les fOrmes particulières - Otite externe nécrosante ('maligne') en s'agit d'une otite externe à Pseudomonas chez un patient diabétique. Il y a risque d'ostéite de la base du crâne. Outre les douleurs et l'écoulement caractéristique, bleuté avec une odeur douceâtre, apparaissent des nécroses tissulaires. Les tissus du conduit sont oedèmatiés, cruentés, le cartilage ou l'os du conduit par place à nu. Un déficit des nerfs VII, V, IX, XII s'installe. Des mesures sont évidemment nécessaires avant de telles complications ! Le problème est donc de savoir à quel moment une otite banale chez un diabétique mérite d'être considérée comme une otite externe nécrosante. Il est raisonnable de considérer cette éventualité si la réponse au traitement topique habituel n'est pas bonne après quelques jours. Le risque de complications mortelles n'est pas nul et, naguère, seule une chirurgie de débridement des lésions était efficace. [chandler 19681 Actuellement, un traitement de ciprofloxacin
per os permet la guérison dans la plupart des cas. [strauss 1990 1
34 -Eczéma Le terme est large et couvre diverses formes de dermatite comme la dermatite atopique, la dematite seborrhéique, la dermatite de contact, le psoriasis, etc.. Les patients se plaignent de démangeaisons, parfois d'écoulements. Il faut éliminer les causes. Les corticostéroïdes en application topique sont parfois utiles.
Propriétés de migration de la peau du CAE
Le cytosquelette des kératinocytes tapissant la partie profonde du conduit auditif externe et la membrane tympanique est fait de protéines particulières, permettant une migration de la peau du fond du conduit vers 1'extérieur. Le conduit est donc une sorte de 'fontaine' à peau, emportant tout ce qui serait déposé au fond du conduit vers l'extérieur. fVennix elal 1996 1
Diagnostic di[férenliel des otalgie · eune otalgie peut être l'expression, outre d'une otite externe bactérienne, nécrosante ou virale, d'une otite moyenne aiguë, d'un syndrome algo-dysfonctionnel de l'articulation temporo- mandibulaire, d'une maladie de Horton, ou être une douleur référée d'une lésion pharyngée, tumeur ou abcès.
Conclusion Les otites externes sont fréquentes. Elles représentent un très vaste spectre de pathologies. Il s'agit souvent d'un problème bénin mais il faut détecter les rares cas pouvant présenter des complications majeures.
Tumeurs bé.nignes QU malign~ eElles sont rares. Elles se développent à partir des téguments du conduit ou de ses annexes (glandes), du cartilage ou de l'os sous-jacent, ou des structures voisines de l'oreille, la glande parotide par exemple.
Tumeur du conduit auditi[externe. Il s'agissait ici de l'extension d'une tumeur maligne de la partie profonde de la glande parotide.
Exostoses Elles représentent les tumeurs les plus fréquentes du conduit auditif externe. Elles surviennent volontiers chez les plongeurs. Elles sont bénignes. Elles peuvent entraîner des otites externes, par stagnation de sécrétions au fond du conduit et un déficit auditif de transmission lorsqu'elles obstruent complètement le conduit. Un traitement est alors nécessaire. Il est chirurgical.
35 Exostoses du conduit auditif externe. Elles sont 'pédiculées', comme celle de la paroi postérieure, ou ont une base d 'implantation plus large, comme celle développée, dans cet exemple, au niveau de la paroi antérieure.
Troumomm~s
cLes[raclltres longitudinales du rocher sont parfois visibles au toit du conduit auditif externe. (\ OU 'Or<IJIO <OOyonnoj iRarement, un coup sur la mandibule peut occasionner une fracture de l'os tympanal et
l'articulation temporo-mandibulaire peut faire saillie dans le conduit auditif externe.
Effraction de l'os tympanal. Chez cette patiente, une masse blanche est visible dans le conduit auditif externe, bouche fermée ; bouche ouverte, elle s'efface (flèches). Le Ct-scan confirme la lyse de 1'os temporal et l'effraction de 1'articulation temporo-mandibulaire dans le conduit.
Références
Chandler JR. Malignant externat otitis. Laryngoscope 1968; 78: 1257.
Kos MI, Cao-Nguyen MH, Guyot JPh. La prothèse BAHA™ : une alternative à la chirurgie de reconstruction fonctionnelle de l'oreille. Médecine et Hygiène 2002; 60: 1946-1953.
Strauss. Current therapy ofMEO. Otolaryngol HNS 1990; 102: 174.
Vennix PP et al. Epidermal differentiation in the human externat auditory meatus. Laryngoscope 1996; 106: 470.
36
-->
![ext[Oreille_Interne.pdf|./pdf/Oreille_Interne.pdf]]
<!-- Texte caché pour la recherche
VPBB VBPP VPB VPB
Vertige Postionel Positionnel Bénin Benin
Meniere Menière
AFFECTIONS DE LA COCHLEE
MaJfurmathms
iElles sont rares. La malformation de Mondini est la première décrite, au 18ème siècle déjà. Elle consiste en une malformation de la structure osseuse de la cochlée, par ailleurs plus courte que normalement. D'autres malformations concernent la cochlée et le vestibule, allant de l'absence du seul canal semi-circulaire latéral à l'absence des 3 canaux et de l'utricule ou même de toute l'oreille interne, comme dans l'aplasie de Michel. (Guyot et al 19871 D'autres concernent les aqueducs cochléaire et/ou vestibulaire. Elles sont reconnaissables sur un CT- Scan. Les malformations qui ne touchent que le labyrinthe membraneux de 1~ cochlée ne sont pas visibles en radiologie et ne sont diagnostiquées qu'à l'examen post-mortem.
CHARGE association. Dans cette constellations d'anomalies, touchant les yeux, le cœur, le nez, le cerveau et les organes génitaux, 1'oreille interne est ma/formée. La cochlée est celle d'un Mondini (C); le vestibule (V) ne contient qu 'un saccule (s); les canaux sont absents; on reconnaît la caisse du tympan (T) avec 1'étrier (e) et le nerffacial (j), la mastoïde (M) et le conduit interne
Inflammation
Labvrinthite
en s'agit d'une inflammation ou infection de l'oreille interne, d'origine virale ou bactérienne. Elle est la complication d'une otite moyenne, par diffusion de toxines ou d'agents viraux ou bactériens via la fenêtre ronde ou ovale ou une fistule entre 1' oreille moyenne et interne, par exemple avec un cholestéatome qui érode le labyrinthe osseux. Elle peut aussi être la complication d'une méningite, la diffusion se faisant via les nerfs cochléaire et vestibulaire. Elle se manifeste par une perte rapide de l'audition et de la fonction vestibulaire. 'Comme complication d'une méningite, elle est souvent bilatérale et peut entraîner rapidement une ossification du labyrinthe, rendant difficile la réhabilitation de la surdité par un implant COChléaire. [voir 'Implants cochléaires')
Des labyrinthites se développent aussi dans le cadre d'affections comme la granulomatose de Wegener, la péri-arthérite noueuse, l'artérite temporale, la polychondrite récidivante, le syndrome de Cogan.
Traitement Il est médicamenteux, avec des corticostéroïdes, sans toujours obtenir des résultats. Pour pa lier a la surdité séquellaire, il faut alors recourir à des moyens de réhabilitation, une prothèse acoustique ou un implant cochléaire.
53 Fractures du rocher eL'oreille interne peut être ouverte en cas de fracture du rocher, en particulier de fracture tranSVerSe. [voir chapitre 5 'Fractures du rocher']
Traumatismes acoustiques eon désigne sous ce terme les pertes d'audition dues à l'exposition à des bruits de forte intensité. Il s'applique 1) à une perte d'audition consécutive à un bruit violent et bref, un 'transie nt', comme un coup de fusil ou l'explosion d'un pétard, 2) à une perte résultant de l'exposition prolongée à un bruit d'intensité moindre, ou 3) à une perte due à un choc sur 1' oreille ou sur la tête.
Dans tous les cas, les lésions de l'oreille interne sont identiques. Elles concernent essentiellement les cellules ciliées de l'organe de Corti. iLa localisation des lésions est fonction des caractéristiques fréquentielles du bruit causant le traumatisme : les bruits de fréquence basse entraînent des lésions de l'apex de la cochlée et un déficit auditif dans les fréquences basses, ceux de haute fréquence des lésions de la base et, donc, un déficit auditif dans les fréquences aiguës. [Guyot 19881 Il apparaît toutefois que la zone qui capte les fréquences autour de 4000 Hz est particulièrement fragile, raison pour laquelle l'audiogramme montre souvent un déficit à ces fréquences-là. eQuant à la gravité des lésions, elle est proportionnelle à l'intensité du bruit causal. Elles apparaissent dès 120 dB, tout d'abord comme une déplétion des neurotransmetteurs des cellules ciliées. Puis, apparaît un oedème des terminaisons nerveuses au contact des cellules ciliées, puis des lésions des racines des cils des cellules ciliées. La perte auditive est encore réversible, respectivement en quelques heures, jours ou semaines. Enfin, à plus forte intensité, les cellules ciliées sont détruites et apparaissent des lésions vasculaires, membranaires, etc. Le déficit auditif est alors irréversible. [Lim & Melnick 1971 •
Spoendlin 1971, Tilney et all982]
.. .
. .. . .
..
.. .. .
.
..
v
'
'
Traumatisme acoustique par transie nt. Cinq jours auparavant, un pétard a explosé près de l'oreille gauche de ce malade. JI a ressenti une douleur, vite passée. Il se plaint maintenant d'un acouphène à gauche. Le tympan est d'aspect normal. Le Weber est non latéralisé, le Rinne positif.
"'
e.tu •n
u
.
'"
eLes traumatismes acoustiques dus à une exposition prolongée au bruit sont plus difficiles à reconnaître que ceux résultant d'un transient. En plus de l'intensité du bruit auquel le sujet est exposé, plusieurs facteurs influencent la perte auditive, comme la durée d'exposition, l'âge du sujet, la durée et la fréquence des périodes de repos dans le silence, l'existence de troubles métaboliques, [Axelsson & Linds ren 19851 l'usage de médicaments, de drogues ou de tabac, l'exposition simultanée à d'autres facteurs ototoxiques, comme des vapeurs, etc. [Pemon et al 1977 • Gannon et al 1979 1
Enfin, existent des facteurs raciaux et des différences de sensibilité individuelles.
54 1
Malgré le manque d'informations prectses concernant les risques liés à une exposition chronique au bruit, des règlements ou des lois limitent le niveau de bruit sonore sur les places de travail et dans les lieux de divertissements, les dancings et les sites de concerts en plein air. En Suisse, l'intensité admise sur les lieux de travail est de 85 dB par journée de 8 heures. Pour chaque tranche de 3 dB supplémentaires, la durée d'exposition est réduite de moitié, par exemple 88 dB pendant 4 heures, 91 dB pendant 2, 94 dB pendant 1. Dans les lieux de divertissements, l'intensité ne doit pas être supérieure à 93 dB mais une tolérance de 100 dB est admise exceptionnellement, à condition que le public soit averti et que des moyens de protection auriculaire soient à disposition.
La musique: un facteur de surdité?
Pour certains auteurs, l'intensité sonore d'orchestres symphoniques entraînent des lésions de l'oreille interne et les musiciens souffrent de déficit auditif, en particulier ceux jouant des percussions et des cuivres. fWesmrore & Eversden 19811 D'autres ne trouvent aucune dijférence d'audition entre musiciens et non-musiciens de même âge, {Johnson " " 1 19861 d'autres pour certains sous-groupes de musiciens, ceux placés dans 1'orchestre devant les percussions et les cuivres. {Giger et coll 2001/ C erlatns · auteur rappor 1 ent une perte d' au d" tl ton · c h ez 1 es Jeunes muszczens ue · · · .J rock'n roll, 1801 "'" " ' of 19761 d'autres montrent qu 'ils sont moins gravement atteints que ceux
1 d ' ore h estres r,e mustque . c l asstque . . t fllnbinoo·tt:: •• coll 1981/ L'. ~::coule .{ d e 1 a muszque · avec un b a l a d eur (''Walkman'~ est aussi souvent jugée dangereuse pour l'audition. Or, une étude de la SUVA
n'a pas permis de démontrer d'effet néfaste lié à l'utilisation des baladeurs. [Felchltn & Hohmann
1996
1
Les traitements eToutes sortes de traitement ont été préconisés, des vasodilatateurs, des macromolécules, des corticostéroïdes, des composés polyvitaminés, mais aucun n'a jamais fait la preuve de son efficacité. Malgré cela, beaucoup considèrent raisonnable de prescrire un traitement le plus précocement possible !
Le diagnostic différentiel Comme dans toutes atteintes auditives unilatérales, une atteinte rétrocochléaire fait partie du diagnostic différentiel. [voir "Neurinome de t' acoustique']
Le bruit et les gênes qu'il engendre •..
Les gens se plaignent volontiers du bruit de l'environnement, du trafic routier, des aéroports, des cafés de ·quartiers, et pour certains vivant à la campagne, des bruits de la ferme ou des cloches des vaches. Dans la plupart des cas, 1'intensité de ces bruits est bien insuffisante pour représenter un risque pour 1'audition ! La gêne qu 'ils engendrent est certainement influencée par l'état de stress, de fatigue et, surtout, de tolérance des. sujets. En effet, le signifié du bruit influe beaucoup son acceptation ou son rejet. Par exemple, le maître tolère beaucoup mieux les aboiements de son chien que son voisin !
Tumeurs
1
Les tumeurs de la cochlée sont rarissimes. Il s'agit le plus souvent de neurinomes intra- labyrinthiques, tumeurs bénignes. Existent aussi des métastases intra-temporales de tumeurs malignes du sein, de la prostate, du rein, des os, des lymphomes, etc.
55 AFFECTIONS DU NERF FACIAL
Rappel d'anatomie
Le nerffacial est le nerf moteur de la face. Les neurones sont situés dans le noyau facial ipsilatéral du tronc cérébral. Le contrôle supra-nucléaire est bilatéral pour les fibres innervant le 113 supérieur du visage, uniquement controlatéral pour celles des 2/3 inférieurs du visage. Les axones périphériques cheminent dans le conduit auditif interne, font un coude vers l'arrière au niveau du ganglion géniculé puis cheminent dans l'aqueduc de Faloppejusqu'au trou stylo-mastoïdien. Sur ce trajet émerge une branche innervant le muscle de 1'étrier. Au-dessous du trou stylo-mastoïdien, le facial se divise en plusieurs branches pour innerver les muscles de la face.
En plus des fibres motrices, le nerf facial est fait de fibres neuro- végétatives, contrôlant la sécrétion des glandes salivaires et lacrymales, d'afférences gustatives, innervant les 2/3 antérieurs de la langue, et de fibres sensitives, pour la proprioception de la face, la sensibilité du conduit auditif externe et du méat auditif de la conque, la zone de Ramsay-Hunt, en association avec le X
Les fibres neuro-végétatives efférentes proviennent du noyau salivaire supérieur du tronc cérébral et forment le 'nerf intermédiaire ' accolé au nerf facial dans le conduit auditif interne. A la hauteur du ganglion géniculé, elles donnent naissance au grand nerf pétreux superficiel, qui rejoint les ganglions sphéno-palatin et lacrymal pour innerver la _ muqueuse nasale et les glandes lacrymales. Plus bas, elles donnent ':',,.;~:'::~';.'..,.,,.,.. ..,., ~ il naissance à la chorda tympani, qui rejoint le ganglion sous-maxillaire :~::::::::~,;:.:,:· 1! pour innerver les glandes salivaires sous-maxillaires et sublinguales. ! ! Quant à la glande parotide elle est innervée par une branche du _...._......,...__.:.........o .,,.,.., ••,., ... ,._, tympanique du IX. '
•&Mti:ITUt,..&IU
· EU*• t~~talll
Arllh!WIII:; ... _.II
-~~oll.lu•
A.................
Les fibres sensitives de la gustation ont leur neurones dans le ganglion géniculé et surtout dans le ganglion méatal. [Gacek 19981 Les axones périphériques participent à la chorda tympani et innervent les papilles gustatives des 213 antérieurs de la langue. Les axones centraux font partie du nerf intermédiaire et rejoignent le trpctus solitaire du tronc cérébral.
AQ'tqmr1 'lelfU.v
lloylu du f1bcaU tobtlrr'C
L--------l
r-I dt tC-vuJ .V) ..II<oe.ndolt ...... ~"rl
4
AfTérçncm gnmitim:
· propriooeplK>n ~muscles faciaux
(Gnps Grondneifpétreuxsuperjicitl; Cl: Chorda tympani)
94 En plus du ganglion géniculé (G), existe le 'ganglion méatal', avec un nombre variable de cellules ganglionnaires d'un sujet à l'autre, relais du ne1f intermédiaire, précisément de l'anastomose vestibulo-faciale, faite de sensitives de la cavité buccale et des glandes salivaire. Ce ganglion représenterait un réservoir de virus neurotropes latents venus de la cavité buccale et pouvant disséminer pour donner lieu à diverses manifestations o t oneuro 1 . [Gacek 1998; Gacek 1999} ogtques.
Investigation~
En cas d'atteinte faciale, il est utile de distinguer le type d'atteinte, une 'neurapraxie ', trouble fonctionnel lié à une atteinte de la myéline, une 'axonotmèse ', dégénérescence axonale, ou un 'neurotmèse ', section du nerf, ainsi que de localis~r le site de la lésion par un examen de la motricité du visage, une atteinte périphérique concernant les trois étages de la face, une atteinte centrale épargnant le tiers supérieur, une mesure du seuil du réflexe stapédien par impédancemétrie, un test de la lactymation (test de Schirmer), et une évaluation de la salivation par sialométrie.
Dans certaines affections des sérologies pour la borréliose, maladie de Lyme, et HIV sont nécessaires, tout comme un bilan radiologique.
MalfQrmation~
iDes anomalies de trajet existent, parfois isolées, plus souvent associees à d'autres malformations de l'oreille. Existent aussi des aplasies congénitales, parfois isolées, sans autres malformations. Le Ct scan et/ou l'JRM peuvent montrer le trajet aberrant ou l'absence de nerf.
Paralysie faciale 'a (rigore'
eLa paralysie idiopathique de Bell est la paralysie la plus fréquente. Bell décrit le nerf facial en 1833 et suspecte qu'il joue un rôle important dans les troubles moteurs de la face. [Green 1833 1 C'est Gowers qui proposera le terme de 'a frigore' pour ces paralysies qui surviennent après une 'coup de froid'. [Biakiston 18931 Par définition, l'étiologie n'est pas connue. Il pourrait s'agir d'une atteinte virale, circulatoire par un vasospasme, ou immunitaire. [saunders & Lippy 1959 1
L'hypothèse virale semble la plus probable.
Le diagnostic différentiel se pose avec un zona otique, une maladie de Lyme, une paralysie infectieuse dans le cadre d'un syndrome HIV, une complication d'une ota-mastoïdite ou d'une fracture du rocher. Il faut aussi penser à un neurinome du VII, un syndrome de Guillain-Barré, une lésion du tronc cérébral sur vasculite, une affection immunologique ou inflammatoire , comme une sclérose en plaques~. une sarcoïdose.
95 Traitement Des mesures prophylactiques sont nécessaires pour éviter des lésions cornéennes, l'œil restant sec et n'étant plus nettoyé par les mouvements de paupières. Certains auteurs préconisent une décompression chirurgicale du nerf du conduit auditif interne au trou stylo-mastoïdien lorsque les tests électrophysiologiques indiquent plus de 90% d'axonotmèse.
Une revue de 92 études prospectives et rétrospectives a montré que les corticostéroïdes, très souvent prescrits, 'pourraient' prévenir une dégénérescence, 'pourraient' prévenir une progression de hi paralysie, mais sans preuve absolue. [Stankiewicz 19871 Les agents antiviraux n'ont pas non plus démontré une efficacité certaine. [Furota 2001 1
Aff~~itm~ d'origio~ inf«tieus~
Zona otiquetv•ir 'Otil•extern•'l
Le virus herpès zoster en est la cause. Le pronostic est plus mauvais qu'en cas d'atteinte 'a frigore'. Existent encore des paralysies dans lesquelles les sérologies mettent en évidence un herpes simplex 1 et d'autres un herpes zoster, mais sans les manifestations cutanées caractéristiques de l'affection zostérienne dans le conduit auditif externe ou la zone de Ramsay Hunt. Les chances de récupération de ces formes de paralysies sont intermédiaires entre la forme 'a frigore' et le zona otique.
Type de paralysie
Paralysie de Bell
n
100
Herpes simplex 1
Herpes sine herpete
31
45
Herpes zoster
9
Récupération
Pronostic en fonction d'atteinte. {Furuta ZOO/]
du
type
Bonne
Intermédiaire
Intermédiaire
Mauvaise
Traitement Il est identique à celui de l'atteinte 'a frigore'.
Ium~urs bénigo~
Neurinome du facial
Présentation d'un cas Une jeune femme de 27 ans consulte pour une paralysie faciale des 3 étages de la face apparue en quelques jours, peut-être en quelques semaines, mais en moins d'un mois, assure-t-elle.
La paralysie touche les 3 étages de la face ; le test de Schirmer est normal ; le réflexe stapédien est absent ; le goût est altéré : la tumeur était dans le portion descendante du canal de Faloppe. Les manifestations se sont installées rapidement. La tumeur n'a aucune place pour se développer, les signes de compression apparaissent précocement. La patiente a été opérée. La tumeur a été réséquée. Le pièce manquante a été remplacée par une greffe nerveuse prélevée sur le nerfgrand auriculaire.
96 Présentation d'un cas Une femme de 54 ans consulte pour une paralysie faciale des 3 étages de la face d'installation très lente. A l'examen, il s'agit d'une discrète parésie qui touche les 3 étages de la face.
• Clldii:Nitalh ...
lluMnldcl~~~~:•
La paralysie touche les 3 étages de la face ; le test de Schirmer est ,. _.,.-. :;:.~':t'~':;.'::::::::.;·· anormal; le réflexe stapédien est absent; le goût est altéré: la tuff.!_eur est ' A.,.._.... ..,...... , '"'~' dans le conduit auditif interne et déborde dans la fosse moyenne et postérieure. Elle peut devenir très grande avant d'entraîner des manifèstations. ~:..:~z;;;~;,t,:~':;-~~:·~~~·1 Le Ct-scan montre la tumeur, 'en sablier', dans le conduit auditif interne et la fosse moyenne. La tumeur n'a pas grossi au coUI's des 10 dernières années. La patiente renonce a être opérée pour 1'instant.
Le neurinome du VII est rare. Les manifestations dépendent de la localisation. Le traitement est chirurgical.
Diverses autres atteintes peuvent concerner le nerf facial, comme les traumatismes par fracture du rocher, les traumatismes obstétricaux, les compressions par un cholestéatome, une neuro-fibromatose, une tumeur de la parotide. Il peut aussi être altéré au cours d'infections, en particulier au cours d'une otite externe nécrosante.
Références
Blakiston P. Gowers W, 1893. Paralysie 'a frigore' . In : A manual ofdiseases of the nervous system. vol I, Philadelphia. Furuta Y, Ohtani F, Chida E, Mesuda Y, Fukuda S, Inuyama Y. Herpes simplex virus type 1 reactivation and antiviral therapy in patients with acute peripheral facial paisy. Auris Nasus Larynx 2001 ; 28 (Suppl) : s13-sl7.
Gacek RR. On the duality of the facial nerve ganglion. Laryngoscope 1998; 108: 1077-1086.
Gacek RR. Pathology of facial and vestibular neuronitis. Am J Otolaryngol 1999; 20: 202-21 O.
Green O. C Bell, 1833. In : The nervous system of the human body. Washington, D.C.
Saunders WH, Lippy WH. Sudden deafness and Bell's paisy: a common cause. Ann Otol Rhinol Laryngol 1959; 68: 830- 837.
Stankiewicz JA. A review of the published data on steroids and idiopathie facial paralysis. Otolaryngol Head Neck Surg 1987 ; 97:481-486.
97
-->
![ext[Oreille_Moyenne.pdf|./pdf/Oreille_Moyenne.pdf]]
<!-- Texte caché pour la recherche
AFFECTIONS DE L'OREILLE MOYENNE
MalfurmatiQns
1
Le plus souvent, les malformations de l'oreille moyenne sont associées à des anomalies de l'oreille externe. !voir 'atrésie'J Toutefois, p~uvent exister des anomalies isolées, souvent asymptomatiques, comme un trajet aberrant du nerf facial, une déhiscence du golfe de la jugulaire ou de la carotide interne dans la caisse du tympan.
Déhiscence de la carotide interne dans la caisse du tvmpan. Ils 'agit d'une découverte fortuite. Le sujet ne se plaignait même pas d'un acouphène pulsatile.
AfkctiQns iutlammMoires QJJ in!eS!tiçus~ existe plusieurs formes d'otites, les plus fréquentes étant l'otite moyenne aiguë (OMA) et l'otite séro-muqueuse (OSM), qui affectent surtout les enfants, 2/3 d'entre eux souffrant d'un ou plusieurs épisodes avant l'âge de 3 ans. (Teele et " 119891 Existe un second pic, aux environs de 7 ans, puis la fréquence des épisodes d'otite diminue. Ainsi, ces formes d'otite sont plus rares chez 1' adulte.
en
L'OMA est un empyème des espaces pneumatisés de ros temporal, et l'OSM un comblement de ces mêmes espaces par du liquide de viscosité variable. rschuknecht 19931 Le but et les modalité du traitement des deux entités sont différents. Dans l'OMA, le traitement vise à améliorer ltétat général du malade et éviter les complications; dans l'OSM, il vise à restaurer l'audition afin dt éviter un retard d'acquisition du langage et des problèmes scolaires. rchâtelain-Pauls & Guyot 199 7J
Otite movenne aiguë
Les symptômes de l'OMA sont un état fébrile, une otalgie et un déficit auditif. Souvent, l'OMA survient au décours d'une infection des voies respiratoires supérieures. En général, elle est unilatérale. Chez le petit enfant, elle peut se manifester par une irritabilité, des troubles gastro-intestinaux. Souvent, l'enfant tiraille le pavillon de l'oreille malade. L'état fébrile et/ou les douleurs manquent dans à peu près 1/3 des cas. !Hermann 1997 1
Le tympan est rouge, bombé, immobile à la manœuvre de Valsalva. Le relief du manche du marteau est effacé. L'otite peut entraîner une perforation du tympan. Du pus est alors visible dans le conduit auditif externe. Le Weber est latéralisé du côté atteint et le Rinne négatif.
Etiologie
Lrois gennes ies pltls rrequemment en cause son . e s reptocoque pneumoniae dans 35% des cas l'haemophilus influenzae dans 30% et moraxella catarrhalis dans 10%. (Berche et coll 1994 1 Chez l'enfant, l'incidence de l'haemophilus influenzae monte à 75% en cas d'OMA d'emblée
[;
37 associée à une conjonctivite. [Bodor 19821 Chez le nourrisson, d'autres pathogènes peuvent être incriminés, les pseudomonas aeruginosa, les staphylocoques ou les entérobactéries. [Narcy et colll 9911
Traitement Le traitement de l'OMA vise à améliorer l'état général, à diminuer les douleurs et, surtout, à éviter les complications. Il repose sur l'antibiothérapie. L'amoxicilline couvre les trois germes les plus fréquemment rencontrés et représente l'antibiotique de choix, mais il peut être inefficace chez les enfants gardés en collectivité ou ayant reçus plusieurs cures d'antibiotiques auparavant, les germes ayant développé une résistance aux pénicillines. JGehannoetcolll 9951
En cas d'haemophilus influenzae, il est conseillé de prescrire de l'amoxicilline avec acide clavulanique, ou une céphalosporine de deuxième ou de troisième génération ou encore de la clarithromycine. [Austin&Potsic 19961
Il est adéquat d'associer à l'antibiotique un traitement fébrifuge, anti-inflammatoire et antalgique. Certains ajoutent des gouttes nasales vaso-constrictrices afin de décongestionner les muqueuses de la trompe d'Eustache et de drainer l'empyème, mais l'efficacité de ce traitement n'est pas démontrée. JGrundfas• 1994 1
Lorsque la réponse au traitement n'est pas satisfaisante dans les 48 heures, une paracentèse est justifiée. Elle permet de soulager les douleurs, d'obtenir un prélèvement bactériologique pour adapter l'antibiothérapie et, peut être, d'éviter des complications.
Otite moyenne aiguë. La membrane est rouge, bombée (à gauche). Vu la non réponse au traitement, une paracentèse a été faite : du pus blanc laiteux s'écoule (à droite).
Complications La plus fréquente est la mastoi'dite aiguë. Elle consiste en un empyème de la mastoïde, suite à une obstruction de l'additus, et survient au décours d'une OMA, éventuellement après disparition des signes d'otite au niveau du tympan. Il y a tuméfaction de la région rétro- auriculaire, consécutive à une collection purulente sous-périostée, et décollement du pavillon de l'oreille, repoussé vers l'avant. Un CT-scan confirme l'épanchement purulent de la mastoïde.
Le traitement est chirurgical. Il consiste à éradiquer les tissus malades, en évidant la mastoïde, et à restaurer une pneumatisation satisfaisante des cavités de l'os temporal, en reperméabilisant 1' additus.
Une affaire de définition
L 'OMA n'est pas un empyème limité à la caisse du tympan, mais bien de tous les espaces pneumatisés de 1'os temporal. Dès lors, on devrait parler 'd' oto-mastoidite' aiguë pour chaque OMA. Mais dans le jargon des ORL, le terme de mastoïdite désigne la complication de l 'OMA qui consiste en l'exentération de pus dans l 'espace sous-périosté de la mastoïde.
Les autres complications sont des infections de voisinage, méningite, abcès cérébral, sous- ou extra-durai, thrombophlébite du sinus latéral, paralysie faciale, labyrinthite, abcès cervical, dit 'de Bezold' . Si le processus infectieux dissémine à la pointe du rocher, on parle de
38 pétrosite, qui se manifeste par un syndrome de Gradenigo fait de céphalées, surdité, vertige et parésie des nerfs V et VI. Le traitement est chirurgical par pétrosectomie subtotale, un évidemment de 1' os pétreux.
Otite moyenne aiguë. Au début, l'infection concerne tous les espaces pneuma- tisés de l'os tem oral ...
... au décours, elle peut Le processus infectieux être confinée à la mastoïde peut disséminer, entraîner qui ne se draine plus. On une labyrinthite ...
arle de 'mastoïdite '.
.. . une paralysie faciale, une méningite otogène, un abcès cérébral ou cervical, une étrosite.
Forme particulière QuelqUeS ~nfantS SOUffrent de plUS de 4 épisodeS par année OU plUS de 3 en 6 moiS. [Teele el al
1989
]
Les anglo-saxons parlent 'd'otitis prone children'. Leur prise en charge est difficile. Beaucoup de ces enfants gardent un épanchement rétro-tympanique entre les épisodes infectieux. Deux approches thérapeutiques sont possibles, une antibiothérapie prophylactique au long cours 19941 1990 [Giebink OU la pOSe de drainS trans-tympaniqUeS, aVeC OU SanS adénOÏdectomie. [Paradise et al ] Cette mesure ne modifie pas le cours de la maladie, mais au moins, le pus de 1' otite s'écoule par le drain et l'audition reste bonne !
Otite séro-muqueuse
Présentation d'un cas Il s'agit d'un garçon de 4 ans dont la mère raconte qu'il est souvent enrhumé, que le nez coule, qu'il renifle et qu'il ronfle la nuit. Elle n'a pas nettement noté de déficit auditif mais rapporte qu'il n'entend que ce qui l'intéresse. A l'examen, le garçon a la bouche ouverte. Les ailes du nez sont écartées. Les yeux sont humides. Les amygdales sont discrètement hypertrophiées. Il n'est pas possible de voir le nasopharynx, l'examen déclenchant un réflexe nauséeux.
"
Il
JI
Il
Il
Il
Il
Il
Il
Il
··
~
...
Faciès adénoidien. Les yeux sont brillants, humides, exorbitants, la bouche est ouverte, les ailes du nez écartées.
Audiogramme tonal. Il y a un déficit auditif de transmission bilatéral.
Otite moyenne séro-muqueuse. Le tympan est rétracté, discrètement inflammatoire : la vascularisation radiaire est visible. La flèche montre un niveau nv,'lrrJ,.n,,ruJul?
d' unt: hypertrophie des végétations adénoïdes et est habituellement bilatérale. La manifestation principale de l'OSM est une diminution de l'audition de 15 à 30 dB. Typiquement, les parents
T. •• ' ·
•• 4=: ' ~-!..'C ••
<V" ~·
,, • ... • n
'
'"' " " -'
p « • r.... • pal11'1:
tup un tc':)
39 rapportent que leur enfant n'entend 'que ce qui les intéresse'. Le tympan est mat et rétracté, sans signe inflammatoire aigu. La courte apophyse et le manche du marteau font saillie. Des niveaux hydro-aériques dans la caisse du tympan peuvent être décelés par transparence. Le tympanogramme est plat, évocateur de la présence de liquide dans l'oreille moyenne.
L'OSM est rare chez l'adulte, et il faut se méfier d'une lésion du nasopharynx, par exemple un carcinome indifférencié.
Traitement Le traitement vise à restaurer l'audition. Il consiste en des anti-inflammatoires et des gouttes nasales vasoconstrictrices, pour drainer les liquides de 1' oreille moyenne, et en cas de non réponse au traitement conservateur, en une paracentèse et mise en place d'un drain trans- tympanique. [Bettex er coll 19911 iA l'ouverture du tympan, le liquide est soit séreux, soit très épais, collant. Plutôt que 'd'otite muqueuse', on utilise alors le terme anglais de 'glue ear'.
Drain trans-tympanique. Il s'agit d'un drain plaqué d'or; toutes sortes d'autres types de drains existent.
Otite séreuse, otite muqueuse
La pathogenèse de l'OSM reste mal connue. Chez l 'animal, l 'obstruction de la trompe d'Eustache conduit à une otite séreuse. Alors pourquoi ce liquide gluant chez les enfants ? Classiquement, tous les problèmes de 1'oreille moyenne sont attribués à un déficit d'ouverture de la trompe d'Eustache, et certains parlent de 'catarrhe tubaire '. Mais la trompe, courte chez l'enfant, pourrait, au contraire, rester trop ouverte. Et voici ce qui se passe: l'enfant renifle ; toutes les sécrétions s'accumulent dans le nasopharynx ; la pression de 1'oreille moyenne devient négative, rétractant les membranes tympaniques. Mais celle-ci sont élastiques : elles reprennent leur position normale, et ce faisant, pompent les sécrétions du nasopharynx dans l'oreille!
eun délai de 3 mois avant un traitement chirurgical est raisonnable puisque l'OSM se résout souvent spontanément ou par un traitement conservateur. Une adénoïdectomie seule ne semble pas permettre l'éradication d'une OSM. [Austin&Porsic 19961 Elle reste toutefois indiquée pour corriger un syndrome adénoïdien avec obstruction nasale, ronflements nocturnes et rhinites à répétition. [Châtelain·Pauls & Guyot 1997]
Une frontière qui tombe?
La distinction entre OMA et OSM est utile sur le plan didactique. Elle n 'est pas aussi nette sur le plan biologique. Des el!fants souffrant d 'OSM, 84% ont souffert d 'au moins un épisode d'OMA. [Atho ., att 9951 Les enfants avec OSM f ont plus d'OMA que ceux dont l'oreille est saine. {Stangerup & Tos 19851 Une OSM est la séquelle d 'une OMA dans 5 à 10% des cas. fRipley-Petzoldt 19881
Dans le liquide de l'OSM, on trouve l'existence de lysats bactériens dans 33% des cas, fKonnaet al /985] d d . d BO% [Ripley-Petzoldt /988] • • d es en otoxmes ans o, et meme, pour certams auteurs, es agents
bactériens dans près de la moitié des cultures. [Fmnçois pas stérile, comme on le pensait. rs;,ala 19561
19971
L'épanchement de l'OSM n'est donc
1
L'affaire Cantekin
Les otites moyennes aiguës ou séro-muqueuses sont très fréquentes chez l'enfant, mais restent l'objet de multiples controverses liées au fait que les deux entités ne sont pas si distinctes qu'il ny paraît, au manque de définition précise des 2 entités et à l'absence de critères diagnostiques bien définis. Un prélèvement bactériologique, qui pourrait apporter des éléments pour déterminer si une antibiothérapie est nécessaire, est difficile puisqu'il nécessite
40
-->
![ext[oreillons.pdf|./pdf/oreillons.pdf]] <!-- Texte caché pour la recherche Mumps occurs worldwide, but its incidence has declined dramatically because of the mumps compo nent of the MMR vaccine. Following the decrease in the uptake of the MMR immunisation in the late 1990s, there has been a rise in unimmunised children and unvaccinated young adults. Mumps usually occurs in the winter and spring months. It is spread by droplet infection to the respiratory tract where the virus repli cates within epithelial cells. The virus gains access to the parotid glands before further dissemination to other tissues. Clinical features The incubation period is 15–24 days. Onset of the illness is with fever, malaise and parotitis, but in up to 30% of cases, the infection is subclinical. Only one side may be swollen initially, but bilateral involvement usually occurs over the next few days. The parotitis is uncomfortable and children may complain of earache or pain on eating or drinking. Examination of the parotid duct may show redness and swelling. Occa sionally, parotid swelling may be absent. The fever usually disappears within 3–4 days. Plasma amylase levels are often elevated and, when associated with abdominal pain, may be evidence of pancreatic involve ment. Infectivity is for up to 7 days after the onset of parotid swelling. The illness is generally mild and self limiting. Although hearing loss can follow mumps, it is usually unilateral and transient. - Viral meningitis and encephalitis Lymphocytes are seen in the CSF in about 50%, menin geal signs are only seen in 10%, and encephalitis in about 1 in 5000. The common clinical features are headache, photophobia, vomiting and neck stiffness. Orchitis This is the most feared complication, although it is uncommon in prepubertal males. When it does occur, it is usually unilateral. Although there is some evidence of a reduction in sperm count, infertility is actually extremely unusual. Rarely, oophoritis, mastitis and arthritis may occur. -->
undefine
@@background-color:DarkMagenta; !''ORL'' @@ <<list-links "[tag[ORL]sort[title]]">>
undefine
undefine
@@background-color:LightGray; !''Osseux'' @@ <<list-links "[tag[Osseux.nucl]sort[title]]">>
!!Généralités
*L’''Osteogenesis imperfecta'', ou ''maladie des os de verre'', est une ''maladie génétique rare''. Elle affecte le squelette avec des ''risques de fractures augmentées'', des ''douleurs osseuses'' et un ''handicap''.
*Elle est due à une mutation dominante du collagène I, structure importante de la matrice osseuse.
*Il en existe plusieurs types différents. L’aspect radiologique est caractérisé par une ''transparence'' ''excessive'' des os ainsi que des ''déformations des diaphyses.''
*Attention, c'est une cause de confusion pour les suspcicions de maltraitance.
*Elle est souvent associée à des ''[[sclères bleues|blue_sclera.jpg]]'' au niveau des yeux.
{{osteogenesis_imperfecta_rx_deformations.jpg}}
undefine
!!Définition
*L’ostéomalacie est une maladie osseuse généralisée avec ''défaut de minéralisation de la matrice osseuse''. L’accumulation d’ostéoïde non minéralisé induit une ''fragilité osseuse''.
*L’ostéomalacie implique que cette pathologie survient après la fermeture des plaques épiphysaires, donc ''chez l’adulte''. Chez l’enfant cette pathologie induira le rachitisme
*__Rappel:__ Dans l’Ostéoporose, la trame osseuse est diminuée mais la minéralisation et le labo sont normaux. Dans l’Ostéomalacie les trois sont pathologiques.
*Un ''déficit en vitamine D'' est la cause la plus fréquente. La source de vitamine D est ''un peu l’alimentation'' et ''beaucoup la synthèse par UVB'', dont les rayons ne traversent pas les fenêtres.
*__Rappel:__ La vitamine D3 absorbée par la peau ou l’intestin (cholécalciférol) est d’abord transformée par le foie en 25-D3 (calcidiol) puis par le rein en 1,25-D3 (calcitriol = forme active)
*__Rappel:__ La vitamine D3 induit une réabsorption de Calcium et Phosphate par l’intestin. Un déficit entrainera une hypocalcémie et hypophosphatémie, ce qui déclenchera une élévation de la PTH pour tenter de compenser (hyperparathyroïdie secondaire).
{{osteomalacie_schema.jpg}}
!!Etiologie
*''Carences en vitamine D''
*Manque d’exposition ''au soleil''
*Manque d’apport ''alimentaire''
*Manque d’absorption ou d’assimilation de la vitamine D (''maladie coeliaque'')
*Défaut de conversion hépatique en 25-D3, suit à une ''maladie hépatique'' ou des anticonvulsivants (phénobarbital, phénytoïne, carbamazépine)
*Défaut de conversion rénale en 1,25-D3 suit à une ''insuffisance rénale chronique'' (ostéodystrophie rénale)
*Syndrome néphrotique avec perte de la protéine porteuse de la vitamine D
*''Défauts de minéralisations''
*Divers ''médicaments et toxiques'' peuvent inhiber la minéralisation, comme l’aluminium, le ''fluor'' et les ''biphoshonates''.
!!Clinique
*Le plus souvent le patient est ''asymptomatique''. Les symptômes les plus communs sont des ''douleurs diffuses'' à caractère mécanique, des ''fractures'' ainsi que des ''myalgies proximales'' avec ''faiblesse'' (difficile de se lever d’une chaise).
!!Investigations
''Laboratoire''
*On retrouvera un ''déficit de Vit.D'' (on dose la 25-D3 qui est un reflet du stock, pas la 1-25-D3), avec une ''hypocalcémie'' et ''hypophosphatémie'' ainsi qu’une ''augmentation de la PTH'' en réponse à l’hypocalcémie (hyperparathyroïdie secondaire).
''Radio''
*''Déminéralisation'' comme dans l’ostéoporose, avec possibles ''fractures'' ou ''pseudofractures'' (« stries de LOOSER », petites fractures perpendiculaires à la corticale, typiquement au col fémoral)
{{osteomalacie_rx_demineralisations.jpg}}
!!Traitement
*Si l’origine est un ''manque d’apport de vitamine D'', Donner un ''supplément en vit.D'' pendant quelques semaines, puis dose d'entretien
*Dans le cas d’un ''défaut d’hydroxylation'' par les enzymes il faut donner directement des suppléments ''en calcitriol''.
*Dans le cas d’une ''origine médicamenteuse'', il faut simplement ''Stopper le médicament'' incriminé.
undefine
undefine
!!Définition *L’ostéomyélite est une ''infection de l’os'', de la moelle osseuse ou du périoste. *La transmission est d’origine principalement ''hématogène'', mais elle peut aussi venir d’une ''inoculation directe''. *Les germes les plus fréquents sont le ''s.aureus'' et les grams-. *L’ostéomyélite ''aiguë'' est une ''urgence médico-chirurgicale'' ! qui peut se compliquer d’un ''sepsis''. *L’ostéomyélite ''chronique'' est souvent due à la présence d’un ''séquestre osseux nécrotique''. *Les ''facteurs de risques'' principaux sont le ''diabète'', le ''déficit neurologique'' et le ''IAMI''. En gros le patient ne sent pas qu’il se blesse. !!Clinique *le patient aura des ''douleurs osseuses spontanées'' ainsi qu’à la ''percussion''. Plus tard la zone deviendra ''rouge'' et ''gonflée''. Un enfant ne posera typiquement plus le pied par terre. *En plus de ça le patient aura souvent de la ''fièvre''. Attention chez les patients avec insuffisance vasculaire et neuropathie (diabétiques) qui peuvent ne pas présenter de douleurs ni signes inflammatoires. !!Investigation ''Labo'' *Faire une ''FSC'' (leucocytose et déviation gauche) et une ''VS, CRP'' (augmentés). *Faire aussi impérativement une ''culture'' via une ''aspiration'' ou une ''biopsie'' osseuse, ainsi que des ''hémocultures''. ''Imagerie'' *L'''IRM'' est l’imagerie de choix pour visualiser une ostéomyélite. Hypointense en T1, Hyperintense en T2 (= [[œdème de l’os spongieux|osteomyelite_irm_tibia.jpg]]) *la ''RX'' conventionnelle ne montre des signes d’ostéomyélites que ''après 10j'' environ. On peut voir une erosion corticale ([[aspect comme mangé par des mites|osteomyelite_rx_orteil.jpg]]) et une réaction périostée. !!Traitement *Après les prélèvements seulement, commencer immédiatement une ''ATB-therapie IV empirique'' à grand coup de cephalosporines ou amoxiclav, et rajouter la vancomycine si suspicion de MRSA. Adapter dès réception de l’Antibiogramme et traiter durant 6-8 semaines. *Considérer aussi l’ajout d’un ''débridement chirurgical'' si c’est bien atteint ou si un abcès s’est formé.
undefine
undefine
!!Définitions
*l’ostéonécrose ''aseptique'' (ou nécrose vasculaire / ostéochondrite disséquante) correspond à un ''infarcissement osseux''. Elle touche le plus souvent la ''tête fémorale''. Non traitée, elle amène à une destruction articulaire.
!!Etiologie
*L’Ostéonécrose aseptique ''primaire'' est d’origine ''idiopathique''.
*L’Ostéonécrose aseptique ''secondaire'' peut être causée par divers facteurs comme les ''traumatismes'', les ''corticoïdes'', le VIH ou encore la radiothérapie locale.
!!Clinique
*D’abord ''asymptomatique'', la pathologie se déclare par de ''vives douleurs mécaniques'', aggravées par la charge et le mouvement, calmées par le repos. La douleur irradie au niveau antéro-médial de la cuisse.
!!Investigations
!!!''Imagerie''
*''L’IRM'' est l’''examen de choix'' pour observer cette pathologie. Elle peut aussi être observée en Rx mais pas toujours.
{{osteonecrose_aseptique_rx.jpg}}
!!Traitement
*D’abord le ''traitement conservateur'' avec des ''AINS'', le ''repos'' mais ''éviter la sédentarité'', ainsi que la ''décharge'' de l’articulation.
*Quand la maladie devient trop avancée on passe au ''traitement chirurgical'' avec un ''remplacement de l’articulation''.
!!Maladie d’Osgood-Schlatter
*Il s’agit d’une @@background-color:Orange;affection de la ''tubérosité tibiale'' chez l’enfant ''sportif''@@. La tubérosité tibiale est ''douloureuse'' et ''gonflée''. C’est une des affections les plus ''fréquentes'' du genou chez l’adolescent.
*Il s'agit de micro-traumatismes donc souvent il n'y a pas d'anamnèse de trauma à la présentation.
*Le ''Diagnostic est clinique'', pas besoin de faire RX et IRM, bien qu’on puisse y voir une ''fragmentation de la tubérosité tibiale''.
*Le ''Traitement'' repose sur l’arrêt ''du sport'', une ''antalgie simple (AINS'' et ''Paracetamol'') et parfois une ''physiothérapie''. Le pronostic est excellent.
{{osgood_schlatter_genou_clinique_rx.jpg}}
!!Legg-Perthes-Calvé
*La maladie de Legg-Perthes-Calvé (Ou __Ostéochondrite primitive de la hanche__) correspond à une ''__nécrose aseptique du noyaux épiphysaire proximal du fémur__''. Elle atteint particulièrement les ''garçons entre 2 et 10ans''.
*La ''clinique'' sera un enfant avec une ''boiterie'' ainsi que des ''douleurs'' à cette articulation. On peut même avoir une ''a__symétrie de longueur des jambes__''.
*Le ''diagnostic'' se fait par ''imagerie'' avec ''__Rx__'' voir ''IRM'' de la hanche.
*Le ''traitement'' peut être ''non-chirurgical'' (physiothérapie) ou ''chirurgical'' (ostéotomie)
*L'__Ostréochondrite disséquante__: pareil mais touche d'autres articulations (condyles, astragale,...)
{{legg_perthes_irm.jpg}}
undefine
!!Définition
*L’ostéoporose est une maladie systémique avec ''réduction de la masse osseuse'' ainsi que ''trouble de la microarchitecture''.
*Les patients atteints sont à ''risque de fracture'' plus élevé.
*Les ''femmes'' sont le plus touchées, avec atteinte de ''1/3 des f>60ans'' et jusqu’à >''2/3 des f>80ans''.
*Selon la définition de ''Densitométrie'' (DXA= Rayons X à double énergie) ou ''__T-SCORE__'', l’ostéopénie est comprise ''entre -1 et -2.5 ds'' (déviation standard) tandis que l’ostéoporose égale à < -''2.5 ds''
*On parle d'''__Ostéoporose sévère__'' si on a un T-score < -2.5 couplé à des fractures.
*__Rappel:__ contrairement à l’ostéomalacie, la qualité de la matrice osseuse reste normale dans l’ostéoporose
!!Etiologie
*Dans la majorité des cas c’est une ''ostéoporose primaire'' dont l’origine est soit ''post-ménopause''. soit ''sénile''.
*Dans l’ostéoporose ''__secondaire__'' on retrouve:
**l’usage de ''corticostéroïdes''
**la ''maladie de Cushing''
**l’hyperparathyroïdisme et l'hyperthyroïdie
**la ''malabsorption''
** l’immobilisation ''prolongée''.
!!Clinique
*Le plus souvent ''asymptomatique''. Dès le moment où il y a des ''fractures'' on peut trouver des ''douleurs'' aux endroits atteints, surtout ''dans le dos''.
*Les fractures se situent surtout au niveau du ''col du fémur'', des ''vertèbres'', du ''poignet'' et de l’humérus.
*Les ''fractures de fragilité'' sont celles qui peuvent survenir sur une simple ''chute de sa hauteur'', voir lorsque que patient se met debout.
*En cas de fractures de la colonne vertébrale, le patient peut présenter une perte de hauteur.
{{osteoporose_fractures_schema.jpg}}
!!Investigations
*Au ''Labo'' on peut doser le ''Calcium'', le ''Phosphate'', la ''Vit.D'', et la ''PTHi''.
*Le diagnostic passe par un ''bilan radiologique''. Si il démontre une fracture ou qu’il y a des facteurs de risques d’ostéoporose, il faut faire une ''DXA'' qui l’examen ''diagnostic''.
*Les ''Indications au DXA'' sont soit un ''patient de >65 ans'' soit un patient plus jeune (50-65ans) avec ''facteurs de risque''.
*Les ''Facteurs de Risque'' sont nombreux, les plus importants étant une ''anamnèse familiale'', la ''sédentarité'', les ''corticoïdes'', le ''tabac et alcool'', la ''ménaupose précoce (<45ans''), les ''fractures de fragilité'' et un ''faible poids (<60kg'')
{{osteoporose_dxa.jpg}}
!!Traitement
*Le ''traitement de première ligne'' comprend les ''biphosphonates'' (Zoledronate) ou le ''denosumab'' (inhibiteur RANK-L)
*On peut aussi donner du ''rPTH'' ou de la ''calcitonine''.
*Il faut aussi ''traiter les facteurs de risque''. Arrêter de tabac et l’alcool, faire de l’exercice, arrêter les médicaments.
*La ''femme post-ménopausée'' on peut donner des ''SERM'' (Sélective Estrogen Receptor Modulator, Raloxifen) Maximum 5ans, si elle vient d’être ménopausée mais ça augmente le ''risque de MTEV'' (maladie thromboembolique veineuse)
*Finalement il faut instaurer une ''supplémentation Calcium + Vit.D'' (Calcimagon D3)
undefine
undefine
![ext[otite_ped.pdf|./pdf/otite_ped.pdf]] <!-- Texte caché pour la recherche Acute infection of the middle ear (acute otitis media) 278 Most children will have at least one episode of acute otitis media (OM). This is most common at 6–12 months of age. Up to 20% will have three or more episodes. Infants and young children are prone to acute otitis media because their Eustachian tubes are short, hori zontal and function poorly. There is pain in the ear and fever. Every child with a fever must have their tympanic membranes examined (Fig. 16.2a–d). In acute otitis media, the tympanic membrane is seen to be bright red and bulging with loss of the normal light reflection (Fig. 16.2b). Occasionally, there is acute perforation of the eardrum with pus visible in the external canal. Pathogens include viruses, especially RSV and rhino virus, and bacteria including pneumococcus, non typeable H. influenzae and Moraxella catarrhalis. Serious complications are mastoiditis and meningitis, but are now uncommon. Pain should be treated with an analgesic such as paracetamol or ibuprofen. Regular analgesia is more effective than intermittent (as required) and may be needed for up to a week until the acute inflammation has resolved. Most cases of acute otitis media resolve spontaneously. Antibiotics margin ally shorten the duration of pain but have not been - Respiratory disorders (a) (b) (c) (d) Figure 16.2 Appearance of the eardrum. (a) Normal. (b) Acute otitis media. (c) Otitis media with effusion. (d) Grommet. (Courtesy of Mr N Shah & Mr N Tolley.) shown to reduce the risk of hearing loss (see Ch. 5). It is often useful to give the parents a prescription, but ask them to use it only if the child remains unwell after 2–3 days. Amoxicillin is widely used. Neither decon gestants nor antihistamines are beneficial. Recurrent ear infections can lead to otitis media with effusion (OME or glue ear or serous otitis media). Chil dren are asymptomatic apart from possible decreased hearing. The eardrum is seen to be dull and retracted, often with a fluid level visible (Fig. 16.2c). Confirmation of otitis media with effusion can be gained by a flat trace on tympanometry, in conjunction with evidence of a conductive loss on pure tone audiometry (possible if >4 years old), or reduced hearing on a distraction hearing test in younger children. Otitis media with effu sion is very common between the ages of 2 and 7 years, with peak incidence between 2.5 and 5 years. This condition usually resolves spontaneously. Cochrane reviews have shown no evidence of long term benefit from the use of antibiotics, steroids or decongestants. Otitis media with effusion is the most common cause of conductive hearing loss in children and can interfere with normal speech development and result in learning difficulties in school. In such children insertion of venti lation tubes (grommets, Fig. 16.2d) can be beneficial, but there is evidence, again from Cochrane reviews, that adenoidectomy can offer more long term benefit. It is believed that the adenoids can harbour organisms within biofilms that contribute to infection spreading up the Eustachian tubes. In addition, grossly hypertro phied adenoids may obstruct and affect the function of the Eustachian tubes, leading to poor ventilation of the middle ear and subsequent recurrent infections. In practice, children with recurrent URTIs and chronic glue ear that do not resolve with conservative measures undergo grommet insertion. If these problems recur - - Summary Acute otitis media • Can only be diagnosed by examining the tympanic membrane • Antibiotics marginally shorten the duration of pain but do not reduce hearing loss • If recurrent, may result in otitis media with effusion, which may cause speech and learning difficulties from hearing loss. after grommet extrusion, reinsertion of grommets with adjuvant adenoidectomy is usually advocated. -->
undefine
undefine
undefine
{{pancreatite_aigue.jpg}}
!!Définition
*la ''Pancératite Aigue'' correspond à une inflammation du pancréas, avec une activation des enzymes entraînant une ''autodestruction ''du parenchyme pancréatique.
*Il existe deux formes de pancréatites. La pancréatite aigue ''odemateuse ''(80% des cas, bonne réponse au traitement) et la pancréataite aigue ''nécrotico-hémorragique'' (20% des cas, sévère).
*Les ''Causes'' prinicpales sont:
**''Alcool''
**''Lithiases Biliaires''
**Infection virales (oreillons, Coxackie)
**Post-ERCP (10% des ERCP)
**Médicaments (sulfonamides, thoazides, furosémides, oestrogenes, trithérapie,...)
**Post-Opératoires
**Morsure de scorption
**Cancer pancréatique
**Trauma abdominal contondant
*les ''Complications'' peuvent être:
**''Nécrose pancréatique'' qui peut être stérile (se résoud) ou infectée (haut taux de mortalié, besoin de débridement et ATB)
**''Pseudokyste pancréatique'' qui peut apparaitre après 2-3 semaines (qui peut lui même se compliquer, on peut le drainer ou encore l'exciser)
**''Hémorragie pancréatique'' avec ecchymoses
**[[Syndrome de Détresse Respiratoire Aigue (SDRA)]]
**Ascite ou Epanchement pleural
**Cholangite si ça venait d'un calcul
**Abcès Pancréatique (rare, mais sévère)
!!Clinique
*''Douleur abdominale épigastrique'' qui peut parfois ''irradier dans le dos''.
*la douleur est souvent ''sévère'', et se trouve ''augmentée couché'' ainsi que ''augmentée avec les repas''.
*nausées, vomissements, anorexie
*''fièvre'', ''leucocytose''
*tachycardie, hypotension
!!Investigations
*''Amylase'' et ''Lipase'', avec la Lipase plus spécifique que l'Amylase
*Tests hépatiques
*Leucocytose
*[[Critères de Ranson|criteres_ranson.jpg]] pour le pronostic
*''CT-scan'' pour apprécier la pathologie
!!Traitement
''pancréatite odemateuse''
*''NPO''et ''Fluides IV'' avec ''Analgésiques''
*Sonde nasogastrique si N/V sévères
''pancréatite nécrotico-hémorragique''
*''Soins Intensifs''
*''NPO' ' et ''Fluides IV'' avec ''Analgésiques''
*''Tube naso-jéjunal'' pour la nutrition
*ATB prophylactique si plus de 30% de nécrose
{{pancreatite_chronique.jpg}}
!!Définition
*la ''Pancréatite Chronique ''correspond à une inflammation persistante du pancréas avec apparition de ''tissus fibreux'' remplaçant le parenchyme pancréatique. On trouve aussi des ''dilatations'' du conduit pancréatique ainsi que des ''sténoses''.
*A long terme il y a une destruction irréversible du pancréas, avec une atteinte des fonctions endocrines et exocrines du pancréas.
*les ''Causes'' sont
**''Pancréatite Alcoolique'' en majorité
**Pancréatite Héréditaire
**Pancréatite Idiopathique
**Pancréatite Auto-immune
*Les ''Complications ''sont:
**Diabète
**Pseudokystes (pas d'épithelium sur la paroi, peuvent se compliquer, on peut les drainer ou les exciser)
**Dilatation du canal pancréatique
**Obstruction et Sténose
**Malabsorption de B12
**Epanchement pleural, ascite, péricarde
**Cancer pancréatique
!!Clinique
*''douleur épigastrique récurrente'' aggravée par les repas et la boisson, avec souvent une ''irradiation dans le dos''.
*Perte de poids (malabsorption)
*Abus d'alcool
!!Investigations
*''CT-scan'' qui peut montrer des ''calcifications''. On peut aussi les voir à la Rx abdominale.
*L'Amylase et la Lipase ne sont PAS élevées dans la Pancréatite chronique
!!Traitement
*''Antalgiques''(risque de dépendance !)
*''NPO''
*''Enzymes Pancréatiques''
*''Bloqueurs H2'' (inhibe sécrétion acide gastrique)
*Insuline suivant besoin
*Abstinence alcoolique
*Repas fréquents, petits volumes, peu gras
*''Chirurgie'' pancréatique, avec réséctions et pancréatico-jujénostomies
{{pancreatite_chronique_rx.jpg}}
undefine
undefine
undefine
undefine
undefine
!! Généralités *La ''Paralysie Bulbaire'' est la conséquence d'une ''lésion des noyaux moteurs du tronc cerebral'', souvent bilatérale, touchant les nerfs IX, X, XI et XII. *La ''Clinique'' se compose de: **''Dysarthrie'' **''Dysphagie'' (difficulté à avaler, mâcher, régurgitations nasales) **''Appauvrissement des mimiques'' **Parfois ''paralysie des extrêmités'' *Les ''Causes'' principales sont **un ''AVC'' **une ''tumeur cérébrale'' **un ''odème cérébral'' **un ''Guillain-Barré'' **une [[Sclérose Latérale Amyotrophique]]
{{paralysie_faciale_schema.jpg}}
!! Définition
*La ''partie supérieure'' du visage est innervée de manière'' bilatérale'', tandis que la ''partie inférieure'' du visage est innervée de manière ''unilatérale'' par le ''cortex contralatéral''
*Une ''Paralysie faciale périphérique'' correspond donc à une ''lésion du nerf facial'' et donnera une ''paralysie de l'hémiface''.
*Une ''Parylasie faciale centrale '' en revanche impliquera une ''lésion corticale'' et donnera une ''paralysie du visage inférieur contralatéral'' car la partie supérieure reste invvervée par l'autre nerf facial.
!! Paralysie de Bell
*La ''Paralysie de Bell'' (ou paralysie faciale idiopathique, paralysie "a frigore*) est ''la plus fréquente'' des paralaysies faciales. C'est une paralyse faciale ''périphérique''.
*Elle est de cause ''Idiopathique'', mais possiblement associée à une ''infection HSV du Nerf Facial''. La paralysie est aussi souvent __''précedée d'une IVRS''__. Les ''patients diabétiques'' sont plus à risques.
*La pathologie '''s'installe en 1-3 jours'', donc putôt de manière aiguë.
*La ''Clinique'' correspond à une ''__paralysie de d'hémiface__'' affectée:
**rides effacées
**œil ouvert
**battement palpébral aboli
**sillon nasogénien effacé
**bouche est déviée du côté sain
* En plus de la fonction motrice peuvent être atteints l’i''nnervation parasympathique des glandes lacrymales et salivaires'', le ''goût'' sur les deux tiers antérieurs de la langue, la ''sensibilité'' du méat auditif externe et le'' muscle stapedius''.
*Le ''__diagnostic est clinique__'' surtout, __PAS BESOIN D'IRM __au début. Si la paralysie de se résoud pas on peut faire une ''EMG'' (la meilleure mesure du pronstic) ou un IRM à la recherche d'une cause secondaire
*Le ''traitement'' passe par des ''corticostéroïdes'', du ''valacyclovir'' et surtou une __''protection occulaire''__ (pansement, larmes artificielles). Le pronostic est généralement très bon
*Il faut être attentifs aux ''REDS FLAGS'' pouvant faire suspecter une cause centrale ou une paralysie périphérique secondaire.
!! REDS FLAGS
!!! ''Atteinte centrale''
*Une ''paralysie faciale centrale'' ne concernera ''que la partie inférieure du visage'', car la partie supérieure du visage est innervée par les deux cortex.
*Les ''causes ''principales peuvent être potentiellement des ''urgences'', ou des causes plus lentes:
**''AVC''
**''Infection'' (Lyme)
**''Maladie inflammatoire''
**''Tumeur''
*Cette pathologie nécessite un ''avis spécialisé''.
!!! ''Cause tumorale''
*Une paralysie faciale périphérique due à une ''tumeur'' aura surtout comme caractéristiques une ''apparition lente'' des symptômes.
*La tumeur peut se trouver n'importe où sur le trajet du nerf facial. Elle peut être par exemple un ''neurinome du VIII''
*Une ''IRM'' doit être réalisée dans ce cas.
!!! ''Maladie de Lyme''
*La ''Borreliose'' est à suspectée dans les régions endémiques. Elle évolue en ''trois phases:''
*# Jusqu'à 30j après la piqûre: un [[erythème migrans|borreliose_erytheme_migrans.jpg]] avec faitigue, grippe et arthralgies.
*#Après plusieurs semaines: méningite lymphocytaire, ''atteinte des nerfs crâniens'', neuropathies, radiculites, arthrites et troubles de la conduction cardiaque
*#Après plusieurs années: symptômes neurologiques diffus et graves, symptômes cutanés
!!! ''Autres Causes bactériennes et virales''
*La ''méningite'' peut donner une paralysie faciale périphérique
*Une ''Otite ou Mastoïdite'' aussi, dans un tel cas le patient aura des pertes d'audition et des douleurs de la région auriculaire
*un ''Zona otique'' (VZV) avec atteinte de la ''[[Zone de Ramsay-Hunt|ramsay_hunt_schema.jpg]]'' se présentera par des __vésicules douloureuses du contuit auditif__ et une baisse d'audition.
*Une paralysie faciale périphérique peut aussi être due à une ''primo-infection au VIH'' ou à une ''Neurosyphilis'' (syphilis tertiaire)
!!! ''Cause traumatique''
*Les causes traumatiques pouvant donner une paralysie faciale périphérique sont:
**''causes iatrogènes'' (chirurgie)
**''Fractures du rocher''
{{paralysie_faciale_algorithme.jpg}}
undefine
undefine
{{parasitoses.jpg}}
!!Cryptosporidose
*//Cryptosporidium spp.// , un protozoaire transmis par voie fécal-oral
*Le patient présente des diarrhées aqueuses
*Diagnostic par examen des selles
*Traitement symptomatique
!!Amibiase
*//Entamoeba histolytica//, un protozoaire transmis par voie fécal-oral ainsi que sexuelle
*Le patient présente des diarrhées sanglantes, ténèsme et parfois abcès hépatique
*Diagnostic par examen des selles
*Traitement par Idoquinol, paromomycine voir métronidazole
!!Girardiase
*//Girardia Lamblia//, un protozoaire transmis par voie fécale-orale
*Le patient présente des diarrhées aqueuses et une perte de poids si infection chroniques
*Diagnostic par analyse des selles
*Traitement par Metronidazole
!!Ascariase
*//Ascaris lumbricoides//, un nématode trouvé dans la nourritures ou les selles humaines
*Le patient peut présenter des douleurs abdominales, des vomissements
*Si la charge est élevée, des obstructions du canal pancréatique ou du canal hépatique
*Diagnostic par examen des selles
*Traitement par Albendazole ou Mebendazole
!!Ankylostomose
*//Ancylostoma duodenale //ou //Necator americanus//, deux nématodes envahissant la peau, puis les poumons, puis l'intestin
*Souvent asymptomatiques
*Parfois toux, anémie, malabsorption, perte de poids, eosinophilie
*Diagnostic par analyse des selles
*Traitement par Mebendazole
!!Enterobiase
*//Enterobius vermicularis//, un nématode transmis par voie orale, fréquent chez les enfants
*Le patient présente un prurit périanal, aggravé la nuit
*Diagnostic par test du scotch, avec un scotch autour de l'anus qui peut contenir des vers quand on le décolle
*Traitement par Mebendazole
!!Schistosomiase ou Bilharziose
*//Schistosoma// , un ver présent dans les eaux douces, pénétrant la peau, migrant dans les poumons puis dans la veine porte, avant d'atteindre les veinules mésentériques, les urètres et la vessie
*Le patient peut avoir de la fibrose hépatique et HT porte, ou encore de la fibrose vésicale et des dysuries
*Diagnostic par démonstration des oeufs dans l'urine ou les selles
*Traitement par Praziquantel
!!Toxoplasmose
*//Toxoplasma gondii//, un protozoaire trouvé dans les selles des chats et dans la viande mal cuite
*C'est une TORCH, pouvant infecter le foetus avec de graves effets comme la cécité, la choriorétinite, l'épilepise, les retards sévères de développement, voir fausse couche
*Les nouveaux-nés asymptomatiques peuvent réactiver la toxoplasmose à l'adolescence, avec symptômes ophtalmologiques
*Chez l'immunocompétent, la clinique est un syndrome mononucléosique
*Chez l'immunosupprimé ([[HIV|SIDA / VIH]]), la clinique peut comporter une encéphalite (avec [[lesions en ring|toxoplasmose_irm.jpg]]), une choriorétinite, pneumonites, ADP et HSM
*Diagnostic: Serologies, PRC, CT-cérébral injecté, examen ophtalmo
*Pas de Traitement si immunocompétent
*Traitement pour immunosupprimés par spiramycine ou pyrimethamine + sulfadiazine
*Les femmes enceintes doivent éviter la viande peu cuite et les litières de chat
!!Filariose
*Nématode attaquant le système lymphatique, avec des [[lymphodème des membres inférieurs|filariose.jpg]].
undefine
undefine
{{maladie_parkinson_substantia_nigra.jpg}}
!! Définition
*la ''Maladie de Parkinson'' est une maladie neurodégénérative qui est due à une ''perte de neurones Dopaminergique ''surtout au niveau de la ''substantia nigra''. C'est la deuxième maladie neurodégénérative après Alzheimer. Elle touche les patients surtout les ''hommes ''dès ''60 ans'',
*La perte des neurones dopaminergique implique une ''sous-activation de la voie directe'' (qui normalement active le mouvement) et une ''suractivation de la voie indirecte'' (qui normalement inhibe le mouvement. Le tout résulte en une ''[[inhibition du mouvement|voie_directe_indirecte.jpg]]''.
*La pathologie est due à une ''accumulation d'alpha-synucléine '' dans les [[corps de Lewy|Démence à Corps de Lewy]]. Elle est majoritairement ''sporadique'', bien que 10% des cas soit familiaux.
!! Clinique
*On trouve des ''Signes positifs'' comprenant le classique ''tremor au repos'', la ''roue dentée'' ainsi que l'''hypertonie rigide en tuyau de plomb'' (ou hypertonie plastique, extrapyramidale) augmentée par la manoeuvre de Froment (augmentation de la rigidité lorsqu'on bouge passivement le poignet contralatéral du patient).
*Dans les ''signes négatifs'' on trouve surtout une ''Bradykinésie'' avec des mouvements lents de faible amplitude, une diminution des mimiques et une difficulté a initier le mouvement.
*Le patient présente une ''instabilité posturale'' avec un aspect vouté
*Les ''signes psychiatriques'' comprennent une ''diminution du parlé'', une ''dépression'' ainsi qu'une ''démence tardive''.
*les ''signes autonomes'' comprennent une ''rétention urinaire'' et ''constipation'' ainsi qu'une ''dysfonction érectile''.
*Une anosmie précoce précède souvent le Parkinson, jusqu'à plusieurs années avant !
!! Diagnostic
*Le diagnostic est surtout ''clinique''. Il comprend la ''Bradykinésie'' + Rigidité ou Tremblement ou Instabilité Posturale
*En ''médecine nucléaire'' on peut observer la perte des neurones dopaminergiques avec un [[DatScan|datscan_parkinson.jpg]].
!! Traitement
* le ''traitement pharmacologique'' se base sur la combinaison ''Levodopa / Carbidopa'' (Sinemet®) qui ont une double action. La Levodopa est précurseur de la DA. La Carbidopa diminue le métabolisme de la Lévodopa -> Dopamine mais seulement en périphérie, ce qui implique que la conversion se passe majoritairement une fois la BHE franchie. Il existe aussi des ''pompes jejunales Duodopa'' qui permettente de diminuer les moments OFF et les surdosages (qui induisent des dyskinésies avec mouvements involontaires et postures dystoniques).
*les autres traitements sont:
**les agonistes DA (Ropinirole) qui sont moins efficace que la Lévodopa mais ont moins de flucuation
**les inhibiteur de la MAO-B (Sélégiline)
** les inhibiteurs de la COMPT (Entacapone)
**les Anticholinergiques (Bipéridène, Akineton®)
*le ''traitement chirurgical'' comprend la ''Deep Brain Stimulation'' qui est assez efficace mais concerne que 15% des maladies. La pallidotomie et thalamotomie sont des anciens traitements.
!! Syndromes Parkinsoniens
Les Symptomes Parkinsoniens sont à considérer chez un patient qui a une mauvaise réponse au traitement, ou des symptômes trop tôts, trop forts, trop inhabituels.
*La [[Démence à Corps de Lewy]], avec des hallucinations visuelles
*La ''Paralysie supranucléaire progressive'', avec une atteinte du regard vertical
*La ''dégénérescence Cortico-Basale'', avec un parkinsonisme unilatéral
*La ''degenerescence nigro-striée'', ou atrophie multisystémique
*Le ''parkinson medicamenteux'' du aux Neuroleptiques ou Anti-DA
*Le ''parkinsonisme vasculaire'' du a une lésion vasculaire des noyaux de la base
*Le ''parkinsonisme juvénile'' ou variante de Westphal
{{Dat-scan_parkinson.jpg}}
!!Traceur
*Le ''DAT'' //(I-123 ioflupane or DaTscan) //est un[[ transporteur de la dopamine|DAT_transporteur.jpg]] situé au niveau présynaptique des neurones dopaminergiques.
*le I-213 Ioflupane a un uptake cérébral a 7% 10-min après injection, et l'activité au niveau du striatum reste stable pendant 3-5h
*la voie d'excrétion principale est par les urines
*Le Traceur s'accumule dans les[[ ganglions de la base|Dat_scan_normal.jpg]].
!!Parkinson
*les premiers signes sont une diminution de l'uptake au niveau du ''putamen postérieur'', qui évolue ensuite antérieurement, puis touche finalement la tête du noyau caudé.
*Au début de la maladie, l'anomalie est souvent ''asymétrique''.
*On ne ''peut pas distinguer'' le Parkison pur des autres syndromes parkinsoniens.
*La sensibilité est de 78%, et la spécificité est bonne, de 97%, ce qui fait qu'un Dat-scan négatif exclut une maladie de parkinson a priori.
!!Exemples
<$button popup="$:/01.11.16_datscan.jpg" >
[img width=64 [images/01.11.16_datscan.jpg]]
</$button><$reveal type="popup" state="$:/01.11.16_datscan.jpg"><div class='tc-tiddler-frame'>
{{01.11.16_datscan.jpg}}
Dat-scan normal
</div>
</$reveal>
10.11.2016:Dat-scan normal
<$button popup="$:/1.11.17_datscan_patho.jpg" >
[img width=64 [images/1.11.17_datscan_patho.jpg]]
</$button><$reveal type="popup" state="$:/1.11.17_datscan_patho.jpg"><div class='tc-tiddler-frame'>
{{1.11.17_datscan_patho.jpg}}
Diminution bilatérale et globale de la fixation du radiotraceur, prédominant aux putamens et à droite, avec augmentation relative du bruit de fond.
</div>
</$reveal>
10.11.2016: hypofixation globale
<$button popup="$:/1.10.16_DAT.jpg" >
[img width=64 [images/1.10.16_DAT.jpg]]
</$button><$reveal type="popup" state="$:/1.10.16_DAT.jpg"><div class='tc-tiddler-frame'>
{{11.10.16_DAT.jpg}}
''74ans, Suspicion de syndrome extrapyramidal prédominant à droite:''
Diminution de la fixation du radiotraceur au niveau du putamen gauche, avec augmentation relative du bruit de fond.
Discrète hypofixation du radiotraceur au niveau du putamen droit, restant dans les limites de la norme.
</div>
</$reveal>
10.11.2016: hypofixation puamen droit
undefine
!!Déroulement #Gonfler et vider pronfondément les poumons 1 fois, puis Gonfler à max et souffler à max. Répéter la mesure 3 fois et prendre la meilleure #''VEMS % du prédit'' à calculer sur ''medcalc'' en fonction de la ''taille'' du patient et de son ''age'' (demander la taille!)
@@background-color:Khaki; !''Peau'' @@ <<list-links "[tag[Peau]sort[title]]">>
@@background-color:#ff8ad8; !''Pédiatrie'' @@ <<list-links "[tag[Pédiatrie]sort[title]]">>
@@background-color:yellow; !'' Pelvis '' @@ <<list-links "[tag[Pelvis]sort[title]]">>
![ext[dermato_dermatoses_bulleuses.pdf|./pdf/dermato_dermatoses_bulleuses.pdf]] <!-- Texte caché pour la recherche Dermatoses bulleuses - Bulles intra-épidermiques : pemphigus vulgaire, superficiel (atteinte des desmosomes, bulles fragiles) - Bulles sous-épidermiques : pemphygoïde bulleuse (IgG), dermatose à IgA linéaire, épidermolyse bulleuse acquise, dermatite herpétiforme - NB : bulles de friction = intradermiques GEN : 40-50ans, grave CLIN : Nikolski+. Douleur, ø de Prurit - Initial : érosions buccales ++, génitales, conjonctivales - Bulleuse généralisée : bulles fragiles, lésions érosives, squamo-croûteuse sur peau saine (ørouge), aisselle, pli inguinal et tronc. INV : - Bx : bulles intra-dermiques avec acantholyse sans inflammation. - IF directe : dépôts IgG mb des kératinocytes (en maille de filet) - IF indirecte: IgG sur œsophage de singe. - Elisa : auto-IgG anti desmogléine 3 et 1 (adhésion desmo) DD : aphtes (fibrineux, rond), lichen érosif, RCUH/Crohn / pemphygoïde bulleux, toxidermies, herpès, varicelle disséminée TTT : Prednison PO, immunosuppresseurs (azathioprime, ciclosporine), échanges plasmatiques, Ig IV, photophérèse extracorporelle (UV), Rituximab (ac anti-CD20) GEN : >70ans, dure environ 1an CLIN : - Initial : Prurit, placards urticariens, eczematiformes - Généralisé : bulles solides, contenu clair, base érythémateuse. Lésions érosives croûteuses, placards inflammatoires. ± Atteinte muqueuse. ⇒ abdomen, cuisses, pli mbr, respect du visage. - Atypiques : localisé, dyshydrosiforme (bulles mains/pieds), prurigo. DD : pemphygus, gale, toxidermies, eczéma de contact, lymphome INV : - Bx : bulle sous épidermique, infiltrat éosino - IF directe : dépôt linéaire IgG ou C3 à la JDE (hémi-desmosomes) - IF indirecte : auto-AC anti-JDE (sur peau humaine clivée), positive au toit (épidermolyse bulleuse acquise : positif au plancher). - Immunobolt/ELISA : réactivité BP180, BP230 (hémidesmosome) TTT : Prednisone PO, immunosuprpesseurs (AZT, MTX, ciclo), CS topiques classe IV (alternative au PO), Ig IV, photophérèse - Maladies AI (pemphigus, pemphygoïde, dermatite herpétiforme) - Maladies congénitales génétiques (epidermolyse bulleuse) - Eczema toxique ou allergique - Infectieux (impétigo bulleux, STSS : toxique exfoliative A ⊣ dsg1) - Toxidermies (Lyell, erythème polymorphe), piqûre d’insecte - Agents physiques et thermiques, prophyries CLIN PEMPHIGUS VULGAIRE PEMPHYGOÏDE BULLEUSE DD Dermatoses bulleuses (suite) GEN : dermatose bulleuse sous-épidermique sensible au gluten (rare) - 25-30ans, H>F - Associé coeliakie (peut être infraclinique). CLIN : prurit ++, papulo-vésicules groupées (herpétiformes), excoriations ð Symétriques, face extension mbr, fesses, dos INV : - Bx : bulle sous-épidermique, infiltrat PMN - IF directe : IgA1 dans les papilles dermiques (glutaminase !) - Sérologie : IgA anti transglutaminase tissulaire et épidermique - OGD + bx + Enquête familiale (coeliakie) TTT : disulone (anti-lépreux, action 48h), régime sans gluten CAVE : Risque de maladie AI et lymphome digestif Porphyrie cutanée tardive GEN : Tr métabolisme porphyrine (synthèse hème : déficit uropophyrinogène décarboxylase), hépatique ou érythropoïétique. - Maladie des vampires (ø soleil, ttt saignée, HCV car aime les filles, OH car boit vin, hémochromatose car boit trop de sang) - H, >40ans, hépatopathie. - Déclenchant : OH, HCV, hémochromatose (oestrogènes, dioxine) - Type I = sporadique (++), Type II-III = familiale (rare, hémopathie) CLIN : - Hyperfragilité cutanée : bulles séreuses et hémorragiques, érosions, cicatrices atrophiques → dos des mains, visage (photoexposé : ROS) - Hypertrichose malaire - Pigmentation brunâtre, élastose, lésions sclérodermiformes - Calcinose (pré-auriculaire), alopécie - Photosensibilité : lésions érythémato-oedémato-purpuriques INV : - Dosage porphyrines (urines : exposée UV → foncées, selles) - Bilan hépatique - Histo : bulles sous épidermiques sans inflammation. Dépôts linéaires IgG, IgM et C3 à JDE et autour vsx dermiques DD : dermatose bulleuse AI, toxidermie, sclérodermie, pseudoorphyrie (réaction phototoxique : quinolone) TTT : stop OH/hépatotoxique, photoprotection, saignées, choloquine GEN : Rares, génétiques CLIN : Fragilité épithéliale (bulles, érosions cutanées si frottement) - Simpelx (kétatinocytes basaux), jonctionnelle (MB), dystrophique (sous MB) - Manifestations dès naissance. - Formes non létales, mineures - Létales (syndactylies, aplasie cutanée, contractures, sténose œsophagienne, infections, tr alimentaire, carcinome spinocellulaire) D. HERPETIFORME PORPHYRIE E. BULLEUSE -->
!!Périartérite Noueuse
{{periarterite_noueuse.jpg}}
*La periartérite noueuse est une ''vasculite des moyens vaisseaux''. Elle touche surtout la ''peau''. Elle est d’étiologie inconnue mais parfois associée à l’hépatite ''B''.
*La ''clinique'' est caractérisée par des ''nodules sous-cutanés'', des ''ulcères'' et du ''livedo articulaire''.
*Elle peut aussi toucher les ''reins'', les ''muscles'', les ''nerfs'' et le ''tube digestif''. Mais pas d’atteinte pulmonaire contrairement au Wegener.
*Les ''investigations'' comprennent des ''biopsies'' (infarctus des parois vasculaires avec formation anévrismales) ainsi que l’angio-''IRM (anévrismes des artères viscérales''), qui sont inclus dans un ensemble de critères diagnostics
!!Churg-Strauss
{{churg-strauss.jpg}}
*Le ''Chung-Strauss ''(ou //Granulomatose Eosinophilique avec Polyangite //est une ''vasculite des petits-vaisseaux, ANCA-positive''. (Comme le Wegener)
*la ''Triade clinique'' comprend
*# une ''tendance allergique'' (Asthme sévère, rhinites)
*# une ''Eosinophilie'' (au labo et et biopsie)
*# une ''vasculite'' avec atteinte multi-organique (purpura, nodules sous-cutané, livedo, atteinte rénale, cardiaque, pulmonaire, Gastro-intestinale)
*les ''investigations'' comprennent un ''labo'' (eosinophilie, Anca-positif) et une ''biopsie'' (signes de vasculite)
*le ''pronostic est mauvais'', avec une mauvaise survie à 5ans. le ''traitement'' implique des ''corticoïdes'' et autres immunosuppresseurs.
!!Takayasu
{{takayasu.jpg}}
*L’artérite de Takayasu est une ''vasculite des grands vaisseaux'', impliquant une ''inflammation de l’aorte et de ses branches''. Elle touche surtout les ''femmes asiatiques''.
*la ''Clinique'' implique des ''symptômes généraux'' (fièvre, fatigue, malaise, douleurs), une ''différence de pression entre les deux bras'', des ''absences de pouls'' et des ''souffles vasculaires''.
*Elle est caractérisée par des ''complications sévères'' (anévrisme aortique, insuffisance aortique, ischémie d’organes, HTA secondaire,…) et se traite par des ''corticoïdes''.
*Un ''traitement chirurgical des vaisseaux sténosés'' est souvent nécessaire.
undefine
!!Généralités
*La Périarthrite de hanche (ou ''Syndrome douloureux du grand trochanter'') correspond à une ''douleur en regard du grand trochanter'', d’étiologie peu claire (probablement une tendinopathie des m.fessiers) mais assez ''fréquente''.
*Le ''Diagnostic est clinique''. La douleur est ''reproductible à la palpation'' et peut souvent ''irradier sur la face latérale de la cuisse''. L’imagerie par IRM est peu utile.
*Le ''traitement médicamenteux'' comporte les classiques ''AINS'' et ''Paracétamol'' ainsi que ''Injections de corticoïdes'', le tout à grand renfort de ''physiothérapie''.
*Eventuellement un traitement chirurgical chez les patients qui ont eu un IRM montrant une rupture tendineuse du m.moyen fessier.
{{periarthrite_hanche_douleur.jpg}}
undefine
{{pericardite.jpg}}
!!Définition
*La ''Péricardite Aigue'' est une i''nflammation du péricarde'' qui peut être isolée ou faire partie d'une autre pathologie.
*Les ''Causes'' sont:
**''Idiopathique'', probablement post-viral, ''précédée d'une IVRS++'', d'une grippe ou d'une virose gastro-intestinale.
**''Infectieuse'', avec le Coxsackie Virus, EBV, Influenza, HIV, Hépatites, TBC, Toxoplasmose,...
**''Post-Infarctus'', généralement dans les ''24h'' après l'IM, ou alors le ''Syndrome de Dressler'' qui survient des ''semaines'' après.
**''Péricardite Urémique'' lors des IRC.
**''Néoplasme'' comme p.ex Lymphome de Hodgkin, Cancer du sein ou du poumon
**''Post-Chirurgie'' ou Post-''Trauma''
**''Post-Radique''
*La pathologie reste ''1-3 semaines'' et après la majorité des patients récupèrent. Seule une petite minorité reste chronique.
*les ''complications'' sont globalement l'''Epanchement péricardique'' et parfois la ''Tamponnade''.
!!Clinique
*la ''Clinique'' comporte:
**''Douleurs retrosternales'' qui sont souvent ''respiro-dépendantes'' et ''irradient dans le dos et le cou''
*La douleur est ''aggravée par la position couchée et les mouvements'', tandis qu'elle est ''calmée par la position penchée en avant''.
*''Fièvre'' et ''Leucocytose'' sont souvent présentes
*''frottement péricardique'' a l'auscultation, ausculter avec patient allongé et appuyer fort.
!!Investigations
*Le ''Diagnostic'' passe surtout par l'''ECG'' qui montrera une ''Surélévation-ST diffuse avec descente du PR''. Si l'ECG est normale on peut tenter une ''echo-cardio'' pour voir un épanchement.
*L'ECG se fait en ''4 stages''
*#Surélévation ST et descente du PR diffuses
*#Retour du ST a la normale
*#Inversion de l'onde T
*#Retour de l'onde T à la normale
{{ECG_pericardite_stages.jpg}}
!!Traitement
*Le ''Traitement'' est ''symptomatique'' avec des ''AINS'', ou alors ''traiter la cause'' s'il y a en a une.
*La pathologie se résout en ''2-6 semaines''.
*si taponnade: drainer
*''colchicine''
{{pericardite_constrictive_rx.jpg}}
!!Définition
*La ''Péricardite constrictive'' est une pathologie ''chronique'' rare caractérisée par à un ''péricarde fibreux et calcifié''.
*Le péricarde fait une ''restriction de la diastole'', ce qui implique un remplissage rapide au début de la diastole suivit d'un stop brusque. (contrairement à la tamponnade ou la vitesse de remplissage diminue progressivement)
*Les ''Causes'' sont:
**''Idiopathique'' le plus souvent, parfois précédée d'une infection virale.
**''TBC''
**''Urémie''
**''Tumorale''
**''Post-chirurgie péricardique''
**''Post-radique''
!!Clinique
*Le patient apparait ''très malade''. Il présente souvent une ''dyspnée'', une ''fatigue'' et des ''œdèmes''
*La [[Turgescence Jugulaire|Turgescence_jugulaire.jpg]] est un signe typique, accompagné du ''signe de Küssmaul'' (la JVP ne descend pas à l'inspiration comme elle le fait en temps normal).
*Un ''Pericardial knock'' a l'auscultation juste après B2.
*le ''Diagnostic Différentiel'' qui ressemble beaucoup est la [[Cardiomyopathie Restrictive|Cardiomyopathies]].
!!Investigation
*Une ''Echo-cardio'' montrera le défaut de remplissage et l'aspect épaissi du péricarde.
*Un ''CT'' ou ''IRM'' vont mieux montrer l'anatomie régionale, particulièrement les calcifications au CT.
*Un ''Catheter cardiaque'' montrera une //pression égalisée aux 4 chambres// et une //descente rapide de y//.
!!Traitement
*''Traiter la cause'' sous-jacente
**les ''diurétiques'' peuvent aider à diminuer les symptômes de surcharge
**''Chirurgie'' par pericardiectomie.
{{pericardite_constrictive_ct.jpg}}
undefine
undefine
undefine
![ext[PBS.pdf|./pdf/PBS.pdf]] <!-- Texte caché pour la recherche Peritonite bacterienne spontanee -->
![ext[petite_taille_naissance.pdf|./pdf/petite_taille_naissance.pdf]] <!-- Texte caché pour la recherche Size at birth An infant’s gestation and birthweight influence the nature of the medical problems likely to be encoun tered in the neonatal period. In the UK, 7% of babies are of low birthweight (<2.5 kg). However, they account for about 70% of neonatal deaths. Definitions Babies with a birthweight below the 10th centile for their gestational age are called small for gestational age or small for dates (Fig. 9.10). The majority of these infants are normal, but small. The incidence of congeni tal abnormalities and neonatal problems is higher in those whose birthweight falls below the second centile (approximately two standard deviations (SD) below the mean), and some authorities restrict the term to this group of babies. An infant’s birthweight may also be low because of preterm birth, or because the infant is both preterm and small for gestational age. - - Small for gestational age infants may have grown normally but are small, or they may have experienced intrauterine growth restriction (IUGR), i.e. they have failed to reach their full genetically determined growth potential and appear thin and malnourished. Babies with a birthweight above the 10th centile may also be malnourished, e.g. a fetus growing along the 80th centile who develops growth failure and whose weight falls to the 20th centile. - - - Patterns of growth restriction Growth restriction in both the fetus and infant has traditionally been classified as symmetrical or asym metrical. In the more common asymmetrical growth restriction, the weight or abdominal circumference lies on a lower centile than that of the head. This occurs when the placenta fails to provide adequate nutrition late in pregnancy but brain growth is relatively spared at the expense of liver glycogen and skin fat (Fig. 9.11). This form of growth restriction is associated with utero placental dysfunction secondary to maternal pre eclampsia, multiple pregnancy, maternal smoking or it may be idiopathic. These infants rapidly put on weight after birth. - 1 2 147 3 Perinatal medicine Summary Size at birth 9 • Small for gestational age – birthweight <10th centile • Intrauterine growth restriction (IUGR) – fails to reach genetically determined growth potential • Growth restriction – symmetrical or asymmetrical, but often mixed. • • hypocalcaemia polycythaemia (venous haematocrit >0.65). Large-for-gestational-age infants Figure 9.11 Severe intrauterine growth restriction in a twin. In symmetrical growth restriction, the head circum ference is equally reduced. It suggests a prolonged period of poor intrauterine growth starting in early pregnancy (or that the gestational age is incorrect). It is usually due to a small but normal fetus, but may be due to a fetal chromosomal disorder or syndrome, a congenital infection, maternal drug and alcohol abuse or a chronic medical condition or malnutrition. These infants are more likely to remain small permanently. In practice, distinction between asymmetrical and symmetrical growth restriction often cannot be made. Monitoring the growth-restricted fetus The fetus with IUGR is at risk from: • intrauterine hypoxia and ‘unexplained’ intrauterine death • asphyxia during labour and delivery. The growth restricted fetus will need to be monitored closely to determine the optimal time for delivery. Pro gressive uteroplacental failure results in: - • reduced growth in femur length and abdominal circumference • abnormal umbilical artery Doppler waveforms – absent or reversed end diastolic flow velocity • redistribution of blood flow in the fetus – increased to the brain, reduced to gastrointestinal tract, liver, skin and kidneys • reduced amniotic fluid volume • reduced fetal movements and abnormal CTG (cardiotocography). The growth-restricted infant After birth, these infants are liable to: • hypothermia because of their relatively large surface area • hypoglycaemia from poor fat and glycogen stores Large for gestational age infants are those above the 90th weight centile for their gestation. Macrosomia is a feature of infants of mothers with either permanent or gestational diabetes, or a baby with a congenital syndrome (e.g. Beckwith–Wiedemann syndrome). The problems associated with being large for gestational age are: - - - • • • • • Birth asphyxia from a difficult delivery Breathing difficulty from an enlarged tongue in Beckwith–Wiedemann syndrome Birth trauma, especially from shoulder dystocia at delivery (difficulty delivering the shoulders from impaction behind maternal symphysis pubis) Hypoglycaemia due to hyperinsulinism Polycythaemia. -->
//en construction...//
![ext[pharyngite.pdf|./pdf/pharyngite.pdf]] <!-- Texte caché pour la recherche Tonsillite Tonsillitis Pharyngitis Angina Angine Amygdale Amygdales -->
![ext[Pharynx.pdf|./pdf/Pharynx.pdf]] <!-- Texte caché pour la recherche -->
*Syndonyme: Mescaline, Angel Dust *Derivé de la ''Kétamine'', utilise en anesthésie comme analgésique. les patients sont ''résistants à la douleur'' *Les patients sont souvent ''agressif'' et on un ''nystagmus'' *''Prise en charge'': les mettre sous ''benzo'' et dans un ''endroit calme''
{{raynaud.jpg}}
!!Généralités
*Le ''Phénomène de Raynaud'' est un trouble de la circulation sanguine manifesté par un ''engourdissement'' et des ''douleurs des extrémités'', dus à une ''réponse vasospastique exagérée'', survenant principalement ''au froid'' et ''au stress''.
*Il y a ''trois phases'' du phénomène, avec coloration des extrémités:
**''Blanc'' (phase d'ischémie)
**''Bleu'' (phase de desoxygénation)
**''Rouge'' (phase de reperfusion)
*Le Phénomène de Raynaud peut être
**''Primaire'' (ou //Maladie de Raynaud//), commençant souvent chez les ''adolescents'' et avec une atteinte symétrique. __Cette forme n'aboutit généralement pas à des nécroses.__
**''Secondaire'', souvent ''après'' ''30ans'', de façon plutôt asymétrique et avec des ''ulcères et nécroses''. Les patients ont des auto-anticorps et d'autres symptômes de connectivites comme ceux du ''Lupus, du Sjogren ou encore de la PR''.
*Le ''traitement'' se base sur des ''anticalciques'' comme la ''nifédipine'', pour leur effet ''vasodilatateur''. D'autres traitements comme les prostaglandines et le sidénafil (viagra) sont possibles. Dans certains cas graves, la ''chirurgie'' peut être envisagée.
{{raynaud_schema.jpg}}
!! Définition
* Le'' Phéochromocytome'' est une ''tumeur neuroendocrine'' rare composée de //cellules chromaffines// produisant des ''catécholamines'' (surtout adrénaline et noradrénaline), localisé normalement au niveau des ''surrénales''. Elle est normalement ''bénigne''.
*On le décrit avec la ''règle des 10%'':
**''10% Extra-surrénalien'' (chaines sympathiques)
**''10% Malins''
**''10% Bilarétral''
**''10% Héréditaires''
** ''10% multiples''
** ''10% pédiatriques''
*S'il n'est pas operé, le phéochromocytome peut être ''mortel''.
!! Clinique
*Le patient va développer une ''hypertension paroxystique'', avec la ''Triade de Ménard'':
*#''Céphalées''
*#''Palpitations'' ou tachycardie
*#''Sudations''
* On peut aussi trouver une ''perte de poids'', une ''anxieté'' et une ''sensation de panique''.
!! Investigations
*au ''Labo'' on trouvera:
** ''Métanéphrines urinaires/24h augmentées'' (métabolite de l'adrénaline)
**''Métanéphrines plasmatiques augmentées''
**''Hyperglycémie'' parfois (les catécholamines ont un effet hyperglycémiant)
*Lorsque le labo est positif, il faut faire une ''Imagerie'':
**un ''CT'' en premier lieu, où l'on peut voir la ''[[masse surrénaliene|pheochromocytome_ct.jpg]]''.
**un ''IRM'' ou une ''Scintigraphie MIBG'' ([[MIBG = analogue de la NA|pheochromocytome_NX_MIBG.jpg]]) sont possibles.
!! Traitement
* Le traitement est la ''chirurgie élective'', avec l'ablation de la tumeur. Pendant l'opération on veut éviter une ''"catecholamine storm"'' qui peut être dangereuse pour le patient, c'est pourquoi on fait toujours une chirurgie élective avec ''préparation médicamenteuse
'' (''alpha-bloqueurs'') visant à réduire la tension et la fréquence cardiaque.
undefine
undefine
![ext[circoncisions_phimosis.pdf|./pdf/circoncisions_phimosis.pdf]] <!-- Texte caché pour la recherche Circumcision Types of hypospadias Figure 19.11 Penile shaft hypospadias with dorsal hooded foreskin, showing the urethral groove (arrow) and urethral meatus (arrow). Figure 19.12 In lateral view, the ventral curvature of the penis (chordee) can be seen. At birth, the foreskin is adherent to the surface of the glans penis. These adhesions separate spontaneously with time, allowing the foreskin to become more mobile and eventually retractile. At 1 year of age, approximately 50% of boys have a non-retractile fore- skin, but by 4 years this has declined to 10%, and by 16 years to only 1%. A non retractile foreskin often leads to ballooning on micturition, which is physiological. Gentle retraction of the foreskin at bathtimes helps to maintain hygiene, but forcible retraction of a healthy non retractile foreskin should be avoided. - - Two conditions that require reassurance are prepu tial adhesions (when the foreskin remains partially adherent to the glans) and the presence of white ‘pearls’ under the foreskin due to trapped epithelial squames. Both conditions are usually asymptomatic and resolve spontaneously. Circumcision is one of the earliest recorded operations and remains an important tradition in the Jewish and Muslim religions. Although routine neona tal circumcision is still common in some Western countries such as the USA, the arguments generally used to justify on medical grounds have been discredited and no national or international medical association currently advocates routine neonatal cir cumcision. Neonatal circumcision is not without risk of significant morbidity. Nevertheless, the issue is still hotly debated. There are only a few medical indications for circumcision: • Phimosis (Fig. 19.13). This term is often used to describe the inability to retract the foreskin. As described above, at birth the foreskin is non retractile and phimosis is physiological. Pathological phimosis is seen as a whitish scarring of the foreskin and is rare before the age of 5 years. The condition is due to a localised skin disease known as balanitis xerotica obliterans (BXO), which also involves the glans penis and can cause urethral meatal stenosis Figure 19.13 Pathological phimosis. Figure 19.14 Balanoposthitis. • • - Recurrent balanoposthitis (Fig. 19.14). Single attack of redness and inflammation of the foreskin, sometimes with a purulent discharge, is common and usually responds rapidly to warm baths and a broad spectrum antibiotic. Recurrent attacks of balanoposthitis (inflammation of the glans and foreskin) are uncommon and circumcision is occasionally indicated. - 352 Recurrent urinary tract infections. Although urinary infection is more common in uncircumcised boys Genitalia the overall incidence is low and routine circumcision is not justified as a preventative measure. However, circumcision may be helpful in reducing the risk of urinary tract bacterial colonisation in boys with upper urinary tract anomalies complicated by recurrent urinary infection. It may also be appropriate in boys with spina bifida who need to perform clean intermittent urethral catheterisation. There is some data from countries with a high pre valence of HIV infection that the risk of transmission is lower in circumcised males. Surgery Circumcision for medical indications is performed under a general anaesthetic as a day case. During the procedure, a long acting local anaesthetic block can be given to reduce postoperative pain. Circumcision is not a trivial operation. Healing can take up to 10 days, with discomfort for several days. Bleeding and infection are well recognised complications, but more serious hazards, such as damage to the glans, may occur if the procedure is not carried out by appropriately trained personnel. The procedure also carries the risk of psy chological trauma. - - Summary Preputioplasty can be offered as an effective alter native to circumcision in selected cases. After retraction of the foreskin, the tight preputial ring is incised longi tudinally and then sutured transversely. Unlike circum cision, preputioplasty conserves the foreskin and results in less postoperative discomfort and fewer com plications. However, regular retraction of the foreskin is required in the first few weeks after surgery and for this reason, preputioplasty is better suited to older boys who are willing to do this. Topical corticosteroids Application of a topical steroid ointment to the prepuce has been shown to facilitate retraction of a non retractile prepuce, with success rates of up to 80%. Different treatment regimens have been described but typically the ointment is applied twice daily for 2–3 months. - Paraphimosis The foreskin becomes trapped in the retracted position proximal to a swollen glans. The foreskin can usually be reduced, but adequate analgesia (often a general anaesthetic) is needed to achieve this. The problem is not usually recurrent and circumcision is rarely required. Genital conditions in male infants and children Inguinal hernia: • Presentation – intermittent swelling in the groin or scrotum on crying or as an irreducible lump • Repair promptly to avoid the risk of strangulation • If irreducible – sustained gentle compression with analgesia to reduce, followed by delayed surgery Hypospadias: • Consists of – ventral urethral meatus, a hooded dorsal foreskin, chordee • When severe, exclude other genitourinary or endocrine anomalies • Affected infants must not be circumcised, as the foreskin is often needed for later reconstructive surgery An undescended testis: • Is present in about 4% of full-term male infants but only 1.3% at 3 months of age • May be retractile, if it can be brought to bottom of scrotum without tension but subsequently retracts – is usually normal • Is palpable if felt in the groin but cannot be manipulated into the scrotum • Is impalpable if no testis can be felt – may be in the inguinal canal, intra-abdominal or absent • Orchidopexy – performed to optimise fertility, avoid malignant change, and for cosmetic and psychological reasons Torsion of the testis: • Must always be considered in a boy with an acutely painful scrotum • Must be treated within hours for the testis to be viable Circumcision: • Is not recommended routinely, but is a tradition for Jews and Muslims and is still common in the USA • The only medical indications are – pathological phimosis, recurrent balanoposthitis and possibly some boys with recurrent urinary tract infections • Complications include pain, bleeding, infection and damage to the glans -->
!!Définition
*Le ''Phlegmon des fléchisseurs'' est une infection de la gaine des fléchisseurs la main, typiquement après une morsure.
*Le doigt est ''__rouge, tumefié, doulureux__'' et en ''__position fléchie__'' (attitude en crochet) et on observe souvent une porte d'entrée.
*Il y a trois stade: exsudat, purulence, nécrose.
*le traitement est ''chirurgical'' avec souvent des séquelles.
*Ps: la bactérie de la morsure de chat est le ''pasteurella multocida''.
{{phlegmon_flech.jpg}}
!!Généralités
''Trouble d’anxiété sociale ''(TAS) ou ''phobie'' ''sociale''.
La phobie sociale est une pathologie'' souvent associée à d’autres pathologies psychiatriques'' et qui est fortement liée à des problèmes ''d’abus de substance.''
*''Definition'': ''peur'' ''marquée'' et ''persistante'' (>6mois) de ''situations'' ''sociales'' ou de ''performance'' dans laquelle la personne est exposée à des personnes inconnues ou à un jugement possible par les autres.
*La personne a peur d'agir d'une façon qui pourrait être humiliante ou embarrassante (p.ex parler en public, initier ou maintenir une conversation, dating, manger en public)
!!Epidémiologie
*7%/an de prévalence
*H=F
Le trouble commence le plus souvent, mais pas exclusivement, à ''l’adolescence'', après l’âge d’acquisition de la parole.
De ce fait les personnes avec un TAS n’ont habituellement pas de grandes difficultés d’expression orale. Ils ont plutôt une ''inhibition de cette expression liée à l’anxiété.''
!!Présentation clinique
*L’anxiété apparait en situation sociale (interaction ou situation de performance)
*La ''crainte'' ''centrale'' est celle du ''jugement'' ''négatif'' d’autrui et de son caractère perçu comme intolérable
*Reconnue comme ''excessive'' et ''disproportionnée''. Les personnes ont cependant des difficultés à se détacher de cette préoccupation.
*''Anxiété'' ''anticipatoire'' (lorsqu’ils sont à risque de se retrouver dans une situation sociale crainte)
Durant les ''situations'' ''anxiogènes'', les personnes avec TAS ont tendance à se ''focaliser sur elles-mêmes ''(sur tout ce qui pourrait être jugé par autrui : tremblement, rougeurs, hésitations, silences, qui ''empêche d’identifier des signaux de feedback positifs '': sourire, une ouverture, une attention de l’autre….). Cette focalisation sur soi est un ''facteur clé de maintien du TAS''.
Les situations activant l’anxiété sont ''variées'' et personnelles (parler en public, manger en public, recevoir un appel téléphonique, entretien avec une personne en position hiérarchique supérieure, une interaction de séduction, rencontrer des personnes inconnues, situation de performance….).
En général, les personnes avec TAS identifient une ''hiérarchie de difficulté relative aux situations anxiogènes. ''
!!Stratégies communes
*Des ''évitements'' ''complets'' (ex : ne pas aller à une soirée) ou ''partiels'' (ex : parler à quelqu’un sans le regarder) sont une des stratégies utilisées pour faire face à l’anxiété perçue.
*Y aller en ''consommant'' des ''substances'' ou des ''benzodiazépines''.
Ces stratégies sont fortement ''renforcées'' par une ''baisse'' de ''l’anxiété'' sur le moment.
Elles contribuent cependant au maintien du Trouble Anxiété Sociale, la personne n''’expérimentant pas qu’elle peut faire autrement er sans substance.''
!!Critères diagnostic
*''L'exposition'' au stimulus provoque une ''anxiété'' immédiatement (peut être une attaque panique)
*La personne reconnait sa peur comme ''excessive ou irraisonnable''
*Les situations sont ''évitées'' ou entraînent une anxiété / détresse
*''Interfère'' de manière significative avec la ''vie'' ''courante'', la fonction sociale ou occupationnelle et/ou détresse marquée.
{{Anxiété-algorithme.jpg}}
!!Co-morbidités
*Beaucoup de sortes de co-morbidités possibles, en particulier :
*''Troubles'' de ''l’humeur''
*''Addictions''.
!!DD
Devant des ''symptômes'' ''apparents'' de ''TAS'' (ex : gêne en situation sociale ou un manque d’intérêt pour des interactions sociales), penser à certains DD:
*''Dépression''
*''Troubles'' ''psychotiques''
*''Trouble'' ''schizoïdie''
*''Syndrome d'Asperger''
Les autres éléments du contexte et les autres éléments cliniques aideront à délimiter les troubles.
{{DD-trouble-anxieux.jpg}}
!!Traitement
*''Dans tous les cas'' : ''psychoéducation'' relative au TAS (notamment l’importance du rôle de l’évitement comme facteur de maintien du trouble).
*''Psychothérapie'' : ''TCC'' (exposition in vivo et virtuelle, graduelle)
**''Exposition''
***L’exposition (avec l’accord du patient), se fait de manière consciente et ''progressive'' (hiérarchie adaptée à la vision subjective du patient) et ''répétée'' dans des contextes variés.
***Les séances doivent ''durer au moins le temps nécessaire pour une baisse d’anxiété'', un sentiment de capacité à faire face chez le patient (= diminution subjective de moitiés de l’anxiété entre la fin et le début de la séance). Le plus important = ''sentiment de capacité à faire face''.
***=> U//ne exposition trop courte (qui s’arrêterait avant l’apparition de ce sentiment) ne conviendrait pas. Elle tendrait à confirmer le patient dans ses craintes//
**La répétition de'' séances d’exposition bien menées conduira à une diminution progressives des symptômes anxieux ''et à une généralisation de ce phénomène à des situations variées.
**''Déplacement du focus attentionnel de soi vers l’autre''.
***Durant les séances, le patient doit pouvoir percevoir le ''feedback d’autrui'' et donc que son attention ne soit pas focalisée sur lui-même.
**//Ces expositions peuvent se faire en ''groupe'' et peuvent utiliser la ''vidéo''. La vidéo offre au patient la possibilité de voir à quel point ce qu’il voit de lui en vidéo (comme s’il regardait quelqu’un d’autre) correspond à ce qu’il pense qu’on voit de lui. Cette approche aide à corriger les croyances erronées à ce sujet.//
*''Pharmacothérapie'' (peut être proposé en plus ou comme alternative à la psychothérapie) :
**''SSRI'' / ''SNRI'' (fluoxétine, paroxetine, sertraline, venlafaxine)
''__Phase aiguë__''
*''Beta''-''bloquants'' ou ''BDZ'' en situation ''aiguë''
*Les BZD ne sont pas un 1er choix car peuvent contribuer au maintien du trouble. Elles peuvent être utilisées au cours des premières semaines comme adjuvants en complément d’un traitement antidépresseur
*Si le patient en a déjà pris, ne pas arrêter brusquement (risque de symptômes de sevrage)
!!Pronostic
*''Chronique''
!!Notes
*Les antipsychotiques n’ont pas d’indication pour le traitement du TAS (certains auteurs : options possibles tardives)
![ext[dermato_photodermatites.pdf|./pdf/dermato_photodermatites.pdf]] <!-- Texte caché pour la recherche Photodermatoses - Sur terre : UV-A ++ (aging) et UV-B (burn) (UV-C, X, V sont filtrés couche d’ozone). UV-B touche épiderme et UV-A derme profond. - Effets UV : altération ADN (dimères thymines → inhibition réplication et mutations. Dimères réparés par photolyase), cancers cutanés ou oculaires, vieillissement de la peau, cataractes. - Positifs : synthèse vitD, ttt eczéma, psoriasis. Désinfection de surface (mutations bactéries). - Phototypes : selon Fitzpatrick (I-VI) (selon couleur de peau, yeux, cheveux, éphélide (tache de rousseur), coups de soleil, bronzage) - Dose érythémale minimale (DEM) : UV-B ou A en dose cumulative sur peau non exposée (fesses) pour déterminer la dose où il y a érythème (~20 peau claire) - Poïkilodermie : macules hypo-/hyper-pigmentées (signe expo soleil) - La cellule qui fait bronzer = mélanocyte (couche basale), qui produit mélanine et la transmet aux kératocytes pour protection UV (se met autour du noyau, transforme UV en chaleur). - Mélanine : à base de thyrosine (+ cytéine : phéomélanine - peau plus orange, sans : eumélanine - plus foncée) - Bronzage : activation mélanocytes, augmentation de la production de mélanine ou réarrangement de la mélanine (rapide) GEN : UV-B > UV-A (mais cancérogenèse c’est les 2) CLIN : erythème des zones photo-exposées, bulles si sévère (brûlure 2 ème degré) TTT : éviter UV, CS en gel/lotion/lait (pas crèmes : elle donnent encore plus chaud), antidouleur. Hospitalisation si brûlure ++ et bulles. PREV : éviter soleil 11-14h, vêtements avec densité de tissage >30 (CAVE : mouillé ne protège pas), écran solaire, lunettes. NB : écran solaire doit être R à l’eau/sueur. Peut être chimique (protègent le noyau, risque d’allergie) ou physique (blanc, couche superficielle → pour enfants / atopiques), protection UV-B et UV-A (protection carcinogenèse et vieillissement). Protection faible (6-10), moyenne (15-25), haute (30-50), très haute (50+). Détermine le temps d’exposition avant érythème. (>50 ne sert à rien, car exponentiel : plus de différence 10-30 que 30-50). CAVE : s’enduire de crème plusieurs fois conserve la protection mais ne l’augmente pas ! Dermatite phototoxique : coup de soleil accéléré - Contact avec produits photosensibilisants (dermatite des prés, en breloque) ou PO (doxy). - Pas immunologique (chez TOUS) Dermatite photoallergique : eczéma de contact, IMMUNO - Réaction retardée, rougeur et desquamation + prurit. Contact ou ingestion (filtres UV, médic) + soleil. Peut déborder de zone exposée Dermatite actinique chronique : forme de dermatite photoallergique - H>50ans avec allergies de contact. - Persistant light réaction avec lichénification + prurit. Extension des zones exposées aux zones couvertes. DEM effondrée. - TTT : éviter soleil, écran soleil 50+, immunosuppression GEN : tout âge, F=H, tous phototype (I-II++), début au printemps CLIN : Prurit + zone photoexposée : papule, lichenifié, pseudo-lupique (induration avec desquamation), urticarien, eczemateuse, piqure d’insecte (→ polymorphe, mais individuellement toujours pareil). INV : phototest polychromatique itératif (sur bras/dos, irradiation avec 3xDEM 3j puis apparition lésions typiques après 3-6j) TTT : protection soleil (habits, écran solaire), CS topiques/PO la 1 er semaine, anti-histaminiques, « light-hardening » (UV-A en dose progressive pour habituer la peau) Dermatoses photoagravées : LED, HSV, Rosacée, (psoriasis : Koebner) (lichen plan : Koebner). Effets à long terme : héliodermie (vieillissement extrinsèque, élastose solaire, poïkilodermie, télangiectasies, rides profondes et comédons) et photocarcinogenèse (baso¢, spino¢, mélanomes) GEN PHYSIO DERMATITE SOLAIRE DERMATITES LUCITE PLEO CAVE -->
undefine
{{piet_bot_schema.jpg}}
!!Généralités
*Le pied bot varus équin est une ''déformation congénitale du pied'', caractérisée par un ''pied en varus'' avec rotation médiale. C’est une déformation ''fréquente''.
*Dans la majorité des cas la cause est ''idiopathique''. Il peut y avoir des causes secondaires à des maladies de tissus.
*Le ''Traitement'' se fait à base d’attelle ''nocturne'' qui doit être suivit pendant ''plusieurs années''. La chirurgie est rare.
*Même malgré traitement, le pied peut avoir tendance à mémoriser sa forme d’origine, avec des ''rechutes'' de la pathologie possibles.~~~~
*L’''ostéoarthropathie'' ''diabétique'' est une complication qui se manifeste, au ''stade précoce'', par une'' inflammation localisée du pied'' ou de la cheville ''secondaire à une ostéolyse ''d’origine inflammatoire et neuropathique. *En l’absence de décharge, elle conduit à de sévères atteintes osseuses, responsables d’une forte morbi-mortalité. Le diagnostic dépend de la rigueur de l’évaluation clinique. *Les examens complémentaires radiodiagnostiques manquent de spécificité mais ils permettent d’évaluer l’étendue et la sévérité de l’atteinte. * Le but du traitement est de'' limiter la déformation par l’immobilisation plâtrée et la décharge''. *Les évidences scientifiques sont insuffisantes pour recommander les bisphosphonates, alors que la chirurgie est unanimement recommandée pour éviter la survenue d’ulcérations secondaires aux déformations.
...
{{pied_plat_clinique.jpg}}
!!Définition
*Le pied plat vient d’une ''dégénérescence du tendon tibial postérieur (TTP''). Cette pathologie est souvent rencontrée chez les ''femmes'' et liée à l’obesité. Les arthrites inflammatoires peuvent aussi le causer.
*__Rappel:__ Le TTP passe en arrière de la malléole interne (l’endroit ou il peut se fragiliser) et s’insère sur la face plantaire du pied, ainsi il permet de maintenir la voute plantaire.
!!Clinique
*Le patient se plaint de ''douleurs'' sur le trajet du TTP (rétromalléolaire, infra-malléolaire), ''reproductibles en adduction''.
*Le patient présente une ''déformation en trois dimensions'':
*''Pes Planus'' (Affaissement de l’arche longitudinale du pied)
*''Pes Valgus'' (Déviation latérale de l’arrière-pied en valgus)
*''Les Abductus'' (Deviation latérale de l’avant-pied en abduction)
*Il faut estimer la ''réductibilité'' de l’articulation, via le ''Signle heel test'' (demander au patient de se mettre sur la pointe d’un seul pied).
*Si le ''valgus disparait'', le ''TTP est fonctionnel'' et le pied plat est « ''réductible'' » .
*Si le ''valgus persiste mais disparait passivement'' (mobiliser manuellement), la déformation est souple mais le ''TTP est insuffisant''
*Si le ''valgus persiste même passivement'', on est face au cas le plus avancé: la ''déformation rigide''.
!!Investigation
*Il faut faire un ''bilan radiologique'' avec ''Rx face/profil'' du ''pied en charge'' ainsi que ''face de la cheville''. Il existe divers signes radiologiques avec surtout l’[[affaissement de la voute|pied_plat_rx.jpg]].
!!Traitement
*au ''Stade de Ténosynovite sans déformation''
*On donne juste des ''semelles'' de support plantaire souple, permettant de ''renforcer la structure''
*Au niveau ''chirurgical'' on peut faire une ''synovectomie'' du TTP
*au ''Stade de déformation réductible''
*On donne des ''supports + chaussures orthopédiques'' de série, plus rigides, avec toujours un ''but de correction''.
*Au niveau ''chirurgical'' on peut faire un ''transfert Tendineux'' (remplacer le TTP par un tendon voisin) ou une ''Ostéotomie'' (vis de stabilisation dans le calcaneus)
*au ''Stade de la déformation irréductible''
*On donne des ''supports + chaussures orthopédiques'' sur mesure, plus montantes, à ''but antalgique'' surtout, car c’est trop tard pour corriger.
*Au niveau ''chirurgicale'' on va stabiliser la zone avec une ''double ou triple arthrodèse''.
undefine
undefine
undefine
undefine
{{pleuresie.jpg}}
!!Généralités
*la ''pleurésie'' est une ''inflammation de la plèvre'', qu'elle soit aigue ou chronique, avec ou sans ''épanchement''.
*la ''//pleurésie sèche//'' correspond à une pleurésie sans épanchement pleural.
*la ''//pleurite//'' correspond à une pleurésie avec épanchement pleural.
*La ''clinique'' sera composée de ''douleurs pleurétiques'', qui sont déclenchées par la ''respiration'' et sont dues au frottement des plèvres enflammées.
*l'auscultation montera un ''frottement pleural'' entendu avec la respiration
*les ''infections virales'' sont les causes les plus importantes de pleurésies, mais il en existe plein d'autres.
undefine
@@background-color:LightBlue; !''Pneumologie'' @@ <<list-links "[tag[Pneumologie]sort[title]]">>
*Le ''Pneumocystis Jirovenci'' ou Carini est un ''protozoaire'' *Touche le patient ''VIH'' surtout. *ATB: ''Co-trimoxazole'' et rajouter ''predisone'' si hypoxie du patient
{{pneumonies_schema.jpg}}
!!Définition
*La ''PAC'' est une ''infection aiguë'' symptomatique des'' voies respiratoires inférieures'', qui se développe //hors de l'hopital// et qui est mis en évidence par un ''nouvel infiltrat radiologique''.
*C'est la première cause de décès liée à une infection.
*Elle concerne les patients ''immunocompétents'' qui n'ont pas été hospitalisés récemment ou traités par ATB.
*Les ''Germes'' les plus fréquents sont des ''bactéries extracellulaires''. on trouve aussi des //bactéries intracellulaires// (//''atypiques''//) ainsi que certains //virus//.
*le mycoplasme est typique chez le jeune adulte, et se diagnostique par des agglutines froides.
|!Bactéries extracellulaires|!Bactéries intracellulaires |!Virus|
|''S.pneumoniae''|Mycoplasma|Influenzae|
|''H.influenzae''|Chlamydia|Adenovirus|
|''M.Catarrhalis''|Legionelle|RSV|
!!Clinique
*''Fièvre'' ou Confusion chez les vieux
*''Toux'' avec ''Expectorations purulentes''
*''Dyspnée''
*''Râles pulmonaires''
le ''CURB-65'' permet d'apprécier le besoin d'''hospitalisation'' de la Dyspnée, si le patient a ''≥2 points''. En ambulatoire on fait le même score mais sans l'urée, avec hospitalisation à ≥1 points.
|!''CURB-65''|!Points|!Résultat|
|''C''onfusion| 1 |''≥2'' : Hospitalisation|
|''U''rée >7mmol/l| 1 |~|
|''R''espiration >30/min| 1 |~|
|''B''lood <90/60 mmhg| 1 |~|
|Age ≥ ''65'' ans | 1 |~|
!!Investigations
*Une ''Rx Thorax'' présentant un ''nouvel infiltrat'' pulmonaire permettra de poser le diagnostic et de différencier la penumonie d'une [[Bronchite|Bronchite Aigue]]. La radio d'une pneumonie lobaire typique montrera:
**Zone d'hyperdensité
**Marges indistinctes sauf si bloqué par une scissure
**Bronchogrammes aériques
*Mesure de la ''Saturation'' ainsi que des constantes.
*La //Culture// et les //Examens sanguins// sont à faire si le patient est hospitalisé.
{{pneumonie_rx.jpg}}
!!Traitement
*''ATB empiriques'' d'abord dirigé contre le //S.pneumoniae// (le plus fréquent et le plus dangereux), on donnera typiquement de l'''Augmentin'' (//Amoxi-Clav//) durant ''7 jours''.
*STOP Tabac, Repos, Hydratation
*AINS ou Paracetamol pour les douleurs pleuritiques
*Vaccins Pneumocoque et Grippe pour les >65 ans.
![ext[pneumonie_ped.pdf|./pdf/pneumonie_ped.pdf]] <!-- Texte caché pour la recherche Pneumonia - The incidence of pneumonia peaks in infancy and old age, but is relatively high in childhood. Pneumonia is a major cause of childhood mortality in resource poor countries. It is caused by a variety of viruses and bacteria, although in over 50% of cases no causa tive pathogen is identified. Viruses are the most common cause in younger children, while bacteria are commoner in older children. In clinical practice it is difficult to distinguish between viral and bacterial pneumonia. - Figure 16.6 In acute bronchiolitis, the chest X ray shows hyperinflation of the lungs with flattening of the diaphragm, horizontal ribs and increased hilar bronchial markings. However, chest X ray is rarely helpful in bronchiolitis. The pathogens causing pneumonia vary according to the child’s age: - • • • • Newborn – organisms from the mother’s genital tract, particularly group B streptococcus, but also Gram negative enterococci - Investigations Respiratory viruses are now usually identified by PCR analysis of nasopharyngeal secretions. A chest X ray is unnecessary in straightforward cases, but if performed, typically shows hyperinflation of the lungs due to small airways obstruction, air trapping (Fig. 16.6) and often focal atelectasis. Pulse oximetry is used to measure and monitor arterial oxygen saturation continuously. Blood gas analysis, usually a capillary sample, is only per formed in severe disease to identify hypercarbia when additional ventilatory support is considered. - Infants and young children – respiratory viruses, particularly RSV, are most common, but bacterial infections include Streptococcus pneumoniae or Haemophilus influenzae. Bordetella pertussis and Chlamydia trachomatis can also cause pneumonia at this age. An infrequent but serious cause is Staphylococcus aureus Children over 5 years – Mycoplasma pneumoniae, Streptococcus pneumoniae and Chlamydia pneumoniae are the main causes. At all ages Mycobacterium tuberculosis should be considered. Management This is supportive. Humidified oxygen is delivered via nasal cannulae; the concentration required is deter mined by pulse oximetry. The infant is monitored for apnoea. Mist, antibiotics, steroids and nebulised bronchodilators, such as salbutamol or ipratropium, have not been shown to reduce the severity or dura tion of the illness. Fluids may need to be given by nasogastric tube or intravenously. Assisted ventilation in the form of nasal or facemask CPAP or full ventila tion is required in a small percentage of infants admit ted to hospital. RSV is highly infectious, and infection control measures, particularly good hand hygiene, are needed to prevent cross infection to other infants in hospital. - Prognosis Most infants recover from the acute infection within 2 weeks. However, as many as half will have recurrent episodes of cough and wheeze (see below). Rarely, usually following adenovirus infection, the illness may result in permanent damage to the airways (bronchioli- tis obliterans). Prevention A monoclonal antibody to RSV (palivizumab, given monthly by intramuscular injection) reduces the number of hospital admissions in high risk preterm - A conjugate vaccine (Prevenar), with immunogenicity against thirteen of the most common serotypes of Streptococcus pneumoniae responsible for invasive disease, is now included in the routine immunisation schedule in the UK and many countries. There has been a marked reduction in the incidence of pneumonia from Haemophilus influenzae type B since the introduc tion of Hib immunisation. Clinical features Fever and difficulty in breathing are the commonest presenting symptoms, usually preceded by an upper respiratory tract infection. Other symptoms include cough, lethargy, poor feeding and an ‘unwell’ child. Localised chest, abdominal, or neck pain is a feature of pleural irritation and suggests bacterial infection. Examination reveals tachypnoea, nasal flaring and chest indrawing – the best clinical sign of pneumonia in children is increased respiratory rate, and pneumo nia can sometimes be missed if the respiratory rate is not measured in a febrile child (so called ‘silent pneu monia’). There may be end inspiratory respiratory coarse crackles over the affected area, but the classic signs of consolidation with dullness on percussion, decreased breath sounds and bronchial breathing over the affected area are often absent in young children. Oxygen saturation readings may be decreased; this is an indication for hospital admission. - - 284 A chest X ray may confirm the diagnosis, but with the exception of a classic lobar pneumonia - Respiratory disorders unable to provide appropriate care. General support ive care should include oxygen for hypoxia and anal gesia if there is pain. Intravenous fluids should be given if necessary, to correct dehydration and main tain adequate hydration and salt balance. Physio therapy has no role. Figure 16.7 Consolidation of the right upper lobe. Lobar consolidation is a feature of pneumococcal pneumonia. Figure 16.8 Right sided empyema. - characteristic of Streptococcus pneumoniae (Fig. 16.7), a chest X ray cannot differentiate between bacterial and viral pneumonia. In younger children, a nasopha ryngeal aspirate is useful to identify viral causes, but blood tests, including full blood count and acute phase reactants, are generally unhelpful in differenti ating between a viral and bacterial cause. A small proportion of pneumonias are associated with a pleural effusion, where there may be blunting of the costophrenic angle on the chest X ray. Some of these effusions develop into empyema and fibrin strands may form, leading to septations, which make drainage difficult (Fig. 16.8). The incidence of childhood empyema has risen over the last decade, the precise reason for which remains unclear. Ultrasound of the chest will often distinguish between parapneumonic effusion and empyema. - - - Management Evidence based guidelines for the management of pneumonia in childhood have been published (British Thoracic Society). Most cases can be managed at home, but indications for admission include oxygen saturation <93%, severe tachypnoea and difficulty breathing, grunting, apnoea, not feeding or family - The choice of antibiotic is determined by the child’s age, severity of illness and appearance on chest X ray. Newborns require broad spectrum intravenous antibi otics. Most older infants can be managed with oral amoxicillin, with broader spectrum antibiotics such as co amoxiclav being reserved for those who are compli cated or unresponsive. For children >5 years of age, either amoxicillin or an oral macrolide such as erythro mycin is the treatment of choice. - - - - Parapneumonic effusions usually resolve with appropriate antibiotics, but the small proportion that develop an empyema require drainage of the collec tion. This may be achieved by either placement of a chest drain with or without the installation of a fibrino lytic agent in the intrapleural space (e.g. urokinase) to break down any septations, or by surgical decortica tion. Practices vary between different centres. Prognosis Follow up is not generally required for children with simple consolidation on chest X ray and who recover clinically. Those with evidence of lobar collapse, atel ectasis or empyema should have a repeat chest X ray after 4–6 weeks. Virtually all children with pneumonia, even those with empyema, make a full recovery. - - - Consider pneumonia in children with neck stiffness or acute abdominal pain. -->
undefine
undefine
!!Définition
*''Pneumopathie d'hypersensibilité''(= alvéolite allergique extrinsèque)
** Poumons du fermier (farmer's /ung)
**Maladie des éleveurs d'oiseaux
!!Clinique
*Dans la'' forme aiguë'', les patientes et les patients souffrent quelques heures après l’''inhalation de l’antigène'' de ''toux'', d’''essoufflement'', de fièvre et de'' symptômes de grippe''. Les symptômes peuvent s''’améliorer spontanément si le contact avec l’antigène est interrompu'' (par exemple en week-end ou pendant les vacances).
*En cas d’''exposition ''chronique, il peut survenir de la fatigue, une perte de poids et des cicatrices sur le tissu pulmonaire (''fibrose'' ''pulmonaire'', rales auscultatoires).
!!Traitement
*Dès que le diagnostic est clair, un traitement de quatre à huit semaines avec des médicaments anti-inflammatoires (corti-costéroïdes) est institué, ce qui permet une décroissance rapide de l’inflammation dans les tissus pulmonaires.
*Le ''traitement'' ''principal'' consiste cependant à ''éliminer la cause'' !
!!A ne pas confondre avec...
...la ''psittacose'', également appelée maladie des perroquetse , due a //chlamydia psittaci// , qui est une ''maladie très rare'', avec des ''symptomes de pneumonie'', qui est principalement due au ''perroquet'', et se traite avec de la ''doxycycline'' PO 10j.
undefine
{{pneumopathies_interstitielles.jpg}}
!!Généralités
*les ''Pneumopathies interstitielles'' atteignent les ''parois alvéolaires'' avec prolifération de //collagène// et //fibrose//, qui peut amener à des dégâts irréversibles.
*le ''pronostic'' est très variable en fonction des atteintes, qui peuvent être multiples
*des ''causes '' à ne pas rater sont
**les ''médicaments'' dont certains sont toxiques (chimiothérapie, or, amiodarone, ...)
**l'''environnement'' dont l'asbestose, silicose, charbon,...
**la ''Sarcoïdose''
**le ''Wegener''
**l'Histiocytose X
**le Churg-Strauss
**le Goodpasture
*les ''symptômes'' sont:
**''dypsnée'' d'abord à l'effort puis au repos
**''toux non productive''
**''fatigue''
**''râles aux bases'' à l'auscultation
**[[hippocratisme digital|hippocratisme_digital.jpg]]
*le ''Diagnostic'' passe par:
**''rx thorax'' peu spécifique
**''CT-scan'' pour une vision détaillée (réticulaire, réticulo-nodulaire, verre dépoli, rayons de miel)
**''fonctions pulmonaires'' avec un volume diminué et un rapport de tiffenau augmenté et un DLCO diminué
**''biopsie'' pulmonaire par bronchoscopie oui depuis l'extérieur
!!Fibrose Pulmonaire Idiopathique
*La ''FPI'' est une maladie catastrophique avec un ''pronostic de 3-7 ans''
*D'''étiologie inconnue'' mais associée aux hommes et au ''tabac''.
*il n'y a ''pas de traitement'' qui fonctionne. le patient présente une baisse graduelle de la respiration et finit par avoir besoin de ''transplantation pulmonaire''.
{{pneumopathie_interstitielle_ct.jpg}}
undefine
{{pneumothorax_rx.jpg}}
!!Généralités
*Un ''Pneumothorax'' survient quand de l'air entre entre les deux plèvres et les séparent.
*Il en résulte un //effet shunt// qui provoquera une //hypoxémie//.
*Le ''Pneumothorax sous tension'', ou //pneumothorax compressif// est une urgence. La plèvre fait un effet valve et l'air rentre mais ne sort pas. Il en résulte une compression du VD avec ''hypotension''. A traiter immédiatement par décompression à l'aiguille.
*il existe deux grandes catégories de pneumothorax, le ''pneumothorax spontané'' (//''primaire''// et //''secondaire''//) et le ''pneumothorax traumatique''.
!!Classification
''Pneumothorax Spontané primaire''
*Le pneumothorax spontané primaire survient chez un'' patient sain ''sans co-morbidité
*Il est lié au ''tabagisme'' et aux ''hommes grands et fins'', et probablement au cannabis.
*Il est du à la rupture de petites [[bulles sous-pleurales|pneumothorax_bulle.jpg]] situées généralement à l'''apex'' des poumons
*le taux de récurrence est de 50% en 2ans
*les patients ont une bonne réserve pulmonaire en général, donc on trouve peu de dyspnée sévère.
''Pneumothorax Spontané secondaire''
*Le pneumothorax spontané secondaire est du à une ''pathologie sous-jacente'' chez le patient.
*les ''causes'' peuvent être
**''BPCO''
**''Asthme''
**''Pneumopathie Interstitielle'' (sarcoidose, FPI, TBC, ...)
**''Tumeurs''
**''Mucoviscidose''
**''Pneumonies'' nécrosantes
**''Marfan'' et ''Ehler-Danlos'' et autres ''connectivites''
*Les patients ont une mauvaise réserve pulmonaires, donc cette forme de pneumothorax est plus ''dangereuse''.
''Pneumothorax Traumatique''
*le pneumothorax traumatique est le plus souvent ''iatrogène'', mais des traumatismes externes peuvent aussi exister.
*les ''Causes Traumatiques'' sont:
**''Fracture de cote''
**''Corps-Etranger''
**''Rupture des bronches'' ou de l'''oesophage''
*les ''Causes Iatrogènes'' sont:
**''Thoracocentese''
**''Voie Veineuse Centrale''
**''Ponction pleurale'' et transthoracique
**''Ventilation''
**''Biopsie pulmonaire''
**''Rupture de l'Oesophage''
!!Clinique
*Le patient aura une ''Douleur Brutale Ipsilatérale'' de type pleurésie accompagnée d'une ''Dyspnée Aigue''.
*Un PNO de <15% aura un status normal en général sinon on trouvera:
*''Absence de murmure vésicualire''
*''Tympanisme''
*Diminution du frémitus et des ampilations thoraciques
!!Diagnostic
*la ''Rx thorax'' pourra montrer le pneumothorax
*''MAIS ''un ''Pneumothorax Compressif'' n'est pas à diagnostiquer par une radio mais par la ''clinique'', et il faut le ''traiter immédiatement'' par décompression à l'aiguille.
!!Traitement
''Petit PNO <15% asymptomatique''
*Laisser en ''observation'' le patient pendant 24h
*Le PNO se résout généralement spontanément
''PNO >15% ou en progression''
#''Drainage pleural'':
#* ''//2EIC antérieur//'' (médi-oclaviculaire)
#* ou //''4EIC latéral''// (médio-axillaire)
#''Verification RX'' de la ré-expansion
#''Drain 48h''
#''Verification RX'' de la ré-expansion
#''Ablation du drain''
# Eviter avion, plongée sous-marine, altitude >1000-1400 m, sport pendant 1 mois
{{pneumothorax_drain_pleural.jpg}}
undefine
undefine
undefine
undefine
undefine
!!Définition *Maladie inflammatoire ''auto-immune'' chronique, caractérisée par une ''synovite'' avec ''érosion du cartilage'', atteignant de façon ''symétrique'' des ''articulations périphériques''. *Elle comprend aussi des ''atteintes extra-articulaires'' des tissus *Elle comprend notamment deux ''auto-anticorps'': le ''facteur rhumatoïde'' et l’anti-''CCP'' !!Etiologie *L’étiologie ''est inconnue'', mais il y a un ''prédisposition génétique'' avec les allèles ''HLA-DR'' *Il y a aussi des ''facteurs environnementaux'' comme le ''tabac'' qui augmente le risque de 20x !!Epidémiologie *C’est l’arthrite ''inflammatoire la plus fréquente'' *Elle ''touche plus les femmes'' que les hommes !!Clinique *Le ''Stade initial'' commence par des ''polyarthralgies symétriques'' avec une ''progression insidieuse'' *Les articulations touchées sont surtout les ''petites articulations'' (MCP, IPP), ''epargne des IPD'', qui présentent des ''[[tumefactions|polyarthrite_rhumatoide_tumefaction.jpg]]'' et sont douloureuses la nuit et au réveil, avec une ''raideur matinale >1h'' qui est ''calmée par l'activité physique'' *__Rappel:__ Les ''douleurs inflammatoires'' réveillent la nuit, font mal au repos et s'atténuent à l'activité, tandis que les ''douleurs mécaniques'' font mal à l'activité et s'améliorent au repos et la nuit *En plus des symptômes articulaires, la PR débute aussi avec des ''symptomes généraux'' comprenant la ''fatigue'', des ''myalgies'' et une ''perte de poids'' *Par la suite la maladie évolue en ''poussées-rémissions'', avec progressivement une perte de mobilité, une instabilité et surtout des ''déformations articulaires'' comprennant la ''[[déviation ulnaire des MCP|polyarthrite_rhumatoide_deviation_ulnaire.jpg]]'', les ''[[déformations en col de cygne|polyarthrite_rhumatoide_deformations.jpg]]'' (flexion MCP, extension IPP, flexion IPD) et les ''[[déformations en boutonnière|polyarthrite_rhumatoide_deformations.jpg]]'' (flexion IPP, extension IPD) *Les ''manifestations extra-articulaires'' principales comprennent les ''[[nodules rhumatoïdes|polyarthrite_rhumatoide_nodules.jpg]]'' au niveau de la peau, des [[poumons|polyarthrite_rhumatoide_rx_nodules_pulmonaires.jpg]] et du péricarde, les ''ténosynovites'' des extenseurs et fléchisseurs des doigts, le ''[[syndrome sec|Syndrome de Sjögren]]'' du à une inflammation des glandes lacrymales et salivaires, la ''kératoconjonctivite'', la ''vasculite rhumatoïde'' avec des purpura, le ''tunnel caprien'' et ''tunnel tarsien'', la ''subluxation atlanto-axiale'', les ''épanchements pleuraux et péricardiques'' ainsi que l'amyloïdose ''rénale'' et l'anémie ''inflammatoire''. !!Investigations *''Labo'': dosage du ''facteur rhumatoïde'' (peu spécifique) et des anticorps ''anti-CCP'' (bonne spécificité). L'Hb est diminuée, les ''plaquettes'' et la ''VS et CRP'' sont augmentées, *''Rx de la main'': montrera une ''ostéopénie périarticulaire'' avec des ''érosions articulaires'', atteignant surtout les ''MCP'' et ''IPP'' avec [[déformations|polyarthrite_rhumatoide_rx_mains.jpg]]. On peut aussi voir une ''érosion de la styloïde ulnaire''. *La Rx cervicale montrera la [[subluxation atlanto-axiale|polyarthrite_rhumatoide_rx_cou.jpg]] avec élargissement de l'espace entre la dent de l'axis et l'arc antérieur de l'atlas !!Diagnostic *Les ''critères'' comprennent un certain nombre de points basés sur les ''articulations touchées'' (surtout les petites), la ''présence de FR et anti-CCP'', l'élévation de la ''VS et CRP'' ainsi que la ''durée >6semaines'' des symptomes !!Traitement *Le ''But'' est une ''quasi-rémission'' , avec soulagement des douleurs et raideurs et limitation de la progression de la maladie *Le ''Traitement de fond'' commence par les ''agents de rémission (ADR'') avec d'abord le ''Métothrexate'' qui prend environ 8 semaines pour agir. S'il ne marche pas seul, on ajoute en ''association'' l'Hydroxychloroquine, la ''Sulfasalazin'' et le ''Leflunomide'' *Si le patient ne réagit pas à ce traitement de fond, on ajoute en association les ''agents biologiques'' comme l'Anti-''TNF (etanercept, infliximab)'' ou l'Anti-''CD20 (rituximab)'' *Le ''Traitement de l'inflammation et de la douleur'' se fait par des ''AINS'' et des ''Corticostéroïdes'' à court terme. *Les ''Traitements chirurgicaux'' interviennent lors de degats articulaires. Les options comprennent ''synovectomie, arthroplastie'' et ''arthrodèse'' *Le patient sera aussi soumis à un suivi régulier. Il pourra aussi faire de la physiotherepie et de l'ergotherapie.
undefine
undefine
undefine
undefine
undefine
undefine
undefine
!! Définition * La ''polycythémie vraie'' (ou maladie de Vaquez, polycythemia rubra vera) est une maladie des ''cellules souches hematopoïétiques'' amenant à une ''augmentation des Globules Rouges'' (Erythrocytose) de façon indépendante de l'EPO. *Il s'agit d'un des grands [[Syndromes Myéloprolifératifs]]. * Il en résulte une ''viscosité augmentée'' du sang, ce qui amène à des complications microvasculaires comme les ''thromboses''. *La polycythémie est aussi associée à la ''mutation JAK2 V617F'' (un des deux critères majeurs du diagnostic). !! Clinique * L'hyperviscosité provoque des ''céphalées'', une ''fatigue'', des ''vertiges'' ainsi que des ''troubles visuels''. * On trouve aussi un ''prurit aquagène'' (déclenché par l'eau chaude) ainsi qu'une [[erythromegalgie|polycythemie_vraie_erythromegalgia.jpg]] (mains et pieds rouges et brûlants, due à des microthromboses) et une ''splénomégalie''. * On trouve aussi des ''saignements'' (diathèse hémorrhagique) due aux ''troubles des plaquettes'' qui accompagnent la maladie. !! Investigations *''Critères majeurs'' (doivent être présents) ** Une ''hemoglobine'' à ''>185 g/L (h)'' ou ''>160g/L (f)'' ** La présence d'une ''mutation JAK2 V617F'' ou autre JAK2-mutation *''Critères mineurs'' (au moins un) ** Une ''biopsie de moelle'' montrant une ''accelération de l'hématopoïèse dans les trois lignées''. ** des ''taux bas d'EPO'' ** une ''croissance in vitro'' des GR en culture, sans EPO. !! Traitement * Faire régulièrement des ''saignées'' (phlebotomies) afin de diminuer l'hématocrite <45% * donner de l'''Aspirine low dose'' pour éviter les complications thrombotiques
undefine
{{reins_polykystiques.jpg}}
!!Généralités
*la ''maladie des reins polykystiques'', ou //Polykystose rénale// ou ''ADPKD'' //(Autosomic Dominant Polycystic Kidney Disease)// est une ''maladie héréditaire'' avec une ''transmission dominante ''caractérisée par la formation de multiples ''kystes'' au niveau des deux reins.
* La taille dess kystes ''augmente avec le temps'' et la ''diminution du parenchyme fonctionnel'' conduit à une ''diminution de la fonction rénale''.
*les ''complications''comprennent:
**''hypertension''
**''hématurie''
**''Insuffisance rénale''
**''compression d'organes voisins'', entrainant des symptômes digestifs
*les reins peuvent avoir une taille géante
*les Kystes peuvent aussi toucher le ''foie'', le ''pancréas'' ou la ''rate''.
*il peut y avoir une incidence élevée d'''anévrysmes cérébraux'', avec risque de HSA
*Le ''diagnostic'' passe par l'''US'' ou encore le ''CT'' ou ''IRM''
*Il n'y a pas de ''Traitement'' curatif. on peut drainer les kystes symptomatiques ou traiter les infections.
*il existe aussi l'//''ARPKD''//, une maladie à transmission récessive touchant plutot les ''//enfants//''.
{{ADPKD_us.jpg}}
!!Définition
*La Polymyalgia Rheumatica est une ''maladie inflammatoire chronique'' caractérisée par une atteinte de la ''colonne cervicale'' et des ''articulations proximales (ceinture scapulaire'' et ''ceinture pelvienne'')
*Elle est ''fortement associée à l’artérite temporale de Horton''. 15% des patients avec PMR ont un Horton.
*Elle est plus fréquente chez les ''femmes'' et touche les patients de >''50ans''. Elle n’implique pas de faiblesse musculaire.
!!Clinique
*Elle se manifeste par des ''douleurs et rigidité des articulations proximales''. Les douleurs sont symétriques, font mal la nuit et induisent une raideur matinale.
*A l’examen clinique le patient présente des ''myalgies des proximités'', mais sans faiblesse ni atrophie associée.
*Le patient a souvent d’autres symptômes plus généraux comme une ''dépression'' ou une ''perte de poids''.
{{polymyalgia_rheumatica_schema.jpg}}
!!Investigations
''Labo''
*La ''VS'' et ''CRP'' sont augmentées. Au niveau de la ''FSC'' on retrouve souvent une ''anémie inflammatoire hyporégénérative''.
*Le FR et CCP sont négatifs
!!Diagnostic
*Les ''critères diagnostic'' impliquent ''3 critères de base + 1 critère clinique''
*Les ''3 critères de bases'' sont:
*#Un ''patient >50 ans''
*#Des ''douleurs bilatérales aux épaules''
*#Et une ''CRP augmentée''
*Les ''critères cliniques'' sont:
*#Une raideur matinale >45min
*#des douleurs de hanches
*#Le FR ou CCP négatifs
!!Traitement
*Le traitement sur base sur la ''Prednisone''. A donner agressivement au début et lors des rechutes, puis réduire à une dose moindre. La durée du traitement dépendra de la clinique, mais ''dure souvent 2 ans''.
*Il faut aussi faire un ''suivi clinique et labo du patient'' régulier, et rester attentifs aux ''signes d’artérite temporale''.
undefine
undefine
{{polypes_colorectaux.jpg}}
!!Généralités
*Les ''polypes du colon'' sont soit ''pédonculés'' sont ''sessiles''. Ils sont très ''fréquents'' surtout dans la population âgée.
*On le trouve le plus souvent dans la région ''recto-sigmoïde''.
*Ils sont généralement ''asymptomatiques'' mais peuvent parfois ''saigner'' ou faire des ''obstructions'' ou un ''ténesme''.
*On les détecte le plus souvent lors des ''coloscopies'' de dépistage du cancer colo-rectal.
*Ils sont classées en ''non-néoplasiques'' et en ''néoplasiques''
''Non-néoplasiques'' //(tumeurs bénignes)//
*''hyperplasique'', les plus fréquents
*''pseudopolypes inflammatoires'' dans le MICI
*''polypes juvéniles''
''Néoplasiques'' //(tumeurs bénignes avec potentiel de transformation maligne)//
*''adénomes'' majoritairement
*lipomes
*[[carcinoïdes|Tumeur Carcinoïde]]
*hamartomes
!!Traitement
*''ablation'' du polype lors de la colonoscopie
undefine
undefine
![ext[polytrauma.pdf|./pdf/polytrauma.pdf]] <!-- Texte caché pour la recherche Trauma Traumatisme Defenestration Défénéstration AVP Voie publique Accident ABC CAB ABCD ACR CPR BLS Life support Basic Trauma polytraumatisé polytrauma traumatisme ceinture pelvienne ressucitation fluides ABCDE -->
!!Indications *''Diagnostique'' pour établir l'origine de l'épanchement pleural *''Thérapeutique'' pour simplement drainer la collection !!Contre-indications *''Trouble de la crase (INR>1.5, TP<50%, plaquettes <25k)'' *Si ventilation positive (CPAP, VNI) *Infection sur le signe de ponction *Patient non-compliant !!Materiel *En salle de traitement avec blouse et gant sterile, masque, echo *champ sterile *recipient + robinet 3 voies *lidocaine 1% 10ml *seringue 10ml (anesth) ± seringue 20mil pour culture *aiguille rose (pour le matériel) *aiguille violette (anesthesie peau) *aiguille jaune (anesthesie tissus) *catheter de drainage spécial !!Avant le geste *Controle crase (INR<1.5, thrombocytes>25k) *Rx thorax *Consentement du patient *Labo avec Hb,Hcrt,LDH,Protéines,albumine,glucose *Installer le patient assis avec les bras en appui sur la table !!Geste #Reperage US du point de ponction #Mettre gants stériles #Desinfection du dos du patient, puis pose du champ #Anesthesie sous-cutanée (aiguille violette), près de la partie sup. de la côte d'en bas (a la lidocaine) #Anesthesie des tissus puis du perioste (aiguille jaune): avancer en aspirant, en direction de la partie sup de la côte du bas. injecter un max une fois en contact sur le perioste #Poursuite de l'aiguille en aspirant jusqu'à arrivée du liquide. Une fois aspiré, enlever l'aiguille en marquant la profondeur avec le pouce #Faire le meme trajet avec le dispositif de ponction avancer en aspirant. #Une fois le liquide obtenu, avancer le tube et retirer l'aiguille, BIEN BOUCHER le bout du tuyau pour pas de Pneumothorax si on detache! #Placer un pansement occlusif !!Complications *''Saignement'' *''Pneumothorax'' *Odeme de reexpansion: ne pas enlever >1500ml *Infection cutanée *Empyème *Perforation du foie *Malaise vasovagal *Dissémination de tumeur
undefine
!! Généralités *les ''Porphyries'' sont des ''Troubles héréditaires'' du ''métabolisme des Porphirines '', qui sont impliquées dans la ''synthèse de l'hème''. *On distingue surtou la ''Porphyrie Cutanée Tardive'' et la ''Porphyrie Intermittente Aiguë''. !! Porphyrie Cutanée Tardive *La ''Porphyrie Cutanée Tardive'' (PCT) est la forme la plus ''fréquente''. Elle atteint surtout la ''peau''. *Elle est due à un déficit d'uroporphyrinogen decarboxylase *Elle est à l'origine du ''//Mythe du Vampire//'', qu'on peut expliquer par sa clinique particulière: |!Mythe|!Clinique| |//Les vampires sont des hommes//|La maladie touche souvent les ''hommes''| |//Les vampires brûlent au soleil//|Les patients ont une ''hypersensibilité cutanée'', avec ''photosensibilité'' et ''bulles séreuses hémorrhagiques'', typiquement au visage et [[aux mains|porphyrie_cutanée_tardive_mains.jpg]].| |//Les vampires boivent du vin rouge et du sang//|La maladie est associée à l'''Alcool'' et à l'''Hémochromatose'', le traitement passe par des ''saignées'' et l'arrêt des substances incriminées| |//Les vampires séduisent de nombreuses femmes//|La maladie est associée à ''HCV'' et aux ''Oestrogènes''| |//Les vampires pissent rouge// (ça je l'ai inventé)|Le patient présente des ''urines foncées''| !! Porphyrie Intermittente Aiguë *La ''Porphyrie Intermédiaire Aiguë'' est la forme la plus ''grave''. Elle atteint surtout le ''Foie''. *Elle est due à un déficit de Uroporphyrinogèn- décarboxylase *Elle touche surtout les ''Femmes'' *Elle peut être déclenchée par les'' oestrogènes'', l'''alcool'' et d'autres ''médicaments'' *Elle s'exprime surtout par des ''douleurs abdominales'' et peut faire des ''atteintes neuro-psychiatriques''.
!!Mastite
*''Définition'' : inflammation de la glande mammaire
*''DD'' : carcinome inflammatoire, éctasie du canal mammaire (femmes post-ménopause surtout = bouchon d'un canal mammaire)
*''Types'' :
{{mastite.jpg}}
!!!Crevasses
*''Définition'' : Plaie traumatique au mamelon, essentiellement les premiers jours de l'allaitement
* ''Facteurs'' ''favorisants'' :
**Mauvaise mécanique de succion ou mauvaise position de l’enfant,
**Macération ou dessèchement excessif du mamelon,
**Mauvaise hygiène (en général par excès avec neutralisation de la substance lubrifiante et désinfectante sécrétée par glandes sébacées)
*''Clinique'' : gerçure sensible -> ulcération (mamelon rouge vif, saignement et douleur ++ lors des tétées), porte d'entrée microbienne
*''Complications'' : lymphagite, abcès
*''Traitement'' : Favoriser cicatrisation (séchage, interrompre la succion dès la fin de la tétée). Si nécessaire laisser le sein au repos pendant 6-12h
!!Inversion utérine
*''Définition'' : inversion de l'utérus à travers le cervix ± introit vaginal
*''Etiologie'' : iatrogène (lors de la délivrance si on tire trop), tocolytiques, surtout si multipare (ligament utérin lax)
*''Présentation'' ''clinique'' : réponse vasovagal profonde avec bradycardie, vasodilatation et choc hypovolémique (choc disproportionné p/r à la perte de sang maternelle)
*''Traitement'' :
**ABC (cristalloides IV)
**Tocolytiques ou nitroglycérine IV pour relâcher l'utérus et faciliter la réduction.
**Réduire l'utérus sans enlever le placenta, puis enlever doucement le placenta.
**Ocytocine IV une fois que utérus en place
!!EF du post partum
*''Définition'' : EF >38° durant 2 jours des 10 premiers jours du post-partum, excepté J1.
*''Etiologie'' : endométrite, infection de plaie (CS, épisiotomie), mastite/engorgement, ITU, atélectasie, pneumonie, thrombophlébite, TVP
{{etiologie-postpartum-EF.jpg}}
*''Traitement'' :
**Infection : ATB empirique (endométrite : clindamicine + gentamicine IV) (mastite : cloxacilline ou céphalexine) (infection de plaie : cephalexine)
**TVP : anticoagulation
!!!Endométrite
*''Définition'' : Infection du myomètre utérin et des paramètres
*''Clinique'' : EF, frissons, douleur abdominale, douleur utérine, pertes malodorante, lochie (pertes vaginale du post partum).
*''Facteurs de risque'' : CS, chorioamnionite intrapartum, travail prolongé, rupture des membranes prolongées, multiples examens vaginaux.
*''Investigations'' : hémocultures, cultures génitales
*''Traitement'' : ATB oral ou IV si sévère
**Prophylaxie de l'endométrite post CS : ATB dès clampage du cordon, 1-3 doses de céphazoline.
!!Dépression du post partum
*''Définition'' : Dépression majeure des femmes dans les 6mois après accouchement
*''Fréquent'' (10-15%, risque de récurrence 50%)
*''FR '': ATCD personnel ou AF+ de dépression, dépression ou anxiété préénatale, situation de vie stressante, peu d'entourage, grossesse non désirée, enfant malade ou avec des coliques.
*''Présentation'' ''clinique'' : labilité émotionnelle, tristesse, augmentation de la sensibilité à la critique, fatigue, irritabilité, anxiété, insomnie, mauvaise concentration, durant ''≥2 semaines'' ou si les ''symptômes'' des 2 premières semaines sont ''sévères'' (désintérêt pour le BB, idées de suicide ou infanticide)
*''Traitement'' : antidépresseurs, psychothérapie
*''Pronostic'' : peut avoir des effets à long terme car interfère avec la relation mère-BB
!!Psychose du post partum
*''Définition'' : apparition de symptômes psychotiques durant 24-72h durant le premier mois du post-partum (peut être dans le contexte d'une dépression)
*''Rare''
!!Incontinence urinaire
*Un ''prolapsus'' du ''plancher'' ''pelvien'' peut arriver après un AVB (le risque est augmenté avec un accouchement instrumenté ou un travail prolongé)
*Induit une incontinence urinaire de ''stress'' ou de type ''urgence''.
*''Traitement'' : phsyiothérapie, pessaires, modifications du style de vie ou bandelette vaginale.
!!Incontinence fécale
*Lors d'accouchement AVB, il peut y avoir une déchirure du périnée allant jusqu'aux muscles du sphincter anal.
*Risque d'incontinence fécale
*''Traitement'' : chirurgie
![ext[dermato_parasitoses.pdf|./pdf/dermato_parasitoses.pdf]] <!-- Texte caché pour la recherche Parasitoses cutanées De tête GEN : parasite translucide/rouge si gorgé de sang, sans ailes. PAS un vecteur d’autres maladies. Survie hors scalp <3j. CLIN : prurit ! Excoriations sur nuque, lentes collées à la base du cheveu. Risque de surinfection. TTT : toute la famille → shampoing perméthrine (R possible), répéter après 10j + désinfecter literie à 60°. Morpions GEN : mini parasite peu mobile. Sur le pubis ± poitrine, axillaire, cils (enfants). CAVE : MST (transmission par contact physique proche) CLIN : prurit modéré, lentes et poux visibles. TTT : perméthrine ou lidane + désinfecter literie à 60°, ttt partenaire. MST, donc proposer dépistage syphilis et VIH. CAVE : enfants attrapent sur cils : vaseline, enlever lentes à la pince + invermectine PO. De corps GEN : Rare en suisse, surtout si SDF ou problème hygiène. Se retrouvent sur les habits et literie. CLIN : Excoriations sur tout le corps CAVE : Peuvent transmettre typhus et rickettsiose. GEN : acarien (sarcopte), contagion ++ (literie). 1 er contact : prurit après 2-4sem. 2 è contact : prurit dans les 24h. CLIN : prurit familial, surtout la nuit. Sillons entre les doigts, nodules OGE, papules sur les aréoles. Localisations typiques selon âge. INV : clinique, sillons d’encre, prélèvement sarcopte. TTT : tout l’entourage, ivermectine PO + literie. CAVE : PAS une MST. Impétignisation possible. Gale norvégienne : gale crouteuse. Plaque squameuse très bien délimité (remplit de sarcoptes !) chez patient immunosupprimé. Contagion ++. DD : psoriasis. TTT : ivermectine + vaseline salicylée (hyperkératose) Poux Gale -->
![ext[Preeclampsie.pdf|./pdf/Preeclampsie.pdf]] <!-- Texte caché pour la recherche Peut-on prédire et prévenir la pré-éclampsie? Pr Olivier Irion Plan Justification par la gravité: vignettes cliniques Définitions Prévalence Facteurs de risque Physiopathologie Doppler Biologie Conditions du dépistage: fiabilité, prévention Conclusion Mme AI, 38 semaines, 17 mars 2002 TAH 190/110 Céphalées, barre épigatrique Oedèmes, ROT++ Protéinurie +++ MgSO4 Nepresol Péridurale Césarienne AG SFA (échec péridurale): Fille 2240 g HELLP post-partum: Thrombos 60 G/L, ASAT 306 ALAT 212 Mme AI, 17 mars 2002 14 heures post-op TAH ≈ 150/90 Somnolence + réveillable à la douleur Hémiparésie droite Hématome frontal G Effet de masse Oedème péri-lésionnel 18 mars 2002 Crâniotomie fronto-médiane Résection de l’hématome Mme SB, 28 semaines, le 4 mai 2001 ATCD: Thrombose du sinus longitudinal supérieur Ramollissement hémorrhagique frontal D Déficit en protéine C Fraxiparine 0,4 ml en prophylaxie 28 SA: 180/110, stick urinaire + Maturation pulmonaire fœtale, Trandate iv Le 7 mai, barre épigastrique, céphalées, TAH 200/110 Césarienne sous rachianesthésie, MgSO4 Crise tonico-clonique au 1er jour post-partum Mme SB, le 8 mai 2001 Hémorragie occipitale droite de 4 x 5 x 3 cm Hémianopsie latérale homonyme gauche Hémiparésie gauche -->
@@background-color:skyblue; !''Prescrptions'' @@ <<list-links "[tag[Prescriptions]sort[title]]">>
undefine
undefine
{{Proctite.jpg}}
!!Généralités
*La ''Proctite'' correspond à une ''inflammation du rectum et de l'anus''
*les ''Causes'' sont diverses:
**''Proctite idiopathique''
**''Proctite post-radique''
**''MICI''
**''MST'' lors de sexe anal (gonorrhée, chlamydia, syphilis, HSV)
*Les ''Symptomes'' sont
**''difficultés à la selle'' avec ''sensation de résidu'' dans le rectum
**''saignements''
**''diarrhées''
**''douleur abdominal''
**Emission de mucus
*Le ''Diagnostic'' se fait par observation avec un ''proctoscope'', avec une ''biopsie''
*le ''Traitement'' dépend de la cause. On met souvent des:
**''AINS topiques''
**''Corticoïdes topiques''
**''Metamucil'' pour réguler le transit
undefine
undefine
undefine
{{prolapsus_rectal.jpg}}
!!Généralités
*le ''prolapsus rectal'' est une ''protrusion '' d'une partie ou de toute la ''muqueuse rectal'' à travers l'anus
*Il survient surtout dans les ''âges extremes: >5ans ou >85 ans'' et touche majoritairement les ''femmes''.
*il est favorisé par de ''fortes poussées'' et par les ''constipations''
*le ''traitement'' peut être ''manuel'' ou ''chirurgical'' suivant les cas
undefine
![ext[pronation_douloureuse.htm|./html/pronation_douloureuse.htm]] <!-- Texte caché pour la recherche La pronation douloureuse par Pierre Carlioz Chirurgien orthopédique. La pronation douloureuse est une urgence pédiatrique fréquente et bénigne qu'il faut connaître pour y penser le jour venu. Bien des attentes inutiles et des radiographies superflues peuvent ainsi être évitées. I. Mécanisme et lésion Un traumatisme mineur est toujours à l'origine de la pronation douloureuse. C'est une traction un peu brusque sur la main alors que le coude est en extension et que l'avant-bras, la main, sont en pronation. Le ligament annulaire qui fait le tour de la tête radiale reste inséré par ses deux extrémités au cubitus mais il se détache partiellement du radius : il peut alors remonter et s'interposer entre la tête radiale et le condyle huméral. Tant que le ligament annulaire n'a pas repris sa place normale, la pronation reste douloureuse. Il. Tableau clinique Un jeune enfant arrive aux urgences a (ou elle a, car c'est plus souvent une fille qu'un garçon) entre 2 et 4 ans, encore que ces limites d'âge ne soient pas strictes. Il est cependant exceptionnel de voir un enfant de plus de 5 ans ou de moins de 1 an avec une pronation douloureuse. Il souffre dès qu'il veut se servir de sa main et il la soutient avec sa main saine, gardant le coude également douloureux à demi fléchi. D'autres enfants laissent leur coude étendu pendre le long du corps. Dès que l'on essaie de bouger son coude ou sa main pour les examiner, l'enfant pleure et se défend. Il souffre et regarde son coude ou son poignet lorsqu'on lui demande de montrer là où il a mal. Cependant, il n'y a aucune déformation, aucun gonflement de la racine à l'extrémité du membre supérieur douloureux. L'enfant est en bonne santé, il n'a pas de fièvre. Tout ceci rend peu probable une fracture ou une infection osseuse ou articulaire. En reprenant doucement l'examen tout en essayant de distraire l'enfant et de le rassurer, en le laissant assis sur les genoux de la personne qui l'a accompagné, on remarque que la mobilisation de l'avant-bras en pronation ou en supination est douloureuse. Le doigt qui remonte le long du radius depuis le poignet provoque une douleur juste au-dessous du coude. Si l'on apprend que la douleur a été provoquée par une brusque traction sur la main de l'enfant pour lui éviter une chute ou pour le forcer à marcher plus vite, la pronation douloureuse est certaine. La personne qui donnait la main à l'enfant a parfois senti un déclic au moment du geste malheureux. Une radiographie ne montrerait rien d'anormal. Elle n'est utile que si l'on garde un doute d'une fracture tassement du radius distal, ou d'une fracture sans déplacement des diaphyses de l'avant-bras. III. Le traitement Il est très simple, mais un peu douloureux. Comme le succès n'est pas toujours acquis dès la première tentative de réduction, il est sage de faire inhaler à l'enfant quelques bouffées d'Antonox®. Pour que le ligament annulaire regagne son emplacement anatomique, il faut porter l'avant-bras en flexion et en supination. On le fait assez rapidement tout en appuyant de dehors en dedans sur la tête radiale. Si l'on perçoit une sorte de déclic, c'est que la réduction est obtenue, mais ce déclic n'est pas constant, même en cas de succès. Dans l'incertitude, on refait une deuxième fois le mouvement de réduction en essayant d'obtenir une flexion complète en supination. Seule la disparition de toute douleur, le retour à une mobilité spontanée de la main et de l'avant-bras peut rassurer tout le monde. Il faut donc garder l'enfant quelques 10 à 15 minutes dans la salle d'attente avant de le laisser repartir à la maison. Les parents doivent être bien avertis du risque de récidives, mais aussi de la bénignité de cette pronation douloureuse. Il n'y a jamais de séquelle, de raideur ni de douleur. C'est uniquement dans les cas de récidives multiples, prouvant une certaine instabilité du ligament annulaire qu'une immobilisation du coude à angle droit par une écharpe ou une attelle plâtrée pendant 2 à 3 semaines est justifiée. Développement et Santé, n° 157, février 2002 -->
undefine
![ext[prostatite.pdf|./pdf/prostatite.pdf]]
<!-- Texte caché pour la recherche
Prostatite 1 .2
[aiguë: N41.0; chronique: N41.1]
Gén:
DD: Clas:
La prostatite se développe par infection ascendante.
En cas de récidive de prostatite c'est généralement le même germe incriminé.
En pratique clinique La prostatite est la cause la plus fréquente des infections urinaires chez l'homme.
Syndrome douloureux pélvien chronique = syndrome inflammatoire sans infection.
1. Prostatite aiguë Clin: Symptômes d'une infection urinaire: dysurie, pollakiurie Obstruction des voies urinaire et rétention urinaire par gonflement de la prostate Fièvre élevée Douleurs: prostate/périnée > scrotum/testicules > pénis/vessie > colonne lomb. Examen clinique
- La prostate est svt. très douloureuse, sensible et tendu/dure à la palpation.
La présence de fluctuations à la palpation doit faire évoquer des abcès.
Le massage prostatique en cas de prostatite aiguë est contre-indiqué, car:
a) Le germe peut être démontré dans l'urine; ainsi, le massage n'est pas nécessaire.
b) Le massage prostatique peut induire une bactériémie! Examen urinaire: SMU-DCA (status/sédiment +culture)
At!: Tx:
1. Patients < 35 ans et sexuellement actifs, patients homosexuels Gén: Germes typiques:
- Gonocoque
- Chlamydia trachomatis Tx: Tx de choix (bithérapie):
- Ceftriaxone ..........250 mg IM (en dose unique) + Doxycycline ...... 100 mg PO bid x 10 j Tx alternative:
- Cefixime ............. .400 mg PO en dose unique + Doxycycline ...... 100 mg PO bid x 10 j Il. Patients 2: 35 ans, patients homosexuels Gén: Germes typiques:
- E. coli
- Autres entérobactéries Tx: Ciprofloxacine .......... 500 mg PO bid x 10-14 j§ évtl. au début IV: ..... .400 mg IV q 12 h Ofloxacine ................ 300 mg PO bid x 10-14 j§ Lévofloxacine .......... 750 mg IV ou PO q 24 h x 10-14 j§ TMP/SMX ................ 1 co «FORTE» (160 mg/800 mg) bid x 10-14 j§ Rem: Durée de !'AB-thérapie:
Certains experts recommandent 3-4 semaines d'AB-thérapie. Lorsque le patient répond bien au Tx initial et la clinique est peu sévère, une quinolone (Ofloxacine, Ciprofloxacine, Lévofloxacine) ou le TMP/SMX x 10 jours peut être suffisant {ad. avis spécialiste).
2. Prostatite chronique Gén: Germes svt. incriminés: enterobacteries (80 %), entérocoques, Pseudomonas Clin: Infections urinaires récidivantes (entre deux IU, svt. asymptomatique) Durée des symptômes > 3 mois Examen clinique: La prostate est svt. normale à la palpation.
Att: En cas de susp. d'une prostatite chronique, le test des 4 verres peut être utile afin de prouver l'existence d'un germe ou afin de différencier la clinique par rap- port à un syndrome douloureux pélvien chronique (SDPC).
En cas de susp. de maladie sexuellement transmissible il faut chercher le gono- coque et la Chlamydia trachomatis dans les urines (par PCR Assay).
Tx: Initiale: AB-thérapie empirique: Quinolone ou TMP/SMX (dosages ci-dessus) puis adapter à !'AB-gramme.
Durée totale de !'AB-thérapie: 4-6 sem Si la culture urinaire est négative, l'AB empirique sera uniquement continuée si le patient améliore ses symptômes(--> stop AB après 2 sem le cas échéant).
3. Prostatite récidivante Gén: Malgré une AB-thérapie adéquate et bien menée, les récidives, en présence de calculs prostatiques, sont fréquentes.
§
Alt: Ad. consultations (infectio + urol) Données contradictoires par rapport à la durée le !'AB-thérapie:
- Prostatite aiguë: jusqu'à 4 semaines
- Prostatite chronique: 6-12 semaines.1
-->
{{HMDP_descellement.jpg}}
!!Examen
*un ''uptake de HMDP'' est normal dans les mois suivant la chirurgie, mais devient ''anormal >1 an post-chirurgie''.
*des ''douleurs post-prothèses'' peuvent être attribuées à un ''descellement'' ou alors à une ''infection'', ce qui implique des prises en charge différentes.
*Dans les deux cas on verra un [[uptake péri-prothétique|HDMP_prothese.jpg]], mais on ne peux pas toujours distinguer avec l'image scintigraphique seule les deux pathologies. Pour cela il faut utiliser des ''//traceurs de globules blancs//''.
!!Traceur
*le ''TC99m-HMDP'' //(HydroxyMethylene DiphosPhonate, dit aussi HDP)// est utilisé. Il donne une[[ image détaillée|HMDP_normal.jpg]] de l'anatomie osseuse. Il possède une demi-vie de 6h.
*Les ''//cristaux d'apatite Ca,,10,,(PO,,4,,),,6,,(OH),,2,,//'' constituent la structure inoragnique osseuse. Le HMDP va se déposer dans le minéral.
*Le HMDP une fois injecté va rapidement se distribuer dans le volume extracellulaire et se [[déposer à la surface de l'os|HMDP_uptake.jpg]].
*Il sera plus concentré dans les zones à blood flow augmenté mais au final il se distribuera dans les os avec une ''formation/réparation osseuse augmentée'', comme par exemple des [[métastases|HMDP_metastases.jpg]].
*50% du traceur sera pris par les os, le reste sera excrété par les reins
*les clichés sont pris généralement 2-4h post-injection pour avoir une bonne phase tardive osseuse.
*On peut faire soit un [[protocole WB |HMDP_protocole_wb.jpg]]avec clichés 2-4h post-injection, soit un [[protocole 3 phases dynamique|HMDP_protocole_3phases.jpg]] qui sera [[centré sur le site|HDMP_3phases_exemple.jpg]] (phase artérielle 5s, phase tissulaire précoce 5min, phase osseuse tardive 2-4h)
*Les[[ spots views|HMDP_spot_view.jpg]] ont l'avantage d'être plus détaillés anatomiquement.
*les[[ camera SPECT |HMDP_SPECT.jpg]]peuvent faire des images planaires (caméra fixe) ou des images 3D (caméra en rotation)
!!Exemples
<$button popup="$:/HMDP_descellement_ex.jpg" >
[img width=64 [images/HMDP_descellement_ex.jpg]]
</$button><$reveal type="popup" state="$:/HMDP_descellement_ex.jpg"><div class='tc-tiddler-frame'>
{{HMDP_descellement_ex.jpg}}
multiples mx osseuses en régression par rapport aux comparatifs
asymetrie G<D , découverte fortuite, ATCD IU à l'âge de 5 ans, fonction relative G: 8%
</div>
</$reveal>
Descellement aseptique
<$button popup="$:/HMDP_infection_ex.jpg" >
[img width=64 [images/HMDP_infection_ex.jpg]]
</$button><$reveal type="popup" state="$:/HMDP_infection_ex.jpg"><div class='tc-tiddler-frame'>
{{HMDP_infection_ex.jpg}}
multiples mx osseuses en régression par rapport aux comparatifs
asymetrie G<D , découverte fortuite, ATCD IU à l'âge de 5 ans, fonction relative G: 8%
</div>
</$reveal> Infection péri-prothétique
<$button popup="$:/7.11.16_prothese.jpg" >
[img width=64 [images/7.11.16_prothese.jpg]]
</$button><$reveal type="popup" state="$:/7.11.16_prothese.jpg"><div class='tc-tiddler-frame'>
{{7.11.16_prothese.jpg}}
Probable fissure, PTH G douloureuse depuis 2 ans
</div>
</$reveal>
7.11.2016: Probable fissure
undefine
{{pseudarthrose_nm.jpg}}
!!Définition
*la ''pseudarthrose'' correspond à l'absence de consolidation d'une fracture, avec deux segments qui bougent encore et un cal mal formé.
!!Traceur
*le ''TC99m-HMDP'' //(HydroxyMethylene DiphosPhonate, dit aussi HDP)// est utilisé. Il donne une[[ image détaillée|HMDP_normal.jpg]] de l'anatomie osseuse. Il possède une demi-vie de 6h.
*Les ''//cristaux d'apatite Ca,,10,,(PO,,4,,),,6,,(OH),,2,,//'' constituent la structure inoragnique osseuse. Le HMDP va se déposer dans le minéral.
*Le HMDP une fois injecté va rapidement se distribuer dans le volume extracellulaire et se [[déposer à la surface de l'os|HMDP_uptake.jpg]].
*Il sera plus concentré dans les zones à blood flow augmenté mais au final il se distribuera dans les os avec une ''formation/réparation osseuse augmentée'', comme par exemple des [[métastases|HMDP_metastases.jpg]].
*50% du traceur sera pris par les os, le reste sera excrété par les reins
*les clichés sont pris généralement 2-4h post-injection pour avoir une bonne phase tardive osseuse.
*On peut faire soit un [[protocole WB |HMDP_protocole_wb.jpg]]avec clichés 2-4h post-injection, soit un [[protocole 3 phases dynamique|HMDP_protocole_3phases.jpg]] (spot view) qui sera [[centré sur le site|HDMP_3phases_exemple.jpg]] (phase artérielle 5s, phase tissulaire précoce 5min, phase osseuse tardive 2-4h)
*Les[[ spots views|HMDP_spot_view.jpg]] ont l'avantage d'être plus détaillés anatomiquement.
*les[[ camera SPECT |HMDP_SPECT.jpg]]peuvent faire des images planaires (caméra fixe) ou des images 3D (caméra en rotation)
!!Exemples
<$button popup="$:/pseudarthrose_ex.jpg" >
[img width=64 [images/pseudarthrose_ex.jpg]]
</$button><$reveal type="popup" state="$:/pseudarthrose_ex.jpg"><div class='tc-tiddler-frame'>
{{pseudarthrose_ex.jpg}}
Sur ces coupes TEMP-TDM on observe :
- en haut, une hyperfixation intense, un peu hétérogène au niveau de la jonction 1/3 moyen-1/3 inférieur du fémur gauche sur les coupes TEMP;
- au milieu, les coupes TDM montrent la persistance de la fracture diaphysaire, ainsi qu'une franche angulation du fémur;
- en bas, la fusion des images plaide en faveur d'une pseudarthrose diaphysaire fémorale.
</div>
</$reveal> 8mois post fracture du fémur
<$button popup="$:/14.11.2016_pseudarthrose.jpg" >
[img width=64 [images/14.11.2016_pseudarthrose.jpg]]
</$button><$reveal type="popup" state="$:/14.11.2016_pseudarthrose.jpg"><div class='tc-tiddler-frame'>
{{14.11.2016_pseudarthrose.jpg}}
</div>
</$reveal>14.11.2016: post ostéotomie des métatarses pour soulager des douleurs
undefine
undefine
![ext[dermato_psoriasis.pdf|./pdf/dermato_psoriasis.pdf]] <!-- Texte caché pour la recherche Psoriasis - Touche 1-2% de la population, disposition génétique, interaction GxE (infection = déclencheur) - Interaction lymphocytes et macrophages, PMN. Médiateurs clés : TNF-alpha et IL-17A - Comorbidité la plus importante = arthrite psoriasique (0.5%, idem arthrite rhumatoïde) - Maladie sévère (score physique : psoriasis > diabète > cancer) - Maladie chronique, douloureuse, défigurante - « Marche psoriasique » : psoriasis + obésité → inflammation sysétmique → R insuline → athéroclérose → IM Plaques érythémato-squameuses bien délimitées → sur tout le corps (= érythrodermie) →Prédilection : grandes articulations (coudes, genoux), para-ombilical, ilio-sacré, cuir chevelu (ne s’arrête pas avec les cheveux) - Psoriasis inversé : plis axillaires, sous-mammaire etc. - Psoriasis en goutte : papules hyperkératosiques, subit (en 2-3j). - Psoriasis des ongles : atteinte matrice (dépression ponctuée en dé à coudre, onychorrhexis : brittle nail, leuconychie : perte transparence) et du lit de l’ongle (gouttes d’huile, onycholyse : décollement, hyperkératose sous ungéale). T@ prend 3-6mois pour se résoudre. - Psoriasis pustuleux : localisé (palmoplantaire, acrodermatite) ou généralisé (sx systémiques, pustules spongiformes) - Tendance à l’obésité (induit R à l’insuline) - Classification étendue = PASI (PASI-75 = réduction 75% pso = seuil pour continuer ce traitement. Si PASI-50 = changer de palier). - Derma&te séborrhéique du cuir chevelu (mais pso dépasse sur front) - Candidose (ressemble psoriasis inversé mais pustules) - Lichen plan (signe de Koebner) - Signe d’Auspitz : gratter la lésion → membrane qui saigne si on touche = rosée sanglante (papillomatose) - Signe de Koebner : stress non spécifique induit les lésions. - Bx : 1- acanthose épidermique 2- papillomatose (peu de kératinocytes avant derme), parakératose 3- infiltrat mononucléaire (lymphocytes T CD4 ++), microabcès de Munro (PMN) 4- angionéogenèse - Ciclosporine, CS, MTX (vise ¢T), Rétinoïdes, vit D (vise ¢ résidantes) - Biologiques : etarnecept (anti TNF-apha), Ustekinumab (anti-P40), Secukinumab (anti Th17A) = le mieux - Léger (<10% BSA) : vit D3 + CS topiques (év ⊣ calcineurine topique = tacrolimus) - Modéré ou sévère (>10%) : ciclosporine (⊣ calcineurine) MTX, photothérapie + thérapie topique. 2è ligne biologiques (secukinumab) - Peut toucher tout le corps → regarder les OGE ! - Psoriasis pustuleux = urgence dermato (comme brûlure) : ATB, andidouleurs, albumine, remplissage - Psoriasis de type 1 = AF+, manifestation ado. - P40 → IL-23 et IL-12 → Th1 et Th17 → psoriasis - Comorbidités : arthrite psoriasique +++, FRCV (obésité, HTA, dyslipidémie, DM, sy métabolique), Tabac, OH, NASH, Crohn, lymphome, dépression → risque de CI pour ttt systémique classiques et d’interactions (→biologiques) GEN CLIN DD INV TTT CAVE -->
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
@@background-color:#f6f6f6; !''Psychiatrie'' @@ <<list-links "[tag[Psychiatrie]sort[title]]">>
![ext[psychose.pdf|./pdf/psychose.pdf]]
!Définition
!!Délire
*''Perte de contact avec la réalité''
*''Caractéristique délire débutant'' : étrange, bizarre, pas clair, variable, essaie de trouver des raisons (constructions psychiques => pathologique) à ces sensations, puis se cristallisent avec le temps.
*//Très souvent : délire paranoïaque//
!!Psychose
* Désordres de l'esprit (opposition à névrose = désordre des nerfs) (vient de psykhe = esprit et osis = maladie / anormal)
*Actuellement, on fait quelque chose de descriptif
*On ne parle pas de l'étiologie dans le diagnostic (c'est uniquement descriptif)
!!Trouble psychotique bref
*Durée : plus d'un jour et moins d'un mois
*Intéressant pour le DD (pas un trouble psychotique ou trouble psychotique chronique)
!!!Trouble psychotique aigu polymorphe, sans symptômes schizophréniques
{{Capture d’écran 2016-10-18 à 17.15.51.jpg}}
!!!DD des troubles psychotiques aigus et transitoires
{{Capture d’écran 2016-10-18 à 17.17.33.jpg}}
!!Schizophrénie
*On en parle dès 1mois (CIM-10) et dès 6mois (DSM-V). Entre deux dans DSM-V = trouble schizophréniforme.
!!Cause
*Théorie de la saillance
**NT = ''dopamine''.
**''Voies méso-lymbique'' : permet de faire la différence entre les choses dangereuses et non dangereuses (et permet de focaliser sur des aspects.
**Suractivation dopaminergique => trop d'importance aux signaux qui ne le méritent pas //(gens parlent de moi, pensées sont à quelqu'un d'autre etc.)//
!!DD de psychose inaugurale
*Toxique
*Etat confusionnel organique
*Décompensation d'un processus chronique
*Dépression ou trouble bipolaire
!Symptômes psychotiques
*''Symptômes positifs '': Idées délirantes (trouble du moi), hallucinations, pensées incohérentes ou comportement grossièrement désorganisé (=> désorganisation de la parole - salade phonétique - et du comportement)
**//Capacité à comprendre le patient = l'échelle facile (mais subjectif). //
*''Symptômes négatifs'' (=pathologiquement absent) : anhédonie, diminution des affects, appauvrissement du discours, retrait social.
!!Délire
*Nait sur fond de modification générale du vécu et se manifeste par une appréciation erronée de la réalité.
*''Idées pathologiques ''(à différencier des croyances culturelles)
**''Fausseté par rapport aux repères ''de la personne
**=> manière dont s'est construit l'idée (construction pathologique = délirant)
*''Conviction'' inébranlable (évidence, certitude ne dépend pas de l'expérience ni de la réalité) (jugement manquant)
*//Impact n'est pas un critère (mais modifie l'agressivité de la prise en charge)//
*''Formes du délire '':
**Systématisation du délire (cohérence interne) vs non systématisé (pas de cohérence interne).
**Plus c'est systématisé, moins c'est bien
**Pressentiment délirant
**Perception délirante
**Dynamisme du délire
*''Contenu du délire '':
**Idées délirantes de référence
**Préjudice/persécution
**Jalousie
**Culpabilité
**Ruine
**Hypochondriaque
**De grandeur
!!Hallucinations
*Trouble de la perception où le patient décrit une perception en absence de stimulus
**Acoustico-verbales
**Auditives autres
**Visuelles
**Cénesthésiques
**Olfactives et gustatives (rares -> toujours vérifier que pas de problème neurologique le cas échéant)
!!Pensées incohérentes
*Pensées et langage perdent la cohésion logique
*Cas extrêmes : dislocation (phrases uniques, groupes de phrases, pensées fragmentées)
!!Troubles du moi
*Troubles de l'éprouvé des autres et de l'environnement (''déréalisation'')
*Troubles du vécu de l'unité du moi, de son identité au cours du temps et de la limite soi-environnement (''dépersonnalisation'')
*Troubles de l'appartenance au moi de toutes les expériences vécues (''devinement de pensée, vol de pensée, pensées imposées'')
!Facteurs de risque
*1% de risque
*FR ++ = génétique (50% si jumeau homozygote)
*Utilisation précoce du cannabis
*Migration (et selon le pays de départ, selon liens sociaux => isolation est à risque - et selon pays de départ, il y a plus ou mois d'isolation), urbanicité (vivre en ville)
*Infection/malnutrition de la mère 1er et 2ème trimestre
*Âge du père >35ans
!Etat à risque de psychose
*= prodromes des psychoses
*Permet une ''intervention'' ''précoce'' (= facteur pronostic le plus important).
**Phase I :
***Personne devient méfiante, dépressive, anxieuse, irritable, tendue.
***Changements d'humeur, troubles du sommeil, perturbation appétit, perte d'énergie, diminution de la motivation, difficultés de concentration et mémoire
***Phases d'accélération / ralentissement de la pensée, les "choses" paraissent différentes ou changées.
**Phase II :
***Proches ou entourage remarquent que la personne se conduit différemment, a une diminution des performances professionnelles ou scolaires, se retire, s'isole, n'a plus d'interêt pour les contacts sociaux, est moins active.
*Plus la durée est longe sans traitement, plus le risque de rechute et de suicide est important.
*//''Retrait social'', atteintes fonctionnelles limitées dans la façon de vivre les choses. Mais pas très spécifique //
!!Patients à ultra-high risk
*''Symptômes psychotiques atténués'' (pas un diagnostic formel)
**Atteint pas le seuil
**Idées pré-délirantes
**Capacité critique fluctuante
*=> Apparition de la pathologie dopaminergique (trop de dopamine)
*//Vulnérabilité familiale//
!DD Psychose
Idées délirantes (trouble du moi), hallucinations, pensées incohérentes ou comportement désorganisé
*Effets psychologiques directs d'une affection médicale générale (lésions ou dysfonctionnement cérébral, affection physique)
*Effets d'une substance (toxique, abus de médicaments)
*Etat dépressif majeur ou épisode maniaque coexistant (trouble de l'humeur avec symptômes psychotiques)
*Durée >1j mais <1mois : trouble psychotique aigu
*Trouble schizophrénique
{{Capture d’écran 2016-10-18 à 17.11.36.jpg}}
!Traitement de crise
*''Halopéridol'' (neuroleptique typique). A un effet rapide, calme l'agitation psychique. Antagoniste puissant. EI ++ (extra-pyramidaux)
*''BZD'' : pas le plus efficace mais peut potentialiser l'anxiolyse (on donne les deux)
{{Capture d’écran 2016-10-18 à 17.30.02.jpg}}
!Prévention secondaire
*''Psychothérapie''
**__Cognitivo-comportemental__ :
***Théories cognitives pour analyser le comportement et les idées qu'on a par rapport à ça pour essayer de restructurer (trouver des stratégies).
***Marche +++ sur la dépression
***Bien établi
**__Psychodynamique__ :
***Creusent plus profondément dans le psychanalytique (Freud), interaction du ça-moi-surmois etc.
**__Systémique__ : travailler sur le réseau (famille) pour essayer de résoudre les difficultés.
***Il n'y a pas forcément la famille avec, peut se faire en individuel.
**__Familial__: inclure la famille aide
***Bien établi
**__De groupe__: groupe de personne avec partage des stratégies pour gérer leur pathologie.
*''Médicaments'' : anti-psychotiques
*=> ''Ne pas fumer du cannabis et bien prendre les médicaments''
!Evolution
*1/3 : crise dure plus ou moins long puis se stabilise (1 seule crise)
**Favorisé par intervention précoce.
*1/3 : crises
*1/3 : evolution chronique
*Risque de décès par suicide entre 2-5%.
*//NB : Rémission peut parler des sx positifs et négatifs, rémission au sens stricte = sx + fonctionnement social, rémission au sens large = sx + fonctionnement + qualité de vie. //
!FR de rechute
*Perte de la substance grise
*Suicide ou tentative de suicide
*Réhospitalisation
*Abus de substances
*Délinquance
*Perte de logement
*Augmentation de la co-morbidité
*Désinsertion sociale et coûts pour la société
!Notes
*''Attitude d'écoute'' : patient écoute autre chose que la conservation (a l'air d'entendre quelque chose d'autre)
*''Faire un diagnostic'' : il faut DMS-V et rechercher les symptômes.
*''Facteurs de risque de rechute'' : cannabis et arrêt des médicaments ++
*''DD agitation et comportement agressif '': psychose vs état confusionnel (trouble de la personnalité, trouble schizophrénique ou schizoaffectif, trouble de l'humeur (manie), démence, TC, délirium tremens, intoxications, pathologie iatrogène)
<!-- Texte caché pour la recherche
Psychosis
Psychosis is a breakdown in the perception and under standing of reality and a lack of awareness that the person is unwell. This can affect ideas and beliefs, resulting in delusional thinking where abnormal beliefs are held with an unshakeable quality and lead to odd behaviour. The connectedness and coherence of thoughts may break down, so that speech is hard to follow, leading to thought disorder. Perceptual abnor malities lead to hallucinations, where a perception is experienced in the absence of a stimulus.
of presentation during adolescence. In these disorders the psychotic symptoms occur in clear consciousness.
23
Investigations should include a urine drug screen, exclusion of medication induced psychosis (e.g. high dose stimulants or anticholinergic drugs), exclusion of medical causes (i.e. infection, seizures, thyroid abnor malities and sleep disorders) and dementia.
-
-
Where schizophrenia and bipolar disorder is sus pected, urgent referral to a psychiatrist is needed for comprehensive assessment and treatment with antipsychotic medication, psycho education, family therapy and, where appropriate, individual therapy. In the case of an organic psychosis the underlying cause needs to be treated promptly by the paediatric team, with help from mental health professionals as appropriate.
-
Psychosis
• May present during adolescence
• May be precipitated by or be a consequence of substance abuse.
-->
![ext[puberte.pdf|./pdf/puberte.pdf]] <!-- Texte caché pour la recherche Premature sexual development The development of secondary sexual characteristics before 8 years old in females and 9 years old in males is defined as outside the normal range in the UK. It may be due to: • Precocious puberty when it is accompanied by a growth spurt • Premature breast development (thelarche) • Premature pubic hair development (pubarche). Figure 11.13 Crouzon syndrome showing the typical shallow orbits and exophthalmos. Craniofacial reconstructive surgery is required to prevent visual loss and cerebral damage from raised intracranial pressure and for cosmetic appearance. Precocious puberty Precocious puberty (PP) may be categorised according to the levels of the pituitary derived gonadotropins, follicle stimulating hormone (FSH) and luteinising hormone (LH), (Fig. 11.14) as: - - • • Gonadotropin dependent (central, ‘true’ PP) from premature activation of the hypothalamic– pituitary–gonadal axis - Gonadotropin independent (pseudo, ‘false’ PP) from excess sex steroids. - Females This is usually idiopathic or familial and follows the normal sequence of puberty. Organic causes are rare and are associated with: • dissonance, when the sequence of pubertal changes is abnormal, e.g. isolated pubic hair with virilisation of the genitalia, suggesting excess 1 2 4 3 193 5 Growth and puberty Causes of precocious puberty Gonadotropin-dependent (↑LH >↑FSH ) Gonadotropin-independent ( ↓FSH, ↓ LH) 11 Pituitary Gonad enlarges Pituitary LH↓ FSH↓ LH ++ FSH + Feedback Gonad shrinks or enlarges Breast enlargement Pubic hair growth, acne, body odour Gonadotropin-independent ( ↓FSH, ↓ LH). Rare. Adrenal disorders – tumours, congenital adrenal hyperplasia Ovarian – tumour (granulosa cell) Testicular – tumour (Leydig cell) Exogenous sex steroids Gonadal or extra- gonadal source Oestrogen Oestrogen from ovary ++ Testosterone from: –testis ++ –adrenal + Testosterone Gonadotropin-dependent (↑LH >↑FSH ) Idiopathic/familial CNS abnormalities Congenital anomalies, e.g. hydrocephalus Acquired, e.g. post-irradiation, infection, surgery Tumours, e.g. microscopic hamartomas Hypothyroidism Figure 11.14 Causes of precocious puberty. (Courtesy of Dr Emma Rhodes.) androgens from either congenital adrenal hyperplasia or an androgen secreting tumour Management - • • rapid onset neurological symptoms and signs, e.g. neurofibromatosis. The management of precocious puberty is directed towards: • • Ultrasound examination of the ovaries and uterus is helpful in establishing the cause of precocious puberty. In the premature onset of normal puberty, multicystic ovaries and an enlarging uterus will be identified. Precocious puberty in females is commonly due to the premature onset of normal puberty. Males (see Case History 11.2) This is uncommon and usually has an organic cause, particularly intracranial tumours. Examination of the testes may be helpful: • Bilateral enlargement suggests gonadotropin release, usually from an intracranial lesion • Small testes suggest an adrenal cause (e.g. a tumour or adrenal hyperplasia) • A unilateral enlarged testis suggests a gonadal tumour. Tumours in the hypothalamic region are best investi gated by cranial MRI scan. Central precocious puberty in males more often has an organic cause. detection and treatment of any underlying pathology, e.g. intracranial tumour in males, and reducing the rate of skeletal maturation if necessary. Skeletal maturation is assessed by bone age. An early growth spurt may result in early cessation of growth and a reduction in adult height. addressing psychological/behavioural difficulties associated with early progression through puberty. Deciding whether to treat a girl who is simply going through puberty early needs further consideration. If treatment is required for gonadotropin dependent disease, gonadotropin releasing hormone (GnRH) ana logues are the treatment of choice. In gonadotropin independent cases, the source of excess sex steroids needs to be identified. Inhibitors of androgen or oestrogen production or action (e.g. medroxypro gesterone acetate, cyproterone acetate, testolactone, ketoconazole) may be used. - - - Premature breast development (thelarche) 194 This usually affects females between 6 months and 2 years of age. The breast enlargement may be asym metrical and rarely progresses beyond stage 3. It is Growth and puberty Case History 11.2 Precocious puberty in a boy This 6 year old boy presented with precocious puberty (Fig. 11.15a,b). He was noted to have multiple café au lait spots consistent with a diagnosis of neurofibromatosis type 1. An MRI scan showed a - - - - (b) (a) differentiated from precocious puberty by the absence of axillary and pubic hair and of a growth spurt. It is non progressive and self limiting. Investigations are not usually required (see Case History 11.3). - - Premature pubarche (adrenarche) This occurs when pubic hair develops before 8 years of age in females and before 9 years in males but with no other signs of sexual development. It is most com monly caused by an accentuation of the normal matu ration of androgen production by the adrenal gland (adrenarche). It is more common in Asian and Afro Caribbean children. There may be a slight increase in growth rate. It is usually self limiting. An ultrasound scan of the ovaries and uterus and a bone age should be obtained to exclude central precocious puberty. A more aggressive course of virilisation would suggest late onset non salt losing congenital adrenal hyper plasia (CAH) or an adrenal tumour. Obtaining a urinary steroid profile helps differentiate premature pubarche from late onset CAH or an adrenal tumour. Children who develop premature pubarche are at an increased risk of developing polycystic ovarian syn drome (PCOS) in later life. - - - - - Delayed puberty Delayed puberty is often defined as the absence of pubertal development by 14 years of age in females and 15 years in males. The causes of delayed puberty are listed in Box 11.3. In contrast to precocious puberty, the problem is more common in males, in whom it is mostly due to constitutional delay in growth and puberty (CDGP). This is often familial, usually having occurred in the parent of the same sex. It may also be induced by mass in the hypothalamus which proved to be an optic glioma. He was treated with radiotherapy, although full remission was not possible to achieve. The site of injection of gonadotropin super agonist treatment to suppress his sexual development is covered by the plaster. - Figure 11.15 (a) Multiple café au lait spots. Neurofibromatosis type 1 was diagnosed. - - (b) Genitalia showing stage 3 genitalia and pubic hair with 12 ml testicles bilaterally. He also had adult body odour. (From Wales JKH, Rogol AD, Wit JM. 2003. Pediatric Endocrinology and Growth. Saunders, London, with permission.) Case History 11.3 Premature thelarche This 18 month old female developed enlargement of both breasts (Fig. 11.16). There was no pubic hair growth, sweatiness or body odour and her height was in the mid parental range. Her bone age was only mildly advanced (21 months) and a pelvic ultra sound showed a prepubertal uterus, small volume ovaries with two cysts in the left ovary. Her subse quent growth rate was normal. A diagnosis of pre mature thelarche was made. - - - Figure 11.16 Premature breast development in an 18 month old girl. The absence of a growth spurt and axillary and pubic hair differentiates it from precocious puberty. It is self limiting and often resolves. (From Wales JKH, Rogol AD, Wit JM. 2003. Pediatric Endocrinology and Growth. Saunders, London, with permission.) - - - 195 1 2 3 4 5 Growth and puberty 11 Box 11.3 Causes of delayed puberty Constitutional delay of growth and puberty/familial By far the commonest Low gonadotropin secretion (hypogonadotropic hypogonadism) • Systemic disease This weakly androgenic anabolic steroid will induce some catch up growth but not secondary sexual characteristics. In older boys, low dose intramuscular testosterone will accelerate growth as well as induc ing secondary sexual characteristics. Females may be treated with oestradiol. -->
@@background-color:LightBlue; !''Pulmonaire'' @@ <<list-links "[tag[Pulmonaire.nucl]sort[title]]">>
{{henoch_schonlein_schema.jpg}}
!!Généralités
*Le Purpura de Henoch-Schönlein (ou vasculite a IgA) est la ''vasculite la plus fréquente de l’enfant''. Il s’agit d’une vasculaire des ''petits vaisseaux''. La maladie touche ''4 organes'': __la ''peau'', le ''tube digestif'', les ''articulations'', et les ''reins''__.
*La maladie est généralement ''autolimitée'' et de ''bon pronostic''. Le pronostic à court terme dépend des complications digestives et à long terme essentiellement des complications rénales.
*Les enfants ont souvent une ''histoire d’IVRS 1-3 semaines avant'' l’apparition du purpura.
*La ''Clinique comprend'' un __''purpura palpable''__ surtout au extrémités, des __''douleurs abdominales''__ et des __''arthrites''__.
*Les ''complications rénales'' (__microhématurie__, IRA, protéinurie, etc.) peuvent apparaitre ''après 3 jours''.
*Le ''traitement'' est ''symptomatique'' (douleurs abdominales et arthrites). Il faut ''suivre le patient'' au moins ''1année'' après l’événement, à la recherche de complication rénales (''suivi urinaire'').
{{henoch_schonlein_clinique.jpg}}
![ext[PTI.pdf|./pdf/PTI.pdf]] <!-- Texte caché pour la recherche La purpura thrombopénique immunologique (PTI) ou thrombocytopénie auto-immune, anciennement purpura thrombopénique idiopathique Immune thrombocytopenia (ITP) Immune thrombocytopenia is the commonest cause of thrombocytopenia in childhood. It has an incidence of around 4 per 100 000 children per year. It is usually caused by destruction of circulating platelets by anti platelet IgG autoantibodies. The reduced platelet count may be accompanied by a compensatory increase of megakaryocytes in the bone marrow. - Clinical features Most children present between the ages of 2 and 10 years, with onset often 1–2 weeks after a viral infection. In the majority of children, there is a short history of days or weeks. Affected children develop petechiae, purpura and/or superficial bruising (see Case History 22.3). It can cause epistaxis and other mucosal bleeding but profuse bleeding is uncommon, despite the fact that the platelet count often falls to <10 × 10 9 /L. Intra cranial bleeding is a serious but rare complication, occurring in 0.1–0.5%, mainly in those with a long period of severe thrombocytopenia. Case History 22.3 Immune thrombocytopenic purpura (ITP) Sian, aged 5 years, developed bruising and a skin rash over 24 h. She had had an upper respiratory tract infection the previous week. On examination she appeared well but had a purpuric skin rash with some bruises on the trunk and legs (Fig. 22.17). There were three blood blisters on her tongue and buccal mucosa, but no fundal haemorrhages, lymphadenopathy or hepatosplenomegaly. Urine was normal on dipsticks testing. A full blood count showed Hb 11.5 g/dl with normal indices, WBC and differential normal, platelet count 17 × 10 9 /L. The platelets on the blood film were large; the film was otherwise normal. A diagnosis of ITP was made and she was discharged home. Her parents were counselled and given emergency contact names and telephone numbers. They were also given literature on the condition and advised that she should avoid contact sports but should con tinue to attend school. Over the next 2 weeks she continued to develop bruising and purpura but was asymptomatic. By the third week, she had no new bruises, and her platelet count was 25 × 10 9 /L; the blood count and film showed no new abnormalities. The following week, the platelet count was 74 × 10 9 /L and a week later it was 200 × 10 9 /L. She was dis charged from follow up. - Diagnosis 22 ITP is a diagnosis of exclusion, so careful attention must be paid to the history, clinical features and blood film to ensure that another more sinister diagnosis is not missed. In the younger child, a congenital cause (such as Wiskott–Aldrich or Bernard–Soulier syndromes) should be considered. Any atypical clinical features, such as the presence of anaemia, neutropenia, hepato splenomegaly or marked lymphadenopathy, should prompt a bone marrow examination to exclude acute leukaemia or aplastic anaemia. A bone marrow exami nation should also be performed if the child is going to be treated with steroids, since this treatment may temporarily mask the diagnosis of acute lympho blastic leukaemia (ALL). Inadvertent steroid therapy in undiagnosed ALL mimicking ITP will compromise the long term outcome of such patients. Systemic lupus erythematosus (SLE) should also be considered. However, if the clinical features are characteristic, with no abnormality in the blood other than a low platelet count and no intention to treat, there is no need to examine the bone marrow. - Management In about 80% of children, the disease is acute, benign and self limiting, usually remitting spontaneously within 6–8 weeks. Most children can be managed at home and do not require hospital admission. Treat ment is controversial. Most children do not need any therapy even if their platelet count is <10 × 10 9 /L but treatment should be given if there is evidence of major - In immune thrombocytopenic purpura, in spite of impressive cutaneous manifestations and extremely low platelet count, the outlook is good and most will remit quickly without any intervention. Figure 22.17 Bruising and purpura from immune thrombocytopenic purpura. 400 Haematological disorders bleeding (e.g. intracranial or gastrointestinal haemor rhage) or persistent minor bleeding that affects daily lives such as excessive epistaxis or menstrual bleeding. The treatment options include oral prednisolone, intra venous anti D or intravenous immunoglobulin and all have significant side effects. Platelet transfusions are reserved for life threatening haemorrhage as they raise the platelet count only for a few hours. The parents need immediate 24 hour access to hospital treatment, and the child should avoid trauma, as far as possible, and contact sports while the platelet count is very low. - Chronic ITP In 20% of children, the platelet count remains low 6 months after diagnosis; this is known as chronic ITP. In the majority of children, treatment is mainly Summary - - - supportive; drug treatment is only offered to children with chronic persistent bleeding that affects daily activities or impairs quality of life. Children with signifi cant bleeding are rare and require specialist care. A variety of treatment modalities are available, including rituximab, a monoclonal antibody directed against B lymphocytes. Newer agents such as thrombopoietic growth factors have shown clinical response in adults and may be used in children with severe non responsive disease. Splenectomy can be effective for this group but is mainly reserved for children who fail drug therapy as it significantly increases the risk of infections and patients require lifelong antibiotic prophylaxis. If ITP in a child becomes chronic, regular screening for SLE should be performed, as the throm bocytopenia may predate the development of autoantibodies. - The child with petechiae or purpura Non-thrombocytopenic Henoch–Schönlein purpura • Lesions confined to buttocks, extensor surfaces of legs and arms • Swollen painful knees and ankles • Abdominal pain • Haematuria Sepsis • Meningococcal or viral • Clinical features – fever, septicaemia, meningitis • If suspected, give parenteral penicillin immediately Trauma • Accidental or non-accidental Other causes (rare) Positive glass test – rash does not blanch when pressed Thrombocytopenia Immune thrombocytopenia (ITP) • 2–10 years • Widespread petechiae and purpura and superficial bruising • Distinguish from acute leukaemia and aplastic anaemia – clinical features, full blood count and blood film • Bone marrow examination not required if only the platelet count is low, characteristic clinical features and no steroid treatment • Is acute, benign and self - limiting in about 80% of children • Treatment – controversial, usually not required unless there is bleeding Leukaemia • Clinical features – malaise, infection, pallor, hepatosplenomegaly, lymphadenopathy • Blood count – also low Hb, blasts on film, confirmed on bone marrow Disseminated intravascular coagulation (DIC) • Critically ill – severe sepsis or shock or extensive tissue damage Other causes (uncommon) -->
undefine
{{pyelonephrite_DMSA.jpg}}
!!Traceur
*le ''Tc99m-DMSA'' //(DimerCaptoSuccinic Acid)// permet de faire une ''imagerie Corticale'' des Reins.
*le DMSA est l'examen ''gold-standard''. il est souvent effectué chez des ''//enfants avec une Pyélonéphrite Aigue//'', mais peut aussi se faire dans le''// bilan d'un Reflux vésico-urétéral sans signe de pyélonéphrite//''. Il permet de détecter aussi les ''//Cicatrices//'' après les pyélonéphrites.
*50% de la dose injecté se fixe dans le cortex, surtout dans les [[tubes proximaux|fixation_rein.nucl.jpg]].
*L'imagerie se fait après un délai de 2-3h, pour une bonne clearance du background (voir plus si IR)
*l'excrétion urinaire du DMSA est basse, ce qui n'en fait pas un bon examen pour le tube collecteur et le tractus urinaire inférieur
*Les Maladies affectant le tube proximal, comme l'//acidose// ou le //syndrome de Fanconi// vont inhiber l'uptake de DMSA. Pareil pour les médicaments néphrotoxiques comme la //gentamycin// ou la //cisplatin//
*Les patients avec une mauvaise fonction rénale peuvent avoir un examen mal interpértable, avec un mauvais TBR.
*un patient déshydraté aura une clearance et un uptake diminués. les patients doivent être bien hydratés
!!Examen Normal
*les enfants peuvent avoir besoin de sédation pour le SPECT car ils doivent rester parfaitement immobiles.
*le [[DMSA normal|DMSA_normal.jpg]] montrera une distribution homogène au niveau du ''cortex''.
*le foie ou la rate peuvent atténuer le pole supérieur
*les [[colonnes de berthin|colonne_berthin.jpg]] aparaissent proéminentes
!!Pyélonéphrite
*les ''Cicatrices'' ou les ''Dysfonctions'' due à l'infection vont apparaitre comme un [[defect cortical|cicatrice_pyelonephrite_DMSA.jpg]], focal ou multi-focal a marges bien délimitées.
*Les Lésions aigues peuvent [[se résoudre|resolution_pyelonephrite.nucl.jpg]], après ''6mois'' on fait un ''contrôle''. 40% se résolvent, 44% s'améliore. Toute lésions persistante après 6 mois peut être considérée comme une ''cicatrice''.
!!Exemples
<$button popup="$:/1.11.2016_sequelle_pyelo.jpg" >
[img width=64 [images/1.11.2016_sequelle_pyelo.jpg]]
</$button><$reveal type="popup" state="$:/1.11.2016_sequelle_pyelo.jpg"><div class='tc-tiddler-frame'>
{{1.11.2016_sequelle_pyelo.jpg}}
encoche pole inf D, séquelle de pyélonéphrite chez un enfant operé d'un RUV bilatéral, stade III à D, stade II à gauche.
</div>
</$reveal>
01.11.2016: encoche pole inf D, séquelle de pyélonéphrite
<$button popup="$:/1.11.2016_asymetrie_rein.jpg" >
[img width=64 [images/1.11.2016_asymetrie_rein.jpg]]
</$button><$reveal type="popup" state="$:/1.11.2016_asymetrie_rein.jpg"><div class='tc-tiddler-frame'>
{{1.11.2016_asymetrie_rein.jpg}}
asymetrie G<D , découverte fortuite, ATCD IU à l'âge de 5 ans, fonction relative G: 8%
</div>
</$reveal>
01.11.2016: asymetrie G<D
undefine
![ext[dermato_PRG.pdf|./pdf/dermato_PRG.pdf]] <!-- Texte caché pour la recherche Pityriasis Rosé de Gilbert (PRG) - Origine virale ? (réactivation HHV-7, HHV6 ?) - Transmission : contact avec les sécrétions orale ou le lait maternel - Dermatose éruptive fréquente, bénigne - Jeunes adultes (10-35ans) - Petites épidémies (automne-printemps) - Médaillon initial - Eruption secondaire 2-20j plus tard : macules érythémato-squameuses en « sapin de noël » sur le tronc. Symétrique. Respect du visage. - Durée : 4-8 sem, résolution spontanée - Dermatophyte (prurit, plus rouge !) - Toxidermie (anamnèse médicamenteuse) - Syphilis secondaire (regarder mains) - Primo-infection HIV - Psoriasis en goutte (quand on gratte, ça saigne) - Eczema numulaire - Diagnostic clinique - DD : VDRL (syphilis), séro HIV Ø Ev émollients Complications : ø, parfois prurit (→excipial, anti H1), eczematisation, impétignisation GEN CLIN DD INV TTT CAVE -->
![ext[rachitisme.pdf|./pdf/rachitisme.pdf]] <!-- Texte caché pour la recherche Rickets Rickets signifies a failure in mineralisation of the growing bone or osteoid tissue. Failure of mature bone to mineralise is osteomalacia. Aetiology The causes of rickets are listed in Box 12.5 The pre dominant cause of rickets during the early twentieth century was nutritional vitamin D deficiency due to inadequate intake or insufficient exposure to direct sunlight. Nutritional rickets still remains the major cause in developing countries. In developed countries, nutritional rickets has become rare, as formula milk and many foods such as breakfast cereals are supple mented with vitamin D. However, nutritional rickets has re emerged in developed countries in black or Asian infants totally breast fed in late infancy. It is also seen in extremely preterm infants from dietary defi ciency of phosphorus, together with low stores of calcium and phosphorus. - - Liver 25 (OH) D 3 Children with malabsorptive conditions such as cystic fibrosis, coeliac disease and pancreatic insuffi ciency can develop rickets due to deficient absorption of vitamin D, calcium or both. Drugs, especially anti convulsants such as phenobarbital and phenytoin, interfere with the metabolism of vitamin D and may also cause rickets. Rickets may also result from impaired metabolic conversion or activation of vitamin D (hepatic and renal disease). 1,25 (OH) 2 D 3 1,25 (OH) 2 D 3 Clinical manifestations Intestine Absorption Kidney Blood ↑Ca↑↑ Bone Reabsorption The earliest sign of rickets is a ping pong ball sensation of the skull (craniotabes) elicited by pressing firmly over the occipital or posterior parietal bones. The costochondral junctions may be palpable (rachitic rosary), wrists (especially in crawling infants) and ankles (especially in walking infants) may be widened and there may be a horizontal depression on the lower chest corresponding to attachment of the softened ribs and with the diaphragm (Harrison sulcus) (Figs 12.15, 12.16). The legs may become bowed (see Fig. 12.15). The clinical features are listed in Box 12.6 (see also Case History 12.2). - Figure 12.14 Vitamin D metabolism. In most countries, sunlight is the most important source of vitamin D. Vitamin D is not abundant naturally in food, except in fish liver oil, fatty fish and egg yolk. Vitamin D 2 (ergocalciferol) is the form used to fortify food such as margarine. Vitamin D 3 is hydroxylated in the liver and again in the kidney to produce 1,25 dihydroxyvitamin D (1,25(OH) 2 D 3 ), the most active form of the vitamin. It is produced following parathyroid hormone secretion in response to a low plasma calcium. Diagnosis This is made from: • • • Dietary history for vitamin and calcium intake - Blood tests – serum calcium is low or normal, phosphorus low, plasma alkaline phosphatase activity greatly increased, 25 hydroxyvitamin D may be low and parathyroid hormone elevated. - X ray of the wrist joint – shows cupping and fraying of the metaphyses and a widened epiphyseal plate. 2 4 3 - 213 1 5 6 Nutrition Box 12.5 Causes of rickets Nutritional (primary) rickets – risk factors • Living in northern latitudes • Dark skin • Decreased exposure to sunlight, e.g. in some Asian children living in the UK • Maternal vitamin D deficiency • Diets low in calcium, phosphorus and vitamin D, e.g. exclusive breast feeding into late infancy or, rarely, toddlers on unsupervised ‘dairy free’ diets - - • Macrobiotic, strict vegan diets • Prolonged parenteral nutrition in infancy with an inadequate supply of parenteral calcium and phosphate Intestinal malabsorption • Small bowel enteropathy (e.g. coeliac disease) • Pancreatic insufficiency (e.g. cystic fibrosis) • Cholestatic liver disease • High phytic acids in diet (e.g. chapattis) Defective production of 25(OH)D • Chronic liver disease 2 12 Increased metabolism of 25(OH)D 3 • Enzyme induction by anticonvulsants (e.g. phenobarbital) Defective production of 1,25(OH) 2 D 3 • Hereditary type I vitamin D resistant (or dependent) rickets (mutation which abolishes activity of renal hydroxylase) - • Familial (X linked) hypophosphataemic rickets (renal tubular defect in phosphate transport) - • Chronic renal disease • Fanconi syndrome (renal loss of phosphate) Target organ resistance to 1,25(OH) 2 D 3 • Hereditary vitamin D dependent rickets type II (due to mutations in vitamin D receptor gene). - Rickets Figure 12.16 Harrison sulcus, indentation of the softened lower ribcage at the site of attachment of the diaphragm. (Courtesy of Dr Nick Shaw.) Box 12.6 Clinical features of rickets • Misery • Failure to thrive/short stature • Frontal bossing of skull • Craniotabes • Delayed closure of anterior fontanelle • Delayed dentition • Rickety rosary • Harrison sulcus (Fig. 12.16) Figure 12.15 Rickets in a 3 year old boy secondary to coeliac disease. He has frontal bossing, a Harrison sulcus and bow legs. • Expansion of metaphyses (especially wrist) - - • Bowing of weight bearing bones - • Hypotonia • Seizures (late). 214 Nutrition Case History 12.2 Seizures and rickets Mohammed, a 13 month old Somalian boy, was admitted to the A&E department with a generalised afebrile seizure. This was initially controlled with per rectum diazepam. Some 20 minutes later he had another generalised seizure and needed intravenous anticonvulsant to control his seizure. - - His mother said that he was a healthy child. He was born at term, birthweight 3.1 kg, and was still breast fed. Some weaning foods were started at 7–8 months, but he preferred feeding at the breast. He had only recently begun to sit without support. - His weight and head circumference were on the 2nd–9th centile. He had marked frontal bossing, widened wrist (Fig. 12.17) and other epiphyses, Figure 12.17 Wrist expansion from rickets. (Courtesy of Dr Nick Shaw.) Management Nutritional rickets is managed by advice about a bal anced diet, correction of predisposing risk factors and by the daily administration of vitamin D 3 (cholecalcif erol). If compliance is an issue, a single oral high dose of vitamin D 3 can be given, followed by the daily main tenance dose. Healing occurs in 2–4 weeks and can be monitored from the lowering of alkaline phosphatase, increasing vitamin D levels and healing on X rays, but complete reversal of bony deformities may take years. - Summary Rickets • Nutritional – has re emerged in the UK in Asian and black infants exclusively breast fed into late infancy - - • Diagnosis – serum calcium is low or normal, phosphorus low, plasma alkaline phosphatase greatly increased, 25 hydroxyvitamin D low and parathyroid hormone elevated - • X ray features – cupping and fraying of the metaphyses and widened epiphyseal plate. -->
undefine
//en construction...//
//en construction...//
//en construction...//
{{rage.jpg}}
!!Définition
*la ''Rage'' est un ''virus'' commune chez les animaux carnivores, comme les ''chiens'' ou les ''renards''.
*Chez l'homme, une ''morsure'' ou une ''griffure ''d'un animal contaminé peut transmettre le virus, provoquant une ''encéphalite'' est presque ''toujours mortelle''.
*En Suisse, il n'y a plus de rage chez les animaux sauvages depuis 1999 , sauf si des animaux se font importer (chauve-souris).
!!Clinique
*''Morsure'' qui devient douloureuse
*''Symptomes généraux''
*''Encéphalite'' (confusion, hyperactivité, agressivité, etc.)
*''Hydrophobie'' (incapable de boire)
*Parfois une paralysie ascendante (comme un [[GB|Guillain-Barré]])
!!Investigations
*''Isolation du virus'' dans la salive ou dans les tissus infectés
*[[Corps de Negri |negri.jpg]]à l'histologie
*PCR
!!Traitement post morsure
*''Nettoyer la plaie''
*Animal sauvage: Capturer et abattre l'animal, avec des analyses au labo
*Animal domestique: Capturer et observer le comportement de l'animal 10j
*Administer le ''Vaccin'' passif et actif
{{rage2.jpg}}
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{crohn_RCUH.jpg}}
!!Définitions
*la ''RCUH'' //(Recto-Colite Ulcérative Hémorragique)// fait partie des ''MICI'' //(Maladies Inflammatoires Chroniques Intestinales )//, en compagnie de la [[Maladie de Crohn]].
*Elle consiste à une ''inflammation chronique du colon et du rectum''. Elle touche le rectum dans tous les cas, et peut s'étendre jusqu'au colon. Dans certains cas cela peut aller jusqu'à la ''pancolite''.
*L'étiologie est ''inconnue''.
*La maladie suit un schema de ''poussées-rémissions''
*L'inflammation est ''continue'' et n'est pas transmurale. Elle est limité à la ''muqueuse'' et la ''sous-muqueuse''.
*En [[pathologie|RCUH_histo.jpg]] on trouve des //abcès de cryptes//, avec des PMN accumulés dans les cryptes du colon. On trouve aussi une //distortion de l'architecture// des glandes.
!!Clinique
*''Hématochezie'' souvent dans des diarrhées sanglantes
*''Douleur abdominale''
*fièvre, anorexie, perte de poids
*Manifestations Extraintestinales (Uvéites, Arthrites, ...)
//complication mortelle//
*''Megacolon toxique''
!!Investigations
*''Endoscopie'' couplée d'une ''biopsie''
*''Lavement Baryté''
*''CT'' et ''IRM''
!!Traitement
''Médicaments''
*''corticoïdes'' pour les poussées aigues
*''sulfasalazine'' comme traitement de fond
*''immunosupresseurs''
''Chirurgie''
*''colectomie totale''
*a faire lors de ''complications''
*la chirurgie est ''curative'' contrairement au Crohn
undefine
undefine
undefine
{{RGO.jpg}}
!!Définition
*le ''RGO'' //(reflux gastro-oesophagien)// est une pathologie fréquente due à un ''Sphincter de l'Oesophage Inférieur Relâché'' qui laisse repasser du contenu gastrique dans l'Oesophage
*Il est souvent associé à une [[Hernie Hiatale]]. Les ''Facteurs de risque'' sont
**''Tabac''
**''Alcool''
**''Café''
**''Chocolat''
**''Graisses''
!!Clinique
*''Pyrosis'' exacerbé lorsque le patient est //''couché''//, surtout ''//après les repas//''.
*''Régurgitations''
*''Toux''
!!Investigations
*le ''Diagnostic'' se fait par ''endoscopie'' avec une ''biopsie''. Elle n'est ''PAS nécessaire'' dans les cas simples, non compliqués !
*''ph-Métrie'' sur 24h qui est le gold standard mais pas forcément nécessaire
*''TOGD'' //(transit oeso-gastro-duodénal)//, un examen radiologique avec du Baryte, qui montrera les ''complications'' comme les sténoses ou ulcères, mais pas la pathologie en soi.
!!Complications
*''Esophage de Barrett'' dans 10% des RGO, qui consiste à un remplacement de l'épithélium malpighien normal par de l'[[épithélium cylindrique|oesophage_barrett_histo.jpg]]. Il y a un risque d'''Adénocarcinome'' ! Il faut des biopsies et une surveillance régulière de la zone à risque.
*''Oesophagite de reflux'' qui peut être ''érosive''.
*''Sténoses'' de l'oesophage
*''Ulcères'' de l'oesophage
*''Pneumonies d'aspirations''
*Erosion des dents, gingivites, laryngites, pharyngite
!!Traitement
#Eviter les ''facteurs de risque'' (tabac, café, alcool, chocolat, graisses)
#''Antiacides''// (Ulcogant® Sucralfate)//
#''Bloqueurs H2'' (//Ranitidine//)
#''IPP'' //(Nexium® Oméprazole)//
#''Chirurgie'' dans les cas sévères par Fundoplicature de Nissen
{{fundoplication_Nissen.jpg}}
undefine
undefine
@@background-color: #ffff66; !''Rénal'' @@ <<list-links "[tag[Rénal.nucl]sort[title]]">>
undefine
undefine
undefine
undefine
![ext[retard_staturoponderal.pdf|./pdf/retard_staturoponderal.pdf]] <!-- Texte caché pour la recherche Failure to thrive Specialised infant formula A specialised formula may be used for cow’s milk protein allergy/intolerance, lactose intolerance (primary lactase deficiency or post gastroenteritis intolerance), cystic fibrosis, neonatal cholestatic liver disease and following neonatal intestinal resection. - In a cow’s milk based formula, the protein is derived from cow’s milk protein, the carbohydrate is lactose and the fat mainly long chain triglycerides. In a special ised formula, the protein is either hydrolysed cow’s milk protein, amino acids or from soya, the carbo hydrate is glucose polymer and the fat a combination of medium and long chain triglycerides. Medium chain triglycerides are directly absorbed into small intestine and need neither pancreatic enzymes nor bile salts for this process. - - - - - A soya formula should not be used below 6 months of age as it has a high aluminium content and con tains phytoestrogens (plant substances that mimic the effects of endogenous oestrogens). There is no compelling evidence that the use of a specialised formula prevents the development of atopy (eczema, asthma, etc.). Weaning Solid foods are recommended to be introduced after 6 months of age, although they are often introduced earlier as parents often consider that their infant is hungry. It is done gradually, initially with small quanti ties of pureed fruit, root vegetables, or rice. If weaning The term ‘failure to thrive’ is used to describe sub optimal, weight gain in infants and toddlers. It may also be referred to as weight or growth faltering in case parents consider the term critical of their care. Recognition of the entity depends upon demonstra tion of inadequate weight gain when plotted on a centile chart, mild failure to thrive being a fall across two centile lines and severe being a fall across three centile lines. Between 6 weeks and 1 year of age, only 5% of children will cross two lines, and only 1% will cross three. Most children with ‘failure to thrive’ have a weight below the 2nd centile. However, the weight of some children with failure to thrive, i.e. they are failing to gain or are losing weight, may still be above the 2nd centile. Repeated observations are therefore essential and are usually available from the child’s per sonal child health record. A single observation of weight is difficult to interpret unless markedly discrep ant from the head circumference or length, although the further the weight is below the 2nd centile, the more likely the child is ‘failing to thrive’. A weight below the 0.4th centile should always trigger an evaluation. Differentiating the infant who is failing to thrive from a normal but small or thin baby is often a problem (Fig. 12.7). Normal but short infants have no symptoms, are alert, responsive and happy, and their development is satisfactory. The parents may be short (low mid parental height) or the infant may have been extremely preterm or growth restricted at birth. Any intercurrent illness may be accompanied by a temporary failure to gain weight. - - 206 An additional diagnostic problem is ‘catch down’ (as opposed to ‘catch up’) weight. This is when an infant’s weight falls from the birth centile, which is - - Nutrition 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 3 4 5 6 7 8 9 10 11 99.6th Name........................ 0–1 1 yr 2 Age in weeks/ months 98th 91st 75th HEAD 50th cm 25th 9th 2nd 0.4th 99.6th 98th 91st 75th 50th 25th 9th 2nd 0.4th subjected to abuse or neglect, while in a larger propor tion, socioeconomic deprivation is an important con tributing factor. 50 cm 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 66 64 62 60 58 56 54 52 50 48 46 44 cm 11 kg 10.5 10 9.5 9 8.5 8 7.5 7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 kg LENGTH cm 50 cm 49 48 47 46 45 44 43 42 41 40 84 82 80 78 76 74 72 70 68 66 64 62 60 58 cm 14 kg 13.5 12 12.5 12 11.5 11 10.5 10 9.5 9 8.5 8 7.5 7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 kg The mother may be depressed, have an eating disorder herself or have poor understanding of her baby’s needs. There may be poor housing, poverty, inadequate social support and lack of an extended family, which make good child care even more dif ficult. However, some studies suggest that failure to thrive is not more common in deprived than in non deprived communities, and that identification of deprivation leads to the inappropriate application of that diagnostic label. Undernutrition is the final common pathway for poor weight gain in most cases of organic and non organic failure to thrive, and in many cases both organic and environmental factors are present. - - Organic causes are listed in Figure 12.8. Less than 5% of children with failure to thrive will be found to have an organic cause. 99.6th 98th 91st 75th 50th 25th 9th 2nd 0.4th Clinical features and investigation WEIGHT kg Studying the growth chart in combination with the history and examination of the child is key to its evalu ation. The history should focus on: • • • • • • • A detailed dietary history, including a food diary over several days Feeding, including details of exactly what happens at mealtimes Is the child well with lots of energy or does the child have other symptoms such as diarrhoea, vomiting, cough, lethargy? 1 2 3 Age 4 in weeks/ 5 6 months 7 8 9 10 11 Was the child premature or had intrauterine growth restriction at birth or any significant medical problems? 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 Figure 12.7 Growth chart showing normal weight gain and growth in a constitutionally small infant. The further below the 2nd, and especially the 0.4th, centile, the more likely it is that there will be an organic cause. (Chart © RCPCH, WHO, Department of Health.) determined by the intrauterine environment, to a lower, genetically determined growth centile. These infants need only close monitoring of their growth over a few months. While children with recent onset failure to thrive usually maintain their height, this may become com promised by prolonged, inadequate weight gain. The child’s developmental progress may also be adversely affected. - Causes Failure to thrive is usually classified as organic or non organic (Fig. 12.8). Traditionally non organic failure to thrive is believed to be associated with a broad spectrum of psychosocial and environmental depriva tion. It is estimated that 5–10% of children with failure to thrive will be on a child protection register or be - - The growth of other family members and any illnesses in the family Is the child’s development normal? Are there psychosocial problems at home? Examination should focus on identifying signs of organic disease – dysmorphic features, signs sugges tive of malabsorption (distended abdomen, thin but tocks, misery), signs suggestive of chronic respiratory disease (chest deformity,clubbing), signs of heart failure and evidence of nutritional deficiencies. Further information about the child and family from the health visitor, general practitioner or other profes sionals involved with the family can be particularly helpful. Investigations to be considered are listed in Box 12.3. In some children who are failing to thrive, a full blood count and serum ferritin may be helpful to iden tify iron deficiency anaemia. This is usually secondary to inadequate iron intake and correcting it may improve appetite. In most instances, no investigations are required. Management The management of most non organic failure to thrive is multidisciplinary and is carried out in primary care. The health visitor is well placed to make home visits to 2 4 3 5 - 207 1 6 Nutrition Causes of failure to thrive Causes Inadequate intake Inadequate retention Malabsorption Failure to utilise nutrients Increased requirements Examples 12 Non-organic/enviromental Inadequate availability of food • Feeding problems – insufficient breast milk or poor technique, incorrect preparation of formula • Insufficient or unsuitable food offered • Lack of regular feeding times • Infant difficult to feed – resists feeding or disinterested • Conflict over feeding, intolerance of normal feeding behaviour, e.g. messiness, throwing food around, leading to an early cessation of meals • Problems with budgeting, shopping, cooking food, famine • Low socioeconomic status Psychosocial deprivation • Poor maternal–infant interaction • Maternal depression • Poor maternal education Neglect or child abuse • Includes factitious illness: deliberate underfeeding to generate failure to thrive Organic Impaired suck/swallow • Oro-motor dysfunction, neurological disorder, e.g. cerebral palsy • Cleft palate Chronic illness leading to anorexia • Crohn disease, chronic renal failure, cystic fibrosis, liver disease, etc. Vomiting, severe gastro-oesophageal reflux Coeliac disease, cystic fibrosis, cow’s milk protein intolerance, cholestatic liver disease, short gut syndrome, post-necrotising enterocolitis (NEC) Syndromes Chromosomal disorders, e.g. Down syndrome, IUGR (intrauterine growth restriction) or extreme prematurity, congenital infection, metabolic disorders, e.g. congenital hypothyroidism, storage disorders, amino and organic acid disorders Thyrotoxicosis, cystic fibrosis, malignancy, chronic infection (HIV, immune deficiency) congenital heart disease, chronic renal failure Figure 12.8 The main causes of failure to thrive. assess eating behaviour and provide support. Direct practical advice following observation may well be beneficial. A paediatric dietician may be helpful in assessing the quantity and composition of food intake, and recommending strategies for increasing energy intake and a speech and language therapist has spe cialist skills with feeding disorders. Input from a clinical psychologist and from social services may also be appropriate. Nursery placement may be helpful in alle viating stress at home and assist with feeding. Hospital admission is usually only necessary in chil dren under 6 months with severe failure to thrive, requiring active refeeding. While hospital admission may offer the opportunity to observe and improve the mother’s method and skill in feeding, this rarely transfers from the artificial hospital environment to home. In extreme cases, hospital admission can be used to demonstrate that the child will gain weight when fed appropriately. Outcome 208 Follow up studies suggest that children with non organic failure to thrive continue to under eat (see Case History 12.1). Although there is usually a gradual improvement in the preschool years, a lasting deficit is common and these children tend to remain under weight. In contrast, impairment of development is only short term. - - - Nutrition Box 12.3 Investigations to be considered in ‘failure to thrive’ Investigation Significance of an abnormality Full blood count and differential white cell count Serum creatinine urea, electrolytes, acid–base status, calcium, phosphate Liver function tests Thyroid function tests Acute phase reactant, e.g. C-reactive protein Ferriaztin Immunoglobulins IgA tissue transglutaminase antibodies Urine microscopy, culture and dipsticks Stool microscopy, culture and elastase Karyotype in girls Chest X-ray and sweat test Anaemia, neutropenia, lymphopenia (immune deficiency) Renal failure, renal tubular acidosis, metabolic disorders, William syndrome Liver disease, malabsorption, metabolic disorders Hypothyroidism or hyperthyroidism Inflammation Iron deficiency anaemia Immune deficiency Coeliac disease Urinary tract infection, renal disease Intestinal infection, parasites, elastase decreased in pancreatic insufficiciency Turner syndrome Cystic fibrosis Summary Failure to thrive • is a description, not a diagnosis • weights of infants are only helpful if accurate and plotted on a centile chart • is present if an infant’s weight falls across two centile lines • is likely to be present the further the weight is below the 2nd centile • is mostly due to inadequate food intake • is accompanied by abnormal symptoms or signs if there is organic disease • most affected infants and toddlers do not require any investigations and are managed in primary care by increasing energy intake by dietary and behavioural modification and monitoring growth. -->
![ext[retinoblastome.pdf|./pdf/retinoblastome.pdf]] <!-- Texte caché pour la recherche Retinoblastoma Retinoblastoma is a malignant tumour of retinal cells and, although rare, it accounts for about 5% of severe visual impairment in children. It may affect one or both eyes. All bilateral tumours are hereditary, as are about 20% of unilateral cases. The retinoblastoma suscep tibility gene is on chromosome 13, and the pattern of inheritance is dominant, but with incomplete pene trance. Most cases present within the first 3 years of life. Children from families with the hereditary form of the disease should be screened regularly from birth. Clinical features The most common presentation of unsuspected disease is when a white pupillary reflex is noted to replace the normal red one (Fig. 21.16) or with a squint. Investigations MRI and examination under anaesthetic. Tumours are frequently multifocal. Treatment The aim is to cure, yet preserve vision. Biopsy is not undertaken and treatment is based on the ophthalmo logical findings. Enucleation of the eye may be neces sary for more advanced disease. Chemotherapy is used, particularly in bilateral disease, to shrink the tumour(s), followed by local laser treatment to the retina. Radio therapy may be used in advanced disease, but it is more often reserved for the treatment of recurrence. Most patients are cured, although many are visually impaired. There is a significant risk of second malig nancy (especially sarcoma) among survivors of heredi tary retinoblastoma. Figure 21.16 White pupillary reflex in retinoblastoma. -->
undefine
![ext[rhabdomyolyse.pdf|./pdf/rhabdomyolyse.pdf]] <!-- Texte caché pour la recherche -->
![ext[rhabdomyosarcome.pdf|./pdf/rhabdomyosarcome.pdf]] <!-- Texte caché pour la recherche Rhabdomyosarcoma is the most common form of soft tissue sarcoma in childhood. The tumour is thought to originate from primitive mesenchymal tissue and there are a wide variety of primary sites, resulting in varying presentations and prognosis. Box 21.2 Presentation of Wilms tumour Common Uncommon Abdominal mass Abdominal pain Anorexia Anaemia (haemorrhage into mass) Haematuria Hypertension About 5% have bilateral disease at diagnosis. Large tumour, showing the characteristic mixed tissue densities (cystic and solid). It arises within the kidney and envelops a remnant of normal renal tissue Remnant of left kidney Liver Normal kidney Figure 21.13 Large Wilms tumour arising within the left kidney, showing characteristic cystic and solid tissue densities. 375 1 2 3 Malignant disease 21 Figure 21.14 Rhabdomyosarcoma. (a) Soft tissue mass of lower limb. The scar is from a biopsy. (b) MRI scan of a child presenting with proptosis of the right eye. It shows a right periorbital soft tissue mass displacing the globe and compressing other orbital structures. Histology confirmed the diagnosis of rhabdomyosarcoma. (a) Clinical features (b) achieved without mutilation or irreversible organ damage. Overall cure rates are about 65%. Head and neck are the most common sites of disease (40%), causing, e.g. proptosis, nasal obstruction or bloodstained nasal discharge. Genitourinary tumours may involve the bladder, paratesticular structures or the female genitourinary tract. Symptoms include dysuria and urinary obstruc tion, scrotal mass or bloodstained vaginal discharge. Metastatic disease (lung, liver, bone or bone marrow) is present in approximately 15% of patients at diag nosis and is associated with a particularly poor prognosis. Investigations Biopsy and full radiological assessment of primary disease and any evidence of metastasis (Fig. 21.14). Management Multimodality treatment (chemotherapy, surgery and radiotherapy) is used, dependent on the age of the patient and the site, size and extent of disease. The tumour margins are deceptively ill defined, and attempts at primary surgical excision are often unsuc cessful and are not attempted unless this can be -->
!!Définition *Le RAA (ou rheumatic fever) est une ''complication grave d’une angine à streptocoques'' (Strepto-Beta hémol. gr.A), touchant surtout les ''enfants''. C’est un syndrome qui reste ''rare'' surtout si la pharyngite est bien traitée par la pénicilline. *Ce syndrome est dû à une cross-réaction immunitaire (mimétisme), avec une attaque par les anticorps créés initialement contre le streptocoques. *__Rappel:__ à ne pas confondre avec l’arthrite réactionnelle post-streptococcique qui est une autre complication moins grave d’une angine à streptocoques, caractérisée par une arthrite isolée et traitée par des AINS. Ce syndrome peut évoluer en RAA, donc il faut une prophylaxie antibiotique. !!Clinique *L’enfant présente une ''fièvre'', déclenchée ''2-3 semaines après la pharyngite'' à streptocoques. *Les manifestations peuvent inclure une ''arthrite'' (polyarthrites apparaissants les unes après les autres), une ''cardite'' (pancardite qui peut être ''mortelle'': valve cardiaque, souvent régurgitation mitrale), chorées et des nodules sous-cutanés et un érythème marginé. *Le RAA peut fréquemment ''récidiver'' avec les mêmes syndromes. Cela peut avoir des conséquences désastreuses, surtout si l’enfant a fait une cardite auparavant. !!Investigation *Prouver l’infection récente par un ''frottis de gorge'' et par une ''recherche d’anticorps circulants'' (ASLO et autres anticorps anti-streptococciques, plus fiable car la bactérie n’est pas toujours présente dans la gorge à ce moment). !!Traitement *Il fait éradiquer le streptocoque avec ''10jours de pénicilline'' *Après cela il faut une ''prévention'' par ''Pénicilline-G IM'', qui se fait ''chaque 4semaines pendant 1an'', ensuite à évaluer si le patient développe des cardites, la prophylaxie peut durer plusieurs années !
@@background-color:#c0c0c0; !''Rhumatolgie'' @@ <<list-links "[tag[Rhumatologie]sort[title]]">>
LIVRES
Neurologie
Oncologie
Prescriptions
![ext[rhume_hanche.pdf|./pdf/rhume_hanche.pdf]] <!-- Texte caché pour la recherche Transient synovitis (‘irritable hip’) This is the most common cause of acute hip pain in children. It occurs in children aged 2–12 years old. It often follows or is accompanied by a viral infection. Presentation is with sudden onset of pain in the hip or a limp. There is no pain at rest, but there is decreased range of movement, particularly internal rotation. The pain may be referred to the knee. The child is afebrile or has a mild fever and does not appear ill. It can be difficult to differentiate transient synovitis from early septic arthritis of the hip joint (Table 26.2), and if there is any suspicion of septic arthritis, joint aspiration and blood cultures are mandatory. 458 In a small proportion of children, transient synovitis precedes the development of Perthes disease. Man agement of transient synovitis is with bed rest Musculoskeletal disorders Table 26.1 Causes of limp Acute painful limp Chronic and intermittent limp 1–3 years Infection – septic arthritis, osteomyelitis of hip or spine Transient synovitis Trauma – accidental/non-accidental Malignant disease – leukaemia, neuroblastoma Developmental dysplasia of the hip (DDH), talipes Neuromuscular, e.g. cerebral palsy Juvenile idiopathic arthritis (JIA) 3–10 years Transient synovitis Septic arthritis/osteomyelitis Trauma and overuse injuries Perthes disease (acute) Juvenile idiopathic arthritis (JIA) Malignant disease, e.g. leukaemia Complex regional pain syndrome Perthes disease (chronic) Neuromuscular disorders, e.g. Duchenne muscular dystrophy Juvenile idiopathic arthritis (JIA) Tarsal coalition 11–16 years Mechanical – trauma, overuse injuries, sport injuries Slipped capital femoral epiphysis (acute) Avascular necrosis of the femoral head Reactive arthritis Juvenile idiopathic arthritis (JIA) Septic arthritis/osteomyelitis Osteochondritis dissecans of the knee Bone tumours and malignancy Complex regional pain syndrome Slipped capital femoral epiphysis (chronic) Juvenile idiopathic arthritis (JIA) Tarsal coalition Table 26.2 Contrast in clinical features of transient synovitis and septic arthritis of the hip Transient synovitis Septic arthritis Onset Acute limp, non-weight bearing Acute onset, non-weight bearing Fever Mild/absent Moderate/high Child’s appearance Child often looks well Child looks ill Hip movement Comfortable at rest, limited internal rotation and pain on movement Hip held flexed; severe pain at rest and worse on any attempt to move joint White cell count Normal Normal/high Acute-phase reactant/ESR Slight increase/normal Raised Ultrasound Fluid in joint Fluid in joint Radiograph Normal Normal/widened joint space Management Rest, analgesia Joint aspiration, usually under ultrasound guidance Prolonged antibiotics, rest and analgesia Course Resolves <1 week, approx 3% develop Perthes disease Progressive and severe joint damage if not treated 459 1 2 Musculoskeletal disorders 26 Figure 26.13 Perthes disease, showing flattening with sclerosis and fragmentation of the right femoral capital epiphysis; the left hip is normal. and, rarely, skin traction. It usually improves within a few days. -->
undefine
{{rickettsiose.jpg}}
!!Défininition
*la ''Rickettsiose'' est causée par une ''bactérie'' intracellulaire de type //Rickettsiae//, véhiculées par divers vecteurs dont le principal est la ''tique''.
*Il existe ''différents types'' de Rickettsioses dans le monde, comme par exemple:
** la //r.rickettsi// faisant la ''//rocky spotted mountain fever//''
**la //r.conorii// faisant la ''//fièvre boutoneuse méditéranéenne//''
{{ricket_map.jpg}}
!!Clinique
*''Fièvre''
*''Céphalées''
*''Erupution cutanée'' avec souvent ''lésion nécrotique centrale'' (tache noire)
*Deux à quatorze jours après une ''piqûre''.
!!Diagnostic
*''Sérologie''
*''PCR'' ou ''Culture'' ou encore ''Immuno-histochimie''
!!Traitement
*la ''Doxicycline'' est à débuter de manière empirique, même avant le diagnostic, car les complications peuvent être fatales
undefine
!! Score ESC (European Society of Cardiology)
*Score ''Européen'' dont fait partie la suisse
*Exprime la ''Mortalité à 10 ans'' et pas les événements
{{score_ESC.jpg}}
!!Score GLSA
* Score ''Suisse''
* Est fait seulement chez des ''Hommes''
* Evalue le risque d'''Evenement coronarien sur 10 ans''
{{score_GLSA.jpg}}
!!Score de Frahmingam
*Score ''Américain'' pas adapté a notre population
* Evalue le risque d'''Evenement coronarien sur 10 ans''
!!Definition
*''Human herpesvirus 6 (HHV6)'' and ''HHV7'' are closely related and have similar presentations, although HHV6 is more prevalent.
*Most children are infected with HHV6 or HHV7 by the age of ''2 years'', usually from the oral secretions of a family member.
* They classically cause exanthem subitum (also known as roseola infan tum), characterised by a ''high fever ''with malaise lasting about ''three days'', followed by a ''generalised macular rash'', which appears as the fever wanes. Many children have a febrile illness without rash, and many have a sub clinical infection.
*Exanthem subitum is frequently clinically misdiagnosed as measles or rubella; these infections are rare in the UK and if suspected should be confirmed serologically.
*Another frequent occurrence in primary HHV6 infection is that infants seen by a doctor during the febrile stage are prescribed antibiotics, and when the rash appears, it is erroneously attributed to an ‘allergic’ reaction to the drug.
*Primary HHV6/HHV7 infections are a common cause of ''febrile'' ''convulsions''. Rarely, they may cause aseptic meningitis, encephalitis, hepatitis, or an infectious mononucleosis like syndrome.
{{roseole.jpg}}
{{rougeole.jpg}}
!!Généralités
* __''Maladie sévère''__ avec ''__exanthème__'' avec ''__toux__'' et ''__EF__''
* Virus de la famille des //paramoxyvirus//
* Homme est son seul réservoir
* Transmission par contact direct avec des ''gouttelettes''
* Maladie endémique si 20% de la population n’est pas immuns
* Epidémies si >25% des la population pas immune
!! Clinique
//Prodromes//
* ''__Fièvre très elevée__''
* ''Malaise'' et ''__photophobie__''
* ''__Conjonctivite__'' et ''__rhinite__''
* Apparition des ''__taches de Koplik __''(Taches blanchâtres sur fond rouge se manifestant sur la muqueuse de la joue) qui disparaissent avec l'apparition du rash
<$button popup="$:/koplick_spots.jpg" >
[img width=64 [images/koplick_spots.jpg]]
</$button><$reveal type="popup" state="$:/koplick_spots.jpg"><div class='tc-tiddler-frame'>
{{koplick_spots.jpg}}
</div>
</$reveal>
//Phase du Rash//
* Développement d’un ''__exanthème__'''' maculo-papuleux rouge foncé'' et confluent
*__d'abord au visage__ puis sur le reste du corps
* Evolution en une'' __décoloration brunâtre __''et'' fine __desquamation__''
* Trachéo-bronchite avec ''__toux__'' importante
* Diarrhées possibles (témoignant de la réplication du virus dans l’épithélium digestif)
*''Contagiosité'' dans une fenêtre de ''5j avant et jusqu'à 5j après le début du rash''
!!Complications
//Aiguës//
* ''OMA'' (15%)
* ''Pneumonie interstitielle'' (5%)
* ''Encéphalite'' (0.1%): Apparait ''7-10j après'' une rougeole
**➔ Céphalées + vomissements et convulsions
**Encéphalite de mauvais pronostic : 1/3 de mortalité, 1/3 de séquelles neurologiques
//Chroniques//
*''Panencéphalite subaiguë sclérosante (PESS)'' (1/100’000)
**Encéphalite provoquée par une infection persistante du virus dans le SNC
**Apparait en moyenne ''7ans après'' infection par le virus
**Encéphalite subaiguë avec ''démence'' progressive puis ''décès''
// Chez l'adulte//
* Maladie très sévère
* Prodromes et signes majeurs identiques
* ''Pneumonies'' très fréquentes et plus graves (infections secondaire à une immunosuppression)
* ''Encéphalites'' et hépatites plus fréquentes
!!Diagnostic
*''Clinique''
*''PCR'' pharyngé
*''Sérologie'' utile mais tardive
//le diagnostic doit être posé sans retard pour prévenir la transmission à l’entourage non immun//
!!Traitement
//Vaccin//
* Vaccin vivant atténué (''ROR'') en 2 doses; à ''12'' puis ''24'' mois
*Patients adultes à risque de pas être vaccinés:
**__Migrants__
**Antroposophes, Religieux,
**Soignants
*//L'étude d'Andrew Wakefield sur les 12 enfants avec lien vaccin-autisme a été retirée car les données ont été falsifiées//
// Prévention secondaire//
*''Informer médecin cantonal ''dans les 24h
*Contagieux 5j avant et 5j après le debut de l'exanthème
*Le contact peut se faire jusqu'à 2h après, juste en se trouvant dans la même salle que l'infecté
*Jusqu'à 72h pour ''vacciner'' ''les'' ''gens'', vacciner 2 Doses.
*Ne pas vacciner:
** les gens avec les 2ROR prouvées
**les gens qui l'ont déjà eue
**les gens qui ont eu une sérologie positif
*Protéger les populations a risque: nouveaux nés et immunosupprimés
undefine
*Le'' rouget du porc'' est une maladie bactérienne des porcins, parfois des agneaux, des veaux et occasionnellement de l'homme. Cette zoonose est causée par le bacille //Erysipelothrix rhusiopathiae.// *E. rhusiopathiae can cause an ''indolent cellulitis'', (avec es ''plaques rouges brillantes)'' more commonly in'' individuals who handle fish and raw meat.'' * It gains entry typically by ''abrasions in the hand''. "Bacteremia and endocarditis are uncommon but serious sequelae. * Traitement par simple ''pénicilline Po 7 jours''.
![ext[rubeole.pdf|./pdf/rubeole.pdf]] <!-- Texte caché pour la recherche rubéole Rubella 140 The diagnosis of maternal infection must be confirmed serologically as clinical diagnosis is unreliable. The risk and extent of fetal damage are mainly determined by the gestational age at the onset of maternal infection. Infection before 8 weeks’ gestation causes deafness, congenital heart disease and cataracts in over 80% (Fig. 9.6a). About 30% of fetuses of mothers infected at 13–16 weeks’ gestation have impaired hearing; beyond 18 weeks’ gestation, the risk to the fetus is minimal. Perinatal medicine Box 9.3 Diagnosis of congenital rubella, cytomegalovirus (CMV) and Toxoplasma infection Mother Seroconversion on screening serology Fetus Amniocentesis or chorionic villus sample, PCR Placenta Microscopy for syphilis, PCR Urine from infant Rubella, CMV – culture, PCR Blood, CSF, other samples from infant Culture, PCR Blood serology Rubella-specific IgM, CMV-specific IgM, Toxoplasma-specific IgM and persistently raised Toxoplasma IgG Viraemia after birth continues to damage the infant. Tests used to confirm the diagnosis are shown in Box 9.3. The range of clinical features characteristic of congenital infections is shown in Figure 9.6b. Congenital rubella is preventable. In the UK, it has become extremely rare since the measles/mumps/ rubella (MMR) vaccine was introduced into the child hood immunisation programme, but this is dependent on the maintenance of a high vaccine uptake rate. -->
!!Defiinitions *Elle survient ''fréquemment chez l’homme d’âge mûr'' qui ressent comme un'' « coup de fouet »'', voire un « clac » audible lorsque par une brusque contraction du triceps sural, le tendon se déchire alors que le pied s’est bloqué au sol. *Ce phénomène se rencontre assez souvent lors d’''accélération soudaine, de changement brusque de direction'', de saut. *Le patient ''peut marcher ''mais ne déroule pas le pied et il n''e peut pas se mettre sur la pointe du pied touché.'' *A l’inspection, en regardant de profil le patient en décubitus ven-tral, la flexion du pied est spontanément plus marquée du côté lésé. *Le'' test de Thompson'' est positif et signe la rupture, si, sur un patient en décubitus ventral, les pieds hors du lit d’examen, on constate'' l’absence de flexion passive lorsque l’examinateur serre le mollet du côté lésé''. *Il faut se méfier du diagnostic de rupture partielle à l’ultrason ; les ruptures se faisant à différents niveaux peuvent donner l’impression d’absence de solution de continuité. *Le ''traitement'' est habituellement ''chirurgical'' soit à ciel ouvert, soit à ciel fermé, mais l’on peut tenter dans certains cas un traitement conservateur par immobilisation plâtrée en équin pendant environ huit semaines.
![ext[RPM.pdf|./pdf/RPM.pdf]] <!-- Texte caché pour la recherche Fening ph -->
undefine
undefine
undefine
undefine
{{SAOS_schema.jpg}}
!!Définition
*le ''Syndrome des Apnées Obstructives du Sommeil'', ou ''SAOS'' est une maladie fréquente touchant surtout les ''hommes obèses'' et les femmes ménopausées.
*Il correspond à des ''obstructions répétées des VAS lors du sommeil'', qui vont générer des ''asphyxies'' répétées qui vont réveiller le patient maintes fois et altérer son sommeil.
*Une ''Apnée'' correspond à une pause respiratoire d'au moins ''10sec''
*une ''Hypopnée ''correspond à une diminution du ''flux >30%'' et de la ''saturation >3%'', le tout pendant ''>10 sec''.
*la ''Définition'' du SAOS est un ''IAH'' (''index apnées + hypopnées'') à ''>5 par heure'' associé à une ''symptômatologie diurne''.
*les ''Apnées mécaniques'' correspondent à 90% des cas, tandis que les ''apnées centrales'' representent 10% des cas et sont des apnées liées aux AVC ou Médicaments.
*les ''Facteurs de risque'' sont:
**''Obesité'' et ''largeur du cou''
**''Tabac'' et ''Diabète''
**''Retrognathisme'' (mandibule en arrière)
**''Obstruction des cavités nasales''
**''Médicaments'' (myorelaxants et dépresseurs respiratoires)
**les ''Complications'' possibles sont
**''HTA systémique'' voir ''HTA pulmonaire''
**''Maladie coronarienne'' aggravée.
!!Clinique
*''Ronflements'' avec ''Pauses respiratoires'' souvent objectivées par le ''//conjoint//''.
*''Troubles du sommeil'' avec difficulté d'endormissement
*''Réveils nocturnes'' fréquents
*''Asthénie diurne'' avec impression de sommeil non-réparateur
*''Endormissements diurnes'' potentiellement invalidants (au volant, au travail, etc.)
*''Céphalées''
*L'examen physique est souvent normal, hormis des anomalies ORL éventuelles.
!!Investigations
*l'''Echelle d'Epsworth'' permet de confirmer une suspicion de SAOS:
{{SAOS_echelle_epsworth.jpg}}
*La ''Polysomnographie'' est l'examen de choix
*Une alternative à la polysomnographie est l'''enregistrement portable ambulatoire''
{{SAOS_polysomnographie.jpg}}
!!Traitement
*''Arret du tabac'' et ''perte de poids''
*''Position couchée sur le coté''
*la ''CPAP'' est le traitement de choix, ''//MAIS//''
**50% des patients le voudront
**50% de ceux qui la veulent l'utilisent pas !
*Il faut donc bien investiguer avec le patient si il est motivé à se lancer dans le traitement.
*le ''propulseur mandibulaire'' ou la ''chirurgie'' sont des alternatives mais avec un résultat pas génial.
{{SAOS_CPAP.jpg}}
undefine
undefine
undefine
undefine
{{sarcoidose.jpg}}
!!Définition
*la ''Sarcoïdose'' est une ''maladie systémique granulomateuse'' caracterisée par la formation de ''granulomes non caséeux'', c'est à dire sans nécrose caséeuse (contrairement à ceux de la TBC)
*Un organe atteints presque tout le temps est le ''Poumon'', qui développe des granulomes et des ganglions élargis.
*La maladie est d'''étiologie inconnue'' et touche surtout les ''femmes africaines'', souvent avant 40ans.
*La Sarcoidose a en général un ''bon pronostic'' avec une résolution en quelques années, mais certains patients peuvent devenir chroniques. L'''atteinte cardiaque'' est peu fréquente mais c'est l'atteinte la plus ''mortelle'' de la maladie.
!!Clinique
*''Symptômes généraux'' tels que la ''fatigue'', la ''perte de poids'', la ''fièvre'' et les ''malaises''. Cependant le patient peut être tout à fait ''asymptomatique''.
*''Toux sèche'' et ''dyspnée'', surtout à l'''exercice'' au niveau pulmonaire
*[[Erythème Noueux]] au niveau dermatologique, ainsi que ''plaques'' et ''nodules'' cutanés.
*''Uvéite antérieure'' le plus souvent, ou parfois uvéite postérieure et conjonctivite, au niveau ophtalmo
*''Arythmies'' ou ''Troubles de la Conduction'' ou ''Mort subite'' au niveau cardiaque
!!Investigations
*la ''RX thoracique'' montrera des ''adénopathies hilaires bilatérales'' qui est un point clé mais non spécifique à la sarcoïdose. Elle comprend ''[[4 stages radiologiques|sarcoidose_stages_rx.jpg]]'':
|!Stage|!Aspect Radiologique|
|''Stage I''|ADP hilaire bilatérale sans infiltrat|
|''Stage II''|ADP hilaire bilatérale avec infiltrat|
|''Stage III''|Infiltrat sans ADP (mauvais pronostic)|
|''Stage IV''|Poumons en rayon de miel|
*Au ''Labo'' on peut noter une ''élévation de l'ACE''. On peut aussi trouver une ''hypercalcémie'' ainsi qu'une ''hypercalciurie''.
*Les ''Fonctions pulmonaires'' peuvent monter un volume pulmonaire diminué et une diminution du DLCO.
*Le ''diagnostic définitif'' nécessite une ''biopsie transbronchique'' qui montrera des[[ granulomes non-caséeux|sarcoidose_histologie_granulome.jpg]].
*''Examen ophtalmologique'' systematique
*''ECG'' a la recherche de trouble du rythme
{{sarcoidose_stages_rx.jpg}}
!!Traitement
*La majorité des cas se ''résout en 2 ans'' sans nécessité de traitement
*les ''Corticoïdes systémiques'' sont le traitement de choix lorsque le patient est symptomatique ou avec une atteinte importante d'organes.
*Le ''Methotrexate'' est à utiliser si le patient est réfractaire au traitement corticoïdes.
*Assurer un suivi pneumologique régulier
undefine
undefine
undefine
*Infection ''HHV-8'' qu'on retrouve chez le patient atteint de ''HIV''. *Il s'agit de ''tumeurs cutanées'' commencant par des macules puis évoluant en ''papules'', évoluant en plaques. *il y a souvent une ''atteinte de la muqueuse'' *Les ''atteintes d'organes'' comme les poumons font la gravité de la maladie
undefine
{{scarlatine.jpg}}
!!Définition
*La scarlatine est l'une des maladies contagieuses de l'enfance causée par certaines souches de ''streptocoques du groupe A''. Ces souches produisent une ''toxine'' érythrogénique responsable du rash cutané.
*L'infection est plus commune chez les'' enfants en âge scolaire ''et inhabituelle chez les enfants de moins de 2 ans.
*La transmission survient habituellement par contact direct avec une personne infectée ou via l'émission des gouttelettes de salive.
* La période d'incubation est courte, entre 2 et 5 jours. Les cas non-traités restent infectieux pour une période prolongée mais une dissémination secondaire est peu probable après 24h d'antibiothérapie appropriée.
*5 à 10% des enfants sont des porteurs sains de cette bactérie au niveau pharyngé.
*L'infection survient surtout en période froide, touchant de façon épidémique les collectivités (écoles).
!!Clinique
*Habituellement, la maladie a un début brutal associant de la __''fièvre''__, des vomissements, des __''maux de gorge''__ et des ''douleurs abdominales''. La sévérité de la pharyngite est variable, souvent accompagnée par des ''adénopathies sous-mandibulaires ''et occasionnellement, des [[pétéchies palatines|scarlatine_palais.jpg]].
*Le rash se développe rapidement, souvent dans les 12h et toujours dans les 2 jours après le début des symptômes. Les'' joues et le front deviennent rouges'' mais il persiste une ''pâleur autour de la bouche'' (circumoral palor).
*Un'' rash confluent généralisé'' se développe sur la nuque et le tronc, épargnant généralement les cuisses mais impliquant les paumes et les plantes des pieds. Le rash de la scarlatine est souvent accentué dans les plis[[ (lignes de Pastia),|scarlatine_pastia.jpg]] spécialement dans la fosse anté-cubitale mais aussi dans le cou et les aisselles. Ce rash punctiforme fait penser au toucher à du papier de verre.
*La __''langue est caractéristiquement atteinte''__, initialement couverte d'un [[revêtement blanchâtre |scarlatine_langue_B.jpg]]à travers de laquelle protuse des papilles rouges et oedèmaciées.
*Après quelques jours, ce revêtement disparaît révélant une[[ langue rouge|scarlatine_langue_R.jpg]]. Après une semaine le rash typiquement commence à __''desquamer'' ''particulièrement sur les pieds et les mains''__.
!!Traitement
*La ''pénicilline'' pendant dix jours
undefine
undefine
undefine
undefine
undefine
undefine
undefine
!!Epidémiologie
*Incidence : ''1%'' (mais variation importante)
*''H=F''
*Début : ''fin de l'adolescence'' (Homme 18-23ans, femme 22-26ans, 2ème pic vers 35ans)
*''Schizophrénie à début tardif'' : après 45ans, F>H
!!Etiologie
*Hypothèse : ''maladie'' ''neuro-développementale progressive''
!!!Environnementaux
__''Facteurs directs ''__
*''Cannabis''
**Effet psychogénique
**RR augmenté de 2x de schizophrénie lors de consommation. Risque augmenté lors de prédisposition génétique.
**Effet dose dépendant
*Facteurs ''infectieux'' (virus, toxoplasma gondii, AC dirigés contre ces agents et les cytokines)
**Une contamination précoce entraînerait une altération du développement cérébral et favoriserait la survenue ultérieure de la maladie.
**Si la contamination survient pendant la grossesse, elle entraîne l’exposition in utero du fœtus à ces agents microbiens, ainsi qu’à la réaction immunitaire/ inflammatoire de l’organisme maternel.
*PIc ''saisonnier'' ''hivernal'' de naissance de patients schzophrénie : exposition prénatale aux facteurs infectieux, hypovitaminose D pendant la grossesse, variations météorologique (T° ambiante), variations nutritionnelles et/ou hormonales maternelles.
*Autre ''facteurs'' ''précoces'' (''famine'', ''traumatisme'' ''crâniens'')
__''Facteurs indirects''__ (on ignore le mécanisme exact mais associé à une plus haute prévalence)
*''Urbanicité''
*''Migration'' (en particularité niveau socio-économique du pays d'origine et couleur de peau foncée)
*''Précarité''
*Appartenance à une ''minorité''
*''Abus, maltraitance infantile''
{{schizophrenie-trauma-enfance.jpg}}
''__Facteurs obstétricaux__''
*Complications de la ''grossesse'' (saignements, pré-éclampsie, diabète, incompatibilité rhésus)
*''Développement'' ''fœtal'' anormal (faible poids de naissance, anomalies congénitales, circonférence crânienne réduite)
*Complications au moment de ''l’accouchement'' (hypoxie, césarienne en urgence, etc.).
''__Facteurs socio-démographiques__''
*''Individuels'' : vivre seul, famille monoparentale, minorité ethnique, précarité (-> sujet au rejet social)
*''Populationnels'' : fragmentation sociale (proportion élevée de personnes non mariées, de personnes vivant seules, de logements en location et un turn-over important de la population)
__''Facteurs composite''__
*Mixte de plusieurs facteurs
!!!Génétique
*Un parent atteint : risque de 10%, les deux : 30-50%
*Oncle-tante : 5%
*Jumeaux 40-50%. Même si ne l'expriment pas, c'est un facteur de risque qui est génétiquement transmis.
*22q11 (Di George) p.ex, mais polygénique.
=> ''Vulnérabilité'' ''génétique'' précipitée par un facteur environnemental révèle la maladie.
!!!Epigénétique
*''Hyperméthylation''/''hypométhylation'' de l'ADN -> diminution/augmentation de l'expression des gènes
*Il y aurait une ''transmission'' ''épigénétique'', mais les modifications peuvent aussi apparaitre dans la vie lors d'évènement environnementaux (fenêtres de vulnérabilité)
*Modification ''influencée'' par les facteurs ''ntutritionnels'', ''physiques'', ''psychiques'', ''psychosociaux'' (-> apparition à l'adolescence = fenêtre de vulnéabilité !)
*=> Prise en charge précoce importante
!!!Neurotransmission (DA, glutamate, GABA)
*''COMT'' = enzyme impliquée dans le catabolisme des neurotransmetteurs (''DA'' notamment)
*=> Anomalie de la méthylation des gènes codant pour la COMT (-> diminue son expression)
!!Facteurs prédicteurs
*Facteurs ''positifs'' : (facteurs de bonne évolution)
**''Âge d'apparition tardif''
**Sexe ''féminin''
**Bon ''fonctionnement'' entre les épisodes
**Présence ''d'éléments'' ''déclenchants''
**Prédominance de ''symptômes'' ''positifs''
*Facteurs ''négatifs'' (facteurs de mauvaise évolution)
**''Mauvais'' ''fonctionnement'' pré-morbide (beaucoup d'échecs scolaires p.ex)
**Prise de ''toxiques''
**''Mauvaise'' ''réponse'' au ''traitement'' (schizophrénie résistante au traitement)
**''Mauvaise'' ''alliance'' thérapeutique (isolement est un facteur mauvais)
**Prédominance des ''symptômes'' ''négatifs'' (indifférence émotionnelle, retrait social etc)
***//≠ Déprime, car le psychotique ne se plaint pas de ça (n'a pas le sens critique), contrairement au déprimé qui trouve dur de supporter//
=> Intervention précoce
!!Prévention
{{schizophrenie-prevention.jpg}}
!!!Phase prodromique I
*La __personne devient__ : ''Méfiante'', ''dépressive'', ''anxieuse'', ''tendue'', ''irritable'';
*Changements d’humeur, troubles du sommeil, perturbations de l’appétit, perte d’énergie et diminution de la motivation, difficultés de concentration et de mémoire
*Ressent des phases d’accélération ou de ralentissement du cours de la pensée, que les « choses » apparaissent différentes ou changées (va un peu trop loin dans l'interprétation etc)
!!!Phase prodromique II
*Les__ proches ou les amis remarquent__ :
*Se conduit différemment
*Présente une ''diminution'' des ''performances'' ''professionnelles'' ou ''scolaires'' (absentéisme ++)
*Se ''retire'' et ''s’isole''
*Ne montre plus d’intérêt pour les contacts sociaux
*Semble moins active
!!Présentation clinique
*Symptômes ''positifs''
**Idées délirantes, hallucinations, pensées incohérentes, comportement grossièrement désorganisé
*Symptômes ''négatifs''
**Réduction de l'expression des émotions, aboulie (affaiblissement brutal ou progressif de la volonté de faire des choses pouvant aller jusqu'à sa disparition totale, entraînant une inhibition de l'activité physique et intellectuelle), démotivation, perte de l'entregent (retrait social), diminution des activités intellectuelles.
*Dysfonction ''cognitive'' et ''motrice''
*Troubles de ''l'affect'' (rit pour des choses particulières, ou pour rien)
*''Intégration sociale difficile '': relation, travail, habitation, loisirs.
!!Diagnostic
!!!CIM-10
{{CIM10-schizophrenie.jpg}}
''__Sous types de schizophrénie__''
*''Paranoïde'' (ou paranoïaque) (=délires et hallucinations ++)
*''Hébéphrénique'' ( trouble de l'affect, de la volonté et une désorganisation sont au premier plan)
*''Catatonique'' (trouble de la psychomotricité au premier plan)
*''Indifférenciée'' (difficile à classifier dans un type, mélangé)
*''Simple''
*''Résiduelle'' (phase post critique, phase de rémission)
!!!DSM-5
{{schizophrenie-DSM-5.jpg}}
*A : au moins un des symptômes et idées délirantes ou hallucination ou discours désorganisé
*On peut spécifier : premier épisode / épisodes multiples
*On peut spécifier : phase aiguë, rémission partielle ou rémission complète
*//Disparition des sous-types en raison de leur manque de reproductibilité. Seul le sous-type catatonique est partiellement préservé//
!!Evolution
{{types-schizo.jpg}}
!!DD
*Troubles schizoaffectifs (schizophrénie + trouble affectif = dépression, bipolaire)
*Troubles délirants persistants (délire dans un champ/domaine uniquement)
*Trouble délirant induit (p.ex post bloc, métabolique etc) -> peut prendre quelques semaines à se résoudre
*Trouble schizophrénique
*Trouble psychotique aigu transitoire (dans un moment de stress aigu : trauma, accident, maternité etc)
*Trouble schizotypique (Birrareries du comportement, mais ne remplissant pas les critères de la schizophrénie, croyances, etc.)
{{DD-schizo.jpg}}
!!Co-morbidités des psychose
*''Toxicomanie''
*''Trouble dépressif''
*''Maladie physique''
*''Déficits cognitifs'' (seul 25% des patients ont un profil neuro-psychologique normal) (et ceux là ont moins de symptômes négatifs et extra-pyramidaux, plus de contacts sociaux et moins d'hospitalisation)
**Peut toucher ''la mémoire épisodique, le speed processing''
**Plus fréquents lors de ''symptômes négatifs''
**La sévérité des troubles cognitifs est un des principaux déterminants des ''capacités fonctionnelles socio-professionnelles''
!!Traitement
*Pharmacologique
*Suivi individuel
*Approche familiale
*Psycho-éducation
*Compétences sociales (réhabilitation)
*Remédiation cognitive
*Psychothérapie
!!!Pharmacologique
*''Neuroleptiques'' de 1er génération (Haldol, prométhazine)
*2ème génération (Rispéridone, Olanzapine, Aripiprazole, Quétiapine, Amisulpride, Sertindole, Clozapine)
*''EI'' (a annoncer au patient : fréquents, lours)
**Syndrome ''extrapyramidal''
**Syndrome ''métabolique''
**''Hyperprolactinémie''
**''Dyskinésie'' aigüe et tardive
**''Akathisie''// (impatiences, une impossibilité de s'asseoir ou de rester dans la position assise, un besoin irrépressible d'agitation, de se balancer en position debout ou assise, de piétiner ou de croiser et décroiser les jambes)//
**Modification ''formule'' ''sanguine''
!!Neurobiologie
*''Diminution'' de ''l'épaisseur'' ''corticale'' (substance grise) et du ''niveau'' ''d’activation'' fonctionnelle : ''insula antérieure'' et ''cortex'' ''cingulaire'' ''antérieur dorsal''
*''Diminution'' de la ''substance'' ''grise'' et ''hyperactivation'' : ''Insula postérieure'', ''cortex'' ''cingulaire'' ''antérieur ventral''
*Réduction de ''l'épaisseur'' ''corticale'' : ''gyrus'' ''temporal'' supérieur
*Disconnectivité de la substance blanche (diminution de la taille du corps calleux)
*//Le sexe masculin, la durée d’évolution et la présence de symptômes négatifs sont associés à une majoration de la perte de substance grise. Mais seul la chronicité induit des anomalies de la substance blanche//
!!!Neurotransmetteurs en cause
*''Dopamine'' :
**''Hyperréactivité'' dopaminergiques ''sous'' ''corticale''(rc D2) -> ''symptômes'' ''positifs''
**''Hypoactivité'' ''préfrontale'' (rc D1) -> ''symptômes'' ''négatifs'' + ''troubles'' ''cognitifs''
*''Sérotonine'' : ''inhibe'' la ''production'' de ''dopamine corticale''
**Au niveau cortical le bloc de 5HT2A par neuroleptique atypique stimule la libération de dopamine corticale susceptible de diminuer les symptômes négatifs
*''Glutamate'': activité glutamergique excessive produit une forme ''d’excitoxicité'' qui pourrait entraver le processus de neurodéveloppement
**Hypothèse : « NMDA Receptors Hypofunction » une fois que la pathologie s’est installée
**Antagonistes NMDA PCP et Ketamine déclenchent symptômes
!!Maternité et psychose
!!!Signes d'appel de décompensaiton psychiatrique aiguë
*''Désorganisation'' de la ''pensée'', perte des repères
*''Agitation'' psychomotrice, perplexité
*''Discours'' ''inadéquat'' : désorganisé, agressivité, délire
*''Comportement'' ''inadéquat'' : désinhibition, gestuelle brusque avec le bébé, risque d’auto/hétéroagressivité et de passage à l'acte, irritabilité
*''Humeur'' ''modifiée'' :fluctuation rapide de l'humeur, euphorie à tristesse, idées de grandeur ou de dévalorisation
*''Idées'' ''noires'' et idées ''suicidaires''
*''Sommeil'' ''perturbé''
*Idées de ''persécution'' (hallucinations, bizarrerie de la pensée ou du comportement, délire)
!!!Diagnostics psychiatriques maternité
*''Dépression'' ''anténatale'': 10-20% des grossesses (dernier trimestre surtout)
*''Babyblues'': 30-70% des grossesses (labilité affective, pleurs → se résout dans les 3-4j suivant l’accouchement. Si continue: dépression post-partum)
*''Psychose'' ''aiguë'' de la ''grossesse'' : rare (0,7/1000)
*''Troubles'' ''anxieux'': 5-15%
*''Dépression'' ''post''-''partum'': 10 à 15 % de toutes les mères dans l'année après l'accouchement
*''Psychose'' ''puerpuérale'': 1-2/ mille accouchements
!!!Psychose aiguë de la grossesse
*''Rare''
*= Episode psychotique survenant durant la période anténatale (sémiologie clinique identique à la psychose puerpérale mais plus rare en anténatal)
*''Confusion'' : Onirisme (état entre rêve et réalité), trouble de la mémoire, stupeur, agitation, parfois associée à une excitation maniaque ou des propos délirant ; en général rapidement résolutifs
*''Déréalisaiton''
*''Labilité'' ''affective''
*''Difficulté transitoire de reconnaître l'enfant comme le sien''
!!!Psychose puerpérale
*''Rare''
*Apparition brutale entre le'' 3e et le 14e jour après l’accouchement''
*''Symptômes'': idées ''délirantes'', des ''hallucinations'', une perception altérée de la réalité, ''désordres'' ''thymiques'' francs, troubles ''schizophréniformes''
*''Centrés sur l’enfant et sa naissance'' (négation de la maternité, sentiment de non-appartenance ou de non-existence de l’enfant, conviction que l’enfant est mort, qu’il a été substitué, etc.)
*Risque de mise en danger pour la patiente (''suicide'' 5% ) et pour le bébé
*Majorité des patientes admises pour le premier épisode de psychose: pas connues pour un diagnostic psychiatrique préalable
*Etiologie reste inconnue (Hypothèse d’une bipolarité sous-jacente)
*''Attitude'' : évaluation psychiatrique en urgence et hospitalisation en milieu psychiatrique (+ traitemetn par neuroleptiques)
*''Evolution'' : dysthimie ou bipolarité ou dépression récurrente (ou rémission), mais pas de schizophrénie
!!Notes
*Dépression avec symptômes psychotiques possibles
*Mélancholie : ne prend plus soins de soi, baisse très sévère de l'estime de soi. Peut aussi avoir des symptômes psychotiques.
*Trouble schizoaffectif (entre les deux)
*''Délire''
**Naît en général sur fond de modification générale du vécu -> appréciaiton erronée de la réalité
**Evidence (certitude ne dépend pas de l'expérience) : conviction même si en contradication avec la réalité et expérience du sujet sain (ainsi que opinions et croyances collectives)
**''Forme'' : pressentiment délirant, perception délirante, idées délirantes non systématisée, systématisation du délire, dynamisme du délire
**''Contenu'' idées délirantes de référence, préjudice/persécution, jalousie, culpabilité, ruine, hypochondriaque, de grandeur
*''Hallucinations''
**Trouble de la perception où le patient décrit une ''perception en l’absence d’un stimulus ''
**Hallucinations acoustico-verbales
**Autres hallucinations auditives
**Hallucinations visuelles (rare chez les schizophrénie - mais par contre oui dans intoxications médicamenteuses, toxiques, delirium tremens, organique etc)
**Hallucinations cénesthésiques
**Hallucinations olfactives et gustatives (rare)
*''Flexibilité cireuse'' : on met les patients dans une position et le patient reste.
*''Psychotropes et grossesse''
**Beaucoup d'abstention pendant la grossesse -> risque suicidaire et d'infanticide !
**Tous les psychotropes passent la barrière placentaire
**Pendant la grossesse : éviter médicaments induisant constipation, nausées, insomnie, tachycardie, prise pondérale, sédation, hypotension orthostatique.
undefine
undefine
undefine
undefine
undefine
{{sclerodermie_classification.jpg}}
!!Généralités
*La sclérodermie est une ''maladie autoimmune'' avec un ''épaississement du derme'' ([[production de collagène|sclerodermie_histo.jpg]]) ainsi qu’une ''[[perte des annexes|sclerodermie_schema.jpg]]''.
*Les autres organes touchés sont les ''reins'', les ''poumons'' et surtout le ''tube digestif'' (déterminant du pronostic)
*Le ''diagnostic'' est souvent posé par la ''clinique''. Il faut aussi doser les différents ''auto-anticorps'' (ANA, Anti-Centromères, Anti-SCL70)
*La Sclérodermie est divisée en deux entités:
**la ''sclérodermie localisée'' (ou morphée)
**et la ''sclérodermie systémique'' qui comprend la //''forme limitée''// et la //''forme diffuse''//
!!Sclérodermie localisée
*La sclérodermie localisée comprend les lésions cutanées appelées ''Morphées'' qui peuvent être [[en plaque,|morphee_en_plaques.jpg]] en [[coup de sabre|morphee_coup_sabre.jpg]] ou [[linéaires|morphee_lineaire.jpg]].
*le patient ne présente pas d’atteinte d’autres organes (digestif, rein, poumon) ni de syndrome de Raynaud
*le traitement comprend des corticoïdes topiques.
!!Sclérodermie systémique
''Sclérodermie systémique limitée''
*la ''sclérose systémique limitée'' est associée avec des ''anticorps anti-centromères''. Elle a un ''bon pronostic'' et comprend une ''atteinte des extrémités et de la face'' essentiellement. Elle Comprend le syndrome ''CREST'':
**''[[Calcinose dermique|dermatomyosite_calcinose_cutanee.jpg]]''
**''Raynaud'' (avec ulcérations digitales en [[morsure de rat|sclerodermie_morsure_rat.jpg]])
**''Esophage''
**''Sclérodactylie'' (sclérose des [[extrémités|sclerodermie_sclerodactylie.jpg]] d’abord, puis [[nez et bouche|sclerodermie_nez_bouche.jpg]], la [[progression est pronostique)|sclerodermie_progression.jpg]]
**''[[Telangiectasies|sclerodermie_telangiectasies.jpg]]''
''Sclérodermie systémique diffuse''
*la ''sclérose systémique diffuse'' est associée avec les ''anticorps Anti-SCL-70'', elle est de ''mauvais pronostic'' avec une ''évolution systémique rapide'' et une ''atteinte des organes'':
**''Reins''
**''Digestif''
**''Poumons''
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{sclerose_en_plaques_schema.jpg}}
!! Définition
*La ''SEP'' correspond à une ''inflammation chronique du SNC'', avec une ''atteinte de la Myéline'' se traduisant par une démyélinisation.
*Elle est associée à une ''prédisposition génétique'' (HLA-DRB1), ainsi qu'à ''EBV'' et aux ''Régions peux exposés au soleil'' , ainsi qu'aux ''stocks de vitamine D bas''.
*Elle touche surtout les ''femmes'', commençant entre ''17-35ans''.
*Il existe ''4 formes principales'':
**Les'' Poussées-Rémissions'' qui sont les plus fréquentes, dont la progression peut être évaluée par une Echelle d'AVQ: la EDSS
**La forme ''Secondairement Progressive'' qui est le destin de beaucoup de Poussées-Rémissions
**La forme ''Primairement Progressive'' qui débute à un age plus avancé typiquement
**La forme ''Progressive-Récurrences''
{{sep_formes.jpg}}
*Il existe aussi plusieurs ''variantes'' de la SEP dont principalement:
**la ''SEP bénigne'' caractérisée par une unique poussée avec 15 ans de maladie sans progression. Elle peut quand même évoluer en SEP
**la ''Variante de Marburg'' qui est une SEP fulminante et fatale
**le ''Devic's'' qui comprend une nervrite optique sévère
!! Clinique
{{sep_clinique.jpg}}
La ''Clinique'' comprend des ''crises'' durant quelques ''jours-semaines'' avec des symptômes d'''au moins 24h'' comprenant principalement:
*des ''troubles visuels''
*des ''parésies, paresthésies''
*des ''troubles de la marche''
*le ''signe de Lhermitte'' qui correspond à des décharges éléctriques dans les membres lors d'une flexion de la nuque
*le ''phénomène d'Uthoff'' qui correspond à une augmentation des symptômes à la chaleur
*Les autres symptômes comprennent la fatigue, la dépression et des problèmes d'incontinence
!! Investigations
*L'''IRM du cerveau et de la moelle'' montrera des ''plaques hyperintenses en T2'', en particulier les ''doigts de Dawson'' (Lesions periventriculaires s'étendant jusque dans le Corps Calleux). De plus les ''lésions actives prennent le contraste'' au Gd+, ce qui est une façon de déterminer la dissémination des lésions dans le temps.
*La ''PL'' montrera des ''bandes oligoclonales'' ainsi que des ''~IgG Augmentés''
*On peut aussi faire des ''potentiels évoqués'' visuels, auditifs ou sensorimoteurs
*le ''diagnostic'' se base sur ''≥2 lesions disséminées dans l'espace et le temps'', associées à des crises
{{SEP_irm.jpg}}
!! Traitement
*le ''traitement aigu'' comprend principalement de la ''Methylprednisolone IV'' pendant 3j-1 semaines. On peut aussi faire de la Plasmapherese si le traitement marche pas.
*le ''traitement de fond'' comprend l'''Interferon-Beta'' (//Betaseron®//), le ''Glitamer-acétate'' (//Copaxone®//) et un nouveau traitement: le ''Fingolimod''.
!! Généralités
*la ''Sclérose Latérale Amyotrophique'' (ou Maladie de Lou Gehrig) est une ''maladie neurodégénérative progressive'' atteignant le ''Motoneurone Supérieur'' et le ''Motoneurone Inférieur''.
*La maladie commence par des ''faiblesses musculaires'', progresse jusqu'à l'''invalidié'' au fil des mois/années et finit par être ''fatale à long terme''.
*L'''Etiologie'' est principalement ''Idiopathique''. Elle atteint les gens à partir de 50 ans en général.
*Elle ne touche PAS les muscles oculaires, la sensibilité ni la vessie.
!! Clinique
*Le patient présente une ''parésie proximale'' qui évolue de façon ''progressive.'' D'abord notée au niveau des ''bras et jambes'' mais s'étend à d'autres muscles avec le temps.
*On observe l'''Atteinte du MNS'':
**''Parésie''
**''Spacticité''
**''Hyperréflexie''
*On observe l'''Atteinte du MNI'':
**''Parésie''
**''Atrophie''
**''Fasciculations''
*Il n'y a ''pas de douleurs'' et ''pas de perte de sensibilité''.
*Dans la SLA de type ''Bulbaire'', le patient développe des dysphagies et dysarthries. (cf. [[Paralysie Bulbaire]])
*Lors d'une atteinte ''Respiratoire'' on trouve une faiblesse du diaphragme progressive, fatale à terme
!! Diagnostic
*La ''Clinique'' observée sur ''3 endroits'' permet de poser le diagnostic
*On peut aussi investiguer avec des ''ENMG'' montrant les dégénérations des motoneurones impliqués
!! Traitement
*Il n'y a ''pas de traitement curatif'' malheureusement !
*Le ''Riluzole''(antagoniste du Glutamate) peut prolonger la vie de quelques mois.
{{motoneurone_superieur_vs_inferieur.jpg}}
![ext[dermato_sclerose_tubereuse_bourneville.pdf|./pdf/dermato_sclerose_tubereuse_bourneville.pdf]] <!-- Texte caché pour la recherche Sclérose tubéreuse de Bourneville (Génodermaotse) - Hamartomes peau, cheveux, cœur, yeux, reins, poumon, os - AD, rare, H=F, 75% mutations de novo - Implique la voie mTor - Angoifibromes : papules médiofaciales érythémateuses monomorphes - Tumeurs de Koenen : tumeurs ungéales - Plaques « peau de chagrin » - Taches achromatiques : macules hypopigmentées en feuille de sorbier (lumière de Wood = UVc) ou en confettis. - Acné (mais pas de comédons, papules, pustules) Critères majeurs : peau (angiofibromes, tumeurs de Koenen, ≥3 macules achromatiques, plaques peau de chagrin), hamartomes rétiniens multiples, tuber cortical, rhabdomyome cardiaque, lymphangiomatose, angiolipome rénal Critères mineurs : plaques achromatiques en confettis, puits dans l’émail dentaire, kystes osseux, fibromes gingivaux, kystes rénaux multiples, polypes rectaux hamartomateux → Diag certain 2 majeurs ou 1 majeur + 2 mineurs - Sirolimus (inhibe mTor) Manifestations systémiques : - Tubers cérébraux (retard mental, épilepsie) - Hamartomes rétiniens - Rhabdomyomes cardiaques (se voit in utéro) - Angiomyolipomes rénaux (risque d’IR) GEN CLIN DD DIAG TTT CAVE -->
undefine
undefine
undefine
undefine
undefine
undefine
{{scoliose_clinique.jpg}}
!!Scoliose
*La scoliose correspond à une ''deformation non réductible de la colonne'' avec ''courbure'' et ''rotation des vertèbres''. Elle touche surtout les ''enfants de 10-14ans''. Elle est plus fréquente et sévère chez les ''jeunes filles''.
*L’origine est surtout ''idiopathique''. Les autres causes peuvent être congénitale, neurologique ou biomécanique. on peut avoir le Mafran, ou encore la Neurofibromatose.
*__Rappel:__ Une scoliose posturale (ou attitude scoliotique) n’est pas une vraie scoliose, elle se réduit avec la correction de la posture
*La ''Clinique'' de l’enfant correspondra à un ''dos en S'', avec l’apparition ''d’une Gibbosité'' lorsqu’il courbe son dos (test d'Adams)
*Il n'y a généralement ''pas de douleur'' et ''pas de raideur''.
*Les ''Investigations'' comprennent la ''RX de la colonne'', afin d’évaluer l’[[angle de Cobb |scoliose_angle_cobb.jpg]](angle entre les droites des deux vertèbres aux extrémités de la scoliose)
*Les ''Facteurs de risque de progression'' sont un angle de ''Cobb élevé'' (<20° avant la maturité), Un ''[[Stade de Risser bas|scoliose_risser.jpg]]'' (maturation osseuse de l’aile iliaque), un ''Stade de Tanner bas'' (maturation des OGE), un ''Cartilage triadé ouvert'' (au niveau de la fosse acétabulaire), une ''vitesse du pic de croissance élevée'', en gros un ''jeune âge''.
*Les ''complications'' sont une ''gêne respiratoire'', des ''douleurs rachidiennes'' et un ''retentissement psychologique''.
*le ''Traitement'' sera soit l’observation (si cobb<25°), le ''corset'' (si cobb>25° ou progressif) ou finalement la ''chirurgie'' (si ''cobb>45''°), qui consistera à bloquer le rachis avec des vis.
{{scoliose_rx.jpg}}
!!Maladie de Scheuermann
*La maladie de Scheuermann (ou Ostéochondrite vertébrale juvénile) est une ''d__éformation thoracique en cyphose__'', qu’on retrouve chez les ''__enfants__''. Elle est ''aggravée par le sport''.
*Elle est assez élevée dans le population, et survient pendant la ''puberté'' souvent de manière ''asymptomatique'', sinon le patient peut présenter des ''douleurs''.
*le ''Diagnostic est Radiologique'' avec une ''RX du rachis'' qui montrera une __cyphose thoracique >40°__ (au lieu des 25° normaux) et une __cuéniformisation des vertèbres.__ ainsi que des __hernies de schmorl__
*le ''Traitement'' est soit ''conservateur'' (<50°), soit ''un corset'' (50-75°) soit ''chirurgical'' (>75°)
{{scheuermann_maladie.jpg}}
{{scheuermann_rx.jpg}}
!Score de CIWA !!Définition *Score de ''sevrage d'alcool''. Un sevrage dure ''entre 3j et 10j''. *On réalise le score de CIWA aux 4h *Plus le score est grand, plus on donnera de l'Oxyzépam lors du sevrage !!Score |!Nausées/vomissements|''0'' pas de nausées, pas de vomissements| |~|''1'' nausées légères, sans vomissement| |~|''4'' nausées intermittentes avec efforts de vomissement| |~|''7'' nausées constantes, avec efforts de vomissement et vomissements fréquents| |!Trémor bras tendus et doigts écartés|0 pas de trémor| |~|''1'' trémor non visible mais perceptible au contact du bout des doigts| |~|''4'' trémor modéré, bras en extension| |~|''7'' trémor sévère, même avec bras non-tendus| |!Transpiration|''0'' pas de transpiration visible| |~|''1'' transpiration à peine visible, mains moites| |~|''4'' transpiration visible sur le front| |~|''7'' transpiration profuse| |!Anxiété|''0'' pas d’anxiété, à l’aise| |~|''1'' anxiété légère| |~|''4'' anxiété modérée, contenue| |~|''7'' état de panique sévère comme lors de délirium tremens ou de psychose aiguë| |!Agitation|''0'' aucune| |~|''1'' activité motrice légèrement augmentée| |~|''4'' agitation modérée, activité motrice incessante, continue| |~|''7'' état d’agitation motrice constant, mouvements d’avant en arrière durant la plus grande partie de l’interview| |!Troubles tactiles|''0'' aucun| |~|''1'' démangeaisons, picotements, ↓ sensibilité très légers| |~|''2'' démangeaisons, picotements, ↓ sensibilité légers| |~|''3'' démangeaisons, picotements, ↓ sensibilité modérés| |~|''4'' hallucinations modérées| |~|''5'' hallucinations sévères| |~|''6'' hallucinations très sévères| |~|''7'' hallucinations continues| !!Interpértation *'' < 8 '': donner à boire et surveiller en faisant l’index toutes les 6 heures pendant les 36 premières heures ou de façon plus rapprochée si la clinique y incite * ''≥ 8'' : donner 1 comprimé d’oxazepam 15mg et refaire un CIWA 30 minutes après. Si le score reste supérieur ou égale à 8, redonner 15mg d’oxazepam et continuer ainsi de suite jusqu’à ce que le résultat soit inferieur à 8. * ''≥ 15'' : donner 2 comprimée d’oxazepam 15mg d’emblée et refaire un CIWA 30 minutes après. Lorsque le score est redescendu en dessous de 8, refaire un CIWA 6 heures après et reprendre sur la base d’un comprimé d’oxazepam 15mg toutes les 6h.
undefine
undefine
undefine
undefine
undefine
undefine
//en construction//
undefine
undefine
undefine
![ext[Senologie.pdf|./pdf/Senologie.pdf]] <!-- Texte caché pour la recherche Curage Axillaire : MORBIDITE LYMPHOEDEME & SEQUELLES FONCTIONELLES : 8 à 40% D’autres complications précoces disparaissent le plus souvent : -Douleurs : 15 à 30%. -Troubles sensitifs : 20 à 50%. . LYMPHOEDEME Le risque de lymphoedème augmente avec le nombre de ganglions prélevés. Or actuellement un curage axillaire est reconnu valable quand le nombre de ganglions prélevé est supérieur à 10. Le risque de lymphoedème du membre supérieur passe de 9% pour un curage à moins de 10 ganglions à plus de 29% si ce nombre est supérieur à 10. Toute patiente ayant eu un CA ne doit jamais avoir de prise de sang ni de brassard à TA du coté opéré et ce pour toute sa vie. ++++ How big is the problem ? Incidence rates vary from SLNB 2-65% – 8% 3yrs; 4.6% 10yrs ALND – 14% 3yrs; 34% 10yrs 2013 Ganglion sentinelle Rappel physiologique ? 85% des lymphatiques mammaires sont drainés vers l’aisselle ? L’envahissement ganglionnaire axillaire est séquentiel de bas en haut ? Les lymphatiques se drainent dans 90% des cas en 1 tronc unique (Halsell, 1963) ? Le 1er relais lors de l’envahissement ganglionnaire est appelé ganglion sentinelle (1 à 3) Etudes de Borgstein (1997) Etudes de Klimberg (1999) Information obtenue aussi fiable, moindre : morbidité 30 LE GANGLION SENTINELLE G.S Est le premier ganglion recevant le drainage lymphatique d’une tumeur. La technique de la biopsie du ganglion sentinelle (BGS) a pour objectif l’identification de ce(s) ganglion(s) par injection d’un colorant et/ou d’un colloïde radioactif, et son exérèse pour étude anatomo-pathologique. Dans la prise en charge du cancer du sein, son intérêt est d’éviter un curage axillaire classique chez les patientes qui n’ont pas d’atteinte ganglionnaire Ou une atteinte minime Techniques de repérage du G.S (1) o Isotopiques : Injection le veille de l’intervention d’un radio-colloïde marqué (Technétium 99) avec repérage per-opératoire à l’aide d’une sonde (compteur Geiger) o Colorimétriques de Patenté. : Injection de bleu Techniques de repérage du G.S (2) Les deux techniques, isotopiques et colorimétriques poivent être combinées, chacune ayant l’avantage de réduire les faux négatifs de l’autre (Avis d’experts) Avantages de la Biopsie du GS Durée de séjour de 24 à 48 heures / 4 à 7 jours dans la C.A. Réduction de la morbidité et du lymphoedème Moindre coût ? ( Sonde de détection 15.000 à 23.000 euros) Ganglion sentinelle Méthode isotopique Injection 2 à 24 h avant chir de colloïdes marqués (Tc 99m) Injection péri-aréolaire ou péri-tumorale ? Nombre d’injections ? Ganglion sentinelle REPÉRAGE PEAU FERMÉE Repérage peau fermée 32 Ganglion sentinelle Méthode au bleu ► Injection péri-tumorale ou péri-aréolaire d’un colorant (bleu patent) quelques minutes avant l’intervention 33 ► Drainage sélectif du colorant par les lymphatiques ► GS : 1 er ganglion coloré dans l’aisselle ►Bleu seul : chirurgien expérimenté patientes non obèses seins de volume petit ou moyen tumeur en place Ann Surg Oncol 2001,8:438 34 35 B.G.S : Conclusions La biopsie du G.S dans le cancer du sein est une technique : •Fiable sous réserves d’en respecter strictement les critères d’inclusion, des techniques validées et la phase d’apprentissage. •Elle nécessite une étroite collaboration entre médecin nucléaire, anatomopathologiste, chirurgien et oncologue. •Elle permet d’éviter à 70% des femmes ayant une lésion T1 - T2 N0 un curage axillaire et ses séquelles fonctionnelles dominées par le lymphoedéme. •Elle expose 20% des patientes à une chirurgie en 2 temps lorsque un envahissement ganglionnaire est découvert en post- opératoire. Equipe pluridisciplinaire Les patients et leurs familles sont confrontés à de nombreuses questions: Quel traitement vais-je suivre? Combien de temps, comment le corps réagira avec une chirurgie réparatrice? Il y aura également des questions personnel et intime qui nécessitent l’interaction d’une équipe pluridisciplinaire dans différents domaines : Concernant la chirurgie médecin, chirurgien, infirmier, centre anti douleur, anesthésiste, kinésithérapeute, prothésiste. Concernant les suites médicales: on retrouve la même équipe qui opère dans des centres de chimiothérapie, radiothérapie et hormonothérapie. Concernant le suivit psychologique: infirmière, psychologue, association (écoute cancer, la vie est plus belle, le cancer du sein parlons en…), forum internet. Concernant le domaine familiale/social: assistante social, association, esthéticienne sociale. Importance des soins dans le contexte des CENTRES DU SEIN -->
undefine
undefine
undefine
![ext[septicemie_ped.pdf|./pdf/septicemie_ped.pdf]] <!-- Texte caché pour la recherche Septicaemia meningococcémie méningococcémie the assessment of fluid balance. Capillary leak into the lungs causes pulmonary oedema, which may lead to respiratory failure, necessitating mechanical ventilation. 6 Bacteria may cause a focal infection or proliferate in the bloodstream, leading to septicaemia. In septi caemia, the host response includes the release of inflammatory cytokines and activation of endothelial cells, which may lead to septic shock. The commonest cause of septic shock in childhood is meningococcal infection, which may or may not be accompanied by meningitis. Fortunately, its incidence in the UK has fallen markedly since immunisation was introduced against meningococcal C, but other strains are still prevalent. Pneumococcus is the commonest organism causing bacteraemia, but it is unusual for it to cause septic shock. In neonates, the commonest causes of septicaemia are group B streptococcus or Gram negative organisms acquired from the birth canal. - Clinical features See Box 6.3 Management priorities Children with septic shock need to be rapidly stabilised and may require transfer to a paediatric intensive care unit. Antibiotics Choice depends on the child’s age and any predisposi tion to infection. Fluids Significant hypovolaemia is often present, owing to fluid maldistribution, which occurs due to the release of vasoactive mediators by host inflammatory and endothelial cells. There is loss of intravascular proteins and fluid which may occur due to the development of ‘capillary leak’ caused by endothelial cell dysfunc tion. Circulating plasma volume is lost into the inter stitial fluid. Central venous pressure monitoring and urinary catheterisation may be required to guide Box 6.3 Clinical features of septicaemia History Examination Fever Fever Poor feeding Tachycardia, tachypnoea, low blood pressure Miserable, irritable, lethargy Purpuric rash (meningococcal septicaemia) (Fig. 6.9). History of focal infection, e.g. meningitis, osteomyelitis, gastroenteritis, cellulitis Circulatory support Myocardial dysfunction occurs as inflammatory cytokines and circulating toxins depress myocardial contractility. Inotropic support may be required. Disseminated intravascular coagulation (DIC) Abnormal blood clotting causes widespread microvas cular thrombosis and consumption of clotting factors. If bleeding occurs, clotting derangement should be corrected with fresh frozen plasma and platelet transfusions. Steroids There is no evidence that steroids are of benefit in septic shock. Summary Septicaemia • The most common cause of septic shock in children is meningococcal disease • May occur without meningitis • Early antibiotic therapy and fluid resuscitation are life saving - • May need admission to paediatric intensive care for multi organ failure. -->
!!Symptomes *Develop rapidly with ''long-term opioid'' use, which changes the number and sensitivity of opioid receptors and increases the sensitivity of dopaminergic. cholinergic. and serotonergic receptors. *Clinical signs include ''drug craving'', ''anxiety'', ''lacrimation''. ''rhinorrhea'', ''sweating'', ''insomnia''. hot and cold ''flashes'', muscle aches, ''abdominal'' ''cramping'', ''dilated'' ''pupils'', ''piloerection''. ''tremor'', ''restlessness'', ''nausea'' and ''vomiting'', ''diarrhea'' and ''increased'' ''vital'' ''signs''. * If objective signs are absent, do not give opioids for withdrawal. !!Traitement *''Methadone'', puis réévaluer après quelques heures, et en redonner si encore des signes *''Clonidine'' pour traiter la nausée et diarrhées mais pas le craving ni les autres signes
!!Définition *''Syndrome Hypoventilation-Obesité'' , une des conséquences respiratoires de l'Obesité, avec l'asthme et le SAOS *On le définit par une obesité morbide ''(BMI>30)'' couplée à une ''hypercapnie diurne'' (PaCO2 > 45 mmHg ou 6 kPa), en ''l'absence de pathologie ''pulmonaire ou thoracique. *La majorité des SHO ont aussi un SAOS *Traitement par CPAP, voir VNI si echec 3 mois.
{{SIDA.jpg}}
!!Définition
*le ''Virus HIV'' attaque les ''Lymphocytes T CD4+'', amenant à une ''//baisse de l'immunité cellulaire//'' chez l'hôte
*Le virus est à ''ARN'' et synthétise son ADN deux brins par une rétro-transcriptase
*la ''Transmission'' est :
**''sexuelle''
**''parentérale''
**Lait maternel
*les ''Risques'' sont de:
**seringue: 1/300
**sexuel: 1/1000
**sexe anal: 1/100
**mère-enfant: 1/3 sans médication, la césarienne est indiquée si le virus est en réplication active
*les ''Facteurs de Risque'' dans la population sont:
**''Homosexuels''
**''Drogués ''
**Transfusés avant 1985
**Contacts sexuels avec HIV-positif
**Enfants de mère positive
!!Clinique
''Primo-infection''
*Syndrome ressemblant à la ''//mononucléose//''
*''fièvre'', ''sudations''
*''lethargie'', ''malaise'', ''cephalées''
*''arthralgies'', ''myalgies''
*''diarrhées''
*''ADP''
*''[[rash tronculaire|rash_vih.jpg]]''
''Infection Asymptomatique''
*Séropositif mais //CD4 > 500/mm3//
*Peut durer 4 à 7 ans
''VIH Symptomatique (pré-SIDA)''
*''ADP généralisées persistantes''
*''Infections fongiques'' (Bouche)
*''leucoplasie chevelue'' sur la [[langue|leucoplasie_langue.jpg]]
*''Verrues'' et ''Molluscum Contagiosum''
*''sudations nocturnes'', ''perte de poids'', ''diarrhées''
''Phase SIDA''
*''CD4 > 200/mm3''
*''Immunosupression marquée'', entrainant des ''infections opportunistes'' ainsi que des ''cancers''
**PCP //(pneumocystis carinii pneumonia)//
**PAC
**TBC
**Toxoplasmose
**Cryptococcose
**Lymphome Non-Hodgkinien
**Candidose
**CMV, HSV
**Sarcome de Kaposi
!!Investigations
*mesure de l'''ARN par PCR'' pour voir si la ''virémie'' est élevée ainsi que pour l'''efficacité du traitement''
*mesure du ''p24'', est une alternative moins chère
*''ELISA et Western blot'' pour chercher les ''anticorps'', la séroconversion se fait //''après 3-7 semaines''//
!!Traitement
''Trithérapie''
*Attention a bien adhérer au traitement, sinon grand risque de ''résistance''
* A donner chez le ''symptomatique'' ou le patient avec ''CD4 < 500m3''
*Vérifier la réponse au traitement en mesurant les ARN, il faut que le virus soit indétectable
*Les mollécules comprennent
**deux nucléosdes inhibiteurs de la RT
** soit un non-nucléoside inhibiteur de la RT
**ou un inhibiteur de la protéase
undefine
undefine
!!SIRS * réponse inflammatoire à une ''agression''. *les ''causes'' possibles sont: **''Pancréatite'' **''Brulure'', ''Trauma'', ''Chirurgie'' **''Ischémie'' **''Infection'' (=Sepsis) |!SIRS (≥2 critères)| |''Température'' > 38°C ou <36°C| |''FC'' >90/min| |''FR'' >20/min| |''Leucocytes'' <4 G/L ou >12 G/L ou >10% NNS| !!Sepsis *La nouvelle définition du sepsis exclut les cas peu sévères (urosepsis et pneumonie simple) et insiste sur la réponse dysrégulée comme cause * ''Dysfonction d'organe'' potentiellement mortelle due à une ''Réponse à une infection'' dysrégulée: *Cliniquement: ''Infection'' + score de ''SOFA'' //(Sepis Organ Failure Assessment)// //Infection// **Poumons: SDRA **Urinaire: IRA **Bacteriémie: Hypotension //SOFA (aux soins) de 0 à 4// |!Système|!0|!1|!2|!3 |!4 | |''PaO2/FiO2''|>400|<400|<300|<200|<100| |''Plaquettes''|>150|<150|<100|<50|<20| |''Billirubine''|<1.2|1.2-1.9|2.0-5.9|6.0-11.9|12.0| |''Hypotension''|Pas d'Hypotension|MAP <70mmhg|Besoin d'amines|Besoin d'amines++|Besoin d'amines +++| |''GSC''|15|13-14|10-12|6-9|<6| |''Créatinine''|<120|120-190|200-340|340-490|500| //qSOFA (aux urgences)// *Tachypnée >22/min *Hypotension <100mmhg *Confusion, Altération de l'Etat de conscience !!Choc Septique *le ''Choc Septique'' correspond à ''Sepsis'' + ''Hypotension'' *Soit TAS <90mmgh, soit TAM <60mmhg !!Prise en charge du Sepsis *''Identifier le foyer'' *''Identifier le germe'' *''Réanimation Hémodynamique'' par cristalloïdes, Noradrénaline IV *''ATB précoce'' empirique à large spectre: Piperacilline/Tazobactam
undefine
undefine
undefine
undefine
![ext[xxx.html|./html/xxx.html]] <!-- Texte caché pour la recherche -->
<$button popup="$:/xxx.jpg" >
[img width=64 [images/xxx.jpg]]
</$button><$reveal type="popup" state="$:/xxx.jpg"><div class='tc-tiddler-frame'>
{{xxx.jpg}}
</div>
</$reveal>
![ext[xxx.pdf|./pdf/xxx.pdf]] <!-- Texte caché pour la recherche -->
!!Principe *Soulager le symptôme inconfortable principal. Douleur, Dyspnée, Anxiété, etc. *Doit avoir été bien discuté avant que les complications surviennent *Mettre dans une chambre seule *Aumonier *Apeler la famille *S'entendre bien avec l'infirmière depuis le début sur les objectifs (surveillance du patient et traitement) !!Morphine: *sc si pas de voie *iv si voie présente (plus rapide, pratique) *dire à l'infirmière de surveiller échelle de douleur: (ALGOPLUS) pour évoluer et adapter la morphine *on peut augmenter si inconfortable, mais attention aux effets indésirables (transpiration, sécrétion, sédation) !!Sédation palliative: *Dormicum (Midazolam) 1mg IV à 2.5mg IV, voir 5mg IV dose d'induction *Dose d'entretien: 50% de la dose d'induction à l'heure *A donner si résistant au traitement *Permet de diminuer l'anxiété, ce que la morphine ne fait pas *Doser en fonction de l'échelle de sédation (Score de Rudkin visé à 4) *Potentialise la morphine, diminuer les effets secondaires, rend le coma plus physiologique, avec des patients plus sereins !!Respiration Agonale: *Impressionant a voir, stressant *Ne dure pas longtemps *Informer les proches qu'il y a cette respiration, avec des pauses respiratoires
Bienvenue sur Fahrnipedia !
{{Clinique}}
!!Généralités
*HAIR-AN : ''H''irsutisme, Hyper''A''ndrogenism, ''I''nfertility, ''I''nsulin ''R''esistance, ''A''canthosis ''N''igricans
{{SOPK-pathophysio.jpg}}
!!Diangnostic (Rotterdam)
*≥ 2 critères
**Oligoménorrhée / cycles irréguliers ≥6mois
**Hyperandrogénisme
***Hirsutisme ou alopécie de type homme
***Evidences biochimiques (augmentation de la T libre)
**Ovaires polykystiques sur US
!!DD
*Cushing
*Hyperplasie congénitale des surrénales "late onset"
*Néoplasie surérnalienne ou ovarienne
*Hyperprolacitnémie
*Hypothyroidie
!!Présentation clinique
*Femme 15-35ans
*''Règles irrégulières/anormales, hirsutisme, infertilité, obésité, virilisation''
*Résistance à l'insuline
*Acanthosis nigricans
*AF+ DM
!!Investigations
*PRL, 17-hydroxyprogestérone, T libre, DHEA-S, TSH et T4 libre, androsténedione, SHBG, LH et FSH
**LH:FSH (>2:1)
**Augmentation de DHEA, androstenedione et T libre (le plus sensible), diminution SHBG
*US transvaginal ou transabdominal : ovaires polykystiques (≥12 follicules 2-9mm ou augmentation du volume ovarien)
*Test de tolérance au glucose
!!Traitement
*Contrôle des ''cycles''
**Style de vie (perte de poids, exercice physique) : pour diminuer la formation d'oestrogènes périphérique
**Contracteption orale pour éviter une hyperplasie endométriale (car produisent pas de progestérone !)
**Metformine si DM2 ou si grossesse
*''Infertilité''
**Induction de l'ovulation médicale (citrate de clomiphene, LHRH, FSH recombinnant et metformine
**Perforation du stroma de l'ovaire
*''Hirsutisme''
**Contraception orale contenant des oestrogènes
!!Complications à long terme
*Hyperlipidémie
*DM
*Hyperplasie de l'endomètre
*Infertilité
*Obésité
*SAOS
!!A Donner au Patient *''Ordonnance'': DPI Prescription -> Onglet A la sortie: Copier des ordres de la feuille d'ordre ( Cocher les medicaments et prescrire) et on peut ensuite imprimer *''Carte de Traitement'': DPI Prescription -> Onglet A la sortie: S'imprime avec la liste de l'Ordonnance, Ajouter La raison du traitement voir qq. effets indesirables *''Avis de sortie'': Création de document, SMIG, Avis de Sortie (v1), Remplir, imprimer *''Arrêt de Travail'' généralement jusqu'à RDV chez le MPR
!!Definition *The most common presentation of congenital heart disease is with a heart murmur. Even so, the vast major ity of children with murmurs have a normal heart. They have an ‘innocent murmur’, which can be heard at some time in almost 30% of children. It is obviously important to be able to distinguish an innocent murmur from a pathological one. *Hallmarks of an innocent ejection murmur are (all have an ‘S’, ‘innoSent’): **aSymptomatic patient **Soft blowing murmur **Systolic murmur only, not diastolic **left Sternal edge. *Also: **Normal heart sounds with no added sounds **No parasternal thrill **No radiation. *During a febrile illness or anaemia, innocent or flow murmurs are often heard because of increased cardiac output. Therefore it is important to examine the child when such other illnesses have been corrected. *Differentiating between innocent and pathological murmurs can be difficult. If a murmur is thought to be significant, or if there is uncertainty about whether it is innocent, the child should be seen by an experienced paediatrician to decide about referral to a paediatric cardiologist for echocardiography. A chest radiograph and ECG may help with the diagnosis beyond the neo natal period. *Many newborn infants with potential shunts have neither symptoms nor a murmur at birth, as the pulmo nary vascular resistance is still high. Therefore, condi tions such as a ventricular septal defect or ductus arteriosus may only become apparent at several weeks of age when the pulmonary vascular resistance falls.
undefine
!!Définition *L'''angor de Prinzmetal'', ou// spasme coronarien//, est un syndrome coronarien aigu ''rare ''qui correspond au'' spasme d'une artère coronaire'' (le plus souvent une artère coronaire de gros calibre) *Il apparaît souvent'' au repos''. Il cède aux nitrés. *Il touche plus volontiers les ''femmes'' ''jeunes'', avec pas ou ''peu de FRCV'' * On peut parfois retrouver des facteurs déclenchant comme le ''tabac'' et parfois la ''cocaine''. *Le mécanisme déclencheur est incertain. !!Clinique *''Angine'' d'origine ''vasospastique'' surtout au repos. Risque d'arythmies malignes. * L'angiographie peut montrer des'' artères coronaires saines''. *La douleur ''cède aux nitrés''. * __ÉCG__: Surélévation du segment ST au moment de la crise, se stablise après * __Lab__: Les'' marqueurs myocardiques sont négatifs'' (à moins d'avoir une nécrose myocardique). *__Coro__: souvent négative !!Traitement * Tx symptomatique: ''nitrés'' et ''bloqueurs calciques''
![ext[spasme_sanglot.pdf|./pdf/spasme_sanglot.pdf]] <!-- Texte caché pour la recherche Breath Bleu Holding Apnea Apnée Apnee Apnées Apnees Crise d'apnée -->
{{spasme_oesophage.jpg}}
!!Généralités
*le ''Spasme Oesophagien'' correspond à une ''contraction simultanée'' de ''plusieurs segments'' de l'oesophage.
*Le Spasme ''empêche la nourriture de passer''
*Le ''Sphincter Oesophagien Inferieur'' est cependant ''normal'', contrairement à l'[[Achalasie]].
*la ''Clinique'' est principalement une ''douleur thoracique'' qui peut mimer une angine. Il y a aussi une ''Dysphagie'' mais en générale sans régurgitations.
*Le ''Diagnostic'' est posé par la ''manométrie'' qui montrera des contractions simultanées après l'avalement, avec un sphincter inferieur normal. Un ''TOGD'' peut aussi être fait et montre l'oesophage en //tire-bouchon//.
!!Traitement
*Les traitements sont ''peu efficaces''
*Au niveau médicamenteux on a les ''nitrates'' et les ''bloqueurs calciques''
*Au niveau chirurgical on a l'Esophagomyotomie, qui est peu recommandée.
undefine
{{spina_bifida_schema.jpg}}
!! Généralités
*La ''Spina Bifida'' est une ''malformation'' due à un ''défaut de fermeture du tube neural''. Elle concerne principalement la ''région sacrée'' ou lombaire.
*Il existe ''trois formes'': la Spina Bifida Occulta, le Méningocèle et le Myéloméningocèle
!! Spina Bifida Occulta
*Dans la forme ''Spina bifida occulta'' , la plus légère, l'enfant a une ''absence de processus épineux'', n'a ''pas de bosse'' et peut présenter des ''poils'' ou d'autres anomalies au niveau sacré.
*A la ''rx'' on peut trouver l'[[absence de fusion vertébrale|spina_bifida__occulta_rx.jpg]]. On peut aussi utiliser l'''IRM'' pour mieux visualiser les tissus.
* Il n'y a ''pas de traitement'' pour cette forme de spina bifida
!! Méningocèle
*Dans la forme du ''Méningocèle'', ou Spina bifida apperta, on trouve une ''herniation des méninges'' et du LCR à travers le défaut de fermeture.
*Cependant il n'y a ''pas d'herniation des nerfs'' comme dans le Myéloméningocèle
*au niveau ''clinique'', on peut voir une ''bosse'' au niveau sacré chez l'enfant. Il n'y a ''pas d'handicap'' cependant.
*les ''investigations'' comprennent l'[[echographie|meningocele_us.jpg]], la Rx, le Ct et l'IRM.
*le ''traitement'' est ''chirurgical'' avec réparation locale.
!! Myéloméningocèle
*Dans la forme du ''Myéloméningocèle'', ou Spina bifida apperta (même nom que pour le méningocèle), on retrouve une ''herniation des méninges et des nerfs'' ainsi que du LCR à travers le défaut de fermeture.
*L'enfant peut être ''symptomatique'' avec diverses ''parésies ou pareshtesies'' et aussi une ''incontinence'' suivant le niveau de la lésion.
*On retrouve souvent associée une ''hydrocéphalie'' ainsi qu'un ''Arnold Chiari type II''
*L'''Investigation'' comprend l'échographie, [[l'IRM|myelomeningocele_irm.jpg]], le CT, et la Rx.
*le ''traitement'' est ''chirurgical'' avec une réparation locale
undefine
undefine
undefine
{{spondylarthrite_ankylosante.jpg}}
!!Définition
*La Spondylarthrite Ankylosante (ou Maladie de Betcherew, Colonne de Bambou) est une ''maladie inflammatoire'' caractérisée par une ''ossification proliférative'' de l’articulation ''__sacro-iliaque__'' et des ''__vertèbres__''.
*Elle est aussi caractérisée ''__Enthésites__'' (inflammation des insertions osseuses, tendineuses et ligamentaires), qui correspondent à la lésion de base de toute spondylarthrite.
*Elle est majoritairement associée à l’antigène ''__HLA-B27__'', mais n’est pas FR, ANA ou autres auto-anticorps, d’ou l’appellation « spondylarthrite séronégative »
{{spondylarthrite_ankylosante_clinique.jpg}}
!!Clinique
*La ''__sacro-iléite__'' est souvent le symptôme initial, elle s’exprime par des ''lombalgies'' avec ''irradiation dans la fesse/cuisse''. La douleur est typiquement ''nocturne'', de type ''inflammatoire'' avec ''raideur matinale''.
*L’enthésite atteint souvent le talon (talon d’Achille).
*D’autres manifestations comprennent des ''uvéites antérieures aigue'', des ''dactylites'' et des ''arthrites'' d’autres articulations.
*Au niveau de l’examen clinique, la colonne démontre une ''diminution de mobilité'', le ''Test de Schober'' est diminué
*Rappel Le test de Schober se fait en plaçant deux marques (une sur S1, une 10cm en dessus) et les mesurer deux fois (colonne droite et colonne fléchie)
{{schober_test.jpg}}
!!Investigations
!!!''Imagerie''
*La ''RX'' montrera une ''[[fusion de l’articulation sacro-iliaque|spondylarthrite_ankylosante_rx_sacrum.jpg]]'' ainsi qu’une ''colonne en bambou''
*On peut aussi faire un ''IRM des sacro-iliaques'' si la radio standard n’est pas concluante
{{spondylarthrite_ankylosante_rx.jpg}}
!!!''Laboratoire''
*Il faut surtout doser l’antigène ''HLA-B27'' qui sera positif. la ''VS'' et ''CRP'' sont augmentés.
!!Traitement
*La ''physiothérapie'' est très importante, le ''sport d’endurance'' (natation) aussi. A noter l’arrêt ''du tabac'' est aussi recomandé.
*Au niveau médicamenteux, les ''AINS, Corticoïdes, Agents de Rémission'' (Methorexate, Sulfasalazine) et les ''traitements biologiques'' (inhibiteurs TNF-alpha: etanercept, infliximab)
*Dans certains cas avancés, des options chirurgicales sont possibles
undefine
undefine
undefine
undefine
undefine
undefine
{{spondylarthrose.jpg}}
!!Définition
*La spondylose réfère le plus souvent à l’arthrose ''de la colonne vertébrale'', qui se démarque surtout par des ''ostéophytes'' de la colonne au niveau radiologique.
{{spondylarthrose_rx.jpg}}
{{spondylodiscitis_irm.jpg}}
!!Définition
*La spondylodiscite est une ''forme spéciale d’ostéomyléite'', par le fait quelle se situe au niveau des ''espaces intervertébraux'' et ''plateaux vertebraux''.
*Elle concerne souvent des ''patients âgées'', préférentiellement des hommes, avec souvent une immunosupression.
*Les deux types de spondylodiscite sont la ''forme pyogène'' (brutal, douleurs inflammatoires, staph. aureus et grams-) et la ''forme tuberculeuse'' (avec moins de fièvre et de symptômes inflammatoires)
*La source la plus fréquente est la dissémination ''hématogène'' (infection urinaire, cutanée, pulmonaire, staph.aureus, gram- et strepto.). Sinon l’infection peut venir d’un ''geste local'' (infiltration épidurale, chirurgie, s.epidermidis et p.acnees, staph.aureus)
!!Diagnostic
*Le diagnostic est difficile car la pathologie est rare et noyée dans les lombalgies aiguës. La clinique n’est pas toujours tapageuse.
*Devant une lombalgie aigue, il faut toujours garder en tête les ''reds flags'' pour une atteinte infectieuse, inflammatoire ou cancer:
** Trop Jeune (<20ans) ou trop vieux (>50)
** ATCD de cancers
** Perte de poids
** Immunosuppresion
** Consommation de drogues IV (spondylodiscite)
** Fièvre et Frissons
** Douleurs inflammatoires (nocturne)
*__Rappel:__ ne pas faire d’imagerie pour une lombalgie simple sans aucun red-flags !
*En cas de suspicion de spondylodiscite, il faut faire les ''investigations'' suivantes:
**Une ''FSC'' (leucocytose et déviation gauche surtout si pyogène) et une ''VS, CRP'' (augmentés).
**Faire aussi impérativement des ''hémocultures'' pour pouvoir isoler le germe et adapter le traitement. On peut aussi tenter une ''ponction-biopsie'' sur le site d'infection.
**Faire une ''IRM'' de la colonne pour poser le diagnostic radiologique.
!!Traitement
*Le traitement est ''conservateur'', il associe une ''antibiothérapie ciblée'' pendant plusieurs mois et aussi un ''corset'' (effet double: antalgique et prévention des déformations en cyphose)
*La ''chirurgie'' est indiquée dans les spondylodicites pyogènes compliquées (atteinte neurologique, abcès)
undefine
{{spondylolysthesis.jpg}}
!!Définition
*Il s'agit d'une ''perte de continuité'' (détachement) de l'isthme ''vertebral'' (le "cou" du "//scotty dog//" radiologique, ou //''pars interarticularis''//), souvent de la vertèbre ''L5'', souvent ''bilatéral''.
*Elle peut amener à un [[spondylolisthésis|Spondylolysthésis]] de L5 sur S1.
*Elle est essentiellement due à des ''traumas repetés'' (fracture de stress, souvet chez le sportif)
*Le ''diagnostic'' est ''radiologique'' avec des ''RX'' lombaires montrant une rutpure du "//cou du petit chien//"
*Le traitement est non-opératoire
{{spondylolyse_rx_scotty_dog.jpg}}
undefine
{{spondylolysthesis.jpg}}
!!Définition
*Le spondylolisthésis est un ''glissement d'une vertebre en avant''.
*La vertèbre classiquement touchée est ''L5'', qui glisse en avant sur S1.
*Le glissement peut être congénital (enfants) ou dégénératif (adulte), ou encore traumatique suite à une [[Spondylolyse]]
*La ''clinique'' impliquera des ''douleurs'' à l'endroit impliqué, qui sont ''calmées à la position assise''.
*Les ''Investigations'' comprennent surtout la ''RX'' et l'IRM.
*Le ''Traitement'' dépend de la séverité du glissement. Il peut être non chirurgical (AINS, restriction) ou ''chirurgical'' (décompression, fusion spinale)
{{spondylolysthesis_rx.jpg}}
undefine
undefine
undefine
undefine
undefine
!!Généralités *Maladie valvulaire la plus fréquente *''Syncopes'' à l'effort ou ''Dyspnée'' à l'effort *''Souffle'' ''systolique'' + ''B4'' *Pouls tardif *TTT med: Beta-Bloquants *TTT chir: si sévère
![ext[stenose_pylore.pdf|./pdf/stenose_pylore.pdf]] <!-- Texte caché pour la recherche Pyloric stenosis In pyloric stenosis, there is hypertrophy of the pyloric muscle causing gastric outlet obstruction. It presents at between 2 and 7 weeks of age, irrespective of gesta tional age. It is more common in boys (4 : 1), particularly first borns, and there may be a family history, especially on the maternal side. - A hypochloraemic metabolic alkalosis with a low plasma sodium and potassium occurs as a result of vomiting stomach contents. Diagnosis Unless immediate fluid resuscitation is required, a test feed is performed. The baby is given a milk feed, which will calm the hungry infant, allowing examination. Gastric peristalsis may be seen as a wave moving from left to right across the abdomen (Fig. 13.3a). The pyloric mass, which feels like an olive, is usually palpable in the right upper quadrant (Fig. 13.3b). If the stomach is overdistended with air, it will need to be emptied by a nasogastric tube to allow palpation. Ultrasound examination is helpful (Fig. 13.3c) if the diagnosis is in doubt. Management The initial priority is to correct any fluid and electrolyte disturbance with intravenous fluids (0.45% saline and 5% dextrose with potassium supplements). Once hydration and acid–base and electrolytes are normal, definitive treatment by pyloromyotomy can be per formed. This involves division of the hypertrophied muscle down to, but not including, the mucosa (Fig. 13.3d). The operation can be performed either as an open procedure via a periumbilical incision or laparoscopically. Postoperatively, the child can usually be fed within 6 h and discharged within 2 days of surgery. Summary Pyloric stenosis • More common in boys and those with a maternal family history • Signs are: visible gastric peristalsis, palpable abdominal mass on test feed and possible dehydration • Associated with hyponatraemia, hypokalaemia and hypochloraemic alkalosis • Diagnosis may be confirmed by ultrasound • Treated by surgery after rehydration and correction of electrolyte imbalance. Crying The time healthy babies cry for is highly variable. In most, it represents the baby’s response to hunger and discomfort. Reassurance and advice on appropriate feeding, wrapping and care will usually suffice. Clinical features are: Vomiting, which increases in frequency and forcefulness over time, ultimately becoming projectile Hunger after vomiting until dehydration leads to loss of interest in feeding Weight loss if presentation is delayed. -->
undefine
undefine
{{stomatite_recidivante.jpg}}
!!Généralités
*la ''Stomatite Aphteuse Récidivante'' est une des lésions buccales les plus fréquentes.
*Les Ulcères classiques durent ''une semaine'' et guérissent sans laisser de cicatrice. En revanche les ulcères plus gros peuvent prendre plus de temps et laisser des cicatrices.
*l'''Etiologie'' est souvent ''Idiopathique'', due à l'incertitude. Le ''Stress'' et le ''Trauma'' sont des facteurs favorisants.
*Certaines ''Pathologies'' font des ulcères récurrents
**''Bechet''
**''Lupus''
**''MICI''
**''HIV''
**Déficit en Vit.B12, Acide folique ou Fer
**Xérostomie
*la ''Clinique'' comprend ''trois forme''
**''Aphtose mineur'': les aphtes classiques infracentimétriques
**''Aphtose majeure'': des aphtes de plus de 1cm
**''Aphtose Herpetiforme'' d'abord des vésicules qui s'ulcèrent et convergent. ce ne sont pas pour autant du HSV.
*Le ''Traitement'' est juste symptomatique par des corticoïdes topiques, ou rien du tout.
{{aphtes_algorithme.jpg}}
undefine
!!Définition psychotraumatisme
S'il n'y avait pas eu cet évènement là, il n'y aurait pas eu de trouble. Un de seul trouble avec cause identifiable.
*''Evénement'' ''traumatisant'' : a menacé inrégrité physique ou psychique (perception de sa propre mort). Soudain et imprévisible, aucun mécanisme de défense. Il n'y a pas forcément d'angoisse.
*''Événement'' de la vie (extraordinaire, qui menace intégrité physique ou psychique) du sujet qui se définit par son ''intensité'', ''l’incapacité'' où se trouve le sujet d’y répondre adéquatement, le ''bouleversement'' et les ''effets pathogènes durables'' qu’il provoque dans l’organisation psychique.
*En termes économiques, le traumatisme se caractérise par un ''afflux d’excitations qui est excessif, relativement à la tolérance du sujet et à sa capacité de maîtriser et d’élaborer psychiquement'' ces excitations.
{{evenement-traumatisme.jpg}}
*Imprévisibilité : très important
*Il y a un avant et un après
*Se rend compte de la vulnérabilité et mortalité
*Incontrolable (p.ex lors d'accident)
!!!Conséquences
{{consequence-psychotrauma.jpg}}
*On se croit invincible -> perte de ce sentiment
*On vient dans un monde sécurisé, mais après le traumatisme : perte
*Si ont échappé à la mort et d'autres pas : honte et culpabilité.
*Perception de sa propre mort : typique.
!!Stress vs trauma
*''Stress'' : « Réaction réflexe, neurobiologique, physiologique et psychologique d’alarme, de mobilisation et de défense, de l’individu à une agression, une menace ou une situation inopinée. »
*''Trauma'' : (se passe sur un plan psychique)
**« Phénomène d’effraction du psychisme, et de débordement de ses défenses par les excitations violentes afférentes à la survenue d’un événement agressant ou menaçant pour la vie ou l’intégrité (physique ou psychique) d’un individu, qui y est exposé comme victime, témoin ou acteur. »
**« Confrontation inopinée avec le réel de la mort. » (impression qu'on va mourir maintenant) (typique PTSD)
{{stress-trauma.jpg}}
!!Psychopathologie
''__Clinique de l’effroi__''
Apparait tout de suite après un évènement traumatisant. Il n'y a pas d'angoisse !!
*= ''sidération'', panne, black-out, instant étrange
*= rencontre avec le réel de la ''mort''
*='' mécanisme de défense contre l’incursion psychique ''de l’événement traumatique
*Pas forcément ''développement d’angoisse initialement''
*''Perte de connaissance''
*''Amnésie, oublis''
*''Dissociation''
*''Rêves'', ''cauchemars''
* « Je me suis vu ''mort'' »
''__Pénétration de la psyché__''
*Le ''psychisme'' = enveloppe garantissant la ''régulation'' des excitations internes (pulsions) et externes (événements extérieurs)
{{psyché.jpg}}
*Corps étranger interne : comme une balle de pistolet (idem psychique)
Dans la réaction au stress : deux phases
''__Phase aiguë__'' (minutes à heures qui suivent l'évènement)
*''Sidération'': vide, fortes angoisses, « figé », impossibilité de parler
*''Dissociation'': entre les actes/paroles et les émotions
*''Dépersonnalisation'': je me sens étrange
*''Déréalisation'': le monde est étrange (le monde parait différent après)
*''Confusion'': errance, propos incohérents, sentiment de persécution
''__Phase post-aiguë__'' (dans les jours suivant le traumatisme)
*''Reviviscence'' (ou répétition) (fait par le psychique pour comprendre ce qui est entrain de se passer)
**Tentative de liaison
**Sous différentes formes
**Souvent marqué par un détail
*''Évitement''
**Déplacement du traumatisme sur des objets qui lui sont liés (''évitement'')
**''L’angoisse'' est ''fixée'' sur un ''objet''
**''Symptôme'' ''persistant'' à ''long-terme''
=> Ces mécanismes : ''Tentatives'' de ''guérison''/''réorganisation'' ''inconscientes''! !
!!!Un même événement traumatique
*Différents vécus, différents symptômes, différentes complications
*Pas de relation linéaire entre le traumatisme et les effets psychiques!
*Différence majeure inter-individus
=> Importance de la ''subjectivité'' (évènement aura une importance pour un patient et pas un autre)
« L’événement ne devient traumatique pour une personne qu’en fonction de ce qu’il provoque subjectivement chez elle, de ce qui se noue dans cette rencontre si singulière entre le traumatisme et le sujet. »
« Un même événement peut être traumatique pour un sujet et pas pour un autre, à un moment donné, et non traumatique la veille ou le lendemain » (si évènements de vie pénible avant l'évènement = facteur de risque et pas facteur protecteur)
''Résilience'' : peut grandir avec un traumatisme. C'est vrai dans une certaine mesure, mais en général c'est plutôt un facteur de vulnérabilité d'avoir un PTSD.
''__« L’après-coup »__''
*Le choc actuel peut potentiellement « ''réveiller'' » un ''traumatisme'' ''antérieur'' non-élaboré
*Le choc antérieur a pu passer complètement « inaperçu » (resté inconscient) aux yeux du patient, à l’époque (infantile, autre)
*Ce choc antérieur revient « après-coup »
P.ex rêves d'un traumatisme antérieur etc.
!!`Symptômes et diagnostic`
!!!CIM-10
*Réaction aiguë à un facteur de stress (F43.0)
*État de stress post-traumatique (F43.1)
*Modification durable de la personnalité après une expérience de catastrophe (F62.0)
__''Réaction aiguë à un facteur de stress''__
*De ''quelques minutes à ≤ 2-3 jours''
*Durant quelques jours, rêvent de ça etc. Mais ça s'atténue avec le temps, et les gens reprennent leur activité quotidienne.
{{reaciton-aigue-stress.jpg}}
''__État de stress post-traumatique__''
*Quelques semaines à ''≤ 6 mois'' (mais période de latence, mais se développe dans les 6mois)
*Flash-back : patients figés, neuro-végétatif, revivent la situation.
*Etat de qui-vive : augmentation du SNS
*Emoussement affectif, ne ressentent plus rien, mais irritabilité et impulsivité qui augmentent.
{{stress-post-traumatique.jpg}}
Si on traite pas PTSD -> on arrive à modification durable de la personnalité
''__Modification durable de la personnalité après une catastrophe__'' (trouble de la personnalité)
*Modification ''depuis ≥ 2 ans'' (chronicisaiton de PTSD)
*Séquelle ''chronique'' et souvent ''irréversible'' (n'arrivent souvent pas en soins, n'adhèrent pas au soin).
*''Dégradation'' du ''fonctionnement'' social, professionnel et interpersonnel
*Sentiment de vide, retrait social, ne sont plus insérés. Sont mis en marge, détachement, vont croissant avec le temps.
{{Modification-personnalité-post-catastrophe.jpg}}
!!Prévalence
*Exposition de la population générale à des événements « traumatisants »: 50-90%
*''Prévalence du stress aigu chez victimes: 10-20%'' (plus en situations militaires, enlèvement, etc..) (ce n'est pas tout le monde !! C'est dégressif)
*Prévalence sur la vie du PTSD: 5-8% (des victimes, pas forcément celles qui ont eu le stress aigu)
*Prévalence générale du PTSD augmentée chez: police, pompiers, ambulanciers, personnel médico- infirmier
*Taux plus élevé aux USA qu’en Europe
!!Facteurs de risque
*Sexe ''féminin'' d’avantage touché (mais bon les hommes consultent moins)
*''Dysfonctions cognitives pré-morbides'' (ruminations et notamment sur l’attitude que le patient « aurait du avoir » au moment-clé)
*''Troubles psychiatriques pré-morbides ''(troubles anxieux, trouble dépressif)
*''ATCD familiaux''
*''Sentiments de culpabilité''
*''Positionnement de victime''
!!Évolution et facteurs prédictifs
__''FR PTSD''__
*Dépression, trouble panique, TOC (prémorbides)
*L’effroi
*L’état dissociatif
*Stress aigu sévère
*Perte de connaissance (non- traumatique) (car le cerveau a déjà de la peine a comprendre ce qui c'est passé)
*Traumatisme antérieur
!!Prise en charge
__''Approches du psychotraumatisme''__
*''Théorie du stress'': ciblée d’avantage sur les symptômes (école anglo-saxonne)
*''Théorie du trauma'': ciblée d’avantage sur les mécanismes de défense (école française)
!!!Traitement
*''Processus psychothérapeutique en 3 temps''
#''Commémoration'': vécu de l’événement
#''Mutation'': reconstruction et restructuration (mettre au passé l’événement traumatique)
#''Maturation'': reconstruire l’événement et voir le monde autrement
*''Traitement'' ''pharmacologique'': symptomatique uniquement (somnifère si dort pas, anti-dépresseur si déprimé etc) ≠ traitement spécifique.
*''Psychanalytique'': travail axé notamment sur la ''recherche d’un traumatisme antérieur (« après-coup »)'' et sur l’effet du traumatisme sur le psychisme.
*''Cognitive'': axée sur la ''modification des distorsions cognitives'', pensées automatiques. Il s’agit de ''restructuration'' ''cognitive''.
*''Comportementale'': basée sur l’''exposition aux stimuli'' évités par le patient.
''Autres''
*''Hypnose'': état de conscience modifié avec reviviscence de l’événement et possibilité « d’agir autrement », de modifier en pensée ce qui n’a pas pu se faire en réalité. (marche assez bien)
*''EMDR'' = Eye Movement Desensitization and reprocessing: basée sur l’hypothèse que le traumatisme provoque une surexcitation du système nerveux, les mouvements oculaires pouvant avoir un effet inhibiteur. Effets sur l’élaboration émotionnelle et sur la diminution de « l’impuissance acquise ». (reconnu comme efficace)
''__Les deux temps de la prise en charge__''
*Tout de suite après un gros évènement (engage la vie de ≥5-6 personnes) : cellules psychiatriques d'urgence.
{{prise-en-charge-stress.jpg}}
!!Défusing (aide immédiate = cellules psychologiques d'urgence)
*Intervention rapide (''dans les 24h'') qui vont __sur place__
*Respect du degré des victimes (I, II, III) (on ne les mélange pas si dans un autre groupe)
*En principe à réaliser avant le retour à domicile
*Objectifs:
**''Atténuer rapidement la souffrance aiguë, contenir, rassurer, informer'' -> ''réafférenter'' les gens dans la réalité (on n'oublige pas les gens à parler). Remettre les gens en contact avec le réseau et proches (réafférenter)
**« Normaliser » la réponse émotionnelle et ''rompre l’isolement individuel'' devant l’événement
**Détection des individus à risque et'' évaluer la nécessité d’un débriefing ultérieur''
*''Attention'': Respecter, ne pas harceler, ne pas négliger, ne pas sous-estimer, ne pas faire trop parler
!!Débriefing : modèle CISD
Au début a été développé (Mitchell) pour les militaires dans les années 80-90.
#Rester dans les limites de ce que l’on sait faire (doit se faire par des personnes formées)
#S’assurer du respect des besoins de base des rescapés et de leur sécurité physique avant toute chose
#L’intervention n’est pas une psychothérapie (ne vise donc pas un changement majeur ni de soulever des problématiques profondes)
#Centré sur « l’ici et maintenant »
#Adresser le patient à un spécialiste si aucune amélioration après quelques séances
*Principes
**`Précocité d’intervention: 48-72h après (car sidération après évènement, donc pas possible) !!`
**Psychoéducation
**Confidentialité
**Verbalisation et ventilation émotionnelle, mais ''ATTENTION''!
**Participation ''volontaire'' (si les patients ne veulent pas, il ne le font pas)
**Approche groupale favorisée, mais le groupe doit avoir vécu le même événement, environ 10 pers.
**Lieu sécurisant, accueillant (boissons, nourriture)
**Environ ''2-3 heures'' (sans interruption)
''__Déroulement du CISD__''
Peut aussi se faire des semaines après un évènement (pas forcément des mois par contre). But : mettre au passé ce qui est au passé et penser à l'avenir.
#''Introduction''
#''Narration'' des faits (de A à Z pour pouvoir la mettre au passé)
#''Vécu'' ''émotionnel'' (avant, pendant, après)
#''Pensées'' ''associées'' (avant, pendant, après)
#''Symptômes'' depuis l’événements
#''Information'' et ''normalisation''
#''Conclusion''
# Acte symbolique (pour conclure) (mettre une fleur sur la tombe d'un proche etc. )
__''Important''__
*Précocité de l’intervention
*Individualisation de l’intervention
*Dynamique de groupe favorise le partage et influence le retour à la « vie normale »
''__Méthodes__''
Deux ''méthodes'' sont « discutées »:
*''Stress'' (''TCC''): axée sur de la psycho-éducation, apprentissage des comportements adaptés; pairs formés à l’intervention.
*''Trauma'' (''psychodynamique''): axée d’avantage sur la subjectivité et l’écoute du patient; thérapeutes neutres effectuent l’intervention.
__''Effet (debriefing) ''__
Il faudrait le faire s'il y a eu confrontation avec la mort.
*Absence de consensus sur l’efficacité des mesures d’intervention
*Hétérogénéité des modèles et pratiques
*Pas d’effet clairement démontré pour prévenir un PTSD; résultats contradictoires
*Effet néfaste du débriefing si le groupe est hétérogène et en cas d’utilisation abusive du dispositif
*Débriefing semble ''important'', ce d’autant plus si il y a un ''suivi ultérieur''. 1 seul entretien ne suffit généralement pas.
!!Victimes
*''Primaires'' (directes): le plus directement impliquées, les personnes qui ont été confrontées directement à la mort (CAVE les professionnels de la santé, pompiers etc. qui sont en première ligne)
**Culpabilité ++ de ne pas être mort (plus on se sent coupable, plus on est à risque de PTSD et risque suicidaire)
*''Secondaires'' (indirectes): témoins immédiats
*''Tertiaires'': moins directement touchées, pas dans l’immédiateté, peu de sentiment d’impuissance et de culpabilité (famille, proches)
{{victimes-stress.jpg}}
!!Impuissance et culpabilité (individuelle)
{{culpabilité-stress.jpg}}
!!Notes
*`Examen` : Surtout savoir les symptômes et diagnostic
undefine
undefine
undefine
![ext[Surveillance_Grossesse.pdf|./pdf/Surveillance_Grossesse.pdf]] <!-- Texte caché pour la recherche 1ere consultation 1er trimestre Déterminer âge gestationnel, terme et facteurs de risque • Anamnèse Ŕ DR, cycles, contraception Ŕ Antécédents familiaux, personnels, gynéco- obstétricaux Ŕ Anamnèse génétique Ŕ Médicaments, allergies, tabac, drogues, alcool, violence Ŕ Situation socio-économique Grossesse à risque • Anamnèse et antécédents Ŕ âge (<18, > 35 ans) Ŕ multiparité, FC tardive , MIU, césarienne ou chirurgie utérine, prématurité • Pathologies maternelles Ŕ Diabète, HTA , cardiaques, pulmonaires, rénales,infectieux ( HIV),collagénoses ( lupus) .. Ŕ Abus de substance Grossesse à risques • Grossesse actuelle MERE • Grossesse multiple • Maladie hypertensive • Diabète gestationnel • MAP • Infections • Abus de substances, tabac • Hémorragie : placenta praevia, décollement placentaire • Immunisation rhésus Les grossesses gémellaires représentent 2 à 5% de toutes les grossesses Dizygote 2/3 Monozygote 1/3 2 embryons distincts Toujours bichoriale Clivage d’un embryon 2/3 monochoriale 1/3 bichoriale Pour les jumeaux monozygotes, la chorionicité va dépendre du moment de la division de l’embryon Bichoriale biamniotique Monochoriale biamniotique Monoamniotique (1%) Jumeaux conjoints xxxx Grossesse à risques • Grossesse actuelle FOETUS RCIU Macrosomie Malformations Présentation • Status Ŕ Général et gynécologique (spéculum et TV ) • Examens Ŕ Bilan sanguin • groupe sanguin Rh , Ac irréguliers, Hb, Ht, plaquettes, ferritine • Test de falciformation : origine africaine et méditerranéenne Ŕ Sérologies: • Vérifier immunité rubéole, varicelle, rougeole,coqueluche ( anamnèse et carnet de vaccination) • VDRL, HBsAg, VIH. Hépatite C si patiente à risque • Abandon du dépistage systématique de la toxoplasmose (2009) • CMV: pas de recommandation de dépistage • Test Chagas: population Sud américaine Ŕ stick urinaire, culture d’urine. Ŕ Frottis du col si > 1 an Ŕ Glycémie à jeun • si ant de diab gestationnel ou familiaux, BMI > 30, glycosurie, âge >35 ans, syndrome ovaires polykystiques • Alimentation et hygiène de vie Echographie • Localisation, nombre de foetus, vitalité • Age gestationnel Ŕ Mesure de la longueur cranio- caudale LCC ou CRL • Utérus et annexes x Robinson et aBJOG1975;82:702.10.l. Double test du 1er trimestre 10 3/7 -13 6/7 SA clarté nucale, dosage de ßhCG et PAPP-A • Information et consentement éclairé Ŕ Dépistage prénatal • Double Test • NFTN • US morphologique • NIPT non invasive prenatal testing ex.Praenatest® Ŕ Test génétique du fœtus sur sang maternel Ŕ ADN fœtal circulant dans le sang maternel Ŕ Nouvelles technologies de séquençage Ŕ Diagnostic prénatal • Choriocentèse • Amniocentèse • PSF ponction de sang foetal Ŕ Conseil génétique Femme enceinte au travail • Connaître l’ordonnance sur la protection de la femme enceinte (Oproma-LTr). • Connaître quelques substances professionnelles les plus importantes qui mettent en danger la santé de la femme enceinte et de l’enfant. • Evaluation des risques professionnels pour la femme enceinte : analyse de risques. • Marche à suivre en cas de risques. Protection de la femme enceinte au travail Ordonnance sur la Protection de la Maternité OProMa -->
undefine
<<tabs "[[Généraux]] [[Laboratoire]] [[Peau]] [[Tête]] [[Thorax]] [[Abdomen]] [[Pelvis]] [[Membres]] [[Enfants]] [[Vieux]] [[Neuro / Psy]][[Consultations]]" "Généraux" "" "tc-vertical">>
!!Définition *Perte de conaissance transitoire *Perte de tonus *Récupération rapide et complète !!Diagnostic Différentiel *''AVC, AIT'' *''Crise d'Epilepsie'' *''Syncope cardiaque'' (Arythmie, EP, Sténose aortique, CMO) *''Hypotension Orthostatique'' (Anémie, Anti-Hypertenseurs, Hypovolémie, Dysautonomie, Autres medics *''Diabète'' (hypoglycémie, dysautonomie) *''Syncope vasovagale'' (réflexe, situationnelle, syncopes a répétition) !!Prise en charge //AVC ou AIT// *Anamnèse neurologique *Status neurologique à la recherche *ECG à la recherche de FA *Auscultation et Echo-Doppler à la recherche de sténose carotidienne //Crise d'Epilepsie// *aura avant la crise * mvts. Tonicoconlique * morsure de langue *cyanose faciale * confusion prolongées après le reveil * douleur musculaire après le reveil *anamnèse OH (épilepsie sur sevrage ?) *examen neurologique //Syncope cardiaque// *Troubles du Rythmes, Embolie Pulmonaire, Sténose Aortique, Cardiomyopathie obstructive,... *Syncope à l'emporte-pièce (on ne sent rien et pouf) *Anamnèse cardiaque personnelle et familiale *Signes d'IC *ECG à la recherche d'anomalies *Echographie (ETT) //Syncope vaso-vagales// *Syncope vaso-vagale Réflexe **Déclenchée par la peur, agoraphobie, douleur, chaleur, alcool **Sudations, nausées, chaleurs, crampes abdominales *Syncope vaso-vagale Situationelle **Déclenchée par Valsalva, miction, défécation, toux, rire, déglutition, efforts... *Syncopes a Répétition **Déclenchée par reflexe vaso-vagal anormal **Faire un Tilt-Test (test d'inclinaison) **Faire un massage du Sinus Carotidien //Hypotension Orthostatique// *Voile noir, bourdonnement, antécédents similaires *Anémie *Médicaments hypotenseurs *Hypovolémie *Dysautonomie (diabète, alcool, parkinson, neuropathie, idiopathique) *Autres médicaments (sédatifs, opiacés) *Test de Schellong: positif si différence de 20mmhg //Diabète// *Hypoglycémie (faim, asthénie, sudations, tremblements, convulsions, glucose soulage) *Hypotension Orthostatique sur dysautonomie
*Épisodes de ''tachycardie'' ''atriale'' (flutter, fibrillation ou tachycardie atriale focale) en ''alternance'' avec une ''bradycardie'' ''sinusale'' inappropriée ou un bloc sino-auriculaire.
*Indication à un ''pacemaker''.
{{tachy-brady.jpg}}
{{maladiee_coronaire_schema.jpg}}
!! Définition
*le ''SCA'', ou Syndrome Coronarien Aigu, comprend ''trois entités'' différentes:
**l'''Angor Instable'' [[sans élévation ST|ECG_infarctus.jpg]] et avec Troponines normales
**le ''STEMI'' avec [[Surélévation ST|ECG_infarctus.jpg]] et Troponines élevées
**le ''NSTEMI'' [[sans élévation ST|ECG_infarctus.jpg]] et avec Troponines élevées
*Un ''traitement rapide'' du syndrome coronarien est la clef de la prise en charge. Comme dit l'adage: //''Time is Myocardium''//.
*Un moyen Mnémotechnique des traitement est le ''MONA-LISA'', qui comprend:
|!Dans les 10min|!Plus tard|
|''M''orphine|''L''abetalol (BB)|
|''O''xygène|''I''EC|
|''N''itrés|''S''tatines haute dose|
|''A''spirine haute dose|''A''nti-coagulation|
!! Prise en charge Initiale
# A faire en ''10 minutes'':
#* ''Equipement'' (Voies Veineuses, Tension, ECG 1-piste)
#* Piquer les ''Troponines'' et ''CK-MB''
#*''Morphine'' 2-4mg IV
#* ''Oxygène'' en continu pour Sa>92%
#* ''Nitroglycérine'' 1cp
#* ''Aspirine'' 500mg IV bolus
#Faire un ''ECG 12 pistes'' à la recherche de la surélévation ST
!!Suspicion de STEMI (Elevation du ST ou BBG nouveau)
#''Médicaments'':
#* ''Anti-Aggrégants'' (Clopidogrel, Ticagrelor)
#*''Beta-Bloquants'' si pas contre-indiqués
#*''Anticoagulation'' (HBPM Enoxaparine, Heparine)
#*''IEC''
#*''Statines'' haute dose
#''Angioplastie'' dans les 90min
!!Suspicion de NSTEMI (anomalies ECG, Troponines initiales augmentées)
#''Médicaments'':
#* ''Anti-Aggrégants'' (Clopidogrel, Ticagrelor)
#*''Beta-Bloquants'' si pas contre-indiqués
#*''Anticoagulation'' (HBPM Enoxaparine, Fondaparinux)
#*''IEC''
#*''Statines'' haute dose
#''Coronarographie'' dans les 24h
!! Suspicion d'Angor Instable (ECG normal, Troponines initiales normales)
#''Surveillance'' du patient
#* ''Monitoring ECG'' en continu
#* ''Répéter ECG et Trop'' à ''3h'' et ''6h''
#''Si signes de NSTEMI'', traiter le patient comme un NSTEMI
#''Si tout est normal'', prévoir des tests fonctionnels (IRM de stress, Test d'effort Ergométrie, Scintigraphie de test, Echo de stress)
!! Après l'événement
*Suivi 24h minimum
*ETT pour estimer la FEVG (Facteur Pronostic)
*Holter si on cherche une FA (DD: FOP, myxome de l'oreillette)
*Aspirine cardio a vie
*Clopidogrel 1 an
*Statines (Rosuvastatine (Crestor®) et Atorvastatine sont les plus efficaces) viser LDL < 1.8mmol/l
*Rééducation CV
{{SCA_algorithme.jpg}}
!!Cas de l'infarctus du VD
{{Infarctus du VD}}
!!Définition *Obstruction des ''capillaires'' par des ''embols de graisse'' qui passent dans la circulation systémique. *Globalement les organes les plus touchés sont la ''triade'': *#''poumon'' : détresse repsiratoire *#''cerveau'' : altération des fonctions cérébrales *#''peau'': pétéchies (typiquement cou, creux axillaire) *L'''Etiologie'' la plus fréquente est post ''fractures'' des os longs, mais on en retrouve dans plein de pathologies susceptibles d'envoyer de la graisse dans le sang. * C’est le tableau clinique qui permet de suspecter un syndrome d’embolie graisseuse, mais le fond d’œil est un examen complémentaire important * La ''prévention'' s’articule autour d’une ''prise en charge rapide des fractures ''et de t''echniques opératoires soigneuses''. Le traitement est symptomatique, le traitement le plus important à faire rapidement est de ''correctement immobiliser la fracture''
{{syndrome_hyperventilation.jpg}}
!!Définition
*le ''Syndrome d'Hyperventilation'' est une affection ''fréquente'' chez l'adulte et l'enfant, notamment les jeunes filles, mais souvent ''banalisée'', avec pourtant un risque important de ''morbidité'' au niveau ''social'' et ''professionnel''
*Il est définit par des ''symptômes somatiques'' déclenchés par une ''hyperventilation innapropriée''
*ces mêmes symptômes sont ''reproductibles'' lors d'''hyperventilation volontaire''.
!!Clinique
{{syndrome_hyperventilation_physiopath.jpg}}
*les ''crises d'hyperventilations'' sont souvent déclenchées par des ''stress'' qui vont induire l'hyperventilation, résultant en une ''hypocapnie''
*Les patients sont ''très agités'', proche de l'''attaque de panique''.
*on trouve souvent des ''douleurs angineuses'' qui peuvent rester plusieurs heures, sans réponse au nitrés.
*On retrouve aussi volontiers des ''paresthésies'' surtout du MS gauche. On trouve aussi des ''vertiges'' et des ''spasmes du pied''
*chez les patients coronariens, il y a un risque de déclencher un spasme coronarien ou un angor de prinzmetal !
!!Investigations
*exclure un ''infarctus'' et une ''embolie pulmonaire''
*une ''gazométrie'' montrera une ''hypocapnie'' avec ''alcalose respiratoire''
*un ''test d'hyperventilation'' avec ''mesure de la PCO2'' par lunettes nasales, dans le but de ''reproduire les symptômes''
!!Traitement
*''Rassurer'' le patient sur la bénignité des symptômes, mais ''sans banaliser'' pour autant
*Le ''rebreathing'' avec un ''sac en papier'' lors des crise peut être efficace.
*Dans les formes ''graves'' avec panique, on peut envisager des ''benzodiazepines'' et ''anxiolytiques''
{{SDRA_schema.jpg}}
!!Généralités
*Le ''SDRA'', ou //ARDS (Acute Distress Respiratory Syndrome)// est un syndrome clinique ''grave ''caractérisé par:
**Une ''Détresse Respiratoire''
**Une ''Hypoxémie''
**Un ''Odème pulmonaire non cardiogène''
*Elle survient ''dans les 72h après un événement définit'' qui peut être:
**une ''pneumonie''
**un ''sepsis'', un ''choc'' ou un ''trauma''
**une ''broncho-aspiration'', une ''noyade'' ou une ''inhalation de toxique''
**une ''embolie pulmonaire''
**une ''pancréatite''
**un ''trauma cranien'' ou un ''AVC hémorragique''
*La ''physiopathologie'' implique une ''rupture de la membrane capillaire alvéolaire'' qui va entrainer l'appartion d'un ''odème alévolaire'', qui va entrainer une ''inequalité V/Q'' avec ''hypoxemie''.
*La ''Mortalité est élevée'', souvent >40% des patients meurent de complications non-pulmonaires. Les survivants regagnent une bonne fonction pulmonaire mais peuvent avoir des séquelles.
!!Clinique
''A. Phase Exsudative''
*Dans les ''7 premiers jours''
*''Dypsnée'' et ''Tachypnée''
**''Fatigue respiratoire'' pouvant évoluer en ''Insuffisance Respiratoire''
''B. Phase Fibroproliférative''
*''Après 7 jours''
**Les Symptômes de dyspnée, tachypnée, fatigue et hypoxémie sont toujours la mais ''s'améliorent''
**Le patient peut ''ne plus nécessiter une ventilation mécanique''
**Certains patients développent des fibroses à long terme, pouvant nécessiter la poursuite d'oxygène voir de ventilation
!!Traitement
*Traiter ''la cause''
*''Ventilation mécanique'' avec PEEP (positive end-expiratory pressure)
*Si le traitement est insuffisant on peut aller jusqu'à une ''ECMO'' (//extracorpeal membrane oxygenation)//)
{{SDRA_rx.jpg}}
!!Definition *Generalised proximal tubular dysfunction (Fanconi syndrome) *Proximal tubule cells are among the most metaboli cally active in the body, so are especially vulnerable to cellular damage. The cardinal features are excessive urinary loss of amino acids, glucose, phosphate, bicar bonate, sodium, calcium, potassium and urate. The causes are listed in Box 18.9. Fanconi syndrome should be considered in a child presenting with: **Polydypsia and polyuria **Salt depletion and dehydration **Hyperchloraemic metabolic acidosis **Rickets **Failure to thrive/poor growth.
{{horner_syndrome_localisation.jpg}}
!! Généralités
*Le ''syndrome de Claude-Bernard-Horner'' correspond à une ''interruption des fibres sympathiques innervant l'oeil''
*L'interruption peut être:
**''Centrale'': comme le[[ syndrome de Wallenberg |Syndrome de Wallenberg]]ou autre AVC
**''Pré-ganglionnaire'' (avant le ganglion-cervical supérieur) comme une tumeur de pancoast
** ''Post-ganglionnaire'' (après le ganglion-cervical supérieur), comme une dissection carotidienne
*La ''Clnique '' comporte quatre signes:
**''Pseudo-ptose'' (par paralysie du muscle (lisse) tarsal supérieur de la paupière supérieure)
**''Myosis'' (par inaction du m.dilatateur de la pupille)
**''Enophtalmie'' (légère)
**''Anhydrose'' (absence de sudation de la région du cou) et face
{{horner_syndrome_clinique.jpg}}
{{intestin_irritable.jpg}}
!!Définition
*le ''Syndrome de l'Intestin Irritable'' //(ou colon irritable, colopathie fonctionnelle//) est un syndrome ''idiopathique'' d'''anormalités de motilité'' du tube digestif
*Il est associé avec le ''stress'', la ''dépression'', l'''anxiété'' et la ''somatisation''.
*les patients présentent conjointement une ''//hypersensibilité intestinale//'' avec une perception accrue de la douleur, avec une ''//amplification des signaux nociceptifs//'' par le CNS
*La prise de certains ''//aliments//'' (hydrates de carbone) ainsi qu'une ''//perturbation de la flore//'' ont aussi été associés avec ce syndrome
*Il n'y a ''aucune lésion'' en endoscopie et ''aucun labo'' positif, ce qui en fait un ''diagnostic d'exclusion''. Il faut que les symptômes soient présents ''minimum 3 mois''.
*Ce syndrome est ''bénin'' et a un bon pronostic a long terme.
*en cas de ''diarrhées'', penser aussi à chercher une [[Maladie Coeliaque]] via les// AC-anti-TG.//
!!Clinique
*''Changements fréquent des selles'' (constipation <-> diarrhées, changement de fréquence)
*''Crampes abdominales'' qui doivent être ''soulagées à la défécation''
*''Balonnement''
!!Diagnostic
''Critères de Rome III''
*''Douleur abdominale >3j/mois pendant les 3 dernier mois'' accompagné de 2 des critères suivant:
**''amélioration à la défécation''
**''changement de fréquence des selles''
**''changement de qualité des selles''
''Red Flags'' pour des investigations
*''> 50 ans''
*''Sang dans les selles''
*''Perte de poids''
*''Anamnèse Familiale de cancer colo-rectal''
*''Symptômes nocturnes''
!!Traitement
*''Rassurer le patient''
*''Eviter produits laitiers et trop de cafféine''
*''Diarrhées: loperamide''
*''Constipation: Movicol®''
*''Douleur abdominale: Spasmolytiques''
{{colon_irritable_schema.jpg}}
![ext[mort_subite_nourisson.pdf|./pdf/mort_subite_nourisson.pdf]] <!-- Texte caché pour la recherche udden infant death syndrome This is defined as the sudden and unexpected death of an infant or young child for which no adequate cause is found after a thorough postmortem examination. There is marked variation in the incidence of SIDS in different countries, suggesting that environmental factors are important (Box 6.5). SIDS occurs most commonly at 2–4 months of age (Fig. 6.14). The risk for subsequent children is slightly increased. In the UK, the incidence of SIDS has fallen dramati cally during the last 20 years (Fig. 6.15), coinciding with a national ‘Back to Sleep’ campaign (Fig. 6.16). This advocates that: • • • Infants should be put to sleep on their back (not their front or side) Overheating by heavy wrapping and high room temperature should be avoided Infants should be placed in the ‘feet to foot’ position 2 4 3 93 1 5 6 Paediatric emergencies Box 6.5 Factors associated with SIDS The infant • Age 1–6 months, peak at 12 weeks • Low birthweight and preterm (but 60% are normal birthweight term infants) • Sex (boys 60%) • Multiple births The parents a • Low income • Poor or overcrowded housing • Maternal age (mother aged <20 years has three times the risk of a mother aged 25–29 years, but 80% of affected mothers are >20 years old) a • Single unsupported mother (twice the rate of supported mothers) • High maternal parity a 6 • Maternal smoking during pregnancy (1–9 cigarettes/day doubles the risk: >20/day increases the risk five fold) a - • Parental smoking after baby’s birth The environment • The infant sleeps lying prone • The infant is overheated from high room temperature and too may clothes and covers, particularly when ill. a Three of these four factors are present in over 40% of SIDS but only 8% of control families. Based on data from Fleming P, Blair P, Bacon C et al. 2000. Sudden Unexpected Deaths in Infancy. The Stationery Office, London. % 20 15 10 5 0 2 1.6 1.2 0.8 1 2 3 4 5 6 7 8 9 10 11 12 0.4 0 Age (months) Year Figure 6.14 Age distribution of SIDS. (Based on data from Fleming P, Blair P, Bacon C et al. 2000. Sudden Unexpected Deaths in Infancy. The Stationery Office, London, with permission.) Figure 6.15 Decline in the number of deaths from SIDS in the UK from 1.9/1000 live births in 1989 to 0.31 in 2008. Prevention of sudden infant death syndrome Lie infant on back Do not smoke during pregnancy or in the same room as infant x10 Figure 6.16 Key features of the ‘Back to Sleep’ campaign. x8 x6 x4 x2 0 1-9 10-19 20 plus No. of cigarettes smoked/day Avoid overheating Place in ‘feet to foot position’ °C 40 30 20 10 0 -10 Hot Comfortable (16-20°C) Cold 94 Keep head uncovered Paediatric emergencies Increase in risk of SIDS SIDs per 1000 live births Management of the sudden unexpected death of an infant Resuscitation Care of parents Baby pronounced dead Breaking the news to the parents Parents offered to see and hold their baby Initial strategy discussion Home visit within 24 hours Postmortem Case discussion Follow-up and bereavement counselling Infant found dead at home – take to Accident and Emergency Department Initiate resuscitation unless inappropriate Should be cared for by specific member of staff History should be obtained Detailed clinical examination by consultant Remove endotracheal tube and intraosseous needles but retain venous lines Retain child's clothes and any bedding and nappy for police Investigations performed: • Nasopharyngeal aspirate for virology and bacteriology • Blood for toxicology, metabolic screen (on Guthrie card), chromosomes if dysmorphic • Blood culture • Urine (catheter specimen) – for biochemistry, toxicology and freeze immediately • Lumbar puncture – CSF for virology and routine culture, if clinically indicated SUDI paediatrician, coroner, police and primary care team and other healthcare professionals informed Performed by the paediatrician. Explain that the police and coroner will be involved, a postmortem is required, tissue blocks and slides will be taken and retained permanently as part of the medical record. Give parents the opportunity to donate tissues and organs Inform them that the involvement of the police does not imply that they are being blamed for their child's death Parents should be offered the opportunity to see and hold their child. Encourage as helps them accept the reality of their child's death. They may wish to see the child again within the next few days. The family may wish a minister of religion to be called. SUDI paediatrician and supervising police officer Social services review to identify if previously involved or any child protection issues Police visit the home to talk with the parents and examine the place where the baby died SUDI paediatrician may also attend Detailed history obtained Report compiled for the coroner Performed by paediatric pathologist Preliminary postmortem result Multi-agency meeting, including SUDI paediatrician, police, GP/health visitor and, where appropriate, the social worker All relevant information reviewed Possibility of abuse or neglect considered Report is sent to the coroner Paediatrician writes a detailed letter to the parents providing information about the cause of the infant's death and arranges to meet them Follow-up to provide family an opportunity to discuss the final results of the postmortem and consider its implications for future pregnancies. Genetic counselling may be indicated. Bereavement counselling – available from health professionals and other agencies Figure 6.17 A recommended approach to the management of the sudden unexpected death of an infant. There are local variations in its implementation. (Adapted from RCPCH. 2004. Sudden Unexpected Death in Infancy. The report of a working group convened by the Royal College of Pathologists and The Royal College of Paediatrics and Child Health. RCPCH, London. Available at: www.rcpath.org and www.rcpch.ac.uk (Accessed January 2011). 95 1 2 3 4 5 6 Paediatric emergencies • • • Parents should not smoke near their infants Parents should seek medical advice promptly if their infant becomes unwell. Parents should have the baby in their bedroom for the first 6 months of life Summary Sudden infant death syndrome (SIDS) • SIDS is the commonest cause of death in children aged 1 month to 1 year. • The peak age is 2–4 months. • SIDS has been dramatically reduced by lying babies on their back to sleep. -->
!!Définitions
*le ''Syndrome de la queue de cheval'' correspond à une ''compression ou irritation des racines lombo-sacrées au niveau sous-L2''
*La ''cause'' la plus fréquente est l'''hernie discale''. On trouve aussi la ''sténose spinale'', les ''fractures vertebrales'' et les ''tumeurs''
{{syndrome_queue_cheval.jpg}}
!! Clinique
*Le patient présente des ''symptômes aigus'' (le syndrome se développe en moins de 24h), accompagnées de ''parésies'' et de ''paresthesies'', sur un trajet de mutliples racines nerveuses.
*On peut trouver une ''abolitions des reflexes rotuliens ou achileens''.
*Un symptôme clef est la ''retention urinaire'' (ou incontinence par regorgement) et l'''incontinence fecale''
*Le patient présente aussi une ''douleur lombaire'' avec ''radiation dans les jambes'' (sciatique), qui est ''aggravée par le Valsalva'' ainsi que ''soulagée par la position couchée''
*On note aussi une ''anesthésie en selle'' et tardivement une ''dysfonction érectile''.
!! Investigation
*Faire un ''IRM en urgence'' qui va confirmer la [[compression des racines|syndrome_queue_cheval_irm.jpg]] si on a une hernie.
!! Traitement
*Traiter rapidement (<48h) par une ''décompression chirurgicale'' de la pathologie, afin de préserver les pertes fonctionnelles.
!Syndrome de Leriche *Impotence sexuelle + absence de pouls fémoraux *Occlusion de l'aorte terminale (collatérales par les épigastriques) *Symptômes **Pied froid **Claudication **Absence de pouls périphériques et fémoraux **Impuissance **Amyotrophie
!!Définition
*Le syndrome de Marfan est une ''maladie du tissus conjonctif''. C’est une maladie ''rare'' à ''transmission dominante'' avec mutation d’une protéine essentielle du tissus conjonctif (fibrilline).
*Ce syndrome induit des atteintes ''cardiovasculaires, musculo-squelettiques, ophtalmologiques'' et ''pulmonaires''
*Une autre pathologie des tissus conjonctifs assez proche du Marfan est le syndrome d’Ehler-Danlos.
{{marfan_schema_clinique.jpg}}
!!Atteintes cardiovasculaires
*On observe une ''dilatation progressive de l’aorte ascendante'', ce qui peut être dangereux car il y a un risque de se compliquer en ''insuffisance aortique'', voir pire en ''dissection aortique''.
!!Atteintes musculo-squelettiques
*Les patients sont souvent de ''grande taille'' avec une ''disproportion membre/tronc'' ( bras et jambes très longs), une ''arachnodactylie'' et des ''hypermobilités articulaires''.
*Au niveau osseux on peut aussi retrouver des ''[[pectus excavatum|marfan_thorax_pectus.jpg]]'' ainsi que des ''scolioses''.
!!Atteintes ophtalmologiques
*Les deux grands risques ophtalmologiques sont la ''luxation du cristallin'' ainsi que le ''décollement de la rétine''.
!!Atteintes pulmonaires
*Les patients présentent un risque augmenté de ''pneumothorax spontané''.
{{syndrome_sjogren.jpg}}
!!Généralités
*Le syndrome de Gourgerot-Sjögren (ou syndrome sec) est une ''maladie autoimmune'' impliquant une ''sécheresse des muqueuses'' de divers organes. Elle est due à une ''infiltration de lymphocytes B'' entre autres.
*Les ''symptômes'' principaux sont une ''sécheresse oculaire'' (xerophtalmie) et une ''sécheresse buccale'' (xerostomie).
*son ''évolution'' peut se compliquer d’atteintes ''pulmonaires, rénales'' et ''neurologiques''. Il y a aussi un ''risque de lymphome'' associé !
*Les ''investigations'' comprennent
** le ''test de schirmer'' (papier sous l’oeil pour mesurer la quantité de larmes)
**le ''break-up time'' (test de rupture du film de fluorosceine dans l'oeil)
**la ''sialométrie'' (tampons aux orifices des glandes salivaires pour mesurer la quantité de salive)
**le ''labo'' (recherche de FAN, Anti-SSA, Anti-SSB) et finalement la confirmation par un ''US des glandes salivaires'' suivi d’une ''biopsie des glandes salivaires''.
*le ''Traitement'' est surtout ''symptomatique'' avec des ''larmes artificielles'' et de la ''salive artificielle'' et récemment des ''traitements biologiques'' dirigés contre les lymphocytes B (''rituximab'': anti-CD20.)
{{syndrome_sjogren_test.jpg}}
{{wallenberg.jpg}}
!! Généralités
* Le ''Syndrome de Wallenberg'' est dû à une ''occlusion de la PICA'' avec perte de vascularisation de son territoire au niveau de la ''medulla''
*La ''Clinique comporte'':
|!Structure touchée|!Clinique|
|Tractus Spinothalamique (Antéro-Latéral)|Perte de douleur controlatéral des membres|
|Noyau Spinal Du nerf Trijumeau|Perte de douleur ipsilatérale de la face|
|Noyau ambigu (partie motrice du IX et X|Dysphagie, voix enrouées, diminution du gag-reflex|
|Fibres sympathiques hypothalamo-spinales|[[Syndrome de Horner]] Ipsilatéral|
|Noyau Vestibulaire|Nausée, Nystamus, Vertigo|
|Fibres spinocerebelleuses|Ataxie ipsilatérale|
*Le Tractus Corticospinal, Le Lemnisque Médian et le Noyau du XII ne sont pas touchés donc le patient n'a ni perte de force, ni perte de sensibilité tactile, ni perte de motricité de la langue.
{{encephalopathie_wernicke_korsakoff_irm.jpg}}
!! Généralités
* Le ''Syndrome de Wernicke-Korsakoff'' est du à un ''déficit de Thiamine'' (vitamine B1) qui est du à l'''alcool''.
* La pathologie induit des ''nécroses'' au niveau des ''corps mamillaires'', du ''thalamus'' et de ''la substance péri-acqueducale''.
* On peut la visualiser comme une ''hyperintensité'' à l'''IRM''
* Le ''traitement'' comporte la ''Vitamine B1'' (thiamine)
!!!''Encéphalopathie de Wernicke''
La ''Clinique'' d'une Encéphalopathie de Wernicke sera une ''triade''
# ''Ataxie''
# ''Diplopie'' ou Nystagmus (paralysie du VI)
# ''Confusion''
!!!''Syndrome de Korsakoff''
La ''Clinique'' d'un Syndrome de Korsakoff comprend:
*''Amnésie Antérograde et Rétrograde'', ou Amnésie Globale
*''Confabulaitons'' et états confusionnels
!!Généralités *Le ''Syndrome des Antiphospholipides (APS)'' correspond à un état de ''thrombophilie'' du à la présence d’''auto-anticorps anti-phospholipidiques'' qui vont provoquer des ''thromboses'' dans les veines et artères. *Il est important en gynéco-obstétrique car source de ''fausses couches à répétition''.
{{syndrome_loges.jpg}}
!!Définition
*le ''syndrome des loges'' est une ''__urgence__'', due à une ''pression augmentée'' au niveau d'une ''loge'', typiquement au ''mollet'' ou au niveau de l'''avant-bras''.
*La loge est entourée de fascia et d'os, empêchant sa dilatation lors d'odèmes. Le résultat est que les ''vaisseaux sont comprimés'', ce qui va entrainer une ''ischémie'' locale pouvant évoluer en nécrose
*Les ''causes'' possibles sont:
**''fractures''
**''traumas''
**''reperfusion''
**''brûlure circonférentielle''
**''plâtres mal faits''
**''mal position pendant une opération''
*Les complications possibles sont:
*Nécrose si pas traitée
**Contracture ischémique de Volkmann (rétration fibrotique du muscle, finissant par se calcifier)
**Rhabdomyolise, IR
!!Clinique
//les 5 p de l'ischémie//
*''Pain''
*''Pallor''
*''Paresthesia''
*''Pulseness'' (Tardif)
*''Paralysis ''(Tardif)
!!Tratement
*enelver les plâtres, surélever le membre
*''fasciotomie en urgence'' avec fermeture à 48-72h et débridement des tissus nécrosés
{{algoneurodystrophie_clinique.jpg}}
!!Définition
*le SDRC (ou Algoneurodystrophie, Syndrome de Sudeck) est un ''syndrome douloureux'' faisant suite à un ''trauma'' ou à une ''chirurgie''
!!Diagnostic
*Une ''Douleur'' qui ''persiste'' et parait ''disproportionnée'' par rapport à l’événement inintal
*La Douleur est de type ''allodynie'' (déclenchée par un stimulus normal), avec ''asymétrie de couleur/température'' de l’endroit touché, ainsi qu’un ''œdème'' et une ''dysfonction motrice'' (faiblesse, tremor, dystonie) ou des ''changements trophiques'' (pilosité, ongles, peau)
*La pathologie ne s’explique pas par un autre symptôme de manière plus convaincante
!!Investigations
''Imagerie''
*A faire seulement si la ''clinique n’est pas satisfaisante'', sinon on peut s’en passer.
*la ''scintigraphie'' ainsi que l’IRM sont les deux imageries praticables.
!!Traitement
*La base du traitement est la ''physiothérapie'' et l’ergotherapie.
*Au niveau médicamenteux, on peut essayer la ''calcitonine'', les corticoïdes et les biphosphonates.
{{TSST_clinique.jpg}}
!!Définition
*le ''Syndrome du Choc Toxique'' est une maladie infectieuse aigue rare mais potentiellement létale, due à la ''Toxine TSST-1'' du //''staph.aureus''//. Mais aussi le //s.epididirmis// existe.
*On le trouve souvent chez les ''femmes qui gardent leur tampon'' trop longtemps.
*D'autres causes sont les blessures, brulures, chirurgies et piqures d'insectes infectées.
*C'est la Toxine dans le sang qui provoque les symptômes, il n'y a pas de bacteriémie.
!!Clinique
*D'abord ''etat grippal'' (fièvre, myalgie, céphalées)
*Puis ''Rash erythémateux diffus'' avec souvent'' désquamation palamaire''
*''Hypotension''
*De nombreux organes peuvent être atteints et subir une défaillance
!!Investigations
*Diagnostic surtout ''Clinique''
*les hémocultures sont négatives
!!Traitement
*''Soins Intensitfs''
*''Hemodynamique'' avec fluides IV et vasopresseurs
*Ablation immédiate du tampon
*ATB dans certains cas sévères. la ''clindamycine'' a des actions contre la toxine, c'est une des principales indications de cet ATB.
{{syndrome_choc_toxique.jpg}}
!!Définition
*Le'' syndrome du défilé thoracobrachial'' ou de la traversée thoraco-brachiale (STTB), en anglais : thoracic outlet syndrome, est une atteinte du'' paquet vasculaire et nerveux excessivement comprimé ''dans son passage entre les'' muscles scalènes antérieurs et moyens''.
*Ce syndrome comporte des ''douleurs'' et des ''paresthésies'' du cou, de l’épaule, du bras, de la main, de la paroi antérieure du thorax et de la région interscapulo-thoracique. Il s’agit, souvent, de signes bilatéraux.
*De façon générale, et sauf s’il existe une anomalie osseuse ou une forme compliquée évidentes, l'''intervention chirurgicale ''ne serait décidée qu'après échec d'une physiothérapie.
{{defile_thoracobracial.jpg}}
!!Définition
*Il s’agit d’une ''compression du nerf médian'' au niveau du rétinaculum des fléchisseurs du poignet.
{{tunnel_carpien_schema.jpg}}
!!Etiologie
*La cause est principalement ''idiopathique''. Elle est souvent associée à des métiers avec ''flexion répétitive du poignet'', ou fractures du poignet.
*Il existe des ''causes secondaires'' comme les tumeurs, les ostéophytes, la PR, l’Hypothyroïdie, la grossesse et les neuropathies.
!!Clinique
*Le patient se plaint typiquement de ''réveil nocturne'' avec ''paresthésie et douleur'' qui sont ''soulagées en secouant et massant'' la main.
*Dans les cas avancé on peut trouver une atrophie et parésie du m.thénar qui est innervé par le n.médian
*Le patient présente une ''perte de sensibilité'' au niveau du ''trajet du nerf médian'' .
{{main_innervation_schema.jpg}}
*le ''test de tinnel'' positif correspond à une ''douleur à la percussion du n.médian''
{{test_de_tinel.jpg}}
*le ''test de phalen'' positif correspond à l’apparition de ''paresthésies'' lors de la ''flexion du poignet'' prolongée.
{{test_de_phanel.jpg}}
!!Diagnostic
*Le diagnostic est surtout ''clinique'' grâce à l’anamnèse et à l’examen clinique
*l’ENMG peut aider au diagnostic mais ne l’exclut pas si négatif.
!!Traitement
*Les ''formes légères'' se traitent ''conservativement''. Cela passe par de la physiothérapie et ergothérapie et surtout une ''attelle nocturne'' pour immobiliser le poignet.
*On peut ensuite ajouter un ''traitement médicamenteux'', via des ''AINS'' et ''infiltrations de cortocoïdes''
*Pour finir on peut recourir au ''traitement chirurgical'', qui passe par la ''section du ligament transverse du carpe'', si le patient est très symptomatique et ne répond à aucun traitement (rares complications: blessures des nerfs, vaisseaux ou tendons et algoneurodystrophie)
!!Définition
*''Inversion du flux dans l’artère vertébrale ''dû à une ''sténose de l’artère sous-clavière'' proximale ipsilatérale.
*Différence de TAS ≥20mmHg, diminution de l’intensité du pouls du côté atteint.
*Souffle au niveau de l’artère sous- clavière atteinte.
*Syncope lors d’exercice physique du bras
{{vol_sclavier.jpg}}
!!Generalités *Gene FMR1 avec mutation ''CGG en répétition''. On parle de ''pré-mutation entre 50-200 répétitions'' et on parle de ''syndrome du X fragile si >200 répétitions'' *ce gene est sur le ''chromosome X'', quand il est transmis il y a des chances qu'il ''mute encore plus''. *les ''males'' sont souvent atteints, et ils ont des ''difficultés scolaires'' et un ''QI diminué''
![ext[SHU.pdf|./pdf/SHU.pdf]]
<!-- Texte caché pour la recherche
Syndrome hémolytique urémique (SHU)
[059.3]
Gén:
Glas:
Tx: Pron:
Il s'agit avant tout d'une maladie qui touche surtout l'enfant. Le SHU a été décrit en 1955 (enfants avec une insuffisance rénale aiguë).
Le SHU touche les vaisseaux sanguins, les cellules sanguines et les reins.
Il est svt. (mais pas tjs.) provoquée par des souches dE. coli qui existent naturellement dans l'intestin et les selles des ruminants (ex: bovins, moutons, chèvres). Transmission à l'homme se fait par:
La consommation d'aliments crus ou d'eau contaminés
- Contact avec de l'eau de baignade contaminée
- Contact direct avec des animaux ou des personnes infectées Chez l'adulte, on parle svt. du syndrome «PTT-SHU», puisque les formes mixtes sont fré- quentes, dont l'origine est:
Idiopathique (40 %)
- Maladie auto-immune ou d'une infection ou une néoplasie (25-30 %)
- Médicamenteuse (ex: Quinine); grossesse/post-partum
- Status post greffe (ex: cellules hémoatopïéliques, foie, moelle); néoplasie
1. SHU typique {forme «épidémique», «primitive» qui touche surtout l'enfant; 90 %)
- Une toxine produite par une souche d'E. coli entéro-hémorragique est svt. isolée (appelé E. coli 0157:H7). Cette toxine induit la clinique suivante:
- Douleur abdominal, diarrhée (typiquement sanguinolentes) -- Insuffisance rénale aiguë -- Anémie hémolytique, présence de schistocytes, thrombopénie
- Pas de déficit neurologique, l'ADAMTS13 est normal Il. SHU atypique (env. 10 % sont des enfants)
- Insuffisance rénale aiguë sans diarrhée précédente
- Anémie hémolytique, présence de schistocytes, thrombopénie Il y a des cas héréditaires
- Parfois associé à une infection à pneumocoques
- Néphropathie sous-jacente Ad. consultation hémato Enfant: Le plus svt. guérison si post infectieux. Mortalité 5 %. Adulte: Mortalité 30-40 %. Guérison sans séquelles: 50 %.
890 Lab: DO:
Clin:
Tx:
Thrombopénie (le bilan de la coagulation est généralement normal) Médicamenteux/toxique Thrombopénie induite par l'héparine (TIH) Origine infectieuse Phénomène «EDTA» (pseudo-thrombopénie lors d'agrégation plaquettaire dans un tube EDTA) CIVD Hypersplénisme Purpura post-transfusionnelle Anomalie de MAY-HEGGLIN Syndrome BERNARD-SOULIER Manque de vitamine 812 ou d'acide folique Néoplasie myélodysplasique myéloproliférative (NMM) Infiltration osseuse (tumeur) HELLP syndrome Thrombopénie de la grossesse (surtout au 3• trimestre) La clinique est très variable:
- Hémorragie muco-cutanée, svt. spontanée ou après des trauma de type «bagatelle»
- Pétéchies, épistaxis, hémorragie gingivale
- Ménorragies
En
rati ue clini ue Une thrombopénie isolée avec un bilan de coagulation normal doit faire évoquer un purpura thrombopénique immun (PTI).
La présence d'une splénomégalie ne soutient PAS le diagnostic de PTI.
1. L'indication thérapeutique sera dictée par la clinique et le nombre de plaquettes
ThrW':'~cytes
Cllnlqlle. IVma~ues
Indication à un Tx
< 10 G/L
L'attitude est indépendante de la clinique
Oui
> 30 G/L
.
--- 30-50 G/L
Asymptomatique
--···---·-·---·-··----····---- . Symptomatique (selon risque hémorragique):
Non
-
HTA, ulcère peptique, sports à risque, ...
Décision individuelle
> 50 G/L
.
.
Asymptomatique
Non
Symptomatique (10-30 %)
Décision individuelle
Tableau 1: Indications à une transfusion plaquettaire.
2. Options thérapeutiques
2.1. Corticoïdes(= Tx de 1•'• ligne) Ex: Prednisone 1 mg/kg PO i.d. x 2-4 sem pour atteindre un nombre plaquettaire > 100 G/L, puis graduellement arrêter (sur 4-6 mois) ou:
Dexaméthasone 40 mg PO i.d. x 4 j. Au total 4 cycles à 28 jours.
1
2.2. Immunoglobulines humaines Gén: L'indication des immunoglobulines est à discuter avec un spécialiste. La récidive du PTI est la règle au bout de quelques semaines.
lnd: Tx d'urgence en cas d'hémorragie sévère Pré-opératoire
2.3. Splénectomie lnd: • PTI sévère (la splénectomie= Tx de 2• ligne). Att: • Ad. consultation hémato
2.4. Traitement de 3• ligne Ex: • Rituximab, Danazol, Dapsone, Azathioprine, Cyclophosphamide
3. Vaccins recommandés lorsqu'une splénectomie est prévue
3.1. Vaccin contre le pneumocoque
3.2. Vaccin contre le méningocoque
3.3. Vaccin contre l'Hémophilus influenzae de type B
3.4. Vaccin contre la grippe (1x/an)
4. Traitements pour le futur (études en cours)
Rem:
4.1. Agonistes de la thrombopoïétine Les transfusions plaquettaires ne sont généralement pas indiquées, car les plaquettes transfusées seront neutralisées en quelques heures par les anticorps circulants et en plus, ce processus entretien l'autoimmunisation.
Par contre, les transfusions plaquettaires peuvent être judicieux en cas d'hémorragie menaçant la vie (après avoir adm. des immunoglobulines auparavant).
-->
{{syndrome_nephrotique.jpg}}
!!Généralités
*le ''syndrome néphrotique'' est défini par:
** une forte ''protéinurie >3,5 g/24h''
**une ''hypoalbuminémie''
**une ''hyperlipidémie'' avec lipidurie
**des ''odèmes''
*Souvent on trouve des ''urines mousseuses''
*Dans la ''forme pure'' il n'y a pas d'HTA ni hématurie. On a simplement une ''augmentation de la perméabilité'' de la membrane basale glomérulaire
*Dans la ''forme impure'', une HTA et hématurie peuvent être présentes. On retrouve des ''lésions ou dépots / proliférations'' au niveau de la membrane basale glomérulaire
*La prise en charge sera d'envoyer le patient en consultation néphro.
{{syndrome_nephrotique_vs_nephritique.jpg}}
*Le ''syndrome post-commotionnel'', également nommé syndrome subjectif ou SPC, historiquement nommé choc de l'obus, est un ensemble de symptômes qui peuvent apparaître à la ''suite d'une commotion cérébrale'', généralement accompagnée d'une'' perte de'' ''connaissance''. *Ces symptômes peuvent apparaître ''dans la semaine'', mais aussi plusieurs mois après un traumatisme crânien. *Ces symptômes'' disparaissent généralement dans les jours'', semaines ou mois qui suivent. *Des'' signes et symptômes'' comme l'''hyperacousie'' (sensibilité auditive au bruit), des problèmes de ''concentration'' et de ''mémoire'', une ''irritabilité'', la déprime, l'anxiété, la fatigue et une faible estime de soi peuvent survenir quelques jours ou semaines plus tard.
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
!! Clinique
!!!''Statiques''
*''Hypotonie''
*''Instabilité posturale ''(Station debout: augmentation du polygone de sustentation, marche comme quelqu'un qui est ivre)
*''Phénomène de rebond ''(Stweart-Holmes, hypotonie, perte du frein)
!!!''Cinétiques''
*''Ataxie'' (Manque de coordination des Mouvements)
*''Réflexe patellaire pendulaire'' (Réflexe normal mais suivi de plusieurs oscillations)
*''Dysdiadochocinésie''
*''Dysmétrie'' (Doigt-Nez: le patient va aller a coté puis se corriger, se planter encore, se corriger.)
*''Dysarthrie'' (Variation d'intensité de la voix, qui passe de hypo a hyperphone)
*Nystagmus (Nystagmus absent au repos, qui apparait avec le mouvement des yeux, Poursuite occulairee saccadé car le patient essaie toujours de corriger)
*''Tremblement d'intention'' (A l’effort, contrairement au tremblement de repos (parkinson))
!! Ataxies Cérébelleuses
!!!''Ataxie congénitale'':
* Associée à des malformations comme ''Arnold-Chiari''
!!!''Ataxie héréditaire'':
* Surtout l'''Ataxie de Friedrich'' (mortelle en 20 ans)
!!!''Ataxie acquise''
* ''Neurodégénérative''
* ''Alcool''
*''Toxines''
*''Evénement Vasculaire''
*''SEP''
{{ataxies_ddx.jpg}}
!!Généralités *Il existe ''3 entités'' principales des syndromes myéloprolifératifs: *# [[Polycythémie]] *# Thrombocytopénie Essentielle *# Myélofibrose Primitive (Splénomégalie Myéloïde chronique) *Il existe plusieurs marqueurs de syndrome myéloprolifératif, le plus important, le ''//JAK2-V617F//'': mutation retrouvée dans le SMP, impliquant une maladie clonale. *Les SMP sont des BCR- tandis que la CML est BCR+
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
!!Tachycardie Atrial Multifocale (MAT)
{{ECG_MAT.jpg}}
*La ''Tachycardie Atriale Muttifocale'' est une ''Tachyarythmie Supraventricuaire Atriale à >100min''
*Elle consiste en de ''multiples ondes P'' avec comme origine l'''oreillette'' et ''pas le noeud SA''.
*Contrairement à la [[Tachycardie Auriculaire (TA)]], elles proviennent de ''zones différentes'' de l'oreillette et donc la grande différence est que les ''Ondes P sont de morphologie variable''.
*Il faut donc comme ''critères'':
*#Au moins ''3 morphologies des P différentes''
*#Des ''Intervales PR variables''
{{ECG_MAT_schema.jpg}}
!!Tachycardie Auriculaire (TA)
{{ECG_TA.jpg}}
*La ''Tachycardie Auriculaire ectopique unifocale'' est une ''Tachyarythmie Supraventriculaire Atriale >100/min ''
*Elle consiste en des ''ondes P surnuméraires'' provenant d'une ''zone de l'auricule'' et non ''pas du noeud SA''.
*Vu que ces ondes P ne viennent pas du noeud SA, elles ont une ''morphologie alterée'' comparé aux [[ondes P normales|ECG_Onde_P.jpg]].
*Comparé à la [[Tachycardie Atriale Multifocale (MAT)]], elle ne comporte qu'une unique zone de production des P dans l'auricule et donc:
*#la ''morphologie atypique est la même à chaque fois''
*# l'''interval PR ne change pas''
{{ECG_TA_schema.jpg}}
!!Tachycardie Jonctionelle ectopique (TJ
{{ECG_TJ.jpg}}
*La ''Tachycardie Jonctionelle ectopique'', ou //AVJT// est une ''Tachyarythmie Suprventriculaire Nodale'' due à une augmentation de l'automatisme de la jonction A-V.
*Elle est caracterisée par des ''crises'' avec ''Onde P négatives''.
{{ECG_TJ_schema.jpg}}
*Souvent chez le ''jeune'', La tachycardie paroxystique supraventriculaire (TPSV) désigne un rythme cardiaque anormalement élevé. *Le WpW peut en faire *TTT par ''Valsalva'', ''Massage'' ''carotidien'' *Si ça marche pas: ''adénosine''. et si ça marche pas: ''cardioversion''
!! Tachycardie Sinusale (TS)
{{ECG_TS.jpg}}
*la ''Tachycardie Sinusale (TS)'' est une [[Arythmie|Arythmies]], faisant partie des ''Tachyarythmies Supraventriculaires Atriales ''.
*Elle correspond à un ''Rythme Sinusa >100/min'', généralement un rythme entre 100 à 180/min. Le rythme maximum du coeur diminue avec l'âge de 200 à 140/min
*Les ''Causes'' sont liées à une ''demande en O2 augmentée''. On retrouve:
**l'''Exercice''
**le ''Stress''
**les ''Infections''
**les ''Chocs''
**l'''Anémie''
**l'''[[Hyperthyroïdie|Hyperthyroïdie]]''
**La ''Dobutamine'' et l'''Adénosine''
*On parle de causes ''appropriées'' ou ''innapropriées'' suivant si elles sont liées à des réactions physiologiques ou à des pathologies sous-jacentes.
{{ECG_TS_schema.jpg}}
!!Tachycardie Ventriculaire (TV)
{{ECG_TV.jpg}}
*La ''Tachycardie Ventriculaire (TV)'' est une ''Tachyarythmie Ventriculaire'' qui a souvent comme origine du ''Tissus cicatricel'' dans le myocarde.
*Elle est définie par une ''séquence de 3 battements ventriculaires''. On parle de TV soutenue si elles s'enchainent durant 30s.
*L'''Ejection ventriculaire'' est fortement ''diminuée'', ce qui amène souvent à des ''hypotensions'' et ''syncopes''.
*C'est une ''Urgence'' car elle peut se détériorer en [[Fibrillation Ventriculaire (FV)]]. Elle fait partie des ''Rythmes Choquables'' avec les [[FV|Fibrillation Ventriculaire (FV)]].
*Il existe ''deux types'' de TV:
**La ''TV monomorphe'' si tous les QRS ont le même aspect
**La ''TV polymorphe'' si les QRS sont d'aspects différents, dont font partie les [[Torsades de Pointes (TdP)]].
*Il existe aussi les ''RIVA'':
**sortes de TV dues à une reperfusion d'infarctus, signe que le tissus redevient viable
**série de salves de <10 complexes
{{ECG_TV_schema.jpg}}
undefine
{{tamponnade_pericardique.jpg}}
!!Définition
*''tableau clinique ''faisant suite à la compression des cavités cardiaques par un épanchement péricardique important.
*Tamponnade = ''URGENCE ''médicale absolue!
!!Physiopathologie:
*La présence de liquide dans le sac péricardique provoque une ''compression ''de l'atrium droit et de la partie intra-péricardique des veines caves. Ceci provoque une diminution du retour veineux-+ baisse du débit cardiaque (car remplissage insuffisant du VG)
*Plus l'épanchement péricardique se forme rapidement, moins bien il sera toléré: En cas de constitution rapide, une ''adiastolie aiguë ''peut survenir.
* Si la tamponnade se produit lentement, même une grande quantité de liquide'' (1 L!)'' peut être «bien» supportée ..... MAIS PRUDENCE: Le'' collapsus hémodynamique ''peut survenir en quelques secondes/minutes!
!!Clinique:
* ''Tachycardie'' (> 100/min), ''tachypnée'' (> 20/min)
*''Pouls paradoxal'' (Pulsus paradoxus: un pous percu comme anormalement plus faible lors de l'inspiraiton, avec aussi une petite baisse de la TA. Ce phénomène est aggravé dans la tamponnade)
*''turgescence jugulaire''
* ''Instabilité hémodynamique'': hypotension artérielle, arythmies, état de choc
* __ECG__: Microvoltage et alternance électrique des QRS
* __Rx__: Rx poumons standard: la silhouette cardiaque s'agrandit lorsque l'épanchement> 250 ml
<$button popup="$:/tamponnade_ecg.jpg" >
[img width=64 [images/tamponnade_ecg.jpg]]
</$button><$reveal type="popup" state="$:/tamponnade_ecg.jpg"><div class='tc-tiddler-frame'>
{{tamponnade_ecg.jpg}}
</div>
</$reveal><$button popup="$:/tamponnade_rx.jpg" >
[img width=64 [images/tamponnade_rx.jpg]]
</$button><$reveal type="popup" state="$:/tamponnade_rx.jpg"><div class='tc-tiddler-frame'>
{{tamponnade_rx.jpg}}
</div>
</$reveal>
!! Etiologie:
*''Péricardite aiguë''
* ''Post traumatique'' (hémopéricarde); post ''intervention chirurgicale'' thoracique
* ''Dissection aortique''
* Post ''infarctus'' ''myocardique'' (''rupture du myocarde!'')
* ''Néoplasie'' (ex: lymphome)
* Maladie auto-immune (ex: LED)
* Post actinique
* Urémie
* Médicamenteuse
* Iatrogène (ex: post ''angiographie'')
!!Diagnostic:
* 1. ''Anamnèse + clinique ''(notion d'un épanchement péricardique important)
* 2. ''Echocardiographie ''''transthoracique ''et recherche de:
** Compression de l'atrium droit
** Compression du VD durant la diastole
** Variation du flux transmitral (> 25 %)
** Mvts. paradoxaux du septum interventriculaire
** Veine cave inférieure dilatée sans variation respiratoire
!!Traitement:
//''A. TRAITEMENT D'URGENCE ABSOLUE''//
'' 1. Remplissage vasculaire-+ augmentation de la pré-charge!''
* Bolus de'' NaCI 0.9 % IV ''(ex: 2-3 Là passer avec une manchette à pression!)
* ''STOP'' tous les ''médicaments'' qui ''baissent la pré-charge'' (ex: diurétiques, nitrés, opioïdes)!
'' 2. Ponction/drainage du péricarde IMMÉDIATEMENT!''
* a) Patient en décubitus dorsal, assis à 60°.
* b) Contrôle hémodynamique strict! Le câble reliant l'appareil à ECG est fixé au bout de l'aiguille de ponction (pinces «Crocodile»).
* c) Sites de ponction (anesthésie locale, guidée par écho):
** i. Entre l'apophyse xyphoïde et l'arc costal gauche ou parastemal gauche ou:
** ii. Parasternal et apical: accès possibles si la quantité de liquide V est suffisante et que la voie sous xyphoïdienne est inadaptée(< 1 cm de liquide, obésité)
* d) Trajet de ponction:
** Avancer l'aiguille de ponction sous aspiration continue le long de la partie postérieure du sternum en direction de l'épaule gauche jusqu'à aspiration du liquide péricardique. La direction précise de la ponction est déterminée par échocardiographie.
*e) Mise en place du drain par la technique SELDINGER.
'' 3. Drainage chirurgical''
* __lnd__: Dissection de l'aorte, épanchement purulent, origine traumatique
//'' B. Situation d'urgence différée''//
* 1. Traitement causal
* 2. Péricardiotomie chirurgicale ± péricardioscopie
** : Biopsie du péricarde suivie d'un drainage (pdt. env. 3-5 j)
** __lnd__: • Origine néoplasique, immunodépression (incl. VIH), récidive, échec de Tx médical
undefine
undefine
undefine
{{TAVI.jpg}}
!!Définition
*la ''TAVI'' //(Transcatheter Aortic Valve Implantation)// est une ''valve implantable par voie endovasculaire'' et est une alternative au remplacement de valve par chirurgie ouverte.
*On l'utilise pour traiter la ''sténose aortique'' principalement
*On l'insère pliée via un catheter, et on l'implante un peu plus bas que la valve aortique, qui a elle-même été dilatée par un ballonet
!!Complications
*Il y a un risque de Bloc de conduction cardiaque chez certains patients, d'ou un suivi aux SI après la pose. Si c'est le cas on pose un pacemaker au patient
*L'autre risque est une déchirure au point de ponction
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{tendinopathie_achille_schema.jpg}}
!!Définition
*La ''Tendinopathie d’Achille ''correspond à une ''inflammation du tendon d’Achille'' suite à une ''surcharge mécanique'' de l’unité musculo-tendineuse. C’est une des pathologie les plus fréquentes dans cette zone.
*Les patients sont souvent des ''sportifs''. Dans quelques cas la pathologie peut venir de rhumatisme inflammatoire (spondylarthrite).
!!Clinique
*le patient présente des ''douleurs'' au niveau du ''tendon'', à quelques centimètres au dessus de son insertion sur le calcanéum. Parfois c’est l’insertion elle-même qui est touchée.
*A l’examen clinique on note une ''tuméfaction douloureuse'' au niveau du tendon.
*Il peut aussi y avoir des ''crépitements à la palpation'' du tendon.
{{tendinopathie_achille_clinique.jpg}}
!!Diagnostic
*Le ''Diagnostic est clinique'' surtout. Eventuellement on peut faire une RX ou US pour trouver certains signes.
!!Traitement
*Le traitement sera surtout un ''arrêt du sport'' ou de l’activité entraînant l’inflammation. On le couple à une ''antalgie simple (AINS'') et de la ''physiothérapie''. Les traitements plus avancés (ultrasons,..) sont rares.
*Ne ''PAS injecter de corticoïdes'', risque de rupture du tendon !
undefine
undefine
undefine
undefine
undefine
{{tetanos.jpg}}
!!Définition
*le ''tetanos'' est une infection par la bactérie //clostridium tetani//. produisant la ''//toxine tétanique//'', un des poisons les plus toxiques connu, provoquant la mort dans 30% des cas.
*On trouve les bactéries dans le ''sol'' et l'''environnement''. On se contamine lors de ''plaies'' principalement
*Il faut toujours penser au ''vaccin'' du tetanos lors d'anamnèse de plaie.
!!Clinique
*''hypertonicité'' avec notamment ''Trismus de la mâchoire'' comme premier signe, et ''dos arqué'' du à la contracture des muscles dorsaux
*Sensibilité préservée
*Hyperactivation sympathique
!!Investigation
*''Clinique'' principalement
*On peut faire des cultures de plaies mais peu fiable
!!Traitement
*''Soins intensif'' avec ''support respiratoire'' dans les formes graves
*''diazépam'' pour la tétanie
*''TIG'' (Tétanus ImmunoGlobin. de l'IgM) à donner IV, pour neutraliser la toxine
*Vaccination
!!Traitement si plaie en urgence
{{tetanus.jpg}}
undefine
@@background-color:lemonchiffon; !'' Tête '' @@ <<list-links "[tag[Tête]sort[title]]">>
![ext[tetralogie_fallot.pdf|./pdf/tetralogie_fallot.pdf]] <!-- Texte caché pour la recherche Symptoms Most are diagnosed: • • antenatally or following the identification of a murmur in the first 2 months of life. Cyanosis at this stage may not be obvious, although a few present with severe cyanosis in the first few days of life. - Tetralogy of Fallot This is the most common cause of cyanotic congenital heart disease (Fig. 17.8a). Clinical features In tetralogy of Fallot, as implied by the name, there are four cardinal anatomical features: • A large VSD • Overriding of the aorta with respect to the ventricular septum • Subpulmonary stenosis causing right ventricular outflow tract obstruction • Right ventricular hypertrophy as a result. Tetralogy of Fallot The classical description of severe cyanosis, hypercyan otic spells and squatting on exercise, developing in late infancy, is now rare in developed countries, but still common where access to the necessary paediatric cardiac services is not available. However, it is important to recognise hypercyanotic spells, as they may lead to myocardial infarction, cerebrovascular accidents and even death if left untreated. They are characterised by a rapid increase in cyanosis, usually associated with irrita bility or inconsolable crying because of severe hypoxia, and breathlessness and pallor because of tissue acido sis. On auscultation, there is a very short murmur during a spell. Signs • • Clubbing of the fingers and toes will develop in older children A loud harsh ejection systolic murmur at the left sternal edge from day 1 of life (Fig. 17.8b). With (a) (b) (c) single A2 3 6 – 6 6 Small heart Uptilted apex Pulmonary artery 'bay' (arrow) Oligaemic lung fields (d) V 1 Tetralogy of Fallot Right ventricular hypertrophy Upright wave in V 1 with 'pure' R wave (no S wave) T Figure 17.8 Tetralogy of Fallot. (a) Tetralogy of Fallot. The right ventricular outflow tract obstruction results in blood flowing from right to left across the ventricular septal defect (b) Murmur. (c) Chest radiograph. (d) ECG. 311 1 2 3 4 5 Cardiac disorders increasing right ventricular outflow tract obstruction, which is predominantly muscular and below the pulmonary valve, the murmur will shorten and cyanosis will increase. 17 Investigations Chest radiograph (Fig. 17.8c) A radiograph will show a relatively small heart, possibly with an uptilted apex (boot shaped) due to right ven tricular hypertrophy, more prominent in the older child. There may be a right sided aortic arch, but char acteristically, there is a pulmonary artery ‘bay’, a con cavity on the left heart border where the convex shaped main pulmonary artery and right ventricular outflow tract would normally be profiled. There may also be decreased pulmonary vascular markings reflecting reduced pulmonary blood flow. - - two parallel circulations – unless there is mixing of blood between them this condition is incompatible with life. Fortunately, there are a number of naturally occurring associated anomalies, e.g. VSD, ASD and PDA, as well as therapeutic interventions which can achieve this mixing in the short term. Clinical features Symptoms - Cyanosis is the predominant symptom. It may be pro found and life threatening. Presentation is usually on day 2 of life when ductal closure leads to a marked reduction in mixing of the desaturated and saturated blood. Cyanosis will be less severe and presentation delayed if there is more mixing of blood from associ ated anomalies, e.g. an ASD. - Physical signs (Fig. 17.9b) ECG (Fig. 17.8d) Normal at birth. Right ventricular hypertrophy when older. Echocardiography This will demonstrate the cardinal features, but cardiac catheterisation may be required to show the detailed anatomy of the coronary arteries. Management • Initial management is medical, with definitive surgery at around 6 months of age. It involves closing the VSD and relieving right ventricular outflow tract obstruction, sometimes with an artificial patch, which extends across the pulmonary valve. • Infants who are very cyanosed in the neonatal period require a shunt to increase pulmonary blood flow. This is usually done by surgical placement of an artificial tube between the subclavian artery and the pulmonary artery (a modified Blalock–Taussig shunt), or sometimes by balloon dilatation of the right ventricular outflow tract. • Hypercyanotic spells are usually self limiting and followed by a period of sleep. If prolonged (beyond about 15 min), they require prompt treatment with: - – sedation and pain relief (morphine is excellent) intravenous propranolol (or an α adrenoceptor agonist), which probably works both as a peripheral vasoconstrictor and by relieving the subpulmonary muscular obstruction that is the cause of reduced pulmonary blood flow – • • • Cyanosis is always present The second heart sound is often loud and single Usually no murmur, but may be a systolic murmur from increased flow or stenosis within the left ventricular (pulmonary) outflow tract. Investigations Chest radiograph (Fig. 17.9c) This may reveal the classic findings of a narrow upper mediastinum with an ‘egg on side’ appearance of the cardiac shadow (due to the anteroposterior relation ship of the great vessels, narrow vascular pedicle and hypertrophied right ventricle, respectively). Increased pulmonary vascular markings are common due to increased pulmonary blood flow. ECG (Fig. 17.9d) This is usually normal. Echocardiography This is essential to demonstrate the abnormal arterial connections and associated abnormalities. Management • • • • In the sick cyanosed neonate, the key is to improve mixing. Maintaining the patency of the ductus arteriosus with a prostaglandin infusion is mandatory. – – – intravenous volume administration bicarbonate to correct acidosis muscle paralysis and artificial ventilation in order to reduce metabolic oxygen demand. -->
* La ''Thalassémie'' est une ''maladie génétique'' caractérisée par un ''défaut de production des chaines alpha ou beta de l'hémoglobine''. Elle est classifiée suivant la chaine qui est atteinte. * La ''Beta-Thalassémie'' correspond donc à un défaut de la chaine beta (avec une chaine alpha intacte), tandis que l'''Alpha-thalassémie'' correspond à un défaut de la chaine alpha (avec une chaine beta intacte) * Les thalassémies touchent surtout les personnes de ''Méditéranée'' (Beta-Thalassémies) et d'''Afrique'' et ''Asie'' (Alpha-Thalassémies) * Les thalassémies aboutissent par une [[Anémie Hémolytique]] de type ''microcytaire hypochrome''. * La ''séverité'' se fera en fonction du nombre de gènes atteints, elle peut aller du porteur asymptomatique à la mort in utero * La ''Beta-Thalassémie Mineure'' correspond à une mutation ''Hétérozygote'' du gène Beta. Elle est ''peu symptomatique'' * La ''Beta-Thalassémie Majeure'' (ou Maladie de Cooley) correspond à une mutation ''Homozygote'' du gène Beta. Elle se présente ''dès 3-6 mois après la naissance'' et se caractérise par une ''anémie sévère'' avec ''jaunisse'' et ''splénomégalie''. L'enfant présente aussi un ''retard staturo-pondéral'' et un Crâne à l'aspect "[[Hair on End|thalassemie_rx.jpg]]" à la RX. Une ''Electrophorèse de l'HB'' montre une HB A1 diminuée couplée à une HB A2 et HB F augmentées. Le traitement passe par des ''Transfusions sanguines'', avec comme dangereuse complication un risque d'''Hémochromatose''.
undefine
<<tabs "[[Radiophysique]] [[Radiobiologie]] [[Radioprotection]] [[Appareils]] [[Pharmacologie]] [[Informatique]] [[Assurance-Qualité]] [[Médico-Légal]] [[Ethique]] [[Economie de la Santé]] [[Sécurité]] [[Docs]]" "Radiophysique" "" "tc-vertical">>
@@background-color:orange; !'' Thorax '' @@ <<list-links "[tag[Thorax]sort[title]]">>
!! Définition * La ''valeur normale des plaquettes'' est située entre ''150-400 G/l'', On parle de ''thrombocytopénie'' lorsque la valeur vaut ''<150 G/l''. * Les ''causes'' impliquent globalement une ''production diminuée'' ou une ''consommation augmentée''. !! Etiologies *''Production diminée'' **invasion tumorale **leucémies **chimio, radio, médicaments **anémie aplasique **syndrome de Fanconi *''Consommation augmentée'' **Infections **Purpura Thrombopénique Idiopathique (ITP) **Purpura Thrombotique Thrombocytopénique **Thrombocytopénie Induite par l'Héparine **CIVD *''Autres'' **Séquestration due à une Splénomégalie ** Grossesse (3e trimestre ou HELPP) ** Dilution (Transfusions) !! Clinique *La ''thrombocytopénie'' se manifeste globalement par des ''saignements'': **Pétéchies et Purpura **Epistaxis **Saignements Gastro-Intestinaux **Saignements Urinaires **Hemorragies intra-craniennes **mais PAS d'hémarthrose comme dans les thrombophillies !! Diagnostic * La ''FSC'' avec ''Numérotation plaquettaire'' permet de démontrer des ''Thrombocytes <150 G/l'' * Augmentation du ''TP'' (Quick, INR) et du ''aPTT'' !! Traitement *Traiter la ''cause'' sous-jacente **Donner des ''Transfusions de Plaquettes'' si nécessaire *Eviter les AINS, antiplaquettaires et anticoagulants
!! Définition * La ''valeur normale des plaquettes'' est située entre ''150-400 G/l'', On parle de ''thrombocytopénie'' lorsque la valeur vaut ''>400 G/l''. * Les ''causes'' impliquent essentiellement une étiologie ''réactionelle'' de production augmentée. !! Etiologies *Inflammations et Infections *Néoplasies *Néoplasies Myeloproliferatives (Thrombocytémie Essentielle) *Asplénie *Hémorrhagie aigue !! Thrombocytémie Essentielle *la ''Thrombocytémie Essentielle'' est une ''Néoplasie Myéloproliférative'' impliquant une ''production trop élevée'' de plaquettes par les ''Megacaryocytes'' de la moelle osseuse * la ''clinique'' est souvent ''asymptomatique'', mais le nombre élevé de plaquettes peut amener à des ''thromboses'' ou à des ''hemorragies'' ! On peut aussi avoir une [[erythromegalgie|polycythemie_vraie_erythromegalgia.jpg]] et une ''splénomégalie''comme dans la ''[[polycythémie vraie|Polycythémie]]'' *le ''diagnostic'' est posé sur plusieurs ''critères'': ** ''Biopsie de moelle'' montrant une ''prolifération de Megacaryocytes'' **''Thombocytose'' au ''labo'' ** Mutation ''JAK2 V617F'' (comme pour la [[Polycythémie]]
{{sinus_veineux_schema.jpg}}
!!Généralités
*Une ''Thrombose veineuse cérébral'' peut correspondre à la thrombose d'un ''sinus veineux'' ou à la thrombose d'une ''veine cerebrale''.
*Il s'agit d'une ''cause rare d'AVC'' (<1% des AVC), qui touche plus souvent les ''femmes''.
*La ''Clinique'' est ''non-spécifique'':
**''Céphalées''
**''Coma''
**''Déficits neurologiques focaux''
**''Crise d'épilepsie''
**''Odème papillaire''
*Il existe de ''nombreux facteurs de risque'' de thrombose
**''Infection locale'' (mastoïdite, sinusite)
**''coagulopathies''
**''Pillule'' et ''Tabac''
**''Cancer''
**''Trauma crânien''
**''Maladie Systémique'' (Behcet, LET, Wegener)
*Le ''diagnostic'' peut être posé par un ''CT natif'' avec le ''signe du caillot'' (la veine est hyperdense). Cependant ce signe n'est pas spécifique et pour confirmer le diagnostic il faut faire un ''phébo-CT'' qui montrera un ''défaut de remplissage'' (ou ''signe du Delta Vide'' si ça touche le sinus sagittal supérieur). L'''IRM'' peut aussi être utilisé.
*Le ''traitement'' passe par la ''thombolyse IV'' suivie d'une ''anticoagulation''. Penser à traiter les infections sous-jacentes.
{{thrombose_sinus_veineux_ct_phlebo.jpg}}
{{tvp_clinique.jpg}}
!! Définition
*La ''TVP'' (Thrombose Veineuse Profonde) est une des deux facettes de la ''MTEV'' (Maladie Thrombo-Embolique Veineuse), en compagnie l'''EP'' ([[Embolie Pulmonaire|Embolie Pulmonaire]]).
*La ''TVP'' est une maladie vasculaire fréquente comprenant la formation de thromboses, souvent dans les ''Membres Inférieurs''. Ces thromboses peuvent ensuite se détacher et faire des EP.
*Elle est en lien avec la ''Triade de Virchow'':
*# ''Stase sanguine''
*# ''Lesion endothéliale''
*# ''Hypercoagulabilité''
*Les ''Facteurs de Risque'' sont importants:
*# ''Immobilisation, Trama ou Chirurgie récents''
*# ''Maladie inflammatoire''
*# ''Cancer''
*# ''Pathologie médicale aigue'' (AVC, Sepsis, BPCO, IC)
*# ''Grossesse ou Pillule''
*# ''Varices''
*# ''Age''
*# ''ATCD de MTEV''
*# ''Thrombophilies'' (Mutation PC, PS, Leiden V, nécessitent AVK a vie)
!! Clinique
La clinique n'est pas spécifique, on peut retrouver:
*''Douleurs à la jambe''
*''Odème, Erythème''
*''Varicosités visibles''
*''Douleur à la palpation des trajets veineux''
*''Symptomes d'EP'' (dyspnée, douleur thoracique)
Le ''Score de Wells'' permet de mieux apprécier la probabilité pré-test de TVP:
|!''Score de Wells''|!''Score''|
|Néoplasie active| 1 |
|Immobilisation récente| 1 |
|Chirurgie majeure récente| 1 |
|Douleur à la palpation| 1 |
|Tuméfaction de tout le MI| 1 |
|Tuméfaction de la cheville| 1 |
|Odème prenant le godet| 1 |
|Varicoses visibles| 1 |
|Diagnostic alternatif| -2 |
|!Probabilité faible/moyenne (5-15%)|!0-3|
|!Probabilité Forte (50%) |! >3|
!! Investigations
{{TVP_algorithme.jpg}}
!!!''Score de Wells''
Commencer par faire le ''Score de Wells'' pour voir si la probabilité est forte est faible.
*Si le score est ''élevé'', inutile de passer par les D-Dimères car on voudra passer directement à l'''Echo-Doppler de Compression''
*Si le score est ''faible ou intermédiaire'', il faudra passer par les ''D-Dimères'' et aller à l'Echo-Doppler seulement s'ils vont dans le sens du diagnostic
!!!''D-Dimères''
*Les ''D-Dimères'' sont ''sensibles'' mais ''peu spécifiques''. Leur utilité est surtout d'exclure la pathologie.
*Si les D-Dimères sont ''négatifs'', on estime de façon assez certaine qu'il n'y a ''pas de TVP''
*Si les D-Dimères sont ''postifis'', on ne peut pas exclure la TVP donc il faut passer à une investigation plus poussée par une ''Echo-Doppler de Compression''
!!!''Echo-Doppler de Compression''
*l'''EDC'' est ''l'examen'' ''de référence'' pour le diagnostic de la TVP, s'il est pratiqué par un utilisateur experimenté. Les trouvailles sont:
**un ''segment veineux non-compressible''
**un ''diamètre veineux augmenté''
**une ''diminution du flux de la veine thrombosée'' avec une ''augmentation du flux des veines superficielles''
{{TVP_doppler.jpg}}
!!Traitement
*La majorité des TVP peut être traitées en ''ambulatoire''
* ''HNF'' ou ''HBPM'' ou ''Fondaparinux'' durant les 5 premiers jours, en combinaisont avec des ''AVK''.
*Relais aux ''AVK seuls'' après ''5j''. Ne pas le faire avant car il y a une période transitoire d'hypercoagulabilité de l'AVK.
*Une ''alternative'' à cette double anticoagulation est le ''Rivaroxaban'' (anti-Xa, //Xarelto©//), pour autant que le patient ait une bonne fonction rénale
*Dans certains cas sévères avec risque de ''syndrome post-thrombotique'' (douleurs du membre touché avec dégats du réseau veineux, odème et varices) on peut justifier un traitement interventionnel avec ''thrombolyse''.
{{TPV_thromvbolyse.jpg}}
!!Jusqu'ou chercher le cancer ?
*30% de ''MTEV idiopathique'', dont jusqu'à 10% développent un cancer
*le cancer est souvent le ''premier signe'' de la MTEV. Il induit un état hypercoagulable, appelé ''syndrome de Trousseau''.
*Examen clinique approfondi, Rx thorax, FSC, électrolytes, tests hépatiques, analyse urinaire, dépistages habituels selon age et sexe
{{TVS_clinique.jpg}}
!! Définition
*La ''TVS'' des, ou Thrombose Veineuse Superficielle, ou ''Thrombophlébite'' est une pathologie fréquente atteignant principalement les ''Membres Inférieurs'' qui est généralement ''bénigne''.
*Elle touche le plus souvent la[[ Grande veine Saphène|veines_pied.jpg]].
*Elle implique des thromboses au niveau du réseau veineux superficiel et peut être parfois associée à des ''TVP''
*Elle est due à des ''Facteurs de risques'' tels que:
**les ''Infections''
**les ''Inflammations''
**le ''Tabac''
**l'''Immobilisation''
!!Clinique
* Le patient présentera des ''douleurs'', des ''gonflements'' des ''rougeurs'' et des ''indurations'' au niveau du trajet des veines.
* le ''Syndrome de Trousseau'' correspond à des ''thrombophlébites'' ''migrantes'' et peut indiquer un ''adénocarcinome'' ou d'autres cancers sous-jacent.
!! Investigations
* Globalement on fait un ''Echo-Doppler de Compression'' à la recherche d'une ''TVP sous-jacente'', ce qui représente 1 cas sur 4 chez certains patients.
!!Traitement
*''Bas de contensions''
*''AINS''
*''Anti-Coagulation''
*''Chirurgie'' avec ''excision de la veine'' lors d'échecs du traitement conservateur
undefine
undefine
undefine
undefine
undefine
undefine
undefine
!!Definition *A tic is a quick, sudden, coordinated movement, which is apparently purposeful and recurs in the same part of the child’s body. *It is not entirely involuntary in that it can be purposefully suppressed to some extent. About 1 in 10 children develop a tic at some stage, typically around the face and head – blinking, frowning, head flicking, sniffing, throat clearing and grunting being the commonest. *They are most likely to occur when the child is inactive (watching TV or on long car journeys) and often disappear when actively concentrating. *They may worsen with anxiety but they are not themselves an emotional reaction. *In most cases, there is a family history. *These simple, transient childhood tics clear up over the next few months, although they may recur from time to time. *They should be treated with reassurance in the first place. !!Tics plus sévères *Less commonly, the child has tics from which he/she is hardly ever free. *They may be multiple, although there is fluctuation in the predominance of any particular tic and in overall severity. *This is a chronic tic disorder which, if it includes both multiple motor tics andvocal tics such as hooting, yelping or swearing, is known as Gilles de la Tourette’s syndrome. *These conditions tend to be persistent in the medium term, requiring medication (such as clonidine or risperidone) under specialist supervision.
undefine
undefine
!!Définition
* <font color="DarkOrchid">''Trouble anxieux ''</font> avec :
**''Obsessions'' ''récurrents'' (pensées, impulsions, images persistantes). Répétition inutile et invalidante.
**Et/ou ''compulsions'' (comportements répétitifs ou pensées répétitives visant à atténuer l'anxiété, mais qui peuvent l'exacerber)
*''Perte de temps'' (pouvant être considérable)
*''Souffrances'' ou contraintes importantes au quotidien
*//Retrait social car sont irritables envers les gens car l'empêchent d'avoir un rituel//
*Synonyme : ''névrose anankastique'' et ''névrose obsessionnelle-compulsive''
!!!Pensées obsédantes
*Idées, représentations ou impulsions faisant'' intrusion dans la conscience du sujet de façon répétitive ou stéréotypée''
*Souvent à l'origine d'un ''sentiment de détresse,'' en particulier si pensées de violences, obscènes ou jugées absurdes par le sujet lui-même
*Fait des ''efforts pour leur résister'' mais en vain
*''Propres pensées du sujet'' (≠psychose), même si celle-ci sont étrangères à sa volonté et souvent répugnantes.
*Ex : craintes excessives d'être souillé ou contaminé, d'être responsable d'une catastrophe potentielle.
*//N'ont pas de peur de ce qui pourrait leur arriver (≠trouble anxieux)//
!!!Comportements compulsifs récurrents
*''Activités stéréotypées répétitives ''
*Ne'' tire aucun plaisir direct ''de la réalisation de ses actes (DD addictions - dans addiction, il y a un apport de plaisir à la base)
*Les activités'' n'aboutissent pas à la réalisation de tâches utiles en elles mêmes ''(DD trouble personnalité - ne fait pas partie des névroses, c'est un trait de personnalité)
*Le sujet ''reconnaît le plus souvent l'absurdité et l'inutilité'' de son comportement.
*Ont souvent pour'' but d'empêcher un évènement dont la survenue est objectivement peu probable'' avec malheur pour le sujet ou dont le sujet serait responsable.
*Sujet fait des ''efforts répétés pour supprimer son comportement''. Cette résistance peut s'affaiblir avec le temps.
!!!Exemple de compulsions
*Lavages trop longs ou trop fréquents
*Vérifications pas nécessaires ou répétées inutilement
*Actes absurdes pour soulager anxiété
*Pensées magiques
*Rites conjuratoires
!!!Habitude vs rituel
*''Habitude vs ritualisé'' :
**Rituel est moins dangereux que habitude (on oublie plus de choses par habitude)
*''Points positifs habitude '': on peut penser à autre chose en même temps (moins besoin de concentration), permet de se reposer. Mais moins efficace.
*''Points positifs rituel'' : plus efficace, plus sécurisé et donc va plus vite.
!!Epidémiologie
*''1,5-2,5% de la population générale ''
*''H=F''
*Sous-diagnostiqué (patients masquent ++ leurs symptômes -> sentiment de honte ?)
*4ème rang des troubles psychiatriques les plus courants
*10ème rang des causes d'incapacité dans le monde (en général s'aggrave avec le temps)
*''Débute habituellement'' ''vers 20ans'', mais parfois pendant l'enfance ou l'adolescence.
*1ers signes après 35ans chez seulement 15%
*11ans écoulés entre l'apparition des 1er symptômes et la mise en route du traitement (''évolution lente'')
*''Origine de la maladie pas claire ''(contribution génétique 25-45% des cas)
!!DD
*''Personnalité anankastique '' (tâches utiles, on peut argumenter la perte de temps)
**Indécision, doute et prudence excessive
**Préoccupation pour les détails, règles, inventaires, ordre, organisation, programmes
**Perfectionnisme qui entrave l'achèvement des tâches
**Scrupulosité extrême, méticulosité et souci excessif de productivité aux dépens de son proposer plaisir et relations interpersonnelles.
**Discours recherché et attitude excessivement conformiste (fait tout pour ne pas sortir du lot)
**Rigidité et entêtement
**Insistance pour que les autres se conforment exactement à sa manière de faire ou une réticence déraisonnable pour laisser les autres faire quoi que ce soit
**Intrusion de pensées et d'impulsions importunes s'imposant au sujet (ne peuvent pas être zen)
**//Trouble de personnalité s'il y a un problème social ou un impact sur la personne, sinon c'est un trait de personnalité//
*''Apparition lors d'un trouble dépressif '' (les dépressifs peuvent avoir des pensées obsédantes (culpabilité), et aussi car trouble de la mémoire dans le trouble dépressif -> rituels)
*//Ne pas cumuler avec diagnostic de schizophrénie ou syndrome de Gilles de la Tourette. (car TOC peut être inclut dedans)//
!!Facteurs de risque
*Génétique
*1/3 trouble de la personnalité développement une névrose TOC (1/3 des TOC sont issus d'un trouble de la personnalité)
!!Co-morbidité
!!!Dépression
On aime pas les TOC déprimés, car il y a une ''implications cliniques importantes par rapport à une pathologie seule''
*Sx plus sévères
*Maladie plus chronique
*Fonctionnement psychosocial diminué
*Augmentation de l'absentéisme
*Risque suicidaire plus élevé
*Plus grande réfraction au traitement.
''Mais distinguer les deux car'' :
*Les TOC précèdent souvent un état dépressif
*Mais les patients avec une dépression majeure risquent de développer des ruminations obsessionnelles. Si pas d'éléments TOC avant la dépression, vont surement partir avec la rémission.
*40% des patients TOC souffrent de dépression
!!!Autres
*Chez 75% des TOC, présence concomitante de troubles anxieux :
**Trouble panique
**Phobies simples
**Phobies sociales
*Environ 1/3 souffrent d'alcoolisme
*Environ 1/4 d'une autre forme de toxicomanie (BZD++)
*//Leur seule manière de lâcher l'anxiété etc, c'est les toxiques //
!!Traitement
*Amélioration partielle chez la grande majorité (ça vaut la peine d'essayer)
*Amélioration marquée chez la moitié (si moitié moins de sx)
*Rémission complète des symptômes rares
!!!Psychothérapie cognitivo-comportementale
*Permet un effet plus stable et durable
*Inefficace chez environ 1/3 des patients
*//Efficacité psychothérapeutique psychanalytique ou psycho-dynamque pas démontrée//
__''But''__ (idem que dans phobie) :
*Identifier l'angoisse (éléments psychiques ou physiques)
*Et apprendre à faire le lien entre les deux
__''Méthode''__
*''Exposition''
**Angoisse psychique et symptômes physiques s'atténuent au cours du temps
**A chaque exposition "vaincue", les symptômes physiques et psychiques seront atténués en amplitude et durée à la prochaine exposition.
*=> __Exposition graduelle__ (progressive : exposer le sujet à un stimulus de faible intensité que l'on augmente progressivement par étapes).
**Chaque exposition doit être totalement "apprivoisée" avant d'être stoppée et de passer à l'échelon suivant
*''Méthode de contre-conditionnement ou inhibition réciproque''
**Présenter le stimulus déclencheur de la réponse que l'on souhaite supprimer en présence d'autres stimulus, soit plus puissants, soit incompatibles (p.ex. agréables)
**//=> Distraire le patient pour qu'il oublier l'anxiété//
*''Travail sur les pensées, les émotions et les actions''
**Evènement -> émotion -> pensées -> action
**Action alternative ? Pensée alternative ? Action sur les émotions ?
**//=> Demander au patient de trouver une alternative//
*''Restructurations cognitives'' (correction des perceptions erronées anxiogènes concernant les situations phobogènes)
*''Relaxation''
**Ce qui est difficile pour eux
**Permet de couper le mécanisme de pensée
!!!Traitement antidépresseur surtout ISRS
*Réponse ISRS 40-50% vs 20% sous placébo
*Maintien sous ISRS diminue la probabilité de rechute environ 70%
*Mais arrêt ISRS -> taux élevé de rechute
*Si résistance, traiter au moins 3mois avec la dose la plus élevée possible (le plus haut avec des EI acceptables).
*Stabilisation au moins 1-2ans sous traitement avant de réduire la dose progressive
*Si résistance, réponse significative chez 1/3 avec adjonction d'un neuroleptique (atypique de préférence)
''=> Favoriser un traitement psychiatrique intégré'' -> psychothérapie + pharmacothérapie (effet renforcé)
//Efficacité psychothérapie et antidépresseur en aigu est similaire//
!!!Pronostic moins bon si
*Maladie a débuté à un jeune âge
*Accompagné de compulsions très fréquentes
*Personnalité schizoïde (risque d'entrée en psychose)
*Présence de tics (risque de Gilles de la Tourette)
!!Notes
*En général si parlent avec gêne -> ≠ psychose (car conscience du trouble)
*Une personne normale en retard va modifier ses habitudes en prenant des risques (risque de mal faire, risque d'arriver en retard, etc). Le TOC est une phobie du risque.
*Les tocs ne sont pas efficaces en terme de résultat (-> se laver trop les mains enlève l'immunité de surface -> à risque d'infection !)
*TOC est un tyran pour ses proches car il ne veut pas accepter leur risque.
*Le comportement peut devenir un soulagement de l'anxiété sans qu'il n'y ait la pensée derrière car au bout d'un temps devient un mécanisme de soulagement.
!!Torsades de Pointes (TdP)
{{ECG_TdP.jpg}}
*Les ''Torsades de Pointes'' sont des ''Tachyarythmies Ventriculaires'', plus particulièrement un type de [[Tachycardie Ventriculaire Polymorphe|Tachycardie Ventriculaire (TV)]].
*Elles sont associées au syndrome du ''QT Long''.
*Elles sont initiées par un Interval Short-Long-Short:
**Une extrasystole (Short)
**Un QT long (Long)
**Un Troisième battement (Short) qui initie la TdP
*Les Torsades de pointes sont une ''Urgence'' qui font partie des ''Rythmes choquables'', avec les autres [[TV|Tachycardie Ventriculaire (TV)]] ainsi que les [[FV|Fibrillation Ventriculaire (FV)]].
{{ECG_TdP_schema.jpg}}
![ext[torsion_testiculaire.pdf|./pdf/torsion_testiculaire.pdf]] <!-- Texte caché pour la recherche Torsion of the testis Testicular torsion is most common in adolescents but may occur at any age, including the perinatal period (Fig. 19.7). The pain is not always centred on the scrotum but may be in the groin or lower abdomen. - Atypical presentation is not unusual and the testes must always be examined whenever a boy or young man presents with inguinal or lower abdominal pain of sudden onset (see Case History 19.1). There may be a history of previous self limiting episodes. Torsion of the testis must be relieved within 6–12 h of the onset of symptoms for there to be a good chance of testicular viability. Surgical exploration is mandatory unless torsion can be excluded. If torsion is confirmed, fixation of the contralateral testis is essential because there may be an anatomical predisposition to torsion, for example the ‘bell clapper’ testis, where the testis is not anchored properly. An undescended testis is at increased risk of torsion and at increased risk of delayed diagnosis. It may also be confused with an incarcerated hernia. Expert Doppler ultrasound looking at flow in the testicular blood vessels may allow torsion of the testis to be differentiated from epididymitis, but should not be used to diagnose torsion as only early surgical correction may salvage the testis. If there is any doubt about the cause of a painful scrotum, surgery should be performed. - Torsion of testicular appendage A hydatid of Morgagni is an embryological remnant found on the upper pole of the testis. Torsion of this appendage characteristically affects boys just prior to puberty. This may be because of rapid enlargement of the hydatid in response to gonadotrophins. The pain may increase over 1 or 2 days and occasionally the torted hydatid can be seen or felt (the blue dot sign). Surgical exploration and excision of the appendage leads to rapid resolution of the problem. Other causes 350 Viral or bacterial epididymo orchitis or epididymitis may cause an acute scrotum in infants and toddlers, and scrotal exploration is often necessary to confirm the diagnosis. If an associated urinary tract infection is present, antibiotic treatment and full investigation of the urinary tract will be required. Other conditions which may cause scrotal symptoms and signs are idi opathic scrotal oedema (usually painless, bilateral - Genitalia Incidence Case History 19.1 Torsion of the testis A 13 year old boy presents to the A&E Department with a 2 hour history of right lower abdominal pain of sudden onset. He has vomited once. Temperature 37.4°C. He indicates that his pain is in the right lower quadrant. Urine dipstick testing was normal. Appen dicitis is suspected. However, examination of the abdomen does not reveal any guarding or other signs of peritoneal irritation in the right iliac fossa. When his testes are examined, the right testis is found to be slightly swollen and lying higher in the scrotum than the left testis (Fig. 19.8). Although he has not complained of testicular pain, the testis is tender on palpation. Urgent surgical exploration - - - Figure 19.8 Enlarged, raised right testis, which was tender on palpation. scrotal swelling and redness in a preschool child) or an incarcerated inguinal hernia. Torsion of the testis is an emergency. Abnormalities of the penis Hypospadias In the male fetus, urethral tubularisation occurs in a proximal to distal direction under the influence of fetal testosterone. Failure to complete this process leaves the urethral opening proximal to the normal meatus on the glans and this is termed hypospadias (Fig. 19.10). This is a common congenital anomaly, affecting about 1 in every 200 boys. Recent studies suggest that the incidence is increasing. confirms testicular torsion (Fig. 19.9). After detorsion, the testis appears viable and is conserved. It is fixed with sutures to minimise the risk of further torsion. The left testis is also fixed, as the anatomical variant which predisposes to torsion occurs bilaterally. This case highlights: • The clinical features of testicular torsion are varia ble and can be potentially misleading, with pain predominantly referred to the abdomen or inguinal region and minimal pain felt in the testis itself • Abdominal examination is never complete without inspection and gentle palpation of both testes • With torsion, the testis is always tender. Figure 19.9 Torsion of the testis at surgery -->
!!Défintion
*The most common cause of torticollis (wry neck) in infants is a ''sternomastoid'' ''tumour'' (''congenital'' ''muscular'' ''torticollis'').
*They occur in the first few weeks of life and present with a mobile, non tender nodule, which can be felt within the body of the sternocleidomastoid muscle.
*There may be restriction of head turning and tilting of the head.
*The condition usually resolves in 2–6 months. Passive stretching is advised, but its efficacy is unproven.
*Torticollis presenting later in childhood may be due to muscular spasm or secondary to ENT infection, spinal tumour (such as osteoid osteoma), cervical spine arthritis or malformation or posterior fossa tumour.
undefine
undefine
undefine
undefine
{{tracheite.jpg}}
!!Généralités
*la ''Trachéite'' est une ''inflammation des muqueuses de la trachée'' qui peut être ''aigue'' ou ''chronique''
*La ''Toux'' est le symptôme majeur, elle est accompagnée d'une ''voix enrouée''. Elle est d'abord sèche et douloureuse, puis grasse.
*La ''Cause'' est généralement ''virale'' (la plus fréquente , en automne ou hiver) ou ''bactérienne'', bien que le tabac et autres irritants puissent exister aussi.
!!Définition *This rare but dangerous condition is similar to severe viral croup except that the child has a high fever, appears toxic and has rapidly progressive airways obstruction with copious thick airway secretions. *It is caused by infection with Staphylococcus aureus. Treat ment is by intravenous antibiotics and intubation and ventilation if required.
undefine
undefine
undefine
undefine
undefine
undefine
!!HUG: demande de transfert BS *cockpit, tout en bas a droite, preparation de la sortie du patientm, Demarrer le protocol, Retour a domicile avec encadrement ou transfert, remplir le formulaire *Mettre globalement une durée de 14 a 21j *Quand on a valider le formulaire il faut tout de suite SIGNER sinon si on ferme ça annule tout, ca doit apparaitre dans les prescriptions *Allo IAG pour dire quon a fait cette demande
![ext[TGV.pdf|./pdf/TGV.pdf]] <!-- Texte caché pour la recherche two parallel circulations – unless there is mixing of blood between them this condition is incompatible with life. Fortunately, there are a number of naturally occurring associated anomalies, e.g. VSD, ASD and PDA, as well as therapeutic interventions which can achieve this mixing in the short term. Clinical features Symptoms - Cyanosis is the predominant symptom. It may be pro found and life threatening. Presentation is usually on day 2 of life when ductal closure leads to a marked reduction in mixing of the desaturated and saturated blood. Cyanosis will be less severe and presentation delayed if there is more mixing of blood from associ ated anomalies, e.g. an ASD. - Physical signs (Fig. 17.9b) ECG (Fig. 17.8d) Normal at birth. Right ventricular hypertrophy when older. Echocardiography This will demonstrate the cardinal features, but cardiac catheterisation may be required to show the detailed anatomy of the coronary arteries. Management • Initial management is medical, with definitive surgery at around 6 months of age. It involves closing the VSD and relieving right ventricular outflow tract obstruction, sometimes with an artificial patch, which extends across the pulmonary valve. • Infants who are very cyanosed in the neonatal period require a shunt to increase pulmonary blood flow. This is usually done by surgical placement of an artificial tube between the subclavian artery and the pulmonary artery (a modified Blalock–Taussig shunt), or sometimes by balloon dilatation of the right ventricular outflow tract. • Hypercyanotic spells are usually self limiting and followed by a period of sleep. If prolonged (beyond about 15 min), they require prompt treatment with: - – sedation and pain relief (morphine is excellent) intravenous propranolol (or an α adrenoceptor agonist), which probably works both as a peripheral vasoconstrictor and by relieving the subpulmonary muscular obstruction that is the cause of reduced pulmonary blood flow – • • • Cyanosis is always present The second heart sound is often loud and single Usually no murmur, but may be a systolic murmur from increased flow or stenosis within the left ventricular (pulmonary) outflow tract. Investigations Chest radiograph (Fig. 17.9c) This may reveal the classic findings of a narrow upper mediastinum with an ‘egg on side’ appearance of the cardiac shadow (due to the anteroposterior relation ship of the great vessels, narrow vascular pedicle and hypertrophied right ventricle, respectively). Increased pulmonary vascular markings are common due to increased pulmonary blood flow. ECG (Fig. 17.9d) This is usually normal. Echocardiography This is essential to demonstrate the abnormal arterial connections and associated abnormalities. Management • • • • In the sick cyanosed neonate, the key is to improve mixing. Maintaining the patency of the ductus arteriosus with a prostaglandin infusion is mandatory. – – – intravenous volume administration bicarbonate to correct acidosis muscle paralysis and artificial ventilation in order to reduce metabolic oxygen demand. Transposition of the great arteries The aorta is connected to the right ventricle, and the pulmonary artery is connected to the left ventricle (discordant ventriculo–arterial connection). The blue blood is therefore returned to the body and the pink blood is returned to the lungs (Fig. 17.9a). There are A balloon atrial septostomy may be a life saving procedure which may need to be performed in 20% of those with transposition of the great arteries (Fig. 17.9e–g). A catheter, with an inflatable balloon at its tip, is passed through the umbilical or femoral vein and then on through the right atrium and foramen ovale. The balloon is inflated within the left atrium and then pulled back through the atrial septum. This tears the atrial septum, renders the flap valve of the foramen ovale incompetent, and so allows mixing of the systemic and pulmonary venous blood within the atrium. - 312 All patients with transposition of the great arteries will require surgery, which is usually the arterial switch procedure in the neonatal period. In this operation, performed in the first few days of life, the pulmonary artery and aorta are transected Cardiac disorders Transposition of the great arteries (a) Complete transposition of the great arteries (e) Balloon atrial septostomy (f) (b) (c) coincident A2P2 = single Variable systolic mumur second sound Narrow pedicle 'Egg on side' cardiac contour Increased pulmonary vascular markings (d) ECG Usually normal neonatal pattern (g) Figure 17.9 Transposition of the great arteries. (a) Transposition of the great arteries. There must be mixing of blood between the two circulations for this to be compatible with life. (b) Heart sounds. (c) Chest radiograph. (d) ECG. (e) Balloon atrial septostomy. A balloon (about 2 ml) is pulled through the atrial septum from the left atrium to the right atrium in order to increase the size of the atrial defect. This is done with echocardiographic guidance. (f) Echocardiogram showing balloon in left atrium. (g) Balloon has been pulled through the atrial septum and is now in the right atrium. (B, balloon; LA, left atrium; RA, right atrium; LV, left ventricle) 313 1 2 3 4 5 Cardiac disorders Summary Cyanotic congenital heart disease 17 Lesion Clinical features Management Tetralogy of Fallot Loud murmur at ULSE Clubbing of fingers and toes (older) Hypercyanotic spells Surgery at 6–9 months Transposition of the great arteries Neonatal cyanosis Prostaglandin infusion No murmur Balloon atrial septostomy Arterial switch operation in neonatal period Eisenmenger syndrome No murmur Right heart failure (late) Medication to delay transplantation above the arterial valves and switched over. In addition, the coronary arteries have to be transferred across to the new aorta. -->
![ext[trauma-urinaire.pdf|./pdf/trauma-urinaire.pdf]] <!-- Texte caché pour la recherche Hématurie Hematurie Uro Urlogie Urètre rupture Uretre Urethre Vessie Fracture Rein -->
undefine
![ext[trauma_naissance.pdf|./pdf/trauma_naissance.pdf]] <!-- Texte caché pour la recherche Birth injuries Infants may be injured at birth, particularly if they are malpositioned or too large for the pelvic outlet. Injuries may also occur during manual manoeuvres, from forceps blades or at Ventouse deliveries. Fortunately, now that Caesarean section is available in every mater nity unit, heroic attempts to achieve a vaginal delivery with resultant severe injuries to the infant have become extremely rare. Figure 10.3 Magnetic resonance image of the brain at term. Left: hypoxic ischaemic encephalopathy (HIE) showing abnormal (white) signal in the basal ganglia and thalami (arrows) and absence of signal in the internal capsule bilaterally. Right: normal scan showing grey basal ganglia and a white signal from myelin in the posterior limb of the internal capsule. - Soft tissue injuries These include: • • • • Caput succedaneum (Fig. 10.4) – bruising and oedema of the presenting part extending beyond the margins of the skull bones; resolves in a few days who have the clinical features of HIE should only be considered to have birth asphyxia if there is: • evidence of severe hypoxia antenatally or during labour or at delivery • resuscitation needed at birth • features of encephalopathy • evidence of hypoxic damage to other organs such as liver, kidney, or heart • no other prenatal or postnatal cause identified • characteristic findings on MRI neuroimaging. Cephalhaematoma (Figs 10.4, 10.5) – haematoma from bleeding below the periosteum, confined within the margins of the skull sutures. It usually involves the parietal bone. The centre of the haematoma feels soft. It resolves over several weeks Chignon (Fig. 10.6) – oedema and bruising from Ventouse delivery Bruising to the face after a face presentation and to the genitalia and buttocks after breech delivery. 157 1 2 3 4 Neonatal medicine Birth injuries Soft tissue injuries • Caput succedaneum, cephalhaematoma, chignon, bruises and abrasions • Subaponeurotic haemorrhage Nerve palsies 10 • Brachial plexus – Erb palsy • Facial nerve palsy Fractures • Clavicle, humerus, femur Loose areolar tissue Skin Aponeurosis Caput Cephalhaematoma Venous sinus Periosteum Subaponeurotic haemorrhage Skull bones Figure 10.4 Location of extracranial haemorrhages. Figure 10.6 Chignon. Figure 10.5 A large cephalhaematoma. Figure 10.7 Erb palsy. The affected arm lies straight, limp and with the hand pronated and the fingers flexed (waiter’s tip position). Preterm infants bruise readily from even mild trauma Abrasions to the skin from scalp electrodes applied during labour or from accidental scalpel incision at Caesarean section Forceps marks to face from pressure of blades – transient Subaponeurotic haemorrhage (Fig. 10.4) (very uncommon) – diffuse, boggy swelling of scalp on examination, blood loss may be severe and lead to hypovolaemic shock and coagulopathy. • Nerve palsies • • 158 Brachial nerve palsy results from traction to the bra chial plexus nerve roots. They may occur at breech deliveries or with shoulder dystocia. Upper nerve root (C5 and C6) injury results in an Erb palsy (Fig. 10.7). It Neonatal medicine may be accompanied by phrenic nerve palsy causing an elevated diaphragm. Most palsies resolve com pletely, but should be referred to an orthopaedic or plastic surgeon if not resolved by 2–3 months. Most recover by 2 years. A facial nerve palsy may result from compression of the facial nerve against the mother’s ischial spine. It is unilateral, and there is facial weakness on crying but the eye remains open. It is usually tran sient, but methylcellulose drops may be needed for the eye. Rarely, nerve palsies may be from damage to the cervical spine, when there is lack of movement below the level of the lesion. Fractures Clavicle Usually from shoulder dystocia. A snap may be heard at delivery or the infant may have reduced arm move ment on the affected side, or a lump from callus forma tion may be noticed over the clavicle at several days of age. The prognosis is excellent and no specific treat ment is required. Humerus/femur Usually mid shaft, occurring at breech deliveries, or fracture of the humerus at shoulder dystocia. There is deformity, reduced movement of the limb and pain on movement. They heal rapidly with immobilisation. -->
!!Splenic Trauma * typically from ''blunt trauma'' (especially in people with ''splenomegaly'') *most common intra-abdominal organ injury in blunt trauma *may have ''Kehr’s'' ''sign'' (Left shoulder pain due to diaphragmatic irritation from splenic rupture, worsens with inspiration) !!Treatment * ''non-operative'' ** in stable patients: extended bed rest with serial hematocrit levels, close monitoring for 3-5 d; pediatric guidelines for days of bed rest is grade plus 1 (i.e. grade 3 splenic laceration requires 4 d of bed rest) **hemostatic control ** splenic artery embolization if patient stable and one of: active contrast extravasation, splenic pseudoaneurysm, hemoperitoneum * ''operative'' **splenorrhaphy (suture of spleen) ± splenic wrapping with hemostatic mesh – if patient hemodynamically stable, patient has stopped bleeding and laceration does not involve hilum ** partial splenectomy, rarely performed due to risk of recurrent hemorrhage **total splenectomy if patient unstable or high-grade injury
!!Généralités
!!Anatomie
!!!Crâne
{{anat-crane.jpg}}
!!!Muscles
{{muscles-crane.jpg}}
!!!Vasculo-nerveux
{{innervation-face.jpg}}
*//V2: Moitié du nez, paupière inférieure et lèvre supérieure est nerf V2, Le V2 fait aussi la joue et les dents//
*//V3 :Entre dans l'os puis ressort pour la lèvre inférieur. La langue et les dents sont innervés par V3//
{{vascu-face.jpg}}
{{vascu-face2.jpg}}
!!!Canal de sténon
*Traverse le m. bucinateur
*Abouchement de la glande parotide dans la bouche
{{stenon.jpg}}
!!!Dents
{{dents.jpg}}
!!Epidémiologie
*Fracture du tiers moyen 40-55%
*Fracture du tiers inférieur 35-40%
*Fracture panfaciale 10%
*Fracture du tiers supérieur 5-10%
!!Signes de fracture
*Déformation osseuse
*Fausse mobilité
*Crépitations
!!Anamnèse
*''Circonstances'' de l'accident
*''Orientation des impacts''
*''PC/amnésie'' (Car on laisse rentrer à la maison si fracture pour dégonfler et traitement fracture 10j après)
*''Trouble'' ''de l'occlusion'' (dents ne se touchent plus comme avant)
*''Diplopie''
!!Examen clinique (extraoral et intraoral)
''__Inspection__''
*''Peau''/''plaie''
*''Sang'', ''LCR'', ''salive''
**Fracture de la base du crâne : LCR qui sort par le nez (liquide clair, coule plus rapidement que le sang)
**''Hématomes'', ''déformations'' (indices)
*''Trouble'' ''de l'occlusion'' (dents se touchent pas comme avant)
''__Palpation__''
*''Voûte'' ''frontale'' (compression de la voûte)
*''Rebord'' ''des'' ''orbites''
*''Pommettes'' et ''sous'' ''pommettes''
*''Arcade'' ''zygomatique''
*''Pyramide'' ''nasale''
*''Glabelle'' (entre les sourcils en dessus du nez)
*''Rebord'' ''basilaire'' de la mandibule
*''Endobuccale'' (recherche de fausse mobilité)
''__Examen fonctionnel__''
*''Sensibilité'', ''motricité''
*''Trouble'' ''de'' ''l'occlusion''
*''Mobilité'' ''oculaire''
**Double vision en rotation pour oblique
**Double vision latéral pour médial et latéral
** Tester avec une lumière pour voir reflets pupilles
{{mvts-yeux.jpg}}
!!Types de fracture
!!!Selon impact
*''Haut'' : supra-orbitaire, symphyse mandibulaire, angle de la mandibule, frontal
*''Bas'' : zygomatique, os nasal
!!!Ouverte vs fermée
*''Ouvertes'' : à la peau, atteinte des dents //(la salive peut passer dedans)//
{{ouverte-fermee.jpg}}
!!!Localisation
*''Tiers'' ''supérieur'' (bandeau frontal)
*''Tiers'' ''moyen'' (occlusion - base du crâne)
*''Tiers'' ''inférieur'' (mandibule)
*=> Trouble de l'occlusion pour mandibule et maxillaire
{{tiers-visage.jpg}}
*Fracture de la ''mandibule''
*Fracture ''centrale'' (le fort I et II, nasoorbitoethmoïdal, nez, sagittale maxillaire)
*Fracture ''centro''-''latérale'' (le fort III)
*Fracture ''latérale'' (os malaire, os zygomatique, fracture isolée de l'orbite) - PAS DE TROUBLE DE L'OCCLUSION
!!!Le Fort
{{le-fort.jpg}}
__''Clinique''__
*Toujours
**''Trouble de l'occlusion''
**''Mobilité anormale''
**''Epistaxis''
**''Hématome en lunette''
*Eventuellement
**Diplopie
**Hématome du voile du palais
**Hypo/anesthésie V2
''__Le fort I__''
*Le plus ''fréquent''
*Pas de trouble de la vision
*Pas de défaut de sensibilité
*''Trouble de l'occlusion''
{{fort1.jpg}}
''__Le fort II__''
*2ème plus fréquent
*Trouble de la vision (''diplopie'')
*''Hypoesthésie V2''
*''Trouble de l'occlusion''
{{fort2.jpg}}
''__Le fort III__''
*Le moins fréquent
*Pas de trouble de sensibilité (passe pas par le plancher de l'orbite)
*''Diplopie'' (latérale et médiale)
*''Trouble de l'occlusion ''
{{fort3.jpg}}
''__Le fort : panfacial__''
{{panfacial.jpg}}
!!Présentation clinique
*''Trouble de l'occlusion dentaire'' (Signe cardinal des fractures faciales (mandibulaire ou tiers moyen))
*''Crépitations'' (Emphysème sous cutané: surtout au niveau du tiers moyen)
*//Seul 40% des fractures mandibulaires sont isolées ➔ rechercher fractures (notamment condyliennes)//
!!!Fracture de la mandibule
__''Signes clinique ''__
*''Trouble de l'occlusion dentaire '' (action de la musculature masticatoire)
{{tr-occlusion.jpg}}
*''Hypoesthésie V3 (lèvre inférieure)'' (n. alvéolaire inférieur passe dans la mandibule)
{{nerf-alvéolaire-inf.jpg}}
*''Ouverture'' ''limitée''
*''Hématomes'' (vestibulaire et plancher)
*''Fausse mobilité''
*''Fracture'' ''ouverte'' -> exposition de l'os vers l'extérieur (touche une dent ou que la salive peut entrer dans l'os)
{{fract-mandibule.jpg}}
''__Fracture du condyle__''
*CAVE : chez enfant, risque d'ankylose et asymétrie faciale si mauvaise prise en charge
*''Condyle tiré médio-antérieurement'' lors de la fracture -> Vacuité à la palpation de l’articulation temporo mandibulaire
*Déséquilibre lors de l'occlusion dentaires -> appuie plus du côté fracturé, mandibule tourne du côté fracturé
{{fract-condyle.jpg}}
*Fracture bilatérale : mandibule reculée et seules les dents arrières se touchent (open bite)
{{open-bite.jpg}}
!!!Fracture de l'os malaire
''__Signes cliniques__''
*''Hématome'' ''en'' ''monocle''
*''Hypo/anesthésie nerf V2'' (Dysesthésies car fracture passe par foramen infra-orbitaire => hypoeesthésie milieu du nez, paupière inférieure, dents, joue, etc)
*Palpation : ''décalage'' ''osseux''
*''Effacement'' de la pommette
*''Diplopie''
**Lésion du muscle droit inférieur (se coince dans la fracture)
**Double vision lorsque le patient regarde vers le haut
**On cherche avec la lumière : demander de suivre des yeux avec la lumière et on regarde le reflet de la lumière sur la pupille si symétrique
*//Pas de trouble de l'occlusion//
{{fract-malaire.jpg}}
!!!Plancher orbital
''__Signes cliniques__''
*''Diplopie'' (trouble occulomoteur (selon muscle touché)
*''Hématome sous conjonctiva''l ou en ''monocle''
*''Hypo-anesthésie V2'' (nerf infra-orbitaire)
*Isolée : fracture de ''blow''-''out'' (fracture lorsque objet contendant plus grand que orbite, coup de face)
{{blow-out.jpg}}
!!Investigations
*''Rx''
**Orhopantomogramme (=panorama dentaire, = OPT)
**2 défilés mandibulaires si OPT non disponible
**=> vision des deux condyles
**//Hirtz : visualisaiton de l'os zygomatique//
**//Worms = visualisation des condyles//
**//Waters-Blondeau = étages moyens et inférieurs de la face//
*''CT''
*''IRM''
{{OPT.jpg}}
!!Urgences
*Obstruction des VAS
*Hémorragie massive
*Risque infectieux
!!Traitement
!!!Conservateur
*''Blocage maxillo-mandibulaire temporaire ''
*Se fait au bloc en général, mais peut se faire ''4-6semaines pour la guérison'' si chirurgie pas possible
*Risques
**Aspiration lors de l'extubation
**Hygiène (parodonte)
**Perte pondérale (alimentation difficile)
{{blocage-maxillo-mandibullaire.jpg}}
!!!Chirurgical
*''Réduction'' manuelle ou instrumentale
*''Ostéosynthèse'' ''rigide'' ''interne'' (vis /plaques vissées)
*Suture plan par plan et drainage
*± Sutures nerveuses
*Risques
**Chirurgicaux habituels (saignement, infection, douleur, gonflement, lésions nerveuses suivant où on opère)
**Racines dentaires
**Occlusion
*Avantage p/r conservateur
**Récupération fonctionnelle rapide
**Alimentation
**Reprise d'activité rapide
{{vis-plaque.jpg}}
''__Plaie au visage__''
*Ne jamais suturer sans avoir vérifié l'intégrité osseuse sous jacente
*Possibilité de laisser plaies ouvertes si très souillées
*Suture : points séparés pour trauma !
''__Mandibule__''
#Réduire le trouble de l'occlusion par ''blocage temporo-mandibulaire temporaire'' (per opératoire) pour que les dents se touchent comme avant
#Vis Ou Plaques
''__Os malaire__''
*Abord : depuis la bouche, trans-conjoncrivial, au dessus de la paupière supérieure
*Vis vs plaques
''__Plancher orbital__''
*//Si on fait rien : oeil va tomber dans la fracture et reculer. Paupière suit l'œil -> oeil paraît moins grand) (enophtalmie) + diplopie //
*Incision trans conjonctivale
*Pose de ''grilles'' (plaques préformées criblées -> pour que saignement éventuel tombe dans le sinus, et ne compresse pas l'oeil)
{{grille.jpg}}
!!Suivi
*''Réhabilitation'' ''dentaire''
*''Physiothérapie'' de ''rééducation''
*''Contrôles cliniques et Rx à 3-6-12mois''
*Le matériel d’ostéosynthèse peut être ''enlevé à 1an'', mais ''pas nécessaire'' (si en titane). Mais c'est une seconde intervention.
!!Trauma alvéolo-dentaire
*Trauma ''dentaires''
{{trauma-dent.jpg}}
*Trauma ''osseux'' (alvéolaires)
*Trauma ''combinés'' ++
*Types
**Sublimation/contusion
**Intrusion
**Luxation
**Avulsion
{{types-trauma-dent.jpg}}
*''Traitement''
**''Réduction et attelle dentaire collée'' -> dentiste ou chirurgien maxillo-facial
**Traiter rapidement car les ''ligaments peuvent se réinsérer ''(=> remettre en place le plus vite possible)
***Survie du ligament dans un mouchoir 30min, récipient sec 45min, eau 60min, salive 90min, NaCl 4h, lait 6h, dentosafe box 25h.
{{traitement-trauma-dent.jpg}}
!!Notes
*''Saignement'' ''au'' ''visage'' :
**Comprimer toutes les fractures pour que ça arrête de saigner
**Suturer les plaies
**CT !
**Opération des fractures à 10j (moins gonflé)
**Si atteinte respiratoire (patient avec fractures visage) : trachéotomie
**Si col ne se casse pas lors d'un choc, le condyle peut aller dans le cerveau
*Si fractures multiples, on commence par le bas pour éviter un trouble de l'occlusion dentaire, car mandibule très rigide : fracture très nette.
*Le'' tremblement essentie''l, souvent appelé « tremblement familial », « tremblement bénin» ou « tremblement idiopathique », ''est la plus commune des maladies de mouvements anormaux''. *Touche typiquement les ''membres''. *c'est un tremblement intensifé ''à l'action'' ou au ''tonus postural'', mais pas au repos comme dans le Parkinson. *Pas besoin nécessairement de traitement. *A ne pas confondre avec le tremblement du a l'alcool qui ne touche que la main.
undefine
!!Peur-adaptation
*Peur = réaction saine face au danger (fuir ou se battre)
**Si la personne est ''passive'' envers son stress : activation du ''système'' ''cortico''-''surrénalien''
**Si la personne est ''active'' -> activation du ''système'' ''nerveux'' ''végétatif''.
!!Troubles anxieux
*Plus de 40% des adolescents ont au moins eu une attaque de panique isolée.
*Le trouble anxieux est une dysfonction des mécanismes normaux de sécurité
!!!Epidémiologie
*Souvent pas diagnostiqué et/ou pas traité
*Comorbidités ++
*Chronicité
*''F''>H (sauf pour TOC et phobie sociale ou F=H)
*Prévalence : 2-3% trouble panique, 10-11% phobie spécifique, 2-4% phobie sociale, 5% TAG, 2-3% TOC, 1-3% PTSD
!!!Co-morbidités
*Risque ++ ''d'addiction'' (en particulier pour agoraphobie, TAG et trouble panique)
*Risque de ''dépression'' ''secondaire'' ++
!!!Types
*''Trouble panique avec ou sans agoraphobie ''
**Attaques de paniques ''situationnelles'' ou ''inattendues''
**En situation : Interprétation catastrophique des Sensations physiques, attention sélective sur des signaux d’alarme
**Crainte d’une nouvelle attaque
**Défense : évitement de situation, évitement de sensations physiques, entourage (contraphobique)
*''Phobie spécifique ''
**Peur ''intense'' ''irraisonnée'' en situation spécifique
**En situation : biais attentionnel (ne pense qu'à ça), cognition en rapport, réaction physiologique
**Fuite
**Evitement de la situation, entourage (objet contraphobique)
*''Phobie sociale ''
**En situation sociale, ''peur'' ''du'' ''jugement'' d'autrui (présent, négatif, conséquences négatives)
**En situation : comportements inadéquats, inhibition comportementale, attention sélective sur soi, réactions physiologiques
**Défense : entourage (objet contraphobique), évitement, OH
*''Trouble d'anxiété généralisée'' (TAG)
**Problème ''quotidien''
**Intolérance du risque, fixe son attention sur les sources d'inquiétude (inquiétude prévient le problème)
**=> Tension physiologique, irritabilité
**Défense : évidement, précautions, difficultés à résoudre les problèmes, entourage
*''TOC''
**Stimuli = obsessions, idées, images intrusives
**Attention sélective, doute -> fusion pensée-action
**Défense : rituels/compulsions, entourage, évitement
**Si rituels empêchées, anxiété ++
*''PTSD''
**Mort ou intégrité physique menacée, sentiment d'impuissance ou d'horreur, culpabilité
**Sensation de menace persistante, le monde n'est plus sécure, attention sélective, évitement, pensées en lien avec le trauma
**Cauchemars, flashback, réactivité physiologique
**Défense : évitements comportementaux
{{troubles-anxieux.jpg}}
!!!Traitements
*Mesures ''non'' ''spécifiques'' :
**Informations
**Aides à l'auto-assistance (guides patients, manuels d'auto-assistance)
*Méthodes thérapeutiques spécifiques
**''Psychothérapie'' : TCC
***Exposition (progressive, prolongée jusqu'à réduction de moitié de l'anxiété, répétée), restructuration cognitive, relaxation, apprentissage de nouvelles compétences
***Autres : psychodynamique, systémique, hypnose.
**''Pharmacothérapie'' : SSRI et NSRI 1er choix (fluoxétine, sertraline, paroxetine, fluvoxamine, citalopram, estitalopram, venlafaxine, duloxetine)
***Autres : BZD, TCA, IMAO
***But : go slow (petites doses initiales, titration prudente), go far (traitement à long terme -> rémission)
{{traitement-tr-anxieux.jpg}}
!!Définitions
*''Humeur'' : disposition affective qui donne une tonalité agréable ou désagréable aux états d'âme.
*''Trouble bipolaire'' (=maladie/psychose maniaco-dépressive)
**Pathologie sévère et chronique débutant chez le jeune adulte avec handicap important
**Variation excessive de l'humeur alternant des phases d'élation de l'humeur (''expanssion'') et augmentation de l'énergie et des activités (manie ou hypomanie) et des baisses de l'humeur (''dépression'') avec des ''intervalles'' ''libres''.
**En général, signes précurseurs de la phase haute.
**Récurrence chez >90% des patients (au cours des 2 premières années suivant l'épisode initial)
**Retard diagnostic (parfois jusqu'à 10ans avec un diagnostic correct) -> conséquences importantes)
!!Epidémiologie
* >1% de la population (plus fréquent pour le trouble bipolaire II : 1-2%)
*3 pics : ado - 25 - 40ans (en général jeune adulte).
*H=F
*Diagnostic correct retardé (8ans et 5 médecins en moyenne)
*73% des patients aurait un diagnostic erroné
*Diagnostic clinique, pas d'examens complémentaires
*Importance de l'agrégation familiale
!!FR
*Génétique
**Parents avec trouble unipolaire ou bipolaire augmente le risque (particulièrement si bipolaire)
**Jumeaux plus atteints
*Interaction gène et environnement (épigénétique notamment)
*Phénomènes neurocognitifs
**Augmentation de la taille des zones responsables pour l'identification des émotions (hippocampe, amygdale, insula, striatum ventral) et diminution de la zone de régulation des émotions (cortex pré-frontal)
!!Classifications : Troubles de l'humeur
*''Cyclothymie'' : épisodes hypomane et dépressions mineures
*''Type 2'' : épisodes hypomanes (PAS de sx psychotiques) et dépression majeure, antidépresseurs peuvent éventuellement être donnés.
**Plus fréquent que type 1
**Plus de risque de suicide et tentamen.
**Troubles cognitifs moins importants que type 1, se rapprochant des patients souffrant de dépression récurrente.
*''Type 1'' : Phases maniaques isolées possibles (avec sx psychotiques) et dépression majeure, éviter antidépresseurs
**Associé avec des troubles cognitifs plus sévères que type 2 et concernant plus d'aspects du fonctionnement cognitif (mémoire verbale, attention, fonctions exécutives), indépendamment de l'état thymique.
**Profil cognitif se rapprochant de celui des patients schizophrènes
*''Trouble bipolaire non spécifique''
*''Forme saisonnière'' existe
*//Type3 : épisode déclenché par un antidépresseur.//
{{Capture d’écran 2016-10-20 à 10.22.43.jpg}}
{{Capture d’écran 2016-10-20 à 10.25.04.jpg}}
!!!Définitions
*''Trouble affectif bipolaire (CIM10)''
** ≥2 épisodes avec humeur et niveau d'activité perturbés (élévation de l'humeur et augmentation de l'énergie et activité - hypomanie ou manie - vs abaissement de l'humeur et réduction de l'énergie et de l'activité - dépression)
**Episodes récurrents d'hypomanie ou manie sont classés comme bipolaires
*''Episode maniaque (DSM-V)''
**Période délimitée avec humeur anormalement et de manière persistante élevée, expansive ou irritable, ''durant ≥1 semaine''
**Durant période de perturbation de l'humeur, présence de'' ≥3'' (≥4 si humeur irritable)
***Augmentation de ''l'estime de soi ''ou idées de grandeur
***''Réduction du besoin de sommeil ''
***Désir permanent de ''parler''
***''Fuite des idées'' ou sensation que les pensées défilent //(-> pensée désorganisée, file trop vite, passe du coq à l'âne etc)//
***''Distractibilité''
***''Augmentation de l'engagement dans de nombreuses activités'' (sexuelles, professionnelles, politiques ou religieuses) ou agitation psychomotrice
***''Engagement excessif dans des activités agréables''
**Sx ne répondent pas aux critères d'un épisode mixte (-> DD : manie irritable + dysthimie vers le bas en même temps dans un même entretien)
**''Altération du fonctionnement'' ou nécessite une hospitalisation ou présente sx psychotiques
**Sx ne sont pas dus aux effets d'une substance ou affection médicale.
**//En dehors de la forme classique de la manie aiguë, il existe des tableaux cliniques où dominent irritabilité, agression et dysphorie//
*''Episode hypomaniaque (DSM-V)''
**Durée minimale de 4j
**Mêmes symptômes
**Changement net dans le fonctionnement
**Modifications de l'humeur et de fonctionnement observable par les autres
**Troubles suffisamment pas assez importants pour causer une altération du fonctionnement ou nécessiter une hospitalisation. PAS de sx psychotiques
**Sx pas du aux substances ou affection médicale (stéroïdes, thyroïde, ...)
*''Episode dépressif majeur (DSM-V)''
*≥5 sx sur deux semaines avec changement par rapport à l'état antérieur
**''Humeur triste ou irritable (-> toujours important à checker si irritabilité)''
**''Anhédonie''
**Perte ou gain de poids
**Trouble du sommeil
**Perte d'énergie
**Sentiment de dévalorisation ou de culpabilité
**Troubles de la concentration
**Idéation suicidaire
**Les sx entraînent une souffrance cliniquement significative ou altération du fonctionnement. Sx pas imputables aux effets d'une substance ou affection médicale.
!!Clinique des dépressions bipolaires (comparé dépression unipolaire)
*Hypersomnie, hyperphagie
*Ralentissement psychomoteur marqué plus fréquent
*Caractéristique psychotiques (Type I)
*Episodes dépressifs plus courts et plus fréquents
*Âge de début plus précoce
*AF de troubles bipolaires
*Fréquentes co-morbidités (abus de substance - OH, drogues-, troubles anxieux, troubles de la personnalité)
!!Evolution
*Au début, épisodes thymiques apparaissent suite à un évènement stressant ou traumatisme psychique. C'est moins le cas dans la suite de l'évolution.
*Les modalités évolutives sont très variables. La durée des phases de rémission tend à raccourcis, la fréquence et la durée des phases dépressives augmente avec l'âge.
!!Complications
*Induction d'état maniaques et de cycles rapides (CAVE anti-dépresseurs)
*Induction d'états dépressifs avec antipsychotiques classiques
*TS (25-50%) et suicide (10%)
*OH et toxicomanie, comorbidités et mortalité somatique
*Complications médico-légales (dettes, conduites irresponsables, hospitalisations itératives et non volontaires)
*Dégradation psychosociale
!!Traitement
''Objectif'' :
*Réduction des signes et symptômes
*Restaurer le fonctionnement psychosocial
*Minimiser le risque de récurrence
Médicaments :
{{Capture d’écran 2016-10-20 à 10.59.45.jpg}}
*''Lithium''
**Indication :
***Traitement préventif des rechutes d'un trouble bipolaire I (surtout épisodes maniaques)
**"Potentialisateur" dans le traitement d'un épisode dépressif ne répondant pas aux antidépresseurs (trouble unipolaire ou bipolaire)
**Diminution du risque suicidaire
*Elimination rénale, interaction (AINS, diurétique)
*EI : neurologiques (tremblements), rénaux (syndrome de polyurie-polydipsie), thyroïde (hypothyroïdie), prise pondérale
*=> Surveiller la fonction rénale ou thyroïdienne
''Autres stabilisateurs de l'humeur ''
*''Valproate'' (=Dépakine)
**Traitement des épisodes maniaques (euphorie et dysphorie)
**Efficacité moins bien démontrée dans la prévention des rechutes
**Interactions médicamenteuses (inhibiteur)
**EI : sédation, GI, alopécie, parfois augmentation de l'appétit et prise pondérale.
**Plus efficace que le lithium dans états mixtes, comorbidités avec abus de substances
*''Carbamazépine'' (=Tegretol)
**Moins efficace que lithium dans trouble bipolaire I
**Interactions médicamenteuses
**Indication : trouble résistant au lithium et valproate
**EI : sédation, leucopénie, rash cutané, SIADH
*''Lamotrigine'' (=Lamictal)
**Prévention des rechutes dépressives
**EI : rash cutané
*''Anti-psychotiques atypiques ''
**Olanzapine, risperidone, aripiprazole, quetiapine
**Traitement des épisodes maniaques mais aussi prévenir les récidives maniaques pour les patients chez qui ils ont été efficaces lors d'un épisode maniaque (épisode dépressif pour la quétiapine)
''Traitement non phramacologiques''
*''Psychothérapies ''
**Individuelle, analytique
**Systémique, familiale
**Cognitivo-comportementale
*''Psychoéducation ''
**Comprendre les mécanises, signes et sx de la maladie
**Observer au quotidien l'évolution de son trouble
**Apprendre à anticiper, à adapter son rythme de vie (mesures d'hygiène de vie)
**Faire comprendre les troubles de l'humeur à son entourage.
!!Notes
*Début entre ''15-25ans''
*''Cannabis'', ''OH'' et ''cocaïne'' peuvent déclencher le 1er épisode (souvent maniaque) et re-déclencher des épisodes.
*Tous les ''anti-dépresseurs ''peuvent déclencher les phases hypomanes et crises maniaques.
*''Hypomane'' = crises maniaques atténuées (et pas de symptômes psychotiques) (en général pas d'hospitalisation durant les crises hypomanes)
*''Durée avant diagnostic'' : 14ans pour les patients avec crises hypomanes et maniaques et 8ans pour les crises maniaques uniquement.
*''Chez les jeunes '': symptômes psychotiques au premier plan souvent (puis s'atténuent avec le temps).
*''DD'' :
**Borderline (mais durée de moins de quelques jours). C'est également possible d'avoir un trouble bipolaire + borderline (plus difficile à diagnostiquer et plus difficile à traiter)
**Trouble schizoaffectif : entre les épisodes, il reste des symptômes psychotiques.
***Psychotique + trouble affectif (=de l'humeur) en parallèle.
*''Prednisone'' également à éviter (déclenche les crises)
*Classiquement : ''phase maniaque puis phase dépressive''.
*''Dose thérapeutique de Lithium'' : 0.6-0.9
*''10% de décès par suicide'' chez bipolaire
*''Dysthymie'' = toujours vers le bas
*''En aigu'' : on donne neuroleptique + BZD puis on instaure un stabilisateur de l'humeur lors de l'hospitalisation
*Dans une ''phase hypomane'', il faut expliquer au patient qu'on pense qu'il est dans une phase hypomane.
**Il faut expliquer les signes de gravité et le risque de la transformation en manie/dépression ainsi que de la prise de risque actuelle et essayer de ramener sur les risques qu'il prend dans la réalité. Lui dire qu'il est à la limite pour une hospitalisation, lui donner les critères d'hospitalisation pour le cadrer. Donner un somnifère et se voir dans 4j.
**TOUJOURS demander les idées suicidaires
**Lors de manie -> hospitalisation.
*''Un épisode maniaque s'accompagnant de manifestations psychotiques conduit au diagnostic de Trouble bipolaire de type I''
*Un trouble bipolaire de type 1 a au moins un épisode maniaque.
![ext[TDAH.pdf|./pdf/TDAH.pdf]] <!-- Texte caché pour la recherche Hyperactivity Young children are characteristically lively, some more than others, by virtue of their immaturity. When their level of motor activity exceeds that regarded as normal, they may be termed ‘hyperactive’ by their parents. This is a judgement that depends upon the parents’ stand ards and expectations. The term can thus incorrectly be used as a complaint about a child who is normally active in overall terms but who can be cheeky and bois terous at times. Such a child is not hyperactive, but the parents need advice about how to handle unwanted behaviour. In the true hyperkinetic disorder or attention deficit hyperactivity disorder (ADHD), the child is undoubtedly overactive in most situations and has impaired concen tration with a short attention span or distractibility. Dif ferences in diagnostic criteria and threshold mean that prevalence rates among prepubertal schoolchildren are variously estimated as between 10 and 50 per 1000 children, boys exceeding girls three fold. There is a powerful genetic predisposition and the underlying problem is a dysfunction of brain neuron circuits that rely on dopamine as a neurotransmitter and which control self monitoring and self regulation. - - - Affected children are unable to sustain attention or persist with tasks. They cannot control their impulses – they manifest disorganised, poorly regulated and excessive activity; have difficulty with taking turns; sharing; are socially disinhibited; and butt into other people’s conversations and play. Their inattention and hyperactivity are worst in familiar or uninteresting situ ations. They also cannot regulate their activity accord ing to the situation – they are fidgety; have excessive movements inappropriate to task completion; lose possessions; and are generally disorganised. Typically, they have short tempers and form poor relationships with other children, who find them exasperating. - The children do poorly in school and lose self esteem. They may drift into antisocial activities for a variety of reasons, partly because their behaviour drives parents, teachers and peers to use coercion and punish ment, which is ineffectual or breeds resentment. - In addition to child psychiatric or paediatric evalua tion, the child will usually need to be assessed by an educational psychologist. 414 First line management in preschool children and school aged children with mild to moderately severe disorder is the active promotion of behavioural and educational progress by specific advice to parents and teachers to build concentration skills, encourage quiet self occupation, increase self esteem and moderate extreme behaviour. Behavioural interventions similar to those embedded in parenting programmes are helpful. These involve having clear rules and expecta tions, and consistent use of rewards to encourage adherence and where appropriate, consequences to discourage unacceptable behaviour. - - - - Emotions and behaviour For those children in whom this is insufficient, hyperactivity responds symptomatically to several types of medication, although this is usually reserved for children older than 6 years of age. Stimulants such as methylphenidate or dexamphetamine and non stimulants, like atomoxetine, reduce excessive motor activity and improve attention on task, focused behav iour. The usual approach is not to put the child on medication until behavioural and educational progress is actively promoted by the specific measures men tioned above. However, in severe cases with high degrees of impairment, simultaneous psychosocial and medical treatment may be required. It may be neces sary to continue medication for several years, some times into adulthood. Yearly trial off medication is recommended to evaluate the need for continuing treatment. Specialist supervision is mandatory. Close liaison with the school is required throughout the years of treatment. - The role of diet in the cause and management of hyperactivity is controversial. Current evidence indi cates that the sort of diet which aims blindly to reduce sugar, artificial additives or colourants has no effect. A few children display an idiosyncratic behavioural reac tion such as excitability or irritability to particular foods. If this seems likely, trying the child on an exclusion of that particular food may be useful. In general, food and drinks with caffeine are not advised. Overzealous dietary exclusion can lead to malnutrition, especially in a child on stimulant medication that may already have the side effect of appetite reduction. - Summary Attention deficit hyperactivity disorder (ADHD) • Affects males more than females • Clinical features: cannot sustain attention, excessively active, socially disinhibited, easily distracted and impulsive, may be poor at relationships, prone to temper tantrums, poor school performance • Management: educational psychologist assessment, behavioural programmes in school, parenting intervention, medication if necessary. -->
!!Définition *Symptomes ''multiples'' avec ''ATCD de multi-investigations négatives'', concernant ''différents organes''. *Prise en charge par ''suivi rapproché du patient'', afin d'éviter trop de tourisme et de procédures inutiles
undefine
<<tabs "[[Tachycardie Sinusale (TS)]] [[Tachycardie Auriculaire (TA)]] [[Tachycardie Atriale Multifocale (MAT)]] [[Flutter Auriculaire]] [[Fibrillation Auriculaire (FA)]] [[Tachycardie Jonctionelle ectopique (TJ)]] [[AVNRT]] [[AVRT]]" "Tachycardie Sinusale (TS)" "" "tc-vertical">>
{{tuberculose.jpg}}
!!Définition
*la ''Tuberculose'' est une infection bactérienne causée principalement par //Mycobacterium tuberculosis//, ou //Bacille de Koch//, une bactérie colorable par le [[Ziehl-Neelsen|ziehl-neelsen.jpg]].
*La transmission se fait par ''goutelettes'', via des personnes activement contagieuses. Un vrai risque comporte un total de 8h cumulé avec le patient contagieux dans une pièce fermée.
*On la trouve surtout chez les patients type:
**''HIV''
**''Immigrants''
**''Prisonniers''
**Professionels la santé, Contact avec proche infecté
**Alcooliques, DIabétiques, Corticoïdes, Drogues IV, Cancers
''TBC Primaire''
*D'abord les bacilles inhalés se déposant dans les marcophages alvéolaires.
*La bactérie se disperse dans le sang et les lymphatiques
*Elle se fait attaquer par le système immunitaire, formant des ''granulomes''. Elle survit bien dans les granulomes pulmonaires car le milleu reste bien oxygené.
*Une ''baisse d'immunité'' peut activer la TBC. Mais ''seul 10%'' des TBC primaire vont s'activer au cours de la vie d'un patient.
*Le patient est généralement ''Asymptomatique'' durant la TBC primiare, tout au plus un épanchement pleural. On parle de TBC primaire progressive si il est immunoincompétent et que des symptomes pulmonaires se développent.
''TBC Secondaire (Réactivation)''
*L'infection se manifeste généralement à l'''Apex du poumon'' car c'est la zone la mieux oxygenée.
*L'infection peut se compliquer en TBC ''miliaire'', avec dissémination hématogène et lymphatique
*La ''Clinique'' comprend:
**''fièvre, perte de poids''
**''Sudations nocturnes''
**''Toux'' d'abord sèche, puis purulente voir même hémoptysie
''TBC Extrapulmonaire''
*Survient lorsque le patient est trop ''immunosupprimé'' et n'arrive pas a contenir la TBC secondaire.
*''N'importe quel organe'' peut être touché. p.ex: ganglions, plèvre, intestin, vertèbre, méninges, ...
''TBC Latente''
*Les Mycobactéries de la primo-infection restent «''emballées''» dans des ''granulomes'' dans lesquels elles peuvent être ''encore vivantes'', mais dont leur m''étabolisme est pratiquement inexistant''
*Peut dégénérer s'il y a une immuosupression.
"Le test à la tuberculine (IPD) et les test sanguins IGRA sont généralement ''positifs''.
"On la traite par
!!Investigations
*''RX thorax'' qui montrera:
**des [[ADP hiliaires|TBC_primaire_rx.jpg]]
**un [[infiltrat aux apex|TBC_secondaire_rx.jpg]]
**des [[cavités|TBC_cavite.jpg]]
**un [[épanchement pleural|epanchement_TBC_rx.jpg]]
** une[[ TBC miliaire|TBC_miliaire_rx.jpg]]
*''Examen des expectorations'' avec:
**''culture'' (diagnostic définitif d'une //''TBC active''//)
**''PCR'', rapide
**Visualisation du bacille au microscope, aspecifique
*''Mantoux'' (ou PPD)
**Pas cher, mais positif si le patient est vacciné (le vaccin qui fait un trou dans le bras, chez nous parents) ou si autres types de Mycobactéries
**A faire comme ''dépistage'', en premier lieu
*Les ''3 seuils'' se font en fonction des risques.
**''Haut risque: 5mm'' pour les patients HIV/Immunosupprimés, exposés à la TBC ou nodules radiologiques
**''Moyen risque: 10mm'' pour les travailleur santé, migrants <5ans de zone endémique, drogues IV un partiellement immunosupprimés (malades, cortico, IRC,...)
**''Bas risque: 15mm '' pour les personnes saines.
**A noter que les ''faux-positif'' existent, typiquement sur des ''mycobactéries atypiques''.
*''T-Spot-TB'' ( ou IGRA)
**Plus cher, mais plus sensible, et ne devient pas positif chez les vaccinés
**A faire ''si le mantoux est positif'', pour diagnostiquer la //''TBC latente''//
!!Traitement
//RIPE pendant 2 mois//
*''Rifampicin''
*''Izoniazide''
*''Pyrazinamide''
*''Ethambutol''
//Puis RI pendant 4 mois//
*''Rifampicin''
*''Izoniazide''
//Si résistance à Izoniazide//
*Tri-thérapie 6 mois
//Si TBC latente//
*Izoniazide 9 mois
*Attention a la neuropathie de l'Izoniazide, nécessitant une prise de B6
//Suspicion de TBC//
*Première mesure: mettre le patient en ''chambre Isolement aerosol''
*mettre le ''Masque spécial'' FFP3, le patient le met s'il sort
*Proches ayant resté 8h+ avec le patient:
**traiter les enfants ou immunosupprimés <5ans (Rifampicine 4mois)
**Attendre 8 semaines pour les autres (incubation) et faire un dépistage et traiter si positif (Rifampicine 4 mois)
**Traiter pareil une découverte de TBC latente
{{TBC_schema.jpg}}
undefine
{{carcinoide_tumeurs.jpg}}
!!Généralités
*les ''Tumeurs Carcinoïdes'' sont des tumeurs ''neuroendocrines''.
*Elles sont généralement ''asymptomatiques'' mais ont un ''potentiel de malignité''.
*10% des Carcinoïdes ''sécrètent de la serotonine'' (5-HT), ce qui cause un ''syndrome carcinoïde'':
**''rougissements'' (flush)
**''diarrhées'' et ''crampes abdominales''
**''crises d'asthmes''
**''odème périphérique''
**''Valvulopathies tricuspides''
*Le ''traitement'' est majoritairement ''chirurgical''. Il existe des nouveaux traitements théranostiques avec analogue de la somatostatine radio-actifs.
{{syndrome_carcinoide.jpg}}
!! Généralités
*les ''Adénomes Hypophysaires'' représentent 10% des tumeurs craniennes. Ils sont soit ''sécrétants'' (60%), soit ''non-sécrétants'' (40%). Ils sont essentiellement ''bénins'', les carcinomes étant rares.
*On distingue le ''microadénome'' dont le mode de découvert est plutot par hasard (''hypersécrétion'') car trop petit pour faire un effet de masse, et le ''Macroadénome'' qui peut faire un ''effet de masse'', une ''hypersecrétion'' ou une ''insuffisance hypophysaire''.
{{tumeurs_hypophyse_adenomes.jpg}}
*le ''Syndrome tumoral'' s'explique par la [[compression régionale|hypophyse_schema.jpg]]. Les symptomes sont:
**''Hémianopsie bitemporale'' (compression du chiasma optique)
**''Diplopie'' (compression de NC du sinus caverneux)
*Les différents types d'''Adénomes sécrétants'' possibles sont:
**''Prolactinome'' (le plus fréquent)
** ''GH''
** ''ACTH''
** ''TSH''
** ''FSH / LH''
!! Prolactinome
*Le prolactinome est surtout ''détectable chez les femmes'' car il induit une ''galactorrhée'' et une ''oligoménorrhée'', par[[ hypogonadisme hypogonadotrope|Hypogonadisme]].
*le ''Traitement'' est surtout médicamenteux avec
**Des ''Agonistes dopaminergiques'' (Bromocriptine, Cabergoline, Quinagolide) qui vont faire une suppression de la PLR.
**la ''Chirurgie'' est réservée aux échecs de traitement médicamenteux. On fait une adénomectomie trans-sphénoïdale
*''CAVE'' une hyperpolactinémie peut être aussi due à un macroadénome non-sécrétante qui fait un simple effet de compression sur l'hypophyse. Dans un tel cas, un macroadénome avec <100ng/ml de prolactine sera plutot non-sécritant, tandis qu'avec >100ng/ml de prolactine il sera plutôt un prolactinome.
{{prolactinome_clinique.jpg}}
!! Adénome à GH
*Il fera une ''Acromégalie'' (cf. [[Acromégalie]])
!! Adénome à ACTH
*Il fera la ''maladie de Cushing'' (cf. [[Hypercoticisme / Cushing]])
!! Insuffisance Hypophysaire
*un ''Macroadénome'' peut faire une insuffisance hypophysaire, par ''effet de compression''. On peut trouver tout un tas de symptomes en fonction des hormones touchées. Le ''plus urgent est de traiter une insuffisance à ACTH''.
*En cas d'insuffisance à ''GH'', pas besoin de traitement en général
*En cas d'insuffisance à ''LH, FSH'', on trouve un ''hypogonadisme hypogonadotrope (cf. ''[[Hypogonadisme]]). On traite en donnant des ''hormones''.
*En cas d'insuffisance à ''ACTH'', on a un ''hypocorticisme'' qui peut être ''dangereux''. On traite en donnant des ''corticoïdes''
*En cas d'insuffisance de la ''vasopressine'' on peut avoir un ''diabète insipide'' (cf. [[Diabète Insipide]]). On traite par ''desmopressine''
{{insuffisance_hypophysaire_schemas.jpg}}
undefine
undefine
undefine
undefine
undefine
!!Tumeurs de la vulve
__''Tumeurs bénignes''__
!!!Non-neoplasic disorder of vulvar epithelium
*La ''biopsie'' est nécessaire pour faire le diagnostic et/ou exclure une néoplasie maligne
*''Dystrophie'' ''hypertrophique'' (hyperplsie des cellules squqmeuses)
**Surface épaissie et hyperkératosique
**Sx : prurit
**Femmes post-ménopausée
**Ttt : stéroides pour 6 semaines
*''Lichen scléreux''
**Diminution de la graisse sous-épithéliale, atrophie des lèvres, avec un épithélium comme une membrane, fusion des lèvres
**Sx : prurit, dysparéunie, brûlure
**Post-ménopause ++
**Ttt : stéroides topiques 2-4 semaines
*''Dystrophie mixte'' : lichen scléreux avec hyperplsie épithéliale
**Zones hypertrophiques avec zones brillantes, fines
**Ttt : stéroïdes
!!!Tumeurs
*''Hidradénome Papillaire''
*''Nevus''
*''Fibrome'',
*''Hémangiome''
''__Tumeurs malignes__''
*''Epidémiologie'' :
**5% des malignité du tractus génital
**90% ''Carcinome à cellules squameuses ''(autres : mélanome, carcinome des cellules basales, maladie de Paget, carcinome de la glande de bartholin)
***Type I : relié à HPV 16-18 (jeune femme)
***Type II : non relié à HPV , associé à une dystrophie vulvaire (post-ménopause ++)
*''FR ''
**Infection HPV
**VIN (~CIN mais pour la vulve) : lésions précancéreuses (plaques multicentriques blanches ou pigmentées sur la vulve)
**Risque de dégénération cancéreuse
**Ttt : excision locale vs thérapie ablative (laser, cautérisation) vs immunothérapie locale
*''Symptômes''
**''Asymptomatique'' au diagnostic +++, parfois prurit localisé (rare : plaque surélevée rouge, blanche ou pigmentée, ulcère, saignement, pertes, douleur, dysurie)
**La plupart des lésions arrivent sur la grande lèvre puis petite lèvre
**''Dissémination'' : locale, ganglions lymphatique (inguinaux -> pelvic), hématogène
*''Investigations''
*± Colposcopie
*Biopsie
*''Pronostic''
**Dépend du stade et de l'invasion ganglionnaire
**Lésions >4cm : mauvais pronostic
!!Vagin
''__Lésions bénignes__''
*''Kystes d'inclusion'' (kyste se formant à un endroit de mauvaise cicatrisation d'une lacération p.ex épisiotomie)
**Ttt : ø
*''Endométriose'' (lésions foncées, qui saignent lors des règles)
**Ttt : excision
*''Kyste du canal de Gartner'' (reste du canal de Wolf, se trouve autour du col)
**Ttt : rien, sauf si sx
*''Diverticule uréthral''
**Peut amener à des infection uréthrales récurrentes, dyspareunie
**Ttt : correction chirurgicale si sx
''__Lésions malignes__''
*''Epidémiologie''
**2-3% des néoplasies malignes du tractus génital
**80-90% : Carcinome à cellules squameuses
**70-90ans ++
*''Facteurs de risque''
**Infection HPV
**ATCD de cancer vulvaire ou cervical
*''Investigations''
**Cytologie
**Colposcopie
**Bx
**Toujours exclure un cancer du col, de la vulve ou de l'anus (car la majorité des cancers vaginaux sont des métastases de ces endroits)
{{cancer-vagin.jpg}}
!!Tumeurs Sein
''__Bénignes__''
!!!Non proliférative
*Changements ''fibreux'' ou ''kystiques''
*Le plus fréquents : ''kystes''
*Autres : ''changement'' ''apocrine'' ''papillaire'', ''calcificaitons'' ''épithéliales''
*Pas d'augmentation du risque de cancer du sein
*Âge : 30ans à la ménopause
*Douleur au sein, nodules/kystes palpés (surtout dans le quadrant supéro-externe, souvent bilatral, mobile, varie avec le cycle menstruel, pertes mamelonaires (brun-gris)).
*''Traitement'' :
**Evaluation de la masse (US, mammographie) et rassurer
**Analgésie (AINS)
**Symptômes sévères : contraception orale
!!!Proliférative sans atypie
{{sein-benin.jpg}}
!!!Hyperplasie atypique
*Peut impliquer les ''canaux'' (hyperplasie canalaire avec atypie) ou les ''lobules'' (hyperplasie lobulaire avec atypie)
*Les cellules ''perdent leur orientaiton apicale-basale''
*Augmentation du risque de cancer du sein
*''Dx'' : bx
*''Traitement'' : résection, éviter hormones exogènes (risque de modifications), suivi rapproché
!!!Autres
*''Nécrose'' ''graisseuse'' (suite à un trauma)
**masse mal définie, ferme avec rétraction de la peau ou du mamelon ± sensible
*''Ectasie'' ''du canal mammaire ''
**Obstruction d'un canal subaréolaire -> dilatation, inflammation et fibrose du canal
**Discharge du mamelon, masse bleutée sous le mamelon, douleur locale.
**Risque d'abcès ou mastite
**Se résout spontanément
*''Tubercule de Montgomery'' (=tubercule de Morgagni)
**Projections papulaire au bord de l'aréole
**Obstruction de ces glandes -> collections kystiques ou inflammation
**Se résout spontanément
*''Abcès'' :
**Lactationnel vs périductal/subaréolaire
**Douleur localisée unilatérale, sensibilité, erythème, masse subaréolaire, nupple discharge, nipple inversion
**Exclure un carcinome inflammatoire
**Ttt : ATB à large spectre, excision du canal si persistant.
''__Malin__''
*''Epidémiologie'' :
**1er cancer chez les femme, et deuxième cause de décès
*''FR'' :
**F>H
** >40ans
**AF+
**ATCD de cancer du sein ou de bx du sein
**Grande densité des seins, nulliparité, 1er grossesse >30ans, ménarche <12ans, méopause >55ans
**Irradiation
** >10ans d'utilisation de contraception orale
**BRCA1 et BRCA2
**OH, obésité, sédentarité
*Diminution du risque avec la lactation, ménopause précoce, accouchement jeune
*''Investigations'' :
**Mammographie (masse mal délimitée, spiculée, microcalcifications, distorsion architecturale, changement mammographiques)
**US (différencie kyste et solide)
**IRM (SN mais peu SP)
*''Diagnostic ''
**PAF
**Bx sous guide US ou mammographie
**±screening génétique
***Si patient avec cancer du sein et de l'ovaire
***AF+ fortement pour cancer du sein /ovaire
***AF+ pour cancer du sein chez l'homme
***Patient <35ans
***Cancer du sein bilatéral patient <50ans
*''Stade''
{{TNM-sein.jpg}}
*''Non Invasif''
** Carcinome canalaire in situ
**Carcinome lobulaire in situ
*''Invasif''
**Carcinome canlaire invasif (80%)
***Epithélium canalaire, infiltre le stroma
***Dur, tentacules infiltrantes, graveleux
**Carcinome lobulaire invasif (8-15%)
***Epithélium lobulaire
***20% bilatéral
***Pas de microcalcificaitons
**Maladie de Paget (1-3%)
***Carcinome canalaire envahissant le mamelon, avec lésions eczematoides
**Carcinome inflammatoire (1-4%)
***Carcinome canalaire envahissant les lymphatiques dermiques
***Agressif +++
***Erythème, oedème, chaleur, tuméfaction
***Peau d'orange lors de maladie avancée
*''Traitement''
{{traitement-sein.jpg}}
*''Suivi''
**Chaque 3-6mois pendant 3ans puis 6-12mois pendant 2ans puis 1x/an
**Examen clinique ± mammographie
**Risque de récurrence 1%par an (max 15%)
*''Métastases''
**Os > poumon > plèvre > foie > cerveau
**Ttt : palliatif par thérapie hormonale, CT, RT
![ext[tumeurs_hepatiques.pdf|./pdf/tumeurs_hepatiques.pdf]] <!-- Texte caché pour la recherche adenome hepatique adénome hépatique HNF Hémangiome Hemangiome foie -->
{{tumeur_ilots_pancreas.jpg}}
!!Généralités
*les ''tumeurs neuroendocrines du pancréas'' sont nombreusess. On retrouve:
**''Insulinomes'': tumeurs des celluels Beta
**''Glucagonomes'': tumeurs des cellules alpha
**Somatostatinomes: tumeurs des cellules D
**VIPomes
**Gastrinomes
**PP
!!Insulinomes
''Définition''
* les ''Insulinomes'' sont des tumeurs des cellules Beta avec production d'''Insuline''
*Elles sont généralement ''bénignes''. (90%)
*Elles sont souvent associée avec le ''NEM 1''
*la ''Clinique'' implique des ''Hypoglycémies'' avec
**''réaction adrénergique'': tachycardie, sudation, palpitations, tremblement, anxieté
**''symptômes neuroglycopéniques'':mal de tête, vertiges, troubles cognitifs, état confusionnel
''Investigation''
*au ''Labo'': ''insuline élevée'' à jeun, avec ''hypoglycémie'' et ''c-peptide élevé'' (ce qui distingue de l'insuline injectée)
*''Test de Jeune'' qui peut durer jusqu'à 72h. Normalement l'insuline baisse, mais elle ''reste élevée'' dans les insulinomes.
''Traitement''
*''Chirurgie'' avec résection de la tumeur, soignant 90% des cas.
!!Glucagonomes
*les ''glucagonomes'' sont des tumeurs des cellues alpha, avec production de ''glucagon''
*Ils sont caractérisés par des [[erythmes nécrolytiques migrateurs|glucagonome_erytheme_migrateur.jpg]], des glossites, un diabète léger et une ''hyperglycémie'' avec ''glucagon élevé''
!!Somatostatinomes
*les ''somatostatinomes '' sont des tumeurs des cellules D, productrices de ''SS''.
*C'est une pathologie ''rare'' mais ''maligne'', souvent découverte avec des ''métastases''
*Le pronostic est mauvais
*la ''triade classique'' comprend:
**''cholélithiases''
**''diabète''
**''stéatorrhée''
!!VIPomes
*les ''VIPomes'' sont des tumeurs ''rares'' mais souvent ''malignes'' (50%)
*la clinique est principalement des''diarrhées aqueuses'', une ''achloridie'', une hyperglycémie et une hypercalcémie
*le traitement est ''chirurgical'' avec une résection
!!Gastrinomes
* les ''Gastrinomes'' font des [[Zollinger-Ellison]]
!!Généralités
*''Epidémiologie'' :
**''Tumeurs'' ''primaires'' ''rares'' après ''30ans''
**''Métastases'' ''fréquentes'' ''après'' la ''3ème'' ''décade''
*''Métastases'' : tumeurs osseuses les plus fréquentes
!!DD (tuméfaction douloureuse spontanée >10j)
''__Lésion tumorale__''
*''__Bénignes__'' ++
*''__Malignes__'' (primaires : os ou parties moelles juxta-osseuses vs métastases)
{{caracteristiques-tumeur-os.jpg}}
''__Traumatisme__''
Si ''liquide'' ''séreux'': ''ligament'', ''ménisques'', petits ''arrachement'' osseux. Si ''sang'' et ''lobules'' ''graisseux'' : ''fracture''
*Patients peuvent oublier un trauma
*Micro-trauma répétés peuvent provoquer des fractures lentes
''__Inflammatoire__''
*//Examen clinique : atteinte en général au niveau de l'articulation //
*//PS et épidémiologie //
*''MICI'', ''PR'', ''arthrite'' virale, etc.
''__Infectieux __''
*//Anamnèse et status//
*//Bilan sanguin //
*''Boursite'', ''dermo''-''hypodermite''
''__Dégénératif__''
*//Epidémiologie//
*''Arthrose''
!!Présentation clinique
*''Douleur'' ''locale'' et ''gonflement''
*Durée ''semaines''-''mois''
*''Douleur'' à ''l’exercice'' et la ''nuit''
*''Trauma'' ''mineur'' ''possible'' (attire l’attention sur la lésion)
*± ''Masse'' des tissus mous
*''Bénin'': en général ''asx''
@@background-color:MistyRose;
!!!''Red flags''
*''Croissance'' ''rapide''
*''Chaleur'' et ''douleur''
*''Douleur'' squelettique ''persistante''
*''Localized tenderness''
*''Fracture spontanée''
*''Gonflement de tissus mous / masse s'élargissant''
@@
!!Type de lésions
@@background-color:LightYellow;
!!!Tumeur osseuse active bénigne
@@
''__Ostéome ostéoïde__''
*Tumeur ''ostéoblastique''
*''H''>F, Pics d’incidence: ''20aine'' et ''30aine''
*''Fémur proximal, diaphyse tibiale''
*Pas de métastases
*''Douleur'' ''nocturne'' ++, Douleur sévère ''intermittente'' (sécrétion de PGE)
* Douleur ''amélioré'' par les ''AINS'' (aspirine) = ''pathognomonique''
*''Rx'' : petites lésions (<1.5cm), avec sclérose autour
*Traitement : ''AINS'' (AAS) et résection ''chirurgicale''
''__Fibrome non ossifiant__'' (Fibrous cortical defect)
*''Enfants'' ++, ''H''>F, ''2-25ans''.
*''Asx''
*''Fémur'', ''tibia'' ''proximal''. En général ''bilatéral'' et ''symétrique''.
*''Rx'' (diagnostic) : lésion lytique métaphysaire excentique "en bulles", marge sclérotique.
*''Pas de traitement'' (auto-résolutif)
''__Enchondrome__''
*Tumeur du ''cartilage'' ''hyalin'' (croissance de cartilage hyalin dans la cavité médullaire)
*Pic ''20aine'' et ''30aine''
*''Asx''
*Dans ''l'os'' ''trabéculaire'' : ''Mains'' et ''pieds'' 60%, fémur 20%, humérus, côtes.
*''Rx'' : lésions dans l'os trabéculaire, "pop-corn"
*''1-2%'' ''transformation'' ''malignes'' (chondrosarcome)
*Pas de métastases
*''Traitement'': ''suivi'' Rx, ''curetage'' ''chirurgical'' si symptomatique ou croissance des lésions.
''__Ostéochondrome__''
*''Tumeur'' ''osseuse'' ''entourée'' de ''cartilage''
*Tumeur bénigne ''la plus fréquente''
*''H''>F, ''20aine-30aine''
*''Asx'' ++
*Sessile ou pédonculé
*Métaphyse des os longs (fémur distal, tibia proximal ou humérus proximal), vers l'insertion tendineuse
*''Rx'' : "champignons" (lésions osseuses entourées de cartilage), parfois multiples
*''1-2% transformation maligne'' (Sessile: augmentation du risque de dégénération maligne)
*Traitement : ''suivi'' si ''asx'', ''excision'' si ''sx''.
''__Kyste solitaire__''
*''Kyste'' de liquide ''séreux''
*''H''>F, ''Enfants'' et ''jeunes'' ''adultes'' ++ (pic : 20aine)
*Humérus proximal et féur
*''Asx'' ou ''douleur'' localisée, fracture pathologique possible
*''Rx'' : lésions lytiques au niveau de la métaphyse, petite corticale, lésion bien définie
*''Traitement'' : ''Aspiration et injection de stéroïdes'', ''curteage + greffe'' si re-fracture
''__Lipome__''
*''Tumeur du gras mature''
*Fréquent, surtout entre ''40-60ans''
*Masse ''mobile'' et ''indolore''
*''IRM'' (1er choix)
*''Traitement'' : ''suivi'', ''chirurgie''
@@background-color:LightYellow;
!!!Tumeur osseuse agressvie bénigne
@@
''__Epidémiologie__''
*''30aine'', H=F, ''récurrence'' de 15% 2ans post-chirurgical
__''Tumeur à cellules géantes''__
*''Métastases'' ''pulmonaires'' ''3%''
*''Douleur'' et ''tuméfaction'' locale -> progressif
*''Rx'' : lésions lytiques excentriques, peut traverser la corticale, fluide dans la lésion.
''__Kyste osseux anévrismal__''
*Kyste ''solide'' de tissus fibreux / granulaire ou remplit de sang
*''Rx'' : honeycomb shape
''__Ostéoblastome__''
*''Douleur'' ''locale'' et ''tuméfaction'' -> progressifs ± signes de ''compression'' ''nerveuse''
*Fémur distal, tibia proximal, radius distal, sacrum, tarse, colonne
*Rx : >2cm, calcifié, sclérose
''__Traitement__''
*''Curettage''
*''Greffe'' osseuse / ''ciment''
*''Excision'' locale du morceau d'os
@@background-color:LightYellow;
!!!Tumeur osseuse maligne
@@
''__Ostéosarcome__''
*Tumeur ''mésenchymateuse'' (cellules produisant la matrice)
*2ème tumeur osseuse primaire plus fréquente chez les adultes
*''2ème décade'' ++, ''H''>F
*''FR '': maladie de Paget, RT, mutations génétiques (P53, Rb)
*''Fémur'' ''distal'' 45%, tibia proximal 20%, humérus proximal 15%
*''Douleur'' ''progressive'', ''nocturne'', ''tuméfaction'' mal délimitée
*''Métastases'' ''pulmonaires'' fréquentes
*[[Rx|Rx-osteosarcome]] : Triangle de [[Codman|triangle-codman.jpg]], réaction périostée en feu d'herbe, lésion destructive dans la métaphyse (peut traverser la ligne épiphysaire)
*''Traitement'' : ''résection'' complète avec ''CT'' néo-adjuvante + adjuvante et ''RT''.
*''Pronostic'' : ''bon'' : 90% si bas grade, 70% si haut grade
''__Chondrosarcome__''
*Tumeur chondrogénique
*''Primaire'' 2/3 des cas
**''Os'' autrement ''normal''
**Patient'' >40ans''
**''Expansion dans le cortex -> douleur'', fractures pathologiques, taches de calcification
*''Secondaires'' 1/3
**''Dégénération'' d'un ''enchondrome'' ou ''ostéochondrome''
**''25-45ans''
**''Meilleur'' ''pronostic'' que ''primaire''
*''Douleur'' ''progressive'', rarement masse palpable
*[[Rx|Rx-chondrosarcome.jpg]]: calcifications irrégulières dans la cavité médullaire
*''Traitement'' : ''résection'' ''chirurgicale'' ''agressive'', reconstruction (ø CT -> ne répond pas)
*''Pronostic'' : ''moyen'' : survie à 10ans 90% si bas grade, 20-40% si haut grade
''__Sarcome d'Ewing__''
*Sarcome à ''petites'' ''cellules'' ''rondes'' malin
*''5-25ans'', ''H''>F
*''Douleur'', ''EF'' léger, ''Erythème'' et ''tuméfaction'', ''Anémie'', Syndrome inflammatoire
*''Métastases'' fréquentes
*[[Rx|Rx-Ewing.jpg]] : apparence mitée, réaction périostée en lamelles d'oignon dans la métaphyse des os longs avec extension diaphysaire.
*''Traitement'' : ''Résection'', ''CT'' ou ''CT-RT''
*''Pronostic'' : ''moyen'' 70% de survie à long terme, pire si métastases
''__Myélome multiple__''
*Prolifération des ''plasmocytes''
*Tumeur osseuse primaire maligne ''la plus fréquente'' chez l'adulte
*90% ''>40ans'', ''H''>F
*''Douleur'' osseuse ''localisée'', ''fractures''/tassements pathologiques, ''IR'', ''néphrite'', ''infections'' (PNA, pneumonie), ''Sx'' ''B'' (fatigue, perte de poids, anorexie)
*''Labo'' : ''anémie'', ''thrombocytopénie'', ''hypercalcémie'', ''IR''
*[[Rx|Rx-MM.jpg]] : Lésions lytiques multiples, bien délimitées, pas de sclérose, expansions osseuses marquées
*Diagnostic : ''électrophorèse'' / ''immunomarcage'', ''Bx'' de la lésion lytique
*''Traitement'' : ''Bisphosphonates'', ''CT'', ''RT'', ''chirurgie'' pour lésions symptomatiques.
*''Pronostic'' : ''mauvais'' : 30% de survie à 5ans, 11% à 10ans
''__Métastases osseuses__''
*Lésion osseuse'' la plus commune de l'adulte''
*''>40ans ''
*En général, ''ostéolytique'' (sauf prostate : ostéoblastique)
{{type-lesions-meta-os.jpg}}
*Crâne, vertèbres, côtes, bassin, segments proximaux des os longs
*2/3 [[prostate ou sein|meta-os.jpg]] ++ (mais aussi thyroïde, rein, poumons, et mélanome)
*''Douleurs'' ''mécaniques'' et/ou ''nocturnes'', ''fractures'' pathologiques, ''hypercalcémie''
*''Traitement'' : ''anatalgie'', ''bisphosphonates'', ''stabilisation'' ''orthopédique'' (ORIF, fixation interne, cimentoplastie)
{{tumeurs-selon-age.jpg}}
!!Investigations
*''Rx 2 incidences ''
**=> Définir la ''malignité'' et pour le ''DD''
**Lésions osseuse, atteinte des tissus mous (calcifications).
*''Pathognomonique pour ostéome ostéoïde'' mais pour les autres tumeurs, nécessite des examens complémentaires.
{{Rx-Types-lesions-tumeur.jpg}}
@@background-color:MistyRose;
!!!''Signes de malignité''
*Réactions périostées
*Flou de la corticale
*Lésions lytiques touchant la corticale
@@
{{Rx-malin-vs-benin.jpg}}
{{reaction-periostee.jpg}}
*''IRM''
*''BX à ciel ouvert'' => ''Diagnostic''
**//''Bx à l'aiguille'' possible et discutable, mais ''risque de dissémination'' de la tumeur, et de saignement//
*''CT'' : si la lésion touche la corticale de façon prédominante
*''Scintigraphie'' : détermine l'activité de la lésion et permet de voir si la lésion est isolées ou pas (corps entier !)
*''PS'' : ''calcium'', ''phosphatase'' ''alcaline'' (se trouve dans l'os ++)
!!Bilan d'extension
*''Scintigraphie'' osseuse vs ''PET'' pour exclure une autres localisation squelettique
*''CT thoraco-abdominal'' : ''métastases''
!!Traitement
!!!Médicamenteux
*''CT'' ''adjuvante'' et/ou ''néo-adjuvante'' (Pour éviter la dissémination et limiter la taille de la tumeur)
*''RT'' pré-/post-opératoire : Sarcome d'Ewing, lymphome primaire, sarcome des tissus mous, métastases osseuses)
!!!Chirurgical
*''Résection'' ''osseuse'' + ''tissus'' ''mous''
*''Allogreffe'' ''osseuse'' + ''prothèse'' (PTG ou PTG cimentée)
**//Lors de la greffe, on doit en général couper le n. Sciatique poplitée externe ainsi que la loge antérieure de la jambe ➜ Pied équin (pied qui tombe). Il faut donc stabiliser le pied. //
**//L’allogreffe osseuse tient avec des vis / plaques//
**Puis ''décharge'' ''complète'' puis ''partielle'' (une fracture met environ 6sem à se solidifier)
*''Amputation'' parfois
''__Complications__''
*MTEV, infection, mauvaise guérison de la plaie (Surtout après de larges résections, de grands décollement cutanés et surtout en cas de radiothérapie préalable)
*Echec de la fixation hôte-allogreffe, Fracture, Infection profonde de l’allogreffe, Descellement aseptique des implants prothétiques.
''__Rééducaiton__''
*''Charge'' ''partielle''
*''Mobilisation'' ''active'' assistée
*''Attelle'' ''anti''-''équin'' (excision de la partie proximale de la loge antéro-externe + lésion du n. sciatique poplitée externe)
!!Complications
*Risque de ''récidive'' ''locale''
*Développement ultérieur de ''métastases''
!!Pronostic
*Dépend du type histologique et du staging
*Si on prend tôt, plus de 80% ed guérison
!!Notes
*Genou : On fait souvent face, profil + incidence patellaire (= défié fémoro-patellaire)
!!Tumeurs ovariennes
{{tumeure-ovaire.jpg}}
{{tumeure-ovaire2.jpg}}
{{tumeure-ovaire3.jpg}}
{{tumeure-ovaire4.jpg}}
{{tumeure-ovaire5.jpg}}
*''FR de malignité'' :
**Excès d'oestrogènes (nulliparité, ménarche précoce / ménopause tardive), âge, AF de cancer du sein, colon, endomètre, cancer, Race caucasienne.
!Tumeurs utérines
!!!Léiomyome (fibroids)
*''Epidémiologie''
**50-60% des femmes pré-ménopausées >35ans
**African-american ++
**Potentiel malin minime
**Régression après la ménopause en général
*''Pathogenèse'' :
**Oestrogène stimule de la prolifération du muscle lisse et progestérone stimule la production d'inhibiteurs de l'apoptose.
**Changements dégénératifs (calcification, composants squameux, etc) lorsque la tumeur dépasse le support vasculaire.
*''Clinique'' :
**Asx ++ (découverte fortuite)
** Parfois : saignements utérins anormaux (dysménorrhée, ménorrhagie), pression pelvienne, urgences urinaires, rétention urinaire aiguë
**Peut dégérer ou se tordre avec douleur abdominale aiguë
**Infertilité, perte récurrence des grossesses
**Complications obstétricales
*''Investigations'' : examen bimanuel (asymétrie utérine mobile), US (confirme)
*''Traitement'' : si symptomatique
**<6-8cm et stable en taille, peu sx : pas de traitement
**Antiprostaglandines (AINS), contraception orale, etc.
**Chirurgie : myomectomie (conserve la fertilité future), hysterectomie
**Radiologie interventionnelle : embolisation de l'artère utérine (si la femme ne désire plus de grossesse)
{{leiomyome.jpg}}
!!!Polypes endométriaux
*Excroissance de la paroi de l'utérus avec protrusion dans l'utérus, par proliféraiton locale de l'endomètre.
*En général, femme péri-ménopausée
*Taille variable
*FR : tamoxifène
*Sx : saignements utérins, métrorrhagie, infertilité
*Toujours exclure un cancer de l'endomètre
{{polype-uterin.jpg}}
!!Autres
*Endométriose
*Adénomyose
''__Malignes__''
!!!Carcinome de l'endomètre
*Cancer gynécologique le plus fréquent
*''FR'' :
**Type I : excès d'oestrogène (non opposé par la progestérone) (obésité, SOPK, nulliparité, ménopause tardive, tumeur productrices d'oestrogènes, HNPCC/Lynch, tamoxifène)
**Type II : pas relié aux oestrogènes (tamoxifène)
*''Type I'' : Adénocarcinome endomètrial bien différencié
**80%
**Saignement post-ménopause
*''Type II'' : séreux, carcinome à cellules claires, endométroide grade III, indifférencié, caricnosarcome
**15%
**Pas de saignement dans les stades précoces, souvent arrivent à un stade avancé avec sx similiaires au cancer de l'ovaire (ballonnement, dysfonction intestinale, pesanteur pelvienne)
*''Investigations'' : Bx ± US pelvien
*''Dissémination'' : direct ++, lymphatique (ggl pelviens et para-aortiques), transtubaire (-> cavité péritonéale), hématogène.
*''Traitement''
**Hysterctomie vs bilatéral salpingo-ooporectomie et rinçage pelvien ± curetage pelvien et para-aortique ± omentectomie
**RT adjuvante
**Progestine (thérapie hormonale) ou CT pour les maladies récurrentes
{{figo-ca-endometre.jpg}}
!!!Sarcome utérin
*Rare
*Agressif, mauvais pronostic
*Sx : saignement vaginal
{{cancer-uterus.jpg}}
{{figo-sarcome-uterus.jpg}}
!!Col de l'utérus
{{pap.jpg}}
{{FIGO-col.jpg}}
{{TRAITEMENT-cancer-col.jpg}}
!!Trompes de Fallope
*Peu fréquent
*En général ''carcinome'' ''épithélial'' ''séreux''
*Considéré comme étant l'origine des carcinomes ovariens séreux
*50-60ans ++
*''Sx'' :
**Triade classique
***Pertes aqueuses (hydrops tubae proflens) (le plus SP)
***Saignement vaginal ou pertes
***Douleurs abdominales ou pelviennes en crampes de l'abdomen inférieur
**En général, masse pelvienne associée
*''Traitement'' : idem tumeurs ovariennes épithéliales
undefine
undefine
undefine
![ext[turner.pdf|./pdf/turner.pdf]] <!-- Texte caché pour la recherche Turner syndrome (45, X) 118 Usually (>95%), Turner syndrome results in early mis carriage and is increasingly detected by ultrasound antenatally when fetal oedema of the neck, hands or feet or a cystic hygroma may be identified. In live born females, the incidence is about 1 in 2500. Figure 8.6 and Box 8.4 show the clinical features of Turner syndrome, although short stature may be the only clinical abnor mality in children. - Genetics Edwards syndome and Patau syndrome Box 8.2 Clinical features of Edwards syndrome (trisomy 18) • Low birthweight • Prominent occiput • Small mouth and chin • Short sternum • Flexed, overlapping fingers (Fig. 8.5) • ‘Rocker bottom’ feet - • Cardiac and renal malformations. Turner syndrome Figure 8.6 Turner syndrome. The woman on the left has marked short stature but no other clinical features; the adolescent female on the right has neck webbing and has received growth hormone and is 150 cm in height. Box 8.3 Clinical features of Patau syndrome (trisomy 13) • Structural defect of brain • Scalp defects • Small eyes (microphthalmia) and other eye defects • Cleft lip and palate • Polydactyly • Cardiac and renal malformations. Figure 8.5 Overlapping of the fingers in Edwards syndrome. Box 8.4 Clinical features of Turner syndrome • Lymphoedema of hands and feet in neonate, which may persist • Spoon shaped nails - • Short stature – a cardinal feature • Neck webbing or thick neck • Wide carrying angle (cubitus valgus) • Widely spaced nipples • Congenital heart defects (particularly coarctation of the aorta) • Delayed puberty • Ovarian dysgenesis resulting in infertility, although pregnancy may be possible with in vitro fertilisation (IVF) using donated ova • Hypothyroidism • Renal anomalies • Pigmented moles • Recurrent otitis media • Normal intellectual function in most. Treatment is with: Growth hormone therapy Oestrogen replacement for development of secondary sexual characteristics at the time of puberty (but infertility persists). In about 50% of girls with Turner syndrome, there are 45 chromosomes, with only one X chromosome. The other cases have a deletion of the short arm of one X chromosome, an isochromosome that has two long arms but no short arm, or a variety of other structural defects of one of the X chromosomes. The presence of a Y chromosome sequence may increase the risk of gonadoblastoma. • • The incidence does not increase with maternal age and risk of recurrence is very low. -->
Fahrnipedia ''1. ouvrir Terminal'' tiddlywiki export --init server && tiddlywiki export --server nouvel onglet du terminal '' 2. Ouverture du fichier'' http://127.0.0.1:8080 ''3. IMPORTER le fichier.'' Ouvrir Fahrnipedia.html se mettre sur sommaire, clean, et enregistrer le wiki glisser-déposer fahrnipedia.html dans le wiki du server ''4. Sauver le fichier'' tiddlywiki export --savetiddlers [is[image]] images && tiddlywiki export --setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain && tiddlywiki export --setfield [is[image]] text "" text/plain && tiddlywiki export --rendertiddler $:/core/save/all fahrnipedia.html text/plain '' 5. Supprimer les images a 6 octets'' dans le fichier export/output/images , pour pas overwrite les images anciennes ''6. Sauvegarde actuelle'' copier-coller les fichiers fahrnipedia.html et le dossier image dans Documents/Fahrnipedia Archives '' 7. Remplacer le wiki du google drive par celui de export/output'' copier coller les images (pas le dossier copier coller ensuite le fichier html. Verifier l'article le plus récent que l'image soit bien externe supprimer le dosser export ''8. Mettre a jour sur l'ipad et l'iphone'' via iTunes, glisser déposer et remplacer vérifier que la date et la taille ont changé ''9. Mettre a jour sur fahrnipedia.ch'' via cyberduck. supprimer le fahrnipedia.html actuel glisser-déposer les 3 fichiers dans Web2 avec l'option comparer ! check fahrnipedia.ch
!!Ajouter un Mindmap à Fahrnipedia # Ouvrir le fichier mindnode et tout déplier # Tout séléctionner et faire Maj-T pour supprimer les coches # Faire aussi une copie du texte pour coller dans le champ recherche caché # Faire un apercu -> screenshot de chaque image pertinente # Exporter en freemind (1.mn) # Ouvrir en freemind et ajouter (alt-K) les images manuellement # Exporter en javascript (xhtml) # Prendre les image, le html et le dossier files et tout exporter dans fahrnipedia/docs # Faire pareil sur le fahrnipedia/docs de cyberduck # Crééer un nouveau Tiddler et ajouter le snipplet fichier html , et coller le texte complet dans le champ recherche caché
<<tabs "[[Tachycardie Ventriculaire (TV)]] [[Torsades de Pointes (TdP)]] [[Flutter Ventriculaire]] [[Fibrillation Ventriculaire (FV)]]" "Tachycardie Ventriculaire (TV)" "" "tc-vertical">>
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
undefine
{{ulcere_peptique.jpg}}
!!Définition
*l'''Ulcère Peptique'' est un ulcère situé au niveau de l'''estomac'' //(ulcère gastrique)// ou du ''duodénum'' //(ulcère duodénal)//.
*Les ''Causes'' les plus fréquentes sont
**''//H.Pylori//''
**''AINS'' (inhibition des prostaglandines, baisse des défenses des muqueuses)
**//''Zollinger-Ellison''//: multiples ulcères peptiques dus à un [[gastrinome pancréatique|Zollinger-Ellison]].
**''Tabac''
**''Alcool'' et ''Café''
!!Clinique
*''Epigastralgie''
**Aggravation de la douleur la nuit
**± Douleur calmée par la nourriture
*''Nausées'', ''Vomissements'', ''Perte de poids''
*Parfois ''Saignements GI''
|!Ulcère Gastrique|!Ulcère Duodénal|
|Diminution des barrières locales|Augmentation de l'agression locale|
|Plus cancerigène (5-10%) |Moins cancerigène |
| Situé n'importe où sur la muqueuse|Situé près du Pylore |
|Patients Âgés|Patients Jeunes|
|Plus de Complications|Plus de variations nocturnes/nourriture|
!!Diagnostic
*''Endoscopie'' avec une ''biopsie'' pour exclure un [[Cancer de l'Estomac]]. Au passage on peut cautériser l'ulcère
*Recherche d'''//H.Pylori//'' via
**La Biopsie (test à l'uréase et culture)
**Breath test à l'urée
*Mesurer la gastrine sérique si suspicion de ZE.
!!Traitement
//Prévention//
*''STOP AINS''
*STOP Alcool, STOP Tabac, Diminuer Café
*Pas restreindre la nourriture, sauf juste avant le coucher (stimule l'acidité nocturne)
//Si H.Pylori détecté//
*''Trithérapie'' si echec du traitement et //H.pylori //détecté, ou si gastrite chronique symptomatique
*#''amoxicilline''
*# ''clarythromicine''
*# ''IPP''
//Autres//
*''Protections gastrique'' (Sucralfate, //Ulcogant®//)
*''Chirurgie'' pour les complications (Saignements, Perforations)
{{ulceres_peptiques_endoscopie.jpg}}
undefine
undefine
undefine
!Interprétation des Urines !!Généralités *Leucocytes: comparer stick et cytométrie *Essayer de faire les urines aux memes heures *Les urines sont gardées 24h on peut rapeler le labo pour questions !!Bandelette/Stick *''semiquantitatif'', ''présent ou pas'', décrit en nombre de ''croix'' (+, ++, +++) *peut se faire manuellement mais c'est mieux de le demander au labo *le cytomètre de flux est plus précis et quantitatif, *''Leucocytes'': On détecté les PMN car il y a l'esterase. La spécificité est mauvaise sensibilité bonne *''Nitrites'': surtout E.Coli qui transforment les Nitrates en Nitrites, donc ces germes là. Il faut aussi un temps de contact pour que ca se crée, spécificité bonne , sensiblité mauvaise. *''Hb'': bonne sensibilité, bonne spécificité mais détecté aussi la myoglobine *''Hematurie Macroscopique'': inutile de faire un stick car tout est coloré/faussé par le sang !!Cytométrie de Flux *on fait passer les urines a travers un laser qui identifie un par un les composantes. *plus'' précis quantitativement'' *Ca donne des doses en microlitres (ou M/l). Et pas par champ comme pour le sédiment!! *Ne dit pas le type d'hématie, juste la taille (normo, microcytaire) *Donne si il y a des cristaux mais le type *Donne des cylindres hyalins, ou pathologiques !!Sédiment *C'est l'analyse au microscope *A faire dans les résultats discordants de stick/CF *Donne la forme des choses observées en détail *Résultats en nombre/champ !!SPOT *chimie des urines *quand on veut doser des ''éléctrolytes'' par exemple *On parle de //spot inversé// quand la natriurèse est trop faible, c'est un signe de RAA (inversé car les valeurs de Na+ et K+ s'inversent en proportion) !!Exemples //Cellules// *''GR Glomérulaires'': On a le droit d'en avoir un peu (<26/ microlitres) sur des petits degats aspécifiques (sport), sur un patient non pathologique. Ils sont dysmorphiques et ne luisent pas car perdent le contenu en hémoglobine *''GR Non Glomérulaires'': toujours patho. Souvent post-sondage. De forme normale. Le saignement sera en aval du glomérule. *''GR Fantomes'': les urines ont trainé, les GR se sont vidés de leur Hb et on sait pas trop du coup s'ils sont glomérulaires ou non... *''Cellules pavimenteuses'': n'ont rien a faire dans le sédiment, signent une contamination du périnée *''Cellules tubulaires'': indiquent une petite NTA (si il y en a beaucoup on a des cylindres) //Cylindres// *''Proteine TAM-Horsfall'', est sécrétée au niveau de l'anse ascendante large de henle. Elle est ''physiologique''. Dans certaines situations pathologiques elle sert de ''matrice '' pour former un ''cylindre'' avec tout et n'importe quoi. *''Cylindre hyalin'': n'a que la matrice de TF, ne contient rien. C'est'' normal ''d'en avoir si il n'y a rien d'autre *''Cylindre erythrocytaire'': TF + GR glomerulaires. *''Cylindre leucocytaire'': TF + Leucocyte *''Cylindres tubulaires'': TF + Cellules Tubulaires (nécrose) *''Cylindres graisseux'': TF + Lipide, on en trouve dans le syndrome néphrotique car barrière perméable couplé a perte de protéine (hypoablminemie) et compensation oncotique par albumine et lipides, aussi hypercholestérolémie //Protéinurie// *On urine environ ''9mmol de creat'' par jour *Il faut regarder la ''//creat urinaire//'' (en mmol/l) et regarder combien de litres sont nécessaire pour arriver a 9 mmol. Puis regarder la ''//protéinurie//'' (en mmol/l) et faire x le nombre de litre par jour pour trouver la protéinurie estimée sur 24h *Pour l'''//albuminurie//'' il faut faire le même calcul avec la valeur d'albumine urinaire. Pour la //microalbuminuraire// on fait le rapport albumine/creat sur medcalc *Finalement on regarde l'''origine de la protéinurie'': **//Origine tubulaire// : si majoritairement non-albuminurique (NTA p.ex) **//Origine glomérulaire//: si majoritairement albuminurique !!Reférences ![ext[sediment.pdf|./pdf/sediment.pdf]] <!-- Texte caché pour la recherche -->
!! LABO ''FSC'' * ''Hématocrite'' (HCT) = 37-47%♀, 40-52%♂ (polyglobulie = >47%♀ >54%♂) * ''Hémoglobine'' (Hb) = 120-160♀140-180♂ (anémie = <120♀ <130♂ <105♀enceinte) * ''MCV'' = 80-94fl (normocytaire) (> = macrocytaire) (< = microcytaire) * ''MHC'' = 26-34 pg * ''MCHC'' = 320-360 g/L (normochrome) (> = hyperchrome) (< = hypochrome) * ''Rétis'' = 20’000 - 80’000 G/L (<120 = régénérative, <50= hyporégénérative, 50-100 = partiellement régénérative) en pourmille = 5-15 * ''Leucocytes'' = 4-11 G/L (≤0.5 G/L = agranulocytose) * ''PMN S/NS'' = 60-70% (5% NNS = déviation G) * ''Basophiles'' = <1% (>0.1 G/L = Augmentation Basophiles) * ''Eosinophiles'' = 2-4% (>0.5 G/L = Hyperéosinophilie) * ''Monocytes'' = 2-6% (>1 G/L = Monocytes) (>2 G/L = Risque de sy. d’ hyperviscosité !) * ''Lymphocytes'' = 20-40% (<1.2 G/L = lymphopénie >4.5 G/L = lymphocytose) * ''Plaquettes'' = 150-400 G/l (>400 = thrombocytose <150= thrombopénie) (<20 G/L = Risque Hémorragique ! ) ''CHIMIE SANG'' * ''Potassium'' = 3.5-5 mmol/L (manifestations si <3 mmol/L) * ''Sodium'' = 135-145 mmol/L (hyponatrémie légère >125 mmol/L, modérée >115 mmol/l, sévère <115 mmol/L) * ''Calcium'' = 2.2 -2.52 mmol/L * ''Osmolarité'' = 275 - 290 mmol/L ''GAZO'' * ''pH'' = 7.36-7.44 kPa * ''pCO2'' = 5.3 kPa (±0.5) * ''pO2'' = 11 kPa ((100-0.5*age)*0.133) * ''HCO3'' = 24 mEq/l (±2) (<20 mEq/l = acidose métabolique) * ''BE'' = 0 (±2) * ''Trou anionique'' = 8-12 (normal = perte de HCO3, >12 = gain d'acides) ''GLYCEMIE'' * ''Normal'': 3.9 - 5.7 mmol/l * ''Perturbation de la Glycémie: à jeun ''= 5.6-6.9 mmol/l * ''Diabète: à jeun'' = >7mmol/l * ''Intolérance au Glucose'': (post-prandial): 7.8-11 mmol/ol * ''Diabète:'' (post-prandial) = >11.1 mmol/l ''HEMOGLOBINE GLYCEE'' *''Normale'': 4.4-6.4% *''Pré-Diabète'': 5.7-6.4% *''Diabète'': ≥6.5% ''URINES'' * ''Microalbuminurie'' = de 30 à 300mg d'albumine par 24h * ''Macroalbuminurie'' = > à 300mg d'albuminurie par 24h ou >500mg de prot. * ''Fraction d’extraction du sodium'' = 1-2% (<1 = Rétention de sodium, >2 = perte rénale de sodium) ''LIPIDES'' * ''Low HDL'' = <1 mM/l♂ , <1,3 mM/l♀ * ''High Triglycérides'' = >1.7 mM/l !! CONSTANTES ''TENSION'' * ''Optimale'' = <120/80 * ''Normale'' = 120/80 mmhg * ''Normale haute ''= 130/85 * ''HTA légère (stade I)'' = 140/90 mmhg * ''HTA modérée (stade II) ''= 160/100 mmhg * ''HTA sévère (stade III)'' = 180/110 mmhg ''TOUR DE TAILLE'' * Obésité centrale = >102♂, >88♀ ''TEMPERATURE'' * ''Normale'' = <37.7°C peripherique, <38,3°C centrale * ''Fievre'' = 37.7°C peripherique, >38.3°C centrale ou >38°C centrale sur 1h * (Fievre >42.6°C = Risque de mort (dénaturation protéines)) !! ECG ''Mesures'' * ''Voltage'' = 10mm/mv, Vitesse= 25mm/s * ''1 grand carré (5mm) ''= 200ms * ''1 petit carré (1mm) ''= 40ms ''Normes'' * ''Fréquence'' = 300-150-100-75-60-50 * ''Axe'' = -30°(aVL) - 90°(aVF) * ''Onde P'' = durée 0.12s, amplitude 0.25mV * ''PR'' = 120-200 ms * ''QRS'' = 60-100 ms (HBB <120ms) * ''Q'' = <40ms, <25% de R (Pathologique en V2, V3) * ''ST'' = <1mm sur pp, <2mm sur précordiales ''BBG'' * QRS > 120ms * RR' en DI et V6 (large) * grand S en V1 (rS ou qS) ''BBD'' * QRS > 120ms * RSR’ en V1 (R’>R) * Large onde S en DI et V6 ''HEMIBLOCS'' * QRS >100ms , <120ms * Hemibloc antérieur gauche: S>R en D II ''Hypertrophie VD'' * Axe du coeur >90° * Grand R en V1 ''Hypertrophie VG'' * Grand R positif en V6 + Grand R negatif V1 = >35mm ''Troponines'' * <14ng/l normal, 14-50 ng/l suspect, >50 ng/l pathologique
undefine
{{valve_urethrale_post.jpg}}
<!-- Texte caché pour la recherche
18.1 Posterior urethral valves
Bilateral hydronephrosis was noted on antenatal ultrasound at 20 weeks’ gestation in a male fetus. There was poor renal growth, progressive hydrone phrosis and decreasing volume of amniotic fluid (Fig. 18.11a) on repeated scans. After birth, pro phylactic antibiotics were started. An urgent ultra sound showed bilateral hydronephrosis with small dysplastic kidneys. The bladder and ureters were grossly distended. The plasma creatinine was raised. A micturating cystourethrogram (MCUG) (Fig. 18.11b) showed vesicoureteric reflux, a dilated posterior
Figure 18.11a Antenatal ultrasound scan in an infant with urinary outflow obstruction from posterior urethral valve. (Courtesy of Mr Karl Murphy.)
Urinary tract infection
About 3–7% of girls and 1–2% of boys have at least one symptomatic urinary tract infection (UTI) before the age of 6 years, and 12–30% of them have a recurrence within a year. UTI may involve the kidneys (pyelonephritis), when it is usually associated with fever and systemic involvement, or may be due to cystitis, when there may be no fever. UTI in childhood is important because:
•
up to half of patients have a structural abnormality of their urinary tract
•
pyelonephritis may damage the growing kidney by forming a scar, predisposing to hypertension and to chronic renal failure if the scarring is bilateral.
There are NICE guidelines on urinary tract infection in children, published in 2007, although they have proved to be controversial.
Clinical features
Presentation of UTI varies with age (Box 18.1). In infants, symptoms are non specific; fever is usually but not always present, and septicaemia may develop rapidly. The classical symptoms of dysuria, frequency and loin pain become more common with increasing age. Serious illness from septicaemia is described in the child with a fever in Chapter 14. Dysuria alone is usually due to cystitis, or vulvitis in girls or balanitis in
-
18
urethra and posterior urethral valves which was treated endoscopically. Renal function initially improved but then progressed to chronic renal failure. He had a renal transplant at 10 years of age.
Bilateral hydronephrosis in a male infant requires urgent investigation to exclude posterior urethral valve.
Gross vesicoureteric reflux
Distended bladder with trabeculated wall
Dilated posterior urethra Posterior urethral valve
Figure 18.11b Micturating cystourethrogram (MCUG) in the same patient.
-->
{{souffles_valves.jpg}}
!! Sténose aortique
{{stenose_aortique.mp3}}
*une ''Sténose aortique'' peut être dû à des ''calcifications'' de la valve, une ''maladie rhumatismale'', un ''RAA'' ou une ''Valve bicuspide''
*les ''symptomes'' sont des ''dyspnées ou syncopes à l'effort'' principalement. On peut palper un ''pouls tardif''.
*A l'''auscultation'' on trouvera un ''souffle protoméso-systolique'' qui ''irradie aux carotides'',
*les ''Investigations'' comprennent un ''ECG'', une ''RX'' et un ''US''.
*un ''remplacement chirurgical de la valve'' peut se faire comme traitement
!! Insuffisance Aortique
{{insuffisance_aortique.mp3}}
*une ''Insuffisance aortique'' peut être due à ''Marfan /Ehler-Danlos'' , à une ''valve bicuspide''ou encore à une ''dissection aortique'' faisant collapser la valve.
*les ''symptômes'' sont ''tardifs'' et s'observent lorsque se développe une ''insuffisance du VG'' avec dyspnée et autres symptômes. On peut palper un ''pouls ample et bondissant''.
*a l'''auscultation'' on note un souffle ''proto-disatolique decrescendo'' de ''haute fréquence'' qui s'entend mieux quand le patient est ''penché en avant''.
*La surcharge provoquée par l'insuffisance aortique peut amener à la présence d'un ''souffle systolique ejectionnel'' surajouté.
*les ''Investigations'' comprennent un ''ECG'', une ''RX'' et un ''US''.
*un ''remplacement chirurgical de la valve'' peut se faire comme traitement
!! Sténose Mitrale
{{stenose_mitrale.mp3}}
*Une ''Sténose mitrale'' est principalement due à une ''maladie rhumatismale''
*La ''clinique'' sera principalement une ''dyspnée à l'effort''
*a l'''auscultation'' on entend un ''souffle meso-diastolique''
*les ''Investigations'' comprennent un ''ECG'', une ''RX'' et un ''US''.
*un ''remplacement chirurgical de la valve'' peut se faire comme traitement
!! Insuffisance Mitrale
{{insuffisance_mitrale.mp3}}
*l'''Insuffisance mitrale'' peut être due à des causes ''congénitales'', à un ''Marfan / Ehler-Danlos'' ou encore à des ''calcifications'' de la valve.
*la ''clinique'' comprendra des ''dyspnées'' entre autres.
*a l'''auscultation'' on entend un ''souffle holoystolique '' entendu à l'apex, qui ''irradie aux aisselles''.
*les ''Investigations'' comprennent un ''ECG'', une ''RX'' et un ''US''.
*un ''remplacement chirurgical de la valve'' peut se faire comme traitement
!! Insuffisance Tricuspide
{{insuffisance_tricuspide.mp3}}
*l'''Insuffisance tricuspide'' produit un ''souffle holoystolique'' qui a la particularité de varier à la respiration, particulièrement de ''s'aggraver à l'inspiration''.
{{varicelle.jpg}}
!!Définition
*la ''varicelle'' correspond à la ''primo-infection'' du VZV //(Varicella Zoster Virus)// , qui est particulièrement ''contagieuse''.
*Elle touche 90% des enfants
*Elle est généralement ''bénigne chez l'enfant'', tandis qu'elle peut être ''mortelle chez l'adulte ou l'immunosupprimé''.
*La période d'incubation est de 14j
*le Syndrome de Reye est une complication rare si le patient prend de l'aspirine. c'est une encéphalite grave.
!!Clinique
''Enfant''
*fièvre moderée
*''rash'' de ''macules'' évoluant en ''vésicules'' qui vont s'ouvrir et donner des ''croûtes''.
*il peut rester des lésions hypopigmentées transitoires, voir des cicatrices
*D'abord sur le ''cuir chevelu'', puis le ''thorax'' et enfin les muqueuses et les membres, avec épargne palmaire.
''Adulte''
*''plus sévère'' en général
*''pneumopathie varicelleuse'' avec symptomes pulmonaires
*''ataxie'' cérébelleuse: Si un enfant se présente avec un'' ataxie après une infection virale'', on suspecte en premier lieu une ''ataxie varicelleuse'', qui est bénigne et se résoud seule
!!Investigation
*''Diagnostic clinique'' en général
!!Traitement
*''guérison spontanée en 7j'', avec immunité définitive. peut ensuite donner un [[Zona]]
*acyclovir pour les cas graves
undefine
!Varices
*Distension des veines superficielles à cause d'insuffisance valvulaire
*Veines profondes, superficielles ou perforantes
*10-20% des la population
!!FR
*Femmes, contraception orale, obstétrique
*Sédentarité
*AF+
*Constipation
*Exposition prolongée à la chaleur
*Station debout immobile
*ATCD de TVP
!!Types
*Primaire : incompétence valvulaire veineuse ou obstruction
**FR : âge, contraception orale, grossesse, obésité, station debout prolongée
*Secondaire : TVP, tumeur pelvienne avec compression veineuse, anomalies congénitales, fistule artério-veineuse
!!Clinique
*Non corrélé à la taille !
*Douleur diffuse, sensation de douleur/oppression, crampes nocturnes
*Aggravé par la station debout (fin de journée) et prémenstruel
*Veines superficielles visibles (longues, tortueuses, dilatées) le long de la cuisse et jambe
*Ulcération, hyperpigmentaiton et induration (varices secondaires)
*Oedème variqueux (unilatéral, dos du pied/malléole / soir++, diminue le matin)
!!Test de Brodie-Tredelenbourg
*(= test de compétence valvulaire)
*Patient sur le dos, monter la jambe et compresser la veine saphène au niveau de la cuisse puis mettre le patient debout -> si les veines se remplissent rapidement de haut en bas, il y a une incompétence.
!!Complications
*Thrombophlébite superficielle récurrente
*Hémorragie par rupture de varice (externe ou sous-cutanée)
*Ulécration, eczema, lipodermatosclérose, hyperpigmentation
*Infections cutanées de la jambe
!!Traitement
*Problème surtout cosmétique
*Conservateur : élévation de la jambe, bas de contention, marche, perte de poids, éviter chaleur
*Médicaments (veino-actifs), s'il y a des sx fonctionnels, en général 20-30j
*Chirurgie
**Varices symptomatiques (douleur, saignement, thrombophlébites récurrentes), ulcérations, hyperpigmentation, échec du traitement conservateur, cosmétique
**Sclérothérapie IV (mousse) guidé à l'US
**Thérapie endoveineuse par laser
**Ligature et éveinage de la grande veine saphène et ses affluents (stripping) + phlébotomie pour les varices ne pouvant bénéficier d'éveinage
*CI : occlusion du réseau veineux profond
*Post-op : HBPM puis AVK min 3mois
!!Pronostic
*Bénin, complications prédictibles
*100% de soulagement symptomatique lors de traitement des varices primaires
*Bons résultats cosmétiques
*Récurrence post-opératoire significative.
!Notes
*''TVP'' ''infraclinique'' fréquente ++ en post-opératoire
*''Classes de bas de contention ''
**Classe I: Formé débutante de maladie veineuse, grossesse
**Classe II: varices étendues, TVP, syndrome post-thrombotique, lymphoedème etc.
**Classe III: insuffisance veineuse chronique, syndrome post-thrombotique, lymphoedème
**Classe IV: lymphoedème
*''Ulcères veineux vs artériels''
**Veineux : superficiels, au dessus de la malléole médiale, humide, peu douloureux, forme irrégulière, fond rouge et bourgeonnant
** Artériels : se développent aux points d’appuis, douloureux++, fond pâle, atone, ne saignent pas, uniques en général
*Système veineux
**Système profond : draine 90% du sang veineux (superficiel = 10%)
*Profond = veines iliaques, fémorales superficielle et profonde, poplitée, tibiale et péronées
*Superficiel: grande et petite saphène et tributaires
{{h9991261_001_2.jpg}}
{{varices_oesophagiennes.jpg}}
!!Généralités
*les ''varices oesophagiennes'' sont principalement due à l'''HTP'' //(hypertension porte)//. Elles peuvent être ''mortelles'' si elles saignent.
*Elles sont souvent accompagnées de varices dans l'estomac
*le ''risque de saignement'' est de ''30% la première année'' et le ''risque de resaignement'' est de ''70%''.
*le ''diagnostic ''se fait à ''l'endoscopie'', mais avant ça il faut stabiliser le patient hémodynamiquement.
*l'''Octréotide'' est utilisé dans les ''hémorragies'' pour réduire la pression porte.
*Le ''Traitement médicamenteux'' passe par le ''propranolol''.
*le ''Traitement chirurgical'' passe par la ''ligature'' des varices. Si ca ne suffit pas, il faut mettre un TIPS.
{{varices_ligatures.jpg}}
undefine
undefine
undefine
undefine
![ext[dermato_vasculites.pdf|./pdf/dermato_vasculites.pdf]] <!-- Texte caché pour la recherche Vasculites Vasculite : Purpura vasculaire : infiltré, MI ++, associé signe vasculite - Inflammation vasculaire avec destruction tissulaire (dépôts de complexes immuns → activation ¢ endothéliales et sécrétion cytokines → inflammation avec PMN++ → nécrose vasculaire) - Gros vaisseaux (Giant-Cell, Takayatsu), Moyens (Kawasaki, polyartérite noueuse), petits (polangite microscopique, Wegener), capillaire (Goodpasture), veinules (Hennoch-Schönlein, Chug-Strauss) Superficiel : peu intense (« urticaire » fixe, érythème papuleux ± annulaire), plus intense (purpura palpable pétéchial), très intense (nécrose hémorragique = bulles) Profond : nodules en grain de plomb (derme profond), livedo (atteinte artères -> réseau réticulé), nouures (atteinte hypoderme). Purpura thrombopénique : non infiltré = pas palpable, maculeux, ecchymotique. Diffus + atteinte muqueuse (LLA) Purpura par fragilité capillaire : non infiltré (non palpable) - Purpura de Bateman : purpura sénile - Scorbut : OH, tr dent, tr dig, TCA. Associé carence fer, B12, folate, zinc. Signes = arthralgies, OMI, ecchymoses, purpura périfolliculaire, poils en tire-bouchon, hémorragies gingivales, déchaussement dents). Atteinte en 3mois si diète sans vitC. TTT vit C 3mois. - Clinique : purpura palpable, sinon → FSC (thrombopénie) - Bx : vascularite leucocytoclastique (++) = dépôts fibrinoïdes, infiltration par PMN « éclatés », nécrose des parois vasculaires (veinules post capillaires ++). - IF ± (quels AC déposés) - Recherche a(einte autres organes : reins, articulations, intestins (= Hennoch Schönlein), SNC, poumons - Urgence : apparition brutale, EF associée, extension rapide - Horton (giant-cell) : vasculite temporale avec céphalées + cécité - Takayatsu : jeune femme sans pouls - Facteurs inducteurs : infections (HBV, HCV, HIV), médicaments. - Maladies favorisantes : collagénoses (lupus, PR), lymphomes, leucémies - Purpura fébrile : URGENCE ⇒ infectieux (ATB en urgence). Rechercher AI (CS en urgence) ou embolique 2ème. DD : vasculaire (fulminans, rhumatoïde), thrombopénie/ ecchymose (abrovirose), embolique (septique), en gant et chaussette (B19) Purpura FULMINANS (infiltré, EF) : évolutif et nécrotique - DD : méningite bactérienne (méningo, Hib, pneumo - <4ans++), virale (entérovirus, arbovirus), endocardite S. aureus, Rickettsiose (tique ; R ricettsii : rocky montain spotted fever: papules purpuriques ± nécrotiques, choc / R. conorii : fièvre boutonneuse méditerranéenne) - FR : genotype, pro-coagulation (Leiden), asplénie, deficit c’. - ETIO : embols septiques avec vasculite ou CIVD - CLIN : précoce = purpura, EF, TRC >2, mains froides, irritabilité, léthargie. Après 12h = prupura nécrotique extensif, tr conscience, signes méningés, choc. Mortalité 25% (18h++) - INV : PL, hémoc + frottis, bx cutanée - TTT : ATB IV (ceftri), prophylaxie entourage - Arbovirose = piqûre de moustique (endémique intertropical), - EF ++, myalgies, arthralgies, céphalées. Eruption érythémateuse, purpurique à J5. - Risque choc et hémorragie par CIVD Hennoch-Schönlein = purpura rhumatoïde. T8 conservateur. - GEN : enfant 4-7ans, EF. Paraviral. - CLIN : purpura infiltré aux MI ++. - INV : IF directe (IgA) - CAVE : a%einte articulaire, dig (hémorragie), rein (IR) (→ CS PO) GEN CLIN DD INV CAVE MENINGOCOCCEMIE DENGUE HENNOCH -->
undefine
undefine
{{vessie_ neurogene_innervation.jpg}}
!! Généralités
* le terme ''vessie neurogène'' fait référence à une ''dysfonction vésicale'' suite à une ''lésion nerveuse centrale ou périphérique'' des nerfs innervant la vessie
*le ''Diabète'' et la ''SEP'' sont deux origines connues
*les ''nerfs sympathiques'' sortent au niveau T10-L2 et passent par la chaine de ganglion sympathique pour innerver la '' contraction du sphincter interne'' et la relaxation du détrusor
*les ''nerfs parasympathiques'' sortent au niveau S2-S3-S4 pour innerver la ''contraction du détrusor'' et la relaxation du sphincter interne
*l'''innervation volontaire'' passe par le ''nerf pudendal'' (nerf honteux) et va innerver la ''contraction du sphincter externe''.
*les ''récepteurs à l'étirement'' dans la paroi vésicale font un ''rétrocontrôle incitant la miction'' (activent le parasympahtique et inhibent le sympathique)
*les ''symptômes'' de la vessie neurogène sont typiquement une ''incontinence'' avec nycturie et urines fréquentes. Les symptômes peuvent varier avec ce qui a été atteint et on peut trouver une ''hyperreflexie ou hyporreflexie'', avec souvent une ''rétention urinaire'' ainsi qu'une ''perte de sensations'' à cet endroit.
*a la ''fluoroscopie'' on peut trouver le signe du ''sapin de noel''.
*divers ''traitements'' sont possibles, passant de l'''auto-catheterisation'' à la ''chirurgie'', suivant l'atteinte de la vessie.
{{vessie_neurogene_sapin_noel_fluo.jpg}}
undefine
undefine
undefine
!!CONTACT *Transmission Via les ''mains'' ainsi que les ''surfaces'' *On porte des ''Gants de soins'' ainsi que ''surblouse verte'' hydrophobe, dès qu'on a contact avec le ''patient'' ou son ''environnement''. !!GOUTELLETTES *Transmission via les ''Goutelettes'' qu'on trouve si le patient ''parle'', ''tousse'' ou encore ''éternue'' *On porte un ''masque'' classique dès qu'on approche le patient à <1 m voir ''dès l'entrée dans la chambre'' du patient selon les germes *Le patient porte le masque classique quand il sort de sa chambre !!AIR *Tansmission par des ''aerosols'' qui restent en ''suspension'' dans l'air *''Chambre isolée obligatoire'' pour le patient *On porte le ''masque ultrafiltrant'' dès l'''entrée dans la chambre'' du patient *Le patient porte le masque ultrafiltrant en sortant de sa chambre !!STRICT *Pour les agents ''hautements pathogènes'', situations rares, émergentes,... *''Chambre isolée obligatoire'' pour le patient *On porte des ''gants de soin'', une ''surblouse verte'' hydrophobe et le ''masque ultrafiltrant'' dès l'entrée dans la chambre *Le patient porte le masque classique quand il sort de sa chambre !!PROTECTION *Patient ''Immunosupprimé'', vulnérable à tous les organismes, mêmes les normaux. *Filtres à eau sur les points d'eau du patient *''Chambre isolée obligatoire'' pour le patient *On porte un ''masque'' classique et une ''surblouse verte'' hydrophobe *Le patient porte le masque ultrafiltrant en sortant de sa chambre !!Exemples *''BLSE'': CONTACT, +GOUTELETTES si respiratoire *''MRSA'': CONTACT, + GOUTELETTES si respiratoire *''Staph peau'': CONTACT *''TBC active'': AIR *''TBC latente'': rien *''Rougeole'': AIR
undefine
undefine
{{vit.B12.jpg}}
!!Définition
*la ''Vitamine B12'', ou ''cobolamine'' est importante pour certains réactions biochimiques.
*les ''Causes'' de manque en B12 peuvent être une ''anémie pernicieuse'' (ou anémie de Biermer, caractérisée par un déficit en Facteur Intrinsèque à cause d’auto-anticorps contre les cellules pariétales), une ''diète vegan'', ou une ''mauvaise absorption (gastrectomie, gastrite, crohn, résection iléale'')
*la ''Clinique'' sera des signes d’anémie avec une ''glossite'' et possiblement des ''neuropathies'' (démyélinisations avec perte de proprioception, atteinte du MNS, démence,...)
*au ''labo'' on trouvera une ''anémie'' et un la ''B12 sérique basse''. En cas d’anémie pernicieuse on peut doser les anticorps-anti cellules pariétales.
*le ''Traitement'' implique de la ''vitamine B12 IM 1x/mois à vie'' (ou PO journalier possible si l’absorption est fonctionnelle).
![ext[vitiligo.pdf|./pdf/vitiligo.pdf]] <!-- Texte caché pour la recherche Vitilligo -->
undefine
undefine
undefine
undefine
undefine
{{wegener.jpg}}
!!Généralités
*le ''Wegener'' (ou //Granulomatose avec Polyangite//) est une ''vasculite des petits-vaisseaux, ANCA-positive''. (Comme le [[Churg-Strauss|Périartérite Noueuse/Churg-Strauss/Takayasu]])
*La ''Clinique'' comprend:
** une ''atteinte ORL'' (sinusite, epistaxis, otites, aphtes, épaississement gingival)
**une ''atteinte pulmonaire'' (toux, dyspnée, hemoptysie, pleurésie, sténose sous-glottique)
**une ''atteinte rénale'' (hématurie, protéinurie, glomérulonéphrite)
**une ''atteinte articulaire'' (arthralgies, myalgies), une atteinte oculaire et encore d’autres organes...
*Les ''investigations'' comprennent
**une ''Rx des poumons'' (nodules, cavités, infiltrats)
** un ''labo'' (doser les ANCA, le c-ANCA est spécifique)
**une ''biopsie des poumons'' qui peut confirmer le diagnostic
*Le ''pronostic est très mauvais'' avec souvent des ''décès à 1an si non traité''. Le décès implique souvent l’atteinte rénale, et les patients sont candidats à la greffe.
*Le ''traitement'' implique des ''corticoïdes'' et ''cyclophosphamides''.
{{wegener_rx.jpg}}
undefine
undefine
undefine
undefine
!!Définition
*le WPW est aussi appelé syndrome de pré-excitation.
*Il s'agit d'une association de ''pré-excitations'' et de ''tachycardies supraventriculaires paroxystiques'', avec pas forcément des QRS fins.
*a l'ECG on retrouve la fameuse @@background-color:Orange;''onde Delta''@@ au pied de l'onde R, ainsi qu'un @@background-color:Orange;''intervalle PR raccourci''@@.
*La base physiopathologique est une //voie de conduction anormale atrio-ventriculaire// (''faisceau de Kent'') qui court-circuite la conduction normale nodo-hisienne. Ce qui explique le racourcissement PR.
*La Clinque sera des ''syncopes'', des ''tachycardies'' et des ''palpitations''.
*Le ''Traitement'' se fait si symptomatique, via l'''Amiodarone'' qui est un anti-arythmique
*PS: le massage carotidien ou l'adénosine agissant sur le noeud AV, ils ne servent strictement a rien pour une pathologie de faisceau accessoire
{{WPW.jpg}}
undefine
{{zollinger-ellison.jpg}}
!!Généralités
*Le ''Syndrome de Zollinger-Ellison'' correspond à de ''multiples ulcères peptiques'' dus à une ''hyper-acidité'' influencée par la présence d'un ''gastrinome pancréatique''.
*Une majorité de ces tumeurs sont ''malignes''. Certaines sont dues au syndrome ''NEM 1''.
*les ''Complications'' possibles de cette pathologie sont:
**''Hemorragies digestives''
**''Perforations''
**''Metastases'' principalement hépatiques
*Au ''Labo'' on trouve une ''gastrine a jeun élevée''.
*Le ''Diagnostic'' passe par un ''test à la Sécrétine''. Normalement la Sécrétine n'entraine pas de réponse chez le sujet sain. Chez le ZE elle entraine une hausse de gastrine.
*le ''Traitement'' consiste en des ''IPP haute dose''
*Eventuellement de la Chir ± Chimio pour les cas métastatiques
{{gastrinome_secretine.jpg}}
undefine
{{zona.jpg}}
!!Définition
*le ''Zona '' est une ''réactivation du VZV'' dormant dans les ganglions des racines sensitives dorsales
*Les lésions s'étendant au niveau d'un ''dermatome''
*Se fait lors de stress, immunosuppression ou nouveaux-nés
*La maladie est ''contagieuse'' lorsque les lésions sont présentes
!!Clinique
*''Rash'' avec vésicules groupées sur fond erythémateux
*''Douleur''
*faible fièvre et malaise parfois
*Le site le plus fréquent est le ''thorax'', mais on peut aussi avoir les nerfs craniens et les membres
!!Traitement
*''analgesiques''
*''acyclovir''
undefine