<div class="tw-control-panel"><<tabs "[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] +[tag[$:/tags/ControlPanel]]" "$:/core/ui/ControlPanel/Basics">></div>
{
"tiddlers": {
"$:/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"
},
"$:/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-2014\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/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"text": "<svg class=\"tw-image-cancel-button tw-image-button\" viewBox=\"366 150 58 58\" width=\"22pt\" height=\"22pt\"><path d=\"M 414.76236 158.98764 C 403.77887 148.0041 385.97113 148.0041 374.98764 158.98764 C 364.0041 169.97113 364.0041 187.77887 374.98764 198.76236 C 385.97113 209.7459 403.77887 209.7459 414.76236 198.76236 C 425.7459 187.77887 425.7459 169.97113 414.76236 158.98764 M 385.3967 165.32954 L 385.3967 165.32954 L 394.77674 174.7096 L 404.3533 165.13303 C 405.53068 163.95566 407.4396 163.95566 408.61697 165.13303 C 409.79434 166.31041 409.79434 168.21932 408.61697 169.39669 L 399.0404 178.97325 L 408.42046 188.35331 C 409.59783 189.53068 409.59783 191.43959 408.42046 192.61697 L 408.42046 192.61697 C 407.24308 193.79434 405.33417 193.79434 404.1568 192.61697 L 394.77675 183.23692 L 385.5932 192.42046 C 384.41583 193.59783 382.50692 193.59783 381.32954 192.42046 L 381.32954 192.42046 C 380.15217 191.24308 380.15217 189.33417 381.32954 188.1568 C 381.32954 188.1568 381.32954 188.1568 381.32954 188.1568 L 381.32954 188.1568 L 381.32954 188.1568 L 390.51309 178.97326 L 381.13303 169.5932 C 379.95566 168.41583 379.95566 166.50692 381.13303 165.32954 L 381.13303 165.32954 C 382.3104 164.15217 384.21932 164.15217 385.3967 165.32954 C 385.3967 165.32954 385.3967 165.32954 385.3967 165.32954 Z\"/></svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"text": "<svg class=\"tw-image-close-button tw-image-button\" viewBox=\"222 150 56 56\" width=\"22pt\" height=\"22pt\"><path d=\"M 249.56668 185.88827 L 267.06757 203.38916 C 269.26427 205.58586 272.82582 205.58586 275.02252 203.38916 L 275.02252 203.38916 C 277.21922 201.19246 277.21922 197.63091 275.02252 195.43421 L 257.52163 177.93332 L 275.38916 160.06579 C 277.58586 157.86909 277.58586 154.30754 275.38916 152.11084 C 273.19246 149.91414 269.63091 149.91414 267.43421 152.11084 L 249.56668 169.97837 L 232.06579 152.47748 L 232.06579 152.47748 C 232.06579 152.47748 232.06579 152.47748 232.06579 152.47748 C 229.86909 150.28078 226.30754 150.28078 224.11084 152.47748 L 224.11084 152.47748 C 221.91414 154.674175 221.91414 158.23573 224.11084 160.43243 L 241.61173 177.93332 L 224.47748 195.06757 L 224.47748 195.06757 L 224.47748 195.06757 C 224.47748 195.06757 224.47748 195.06757 224.47748 195.06757 C 222.28078 197.26427 222.28078 200.82583 224.47748 203.02252 L 224.47748 203.02252 C 226.67418 205.21922 230.23573 205.21922 232.43243 203.02252 Z\"/></svg>\n"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"text": "<svg class=\"tw-image-delete-button tw-image-button\" viewBox=\"303 155 39 50\" width=\"17pt\" height=\"22pt\"><path d=\"M 333 164.25 L 333 157.25 C 333 156.14543 332.10457 155.25 331 155.25 L 314.75 155.25 C 314.75 155.25 314.75 155.25 314.75 155.25 C 313.64543 155.25 312.75 156.14543 312.75 157.25 L 312.75 164.25 L 303.75 164.25 L 303.75 168.75 L 306 168.75 L 306 201.75 L 306 201.75 L 306 201.75 C 306 203.40685 307.34315 204.75 309 204.75 L 336.75 204.75 C 338.40685 204.75 339.75 203.40685 339.75 201.75 L 339.75 168.75 L 342 168.75 L 342 164.25 Z M 317.25 160.75 L 317.25 160.75 C 317.25 160.19772 317.69772 159.75 318.25 159.75 C 318.25 159.75 318.25 159.75 318.25 159.75 L 327.5 159.75 C 328.05228 159.75 328.5 160.19772 328.5 160.75 L 328.5 164.25 L 317.25 164.25 L 317.25 160.75 Z M 310.5 168.75 L 312.75 168.75 L 312.75 200.25 L 310.5 200.25 Z M 317.25 168.75 L 319.5 168.75 L 319.5 200.25 L 317.25 200.25 Z M 324 168.75 L 326.25 168.75 L 326.25 200.25 L 324 200.25 Z M 330.75 168.75 L 333 168.75 L 333 200.25 L 330.75 200.25 Z\"/></svg>\n"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"text": "<svg class=\"tw-image-done-button tw-image-button\" viewBox=\"434 150 68 55\" width=\"22pt\" height=\"18pt\"><path d=\"M 438.49266 178.00797 L 439.00744 177.49319 C 441.35054 175.15008 445.14946 175.15004 447.49262 177.49309 L 452.50734 182.50757 C 454.8505 184.85063 458.6494 184.85058 460.99252 182.50748 L 488.50747 154.99255 C 490.85058 152.64944 494.6495 152.6494 496.99266 154.99246 L 497.50722 155.506995 C 499.8504 157.85009 499.8505 161.64908 497.5074 163.99228 C 497.50738 163.99229 497.50736 163.99231 497.50734 163.99233 L 460.9926 200.5077 C 458.64947 202.85087 454.85048 202.8509 452.50732 200.50778 C 452.5073 200.50777 452.5073 200.50777 452.5073 200.50776 L 438.49268 186.49327 C 436.14952 184.15013 436.1495 180.35114 438.49264 178.00799 C 438.49265 178.00798 438.49265 178.00797 438.49266 178.00797 Z\"/></svg>\n"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"text": "<svg class=\"tw-image-down-arrow tw-image-button\" viewBox=\"441 306 59 45\" width=\"24pt\" height=\"22pt\"><path d=\"M 441 306 L 470.25 351 L 499.5 306 Z\"/></svg>\n"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"text": "<svg class=\"tw-image-edit-button tw-image-button\" viewBox=\"244 193 20 22\" width=\"20pt\" height=\"22pt\"><path d=\"M 257.33334 196.80951 L 245.90476 207.2857 L 244 212.0476 L 248.7619 210.14284 L 260.19048 199.66665 Z M 259.2381 194.90475 L 258.28566 195.85716 L 261.14284 198.71428 L 262.09522 197.76187 Z M 261.14286 193 L 260.19042 193.95241 L 263.04762 196.80953 L 264 195.85714 Z M 244 213.72882 C 244 213.72882 247.4281 215.43353 250.8572 213.7288 C 254.28599 212.02405 261.14284 214.86531 261.14284 214.86531 L 261.14284 213.72884 C 261.14284 213.72884 254.28577 210.88755 250.8572 212.5923 C 247.42858 214.29712 244 212.59228 244 212.59228 Z\"/></svg>\n"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"text": "<svg class=\"tw-image-info-button tw-image-button\" viewBox=\"294 150 58 58\" width=\"22pt\" height=\"22pt\"><path d=\"M 342.76236 158.98764 C 331.77887 148.0041 313.97113 148.0041 302.98764 158.98764 C 292.0041 169.97113 292.0041 187.77887 302.98764 198.76236 C 313.97113 209.7459 331.77887 209.7459 342.76236 198.76236 C 353.7459 187.77887 353.7459 169.97113 342.76236 158.98764 M 326.5425 157.5 L 326.5425 157.5 C 327.72545 157.5 328.72201 157.91022 329.5337 158.73088 C 330.34465 159.55157 330.75 160.54402 330.75 161.7075 C 330.75 162.87172 330.33979 163.86316 329.51911 164.68385 C 328.69842 165.5045 327.70674 165.91501 326.5425 165.91501 C 325.39801 165.91501 324.4153 165.5045 323.5946 164.68385 C 322.77393 163.86316 322.36372 162.87172 322.36372 161.7075 C 322.36372 160.54402 322.76906 159.55157 323.58 158.73088 C 324.39171 157.91022 325.3793 157.5 326.5425 157.5 Z M 327.80211 190.47259 C 324.91945 195.49132 321.85778 198 318.61462 198 C 317.37452 198 316.38691 197.65158 315.65186 196.9555 C 314.9176 196.25866 314.54943 195.37617 314.54943 194.30782 C 314.54943 193.60202 314.71223 192.70572 315.03629 191.61813 L 319.0151 177.93651 C 319.39685 176.61922 319.58735 175.62754 319.58735 174.95991 C 319.58735 174.53996 319.40582 174.16692 319.04356 173.84286 C 318.68052 173.51905 318.18469 173.35701 317.55527 173.35701 C 317.26861 173.35701 316.92506 173.36677 316.5246 173.38548 L 316.89661 172.2407 L 326.59967 170.66627 L 328.31744 170.66627 L 322.44986 191.01638 C 322.12503 192.18064 321.963 192.94337 321.963 193.30666 C 321.963 193.51588 322.04862 193.71121 322.2204 193.89273 C 322.39218 194.07425 322.5737 194.16554 322.7642 194.16477 C 323.08903 194.16554 323.4131 194.02221 323.73792 193.73559 C 324.59605 193.02976 325.6267 191.75142 326.82838 189.90008 Z\"/></svg>\n"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"text": "<svg class=\"tw-image-new-button tw-image-button\" viewBox=\"83 81 50 50\" width=\"22pt\" height=\"22pt\"><path d=\"M 101.25 112.5 L 101.25 127.5 C 101.25 127.5 101.25 127.5 101.25 127.5 L 101.25 127.5 C 101.25 129.156855 102.593146 130.5 104.25 130.5 L 111.75 130.5 C 113.406854 130.5 114.75 129.156854 114.75 127.5 L 114.75 112.5 L 129.75 112.5 C 131.406854 112.5 132.75 111.156854 132.75 109.5 L 132.75 102 C 132.75 100.343146 131.406854 99 129.75 99 L 114.75 99 L 114.75 84 C 114.75 82.343146 113.406854 81 111.75 81 L 104.25 81 C 104.25 81 104.25 81 104.25 81 C 102.593146 81 101.25 82.343146 101.25 84 L 101.25 99 L 86.25 99 C 86.25 99 86.25 99 86.25 99 C 84.593146 99 83.25 100.343146 83.25 102 L 83.25 109.5 C 83.25 109.5 83.25 109.5 83.25 109.5 L 83.25 109.5 C 83.25 111.156855 84.593146 112.5 86.25 112.5 Z\"/></svg>\n"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"text": "<svg class=\"tw-image-options-button tw-image-button\" viewBox=\"434 218 68 68\" width=\"22pt\" height=\"22pt\"><path d=\"M 478.39696 232.53705 L 478.39696 232.53705 C 477.11453 231.85132 475.77877 231.30146 474.4106 230.88735 L 474.4106 218.24993 L 461.58944 218.24993 L 461.58944 230.88735 C 460.22126 231.30146 458.8855 231.85132 457.60308 232.53705 L 448.66825 223.60214 L 439.6022 232.66814 L 448.53716 241.60304 C 447.8515 242.88541 447.30158 244.22116 446.88747 245.58935 L 434.25 245.58935 L 434.25 258.41052 L 446.88747 258.41052 C 447.30158 259.7787 447.8515 261.11446 448.53716 262.39689 L 439.6022 271.33173 L 448.66825 280.39779 L 457.60308 271.46281 C 458.8855 272.14862 460.22126 272.69847 461.58944 273.11251 L 461.58944 285.74986 L 474.4106 285.74986 L 474.4106 273.11251 C 475.77877 272.69847 477.11453 272.14862 478.39696 271.46281 L 487.3318 280.39779 L 496.3977 271.33173 L 487.46287 262.39689 C 488.14854 261.11446 488.6984 259.7787 489.11257 258.41052 L 501.7499 258.41052 L 501.7499 245.58935 L 489.11257 245.58935 C 488.6984 244.22116 488.14854 242.88541 487.46287 241.60304 L 496.3977 232.66814 L 487.3318 223.60214 Z M 475.3328 244.66714 C 479.38253 248.71698 479.38253 255.2829 475.3328 259.33273 C 471.28297 263.3826 464.71706 263.3826 460.66723 259.33273 C 456.61737 255.2829 456.61737 248.71698 460.66723 244.66714 C 464.71706 240.61734 471.28297 240.61734 475.3328 244.66714\"/></svg>\n"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"text": "<svg class=\"tw-image-save-button tw-image-button\" viewBox=\"4 512 64 60\" width=\"22pt\" height=\"21pt\"><path d=\"M 13.5 537.75 L 11.5 537.75 C 11.5 537.75 11.5 537.75 11.5 537.75 C 7.6340064 537.75 4.4999994 540.884 4.5 544.75 L 4.5 564.5 L 4.5 564.5 C 4.5 564.5 4.5 564.5 4.5 564.5 L 4.5 564.5 C 4.5000006 568.366 7.634007 571.5 11.5 571.5 L 60.5 571.5 C 64.365993 571.5 67.5 568.366 67.5 564.5 L 67.5 544.75 C 67.5 540.884 64.365993 537.75 60.5 537.75 L 58.5 537.75 L 49.5 546.75 L 50 546.75 C 52.20914 546.75 54 548.54086 54 550.75 L 54 556.25 C 54 558.45914 52.20914 560.25 50 560.25 L 36 560.25 L 22 560.25 C 19.790861 560.25 18 558.45914 18 556.25 L 18 556.25 C 18 556.25 18 556.25 18 556.25 L 18 550.75 C 18 548.54086 19.790861 546.75 22 546.75 C 22 546.75 22 546.75 22 546.75 L 22.5 546.75 Z\"/><path d=\"M 16.37132 533.87132 L 33.87868 551.37868 C 35.050253 552.55025 36.949747 552.55025 38.12132 551.37868 L 55.62868 533.87132 C 56.800252 532.69975 56.800252 530.80025 55.62868 529.62868 C 55.06607 529.06607 54.30301 528.75 53.50736 528.75 L 48 528.75 C 46.343146 528.75 45 527.40685 45 525.75 L 45 516 C 45 514.34315 43.656854 513 42 513 L 30 513 C 28.343146 513 27 514.34315 27 516 L 27 525.75 C 27 527.40685 25.656854 528.75 24 528.75 L 18.492641 528.75 C 16.835786 528.75 15.492641 530.09315 15.492641 531.75 C 15.492641 532.54565 15.808711 533.3087 16.37132 533.87132 Z\"/></svg>\n"
},
"$:/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/Advanced/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/Advanced/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/Advanced/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/Advanced/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/Advanced/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/Advanced/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/Advanced/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/Advanced/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/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/Appearance/Palette/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Appearance/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Appearance/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Appearance/Palette/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Appearance/StoryView/Caption": {
"title": "$:/language/ControlPanel/Appearance/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/Appearance/StoryView/Prompt": {
"title": "$:/language/ControlPanel/Appearance/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Appearance/Theme/Caption": {
"title": "$:/language/ControlPanel/Appearance/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Appearance/Theme/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Theme/Prompt",
"text": "Current theme:"
},
"$:/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/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/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Fields/Description": {
"title": "$:/language/ControlPanel/Plugins/Fields/Description",
"text": "Description"
},
"$:/language/ControlPanel/Plugins/Fields/Title": {
"title": "$:/language/ControlPanel/Plugins/Fields/Title",
"text": "Title"
},
"$:/language/ControlPanel/Plugins/Fields/Version": {
"title": "$:/language/ControlPanel/Plugins/Fields/Version",
"text": "Version"
},
"$:/language/ControlPanel/Saving/AutoSave/Disabled/Button": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Disabled/Button",
"text": "enable"
},
"$:/language/ControlPanel/Saving/AutoSave/Disabled/Prompt": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Disabled/Prompt",
"text": "Autosave is currently disabled"
},
"$:/language/ControlPanel/Saving/AutoSave/Enabled/Button": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Enabled/Button",
"text": "disable"
},
"$:/language/ControlPanel/Saving/AutoSave/Enabled/Prompt": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Enabled/Prompt",
"text": "Autosave is currently enabled"
},
"$:/language/ControlPanel/Saving/AutoSave": {
"title": "$:/language/ControlPanel/Saving/AutoSave",
"text": "Autosave"
},
"$:/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/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//"
},
"$:/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/Tools/Caption": {
"title": "$:/language/ControlPanel/Tools/Caption",
"text": "Tools"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/ControlPanel/Tools/Encryption/ChangePassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/ChangePassword/Button",
"text": "change password"
},
"$:/language/ControlPanel/Tools/Encryption/ClearPassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/ClearPassword/Button",
"text": "clear password"
},
"$:/language/ControlPanel/Tools/Encryption/Disabled/Prompt": {
"title": "$:/language/ControlPanel/Tools/Encryption/Disabled/Prompt",
"text": "This wiki is not encrypted"
},
"$:/language/ControlPanel/Tools/Encryption/Enabled/Prompt": {
"title": "$:/language/ControlPanel/Tools/Encryption/Enabled/Prompt",
"text": "This wiki is encrypted"
},
"$:/language/ControlPanel/Tools/Encryption/Heading": {
"title": "$:/language/ControlPanel/Tools/Encryption/Heading",
"text": "Encryption"
},
"$:/language/ControlPanel/Tools/Encryption/SetPassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/SetPassword/Button",
"text": "set password"
},
"$:/language/ControlPanel/Tools/Export/AllAsStaticHTML/Caption": {
"title": "$:/language/ControlPanel/Tools/Export/AllAsStaticHTML/Caption",
"text": "Download all tiddlers as static HTML"
},
"$:/language/ControlPanel/Tools/Export/Heading": {
"title": "$:/language/ControlPanel/Tools/Export/Heading",
"text": "Export"
},
"$:/language/ControlPanel/Tools/Import/Heading": {
"title": "$:/language/ControlPanel/Tools/Import/Heading",
"text": "Import"
},
"$:/language/ControlPanel/Tools/Import/Hint": {
"title": "$:/language/ControlPanel/Tools/Import/Hint",
"text": "Browse for files on your computer to import their contents (the individual tiddlers within TiddlyWiki HTML files are imported separately). You can also drag and drop files directly to the browser window."
},
"$:/language/ControlPanel/Tools/Import/Prompt": {
"title": "$:/language/ControlPanel/Tools/Import/Prompt",
"text": "Import:"
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/browser-startup": {
"title": "$:/language/Docs/ModuleTypes/browser-startup",
"text": "Startup functions that are only executed in the browser."
},
"$:/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/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/EditTemplate/Body/Hint": {
"title": "$:/language/EditTemplate/Body/Hint",
"text": "Use WikiText to add formatting, images, and dynamic features"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Button/Hide": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Hide",
"text": "hide preview"
},
"$:/language/EditTemplate/Body/Preview/Button/Show": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Show",
"text": "show preview"
},
"$:/language/EditTemplate/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/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/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/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/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"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "Welcome to TiddlyWiki, the non-linear personal web notebook.\n\nTo get started, first verify that you can save changes successfully - see http://tiddlywiki.com/ for detailed instructions.\n\nThen you can:\n\n* Create new tiddlers using the 'plus' button in the sidebar\n* Visit the [[control panel|$:/ControlPanel]] using the 'cog' button in the sidebar to customise your wiki\n** Stop this message appearing by changing the default tiddlers under the ''Basics'' tab\n* Save changes using the 'download' button in the sidebar\n* Learn more about [[WikiText|http://tiddlywiki.com/static/WikiText.html]]\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/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* `--help 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"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "Render an individual tiddler as a specified ContentType, defaults to `text/html` and save it to the specified filename:\n\n```\n--rendertiddler <title> <filename> [<type>]\n```\n"
},
"$:/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>]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\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"
},
"$:/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>\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\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\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.\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/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"type": "text/vnd.tiddlywiki",
"subtitle": "Download changes",
"footer": "<$button message=\"tw-close-tiddler\" class=\"btn btn-primary\">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=\"tw-close-tiddler\" class=\"btn btn-primary\">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"
},
"$:/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/Advanced/Matches": {
"title": "$:/language/Search/Advanced/Matches",
"text": "//<small><$count filter={{$:/temp/advancedsearch}}/> matches</small>//"
},
"$:/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/TiddlerFilters.html]]"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><$count filter=\"[!is[system]search{$:/temp/search}]\"/> matches</small>//"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/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/TagManager/Caption": {
"title": "$:/language/SideBar/Tags/TagManager/Caption",
"text": "Tag Manager"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/TiddlerInfo/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/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"text": ""
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"text": ""
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"text": ""
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"text": ""
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"text": ""
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"text": ""
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"text": ""
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"text": ""
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"text": ""
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki version 5 wikitext",
"name": "text/vnd.tiddlywiki",
"text": ""
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic wikitext",
"name": "text/x-tiddlywiki",
"text": ""
},
"$:/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\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\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\");\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/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) {\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 = path.resolve($tw.boot.corePath,$tw.config.editionsPath) + \"/\" + editionName;\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\tfs.readFile(this.params[0],\"utf8\",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.addTiddler(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/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 = this.params[1],\n\t\ttype = this.params[2] || \"text/html\";\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/rendertiddler.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\tpathname = this.params[2],\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\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\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent;\n\t\tfs.writeFileSync(path.resolve(pathname,encodeURIComponent(title) + extension),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/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 = this.params[1],\n\t\ttiddler = this.commander.wiki.getTiddler(title),\n\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/savetiddler.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif(!$tw.browser) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\thttp = require(\"http\");\t\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\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\tmatch = potentialRoute.path.exec(state.urlInfo.pathname);\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\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to TiddlyWiki5\"'\n\t\t\t\t});\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// Return a 404 if we didn't find a route\n\t\tif(!route) {\n\t\t\tresponse.writeHead(404);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t\t// Set the encoding for the incoming request\n\t\t// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers\n\t\trequest.setEncoding(\"utf8\");\n\t\t// Dispatch the appropriate method\n\t\tswitch(request.method) {\n\t\t\tcase \"GET\": // Intentional fall-through\n\t\t\tcase \"DELETE\":\n\t\t\t\troute.handler(request,response,state);\n\t\t\t\tbreak;\n\t\t\tcase \"PUT\":\n\t\t\t\tvar data = \"\";\n\t\t\t\trequest.on(\"data\",function(chunk) {\n\t\t\t\t\tdata += chunk.toString();\n\t\t\t\t});\n\t\t\t\trequest.on(\"end\",function() {\n\t\t\t\t\tstate.data = data;\n\t\t\t\t\troute.handler(request,response,state);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}).listen(port,host);\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n\t// Set up server\n\tthis.server = new SimpleServer({\n\t\twiki: this.commander.wiki\n\t});\n\t// Add route handlers\n\tthis.server.addRoute({\n\t\tmethod: \"PUT\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\tfields = JSON.parse(state.data);\n\t\t\t// Pull up any subfields in the `fields` object\n\t\t\tif(fields.fields) {\n\t\t\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\t\t\tfields[name] = field;\n\t\t\t\t});\n\t\t\t\tdelete fields.fields;\n\t\t\t}\n\t\t\t// Remove any revision field\n\t\t\tif(fields[\"revision\"]) {\n\t\t\t\tdelete fields[\"revision\"];\n\t\t\t}\n\t\t\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title}));\n\t\t\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\t\t\tresponse.writeHead(204, \"OK\",{\n\t\t\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\"\n\t\t\t});\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\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\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\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});\n\tthis.server.listen(port,host);\n\tconsole.log(\"Serving on \" + host + \":\" + port);\n\tconsole.log(\"(press ctrl-C to exit)\");\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/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\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.dateFormats = {\n\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\",\"December\"],\n\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\tshortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\tshortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n// suffixes for dates, eg \"1st\",\"2nd\",\"3rd\"...\"30th\",\"31st\"\n\tdaySuffixes: [\"st\",\"nd\",\"rd\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\n\t\t\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\n\t\t\"st\",\"nd\",\"rd\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\n\t\t\"st\"],\n\tam: \"am\",\n\tpm: \"pm\"\n};\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\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];\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 tiddlers = JSON.parse(text),\n\t\tresult = [],\n\t\tgetKnownFields = function(tid) {\n\t\t\tvar fields = {};\n\t\t\t\"title text created creator modified modifier type tags\".split(\" \").forEach(function(value) {\n\t\t\t\tif(tid[value] !== null) {\n\t\t\t\t\tfields[value] = tid[value];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn fields;\n\t\t};\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tresult.push(getKnownFields(tiddlers[t]));\n\t}\n\treturn result;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"title": "$:/core/modules/deserializers.js",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/filters/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\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/backlinks.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/commands.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\t// Convert the source to an array if necessary\n\tif(!$tw.utils.isArray(source)) {\n\t\tvar copy = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcopy.push(title);\n\t\t});\n\t\tsource = copy;\n\t}\n\t// Collect up the first tiddler with each unique value of the specified field\n\tvar results = [],values = {};\n\t$tw.utils.each(source,function(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\tvalues[value] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/each.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\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\t// Convert the source to an array if necessary\n\tif(!$tw.utils.isArray(source)) {\n\t\tvar copy = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcopy.push(title);\n\t\t});\n\t\tsource = copy;\n\t}\n\t// Collect up the first tiddler with each unique day value of the specified field\n\tvar results = [],values = [];\n\t$tw.utils.each(source,function(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler && tiddler.fields[operator.operand]) {\n\t\t\tvar value = toDate(tiddler.fields[operator.operand]);\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/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).toLowerCase(),\n\t\tisTitle = fieldname === \"title\";\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title),\n\t\t\ttext = tiddler ? tiddler.getFieldString(fieldname) : (isTitle ? title : null),\n\t\t\tmatch;\n\t\tif(text !== null) {\n\t\t\tif(operator.regexp) {\n\t\t\t\tmatch = !!operator.regexp.exec(text);\n\t\t\t} else {\n\t\t\t\tmatch = text === operator.operand;\n\t\t\t}\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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 self = this,\n\t\tresults = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t// Return the fields on the specified tiddler\n\t\tvar tiddler = options.wiki.getTiddler(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\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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/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\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = $tw.utils.hop(tiddler.fields,operator.operand) && tiddler.fields[operator.operand] !== \"\";\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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/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 self = this,\n\t\tresults = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t// Return the fields on the specified tiddler\n\t\tvar data = options.wiki.getTiddlerData(title,{});\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tif(title !== options.currTiddlerTitle) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\tif(prefix === \"!\") {\n\t\t\t$tw.utils.each(source,function(title) {\n\t\t\t\tcheckTiddler(title);\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.indexOf(options.currTiddlerTitle) !== -1) {\n\t\t\t\tresults.push(options.currTiddlerTitle);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(prefix === \"!\") {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tcheckTiddler(title);\n\t\t\t});\n\t\t} else {\n\t\t\tresults.push(options.currTiddlerTitle);\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\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.isImageTiddler(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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\t\tmissingTitles;\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\tmissingTitles = options.wiki.getMissingTitles();\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tvar match = missingTitles.indexOf(title) !== -1;\n\t\t\tif(prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif(prefix !== \"!\") {\n\t\t\tmissingTitles = options.wiki.getMissingTitles();\n\t\t\t$tw.utils.each(missingTitles,function(title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,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\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tvar match = orphanTitles.indexOf(title) !== -1;\n\t\t\tif(prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tvar match = orphanTitles.indexOf(title) !== -1;\n\t\t\tif(prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\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\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.isShadowTiddler(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\tif(prefix !== \"!\") {\n\t\t\t$tw.utils.each(options.wiki.shadowTiddlers,function(tiddler,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tcheckTiddler(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\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.isSystemTiddler(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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/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\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.tiddlerExists(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/tiddler.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n};\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tvar isFilterOperator = isFilterOperators[operator.operand];\n\tif(isFilterOperator) {\n\t\treturn isFilterOperator(source,operator.prefix,options);\n\t} else {\n\t\treturn [\"Filter Error: Unknown operand for the 'is' filter operator\"];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/filters/is.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array if necessary\n\tif(!$tw.utils.isArray(source)) {\n\t\tvar copy = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcopy.push(title);\n\t\t});\n\t\tsource = copy;\n\t}\n\t// Slice the array if necessary\n\tvar limit = Math.min(source.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = source.slice(source.length - limit);\n\t} else {\n\t\tresults = source.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\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\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\tlist = options.wiki.getTiddlerList(tr.title || options.currTiddlerTitle,tr.field,tr.index);\n\tfunction checkTiddler(title) {\n\t\tvar match = list.indexOf(title) !== -1;\n\t\tif(operator.prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\tif(operator.prefix !== \"!\") {\n\t\t\tresults = list;\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tcheckTiddler(title);\n\t\t\t});\n\t\t}\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 results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\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\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\t$tw.utils.each(source,function(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\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.slice(0,Math.min(count,source.length));\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1;\n\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.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\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.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\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.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\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.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\t\tpushModules = function(type) {\n\t\t\t$tw.utils.each($tw.modules.types[type],function(moduleInfo,moduleName) {\n\t\t\t\tresults.push(moduleName);\n\t\t\t});\n\t\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tpushModules(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tpushModules(title);\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\n\tfunction checkTiddler(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\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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/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\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar match = title.substr(0,operator.operand.length).toLowerCase() === operator.operand.toLowerCase();\n\t\tif(operator.prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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\n\tfunction checkTiddler(title) {\n\t\tvar match = list.indexOf(title);\n\t\t// decrement 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\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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/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\tisSameDay = function(dateField,dateString) {\n\t\t\tvar date1 = (new Date(dateField)).setHours(0,0,0,0),\n\t\t\t\tdate2 = (new Date($tw.utils.parseDate(dateString))).setHours(0,0,0,0);\n\t\t\treturn date1 === date2;\n\t\t};\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = isSameDay(tiddler.fields.modified,operator.operand);\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\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\treturn options.wiki.search(operator.operand,{\n\t\ttitles: source,\n\t\tinvert: invert\n\t});\n};\n\n})();\n",
"title": "$:/core/modules/filters/search.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,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,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,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,operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results;\n\tif($tw.utils.isArray(source)) {\n\t\tresults = source;\n\t} else {\n\t\tresults = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n}\n\n})();\n",
"title": "$:/core/modules/filters/sort.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\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = tiddler.hasTag(operator.operand);\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\t// Sort the results if we are matching a tag\n\tif(operator.prefix !== \"!\") {\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\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tagging.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\t$tw.utils.pushTop(results,tiddler.fields.tags);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tags.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = tiddler.fields[operator.operator] === operator.operand;\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t// If we're filtering a hashmap we change the behaviour to pass through missing tiddlers\n\t\tif(operator.prefix !== \"!\") {\n\t\t\tresults.push(operator.operand);\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tcheckTiddler(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/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\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title),\n\t\t\tmatch = tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0;\n\t\tif(operator.prefix !== \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\t$tw.utils.pushTop(results,title);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/untagged.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering 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 within a filter string\n\tresults: 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\tcase '{': // Curly brackets\n\t\t\toperator.indirect = true;\n\t\t\tnextBracketPos = filterString.indexOf('}',p);\n\t\t\tbreak;\n\t\tcase '[': // Square brackets\n\t\t\tnextBracketPos = filterString.indexOf(']',p);\n\t\t\tbreak;\n\t\tcase '/': // regexp brackets\n\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\tif(rexMatch) {\n\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\t\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-)?)(?:(\\[)|(\"(?:[^\"])*\")|('(?:[^'])*')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow \"Syntax error in filter expression\";\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,currTiddlerTitle,tiddlerList) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,tiddlerList || this.tiddlers,currTiddlerTitle);\n};\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,currTiddlerTitle) {\n\t\t\treturn [\"Filter error: \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,currTiddlerTitle) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [];\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operatorFunction = filterOperators[operator.operator] || filterOperators.field || function(source,operator,operations) {\n\t\t\t\t\t\treturn [\"Filter Error: unknown operator '\" + operator.operator + \"'\"];\n\t\t\t\t\t},\n\t\t\t\t\toperand = operator.operand;\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\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\tcurrTiddlerTitle: currTiddlerTitle\n\t\t\t\t\t\t});\n\t\t\t\taccumulator = results;\n\t\t\t});\n\t\t\treturn results;\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,currTiddlerTitle) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,currTiddlerTitle));\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,currTiddlerTitle) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,currTiddlerTitle));\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,currTiddlerTitle) {\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 = results.slice(0);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,currTiddlerTitle));\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 array/hashmap of tiddler titles\n\treturn function(source,currTiddlerTitle) {\n\t\tsource = source || self.tiddlers;\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,currTiddlerTitle);\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/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/makedatauri.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert the content of a tiddler to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\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})();\n",
"title": "$:/core/modules/macros/makedatauri.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/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/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\tthis.tree = [{\n\t\ttype: \"raw\",\n\t\thtml: text\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(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/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: \"element\",\n\t\ttag: \"pre\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/textparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$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.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis. For example:\n\n```\n\tThis is ''bold'' text\n\n\tThis is //italic// text\n\n\tThis is __underlined__ text\n\n\tThis is ^^superscript^^ text\n\n\tThis is ,,subscript,, text\n\n\tThis is ~~strikethrough~~ text\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"emphasis\";\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// Figure out which element and closing regexp to use\n\tvar tag,reEnd;\n\tswitch(this.match[0]) {\n\t\tcase \"''\": // Bold\n\t\t\ttag = \"strong\";\n\t\t\treEnd = /''/mg;\n\t\t\tbreak;\n\t\tcase \"//\": // Italics\n\t\t\ttag = \"em\";\n\t\t\treEnd = /\\/\\//mg;\n\t\t\tbreak;\n\t\tcase \"__\": // Underline\n\t\t\ttag = \"u\";\n\t\t\treEnd = /__/mg;\n\t\t\tbreak;\n\t\tcase \"^^\": // Superscript\n\t\t\ttag = \"sup\";\n\t\t\treEnd = /\\^\\^/mg;\n\t\t\tbreak;\n\t\tcase \",,\": // Subscript\n\t\t\ttag = \"sub\";\n\t\t\treEnd = /,,/mg;\n\t\t\tbreak;\n\t\tcase \"~~\": // Strikethrough\n\t\t\ttag = \"strike\";\n\t\t\treEnd = /~~/mg;\n\t\t\tbreak;\n\t}\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: tag,\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis.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: \"tw-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"$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: \"element\",\n\t\ttag: \"$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// 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\tvar match = 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\" + this.match[1].length, \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 && !!this.parseTokenRegExp(this.parser.source,this.parser.pos,/(\\r?\\n(?:\\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 a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar node = {\n\t\ttype: \"whitespace\",\n\t\tstart: pos\n\t};\n\tvar re = /(\\s)+/g;\n\tre.lastIndex = pos;\n\tvar match = re.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t}\n\treturn null;\n};\n\n/*\nConvenience wrapper for parseWhiteSpace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar whitespace = this.parseWhiteSpace(source,pos);\n\tif(whitespace) {\n\t\treturn whitespace.end;\n\t}\n\treturn pos;\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"([^\"]*)\")|(?:'([^']*)')/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[2] : match[1];\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>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = this.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\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 = this.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = this.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 = this.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 = this.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 = this.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = this.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 = this.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = this.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 = this.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = this.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = this.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = this.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 = this.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 = this.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 = this.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/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"tag\", 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 = this.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = this.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = this.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tpos = token.end;\n\t// Process attributes\n\tvar attribute = this.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 = this.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = this.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 = this.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 = this.parseTokenRegExp(source,pos,/(\\r?\\n(?:\\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.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// If it starts with a $ then we'll let anything go\n\tif(tag.charAt(0) === \"$\") {\n\t\treturn true;\n\t// If it starts with a dash then it's not legal\n\t} else if(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/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]+)))/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]\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]+)))/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]\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*([^)]*)\\)(\\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]+)))?/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];\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\\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}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"macrodef\",\n\t\tname: this.match[1],\n\t\tparams: params,\n\t\ttext: text\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/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\nvar 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.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(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: \"tw-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$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 = [\"tw-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\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\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = 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\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: \"tw-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/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// 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\tvar vAlign = $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\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// Get the match details\n\tvar textRef = $tw.utils.trim(this.match[1]),\n\t\ttr = $tw.utils.parseTextReference(textRef),\n\t\ttargetTitle = tr.title,\n\t\ttargetField = tr.field,\n\t\ttargetIndex = tr.index,\n\t\ttemplate = $tw.utils.trim(this.match[2]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\tvar tiddlerNode = {\n\t\ttype: \"element\",\n\t\ttag: \"$tiddler\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t},\n\t\tisBlock: true,\n\t\tchildren: [transcludeNode]\n\t};\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t} else {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\tif(targetField) {\n\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t}\n\t\tif(targetIndex) {\n\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t}\n\t}\n\treturn [tiddlerNode];\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 textRef = $tw.utils.trim(this.match[1]),\n\t\ttr = $tw.utils.parseTextReference(textRef),\n\t\ttargetTitle = tr.title,\n\t\ttargetField = tr.field,\n\t\ttargetIndex = tr.index,\n\t\ttemplate = $tw.utils.trim(this.match[2]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$transclude\",\n\t\t\tattributes: {}\n\t\t};\n\tvar tiddlerNode = {\n\t\ttype: \"element\",\n\t\ttag: \"$tiddler\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t},\n\t\tchildren: [transcludeNode]\n\t};\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t} else {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\tif(targetField) {\n\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t}\n\t\tif(targetIndex) {\n\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t}\n\t}\n\treturn [tiddlerNode];\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\tvar text = 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\nvar textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z0-9_\\\\-\\u00df-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9_\\\\-\\u00c0-\\u00de\\u00df-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tanyLetterStrict: \"[A-Za-z0-9\\u00c0-\\u00de\\u00df-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\ntextPrimitives.unWikiLink = \"~\";\ntextPrimitives.wikiLink = textPrimitives.upperLetter + \"+\" +\n\ttextPrimitives.lowerLetter + \"+\" +\n\ttextPrimitives.upperLetter +\n\ttextPrimitives.anyLetter + \"*\";\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(textPrimitives.unWikiLink + \"?\" + 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) === textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp(textPrimitives.anyLetterStrict,\"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: \"element\",\n\t\ttag: \"$link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\tthis.tree.push.apply(this.tree,this.parseInlineRun());\n\t} else {\n\t\tthis.tree.push.apply(this.tree,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule = undefined,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar tree = [];\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t}\n\treturn tree;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,nextMatch.matchIndex)});\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,terminatorMatch.index)});\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,inlineRuleMatch.matchIndex)});\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tvar match = 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// Accumulate the titles of shadow tiddlers that have changed as a result of this switch\n\tvar changedTiddlers = {};\n\t$tw.utils.each(this.wiki.shadowTiddlers,function(shadowInfo,title) {\n\t\tif(unregisteredTiddlers.indexOf(shadowInfo.source) !== -1) {\n\t\t\tchangedTiddlers[title] = true; // isDeleted?\n\t\t}\n\t});\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Accumulate the affected shadow tiddlers\n\t$tw.utils.each(this.wiki.shadowTiddlers,function(shadowInfo,title) {\n\t\tif(registeredTiddlers.indexOf(shadowInfo.source) !== -1) {\n\t\t\tchangedTiddlers[title] = false; // isDeleted?\n\t\t}\n\t});\n\t// Issue change events for the modified tiddlers\n\t$tw.utils.each(changedTiddlers,function(status,title) {\n\t\tself.wiki.enqueueTiddlerEvent(title,status);\n\t});\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"title": "$:/core/modules/pluginswitcher.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());\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) {\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 link = document.createElement(\"a\");\n\tlink.setAttribute(\"target\",\"_blank\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\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 return 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\t\n\tfile.Write(text);\n\tfile.Close();\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\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\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/msdownload.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.pathname;\n\t\t// Test for a Windows path of the form /x:/blah/blah\n\t\tif(/^\\/[A-Z]\\:\\//i.test(pathname)) {\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}\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\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\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// Error\n \tcallback(\"Error saving to TWEdit: \" + event.target.error.code);\n };\n\t// Get the file system\n window.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n \t// Now we've got the filesystem, get the fileEntry\n fileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n \t// Now we've got the fileEntry, create the writer\n \tfileEntry.createWriter(function(writer) {\n\t\t writer.onerror = errorHandler;\n\t\t writer.onwrite = function() {\n\t\t \tcallback(null);\n\t\t };\n\t\t writer.position = 0;\n\t\t writer.write(text);\n \t},errorHandler);\n }, errorHandler);\n }, errorHandler);\n return 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\thttp.send(data);\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/startup.js": {
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nThis is the main application 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\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f,commander;\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\tif($tw.browser) {\n\t\t$tw.utils.getBrowserInfo($tw.browser);\n\t}\n\t$tw.version = $tw.utils.extractVersionInfo();\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// Set up the parsers\n\t$tw.wiki.initParsers();\n\t// Set up the syncer object\n\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki});\n\t// Set up the command modules\n\t$tw.Commander.initCommands();\n\t// Kick off the language manager\n\t$tw.languageManager = 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// Get the default tiddlers\n\tvar defaultTiddlersTitle = \"$:/DefaultTiddlers\",\n\t\tdefaultTiddlersTiddler = $tw.wiki.getTiddler(defaultTiddlersTitle),\n\t\tdefaultTiddlers = [];\n\tif(defaultTiddlersTiddler) {\n\t\tdefaultTiddlers = $tw.wiki.filterTiddlers(defaultTiddlersTiddler.fields.text);\n\t}\n\t// Initialise the story and history\n\tvar storyTitle = \"$:/StoryList\",\n\t\tstory = [];\n\tfor(var t=0; t<defaultTiddlers.length; t++) {\n\t\tstory[t] = defaultTiddlers[t];\n\t}\n\t$tw.wiki.addTiddler({title: storyTitle, text: \"\", list: story},$tw.wiki.getModificationFields());\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Set up our beforeunload handler\n\t\twindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tvar confirmationMessage = null;\n\t\t\tif($tw.syncer.isDirty()) {\n\t\t\t\tconfirmationMessage = \"You have unsaved changes in TiddlyWiki\";\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup({\n\t\t\trootElement: document.body\n\t\t});\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t\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\t// Install the modal message mechanism\n\t\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t\t$tw.rootWidget.addEventListener(\"tw-modal\",function(event) {\n\t\t\t$tw.modal.display(event.param);\n\t\t});\n\t\t// Install the notification mechanism\n\t\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t\t$tw.rootWidget.addEventListener(\"tw-notify\",function(event) {\n\t\t\t$tw.notifier.display(event.param);\n\t\t});\n\t\t// Install the scroller\n\t\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t\t$tw.rootWidget.addEventListener(\"tw-scroll\",function(event) {\n\t\t\t$tw.pageScroller.handleEvent(event);\n\t\t});\n\t\t// Install the save action handlers\n\t\t$tw.rootWidget.addEventListener(\"tw-save-wiki\",function(event) {\n\t\t\t$tw.syncer.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-auto-save-wiki\",function(event) {\n\t\t\t$tw.syncer.saveWiki({\n\t\t\t\tmethod: \"autosave\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-download-file\",function(event) {\n\t\t\t$tw.syncer.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});\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tw-login\",function() {\n\t\t\t$tw.syncer.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-logout\",function() {\n\t\t\t$tw.syncer.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-server-refresh\",function() {\n\t\t\t$tw.syncer.handleRefreshEvent();\n\t\t});\n\t\t// Install the crypto event handlers\n\t\t$tw.rootWidget.addEventListener(\"tw-set-password\",function(event) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: \"Set a new password for this TiddlyWiki\",\n\t\t\t\tnoUserName: true,\n\t\t\t\tsubmitText: \"Set password\",\n\t\t\t\tcanCancel: true,\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tif(data) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\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\t$tw.rootWidget.addEventListener(\"tw-clear-password\",function(event) {\n\t\t\t$tw.crypto.setPassword(null);\n\t\t});\n\t\t// Ensure that $:/isEncrypted is maintained properly\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t\t}\n\t\t});\n\t\t// Set up the favicon\n\t\tvar faviconTitle = \"$:/favicon.ico\",\n\t\t\tfaviconLink = document.getElementById(\"faviconLink\"),\n\t\t\tsetFavicon = function() {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(faviconTitle);\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t\t\t\t}\n\t\t\t};\n\t\tsetFavicon();\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,faviconTitle)) {\n\t\t\t\tsetFavicon();\n\t\t\t}\n\t\t});\n\t\t// Set up the styles\n\t\tvar styleTemplateTitle = \"$:/core/ui/PageStylesheet\",\n\t\t\tstyleParser = $tw.wiki.parseTiddler(styleTemplateTitle);\n\t\t$tw.styleWidgetNode = $tw.wiki.makeWidget(styleParser,{document: $tw.fakeDocument});\n\t\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t\t$tw.styleElement = document.createElement(\"style\");\n\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t\t}\n\t\t});\n\t\t// Display the PageMacros, which includes the PageTemplate\n\t\tvar templateTitle = \"$:/core/ui/PageMacros\",\n\t\t\tparser = $tw.wiki.parseTiddler(templateTitle);\n\t\t$tw.pageWidgetNode = $tw.wiki.makeWidget(parser,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tw-page-container\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t$tw.pageWidgetNode.refresh(changes,$tw.pageContainer,null);\n\t\t});\n\t\t// Fix up the link between the root widget and the page container\n\t\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n\t\t// If we're being viewed on a data: URI then give instructions for how to save\n\t\tif(document.location.protocol === \"data:\") {\n\t\t\t$tw.utils.dispatchCustomEvent(document,\"tw-modal\",{\n\t\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t\t});\n\t\t}\n\t\t// Call browser startup modules\n\t\t$tw.modules.forEachModuleOfType(\"browser-startup\",function(title,module) {\n\t\t\tif(module.startup) {\n\t\t\t\tmodule.startup();\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// On the server, start a commander with the command line arguments\n\t\tcommander = new $tw.Commander(\n\t\t\t$tw.boot.argv,\n\t\t\tfunction(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tconsole.log(\"Error: \" + err);\n\t\t\t\t}\n\t\t\t},\n\t\t\t$tw.wiki,\n\t\t\t{output: process.stdout, error: process.stderr}\n\t\t);\n\t\tcommander.execute();\n\t}\n\n};\n\n})();\n",
"title": "$:/core/modules/startup.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/storyviews/classic.js": {
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar 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// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tw-scroll\", target: targetElement});\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\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 ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out\"},\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// 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(function() {\n\t\twidget.removeChildDomNodes();\n\t},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 ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out\"},\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// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tw-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\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// Remove the element at the end of the transition\n\tsetTimeout(function() {\n\t\tif(targetElement.parentNode) {\n\t\t\twidget.removeChildDomNodes();\n\t\t}\n\t},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 ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Make all the tiddlers position absolute, and hide all but the first one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\tif(index) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\tdomNode.style.position = \"absolute\";\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// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.setStyle(targetElement,[\n\t\t{position: \"absolute\"},\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 ease-in, opacity \" + duration + \"ms ease-in\"},\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\tvar scale = 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 ease-in, opacity \" + duration + \"ms ease-in\"},\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 \"title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"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// Make the newly inserted node position absolute and hidden\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"},\n\t\t{position: \"absolute\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Set up the tiddler that is being closed\n\t$tw.utils.setStyle(targetElement,[\n\t\t{position: \"absolute\"},\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.setStyle(toWidgetDomNode,[\n\t\t\t{position: \"absolute\"},\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 ease-in, opacity \" + duration + \"ms ease-in\"},\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 ease-in, opacity \" + duration + \"ms ease-in\"},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(function() {\n\t\t// Delete the DOM node when the transition is over\n\t\twidget.removeChildDomNodes();\n\t},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})();",
"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:\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\"));\n\t// Find a working syncadaptor\n\tthis.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!self.syncadaptor && module.adaptorClass) {\n\t\t\tself.syncadaptor = new module.adaptorClass(self);\n\t\t}\n\t});\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\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// Listen out for lazyLoad events\n\tif(this.syncadaptor) {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\n\t}\n\t// Get the login status\n\tthis.getStatus(function (err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nConstants\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleAutoSave = \"$:/config/AutoSave\";\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/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields[\"revision\"],\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t}\n\t});\n};\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSyncer.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\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSyncer.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\",\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert(\"Error while saving:\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t$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 we've got a syncadaptor or autosave is disabled\n\tif(method === \"autosave\") {\n\t\tif(this.syncadaptor || this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\t\treturn false;\n\t\t}\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)) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\tif(method !== \"download\") {\n\t\t\t\tthis.readTiddlerInfo();\n\t\t\t\tthis.taskQueue = {};\n\t\t\t}\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*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(this.wiki.getTiddler(tiddlerFields.title),tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t} else {\n\t\t\t\tself.wiki.deleteTiddler(self.titleUserName);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger another sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(\"Error retrieving skinny tiddler list:\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = new Date(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,changes);\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Queue up a sync task to load this tiddler\n\tthis.enqueueSyncTask({\n\t\ttype: \"load\",\n\t\ttitle: title\n\t});\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: \"Login to TiddlySpace\",\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = new Date();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tif(!$tw.utils.hop(this.tiddlerInfo,task.title)) {\n\t\tthis.tiddlerInfo[task.title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1\n\t\t}\n\t}\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t}\n\t// Process the queue\n\tif(this.syncadaptor) {\n\t\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n\t}\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif(this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\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\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 = new Date();\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;\t\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}\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\t// Invoke the callback\n\t\t\tcallback(null);\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.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})();\n",
"title": "$:/core/modules/tiddler.js",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/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\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback) {\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\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/utils/crypto.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/animations/slide.js",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"title": "$:/core/modules/utils/dom/animator.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif(document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n// Setup constants for the current browser\nexports.getBrowserInfo = function(info) {\n\tinfo.isIE = (/msie|trident/i.test(navigator.userAgent));\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/browser.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.split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function() {\n\tif(\"scrollX\" in window) {\n\t\treturn {x: window.scrollX, y: window.scrollY};\n\t} else {\n\t\treturn {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};\n\t}\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tif(window.localStorage) {\n\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\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/*\nConstruct and dispatch a custom event\n*/\nexports.dispatchCustomEvent = function(target,name,members) {\n\tvar event = document.createEvent(\"Event\");\n\tevent.initEvent(name,true,true);\n\t$tw.utils.each(members,function(member,name) {\n\t\tevent[name] = member;\n\t});\n\ttarget.dispatchEvent(event); \n};\n\n\n})();\n",
"title": "$:/core/modules/utils/dom.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this.responseText,this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback(\"XMLHttpRequest error code: \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\trequest.send(data);\n\treturn request;\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/http.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"enter\": 13,\n\t\"escape\": 27\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nexports.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(\"+\"),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase();\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(namedKeys[s]) {\n\t\t\tinfo.keyCode = namedKeys[s];\n\t\t}\n\t}\n\treturn info;\n};\n\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\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 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,\"modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"modal\");\n\t$tw.utils.addClass(modalHeader,\"modal-header\");\n\t$tw.utils.addClass(modalBody,\"modal-body\");\n\t$tw.utils.addClass(modalLink,\"btn btn-large btn-block btn-success\");\n\t$tw.utils.addClass(modalFooter,\"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 titleText;\n\tif(tiddler && tiddler.fields && tiddler.fields.subtitle) {\n\t\ttitleText = tiddler.fields.subtitle;\n\t} else {\n\t\ttitleText = title;\n\t}\n\tvar headerParser = this.wiki.parseText(\"text/vnd.tiddlywiki\",titleText,{parseAsInline: true}),\n\t\theaderWidgetNode = this.wiki.makeWidget(headerParser,{parentWidget: $tw.rootWidget, document: document});\n\theaderWidgetNode.render(headerTitle,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t});\n\t// Render the body of the message\n\tvar bodyParser = this.wiki.parseTiddler(title),\n\t\tbodyWidgetNode = this.wiki.makeWidget(bodyParser,{parentWidget: $tw.rootWidget, document: document});\n\tbodyWidgetNode.render(modalBody,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t});\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink\n\t\tmodalLink.appendChild(document.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.appendChild(document.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerText;\n\tif(tiddler && tiddler.fields && tiddler.fields.footer) {\n\t\tfooterText = tiddler.fields.footer;\n\t} else {\n\t\tfooterText = '<$button message=\"tw-close-tiddler\" class=\"btn btn-primary\">Close</$button>';\n\t}\n\tvar footerParser = this.wiki.parseText(\"text/vnd.tiddlywiki\",footerText,{parseAsInline: true}),\n\t\tfooterWidgetNode = this.wiki.makeWidget(footerParser,{parentWidget: $tw.rootWidget, document: document});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t});\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\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 tw-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tw-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tw-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tw-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,\"tw-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 notification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration();\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,\"tw-notification\");\n\t// Render the body of the notification\n\tvar parser = this.wiki.parseTiddler(title),\n\t\twidgetNode = this.wiki.makeWidget(parser,{parentWidget: $tw.rootWidget, document: document});\n\twidgetNode.render(notification,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t});\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// 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.body;\n};\n\nPopup.prototype.show = function(options) {\n\tthis.cancel();\n\tthis.title = options.title;\n\tthis.wiki = options.wiki;\n\tthis.anchorDomNode = options.domNode;\n\t$tw.utils.addClass(this.anchorDomNode,\"tw-popup\");\n\tthis.rootElement.addEventListener(\"click\",this,false);\n};\n\nPopup.prototype.handleEvent = function(event) {\n\t// Dismiss the popup if we get a click on an element that doesn't have .tw-popup class\n\tif(event.type === \"click\") {\n\t\tvar node = event.target;\n\t\twhile(node && !$tw.utils.hasClass(node,\"tw-popup\")) {\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\tif(!node) {\n\t\t\tthis.cancel();\n\t\t}\n\t}\n};\n\nPopup.prototype.cancel = function() {\n\tif(this.anchorDomNode) {\n\t\t$tw.utils.removeClass(this.anchorDomNode,\"tw-popup\");\n\t\tthis.anchorDomNode = null;\t\t\n\t}\n\tthis.rootElement.removeEventListener(\"click\",this,false);\n\tif(this.title) {\n\t\tthis.wiki.deleteTiddler(this.title);\n\t\tthis.title = null;\n\t}\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\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Get the current popup state tiddler\n\tvar value = options.wiki.getTextReference(options.title,\"\");\n\t// Check if the popup is open by checking whether it matches \"(<x>,<y>)\"\n\tvar state = !this.readPopupState(options.title,value);\n\tif(\"force\" in options) {\n\t\tstate = options.force;\n\t}\n\tif(state) {\n\t\t// Set the position if we're opening it\n\t\tthis.cancel();\n\t\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\tthis.show(options);\n\t} else {\n\t\tthis.cancel();\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(title,text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tresult = false;\n\tif(this.title === title) {\n\t\tresult = popupLocationRegExp.test(text);\n\t}\n\treturn result;\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 `tw-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 === \"tw-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// Get the offset bounds of the element\n\tvar bounds = {\n\t\t\tleft: element.offsetLeft,\n\t\t\ttop: element.offsetTop,\n\t\t\twidth: element.offsetWidth,\n\t\t\theight: element.offsetHeight\n\t\t};\n\t// Walk up the tree adjusting the offset bounds by each offsetParent\n\twhile(element.offsetParent) {\n\t\telement = element.offsetParent;\n\t\tbounds.left += element.offsetLeft;\n\t\tbounds.top += element.offsetTop;\n\t}\n\t// Now get ready to scroll the body\n\tthis.cancelScroll();\n\tthis.startTime = new Date();\n\tvar scrollPosition = $tw.utils.getScrollPosition(),\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\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\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,window.innerWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,window.innerHeight);\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 = ((new Date()) - 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/fakedom.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n}\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text;\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value;\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n}\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n get: function() {\n \treturn this.children[0];\n }\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n set: function(value) {\n \tthis.attributes[\"class\"] = value;\n }\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes[\"value\"] || \"\";\n\t},\n set: function(value) {\n \tthis.attributes[\"value\"] = value;\n }\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n get: 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\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 }\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 set: function(value) {\n \tthis.isRaw = true;\n \tthis.rawHTML = value;\n }\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});\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};\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 = $tw.node && new Buffer(FILE_BUFFER_LENGTH);\n\nexports.copyFile = function(srcPath,dstPath) {\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\tvar parts = dirPath.split(path.sep);\n\tfor(var component=0; component<parts.length; component++) {\n\t\tvar subDirPath = parts.slice(0,component+1).join(path.sep);\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}\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})();\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// Check if there is an existing alert with the same text and the same component\n\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\talertFields,\n\t\texistingCount,\n\t\tself = this;\n\t$tw.utils.each(existingAlerts,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t}\n\t});\n\tif(alertFields) {\n\t\texistingCount = alertFields.count || 1;\n\t} else {\n\t\talertFields = {\n\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\ttext: text,\n\t\t\ttags: [ALERT_TAG],\n\t\t\tcomponent: this.componentName\n\t\t};\n\t\texistingCount = 0;\n\t}\n\talertFields.modified = new Date();\n\tif(++existingCount > 1) {\n\t\talertFields.count = existingCount;\n\t} else {\n\t\talertFields.count = undefined;\n\t}\n\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t// Log it too\n\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\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\tif(node.type === \"element\") {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes[name] = {type: \"string\", value: value};\n\t}\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.type === \"element\" && 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\tif(node.type === \"element\") {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\t\tif(node.attributes[\"class\"].type === \"string\") {\n\t\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t\t}\n\t\t\tif(classString !== \"\") {\n\t\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t\t}\n\t\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t\t}\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\tif(node.type === \"element\") {\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\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n})();\n",
"title": "$:/core/modules/utils/parsetree.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/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\ttry {\n\t\tvar jsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\nError: \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers)\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tw-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/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\tvar s = 0;\n\t$tw.utils.each(object,function() {s++;});\n\treturn s;\n};\n\n/*\nPush entries onto an array, removing them first if they already exist in the array\n\tarray: array to modify\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\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\t// Push the values on top of the main array\n\t\tarray.push.apply(array,value);\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};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function (date,template) {\n\tvar t = template.replace(/0hh12/g,$tw.utils.pad($tw.utils.getHours12(date)));\n\tt = t.replace(/hh12/g,$tw.utils.getHours12(date));\n\tt = t.replace(/0hh/g,$tw.utils.pad(date.getHours()));\n\tt = t.replace(/hh/g,date.getHours());\n\tt = t.replace(/mmm/g,$tw.config.dateFormats.shortMonths[date.getMonth()]);\n\tt = t.replace(/0mm/g,$tw.utils.pad(date.getMinutes()));\n\tt = t.replace(/mm/g,date.getMinutes());\n\tt = t.replace(/0ss/g,$tw.utils.pad(date.getSeconds()));\n\tt = t.replace(/ss/g,date.getSeconds());\n\tt = t.replace(/[ap]m/g,$tw.utils.getAmPm(date).toLowerCase());\n\tt = t.replace(/[AP]M/g,$tw.utils.getAmPm(date).toUpperCase());\n\tt = t.replace(/wYYYY/g,$tw.utils.getYearForWeekNo(date));\n\tt = t.replace(/wYY/g,$tw.utils.pad($tw.utils.getYearForWeekNo(date)-2000));\n\tt = t.replace(/YYYY/g,date.getFullYear());\n\tt = t.replace(/YY/g,$tw.utils.pad(date.getFullYear()-2000));\n\tt = t.replace(/MMM/g,$tw.config.dateFormats.months[date.getMonth()]);\n\tt = t.replace(/0MM/g,$tw.utils.pad(date.getMonth()+1));\n\tt = t.replace(/MM/g,date.getMonth()+1);\n\tt = t.replace(/0WW/g,$tw.utils.pad($tw.utils.getWeek(date)));\n\tt = t.replace(/WW/g,$tw.utils.getWeek(date));\n\tt = t.replace(/DDD/g,$tw.config.dateFormats.days[date.getDay()]);\n\tt = t.replace(/ddd/g,$tw.config.dateFormats.shortDays[date.getDay()]);\n\tt = t.replace(/0DD/g,$tw.utils.pad(date.getDate()));\n\tt = t.replace(/DDth/g,date.getDate()+$tw.utils.getDaySuffix(date));\n\tt = t.replace(/DD/g,date.getDate());\n\tvar tz = date.getTimezoneOffset();\n\tvar atz = Math.abs(tz);\n\tt = t.replace(/TZD/g,(tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60));\n\tt = t.replace(/\\\\(.)/g,\"$1\");\n\treturn t;\n};\n\nexports.getAmPm = function(date) {\n\treturn date.getHours() >= 12 ? $tw.config.dateFormats.pm : $tw.config.dateFormats.am;\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.config.dateFormats.daySuffixes[date.getDate()-1];\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) d=7;// JavaScript Sun=0, ISO Sun=7\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) d=7;// JavaScript Sun=0, ISO Sun=7\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\tvar desc = result + \" \" + units[t].name;\n\t\t\tif(futurep) {\n\t\t\t\tdesc = desc + \" from now\";\n\t\t\t} else {\n\t\t\t\tdesc = desc + \" ago\";\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: desc,\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: \"1 second ago\",\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\" and \" 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 e = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(1),10));\n\t\t}\n\t} else {\n\t\tvar c = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn String.fromCharCode(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape 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\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof window !== \"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 = /^\\s*([^!#]+)?(?:(?:!!([^\\s]+))|(?:##([^\\s]+)))?\\s*/mg,\n\t\tmatch = reTextRef.exec(textRef);\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\treturn {\n\t\t\ttitle: match[1],\n\t\t\tfield: match[2],\n\t\t\tindex: match[3]\n\t\t};\n\t} else {\n\t\t// If we couldn't parse it (eg it started with a)\n\t\treturn {\n\t\t\ttitle: textRef\n\t\t};\n\t}\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\nif($tw.browser) {\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tvar metatags = document.getElementsByTagName(\"meta\");\n\tfor(var t=0; t<metatags.length; t++) {\n\t\tvar m = metatags[t];\n\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\treturn m.content;\n\t\t}\n\t}\n\treturn null;\n};\n\n} else {\n\n// Server version\nexports.extractVersionInfo = function() {\n\treturn $tw.packageInfo.version;\n};\n\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})();\n",
"title": "$:/core/modules/utils/utils.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/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\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tself.wiki.readFiles(event.target.files,function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tw-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\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};\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 domNode = this.document.createElement(\"button\");\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [];\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(this.popup && this.isPoppedUp()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign classes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.to) {\n\t\t\tself.dispatchEvent({type: \"tw-navigate\", navigateTo: self.to, tiddlerTitle: self.getVariable(\"currentTiddler\")});\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nButtonWidget.prototype.isSelected = function() {\n\tvar tiddler = this.wiki.getTiddler(this.set);\n\treturn tiddler ? tiddler.fields.text === this.setTo : this.defaultSetValue === 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(this.popup,tiddler.fields.text) : false;\n\treturn result;\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\tvar tiddler = this.wiki.getTiddler(this.set);\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.set, text: this.setTo}));\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\");\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.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\treturn tiddler ? tiddler.hasTag(this.checkboxTag) : false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler && tiddler.hasTag(this.checkboxTag) !== checked) {\n\t\tvar newTags = (tiddler.fields.tags || []).slice(0),\n\t\t\tpos = newTags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewTags.splice(pos,1);\n\t\t}\n\t\tif(checked) {\n\t\t\tnewTags.push(this.checkboxTag);\n\t\t}\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{tags: newTags},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\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[\"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})();\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.getVariable(\"currentTiddler\")).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\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 = \"tw-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.handleDragEnterEvent = function(event) {\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],\"tw-dragover\");\n\t}\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// 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\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],\"tw-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\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],\"tw-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = this.wiki.readFiles(dataTransfer.files,function(tiddlerFieldsArray) {\n\t\tself.dispatchEvent({type: \"tw-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\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: \"tw-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 = decodeURI(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 = decodeURI(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/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: \"tw-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\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};\n\t\t\t\t\tself.dispatchEvent({type: \"tw-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-bitmap.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 300,\n\tDEFAULT_IMAGE_HEIGHT = 185;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tw-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\tthis.widthDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tw-edit-bitmapeditor-width\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleWidthChangeEvent\"\n\t\t}]\n\t});\n\tthis.heightDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tw-edit-bitmapeditor-height\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleHeightChangeEvent\"\n\t\t}]\n\t});\n\t// Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tparent.insertBefore(this.widthDomNode,nextSibling);\n\tparent.insertBefore(this.heightDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode,this.widthDomNode,this.heightDomNode);\n\t// Load the image into the canvas\n\tthis.loadCanvas();\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n};\n\n/*\nNote that the bitmap editor intentionally doesn't try to refresh itself because it would be confusing to have the image changing spontaneously while editting it\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t}\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n}\n\n/*\n** Update the input boxes with the actual size of the canvas\n*/\nEditBitmapWidget.prototype.updateSize = function() {\n\tthis.widthDomNode.value = this.currCanvas.width;\n\tthis.heightDomNode.value = this.currCanvas.height;\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleWidthChangeEvent = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(this.widthDomNode.value,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newWidth !== this.currCanvas.width) {\n\t\tthis.changeCanvasSize(newWidth,this.currCanvas.height);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleHeightChangeEvent = function(event) {\n\t// Get the new width\n\tvar newHeight = parseInt(this.heightDomNode.value,10);\n\t// Update if necessary\n\tif(newHeight > 0 && newHeight !== this.currCanvas.height) {\n\t\tthis.changeCanvasSize(this.currCanvas.width,newHeight);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseInt(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"),10);\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type,1.0),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,update));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-bitmap.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MIN_TEXT_AREA_HEIGHT = 100; // Minimum height of textareas in pixels\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditTextWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditTextWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tvar editInfo = this.getEditInfo();\n\tvar domNode = this.document.createElement(this.editTag);\n\tif(this.editType) {\n\t\tdomNode.setAttribute(\"type\",this.editType);\n\t}\n\tif(editInfo.value === \"\" && this.editPlaceholder) {\n\t\tdomNode.setAttribute(\"placeholder\",this.editPlaceholder);\n\t}\n\t// Assign classes\n\tif(this.editClass) {\n\t\tdomNode.className = this.editClass;\n\t}\n\t// Set the text\n\tif(this.editTag === \"textarea\") {\n\t\tdomNode.appendChild(this.document.createTextNode(editInfo.value));\n\t} else {\n\t\tdomNode.value = editInfo.value;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n\t// Fix height\n\tthis.fixHeight();\n};\n\n/*\nGet the tiddler being edited and current value\n*/\nEditTextWidget.prototype.getEditInfo = function() {\n\t// Get the edit value\n\tvar self = this,\n\t\tvalue,\n\t\tupdate;\n\tif(this.editIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\tupdate = function(value) {\n\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// Get the current tiddler and the field name\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t} else {\n\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\tswitch(this.editField) {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\n\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\tvalue = this.editDefault;\n\t\t\t}\n\t\t}\n\t\tupdate = function(value) {\n\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\tupdateFields = {\n\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t};\n\t\t\tupdateFields[self.editField] = value;\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t};\n\t}\n\treturn {value: value, update: update};\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditTextWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editDefault = this.getAttribute(\"default\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t// Get the editor element tag and type\n\tvar tag,type;\n\tif(this.editField === \"text\") {\n\t\ttag = \"textarea\";\n\t} else {\n\t\ttag = \"input\";\n\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\ttag = fieldModule.editTag;\n\t\t}\n\t\tif(fieldModule && fieldModule.editType) {\n\t\t\ttype = fieldModule.editType;\n\t\t}\n\t\ttype = type || \"text\";\n\t}\n\t// Get the rest of our parameters\n\tthis.editTag = this.getAttribute(\"tag\",tag);\n\tthis.editType = this.getAttribute(\"type\",type);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Completely rerender if any of our attributes have changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.editTitle]) {\n\t\tthis.updateEditor(this.getEditInfo().value);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/*\nUpdate the editor with new text. This method is separate from updateEditorDomNode()\nso that subclasses can override updateEditor() and still use updateEditorDomNode()\n*/\nEditTextWidget.prototype.updateEditor = function(text) {\n\tthis.updateEditorDomNode(text);\n};\n\n/*\nUpdate the editor dom node with new text\n*/\nEditTextWidget.prototype.updateEditorDomNode = function(text) {\n\t// Replace the edit value if the tiddler we're editing has changed\n\tvar domNode = this.domNodes[0];\n\tif(!domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.document.activeElement !== domNode) {\n\t\t\tdomNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nFix the height of textareas to fit their content\n*/\nEditTextWidget.prototype.fixHeight = function() {\n\tvar self = this,\n\t\tdomNode = this.domNodes[0];\n\tif(domNode && !domNode.isTiddlyWikiFakeDom && this.editTag === \"textarea\") {\n\t\t$tw.utils.nextTick(function() {\n\t\t\t// Resize the textarea to fit its content, preserving scroll position\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(),\n\t\t\t\tscrollTop = scrollPosition.y;\n\t\t\t// Set its height to auto so that it snaps to the correct height\n\t\t\tdomNode.style.height = \"auto\";\n\t\t\t// Calculate the revised height\n\t\t\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,MIN_TEXT_AREA_HEIGHT);\n\t\t\t// Only try to change the height if it has changed\n\t\t\tif(newHeight !== domNode.offsetHeight) {\n\t\t\t\tdomNode.style.height = newHeight + \"px\";\n\t\t\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t\t\t$tw.utils.forceLayout(domNode);\n\t\t\t\t// Check that the scroll position is still visible before trying to scroll back to it\n\t\t\t\tscrollTop = Math.min(scrollTop,self.document.body.scrollHeight - window.innerHeight);\n\t\t\t\twindow.scrollTo(scrollPosition.x,scrollTop);\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nHandle a dom \"input\" event\n*/\nEditTextWidget.prototype.handleInputEvent = function(event) {\n\tthis.saveChanges(this.domNodes[0].value);\n\tthis.fixHeight();\n\treturn true;\n};\n\nEditTextWidget.prototype.handleFocusEvent = function(event) {\n\tif(this.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.editFocusPopup,\n\t\t\twiki: this.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\nEditTextWidget.prototype.saveChanges = function(text) {\n\tvar editInfo = this.getEditInfo();\n\tif(text !== editInfo.value) {\n\t\teditInfo.update(text);\n\t}\n};\n\nexports[\"edit-text\"] = EditTextWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-text.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t// 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\t// Choose the appropriate edit widget\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type) || \"text\";\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t}\n\t}]);\n};\n\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\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index) {\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\tvar domNode = this.document.createElementNS(this.namespace,this.parseTreeNode.tag);\n\tthis.assignAttributes(domNode);\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]);\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\tvar changedAttributes = this.computeAttributes(),\n\t\taffectedTiddlers = this.wiki.filterTiddlers(this.filter,null,changedTiddlers);\n\tif(changedAttributes.filter || affectedTiddlers.length > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/encrypt.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar textNode = this.document.createTextNode($tw.utils.entityDecode(this.parseTreeNode.entity));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/entity.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tw-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tw-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tw-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tw-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\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar name = event.param.toLowerCase();\n\t\tif(name !== \"\" && !$tw.utils.hop(tiddler.fields,name)) {\n\t\t\tvar addition = this.wiki.getModificationFields();\n\t\t\taddition[name] = \"\";\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\t\t}\n\t}\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\" && event.param !== \"\") {\n\t\tvar modification = this.wiki.getModificationFields();\n\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t$tw.utils.pushTop(modification.tags,event.param);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\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/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(\"tw-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif(event.keyCode === self.keyInfo.keyCode && \n\t\t\tevent.shiftKey === self.keyInfo.shiftKey && \n\t\t\tevent.altKey === self.keyInfo.altKey && \n\t\t\tevent.ctrlKey === self.keyInfo.ctrlKey) {\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.keyInfo = $tw.utils.parseKeyDescriptor(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/keyboard.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tw-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tw-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? !(wikiLinksMacro.trim() === \"no\") : true;\n\t// Render the link if required\n\tif(useWikiLinks) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Create our element\n\tvar domNode = this.document.createElement(\"a\");\n\t// Assign classes\n\t$tw.utils.addClass(domNode,\"tw-tiddlylink\");\n\tif(this.isShadow) {\n\t\t$tw.utils.addClass(domNode,\"tw-tiddlylink-shadow\");\n\t}\n\tif(this.isMissing && !this.isShadow) {\n\t\t$tw.utils.addClass(domNode,\"tw-tiddlylink-missing\");\n\t} else {\n\t\tif(!this.isMissing) {\n\t\t\t$tw.utils.addClass(domNode,\"tw-tiddlylink-resolves\");\n\t\t}\n\t}\n\t// Set an href\n\tvar wikiLinkTemplateMacro = this.getVariable(\"tw-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\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"dragstart\", handlerObject: this, handlerMethod: \"handleDragStartEvent\"},\n\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\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 it's way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tw-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\n\t});\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nLinkWidget.prototype.handleDragStartEvent = function(event) {\n\tif(this.to) {\n\t\t// Set the dragging class on the element being dragged\n\t\t$tw.utils.addClass(event.target,\"tw-tiddlylink-dragging\");\n\t\t// Create the drag image elements\n\t\tthis.dragImage = this.document.createElement(\"div\");\n\t\tthis.dragImage.className = \"tw-tiddler-dragger\";\n\t\tvar inner = this.document.createElement(\"div\");\n\t\tinner.className = \"tw-tiddler-dragger-inner\";\n\t\tinner.appendChild(this.document.createTextNode(this.to));\n\t\tthis.dragImage.appendChild(inner);\n\t\tthis.document.body.appendChild(this.dragImage);\n\t\t// Astoundingly, we need to cover the dragger up: http://www.kryogenix.org/code/browser/custom-drag-image.html\n\t\tvar cover = this.document.createElement(\"div\");\n\t\tcover.className = \"tw-tiddler-dragger-cover\";\n\t\tcover.style.left = (inner.offsetLeft - 16) + \"px\";\n\t\tcover.style.top = (inner.offsetTop - 16) + \"px\";\n\t\tcover.style.width = (inner.offsetWidth + 32) + \"px\";\n\t\tcover.style.height = (inner.offsetHeight + 32) + \"px\";\n\t\tthis.dragImage.appendChild(cover);\n\t\t// Set the data transfer properties\n\t\tvar dataTransfer = event.dataTransfer;\n\t\t// First the image\n\t\tdataTransfer.effectAllowed = \"copy\";\n\t\tif(dataTransfer.setDragImage) {\n\t\t\tdataTransfer.setDragImage(this.dragImage.firstChild,-16,-16);\n\t\t}\n\t\t// Then the data\n\t\tdataTransfer.clearData();\n\t\tvar jsonData = this.wiki.getTiddlerAsJson(this.to),\n\t\t\ttextData = this.wiki.getTiddlerText(this.to,\"\");\n\t\t// IE doesn't like these content types\n\t\tif(!$tw.browser.isIE) {\n\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\tdataTransfer.setData(\"text/plain\",textData);\n\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURI(jsonData));\n\t\t}\n\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURI(jsonData));\n\t\tdataTransfer.setData(\"Text\",textData);\n\t\tevent.stopPropagation();\n\t} else {\n\t\tevent.preventDefault();\n\t}\n};\n\nLinkWidget.prototype.handleDragEndEvent = function(event) {\n\t// Remove the dragging class on the element being dragged\n\t$tw.utils.removeClass(event.target,\"tw-tiddlylink-dragging\");\n\t// Delete the drag image element\n\tif(this.dragImage) {\n\t\tthis.dragImage.parentNode.removeChild(this.dragImage);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Get the target tiddler title\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to]) {\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: \"tw-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tw-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) {\n\t\tthis.dispatchEvent({\n\t\t\ttype: this.catchMessage,\n\t\t\tparam: event.navigateTo\n\t\t});\n\t}\n\tif(this.catchSet) {\n\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/linkcatcher.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tthis.storyview = StoryView ? new StoryView(this) : null;\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.getVariable(\"currentTiddler\"));\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// 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\treturn true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tvar hasChanged = 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\treturn hasChanged;\n\t}\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();\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 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: \"tw-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tw-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tw-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tw-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tw-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tw-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tw-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tw-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tw-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tw-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\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.findTitleInStory = function(storyList,title,defaultIndex) {\n\tvar p = storyList.indexOf(title);\n\treturn p === -1 ? defaultIndex : p;\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\tif(storyList) {\n\t\t// See if the tiddler is already there\n\t\tvar slot = this.findTitleInStory(storyList,title,-1);\n\t\t// If not we need to add it\n\t\tif(slot === -1) {\n\t\t\t// First we try to find the position of the story element we navigated from\n\t\t\tslot = this.findTitleInStory(storyList,fromTitle,-1) + 1;\n\t\t\t// Add the tiddler\n\t\t\tstoryList.splice(slot,0,title);\n\t\t\t// Save the story\n\t\t\tthis.saveStoryList(storyList);\n\t\t}\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tvar titles = $tw.utils.isArray(title) ? title : [title];\n\t// Add a new record to the top of the history stack\n\tif(this.historyTitle) {\n\t\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t\t$tw.utils.each(titles,function(title) {\n\t\t\thistoryList.push({title: title, fromPageRect: fromPageRect});\n\t\t});\n\t\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n\t\tthis.wiki.addTiddler(new $tw.Tiddler());\n\t}\n};\n\n/*\nHandle a tw-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\tif(!event.navigateSuppressNavigation) {\n\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\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\t// Replace the specified tiddler with a draft in edit mode\n\tvar title = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.makeDraftTiddler(title),\n\t\tdraftTitle = draftTiddler.fields.title,\n\t\tstoryList = this.getStoryList();\n\tthis.removeTitleFromStory(storyList,draftTitle);\n\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(tiddler.hasField(\"draft.title\")) {\n\t\t// Delete the original tiddler\n\t\tvar originalTitle = tiddler.fields[\"draft.of\"];\n\t\t// Ask for confirmation if the tiddler has changed\n\t\tif(!confirm(\"Do you wish to delete the tiddler '\" + originalTitle + \"'\")) {\n\t\t\treturn false;\n\t\t}\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// Send a notification event\n\tthis.dispatchEvent({type: \"tw-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 drafts = [];\n\tthis.wiki.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdrafts.push(tiddler);\n\t\t}\n\t});\n\tif(drafts.length > 0) {\n\t\treturn drafts[0];\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle),\n\t\tdraftTitle = this.generateDraftTitle(targetTitle);\n\t// Save the initial value of the draft tiddler\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\tdo {\n\t\tvar draftTitle = \"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\tstoryTiddlerModified = false; // We have to special case saving the story tiddler itself\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(\"Do you wish to overwrite the tiddler '\" + draftTitle + \"'?\");\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Save the draft tiddler as the real tiddler\n\t\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined, \n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields()));\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t}\n\t\t\t\t// Send a notification event\n\t\t\t\tthis.dispatchEvent({type: \"tw-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.fields[\"draft.of\"],\n\t\tstoryList = this.getStoryList();\n\tif(draftTiddler && originalTitle) {\n\t\t// Remove the draft tiddler\n\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\t// Get the story details\n\tvar storyList = this.getStoryList();\n\t// Get the template tiddler if there is one\n\tvar templateTiddler = this.wiki.getTiddler(event.param);\n\t// Create the new tiddler\n\tvar title = this.wiki.generateNewTitle((templateTiddler && templateTiddler.fields.title) || \"New Tiddler\");\n\tvar tiddler = new $tw.Tiddler(this.wiki.getCreationFields(),{\n\t\ttext: \"Newly created tiddler\",\n\t\ttitle: title\n\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(tiddler);\n\t// Create the draft tiddler\n\tvar draftTitle = this.generateDraftTitle(title),\n\t\tdraftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\"\n\t\t},templateTiddler,\n\t\tthis.wiki.getCreationFields(),\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.title\": title,\n\t\t\t\"draft.of\": title\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top\n\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\tstoryList.splice(slot + 1,0,draftTitle);\n\t// Save the updated story\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\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// Process each tiddler\n\tvar importedTiddlers = [];\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\t// Add it to the store\n\t\tvar imported = self.wiki.importTiddler(new $tw.Tiddler(\n\t\t\tself.wiki.getCreationFields(),\n\t\t\tself.wiki.getModificationFields(),\n\t\t\ttiddlerFields\n\t\t));\n\t\tif(imported) {\n\t\t\timportedTiddlers.push(title);\n\t\t}\n\t});\n\t// Get the story and history details\n\tvar storyList = this.getStoryList(),\n\t\thistory = [];\n\t// Create the import report tiddler\n\tif(importedTiddlers.length === 0) {\n\t\treturn false;\n\t}\n\tvar title;\n\tif(importedTiddlers.length > 1) {\n\t\ttitle = this.wiki.generateNewTitle(\"$:/temp/ImportReport\");\n\t\tvar tiddlerFields = {\n\t\t\ttitle: title,\n\t\t\ttext: \"# [[\" + importedTiddlers.join(\"]]\\n# [[\") + \"]]\\n\"\n\t\t};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\tself.wiki.getCreationFields(),\n\t\t\ttiddlerFields,\n\t\t\tself.wiki.getModificationFields()\n\t\t));\n\t} else {\n\t\ttitle = importedTiddlers[0];\n\t}\n\t// Add it to the story\n\tif(storyList.indexOf(title) === -1) {\n\t\tstoryList.unshift(title);\n\t}\n\t// And to history\n\thistory.push(title);\n\t// Save the updated story and history\n\tthis.saveStoryList(storyList);\n\tthis.addToHistory(history);\n\treturn false;\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(tiddler,addition));\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\");\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 += \"tw-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 domNode = this.document.createElement(this.parseTreeNode.isBlock ? \"div\" : \"span\");\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tw-reveal\");\n\tdomNode.className = classes.join(\" \");\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,\"tw-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.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\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\tif(this.stateTitle) {\n\t\tvar state = this.wiki.getTextReference(this.stateTitle,this[\"default\"],this.getVariable(\"currentTiddler\"));\n\t\tswitch(this.type) {\n\t\t\tcase \"popup\":\n\t\t\t\tthis.readPopupState(state);\n\t\t\t\tbreak;\n\t\t\tcase \"match\":\n\t\t\t\tthis.readMatchState(state);\n\t\t\t\tbreak;\n\t\t\tcase \"nomatch\":\n\t\t\t\tthis.readMatchState(state);\n\t\t\t\tthis.isOpen = !this.isOpen;\n\t\t\t\tbreak;\n\t\t}\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,\"tw-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/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.setValue = this.getAttribute(\"value\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.setValue,this.parseTreeNode.params);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.value) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/set.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text),\n\t\ttextNode = 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\treturn false;\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\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Set context variables\n\tthis.setVariable(\"currentTiddler\",this.tiddlerTitle);\n\tthis.setVariable(\"missingTiddlerClass\",(this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tw-tiddler-exists\" : \"tw-tiddler-missing\");\n\tthis.setVariable(\"shadowTiddlerClass\",this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tw-tiddler-shadow\" : \"\");\n\tthis.setVariable(\"systemTiddlerClass\",this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tw-tiddler-system\" : \"\");\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*/\nTiddlerWidget.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\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.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Check for recursion\n\tvar recursionMarker = this.makeRecursionMarker();;\n\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\tthis.makeChildWidgets([{type: \"text\", text: \"Tiddler recursion error in transclude widget\"}]);\n\t\treturn;\n\t}\n\t// Set context variables for recursion detection\n\tthis.setVariable(\"transclusion\",recursionMarker);\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{parseAsInline: parseAsInline}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\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\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/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.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.viewTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function() {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/view.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tvariables: optional hashmap of context variables (see below)\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\nContext variables include:\n\tcurrentTiddler: title of the tiddler providing the context\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// If the variable doesn't exist then look for a macro module\n\tif(!(name in this.variables)) {\n\t\treturn this.evaluateMacroModule(name,actualParams,options.defaultValue);\n\t}\n\tvar variable = this.variables[name],\n\t\tvalue = variable.value || \"\";\n\t// Substitute any parameters specified in the definition\n\tvalue = this.substituteVariableParameters(value,variable.params,actualParams);\n\tvalue = this.substituteVariableReferences(value);\n\treturn value;\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)\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tname = name || \"transclusion\";\n\tvar output = [],\n\t\tnode = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name)) {\n\t\t\toutput.push(node.getVariable(name));\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn \"{\" + $tw.utils.hashString(output.join(\"\")) + \"}\";\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\n*/\nWidget.prototype.assignAttributes = function(domNode) {\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\tif(v !== undefined) {\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\tdomNode.setAttributeNS(null,a,v);\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);\t\t\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\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\treturn parent.findNextSiblingDomNode(index);\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\nexports.widget = Widget;\n\n})();\n",
"title": "$:/core/modules/widgets/widget.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki.js": {
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\";\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\ttiddler = this.getTiddler(tr.title);\n\t\tthis.addTiddler(new $tw.Tiddler(tiddler,{title: tr.title,text: value},this.getModificationFields()));\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) {\n\t\t\tfields = {};\n\t\t\tfields[tr.field] = value;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\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 = {};\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 created\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || {};\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || {};\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || {};\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 = {};\n\t\t\tself.eventsTriggered = false;\n\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || {};\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\nexports.deleteTiddler = function(title) {\n\tdelete this.tiddlers[title];\n\tthis.clearCache(title);\n\tthis.clearGlobalCache();\n\tthis.enqueueTiddlerEvent(title,true);\n};\n\nexports.tiddlerExists = function(title) {\n\treturn !!this.tiddlers[title];\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 title = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t};\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title.indexOf(\"$:/temp/\") === 0;\n};\n\n/*\nDetermines if a tiddler is a shadow tiddler, regardless of whether it has been overridden by a real tiddler\n*/\nexports.isShadowTiddler = function(title) {\n\treturn $tw.utils.hop(this.shadowTiddlers,title);\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.addTiddler = function(tiddler) {\n\t// Check if we're passed a fields hashmap instead of a tiddler\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = new $tw.Tiddler(tiddler);\n\t}\n\t// Get the title\n\tvar title = tiddler.fields.title;\n\t// Save the tiddler\n\tif(title) {\n\t\tthis.tiddlers[title] = tiddler;\n\t\tthis.clearCache(title);\n\t\tthis.clearGlobalCache();\n\t\tthis.enqueueTiddlerEvent(title);\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(existingTiddler.fields.version,tiddler.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 = {},\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 || {};\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tfor(t in this.tiddlers) {\n\t\tif($tw.utils.hop(this.tiddlers,t)) {\n\t\t\tif(options.includeSystem || !this.isSystemTiddler(t)) {\n\t\t\t\tif(!options.excludeTag || !this.tiddlers[t].hasTag(options.excludeTag)) {\n\t\t\t\t\ttiddlers.push(this.tiddlers[t]);\n\t\t\t\t}\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/*\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\tif(sortField !== \"title\") {\n\t\t\ta = self.getTiddler(a).fields[sortField] || \"\";\n\t\t\tb = self.getTiddler(b).fields[sortField] || \"\";\n\t\t}\n\t\tif(!isNumeric || isNaN(a) || isNaN(b)) {\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\tif(typeof a === \"string\") {\n\t\t\t\t\ta = a.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif(typeof b === \"string\") {\n\t\t\t\t\tb = b.toLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\ta-= 0;\n\t\t\tb-= 0;\n\t\t}\n\t\tif(a < b) {\n\t\t\treturn isDescending ? +1 : -1;\n\t\t} else {\n\t\t\tif(a > b) {\n\t\t\t\treturn isDescending ? -1 : +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\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.tiddlers[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\nexports.getSystemTitles = function() {\n\tvar titles = [];\n\tfor(var title in this.tiddlers) {\n\t\tif(this.isSystemTiddler(title)) {\n\t\t\ttitles.push(title);\n\t\t}\n\t}\n\ttitles.sort();\n\treturn titles;\n};\n\nexports.getShadowTitles = function() {\n\tvar titles = [];\n\tfor(var title in this.shadowTiddlers) {\n\t\ttitles.push(title);\n\t}\n\ttitles.sort();\n\treturn titles;\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 = {};\n\t\t// Collect up all the tags\n\t\tfor(var title in self.tiddlers) {\n\t\t\tvar tiddler = self.tiddlers[title];\n\t\t\tif(tiddler.fields.tags) {\n\t\t\t\tfor(var index=0; index<tiddler.fields.tags.length; index++) {\n\t\t\t\t\tvar tag = tiddler.fields.tags[index];\n\t\t\t\t\tif(tags[tag]) {\n\t\t\t\t\t\ttags[tag].push(title)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\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 their list\n*/\nexports.findListingsOfTiddler = function(targetTitle) {\n\t// Get the list associated with the tag\n\tvar titles = [];\n\tfor(var title in this.tiddlers) {\n\t\tvar tiddler = this.tiddlers[title];\n\t\tif($tw.utils.isArray(tiddler.fields.list) && tiddler.fields.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 if(list) {\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\treturn titles;\n\t} else {\n\t\treturn array;\n\t}\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 = {};\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 a tiddlers content 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*/\nexports.getTiddlerData = function(title,defaultData) {\n\tvar tiddler = this.getTiddler(title),\n\t\tdata;\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(title,index,defaultText) {\n\tvar data = this.getTiddlerData(title,{}),\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(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 || {};\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 = {};\n}\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\n// Temporarily disable caching so that tweakParseTreeNode() works\nreturn initializer();\n\n\tthis.caches = this.caches || {};\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 = {};\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler\nexports.clearCache = function(title) {\n\tthis.caches = this.caches || {};\n\tif($tw.utils.hop(this.caches,title)) {\n\t\tdelete this.caches[title];\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n*/\nexports.old_parseText = function(type,text,options) {\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.config.fileExtensionInfo[type]) {\n\t\tParser = $tw.Wiki.parsers[$tw.config.fileExtensionInfo[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});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.old_parseTiddler = function(title,options) {\n\toptions = options || {};\n\tvar cacheType = options.parseAsInline ? \"newInlineParseTree\" : \"newBlockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\treturn self.old_parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\n// We need to tweak parse trees generated by the existing parser because of the change from {type:\"element\",tag:\"$tiddler\",...} to {type:\"tiddler\",...}\nvar tweakParseTreeNode = function(node) {\n\tif(node.type === \"element\" && node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t\tdelete node.tag;\n\t}\n\ttweakParseTreeNodes(node.children);\n};\n\nvar tweakParseTreeNodes = function(nodeList) {\n\t$tw.utils.each(nodeList,tweakParseTreeNode);\n};\n\nvar tweakMacroDefinition = function(nodeList) {\n\tif(nodeList && nodeList[0] && nodeList[0].type === \"macrodef\") {\n\t\tnodeList[0].type = \"set\";\n\t\tnodeList[0].attributes = {\n\t\t\tname: {type: \"string\", value: nodeList[0].name},\n\t\t\tvalue: {type: \"string\", value: nodeList[0].text}\n\t\t};\n\t\tnodeList[0].children = nodeList.slice(1);\n\t\tnodeList.splice(1,nodeList.length-1);\n\t\ttweakMacroDefinition(nodeList[0].children);\n\t}\n};\n\nvar tweakParser = function(parser) {\n\t// Move any macro definitions to contain the body tree\n\ttweakMacroDefinition(parser.tree);\n\t// Tweak widgets\n\ttweakParseTreeNodes(parser.tree);\n};\n\nexports.parseText = function(type,text,options) {\n\tvar parser = this.old_parseText(type,text,options);\n\tif(parser) {\n\t\ttweakParser(parser)\n\t};\n\treturn parser;\n};\n\nexports.parseTiddler = function(title,options) {\n\tvar parser = this.old_parseTiddler(title,options);\n\tif(parser) {\n\t\ttweakParser(parser)\n\t};\n\treturn parser;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tif(field === \"text\" || (!field && !index)) {\n\t\t// Force the tiddler to be lazily loaded\n\t\tthis.getTiddlerText(title);\n\t\t// Parse it\n\t\treturn this.parseTiddler(title,options);\n\t} else {\n\t\tvar text;\n\t\tif(field) {\n\t\t\tif(field === \"title\") {\n\t\t\t\ttext = title;\n\t\t\t} else {\n\t\t\t\tvar tiddler = this.getTiddler(title);\n\t\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\ttext = tiddler.fields[field];\n\t\t\t}\n\t\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t\t} else if(index) {\n\t\t\ttext = this.extractTiddlerDataItem(title,index,\"\");\n\t\t\tif(text === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t\t}\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/*\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\ttitles: Hashmap or array of tiddler titles to limit search\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*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,t;\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\t// Search title, tags and body\n\t\t\tmatch = false;\n\t\t\tif(contentTypeInfo.encoding === \"utf8\") {\n\t\t\t\tmatch = match || searchTermsRegExps[t].test(tiddler.fields.text);\n\t\t\t}\n\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.join(\"\\0\") : \"\";\n\t\t\tmatch = match || searchTermsRegExps[t].test(tags) || searchTermsRegExps[t].test(tiddler.fields.title);\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\tif($tw.utils.isArray(options.titles)) {\n\t\tfor(t=0; t<options.titles.length; t++) {\n\t\t\tif(!!searchTiddler(options.titles[t]) === !options.invert) {\n\t\t\t\tresults.push(options.titles[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tvar source = options.titles || this.tiddlers;\n\t\tfor(t in source) {\n\t\t\tif(!!searchTiddler(t) === !options.invert) {\n\t\t\t\tresults.push(t);\n\t\t\t}\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.config.fileExtensionInfo[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// 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})();\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>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\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: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \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-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\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #fffffffff\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>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\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: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \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-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\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/Contrast": {
"title": "$:/palettes/Contrast",
"name": "Contrast",
"description": "High contrast and unambiguous",
"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>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\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: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \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: #000000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,0,0, 0.5)\nsidebar-foreground: #ffffff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ececec\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: #999999\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/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>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\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: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \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-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\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/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>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\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: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \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: #ececec\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\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: #ececec\nsidebar-tab-background: <<colour tab-background>>\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\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"
},
"$:/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.content": {
"title": "$:/core/templates/alltiddlers.content",
"text": "{{{ [!is[system]sort[title]] ||$:/core/templates/static-tiddler}}}"
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tw-wikilink-template() #$uri_encoded$\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=\"tw-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"story-river\">\n{{$:/core/templates/alltiddlers.content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/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/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[[$:/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]] -[[$:/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/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"type": "text/vnd.tiddlywiki",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|http://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tw-wikilink-template() static/$uri_doubleencoded$.html\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=\"tw-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageMacros||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tw-wikilink-template() $uri_doubleencoded$.html\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<link rel=\"stylesheet\" href=\"static.css\">\n<title>`{{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tw-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\t\t<!-- Force IE standards mode for Intranet and HTA - should be the first meta -->\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n</head>\n<body class=\"tw-body\">\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}\n</div>\n</body>\n</html>\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Filter/Hint>>\n\n<div class=\"tw-search\"><$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/><$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\"> <$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$reveal></div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n<<lingo Advanced/Matches>>\n\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\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=\"tw-search\"><$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/><$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\"> <$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$reveal></div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n<<lingo Advanced/Matches>>\n\n<$list filter=\"[is[shadow]search{$:/temp/advancedsearch}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\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=\"tw-search\"><$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/><$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\"> <$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$reveal></div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n<<lingo Advanced/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"text": "<div class=\"tw-advanced-search\">\n<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] [!is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] +[tag[$:/tags/AdvancedSearch]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tw-alert\">\n<div class=\"tw-alert-toolbar\">\n<$button message=\"tw-delete-tiddler\" class=\"btn-invisible\">\n{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tw-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=\"tw-alert-highlight\">(count: <$view field=\"count\"/>)</span></$reveal>\n</div>\n<div class=\"tw-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/ControlPanel/Advanced/LoadedModules": {
"title": "$:/core/ui/ControlPanel/Advanced/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Advanced/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Advanced/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Advanced/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/Advanced/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Advanced/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Advanced/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tw-control-panel\"><<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Advanced]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Advanced]] +[tag[$:/tags/ControlPanel/Advanced]]\" \"$:/core/ui/ControlPanel/Advanced/TiddlerFields\">></div>\n"
},
"$:/core/ui/ControlPanel/Appearance/Palette": {
"title": "$:/core/ui/ControlPanel/Appearance/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Appearance/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/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/Appearance/StoryView": {
"title": "$:/core/ui/ControlPanel/Appearance/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Appearance/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Appearance/Theme": {
"title": "$:/core/ui/ControlPanel/Appearance/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Appearance/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\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=\"tw-control-panel\"><<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Appearance]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Appearance]] +[tag[$:/tags/ControlPanel/Appearance]]\" \"$:/core/ui/ControlPanel/Appearance/Theme\">></div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |''<$count filter=\"[!is[system]]\"/>'' |\n|<<lingo Tags/Prompt>> |''<$count filter=\"[tags[]]\"/>'' |\n|<<lingo SystemTiddlers/Prompt>> |''<$count filter=\"[is[system]]\"/>'' |\n|<<lingo ShadowTiddlers/Prompt>> |''<$count filter=\"[is[shadow]]\"/>'' |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |''<$count filter=\"[!is[system]is[shadow]]\"/>'' |\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<table><tbody><tr><th><<lingo Fields/Title>></th><th><<lingo Fields/Description>></th><th><<lingo Fields/Version>></th></tr><$list filter=\"[!has[draft.of]has[plugin-type]sort[title]]\"><tr><td><$link to={{!!title}}><$view field=\"title\"/></$link></td><td><$view field=\"description\"/></td><td><$view field=\"version\"/></td></tr></$list>\n</tbody>\n</table>\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<a href=<<backupURL>>><$macrocall $name=\"backupURL\" $type=\"text/plain\" $output=\"text/plain\"/></a>\n</$set>\n</$reveal>\n\\end\n! <<lingo Saving/Heading>>\n\n|<<lingo AutoSave>> |{{$:/snippets/autosavestatus}} |\n\n! <<lingo TiddlySpot/Heading>>\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>>\n\n"
},
"$:/core/ui/ControlPanel/Tools": {
"title": "$:/core/ui/ControlPanel/Tools",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/\n! <<lingo Import/Heading>>\n\n<$browse/>\n\n<<lingo Import/Hint>>\n\n! <<lingo Export/Heading>>\n\n<$button message=\"tw-download-file\" param=\"$:/core/templates/alltiddlers.template.html\" class=\"btn-big-green\"><<lingo Export/AllAsStaticHTML/Caption>> {{$:/core/images/save-button}}</$button>\n\n! <<lingo Encryption/Heading>>\n\n{{$:/snippets/encryptionstatus}}\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"text": "<div class=\"tw-control-panel\"><<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] +[tag[$:/tags/ControlPanel]]\" \"$:/core/ui/ControlPanel/Basics\">></div>\n"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<$reveal state=\"$:/ShowEditPreview\" type=\"match\" text=\"yes\">\n\n<em class=\"tw-edit\"><<lingo Body/Hint>></em> <$button type=\"set\" set=\"$:/ShowEditPreview\" setTo=\"no\"><<lingo Body/Preview/Button/Hide>></$button>\n\n<div class=\"tw-tiddler-preview\">\n<div class=\"tw-tiddler-preview-preview\">\n\n<$transclude />\n\n</div>\n\n<div class=\"tw-tiddler-preview-edit\">\n<$edit field=\"text\" class=\"tw-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/ShowEditPreview\" type=\"nomatch\" text=\"yes\">\n\n<em class=\"tw-edit\"><<lingo Body/Hint>></em> <$button type=\"set\" set=\"$:/ShowEditPreview\" setTo=\"yes\"><<lingo Body/Preview/Button/Show>></$button>\n<$edit field=\"text\" class=\"tw-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</$reveal>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "<span class=\"tw-tiddler-controls titlebar\"> <$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/EditToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/EditToolbar]] +[tag[$:/tags/EditToolbar]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list> </span>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<$fieldmangler><div class=\"tw-edit-fields\">\n<table class=\"tw-edit-fields\"><tbody><$list filter=\"[is[current]fields[]] -title -tags -text -creator -created -modified -modifier -type -[[draft.title]] -[[draft.of]]\" variable=\"currentField\"><tr class=\"tw-edit-field\"><td class=\"tw-edit-field-name\"><<currentField>>:</td><td class=\"tw-edit-field-value\"><$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/></td><td class=\"tw-edit-field-remove\"><$button message=\"tw-remove-field\" param=<<currentField>> class=\"btn-invisible\">{{$:/core/images/delete-button}}</$button></td>\n</tr>\n</$list>\n</tbody>\n</table>\n</div>\n\n<div class=\"tw-edit-field-add\"><em class=\"tw-edit\"><<lingo Fields/Add/Prompt>></em> <span class=\"tw-edit-field-add-name\"><$edit-text tiddler=\"$:/temp/NewFieldName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} class=\"tw-edit-texteditor\"/></span> <span class=\"tw-edit-field-add-button\"><$button message=\"tw-add-field\" param={{$:/temp/NewFieldName}} set=\"$:/temp/NewFieldName\" setTo=\"\" class=\"\"><<lingo Fields/Add/Button>></$button></span></div>\n\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\n\\end\n<div class=\"tw-edit-tags\"><$fieldmangler><$list filter=\"[is[current]tags[]sort[title]]\" storyview=\"pop\"><$set name=\"backgroundColor\" value={{!!color}}><span style=<<tag-styles>> class=\"tw-tag-label\"><$view field=\"title\" format=\"text\" /><$button message=\"tw-remove-tag\" param={{!!title}} class=\"btn-invisible tw-remove-tag-button\">×</$button></span></$set>\n</$list>\n\n<div class=\"tw-edit-add-tag\"><span class=\"tw-add-tag-name\"><$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/tagsAutoComplete\">> class=\"tw-edit-texteditor\"/></span> <$button popup=<<qualify \"$:/state/tagsAutoComplete\">> class=\"btn-invisible btn-dropdown\">{{$:/core/images/down-arrow}}</$button> <span class=\"tw-add-tag-button\"><$button message=\"tw-add-tag\" param={{$:/temp/NewTagName}} set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\"><<lingo Tags/Add/Button>></$button></span></div>\n\n<div class=\"tw-block-dropdown-wrapper\">\n\n<$reveal state=<<qualify \"$:/state/tagsAutoComplete\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<div class=\"tw-block-dropdown\">\n\n<$linkcatcher set=\"$:/temp/NewTagName\" setTo=\"\" message=\"tw-add-tag\">\n<$list filter=\"[!is[shadow]tags[]search{$:/temp/NewTagName}sort[title]]\">\n<$link><$set name=\"backgroundColor\" value={{!!color}}><span style=<<tag-styles>> class=\"tw-tag-label\"><$view field=\"title\" format=\"text\"/></span></$set></$link>\n</$list>\n</$linkcatcher>\n\n</div>\n\n</$reveal>\n</div>\n</$fieldmangler>\n</div>"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$view field=\"title\"/>\n\n<$edit-text field=\"draft.title\" class=\"titlebar tw-edit-texteditor\"/>\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<p><$fieldmangler><em class=\"tw-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/typeDropdown\">> class=\"tw-edit-typeeditor\"/> <$button popup=<<qualify \"$:/state/typeDropdown\">> class=\"btn-invisible btn-dropdown\">{{$:/core/images/down-arrow}}</$button> <$button message=\"tw-remove-field\" param=\"type\" class=\"btn-invisible btn-icon\">{{$:/core/images/delete-button}}</$button></$fieldmangler></p>\n\n<div class=\"tw-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/typeDropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tw-block-dropdown tw-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter=\"[is[shadow]prefix[$:/language/Docs/Types/]] [!is[shadow]prefix[$:/language/Docs/Types/]] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define frame-classes()\ntw-tiddler-frame tw-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>>>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key=\"ctrl+enter\" message=\"tw-save-tiddler\">\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/EditTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/EditTemplate]] +[tag[$:/tags/EditTemplate]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n</$list>\n</$keyboard>\n</$set>\n</div>\n"
},
"$:/core/ui/EditToolbar/cancel": {
"title": "$:/core/ui/EditToolbar/cancel",
"tags": "$:/tags/EditToolbar",
"text": "<$button message=\"tw-cancel-tiddler\" class=\"btn-invisible\">{{$:/core/images/cancel-button}}</$button>"
},
"$:/core/ui/EditToolbar/delete": {
"title": "$:/core/ui/EditToolbar/delete",
"tags": "$:/tags/EditToolbar",
"text": "<$button message=\"tw-delete-tiddler\" class=\"btn-invisible\">{{$:/core/images/delete-button}}</$button>"
},
"$:/core/ui/EditToolbar/save": {
"title": "$:/core/ui/EditToolbar/save",
"tags": "$:/tags/EditToolbar",
"text": "<$button message=\"tw-save-tiddler\" class=\"btn-invisible\">{{$:/core/images/done-button}}</$button>"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tw-menu-list-item\"><$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tw-tiddler-missing\"><$button popup=<<qualify \"$:/state/missingpopup\">> class=\"btn-invisible tw-missing-tiddler-label\"><$view field=\"title\" format=\"text\" /></$button>\n<$reveal state=<<qualify \"$:/state/missingpopup\">> type=\"popup\" position=\"below\" animate=\"yes\"><div class=\"tw-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[is[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div></$reveal></div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter=\"[!is[system]sort[title]]\" 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=\"[has[draft.of]sort[title]]\" 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=\"[is[missing]sort[title]]\" 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=\"[is[orphan]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "{{$:/snippets/recentchanges}}\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter=\"[is[shadow]sort[title]]\" 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=\"[is[system]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "\\define lingo-base() $:/language/SideBar/Tags/\n<$button to=\"$:/TagManager\"><<lingo TagManager/Caption>></$button>\n\n<$list filter=\"[tags[]sort[title]]\">\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/> <small class=\"tw-menu-list-count\"><$count filter=\"[is[current]tagging[]]\"/></small>\n\n</$list>\n\n----\n\n{{$:/core/ui/UntaggedTemplate}} <small class=\"tw-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter=\"[!is[system]has[type]each[type]sort[type]]\">\n<div class=\"tw-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tw-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/PageControls/control-panel": {
"title": "$:/core/ui/PageControls/control-panel",
"tags": "$:/tags/PageControls",
"text": "<$button to=\"$:/ControlPanel\" class=\"btn-invisible\">{{$:/core/images/options-button}}</$button>"
},
"$:/core/ui/PageControls/new-tiddler": {
"title": "$:/core/ui/PageControls/new-tiddler",
"tags": "$:/tags/PageControls",
"text": "<$button message=\"tw-new-tiddler\" class=\"btn-invisible\">{{$:/core/images/new-button}}</$button>"
},
"$:/core/ui/PageControls/save-wiki": {
"title": "$:/core/ui/PageControls/save-wiki",
"tags": "$:/tags/PageControls",
"text": "<$button message=\"tw-save-wiki\" class=\"btn-invisible\">{{$:/core/images/save-button}}</$button>"
},
"$:/core/ui/PageMacros": {
"title": "$:/core/ui/PageMacros",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"/>\n\\end\n\\define color(name)\n<<colour $name$>>\n\\end\n\\define tabs(tabsList,default,state:\"$:/state/tab\")\n<div class=\"tw-tab-buttons\"><$list filter=\"$tabsList$\" variable=\"currentTab\"><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tw-tab-selected\"><$transclude tiddler=<<currentTab>> field=\"caption\"><$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/></$transclude> </$button>\n</$list>\n</div>\n<div class=\"tw-tab-divider\"/>\n<div class=\"tw-tab-content\">\n\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\n<$transclude tiddler=<<currentTab>>/>\n\n</$reveal>\n</$list>\n</div>\n\\end\n\\define wikitext-example(src)\n```\n$src$\n```\n\nRenders as:\n\n$src$\n\nIn HTML:\n\n$$$text/vnd.tiddlywiki>text/html\n$src$\n$$$\n\n\\end\n\\define lingo-base()\n$:/lingo/\n\\end\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n{{$:/core/ui/PageTemplate}}\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"/>\n\\end\n\\define color(name)\n<<colour $name$>>\n\\end\n\\define border-radius(radius)\n```\n -webkit-border-radius: $radius$;\n -moz-border-radius: $radius$;\n border-radius: $radius$;\n```\n\\end\n\\define box-shadow(shadow)\n```\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n```\n\\end\n\\define filter(filter)\n```\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n```\n\\end\n\\define transition(transition)\n```\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n```\n\\end\n\\define transform-origin(origin)\n```\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n```\n\\end\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\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n<$list filter=\"[is[shadow]tag[$:/tags/stylesheet]] [!is[shadow]tag[$:/tags/stylesheet]]\">\n<$transclude/>\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "<header class=\"sidebar-header\">\n\n<div class=\"titlebar\">{{$:/SiteTitle}}</div>\n<div class=\"tw-subtitle\">{{$:/SiteSubtitle}}</div>\n\n<div class=\"tw-page-controls\">\n\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/PageControls]] [!is[shadow]!has[draft.of]tag[$:/tags/PageControls]] +[tag[$:/tags/PageControls]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n\n</div>\n\n{{$:/core/ui/SideBarLists}}\n\n</header>\n"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "<section class=\"story-river\">\n\n<!-- Alerts -->\n<div class=\"tw-alerts\">\n\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/Alert]] [!is[shadow]!has[draft.of]tag[$:/tags/Alert]] +[sort[modified]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n\n<!-- The main story -->\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/ui/EditTemplate\" storyview={{$:/view}} />\n\n<!-- End of story river -->\n</section>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$dropzone>\n\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/PageTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/PageTemplate]] +[tag[$:/tags/PageTemplate]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tw-more-sidebar\">\n<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/MoreSideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/MoreSideBar]] +[tag[$:/tags/MoreSideBar]]\" \"$:/core/ui/MoreSideBar/Tags\" \"$:/state/tab/moresidebar\">>\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=\"tw-close-tiddler\" class=\"btn-invisible btn-mini\">×</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\n\n</$list>\n\n<$button message=\"tw-close-all-tiddlers\" class=\"btn-invisible btn-mini\"><<lingo Button>></$button>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "{{$:/snippets/recentchanges}}\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<<lingo Tools/Import/Prompt>> <$browse/>\n\n---\n\n{{$:/snippets/encryptionstatus}}\n\n---\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n---\n\n{{$:/snippets/viewswitcher}}\n\n---\n\n{{$:/snippets/minithemeswitcher}}\n\n---\n\n{{$:/snippets/languageswitcher}}\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<div class=\"tw-sidebar-lists\">\n\n<div class=\"tw-search\"><$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\"/> <$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\"><$linkcatcher to=\"$:/temp/search\"><$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$linkcatcher></$reveal><$reveal state=\"$:/temp/search\" type=\"match\" text=\"\"> <$link to=\"$:/AdvancedSearch\" class=\"btn-invisible\">…</$link></$reveal></div>\n\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n{{$:/language/Search/Matches}}\n\n<$list filter=\"[!is[system]search{$:/temp/search}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n\n<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/SideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/SideBar]] +[tag[$:/tags/SideBar]]\" \"$:/core/ui/SideBar/Open\" \"$:/state/tab/sidebar\">>\n\n</$reveal>\n</div>\n"
},
"$:/TagManager": {
"title": "$:/TagManager",
"text": "<table>\n<tbody>\n<tr>\n<th>Tag</th>\n<th>Count</th>\n<th>Colour</th>\n</tr>\n<$list filter=\"[tags[]sort[title]]\">\n<tr>\n<td><$transclude tiddler=\"$:/core/ui/TagTemplate\"/></td>\n<td><$count filter=\"[is[current]tagging[]]\"/></td>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\define tag-styles()\nbackground-color:$(backgroundColor)$;\n\\end\n<span class=\"tw-tag-list-item\">\n<$set name=\"backgroundColor\" value={{!!color}}>\n<$button popup=<<qualify \"$:/state/tagpopup\">> class=\"btn-invisible tw-tag-label\" style=<<tag-styles>>>\n<$transclude tiddler={{!!icon}}/> <$view field=\"title\" format=\"text\" />\n</$button>\n</$set>\n<$reveal state=<<qualify \"$:/state/tagpopup\">> type=\"popup\" position=\"below\" animate=\"yes\"><div class=\"tw-drop-down\"><$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[is[current]tagging[]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</span>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tw-view-field\"><td class=\"tw-view-field-name\"><<listItem>></td><td class=\"tw-view-field-value\"><$view field=<<listItem>>/></td></tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tw-view-field-table\"><tbody><$list filter=\"[is[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\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=\"[is[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=\"[is[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=\"[is[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/TiddlerInfo]] [!is[shadow]!has[draft.of]tag[$:/tags/TiddlerInfo]] +[tag[$:/tags/TiddlerInfo]]\" \"$:/core/ui/TiddlerInfo/References\">>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/tagpopup\">> class=\"btn-invisible tw-untagged-label tw-tag-label\"><<lingo Tags/Untagged/Caption>></$button>\n<$reveal state=<<qualify \"$:/state/tagpopup\">> type=\"popup\" position=\"below\"><div class=\"tw-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div></$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"body\">\n\n<$transclude />\n\n</div>"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"tw-subtitle\"><$link to={{!!modifier}}><$view field=\"modifier\"/></$link> <$view field=\"modified\" format=\"relativedate\"/></div>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"tw-tags-wrapper\"><$list filter=\"[is[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n<div class=\"tw-tiddler-title\"><div class=\"titlebar\"><span class=\"tw-tiddler-controls\"><$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] +[tag[$:/tags/ViewToolbar]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n\n</span><$set name=\"foregroundColor\" value={{!!color}}><span style=<<title-styles>>><$transclude tiddler={{!!icon}}/></span></$set> <span class=\"title\"><$view field=\"title\"/></span></div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tw-tiddler-info tw-popup\" animate=\"yes\" retain=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo\"/>\n\n</$reveal></div>"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define frame-classes()\ntw-tiddler-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<$set name=\"storyTiddler\" value=<<currentTiddler>>><$set name=\"tiddlerInfoState\" value=<<qualify \"$:/state/tiddlerInfo\">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] +[tag[$:/tags/ViewTemplate]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$tiddler></$set></$set>\n"
},
"$:/core/ui/ViewToolbar/close": {
"title": "$:/core/ui/ViewToolbar/close",
"tags": "$:/tags/ViewToolbar",
"text": "<$button message=\"tw-close-tiddler\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$button>"
},
"$:/core/ui/ViewToolbar/edit": {
"title": "$:/core/ui/ViewToolbar/edit",
"tags": "$:/tags/ViewToolbar",
"text": "<$button message=\"tw-edit-tiddler\" class=\"btn-invisible\">{{$:/core/images/edit-button}}</$button>"
},
"$:/core/ui/ViewToolbar/info": {
"title": "$:/core/ui/ViewToolbar/info",
"tags": "$:/tags/ViewToolbar",
"text": "<$button popup=<<tiddlerInfoState>> class=\"btn-invisible\" selectedClass=\"tw-selected\">{{$:/core/images/info-button}}</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n[!is[system]sort[modified]limit[25]]"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tw-view-field\"><td class=\"tw-view-field-name\">''$title$'':</td><td class=\"tw-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tw-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/snippets/autosavestatus": {
"title": "$:/snippets/autosavestatus",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/\n<$reveal type=\"match\" state=\"$:/config/AutoSave\" text=\"yes\">\n<<lingo AutoSave/Enabled/Prompt>>\n<$linkcatcher to=\"$:/config/AutoSave\"><$button to=\"no\"><<lingo AutoSave/Enabled/Button>>\n</$button></$linkcatcher>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/config/AutoSave\" text=\"yes\">\n<<lingo AutoSave/Disabled/Prompt>>\n<$linkcatcher to=\"$:/config/AutoSave\"><$button to=\"yes\"><<lingo AutoSave/Disabled/Button>></$button></$linkcatcher>\n</$reveal>"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#ff0"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/isEncrypted]] -[prefix[$:/status]] -[prefix[$:/state]] -[prefix[$:/temp]]"
},
"$:/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=\"tw-swatch\" style=<<swatchStyle>>/>\n</$set>\n\\end\n<div class=\"tw-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 message=\"tw-download-file\" param=\"$:/core/save/all\" class=\"btn-big-green\"><<lingo Full/Caption>> {{$:/core/images/save-button}}</$button>"
},
"$:/snippets/encryptionstatus": {
"title": "$:/snippets/encryptionstatus",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Encryption/\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<<lingo Enabled/Prompt>>\n<$button message=\"tw-clear-password\" class=\"btn btn-danger\"><<lingo ClearPassword/Button>></$button>\n<$button message=\"tw-set-password\" class=\"btn btn-warning\"><<lingo ChangePassword/Button>></$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<<lingo Disabled/Prompt>>\n<$button message=\"tw-set-password\" class=\"btn btn-warning\"><<lingo SetPassword/Button>></$button>\n</$reveal>"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "{{$:/language/ControlPanel/Basics/Language/Prompt}} <$view tiddler={{$:/language}} field=\"description\" format=\"text\"><$view tiddler={{$:/language}} field=\"name\" format=\"text\"><$view tiddler={{$:/language}} field=\"title\" format=\"text\"/></$view></$view>\n\n<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\"><div><$reveal state=\"$:/language\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/language\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}><$view field=\"description\" format=\"text\"><$view field=\"name\" format=\"text\"><$view field=\"title\" format=\"text\"/></$view></$view></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\"><div><$reveal state=\"$:/language\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/language\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}><$view field=\"description\" format=\"text\"><$view field=\"name\" format=\"text\"><$view field=\"title\" format=\"text\"/></$view></$view></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/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\"/></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/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=\"[is[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/Appearance/Palette/Editor/\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[is[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tw-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[is[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tw-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<table><tbody><$list filter=\"[is[current]indexes[]]\" variable=\"colourName\"><tr><td><$macrocall $name=\"colourName\" $output=\"text/plain\"/></td>\n<td><$edit-text index=<<colourName>> tag=\"input\"/></td>\n<td><$edit-text index=<<colourName>> type=\"color\" tag=\"input\"/></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/Appearance/Palette/\n<<lingo Prompt>> <$view tiddler={{$:/palette}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/palette\">\n<div class=\"tw-chooser\"><$list filter=\"[is[shadow]tag[$:/tags/Palette]] [!is[shadow]tag[$:/tags/Palette]] +[sort[description]]\"><div class=\"tw-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>"
},
"$:/snippets/recentchanges": {
"title": "$:/snippets/recentchanges",
"text": "<$list filter=\"[!is[system]has[modified]!sort[modified]limit[100]eachday[modified]]\">\n<div class=\"tw-menu-list-item\">\n<$view field=\"modified\" format=\"date\" template={{$:/language/RecentChanges/DateFormat}}/>\n<$list filter=\"[sameday{!!modified}!is[system]!sort[modified]]\">\n<div class=\"tw-menu-list-subitem\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals",
"text": ""
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]",
"text": ""
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/EditToolbar/delete]] [[$:/core/ui/EditToolbar/cancel]] [[$:/core/ui/EditToolbar/save]]",
"text": ""
},
"$:/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/PageControls/new-tiddler]] [[$:/core/ui/PageControls/control-panel]] [[$:/core/ui/PageControls/save-wiki]]",
"text": ""
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]]",
"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/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/body]]",
"text": ""
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/ViewToolbar/info]] [[$:/core/ui/ViewToolbar/edit]] [[$:/core/ui/ViewToolbar/close]]",
"text": ""
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/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/Appearance/StoryView/\n<<lingo Prompt>> {{$:/view}}\n\n<$linkcatcher to=\"$:/view\"><$list filter=\"classic zoomin pop\"><div><$reveal state=\"$:/view\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/view\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</$linkcatcher>\n"
}
}
}
[
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Tools"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Tools",
"fromPageRect": {
"top": 296.890625,
"left": 782,
"width": 35,
"right": 817,
"bottom": 312.890625,
"height": 16
}
},
{
"title": "Tools",
"fromPageRect": {
"top": 296.890625,
"left": 782,
"width": 35,
"right": 817,
"bottom": 312.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Servers"
},
{
"title": "Servers",
"fromPageRect": {
"top": 276.890625,
"left": 843,
"width": 49,
"right": 892,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Tools",
"fromPageRect": {
"top": 296.890625,
"left": 843,
"width": 35,
"right": 878,
"bottom": 312.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "To Do"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Subscriptions"
},
{
"title": "Draft of 'Tools'"
},
{
"title": "Tools"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Notes"
},
{
"title": "Draft of 'Notes'"
},
{
"title": "Notes"
},
{
"title": "To Do",
"fromPageRect": {
"top": 296.890625,
"left": 782,
"width": 39,
"right": 821,
"bottom": 312.890625,
"height": 16
}
},
{
"title": "Draft of 'To Do'"
},
{
"title": "To Do"
},
{
"title": "Draft of 'To Do'"
},
{
"title": "To Do"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/DefaultTiddlers",
"fromPageRect": {
"top": 388.890625,
"left": 90,
"width": 99,
"right": 189,
"bottom": 404.890625,
"height": 16
}
},
{
"title": "$:/DefaultTiddlers",
"fromPageRect": {
"top": 356.890625,
"left": 90,
"width": 99,
"right": 189,
"bottom": 372.890625,
"height": 16
}
},
{
"title": "Draft of '$:/DefaultTiddlers'"
},
{
"title": "$:/DefaultTiddlers"
},
{
"title": "Draft of ';'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Daily Activities"
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 90,
"right": 867,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 90,
"right": 867,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "SimpleSearchDownloaded"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Links"
},
{
"title": "ServiceDesk",
"fromPageRect": {
"top": 160,
"left": 89,
"width": 79,
"right": 168,
"bottom": 176,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "autoCorrectSpelling"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "New Tiddler"
},
{
"title": "Links",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 33,
"right": 803,
"bottom": 324,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 74,
"right": 851,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "$:/TagManager"
},
{
"title": "Draft of '$:/TagManager'"
},
{
"title": "$:/TagManager"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 74,
"right": 851,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "<$encrypt>",
"fromPageRect": {
"top": 124,
"left": 86,
"width": 278,
"right": 364,
"bottom": 144,
"height": 20
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "<$encrypt>",
"fromPageRect": {
"top": 331.890625,
"left": 844,
"width": 278,
"right": 1122,
"bottom": 351.890625,
"height": 20
}
},
{
"title": "<$encrypt>",
"fromPageRect": {
"top": 331.890625,
"left": 844,
"width": 278,
"right": 1122,
"bottom": 351.890625,
"height": 20
}
},
{
"title": "$:/TagManager"
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 193,
"left": 94,
"width": 278,
"right": 372,
"bottom": 213,
"height": 20
}
},
{
"title": "$:/TagManager"
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 193,
"left": 94,
"width": 278,
"right": 372,
"bottom": 213,
"height": 20
}
},
{
"title": "<$encrypt>",
"fromPageRect": {
"top": 124,
"left": 86,
"width": 278,
"right": 364,
"bottom": 144,
"height": 20
}
},
{
"title": "$:/TagManager"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'To Do'"
},
{
"title": "To Do"
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 369,
"left": 844,
"width": 278,
"right": 1122,
"bottom": 389,
"height": 20
}
},
{
"title": "Draft of 'Daily Activities'"
},
{
"title": "Daily Activities"
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 369,
"left": 844,
"width": 278,
"right": 1122,
"bottom": 389,
"height": 20
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "SQL Data Types"
},
{
"title": "Draft of 'SQL Data Types'"
},
{
"title": "SQL Data Types"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "SQL Data Type Quick Reference"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Some of The Most Important SQL Commands"
},
{
"title": "Draft of 'Some of The Most Important SQL Commands'"
},
{
"title": "Some of The Most Important SQL Commands"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 167,
"right": 937,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "\\\\otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 729,
"left": 85,
"width": 203,
"right": 288,
"bottom": 745,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Re-Send Ryder PO's"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 372.8833312988281,
"left": 777,
"width": 167,
"right": 944,
"bottom": 388.8833312988281,
"height": 16
}
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 352.8833312988281,
"left": 777,
"width": 132,
"right": 909,
"bottom": 368.8833312988281,
"height": 16
}
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 352.8833312988281,
"left": 777,
"width": 132,
"right": 909,
"bottom": 368.8833312988281,
"height": 16
}
},
{
"title": "Draft of 'Re-Send Ryder PO's'"
},
{
"title": "Re-Send Ryder PO's"
},
{
"title": "Draft of 'Links'",
"fromPageRect": {
"top": 312.8833312988281,
"left": 777,
"width": 90,
"right": 867,
"bottom": 328.8833312988281,
"height": 16
}
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Filter error: Missing closing bracket in filter expression",
"fromPageRect": {
"top": 612,
"left": 85,
"width": 341,
"right": 426,
"bottom": 628,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Subscriptions",
"fromPageRect": {
"top": 288.98333740234375,
"left": 770,
"width": 85,
"right": 855,
"bottom": 304.98333740234375,
"height": 16
}
},
{
"title": "Draft of 'Subscriptions'"
},
{
"title": "Email Subscriptions"
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 332.8833312988281,
"left": 777,
"width": 132,
"right": 909,
"bottom": 348.8833312988281,
"height": 16
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 288.98333740234375,
"left": 770,
"width": 36,
"right": 806,
"bottom": 304.98333740234375,
"height": 16
}
},
{
"title": "Tools",
"fromPageRect": {
"top": 308.98333740234375,
"left": 770,
"width": 33,
"right": 803,
"bottom": 324.98333740234375,
"height": 16
}
},
{
"title": "To Do",
"fromPageRect": {
"top": 532.88330078125,
"left": 777,
"width": 37,
"right": 814,
"bottom": 548.88330078125,
"height": 16
}
},
{
"title": "Draft of 'To Do'"
},
{
"title": "To Do"
},
{
"title": "Draft of 'To Do'"
},
{
"title": "To Do"
},
{
"title": "Draft of 'To Do'"
},
{
"title": "To Do"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Export TMW to Tanker Pro AR Orders"
},
{
"title": "Draft of 'Export TMW to Tanker Pro AR Orders'"
},
{
"title": "Export TMW to Tanker Pro AR Orders"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Removing Bad Email accounts from customer image portal"
},
{
"title": "Draft of 'Removing Bad Email accounts from customer image portal'"
},
{
"title": "Removing Bad Email accounts from customer image portal"
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 592.88330078125,
"left": 777,
"width": 90,
"right": 867,
"bottom": 608.88330078125,
"height": 16
}
},
{
"title": "Draft of 'Daily Activities'"
},
{
"title": "Daily Activities"
},
{
"title": "Draft of 'Daily Activities'"
},
{
"title": "Daily Activities"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Edit PO VB Program Validation"
},
{
"title": "Servers",
"fromPageRect": {
"top": 753.890625,
"left": 777,
"width": 49,
"right": 826,
"bottom": 769.890625,
"height": 16
}
},
{
"title": "Servers",
"fromPageRect": {
"top": 753.890625,
"left": 777,
"width": 49,
"right": 826,
"bottom": 769.890625,
"height": 16
}
},
{
"title": "Draft of 'Servers'"
},
{
"title": "Servers"
},
{
"title": "Removing Bad Email accounts from customer image portal",
"fromPageRect": {
"top": 353.890625,
"left": 777,
"width": 367,
"right": 1144,
"bottom": 369.890625,
"height": 16
}
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 333.890625,
"left": 777,
"width": 90,
"right": 867,
"bottom": 349.890625,
"height": 16
}
},
{
"title": "Removing Bad Email accounts from customer image portal",
"fromPageRect": {
"top": 353.890625,
"left": 777,
"width": 367,
"right": 1144,
"bottom": 369.890625,
"height": 16
}
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 333.890625,
"left": 777,
"width": 90,
"right": 867,
"bottom": 349.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 267,
"right": 1044,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Current Systems Jerome is responsible for"
},
{
"title": "Edit PO VB Program Validation",
"fromPageRect": {
"top": 353.890625,
"left": 777,
"width": 194,
"right": 971,
"bottom": 369.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "online books to read"
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 132,
"right": 902,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'Re-Send Ryder PO's'"
},
{
"title": "Re-Send Ryder PO's"
},
{
"title": "Draft of 'Re-Send Ryder PO's'"
},
{
"title": "Re-Send Ryder PO's"
},
{
"title": "Draft of 'Re-Send Ryder PO's'"
},
{
"title": "Re-Send Ryder PO's"
},
{
"title": "Draft of 'Re-Send Ryder PO's'"
},
{
"title": "Re-Send Ryder PO's"
},
{
"title": "Draft of 'Re-Send Ryder PO's'"
},
{
"title": "Re-Send Ryder PO's"
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Links",
"fromPageRect": {
"top": 533.890625,
"left": 777,
"width": 33,
"right": 810,
"bottom": 549.890625,
"height": 16
}
},
{
"title": "Edit PO VB Program Validation",
"fromPageRect": {
"top": 393.890625,
"left": 777,
"width": 194,
"right": 971,
"bottom": 409.890625,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Sales Reports"
},
{
"title": "Notes",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 36,
"right": 806,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'Notes'"
},
{
"title": "Notes"
},
{
"title": "Draft of 'To Do'"
},
{
"title": "Links"
},
{
"title": "Export TMW to Tanker Pro AR Orders",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 239,
"right": 1009,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'Export TMW to Tanker Pro AR Orders'"
},
{
"title": "Export TMW to Tanker Pro AR Orders"
},
{
"title": "online books to read",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 129,
"right": 899,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Draft of 'To Do'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'To Do'"
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 373.890625,
"left": 777,
"width": 89,
"right": 866,
"bottom": 389.890625,
"height": 16
}
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 753.890625,
"left": 777,
"width": 74,
"right": 851,
"bottom": 769.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "online books to read",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 129,
"right": 906,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "online books to read",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 129,
"right": 906,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Edit PO VB Program Validation",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 194,
"right": 964,
"bottom": 284,
"height": 16
}
},
{
"title": "Export TMW to Tanker Pro AR Orders",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 239,
"right": 1009,
"bottom": 304,
"height": 16
}
},
{
"title": "Links",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 33,
"right": 803,
"bottom": 324,
"height": 16
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 328,
"left": 770,
"width": 36,
"right": 806,
"bottom": 344,
"height": 16
}
},
{
"title": "Draft of 'Notes'"
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 132,
"right": 902,
"bottom": 284,
"height": 16
}
},
{
"title": "Notes"
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 533.890625,
"left": 777,
"width": 90,
"right": 867,
"bottom": 549.890625,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Financial Batch Stuck for Currency ID"
},
{
"title": "Draft of 'Financial Batch Stuck for Currency ID'"
},
{
"title": "Financial Batch Stuck for Currency ID"
},
{
"title": "Draft of 'Financial Batch Stuck for Currency ID'"
},
{
"title": "Financial Batch Stuck for Currency ID"
},
{
"title": "Draft of 'Financial Batch Stuck for Currency ID'"
},
{
"title": "Financial Batch Stuck for Currency ID"
},
{
"title": "Draft of 'Financial Batch Stuck for Currency ID'"
},
{
"title": "Financial Batch Stuck for Currency ID"
},
{
"title": "Draft of 'Financial Batch Stuck for Currency ID'"
},
{
"title": "Financial Batch Stuck for Currency ID"
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "Links"
},
{
"title": "Notes",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 36,
"right": 806,
"bottom": 284,
"height": 16
}
},
{
"title": "online books to read",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 129,
"right": 899,
"bottom": 324,
"height": 16
}
},
{
"title": "SimpleSearchDownloaded",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 165,
"right": 935,
"bottom": 324,
"height": 16
}
},
{
"title": "Financial Batch Stuck for Currency ID",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 236,
"right": 1006,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 267,
"right": 1037,
"bottom": 304,
"height": 16
}
},
{
"title": "Email Subscriptions",
"fromPageRect": {
"top": 348,
"left": 770,
"width": 123,
"right": 893,
"bottom": 364,
"height": 16
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 368,
"left": 770,
"width": 36,
"right": 806,
"bottom": 384,
"height": 16
}
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 267,
"right": 1037,
"bottom": 304,
"height": 16
}
},
{
"title": "Chesapeake reports",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 129,
"right": 899,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Financial Batch Stuck for Currency ID'"
},
{
"title": "Financial Batch Stuck for Currency ID"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Chesapeake reports",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 129,
"right": 899,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Chesapeake reports"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Programming cheat sheet for Operators, Expressions and statements"
},
{
"title": "Draft of 'Programming cheat sheet for Operators, Expressions and statements'"
},
{
"title": "Programming cheat sheet for Operators, Expressions and statements"
},
{
"title": "online books to read",
"fromPageRect": {
"top": 347,
"left": 770,
"width": 129,
"right": 899,
"bottom": 363,
"height": 16
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 36,
"right": 806,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'online books to read'"
},
{
"title": "online books to read"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Programming cheat sheet for Operators, Expressions and statements",
"fromPageRect": {
"top": 328,
"left": 770,
"width": 436,
"right": 1206,
"bottom": 344,
"height": 16
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 36,
"right": 806,
"bottom": 324,
"height": 16
}
},
{
"title": "Links",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 33,
"right": 803,
"bottom": 304,
"height": 16
}
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 167,
"right": 937,
"bottom": 284,
"height": 16
}
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 267,
"right": 1037,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Middleware CSV Files"
},
{
"title": "Draft of 'Middleware CSV Files'"
},
{
"title": "Middleware CSV Files"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Small download proxy"
},
{
"title": "Draft of 'Small download proxy'"
},
{
"title": "Small download proxy"
},
{
"title": "Small download proxy",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 136,
"right": 906,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "//otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 547,
"left": 85,
"width": 203,
"right": 288,
"bottom": 563,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Links",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 33,
"right": 810,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Visual Studio Quick Launch Shortcuts"
},
{
"title": "Draft of 'Visual Studio Quick Launch Shortcuts'"
},
{
"title": "Visual Studio Quick Launch Shortcuts"
},
{
"title": "Draft of 'Visual Studio Quick Launch Shortcuts'"
},
{
"title": "Visual Studio Quick Launch Shortcuts"
},
{
"title": "Draft of 'Visual Studio Quick Launch Shortcuts'"
},
{
"title": "Visual Studio Quick Launch Shortcuts"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 105,
"right": 882,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 105,
"right": 882,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 86,
"right": 863,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "User stuck in GP"
},
{
"title": "Visual Studio Keyboard Shortcuts"
},
{
"title": "Financial Batch Stuck for Currency ID",
"fromPageRect": {
"top": 613.890625,
"left": 777,
"width": 236,
"right": 1013,
"bottom": 629.890625,
"height": 16
}
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 473.890625,
"left": 777,
"width": 137,
"right": 914,
"bottom": 489.890625,
"height": 16
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 36,
"right": 806,
"bottom": 324,
"height": 16
}
},
{
"title": "Visual Studio Keyboard Shortcuts",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 211,
"right": 988,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 313.890625,
"left": 777,
"width": 105,
"right": 882,
"bottom": 329.890625,
"height": 16
}
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Batch Missing from GP"
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 105,
"right": 875,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Visual Studio 2013 Code Snippets"
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 89,
"right": 859,
"bottom": 304,
"height": 16
}
},
{
"title": "Financial Batch Stuck for Currency ID",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 236,
"right": 1006,
"bottom": 324,
"height": 16
}
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 105,
"right": 875,
"bottom": 304,
"height": 16
}
},
{
"title": "Batch Missing from GP",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 143,
"right": 913,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'Batch Missing from GP'"
},
{
"title": "Batch Missing from GP"
},
{
"title": "Stuck",
"fromPageRect": {
"top": 124,
"left": 134,
"width": 278,
"right": 412,
"bottom": 144,
"height": 20
}
},
{
"title": "Financial Batch Stuck for Currency ID",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 236,
"right": 1006,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "test"
},
{
"title": "Draft of 'test'"
},
{
"title": "test"
},
{
"title": "Untitled"
},
{
"title": "Draft of 'Untitled'"
},
{
"title": "Draft of 'test'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Small download proxy",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 136,
"right": 906,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Command line to extend hard drive virtual box"
},
{
"title": "Export TMW to Tanker Pro AR Orders",
"fromPageRect": {
"top": 308,
"left": 770,
"width": 239,
"right": 1009,
"bottom": 324,
"height": 16
}
},
{
"title": "Command line to extend hard drive virtual box",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 288,
"right": 1058,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'Command line to extend hard drive virtual box'"
},
{
"title": "Command line to extend hard drive virtual box"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Adding CSC to Non-Shop PO System."
},
{
"title": "Draft of 'Adding CSC to Non-Shop PO System.'"
},
{
"title": "Draft of 'Adding CSC to Non-Shop PO System.'",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 295,
"right": 1072,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Command line to extend hard drive virtual box",
"fromPageRect": {
"top": 353.890625,
"left": 777,
"width": 288,
"right": 1065,
"bottom": 369.890625,
"height": 16
}
},
{
"title": "Batch Missing from GP",
"fromPageRect": {
"top": 433.890625,
"left": 777,
"width": 143,
"right": 920,
"bottom": 449.890625,
"height": 16
}
},
{
"title": "Draft of 'Batch Missing from GP'"
},
{
"title": "Batch Missing from GP"
},
{
"title": "Adding CSC to Non-Shop PO System."
},
{
"title": "Draft of 'Adding CSC to Non-Shop PO System.'"
},
{
"title": "Adding CSC to Non-Shop PO System."
},
{
"title": "Draft of 'Adding CSC to Non-Shop PO System.'"
},
{
"title": "Adding CSC to Non-Shop PO System."
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Untitled"
},
{
"title": "Quarantined FTP to DTN File"
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 185,
"right": 962,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 185,
"right": 962,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'Quarantined FTP to DTN File'"
},
{
"title": "Quarantined FTP to DTN File"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Verify SHA with Microsoft."
},
{
"title": "Draft of 'Verify SHA with Microsoft.'"
},
{
"title": "Verify SHA with Microsoft."
},
{
"title": "Installing server 2k12 on Vbox"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Installing Hyper-V Management Tools"
},
{
"title": "Batch Missing from GP",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 143,
"right": 913,
"bottom": 284,
"height": 16
}
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 167,
"right": 937,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'CUSTNMBR does not exist'"
},
{
"title": "CUSTNMBR does not exist"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error Description = Customer Number (CUSTNMBR) does not exist in the Customer Master Table - RM00101"
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 167,
"right": 937,
"bottom": 284,
"height": 16
}
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error Description = Customer Number (CUSTNMBR) does not exist in the Customer Master Table - RM00101",
"fromPageRect": {
"top": 293.890625,
"left": 777,
"width": 1044,
"right": 1821,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of 'Error Number = 1346 Stored Procedure taRMDistribution Error Description = Customer Number (CUSTNMBR) does not exist in the Customer Master Table - RM00101'"
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error Description = Customer Number (CUSTNMBR) does not exist in the Customer Master Table - RM00101"
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 313.890625,
"left": 777,
"width": 167,
"right": 944,
"bottom": 329.890625,
"height": 16
}
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 547.890625,
"left": 777,
"width": 137,
"right": 914,
"bottom": 563.890625,
"height": 16
}
},
{
"title": "Installing Hyper-V Management Tools",
"fromPageRect": {
"top": 87.890625,
"left": 777,
"width": 235,
"right": 1012,
"bottom": 103.890625,
"height": 16
}
},
{
"title": "SimpleSearchDownloaded",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 165,
"right": 935,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'SimpleSearchDownloaded'"
},
{
"title": "SimpleSearchDownloaded"
},
{
"title": "Draft of 'SimpleSearchDownloaded'"
},
{
"title": "SimpleSearchDownloaded"
},
{
"title": "Draft of 'SimpleSearchDownloaded'"
},
{
"title": "SimpleSearchDownloaded"
},
{
"title": "Notes",
"fromPageRect": {
"top": 368,
"left": 770,
"width": 36,
"right": 806,
"bottom": 384,
"height": 16
}
},
{
"title": "Export TMW to Tanker Pro AR Orders",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 239,
"right": 1009,
"bottom": 284,
"height": 16
}
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 267,
"right": 1037,
"bottom": 284,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 328,
"left": 770,
"width": 137,
"right": 907,
"bottom": 344,
"height": 16
}
},
{
"title": "Draft of 'Middleware CSV Files'"
},
{
"title": "Middleware CSV Files"
},
{
"title": "-- ExecuteReader requires an open and available Connection"
},
{
"title": "Installing server 2k12 on Vbox",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 189,
"right": 959,
"bottom": 304,
"height": 16
}
},
{
"title": "Untitled 1"
},
{
"title": "Draft of 'Installing server 2k12 on Vbox'"
},
{
"title": "Installing server 2k12 on Vbox"
},
{
"title": "Installing server 2k12 on Vbox",
"fromPageRect": {
"top": 288,
"left": 770,
"width": 189,
"right": 959,
"bottom": 304,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "How to use PowerShell to replace DCPROMO in Windows Server 2012"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Tools",
"fromPageRect": {
"top": 858.890625,
"left": 777,
"width": 35,
"right": 812,
"bottom": 874.890625,
"height": 16
}
},
{
"title": "autoCorrectSpelling",
"fromPageRect": {
"top": 838.890625,
"left": 777,
"width": 125,
"right": 902,
"bottom": 854.890625,
"height": 16
}
},
{
"title": "SQL Data Types",
"fromPageRect": {
"top": 798.890625,
"left": 777,
"width": 105,
"right": 882,
"bottom": 814.890625,
"height": 16
}
},
{
"title": "Draft of 'SQL Data Types'"
},
{
"title": "SQL Data Types"
},
{
"title": "Birch Communications"
},
{
"title": "SQL Data Type Quick Reference",
"fromPageRect": {
"top": 798.890625,
"left": 777,
"width": 208,
"right": 985,
"bottom": 814.890625,
"height": 16
}
},
{
"title": "Draft of 'SQL Data Type Quick Reference'"
},
{
"title": "SQL Data Type Quick Reference"
},
{
"title": "Draft of 'Birch Communications'"
},
{
"title": "Birch Communications"
},
{
"title": "Draft of 'Birch Communications'"
},
{
"title": "Birch Communications"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error Description = Customer Number (CUSTNMBR) does not exist in the Customer Master Table - RM00101",
"fromPageRect": {
"top": 427.625,
"left": 1207,
"width": 960,
"right": 2167,
"bottom": 443.625,
"height": 16
}
},
{
"title": "Draft of 'Error Number = 1346 Stored Procedure taRMDistribution Error Description = Customer Number (CUSTNMBR) does not exist in the Customer Master Table - RM00101'"
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error Description"
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 391.625,
"left": 1207,
"width": 128,
"right": 1335,
"bottom": 407.625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Installing Hyper-V Management Tools",
"fromPageRect": {
"top": 463.625,
"left": 1207,
"width": 216,
"right": 1423,
"bottom": 479.625,
"height": 16
}
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 511.625,
"left": 1207,
"width": 167,
"right": 1374,
"bottom": 527.625,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Copy of Vender Account Mgmt and Support (version 1) (3).xls"
},
{
"title": "KeysExport.xml"
},
{
"title": "Draft of 'KeysExport.xml'"
},
{
"title": "MicrosoftKeys.txt"
},
{
"title": "BIRCH ELITE TEAM CONTACT INFO.doc"
},
{
"title": "BIRCH ELITE TEAM CONTACT INFO.doc",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 259,
"right": 1466,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'BIRCH ELITE TEAM CONTACT INFO.doc'"
},
{
"title": "Copy of Vender Account Mgmt and Support (version 1) (3).xls",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 388,
"right": 1595,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'Copy of Vender Account Mgmt and Support (version 1) (3).xls'"
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 185,
"right": 1392,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "MicrosoftKeys.txt"
},
{
"title": "Draft of 'MicrosoftKeys.txt'"
},
{
"title": "MicrosoftKeys.txt"
},
{
"title": "MicrosoftKeys.txt",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 106,
"right": 1313,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Links",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 33,
"right": 1240,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error Description",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 468,
"right": 1675,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "Draft of 'Error Number = 1346 Stored Procedure taRMDistribution Error Description'"
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error"
},
{
"title": "How to use PowerShell to replace DCPROMO in Windows Server 2012",
"fromPageRect": {
"top": 388.890625,
"left": 1207,
"width": 443,
"right": 1650,
"bottom": 404.890625,
"height": 16
}
},
{
"title": "Draft of 'How to use PowerShell to replace DCPROMO in Windows Server 2012'"
},
{
"title": "How to use PowerShell \"DCPROMO\" Windows Server 2012"
},
{
"title": "Programming cheat sheet for Operators, Expressions and statements",
"fromPageRect": {
"top": 836.890625,
"left": 1207,
"width": 436,
"right": 1643,
"bottom": 852.890625,
"height": 16
}
},
{
"title": "Draft of 'Programming cheat sheet for Operators, Expressions and statements'"
},
{
"title": "Programming cheats for Operators, Expressions and statements"
},
{
"title": "MicrosoftKeys.txt",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 106,
"right": 1313,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "Programming cheats for Operators, Expressions and statements",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 404,
"right": 1611,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/plugins/danielo/encryptTiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "sucks-it-guy.jpg"
},
{
"title": "sucks-it-guy.jpg",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 99,
"right": 1306,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'sucks-it-guy.jpg'"
},
{
"title": "sucks-it-guy.jpg"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Accounts"
},
{
"title": "Accounts",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Accounts'"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 307,
"left": 1200,
"width": 137,
"right": 1337,
"bottom": 323,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Bridgepoint errors not processing"
},
{
"title": "Draft of 'Bridgepoint errors not processing'"
},
{
"title": "Bridgepoint errors not processing"
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 89,
"right": 1289,
"bottom": 281,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "Untitled 2"
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Untitled 2'"
},
{
"title": "Untitled 4"
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Untitled 4"
},
{
"title": "Editable-Table"
},
{
"title": "Draft of 'Editable-Table'"
},
{
"title": "Editable-Table"
},
{
"title": "$:/tags/stylesheet",
"fromPageRect": {
"top": 173,
"left": 86,
"width": 278,
"right": 364,
"bottom": 187,
"height": 14
}
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 195,
"left": 1365,
"width": 14,
"right": 1379,
"bottom": 211,
"height": 16
}
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Draft of 'Editable-Table'"
},
{
"title": "Untitled 3",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 59,
"right": 1266,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Calendar"
},
{
"title": "Calendar",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "$:/tags/SideBar",
"fromPageRect": {
"top": 117,
"left": 86,
"width": 278,
"right": 364,
"bottom": 131,
"height": 14
}
},
{
"title": "$:/tags/SideBar",
"fromPageRect": {
"top": 173,
"left": 86,
"width": 278,
"right": 364,
"bottom": 187,
"height": 14
}
},
{
"title": "$:/TagManager"
},
{
"title": "$:/tags/SideBar",
"fromPageRect": {
"top": 410,
"left": 86,
"width": 278,
"right": 364,
"bottom": 424,
"height": 14
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 211,
"right": 1418,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "Calendar"
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "Calendar"
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "Calendar"
},
{
"title": "Calendar",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 416.890625,
"left": 1207,
"width": 185,
"right": 1392,
"bottom": 432.890625,
"height": 16
}
},
{
"title": "Birch Communications",
"fromPageRect": {
"top": 430.890625,
"left": 1207,
"width": 140,
"right": 1347,
"bottom": 446.890625,
"height": 16
}
},
{
"title": "SQL Data Type Quick Reference",
"fromPageRect": {
"top": 444.890625,
"left": 1207,
"width": 208,
"right": 1415,
"bottom": 460.890625,
"height": 16
}
},
{
"title": "autoCorrectSpelling",
"fromPageRect": {
"top": 864.890625,
"left": 1207,
"width": 125,
"right": 1332,
"bottom": 880.890625,
"height": 16
}
},
{
"title": "Programming cheats for Operators, Expressions and statements",
"fromPageRect": {
"top": 346.890625,
"left": 1207,
"width": 404,
"right": 1611,
"bottom": 362.890625,
"height": 16
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 211,
"right": 1418,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "sucks-it-guy.jpg",
"fromPageRect": {
"top": 332.890625,
"left": 1207,
"width": 99,
"right": 1306,
"bottom": 348.890625,
"height": 16
}
},
{
"title": "Programming cheats for Operators, Expressions and statements",
"fromPageRect": {
"top": 346.890625,
"left": 1207,
"width": 404,
"right": 1611,
"bottom": 362.890625,
"height": 16
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 211,
"right": 1418,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "Untitled 2"
},
{
"title": "Draft of 'Untitled 2'"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 499.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 515.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 457.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 473.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 211,
"right": 1418,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "//otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 151,
"left": 85,
"width": 203,
"right": 288,
"bottom": 167,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Metric Alarm on CRPCTX02"
},
{
"title": "Timothy taylor",
"fromPageRect": {
"top": 123,
"left": 85,
"width": 81,
"right": 166,
"bottom": 139,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "UpdateHelpTrackErrors.ps1"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Setting up a new user in GP 10 or GP 2010"
},
{
"title": "Draft of 'New Tiddler'",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 131,
"right": 1338,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "PowerShell"
},
{
"title": "UpdateHelpTrackErrors.ps1",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 175,
"right": 1382,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "Calendar"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "Calendar"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 402.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 418.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 211,
"right": 1411,
"bottom": 281,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Vendor Class ID Tables in GP"
},
{
"title": "Draft of 'Vendor Class ID Tables in GP'"
},
{
"title": "Vendor Class ID Tables in GP"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "To send a fax from within your email"
},
{
"title": "Draft of 'To send a fax from within your email'"
},
{
"title": "To send a fax from within your email"
},
{
"title": "Draft of 'To send a fax from within your email'"
},
{
"title": "To send a fax from within your email"
},
{
"title": "fax from dispatch email.pdf"
},
{
"title": "fax from dispatch email.pdf",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 168,
"right": 1375,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'To send a fax from within your email'"
},
{
"title": "fax from dispatch email.pdf",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 168,
"right": 1375,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'fax from dispatch email.pdf'"
},
{
"title": "fax from dispatch email.pdf"
},
{
"title": "Draft of 'fax from dispatch email.pdf'"
},
{
"title": "fax from dispatch email.pdf"
},
{
"title": "$:/temp/ImportReport"
},
{
"title": "Draft of '$:/temp/ImportReport'"
},
{
"title": "EasyLink Desktop Fax Instructions (2).pdf"
},
{
"title": "EasyLink MFP Scan to Fax Instructions.pdf"
},
{
"title": "EasyLink Desktop Fax Instructions (2).pdf",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 262,
"right": 1462,
"bottom": 267,
"height": 16
}
},
{
"title": "EasyLink Desktop Fax Instructions (2).pdf",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 262,
"right": 1462,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'EasyLink Desktop Fax Instructions (2).pdf'"
},
{
"title": "EasyLink Desktop Fax Instructions (2).pdf"
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 500.890625,
"left": 1207,
"width": 211,
"right": 1418,
"bottom": 516.890625,
"height": 16
}
},
{
"title": "Small download proxy",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 136,
"right": 1336,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 321,
"left": 1200,
"width": 70,
"right": 1270,
"bottom": 337,
"height": 16
}
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 70,
"right": 1277,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "Untitled 2"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'Untitled 2'"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "PowerShell Data Variable Data Types"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "PowerShell Common Comparison Operators"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 70,
"right": 1277,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "ParameterSetName",
"fromPageRect": {
"top": 162,
"left": 93,
"width": 124,
"right": 217,
"bottom": 178,
"height": 16
}
},
{
"title": "autoCorrectSpelling",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 125,
"right": 1325,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "$:/~StyleSheet"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "StyleSheet Tiddler How to"
},
{
"title": "Draft of '$:/~StyleSheet'"
},
{
"title": "$:/~StyleSheet"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "Draft of '$:/~StyleSheet'"
},
{
"title": "$:/~StyleSheet"
},
{
"title": "PowerShell Advanced Function Parameters",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 273,
"right": 1480,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "StyleSheet Tiddler How to",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 162,
"right": 1362,
"bottom": 281,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 143,
"right": 1350,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 86,
"right": 1293,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 86,
"right": 1293,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "StyleSheet Tiddler How to",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 162,
"right": 1369,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "PowerShell Advanced Function Parameters",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 273,
"right": 1480,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 86,
"right": 1293,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 143,
"right": 1350,
"bottom": 292.890625,
"height": 16
}
},
{
"title": " $:/tags/stylesheet",
"fromPageRect": {
"top": 322.890625,
"left": 1274,
"width": 278,
"right": 1552,
"bottom": 336.890625,
"height": 14
}
},
{
"title": "$:/~StyleSheet",
"fromPageRect": {
"top": 352.890625,
"left": 1274,
"width": 278,
"right": 1552,
"bottom": 366.890625,
"height": 14
}
},
{
"title": "Draft of '$:/~StyleSheet'"
},
{
"title": "$:/TagManager"
},
{
"title": "Draft of '$:/TagManager'"
},
{
"title": "$:/TagManager"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 86,
"right": 1293,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "StyleSheet Tiddler How to",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 162,
"right": 1369,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Untitled 2"
},
{
"title": "$:/StyleSheet"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "$:/boot/boot.css",
"fromPageRect": {
"top": 265.890625,
"left": 1273,
"width": 101,
"right": 1374,
"bottom": 281.890625,
"height": 16
}
},
{
"title": "$:/config/AnimationDuration",
"fromPageRect": {
"top": 307.890625,
"left": 1273,
"width": 174,
"right": 1447,
"bottom": 323.890625,
"height": 16
}
},
{
"title": "Draft of '$:/config/AnimationDuration'"
},
{
"title": "$:/config/AnimationDuration"
},
{
"title": "$:/palette",
"fromPageRect": {
"top": 405.890625,
"left": 1273,
"width": 59,
"right": 1332,
"bottom": 421.890625,
"height": 16
}
},
{
"title": "$:/plugins/tiddlywiki/fullscreen",
"fromPageRect": {
"top": 433.890625,
"left": 1273,
"width": 185,
"right": 1458,
"bottom": 449.890625,
"height": 16
}
},
{
"title": "$:/ShowEditPreview",
"fromPageRect": {
"top": 447.890625,
"left": 1273,
"width": 123,
"right": 1396,
"bottom": 463.890625,
"height": 16
}
},
{
"title": "Draft of '$:/ShowEditPreview'"
},
{
"title": "$:/ShowEditPreview"
},
{
"title": "Draft of '$:/plugins/tiddlywiki/fullscreen'"
},
{
"title": "$:/plugins/tiddlywiki/fullscreen"
},
{
"title": "$:/SiteTitle",
"fromPageRect": {
"top": 461.890625,
"left": 1273,
"width": 67,
"right": 1340,
"bottom": 477.890625,
"height": 16
}
},
{
"title": "$:/state/encrypt",
"fromPageRect": {
"top": 475.890625,
"left": 1273,
"width": 98,
"right": 1371,
"bottom": 491.890625,
"height": 16
}
},
{
"title": "$:/status/UserName",
"fromPageRect": {
"top": 587.890625,
"left": 1273,
"width": 123,
"right": 1396,
"bottom": 603.890625,
"height": 16
}
},
{
"title": "$:/StoryList",
"fromPageRect": {
"top": 601.890625,
"left": 1273,
"width": 71,
"right": 1344,
"bottom": 617.890625,
"height": 16
}
},
{
"title": "$:/StyleSheet",
"fromPageRect": {
"top": 615.890625,
"left": 1273,
"width": 84,
"right": 1357,
"bottom": 631.890625,
"height": 16
}
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "Draft of '$:/StyleSheet'"
},
{
"title": "$:/StyleSheet"
},
{
"title": "Draft of '$:/StyleSheet'"
},
{
"title": "$:/StyleSheet"
},
{
"title": "Draft of '$:/StyleSheet'"
},
{
"title": "$:/StyleSheet"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 330,
"right": 1537,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "StyleSheet Tiddler How to",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 162,
"right": 1369,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 70,
"right": 1277,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "$:/StyleSheet",
"fromPageRect": {
"top": 615.890625,
"left": 1273,
"width": 84,
"right": 1357,
"bottom": 631.890625,
"height": 16
}
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "PowerShell"
},
{
"title": "Birch Communications",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 140,
"right": 1340,
"bottom": 267,
"height": 16
}
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 279,
"left": 1200,
"width": 70,
"right": 1270,
"bottom": 295,
"height": 16
}
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'Birch Communications'"
},
{
"title": "Birch Communications"
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 185,
"right": 1385,
"bottom": 281,
"height": 16
}
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 279,
"left": 1200,
"width": 70,
"right": 1270,
"bottom": 295,
"height": 16
}
},
{
"title": "PowerShell Advanced Function Parameters",
"fromPageRect": {
"top": 293,
"left": 1200,
"width": 273,
"right": 1473,
"bottom": 309,
"height": 16
}
},
{
"title": "PowerShell Common Comparison Operators",
"fromPageRect": {
"top": 307,
"left": 1200,
"width": 278,
"right": 1478,
"bottom": 323,
"height": 16
}
},
{
"title": "Draft of 'PowerShell Common Comparison Operators'"
},
{
"title": "Draft of 'PowerShell Advanced Function Parameters'"
},
{
"title": "PowerShell Advanced Function Parameters"
},
{
"title": "PowerShell Common Comparison Operators"
},
{
"title": "PowerShell Data Variable Data Types",
"fromPageRect": {
"top": 321,
"left": 1200,
"width": 237,
"right": 1437,
"bottom": 337,
"height": 16
}
},
{
"title": "Draft of 'PowerShell Data Variable Data Types'"
},
{
"title": "SQL Data Type Quick Reference",
"fromPageRect": {
"top": 349,
"left": 1200,
"width": 208,
"right": 1408,
"bottom": 365,
"height": 16
}
},
{
"title": "Draft of 'SQL Data Type Quick Reference'"
},
{
"title": "SQL Data Types",
"fromPageRect": {
"top": 377,
"left": 1200,
"width": 105,
"right": 1305,
"bottom": 393,
"height": 16
}
},
{
"title": "Draft of 'SQL Data Types'"
},
{
"title": "SQL Server Data Types String Types",
"fromPageRect": {
"top": 405,
"left": 1200,
"width": 235,
"right": 1435,
"bottom": 421,
"height": 16
}
},
{
"title": "Draft of 'SQL Server Data Types String Types'"
},
{
"title": "Vendor Class ID Tables in GP",
"fromPageRect": {
"top": 433,
"left": 1200,
"width": 188,
"right": 1388,
"bottom": 449,
"height": 16
}
},
{
"title": "Draft of 'Vendor Class ID Tables in GP'"
},
{
"title": "Vendor Class ID Tables in GP"
},
{
"title": "SQL Server Data Types String Types"
},
{
"title": "SQL Data Types"
},
{
"title": "SQL Data Type Quick Reference"
},
{
"title": "PowerShell Data Variable Data Types"
},
{
"title": "$:/StyleSheet",
"fromPageRect": {
"top": 615.890625,
"left": 1273,
"width": 84,
"right": 1357,
"bottom": 631.890625,
"height": 16
}
},
{
"title": "Draft of '$:/StyleSheet'"
},
{
"title": "$:/StyleSheet"
},
{
"title": "$:/StyleSheet",
"fromPageRect": {
"top": 615.890625,
"left": 1273,
"width": 84,
"right": 1357,
"bottom": 631.890625,
"height": 16
}
},
{
"title": "$:/StyleSheet",
"fromPageRect": {
"top": 615.890625,
"left": 1273,
"width": 84,
"right": 1357,
"bottom": 631.890625,
"height": 16
}
},
{
"title": "Draft of '$:/StyleSheet'"
},
{
"title": "$:/StyleSheet"
},
{
"title": "Draft of '$:/StyleSheet'"
},
{
"title": "$:/StyleSheet"
},
{
"title": "WebSite",
"fromPageRect": {
"top": 85,
"left": 1024,
"width": 54,
"right": 1078,
"bottom": 101,
"height": 16
}
},
{
"title": "Draft of '$:/StyleSheet'"
},
{
"title": "$:/StyleSheet"
},
{
"title": "PowerShell Data Variable Data Types",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 237,
"right": 1444,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'PowerShell Data Variable Data Types'"
},
{
"title": "PowerShell Data Variable Data Types"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types'"
},
{
"title": "New Tiddler 1"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "PowerShell Data Variable Data Types"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "PowerShell Data Variable Data Types",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 237,
"right": 1444,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'PowerShell Data Variable Data Types'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "PowerShell Data Variable Data Types"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Birch Communications",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 140,
"right": 1340,
"bottom": 267,
"height": 16
}
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 185,
"right": 1385,
"bottom": 281,
"height": 16
}
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 416.890625,
"left": 1207,
"width": 70,
"right": 1277,
"bottom": 432.890625,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 528.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 544.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 363,
"left": 1200,
"width": 185,
"right": 1385,
"bottom": 379,
"height": 16
}
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 377,
"left": 1200,
"width": 132,
"right": 1332,
"bottom": 393,
"height": 16
}
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 391,
"left": 1200,
"width": 89,
"right": 1289,
"bottom": 407,
"height": 16
}
},
{
"title": "Visual Studio 2013 Code Snippets",
"fromPageRect": {
"top": 405,
"left": 1200,
"width": 215,
"right": 1415,
"bottom": 421,
"height": 16
}
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 267,
"right": 1467,
"bottom": 267,
"height": 16
}
},
{
"title": "Edit PO VB Program Validation",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 194,
"right": 1394,
"bottom": 281,
"height": 16
}
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 293,
"left": 1200,
"width": 137,
"right": 1337,
"bottom": 309,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "TMW support info - incomplete.msg"
},
{
"title": "Support for TMW"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Support for TMW",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 108,
"right": 1315,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Support for TMW'"
},
{
"title": "Support for TMW"
},
{
"title": "Draft of 'Support for TMW'"
},
{
"title": "Support for TMW"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'Support for TMW'"
},
{
"title": "Indent text in tw5"
},
{
"title": "Draft of 'Indent text in tw5'"
},
{
"title": "Indent text in tw5"
},
{
"title": "Draft of 'Indent text in tw5'"
},
{
"title": "Indent text in tw5"
},
{
"title": "Draft of 'Indent text in tw5'"
},
{
"title": "Indent text in tw5"
},
{
"title": "Support for TMW"
},
{
"title": "Support for TMW",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 108,
"right": 1315,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Support for TMW'"
},
{
"title": "Support for TMW"
},
{
"title": "Indent text in tw5",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 105,
"right": 1312,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Draft of 'Indent text in tw5'"
},
{
"title": "Indent text in tw5"
},
{
"title": "Draft of 'Support for TMW'"
},
{
"title": "Support for TMW"
},
{
"title": "TMW support info - incomplete.msg",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 223,
"right": 1423,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'TMW support info - incomplete.msg'"
},
{
"title": "Export TMW to Tanker Pro AR Orders",
"fromPageRect": {
"top": 279,
"left": 1200,
"width": 239,
"right": 1439,
"bottom": 295,
"height": 16
}
},
{
"title": "Draft of 'Export TMW to Tanker Pro AR Orders'"
},
{
"title": "Export TMW to Tanker Pro AR Orders"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Virtualization Overview"
},
{
"title": "Draft of 'Topic Notes: Virtualization Overview'"
},
{
"title": "Topic Notes: Virtualization Overview"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: What Makes up a Virtual Datacenter?"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Virtual Datacenter Management"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: vSphere 5 Products"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: vSphere 5 Licensing"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: ESXi Installation Options and Requirements"
},
{
"title": "Topic Notes: ESXi Installation Options and Requirements",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 356,
"right": 1563,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Configure ESXi via the DCUI"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Configure ESXi via vSphere Client"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Configure ESXi via vCenter Server"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Additional Plug-in Installation"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Installing vSphere Client"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Installing vSphere Web Client"
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 89,
"right": 1289,
"bottom": 281,
"height": 16
}
},
{
"title": "Draft of 'Sales Reports'"
},
{
"title": "Sales Reports"
},
{
"title": "Calendar",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 58,
"right": 1258,
"bottom": 281,
"height": 16
}
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "Calendar"
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "Calendar"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: VM Resources and Networking"
},
{
"title": "Notes",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 36,
"right": 1236,
"bottom": 267,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 640.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 656.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 335,
"left": 1200,
"width": 137,
"right": 1337,
"bottom": 351,
"height": 16
}
},
{
"title": "//otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 151,
"left": 85,
"width": 203,
"right": 288,
"bottom": 167,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Intellum Automatino"
},
{
"title": "Draft of 'Intellum Automatino'"
},
{
"title": "Intellum Automatino"
},
{
"title": "Intellum Automatino",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 123,
"right": 1323,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'Intellum Automatino'"
},
{
"title": "Intellum Automation"
},
{
"title": "Links",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 33,
"right": 1233,
"bottom": 281,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 332.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 348.890625,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 332.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 348.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Links",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 33,
"right": 1240,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 374.890625,
"left": 1207,
"width": 58,
"right": 1265,
"bottom": 390.890625,
"height": 16
}
},
{
"title": "Links",
"fromPageRect": {
"top": 290.890625,
"left": 1207,
"width": 33,
"right": 1240,
"bottom": 306.890625,
"height": 16
}
},
{
"title": "Untitled 3"
},
{
"title": "Untitled 4"
},
{
"title": "Untitled 4",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 59,
"right": 1266,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Untitled 3",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 59,
"right": 1266,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Intellum Automation",
"fromPageRect": {
"top": 318.890625,
"left": 1207,
"width": 123,
"right": 1330,
"bottom": 334.890625,
"height": 16
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 276.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 292.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "freeconferencecall.com/wall/401825030",
"fromPageRect": {
"top": 94.5,
"left": 85,
"width": 155,
"right": 240,
"bottom": 110.5,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "//otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 165,
"left": 85,
"width": 203,
"right": 288,
"bottom": 181,
"height": 16
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "//otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 109,
"left": 85,
"width": 203,
"right": 288,
"bottom": 125,
"height": 16
}
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 185,
"right": 1385,
"bottom": 267,
"height": 16
}
},
{
"title": "Birch Communications",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 140,
"right": 1340,
"bottom": 267,
"height": 16
}
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 304.890625,
"left": 1207,
"width": 68,
"right": 1275,
"bottom": 320.890625,
"height": 16
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "//otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 165,
"left": 85,
"width": 203,
"right": 288,
"bottom": 181,
"height": 16
}
},
{
"title": "Birch Communications",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 140,
"right": 1340,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'Birch Communications'"
},
{
"title": "Birch Communications"
},
{
"title": "Draft of 'Birch Communications'"
},
{
"title": "Birch Communications"
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 265,
"left": 1200,
"width": 185,
"right": 1385,
"bottom": 281,
"height": 16
}
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "CSC Site Support information"
},
{
"title": "Intellum Automation",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 123,
"right": 1323,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Deploying vCenter Server Appliance"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Configuring the VCSA Console and Browser"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: VCSA Web Interfaces and Clients"
},
{
"title": "Draft of 'Topic Notes: VCSA Web Interfaces and Clients'"
},
{
"title": "Topic Notes: VCSA Web Interfaces and Clients"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Upgrading vSphere 5"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Preparing to Upgrade vCenter Server"
},
{
"title": "Draft of 'Topic Notes: Preparing to Upgrade vCenter Server'"
},
{
"title": "Topic Notes: Preparing to Upgrade vCenter Server"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Upgrading vCenter Server"
},
{
"title": "Draft of 'Topic Notes: Upgrading vCenter Server'"
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 105,
"right": 1305,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "User stuck in GP"
},
{
"title": "Topic Notes: Upgrading vCenter Server"
},
{
"title": "Topic Notes: Upgrading vCenter Server",
"fromPageRect": {
"top": 251,
"left": 1200,
"width": 248,
"right": 1448,
"bottom": 267,
"height": 16
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'Topic Notes: Upgrading vCenter Server'"
},
{
"title": "Topic Notes: Upgrading vCenter Server"
},
{
"title": "Draft of 'Topic Notes: Upgrading vCenter Server'"
},
{
"title": "Topic Notes: Upgrading vCenter Server"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'New Tiddler 1'",
"fromPageRect": {
"top": 324.67327880859375,
"left": 1206.9886474609375,
"width": 133.6363525390625,
"right": 1340.625,
"bottom": 340.1278381347656,
"height": 15.454545021057129
}
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 311.03692626953125,
"left": 1206.9886474609375,
"width": 80.90908813476562,
"right": 1287.897705078125,
"bottom": 326.4914855957031,
"height": 15.454545021057129
}
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 311.03692626953125,
"left": 1206.9886474609375,
"width": 80.90908813476562,
"right": 1287.897705078125,
"bottom": 326.4914855957031,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Upgrading vCenter Server",
"fromPageRect": {
"top": 311.03692626953125,
"left": 1206.9886474609375,
"width": 230.90908813476562,
"right": 1437.897705078125,
"bottom": 326.4914855957031,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'Topic Notes: Upgrading vCenter Server'"
},
{
"title": "Topic Notes: Upgrading vCenter Server"
},
{
"title": "Draft of 'New Tiddler 1'",
"fromPageRect": {
"top": 324.67327880859375,
"left": 1206.9886474609375,
"width": 133.6363525390625,
"right": 1340.625,
"bottom": 340.1278381347656,
"height": 15.454545021057129
}
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 351.9460144042969,
"left": 1206.9886474609375,
"width": 100,
"right": 1306.9886474609375,
"bottom": 367.40057373046875,
"height": 15.454545021057129
}
},
{
"title": "New Tiddler 1",
"fromPageRect": {
"top": 338.3096618652344,
"left": 1206.9886474609375,
"width": 80.90908813476562,
"right": 1287.897705078125,
"bottom": 353.76422119140625,
"height": 15.454545021057129
}
},
{
"title": "Topic Notes: Upgrading vCenter Server",
"fromPageRect": {
"top": 311.03692626953125,
"left": 1206.9886474609375,
"width": 230.90908813476562,
"right": 1437.897705078125,
"bottom": 326.4914855957031,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'New Tiddler 1'",
"fromPageRect": {
"top": 324.67327880859375,
"left": 1206.9886474609375,
"width": 133.6363525390625,
"right": 1340.625,
"bottom": 340.1278381347656,
"height": 15.454545021057129
}
},
{
"title": "Topic Notes: Post upgrade VCSA"
},
{
"title": "Draft of 'Topic Notes: Post upgrade VCSA'"
},
{
"title": "Topic Notes: Post upgrade VCSA"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Upgrade Virtual Center Server Appliance"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Topic Notes: Upgrading VCSA and Update Manager"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 196.36363220214844,
"right": 1396.3636474609375,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Bridgepoint errors not processing'"
},
{
"title": "Bridgepoint errors not processing"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 196.36363220214844,
"right": 1396.3636474609375,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 342.2301025390625,
"left": 1200,
"width": 70,
"right": 1270,
"bottom": 357.6846618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'New Tiddler 1'",
"fromPageRect": {
"top": 328.59375,
"left": 1200,
"width": 133.6363525390625,
"right": 1333.6363525390625,
"bottom": 344.0483093261719,
"height": 15.454545021057129
}
},
{
"title": "Server Prodessing Error"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "IPSec Network-to-Network VPN SME Server 7.1 HOWTO"
},
{
"title": "-- ExecuteReader requires an open and available Connection",
"fromPageRect": {
"top": 287.6846618652344,
"left": 1200,
"width": 358.1817932128906,
"right": 1558.1817626953125,
"bottom": 303.13922119140625,
"height": 15.454545021057129
}
},
{
"title": "Draft of '-- ExecuteReader requires an open and available Connection'"
},
{
"title": "ExecuteReader requires an open and available Connection"
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 287.6846618652344,
"left": 1200,
"width": 171.81817626953125,
"right": 1371.818115234375,
"bottom": 303.13922119140625,
"height": 15.454545021057129
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 328.59375,
"left": 1200,
"width": 34.54545211791992,
"right": 1234.54541015625,
"bottom": 344.0483093261719,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Quarantined FTP to DTN File'"
},
{
"title": "Quarantined FTP to DTN File"
},
{
"title": "Draft of 'Notes'"
},
{
"title": "Notes"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Dell OpenManage 7.1 Ubuntu Repository"
},
{
"title": "Draft of 'Dell OpenManage 7.1 Ubuntu Repository'"
},
{
"title": "Dell OpenManage 7.1 Ubuntu Repository"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Installing Media Server"
},
{
"title": "Readme.html"
},
{
"title": "HID_UN_Crp09Hz_R_364.jpg"
},
{
"title": "$:/temp/ImportReport"
},
{
"title": "HID_UN_Crp09Hz_R_368.jpg",
"fromPageRect": {
"top": 95.25567626953125,
"left": 124.88636016845703,
"width": 174.54544067382812,
"right": 299.4317932128906,
"bottom": 110.71022033691406,
"height": 15.454545021057129
}
},
{
"title": "Draft of '$:/temp/ImportReport'"
},
{
"title": "$:/temp/ImportReport"
},
{
"title": "Draft of '$:/temp/ImportReport'"
},
{
"title": "HID_UN_Crp09Hz_R_364.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 174.54544067382812,
"right": 1381.5340576171875,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'HID_UN_Crp09Hz_R_364.jpg'"
},
{
"title": "HID_UN_Crp09Hz_R_364.jpg"
},
{
"title": "Readme.html",
"fromPageRect": {
"top": 394.67327880859375,
"left": 1206.9886474609375,
"width": 80,
"right": 1286.9886474609375,
"bottom": 410.1278381347656,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Readme.html'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 394.67327880859375,
"left": 1206.9886474609375,
"width": 131.81817626953125,
"right": 1338.806884765625,
"bottom": 410.1278381347656,
"height": 15.454545021057129
}
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 84.54544830322266,
"right": 1284.54541015625,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 196.36363220214844,
"right": 1396.3636474609375,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 394.67327880859375,
"left": 1206.9886474609375,
"width": 131.81817626953125,
"right": 1338.806884765625,
"bottom": 410.1278381347656,
"height": 15.454545021057129
}
},
{
"title": "Intellum Automation",
"fromPageRect": {
"top": 342.2301025390625,
"left": 1200,
"width": 115.45454406738281,
"right": 1315.45458984375,
"bottom": 357.6846618652344,
"height": 15.454545021057129
}
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 394.67327880859375,
"left": 1206.9886474609375,
"width": 131.81817626953125,
"right": 1338.806884765625,
"bottom": 410.1278381347656,
"height": 15.454545021057129
}
},
{
"title": "Independent_Distributor_364.jpg",
"fromPageRect": {
"top": 381.03692626953125,
"left": 1206.9886474609375,
"width": 190,
"right": 1396.9886474609375,
"bottom": 396.4914855957031,
"height": 15.454545021057129
}
},
{
"title": "HID_UN_Crp09Hz_R_364.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 174.54544067382812,
"right": 1381.5340576171875,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "HID_UN_Crp09Hz_R_364.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 174.54544067382812,
"right": 1381.5340576171875,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'HID_UN_Crp09Hz_R_364.jpg'"
},
{
"title": "HID_UN_Crp09Hz_R_364.jpg"
},
{
"title": "Draft of 'HID_UN_Crp09Hz_R_364.jpg'"
},
{
"title": "HID_UN_Crp09Hz_R_368.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 174.54544067382812,
"right": 1381.5340576171875,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'HID_UN_Crp09Hz_R_368.jpg'"
},
{
"title": "HID_UN_Crp09Hz_R_Blk.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 170.90908813476562,
"right": 1377.897705078125,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'HID_UN_Crp09Hz_R_Blk.jpg'"
},
{
"title": "HID_UN_Crp09Stk_R_368.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 177.27272033691406,
"right": 1384.2613525390625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "HID_UN_Crp09Stk_R_368.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 177.27272033691406,
"right": 1384.2613525390625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'HID_UN_Crp09Stk_R_368.jpg'"
},
{
"title": "HID_UN_Crp09Stk_R_Blk.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 173.6363525390625,
"right": 1380.625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'HID_UN_Crp09Stk_R_Blk.jpg'"
},
{
"title": "Independent_Distributor_364.jpg",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 190,
"right": 1396.9886474609375,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Independent_Distributor_364.jpg'"
},
{
"title": "Dell OpenManage 7.1 Ubuntu Repository",
"fromPageRect": {
"top": 326.491455078125,
"left": 1206.9886474609375,
"width": 239.99998474121094,
"right": 1446.9886474609375,
"bottom": 341.9460144042969,
"height": 15.454545021057129
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 196.36363220214844,
"right": 1396.3636474609375,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 84.54544830322266,
"right": 1284.54541015625,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "SalesReport",
"fromPageRect": {
"top": 136.16476440429688,
"left": 175.79544067382812,
"width": 73.63636016845703,
"right": 249.43179321289062,
"bottom": 151.6193084716797,
"height": 15.454545021057129
}
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 131.81817626953125,
"right": 1338.806884765625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 355.866455078125,
"left": 1200,
"width": 67.2727279663086,
"right": 1267.272705078125,
"bottom": 371.3210144042969,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 67.2727279663086,
"right": 1274.2613525390625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 67.2727279663086,
"right": 1274.2613525390625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Batch Missing from GP",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 136.36363220214844,
"right": 1336.3636474609375,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "Links",
"fromPageRect": {
"top": 490.1278381347656,
"left": 1206.9886474609375,
"width": 30.909090042114258,
"right": 1237.897705078125,
"bottom": 505.5823974609375,
"height": 15.454545021057129
}
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 340.1278381347656,
"left": 1206.9886474609375,
"width": 131.81817626953125,
"right": 1338.806884765625,
"bottom": 355.5823974609375,
"height": 15.454545021057129
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 67.2727279663086,
"right": 1274.2613525390625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Batch Missing from GP",
"fromPageRect": {
"top": 287.6846618652344,
"left": 1200,
"width": 136.36363220214844,
"right": 1336.3636474609375,
"bottom": 303.13922119140625,
"height": 15.454545021057129
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 196.36363220214844,
"right": 1396.3636474609375,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "Export TMW to Tanker Pro AR Orders",
"fromPageRect": {
"top": 355.866455078125,
"left": 1200,
"width": 224.54544067382812,
"right": 1424.54541015625,
"bottom": 371.3210144042969,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Export TMW to Tanker Pro AR Orders'"
},
{
"title": "Export TMW to Tanker Pro AR Orders"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 326.491455078125,
"left": 1206.9886474609375,
"width": 67.2727279663086,
"right": 1274.2613525390625,
"bottom": 341.9460144042969,
"height": 15.454545021057129
}
},
{
"title": "Links",
"fromPageRect": {
"top": 503.7641906738281,
"left": 1206.9886474609375,
"width": 30.909090042114258,
"right": 1237.897705078125,
"bottom": 519.21875,
"height": 15.454545021057129
}
},
{
"title": "Links",
"fromPageRect": {
"top": 503.7641906738281,
"left": 1206.9886474609375,
"width": 30.909090042114258,
"right": 1237.897705078125,
"bottom": 519.21875,
"height": 15.454545021057129
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 326.491455078125,
"left": 1206.9886474609375,
"width": 67.2727279663086,
"right": 1274.2613525390625,
"bottom": 341.9460144042969,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 312.8551025390625,
"left": 1206.9886474609375,
"width": 67.2727279663086,
"right": 1274.2613525390625,
"bottom": 328.3096618652344,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "timwtaylor.ddns.net:8080",
"fromPageRect": {
"top": 531.647705078125,
"left": 84.88636016845703,
"width": 27.27272605895996,
"right": 112.15908813476562,
"bottom": 547.1022338867188,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 381.03692626953125,
"left": 1206.9886474609375,
"width": 131.81817626953125,
"right": 1338.806884765625,
"bottom": 396.4914855957031,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Batch Missing from GP",
"fromPageRect": {
"top": 287.6846618652344,
"left": 1200,
"width": 136.36363220214844,
"right": 1336.3636474609375,
"bottom": 303.13922119140625,
"height": 15.454545021057129
}
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 410.41192626953125,
"left": 1200,
"width": 100,
"right": 1300,
"bottom": 425.8664855957031,
"height": 15.454545021057129
}
},
{
"title": "//otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 164.34658813476562,
"left": 84.88636016845703,
"width": 197.27272033691406,
"right": 282.1590881347656,
"bottom": 179.80113220214844,
"height": 15.454545021057129
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 314.9573669433594,
"left": 1200,
"width": 171.81817626953125,
"right": 1371.818115234375,
"bottom": 330.41192626953125,
"height": 15.454545021057129
}
},
{
"title": "Vendor Class ID Tables in GP",
"fromPageRect": {
"top": 369.5028381347656,
"left": 1200,
"width": 176.36363220214844,
"right": 1376.3636474609375,
"bottom": 384.9573974609375,
"height": 15.454545021057129
}
},
{
"title": "Links",
"fromPageRect": {
"top": 301.3210144042969,
"left": 1200,
"width": 30.909090042114258,
"right": 1230.9090576171875,
"bottom": 316.77557373046875,
"height": 15.454545021057129
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 360.0141906738281,
"left": 956.9885864257812,
"width": 130,
"right": 1086.988525390625,
"bottom": 374.55963134765625,
"height": 14.545454025268555
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/core/modules/utils/dom/animations/slide.js",
"fromPageRect": {
"top": 401.7329406738281,
"left": 124.88636016845703,
"width": 285.45452880859375,
"right": 410.34088134765625,
"bottom": 416.27838134765625,
"height": 14.545454025268555
}
},
{
"title": "$:/core/modules/widgets/element.js",
"fromPageRect": {
"top": 408.22442626953125,
"left": 124.88636016845703,
"width": 225.4545440673828,
"right": 350.3409118652344,
"bottom": 422.7698669433594,
"height": 14.545454025268555
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 754.5596313476562,
"left": 956.9885864257812,
"width": 52.727272033691406,
"right": 1009.7158813476562,
"bottom": 769.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Links",
"fromPageRect": {
"top": 283.6505432128906,
"left": 956.9885864257812,
"width": 29.999998092651367,
"right": 986.9885864257812,
"bottom": 298.19598388671875,
"height": 14.545454025268555
}
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 387.5141906738281,
"left": 949.9999389648438,
"width": 168.1818084716797,
"right": 1118.1817626953125,
"bottom": 402.05963134765625,
"height": 14.545454025268555
}
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 412.96875,
"left": 949.9999389648438,
"width": 80.90908813476562,
"right": 1030.9090576171875,
"bottom": 427.5141906738281,
"height": 14.545454025268555
}
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 400.241455078125,
"left": 949.9999389648438,
"width": 119.99999237060547,
"right": 1069.9998779296875,
"bottom": 414.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 374.78692626953125,
"left": 949.9999389648438,
"width": 32.727272033691406,
"right": 982.7272338867188,
"bottom": 389.3323669433594,
"height": 14.545454025268555
}
},
{
"title": "Links",
"fromPageRect": {
"top": 283.6505432128906,
"left": 956.9885864257812,
"width": 29.999998092651367,
"right": 986.9885864257812,
"bottom": 298.19598388671875,
"height": 14.545454025268555
}
},
{
"title": "Installing Media Server",
"fromPageRect": {
"top": 360.0141906738281,
"left": 956.9885864257812,
"width": 130,
"right": 1086.988525390625,
"bottom": 374.55963134765625,
"height": 14.545454025268555
}
},
{
"title": "Dell OpenManage 7.1 Ubuntu Repository",
"fromPageRect": {
"top": 372.741455078125,
"left": 956.9885864257812,
"width": 235.4545440673828,
"right": 1192.443115234375,
"bottom": 387.2868957519531,
"height": 14.545454025268555
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 398.1960144042969,
"left": 956.9885864257812,
"width": 32.727272033691406,
"right": 989.7158813476562,
"bottom": 412.741455078125,
"height": 14.545454025268555
}
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 410.92327880859375,
"left": 956.9885864257812,
"width": 168.1818084716797,
"right": 1125.17041015625,
"bottom": 425.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "ExecuteReader requires an open and available Connection",
"fromPageRect": {
"top": 436.3778381347656,
"left": 956.9885864257812,
"width": 339.0909118652344,
"right": 1296.0794677734375,
"bottom": 450.92327880859375,
"height": 14.545454025268555
}
},
{
"title": "IPSec Network-to-Network VPN SME Server 7.1 HOWTO",
"fromPageRect": {
"top": 449.1051025390625,
"left": 956.9885864257812,
"width": 320.9090881347656,
"right": 1277.897705078125,
"bottom": 463.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "Server Prodessing Error",
"fromPageRect": {
"top": 461.8323669433594,
"left": 956.9885864257812,
"width": 139.0908966064453,
"right": 1096.0794677734375,
"bottom": 476.3778076171875,
"height": 14.545454025268555
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 474.55963134765625,
"left": 956.9885864257812,
"width": 191.81817626953125,
"right": 1148.8067626953125,
"bottom": 489.1050720214844,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrading VCSA and Update Manager",
"fromPageRect": {
"top": 500.0141906738281,
"left": 956.9885864257812,
"width": 296.3636169433594,
"right": 1253.3521728515625,
"bottom": 514.5596313476562,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrade Virtual Center Server Appliance",
"fromPageRect": {
"top": 512.741455078125,
"left": 956.9885864257812,
"width": 309.0909118652344,
"right": 1266.0794677734375,
"bottom": 527.2869262695312,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Post upgrade VCSA",
"fromPageRect": {
"top": 525.46875,
"left": 956.9885864257812,
"width": 190,
"right": 1146.988525390625,
"bottom": 540.0142211914062,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrading vCenter Server",
"fromPageRect": {
"top": 538.1959838867188,
"left": 956.9885864257812,
"width": 225.4545440673828,
"right": 1182.443115234375,
"bottom": 552.741455078125,
"height": 14.545454025268555
}
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 550.9232788085938,
"left": 956.9885864257812,
"width": 95.45454406738281,
"right": 1052.443115234375,
"bottom": 565.46875,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Preparing to Upgrade vCenter Server",
"fromPageRect": {
"top": 576.3778076171875,
"left": 956.9885864257812,
"width": 290,
"right": 1246.988525390625,
"bottom": 590.9232788085938,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrading vSphere 5",
"fromPageRect": {
"top": 601.8323364257812,
"left": 956.9885864257812,
"width": 197.27272033691406,
"right": 1154.2613525390625,
"bottom": 616.3778076171875,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: VCSA Web Interfaces and Clients",
"fromPageRect": {
"top": 614.5596313476562,
"left": 956.9885864257812,
"width": 267.272705078125,
"right": 1224.26123046875,
"bottom": 629.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Configuring the VCSA Console and Browser",
"fromPageRect": {
"top": 627.2869262695312,
"left": 956.9885864257812,
"width": 327.272705078125,
"right": 1284.26123046875,
"bottom": 641.8323974609375,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Deploying vCenter Server Appliance",
"fromPageRect": {
"top": 652.741455078125,
"left": 956.9885864257812,
"width": 283.6363525390625,
"right": 1240.625,
"bottom": 667.2869262695312,
"height": 14.545454025268555
}
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 665.46875,
"left": 956.9885864257812,
"width": 168.1818084716797,
"right": 1125.17041015625,
"bottom": 680.0142211914062,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrading vCenter Server",
"fromPageRect": {
"top": 538.1959838867188,
"left": 956.9885864257812,
"width": 225.4545440673828,
"right": 1182.443115234375,
"bottom": 552.741455078125,
"height": 14.545454025268555
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Birch Communications",
"fromPageRect": {
"top": 489.1051025390625,
"left": 1251.9886474609375,
"width": 127.27272033691406,
"right": 1379.2613525390625,
"bottom": 503.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "Intellum Automation",
"fromPageRect": {
"top": 514.5596313476562,
"left": 1251.9886474609375,
"width": 111.81817626953125,
"right": 1363.806884765625,
"bottom": 529.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: VM Resources and Networking",
"fromPageRect": {
"top": 540.01416015625,
"left": 1251.9886474609375,
"width": 250.90908813476562,
"right": 1502.897705078125,
"bottom": 554.5596313476562,
"height": 14.545454025268555
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 565.46875,
"left": 1251.9886474609375,
"width": 52.727272033691406,
"right": 1304.7159423828125,
"bottom": 580.0142211914062,
"height": 14.545454025268555
}
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 590.9232788085938,
"left": 1251.9886474609375,
"width": 80.90908813476562,
"right": 1332.897705078125,
"bottom": 605.46875,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Installing vSphere Web Client",
"fromPageRect": {
"top": 616.3778076171875,
"left": 1251.9886474609375,
"width": 243.6363525390625,
"right": 1495.625,
"bottom": 630.9232788085938,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Installing vSphere Client",
"fromPageRect": {
"top": 641.8323364257812,
"left": 1251.9886474609375,
"width": 213.6363525390625,
"right": 1465.625,
"bottom": 656.3778076171875,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Additional Plug-in Installation",
"fromPageRect": {
"top": 654.5596313476562,
"left": 1251.9886474609375,
"width": 239.99998474121094,
"right": 1491.9886474609375,
"bottom": 669.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Configure ESXi via vCenter Server",
"fromPageRect": {
"top": 437.28692626953125,
"left": 1251.9886474609375,
"width": 272.7272644042969,
"right": 1524.7159423828125,
"bottom": 451.8323669433594,
"height": 14.545454025268555
}
},
{
"title": "Indent text in tw5",
"fromPageRect": {
"top": 577.2869262695312,
"left": 1251.9886474609375,
"width": 95.45454406738281,
"right": 1347.4432373046875,
"bottom": 591.8323974609375,
"height": 14.545454025268555
}
},
{
"title": "Support for TMW",
"fromPageRect": {
"top": 564.5596313476562,
"left": 1251.9886474609375,
"width": 98.18181610107422,
"right": 1350.17041015625,
"bottom": 579.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "PowerShell Data Variable Data Types html",
"fromPageRect": {
"top": 602.741455078125,
"left": 1251.9886474609375,
"width": 242.72726440429688,
"right": 1494.7159423828125,
"bottom": 617.2869262695312,
"height": 14.545454025268555
}
},
{
"title": "PowerShell Data Variable Data Types",
"fromPageRect": {
"top": 615.46875,
"left": 1251.9886474609375,
"width": 215.4545440673828,
"right": 1467.4432373046875,
"bottom": 630.0142211914062,
"height": 14.545454025268555
}
},
{
"title": "SQL Data Type Quick Reference",
"fromPageRect": {
"top": 628.1959838867188,
"left": 1251.9886474609375,
"width": 189.0908966064453,
"right": 1441.07958984375,
"bottom": 642.741455078125,
"height": 14.545454025268555
}
},
{
"title": "SQL Data Types",
"fromPageRect": {
"top": 640.9232788085938,
"left": 1251.9886474609375,
"width": 95.45454406738281,
"right": 1347.4432373046875,
"bottom": 655.46875,
"height": 14.545454025268555
}
},
{
"title": "SQL Server Data Types String Types",
"fromPageRect": {
"top": 653.6505737304688,
"left": 1251.9886474609375,
"width": 213.6363525390625,
"right": 1465.625,
"bottom": 668.196044921875,
"height": 14.545454025268555
}
},
{
"title": "EasyLink Desktop Fax Instructions (2).pdf",
"fromPageRect": {
"top": 270.92327880859375,
"left": 1251.9886474609375,
"width": 238.1818084716797,
"right": 1490.17041015625,
"bottom": 285.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "StyleSheet Tiddler How to",
"fromPageRect": {
"top": 245.46873474121094,
"left": 1251.9886474609375,
"width": 147.27272033691406,
"right": 1399.2613525390625,
"bottom": 260.0141906738281,
"height": 14.545454025268555
}
},
{
"title": "EasyLink Desktop Fax Instructions (2).pdf",
"fromPageRect": {
"top": 270.92327880859375,
"left": 1251.9886474609375,
"width": 238.1818084716797,
"right": 1490.17041015625,
"bottom": 285.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'EasyLink Desktop Fax Instructions (2).pdf'"
},
{
"title": "EasyLink MFP Scan to Fax Instructions.pdf",
"fromPageRect": {
"top": 270.92327880859375,
"left": 1251.9886474609375,
"width": 244.54544067382812,
"right": 1496.5340576171875,
"bottom": 285.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'EasyLink MFP Scan to Fax Instructions.pdf'"
},
{
"title": "fax from dispatch email.pdf",
"fromPageRect": {
"top": 270.92327880859375,
"left": 1251.9886474609375,
"width": 152.72726440429688,
"right": 1404.7159423828125,
"bottom": 285.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'fax from dispatch email.pdf'"
},
{
"title": "Setting up a new user in GP 10 or GP 2010",
"fromPageRect": {
"top": 270.92327880859375,
"left": 1251.9886474609375,
"width": 248.1818084716797,
"right": 1500.17041015625,
"bottom": 285.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "UpdateHelpTrackErrors.ps1",
"fromPageRect": {
"top": 296.3778381347656,
"left": 1251.9886474609375,
"width": 159.0908966064453,
"right": 1411.07958984375,
"bottom": 310.92327880859375,
"height": 14.545454025268555
}
},
{
"title": "Metric Alarm on CRPCTX02",
"fromPageRect": {
"top": 321.8323669433594,
"left": 1251.9886474609375,
"width": 158.1818084716797,
"right": 1410.17041015625,
"bottom": 336.3778076171875,
"height": 14.545454025268555
}
},
{
"title": "sucks-it-guy.jpg",
"fromPageRect": {
"top": 347.28692626953125,
"left": 1251.9886474609375,
"width": 90,
"right": 1341.9886474609375,
"bottom": 361.8323669433594,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'sucks-it-guy.jpg'"
},
{
"title": "Installing server 2k12 on Vbox",
"fromPageRect": {
"top": 410.92327880859375,
"left": 1251.9886474609375,
"width": 171.81817626953125,
"right": 1423.806884765625,
"bottom": 425.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "Untitled 1",
"fromPageRect": {
"top": 423.6505432128906,
"left": 1251.9886474609375,
"width": 53.63636016845703,
"right": 1305.625,
"bottom": 438.19598388671875,
"height": 14.545454025268555
}
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 436.3778381347656,
"left": 1251.9886474609375,
"width": 124.54544830322266,
"right": 1376.5340576171875,
"bottom": 450.92327880859375,
"height": 14.545454025268555
}
},
{
"title": "SimpleSearchDownloaded",
"fromPageRect": {
"top": 461.8323669433594,
"left": 1251.9886474609375,
"width": 150,
"right": 1401.9886474609375,
"bottom": 476.3778076171875,
"height": 14.545454025268555
}
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 487.28692626953125,
"left": 1251.9886474609375,
"width": 151.81817626953125,
"right": 1403.806884765625,
"bottom": 501.8323669433594,
"height": 14.545454025268555
}
},
{
"title": "Installing Hyper-V Management Tools",
"fromPageRect": {
"top": 512.741455078125,
"left": 1251.9886474609375,
"width": 213.6363525390625,
"right": 1465.625,
"bottom": 527.2869262695312,
"height": 14.545454025268555
}
},
{
"title": "Verify SHA with Microsoft.",
"fromPageRect": {
"top": 538.1959838867188,
"left": 1251.9886474609375,
"width": 145.4545440673828,
"right": 1397.4432373046875,
"bottom": 552.741455078125,
"height": 14.545454025268555
}
},
{
"title": "Tools",
"fromPageRect": {
"top": 780.01416015625,
"left": 1251.9886474609375,
"width": 31.818180084228516,
"right": 1283.806884765625,
"bottom": 794.5596313476562,
"height": 14.545454025268555
}
},
{
"title": "autoCorrectSpelling",
"fromPageRect": {
"top": 784.5596313476562,
"left": 1251.9886474609375,
"width": 113.63636016845703,
"right": 1365.625,
"bottom": 799.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Some of The Most Important SQL Commands",
"fromPageRect": {
"top": 759.1051025390625,
"left": 1251.9886474609375,
"width": 259.0909118652344,
"right": 1511.07958984375,
"bottom": 773.6505737304688,
"height": 14.545454025268555
}
},
{
"title": "Email Subscriptions",
"fromPageRect": {
"top": 733.6505126953125,
"left": 1251.9886474609375,
"width": 111.81817626953125,
"right": 1363.806884765625,
"bottom": 748.1959838867188,
"height": 14.545454025268555
}
},
{
"title": "Removing Bad Email accounts from customer image portal",
"fromPageRect": {
"top": 708.1959838867188,
"left": 1251.9886474609375,
"width": 333.6363525390625,
"right": 1585.625,
"bottom": 722.741455078125,
"height": 14.545454025268555
}
},
{
"title": "Daily Activities",
"fromPageRect": {
"top": 695.46875,
"left": 1251.9886474609375,
"width": 81.81817626953125,
"right": 1333.806884765625,
"bottom": 710.0142211914062,
"height": 14.545454025268555
}
},
{
"title": "Edit PO VB Program Validation",
"fromPageRect": {
"top": 682.741455078125,
"left": 1251.9886474609375,
"width": 176.36363220214844,
"right": 1428.352294921875,
"bottom": 697.2869262695312,
"height": 14.545454025268555
}
},
{
"title": "Servers",
"fromPageRect": {
"top": 670.01416015625,
"left": 1251.9886474609375,
"width": 44.54545211791992,
"right": 1296.5340576171875,
"bottom": 684.5596313476562,
"height": 14.545454025268555
}
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 644.5596313476562,
"left": 1251.9886474609375,
"width": 242.72726440429688,
"right": 1494.7159423828125,
"bottom": 659.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 631.8323364257812,
"left": 1251.9886474609375,
"width": 119.99999237060547,
"right": 1371.9886474609375,
"bottom": 646.3778076171875,
"height": 14.545454025268555
}
},
{
"title": "Financial Batch Stuck for Currency ID",
"fromPageRect": {
"top": 606.3778076171875,
"left": 1251.9886474609375,
"width": 214.54544067382812,
"right": 1466.5340576171875,
"bottom": 620.9232788085938,
"height": 14.545454025268555
}
},
{
"title": "Chesapeake reports",
"fromPageRect": {
"top": 593.6505737304688,
"left": 1251.9886474609375,
"width": 117.27272033691406,
"right": 1369.2613525390625,
"bottom": 608.196044921875,
"height": 14.545454025268555
}
},
{
"title": "Calendar",
"fromPageRect": {
"top": 790.9232788085938,
"left": 1251.9886474609375,
"width": 52.727272033691406,
"right": 1304.7159423828125,
"bottom": 805.46875,
"height": 14.545454025268555
}
},
{
"title": "Links",
"fromPageRect": {
"top": 320.0141906738281,
"left": 1251.9886474609375,
"width": 29.999998092651367,
"right": 1281.9886474609375,
"bottom": 334.55963134765625,
"height": 14.545454025268555
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "How to use PowerShell \"DCPROMO\" Windows Server 2012",
"fromPageRect": {
"top": 515.7386474609375,
"left": 717.7840576171875,
"width": 337.272705078125,
"right": 1055.0567626953125,
"bottom": 530.2841186523438,
"height": 14.545454025268555
}
},
{
"title": "Indent text in tw5",
"fromPageRect": {
"top": 528.4658813476562,
"left": 717.7840576171875,
"width": 95.45454406738281,
"right": 813.2385864257812,
"bottom": 543.0113525390625,
"height": 14.545454025268555
}
},
{
"title": "SQL Data Types",
"fromPageRect": {
"top": 334.82952880859375,
"left": 717.7840576171875,
"width": 95.45454406738281,
"right": 813.2385864257812,
"bottom": 349.3749694824219,
"height": 14.545454025268555
}
},
{
"title": "SQL Data Type Quick Reference",
"fromPageRect": {
"top": 322.1022644042969,
"left": 717.7840576171875,
"width": 189.0908966064453,
"right": 906.8749389648438,
"bottom": 336.647705078125,
"height": 14.545454025268555
}
},
{
"title": "Some of The Most Important SQL Commands",
"fromPageRect": {
"top": 309.375,
"left": 717.7840576171875,
"width": 259.0909118652344,
"right": 976.875,
"bottom": 323.9204406738281,
"height": 14.545454025268555
}
},
{
"title": "Small download proxy",
"fromPageRect": {
"top": 296.647705078125,
"left": 717.7840576171875,
"width": 123.63636016845703,
"right": 841.42041015625,
"bottom": 311.1931457519531,
"height": 14.545454025268555
}
},
{
"title": "SimpleSearchDownloaded",
"fromPageRect": {
"top": 283.9204406738281,
"left": 717.7840576171875,
"width": 150,
"right": 867.7840576171875,
"bottom": 298.46588134765625,
"height": 14.545454025268555
}
},
{
"title": "Setting up a new user in GP 10 or GP 2010",
"fromPageRect": {
"top": 271.19317626953125,
"left": 717.7840576171875,
"width": 248.1818084716797,
"right": 965.9658813476562,
"bottom": 285.7386169433594,
"height": 14.545454025268555
}
},
{
"title": "SimpleSearchDownloaded",
"fromPageRect": {
"top": 283.9204406738281,
"left": 717.7840576171875,
"width": 150,
"right": 867.7840576171875,
"bottom": 298.46588134765625,
"height": 14.545454025268555
}
},
{
"title": "Setting up a new user in GP 10 or GP 2010",
"fromPageRect": {
"top": 271.19317626953125,
"left": 717.7840576171875,
"width": 248.1818084716797,
"right": 965.9658813476562,
"bottom": 285.7386169433594,
"height": 14.545454025268555
}
},
{
"title": "SimpleSearchDownloaded",
"fromPageRect": {
"top": 283.9204406738281,
"left": 717.7840576171875,
"width": 150,
"right": 867.7840576171875,
"bottom": 298.46588134765625,
"height": 14.545454025268555
}
},
{
"title": "$:/boot/boot.css",
"fromPageRect": {
"top": 273.9204406738281,
"left": 717.7840576171875,
"width": 91.81817626953125,
"right": 809.6022338867188,
"bottom": 288.46588134765625,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'SimpleSearchDownloaded'"
},
{
"title": "$:/boot/boot.css",
"fromPageRect": {
"top": 273.9204406738281,
"left": 717.7840576171875,
"width": 91.81817626953125,
"right": 809.6022338867188,
"bottom": 288.46588134765625,
"height": 14.545454025268555
}
},
{
"title": "Draft of '$:/boot/boot.css'"
},
{
"title": "$:/boot/boot.css"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 309.1051025390625,
"left": 656.9885864257812,
"width": 61.818180084228516,
"right": 718.8067626953125,
"bottom": 323.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 309.1051025390625,
"left": 656.9885864257812,
"width": 61.818180084228516,
"right": 718.8067626953125,
"bottom": 323.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 285.6960144042969,
"left": 650,
"width": 168.1818084716797,
"right": 818.1818237304688,
"bottom": 300.241455078125,
"height": 14.545454025268555
}
},
{
"title": "\\\\otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 406.2215881347656,
"left": 84.88636016845703,
"width": 184.54544067382812,
"right": 269.4317932128906,
"bottom": 420.76702880859375,
"height": 14.545454025268555
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 309.1051025390625,
"left": 656.9885864257812,
"width": 61.818180084228516,
"right": 718.8067626953125,
"bottom": 323.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Topic Notes: Upgrading VCSA and Update Manager",
"fromPageRect": {
"top": 538.1959838867188,
"left": 656.9885864257812,
"width": 296.3636169433594,
"right": 953.3521728515625,
"bottom": 552.741455078125,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrading VCSA and Update Manager",
"fromPageRect": {
"top": 538.1959838867188,
"left": 656.9885864257812,
"width": 296.3636169433594,
"right": 953.3521728515625,
"bottom": 552.741455078125,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrade Virtual Center Server Appliance",
"fromPageRect": {
"top": 550.9232788085938,
"left": 656.9885864257812,
"width": 309.0909118652344,
"right": 966.0794677734375,
"bottom": 565.46875,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Post upgrade VCSA",
"fromPageRect": {
"top": 563.6505737304688,
"left": 656.9885864257812,
"width": 190,
"right": 846.9885864257812,
"bottom": 578.196044921875,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Upgrading vCenter Server",
"fromPageRect": {
"top": 576.3778076171875,
"left": 656.9885864257812,
"width": 225.4545440673828,
"right": 882.443115234375,
"bottom": 590.9232788085938,
"height": 14.545454025268555
}
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 589.1051025390625,
"left": 656.9885864257812,
"width": 95.45454406738281,
"right": 752.443115234375,
"bottom": 603.6505737304688,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Configure ESXi via vCenter Server",
"fromPageRect": {
"top": 574.5596313476562,
"left": 656.9885864257812,
"width": 272.7272644042969,
"right": 929.7158203125,
"bottom": 589.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Configure ESXi via vSphere Client",
"fromPageRect": {
"top": 587.2869262695312,
"left": 656.9885864257812,
"width": 270,
"right": 926.9885864257812,
"bottom": 601.8323974609375,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Configure ESXi via the DCUI",
"fromPageRect": {
"top": 600.01416015625,
"left": 656.9885864257812,
"width": 236.36363220214844,
"right": 893.3522338867188,
"bottom": 614.5596313476562,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Configure ESXi via the DCUI",
"fromPageRect": {
"top": 600.01416015625,
"left": 656.9885864257812,
"width": 236.36363220214844,
"right": 893.3522338867188,
"bottom": 614.5596313476562,
"height": 14.545454025268555
}
},
{
"title": "Topic Notes: Configure ESXi via vSphere Client",
"fromPageRect": {
"top": 587.2869262695312,
"left": 656.9885864257812,
"width": 270,
"right": 926.9885864257812,
"bottom": 601.8323974609375,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Topic Notes: Configure ESXi via vSphere Client'"
},
{
"title": "Topic Notes: Configure ESXi via vSphere Client"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Topic Notes: Deploying vCenter Server Appliance",
"fromPageRect": {
"top": 320.0141906738281,
"left": 656.9885864257812,
"width": 283.6363525390625,
"right": 940.6249389648438,
"bottom": 334.55963134765625,
"height": 14.545454025268555
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 283.6505432128906,
"left": 656.9885864257812,
"width": 61.818180084228516,
"right": 718.8067626953125,
"bottom": 298.19598388671875,
"height": 14.545454025268555
}
},
{
"title": "Links",
"fromPageRect": {
"top": 309.1051025390625,
"left": 656.9885864257812,
"width": 29.999998092651367,
"right": 686.9885864257812,
"bottom": 323.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Links",
"fromPageRect": {
"top": 283.6505432128906,
"left": 656.9885864257812,
"width": 29.999998092651367,
"right": 686.9885864257812,
"bottom": 298.19598388671875,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 309.1051025390625,
"left": 656.9885864257812,
"width": 61.818180084228516,
"right": 718.8067626953125,
"bottom": 323.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 283.6505432128906,
"left": 656.9885864257812,
"width": 61.818180084228516,
"right": 718.8067626953125,
"bottom": 298.19598388671875,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 151.81817626953125,
"right": 801.8181762695312,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error",
"fromPageRect": {
"top": 272.96875,
"left": 650,
"width": 357.272705078125,
"right": 1007.272705078125,
"bottom": 287.5141906738281,
"height": 14.545454025268555
}
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 151.81817626953125,
"right": 801.8181762695312,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "CUSTNMBR does not exist",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 151.81817626953125,
"right": 801.8181762695312,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Vendor Class ID Tables in GP",
"fromPageRect": {
"top": 336.6051025390625,
"left": 650,
"width": 170.90908813476562,
"right": 820.9090576171875,
"bottom": 351.1505432128906,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "PO export to GP failed. Bad vendors"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 333.6505432128906,
"left": 656.9885864257812,
"width": 63.578102111816406,
"right": 720.5667114257812,
"bottom": 348.19598388671875,
"height": 14.545454025268555
}
},
{
"title": "Untitled 3"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 359.1051025390625,
"left": 656.9885864257812,
"width": 63.578102111816406,
"right": 720.5667114257812,
"bottom": 373.6505432128906,
"height": 14.545454025268555
}
},
{
"title": "Untitled 3",
"fromPageRect": {
"top": 282.741455078125,
"left": 656.9885864257812,
"width": 54.91987609863281,
"right": 711.908447265625,
"bottom": 297.2868957519531,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Active Report Server Subscriptions"
},
{
"title": "Draft of 'Active Report Server Subscriptions'"
},
{
"title": "Active Report Server Subscriptions"
},
{
"title": "Active Report Server Subscriptions",
"fromPageRect": {
"top": 282.741455078125,
"left": 656.9885864257812,
"width": 201.5823516845703,
"right": 858.5709228515625,
"bottom": 297.2868957519531,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Active Report Server Subscriptions'"
},
{
"title": "Active Report Server Subscriptions"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Small download proxy",
"fromPageRect": {
"top": 272.96875,
"left": 650,
"width": 127.17517852783203,
"right": 777.1751708984375,
"bottom": 287.5141906738281,
"height": 14.545454025268555
}
},
{
"title": "Small download proxy",
"fromPageRect": {
"top": 272.96875,
"left": 650,
"width": 127.17517852783203,
"right": 777.1751708984375,
"bottom": 287.5141906738281,
"height": 14.545454025268555
}
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 272.96875,
"left": 650,
"width": 81.64983367919922,
"right": 731.6498413085938,
"bottom": 287.5141906738281,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Sales Reports'"
},
{
"title": "Sales Reports"
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 282.741455078125,
"left": 656.9885864257812,
"width": 81.64983367919922,
"right": 738.638427734375,
"bottom": 297.2868957519531,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Sales Reports'"
},
{
"title": "Sales Reports"
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Active Report Server Subscriptions",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 201.5823516845703,
"right": 851.5823364257812,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Find and replace status of line 1"
},
{
"title": "Find and replace status of line 1",
"fromPageRect": {
"top": 282.741455078125,
"left": 656.9885864257812,
"width": 184.27867126464844,
"right": 841.2672729492188,
"bottom": 297.2868957519531,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Find and replace status of line 1'"
},
{
"title": "Find and replace status of line 1"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Public Shared Notepad"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "VI Editor Basics"
},
{
"title": "Draft of 'VI Editor Basics'"
},
{
"title": "VI Editor Basics"
},
{
"title": "Draft of 'Find and replace status of line 1'"
},
{
"title": "Find and replace status of line 1"
},
{
"title": "Birch Communications",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 130.04432678222656,
"right": 780.0443115234375,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Setting up a new user in GP 10 or GP 2010",
"fromPageRect": {
"top": 387.5141906738281,
"left": 650,
"width": 250.04026794433594,
"right": 900.040283203125,
"bottom": 402.05963134765625,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "rebuild plex server"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Trailers with repair orders"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Exotic Boot care"
},
{
"title": "Draft of 'Exotic Boot care'"
},
{
"title": "Exotic Boot care"
},
{
"title": "Draft of 'Exotic Boot care'"
},
{
"title": "Exotic Boot care"
},
{
"title": "Draft of 'Exotic Boot care'"
},
{
"title": "Exotic Boot care"
},
{
"title": "Draft of 'Exotic Boot care'"
},
{
"title": "Exotic Boot care"
},
{
"title": "Trailers with repair orders",
"fromPageRect": {
"top": 295.46875,
"left": 656.9885864257812,
"width": 147.37342834472656,
"right": 804.3619995117188,
"bottom": 310.0141906738281,
"height": 14.545454025268555
}
},
{
"title": "Links",
"fromPageRect": {
"top": 320.92327880859375,
"left": 656.9885864257812,
"width": 30.348121643066406,
"right": 687.3367309570312,
"bottom": 335.4687194824219,
"height": 14.545454025268555
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 191.4895782470703,
"right": 841.4895629882812,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 191.4895782470703,
"right": 841.4895629882812,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Server Prodessing Error",
"fromPageRect": {
"top": 311.1505432128906,
"left": 650,
"width": 139.43885803222656,
"right": 789.4388427734375,
"bottom": 325.69598388671875,
"height": 14.545454025268555
}
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 260.241455078125,
"left": 650,
"width": 191.4895782470703,
"right": 841.4895629882812,
"bottom": 274.7868957519531,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Bridgepoint errors not processing'"
},
{
"title": "Bridgepoint errors not processing"
},
{
"title": "rebuild plex server",
"fromPageRect": {
"top": 371.8323669433594,
"left": 656.9885864257812,
"width": 106.21526336669922,
"right": 763.203857421875,
"bottom": 386.3778076171875,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'rebuild plex server'"
},
{
"title": "rebuild plex server"
},
{
"title": "Draft of 'rebuild plex server'"
},
{
"title": "rebuild plex server"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 524.5596313476562,
"left": 656.9885864257812,
"width": 63.578102111816406,
"right": 720.5667114257812,
"bottom": 539.1051025390625,
"height": 14.545454025268555
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 335.046875,
"left": 657,
"width": 64,
"right": 721,
"bottom": 350.046875,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 386.046875,
"left": 657,
"width": 64,
"right": 721,
"bottom": 401.046875,
"height": 15
}
},
{
"title": "New Employee PPOK"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Exchange DAG Setup"
},
{
"title": "Draft of 'Exchange DAG Setup'"
},
{
"title": "Exchange DAG Setup"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Untitled 3"
},
{
"title": "Untitled 4"
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Untitled 4"
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Untitled 4"
},
{
"title": "Exchange 2010 DAG Creation and Configuration Part 1"
},
{
"title": "Untitled 4",
"fromPageRect": {
"top": 409.046875,
"left": 757,
"width": 55,
"right": 812,
"bottom": 424.046875,
"height": 15
}
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Draft of 'New Tiddler'",
"fromPageRect": {
"top": 409.046875,
"left": 757,
"width": 119,
"right": 876,
"bottom": 424.046875,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Untitled 3'"
},
{
"title": "Exchange 2010 DAG Creation and Configuration, Part 2"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 140,
"right": 897,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Links",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 31,
"right": 788,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 335.046875,
"left": 757,
"width": 68,
"right": 825,
"bottom": 350.046875,
"height": 15
}
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 335.046875,
"left": 757,
"width": 68,
"right": 825,
"bottom": 350.046875,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Exchange DAG Setup",
"fromPageRect": {
"top": 335.046875,
"left": 757,
"width": 128,
"right": 885,
"bottom": 350.046875,
"height": 15
}
},
{
"title": "Exchange 2010 DAG Creation and Configuration Part 1",
"fromPageRect": {
"top": 322.046875,
"left": 757,
"width": 318,
"right": 1075,
"bottom": 337.046875,
"height": 15
}
},
{
"title": "New Employee PPOK",
"fromPageRect": {
"top": 348.046875,
"left": 757,
"width": 128,
"right": 885,
"bottom": 363.046875,
"height": 15
}
},
{
"title": "Draft of 'New Employee PPOK'"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Lorraine Key Fob information"
},
{
"title": "New Employee PPOK"
},
{
"title": "Lorraine Key Fob information",
"fromPageRect": {
"top": 296.046875,
"left": 757,
"width": 167,
"right": 924,
"bottom": 311.046875,
"height": 15
}
},
{
"title": "New Employee PPOK",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 128,
"right": 885,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 387.046875,
"left": 757,
"width": 64,
"right": 821,
"bottom": 402.046875,
"height": 15
}
},
{
"title": "Draft of 'Lorraine Key Fob information'"
},
{
"title": "Lorraine Key Fob information"
},
{
"title": "Draft of 'Lorraine Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Topic Notes: vSphere 5 Products",
"fromPageRect": {
"top": 619.046875,
"left": 757,
"width": 193,
"right": 950,
"bottom": 634.046875,
"height": 15
}
},
{
"title": "Topic Notes: What Makes up a Virtual Datacenter?",
"fromPageRect": {
"top": 645.046875,
"left": 757,
"width": 295,
"right": 1052,
"bottom": 660.046875,
"height": 15
}
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 627.046875,
"left": 757,
"width": 65,
"right": 822,
"bottom": 642.046875,
"height": 15
}
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 296.046875,
"left": 757,
"width": 117,
"right": 874,
"bottom": 311.046875,
"height": 15
}
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 117,
"right": 874,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Untitled 3"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 117,
"right": 874,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "New Employee PPOK",
"fromPageRect": {
"top": 335.046875,
"left": 757,
"width": 128,
"right": 885,
"bottom": 350.046875,
"height": 15
}
},
{
"title": "Draft of 'New Employee PPOK'"
},
{
"title": "New Employee PPOK"
},
{
"title": "Draft of 'New Employee PPOK'"
},
{
"title": "New Employee PPOK"
},
{
"title": "\\\\otls1\\uptdfs\\GreatPlains\\Aztec_eConnect\\Prod",
"fromPageRect": {
"top": 193,
"left": 85,
"width": 193,
"right": 278,
"bottom": 208,
"height": 15
}
},
{
"title": "Links",
"fromPageRect": {
"top": 348.046875,
"left": 757,
"width": 31,
"right": 788,
"bottom": 363.046875,
"height": 15
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "Setting up Call Monitor"
},
{
"title": "Draft of 'Setting up Call Monitor'"
},
{
"title": "Setting up Call Monitor"
},
{
"title": "MicrosoftKeys.txt",
"fromPageRect": {
"top": 378,
"left": 750,
"width": 103,
"right": 853,
"bottom": 393,
"height": 15
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "\\\\ppok.com\\fs\\IT\\NETWORK AND SYSTEMS\\SDICKSON\\FILES\\2014 Planning",
"fromPageRect": {
"top": 182,
"left": 85,
"width": 103,
"right": 188,
"bottom": 197,
"height": 15
}
},
{
"title": "Setting up Call Monitor",
"fromPageRect": {
"top": 296.046875,
"left": 757,
"width": 132,
"right": 889,
"bottom": 311.046875,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "PDMS Pharmacy check"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "DRACS"
},
{
"title": "Draft of 'DRACS'"
},
{
"title": "DRACS"
},
{
"title": "Draft of 'DRACS'"
},
{
"title": "DRACS"
},
{
"title": "Draft of 'DRACS'"
},
{
"title": "DRACS"
},
{
"title": "Draft of 'DRACS'"
},
{
"title": "DRACS"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Dell MFP Scanner Settings.jpg"
},
{
"title": "Untitled 4"
},
{
"title": "Dell 2355DN MFP Scan to Folder settings"
},
{
"title": "Dell 2355DN MFP Scan to Folder settings",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 243,
"right": 1000,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Untitled 4",
"fromPageRect": {
"top": 296.046875,
"left": 757,
"width": 55,
"right": 812,
"bottom": 311.046875,
"height": 15
}
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Dell 2355DN MFP Scan to Folder settings",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 243,
"right": 1000,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Dell MFP Scanner Settings.jpg",
"fromPageRect": {
"top": 296.046875,
"left": 757,
"width": 179,
"right": 936,
"bottom": 311.046875,
"height": 15
}
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 426.046875,
"left": 757,
"width": 117,
"right": 874,
"bottom": 441.046875,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 530.046875,
"left": 757,
"width": 64,
"right": 821,
"bottom": 545.046875,
"height": 15
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Trustee"
},
{
"title": "Topic Notes: Upgrade Virtual Center Server Appliance",
"fromPageRect": {
"top": 659.046875,
"left": 757,
"width": 312,
"right": 1069,
"bottom": 674.046875,
"height": 15
}
},
{
"title": "Draft of 'Topic Notes: Upgrade Virtual Center Server Appliance'"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'Topic Notes: Upgrade Virtual Center Server Appliance'",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 363,
"right": 1120,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Untitled 4"
},
{
"title": "Draft of 'Untitled 4'"
},
{
"title": "Topic Notes: Upgrade Virtual Center Server Appliance"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "PowerShell command to get installed hotfixes Windows server"
},
{
"title": "PowerShell command to get installed hotfixes Windows server",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 361,
"right": 1118,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Ppok Clusters"
},
{
"title": "Draft of 'Ppok Clusters'"
},
{
"title": "Ppok Clusters"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Change RX Linc Meeting Schedule"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Voice Mail holiday recordings"
},
{
"title": "Draft of 'Voice Mail holiday recordings'"
},
{
"title": "Voice Mail holiday recordings"
},
{
"title": "Voice Mail holiday recordings",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 170,
"right": 927,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Change RX Linc Meeting Schedule",
"fromPageRect": {
"top": 309.046875,
"left": 757,
"width": 202,
"right": 959,
"bottom": 324.046875,
"height": 15
}
},
{
"title": "Draft of 'Change RX Linc Meeting Schedule'"
},
{
"title": "Change RX Linc Meeting Schedule"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 413.046875,
"left": 757,
"width": 63.578125,
"right": 820.578125,
"bottom": 428.046875,
"height": 15
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Voice Mail holiday recordings",
"fromPageRect": {
"top": 335.046875,
"left": 757,
"width": 170,
"right": 927,
"bottom": 350.046875,
"height": 15
}
},
{
"title": "Change RX Linc Meeting Schedule",
"fromPageRect": {
"top": 309.046875,
"left": 757,
"width": 202,
"right": 959,
"bottom": 324.046875,
"height": 15
}
},
{
"title": "Draft of 'Change RX Linc Meeting Schedule'"
},
{
"title": "Change RX Linc Meeting Schedule"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Herbalife Wellness Evaluations"
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 352,
"left": 750,
"width": 117,
"right": 867,
"bottom": 367,
"height": 15
}
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Powershell License keys remote servers."
},
{
"title": "Draft of 'Powershell License keys remote servers.'"
},
{
"title": "Powershell License keys remote servers."
},
{
"title": "Draft of 'Powershell License keys remote servers.'"
},
{
"title": "Powershell License keys remote servers."
},
{
"title": "Draft of 'Powershell License keys remote servers.'"
},
{
"title": "Powershell License keys remote servers."
},
{
"title": "Draft of 'Powershell License keys remote servers.'"
},
{
"title": "Powershell License keys remote servers."
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Adding to the Call Monitor Group for Maxcare"
},
{
"title": "DRACS",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 45,
"right": 795,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'DRACS'"
},
{
"title": "DRACS"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Creating Shared Calendar"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "PPOK VL Licenses"
},
{
"title": "Draft of 'PPOK VL Licenses'"
},
{
"title": "PPOK VL Licenses"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Boardroom Video Conference"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "DRACS",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 45,
"right": 795,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Exchange 2013 Installation"
},
{
"title": "Draft of 'Exchange 2013 Installation'"
},
{
"title": "Exchange 2013 Installation"
},
{
"title": "Draft of 'Exchange 2013 Installation'"
},
{
"title": "Exchange 2013 Installation"
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 157,
"right": 907,
"bottom": 276,
"height": 15
}
},
{
"title": "To Do"
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 157,
"right": 907,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'Exchange 2013 Installation'"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 569.046875,
"left": 757,
"width": 64,
"right": 821,
"bottom": 584.046875,
"height": 15
}
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 442.046875,
"left": 757,
"width": 117,
"right": 874,
"bottom": 457.046875,
"height": 15
}
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 117,
"right": 874,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Office 365 64 bit version installation workaround"
},
{
"title": "Setting up Call Monitor",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 132,
"right": 882,
"bottom": 315,
"height": 15
}
},
{
"title": "Voice Mail holiday recordings",
"fromPageRect": {
"top": 287,
"left": 750,
"width": 170,
"right": 920,
"bottom": 302,
"height": 15
}
},
{
"title": "New Employee PPOK",
"fromPageRect": {
"top": 404,
"left": 750,
"width": 128,
"right": 878,
"bottom": 419,
"height": 15
}
},
{
"title": "DRACS",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 45,
"right": 795,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Call Forward Fax Number to Fax-2-Mail"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "Draft of 'Call Forward Fax Number to Fax-2-Mail'"
},
{
"title": "Call Forward Fax Number to Fax-2-Mail"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "Remove Call Forwarding"
},
{
"title": "Key Fob information",
"fromPageRect": {
"top": 348.046875,
"left": 757,
"width": 117,
"right": 874,
"bottom": 363.046875,
"height": 15
}
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "Draft of 'Key Fob information'"
},
{
"title": "Key Fob information"
},
{
"title": "VI Editor Basics",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 95,
"right": 845,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "Middleware CSV Files",
"fromPageRect": {
"top": 867.046875,
"left": 757,
"width": 128,
"right": 885,
"bottom": 882.046875,
"height": 15
}
},
{
"title": "Untitled 1",
"fromPageRect": {
"top": 854.046875,
"left": 757,
"width": 55,
"right": 812,
"bottom": 869.046875,
"height": 15
}
},
{
"title": "Installing server 2k12 on Vbox",
"fromPageRect": {
"top": 841.046875,
"left": 757,
"width": 176,
"right": 933,
"bottom": 856.046875,
"height": 15
}
},
{
"title": "MicrosoftKeys.txt",
"fromPageRect": {
"top": 815.046875,
"left": 757,
"width": 103,
"right": 860,
"bottom": 830.046875,
"height": 15
}
},
{
"title": "Error Number = 1346 Stored Procedure taRMDistribution Error",
"fromPageRect": {
"top": 802.046875,
"left": 757,
"width": 358,
"right": 1115,
"bottom": 817.046875,
"height": 15
}
},
{
"title": "Draft of 'Error Number = 1346 Stored Procedure taRMDistribution Error'"
},
{
"title": "How to use PowerShell \"DCPROMO\" Windows Server 2012",
"fromPageRect": {
"top": 802.046875,
"left": 757,
"width": 345,
"right": 1102,
"bottom": 817.046875,
"height": 15
}
},
{
"title": "Draft of 'How to use PowerShell \"DCPROMO\" Windows Server 2012'"
},
{
"title": "How to use PowerShell \"DCPROMO\" Windows Server 2012"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "New Employee PPOK",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 128,
"right": 878,
"bottom": 315,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Registry changes for Cisco and Windows 8.1"
},
{
"title": "Office 365 64 bit version installation workaround",
"fromPageRect": {
"top": 400.046875,
"left": 757,
"width": 278,
"right": 1035,
"bottom": 415.046875,
"height": 15
}
},
{
"title": "Draft of 'Office 365 64 bit version installation workaround'"
},
{
"title": "New Tiddler",
"fromPageRect": {
"top": 594.046875,
"left": 757,
"width": 68,
"right": 825,
"bottom": 609.046875,
"height": 15
}
},
{
"title": "Links",
"fromPageRect": {
"top": 607.046875,
"left": 757,
"width": 31,
"right": 788,
"bottom": 622.046875,
"height": 15
}
},
{
"title": "Office 365 64 bit version installation workaround"
},
{
"title": "Powershell License keys remote servers.",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 239,
"right": 989,
"bottom": 315,
"height": 15
}
},
{
"title": "PPOK VL Licenses",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 113,
"right": 863,
"bottom": 341,
"height": 15
}
},
{
"title": "Draft of 'PPOK VL Licenses'"
},
{
"title": "PPOK VL Licenses"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Powershell exchange mailbox size"
},
{
"title": "PPOK VL Licenses",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 113,
"right": 863,
"bottom": 341,
"height": 15
}
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 157,
"right": 907,
"bottom": 315,
"height": 15
}
},
{
"title": "Untitled 4"
},
{
"title": "Draft of 'Exchange 2013 Installation'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Exchange 2013 Installation"
},
{
"title": "Draft of 'Exchange 2013 Installation'"
},
{
"title": "Exchange 2013 Installation"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 310,
"left": 750,
"width": 64,
"right": 814,
"bottom": 325,
"height": 15
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "DRACS",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 45,
"right": 795,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Setting up new FTP site"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Troubleshooting FTP Connection issues"
},
{
"title": "Trustee",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 44,
"right": 794,
"bottom": 341,
"height": 15
}
},
{
"title": "Trustee",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 44,
"right": 794,
"bottom": 341,
"height": 15
}
},
{
"title": "Registry changes for Cisco and Windows 8.1",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 260,
"right": 1010,
"bottom": 289,
"height": 15
}
},
{
"title": "CurrentControlSet",
"fromPageRect": {
"top": 153,
"left": 155,
"width": 103,
"right": 258,
"bottom": 168,
"height": 15
}
},
{
"title": "CurrentControlSet",
"fromPageRect": {
"top": 153,
"left": 155,
"width": 103,
"right": 258,
"bottom": 168,
"height": 15
}
},
{
"title": "Draft of 'Registry changes for Cisco and Windows 8.1'"
},
{
"title": "Registry changes for Cisco and Windows 8.1"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "PPOK Keys Used"
},
{
"title": "Untitled 5"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Untitled 6"
},
{
"title": "Mass updates WaspTime"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "PharmaScreens"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Support numbers"
},
{
"title": "Voice Mail holiday recordings",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 170,
"right": 920,
"bottom": 276,
"height": 15
}
},
{
"title": "Voice Mail holiday recordings",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 170,
"right": 920,
"bottom": 315,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Links",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 31,
"right": 781,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Avaya Phone System docs"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Forwarding Shared mailbox PowerShell"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 64,
"right": 814,
"bottom": 289,
"height": 15
}
},
{
"title": "Forwarding Shared mailbox PowerShell",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 226,
"right": 976,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Xerox Printers"
},
{
"title": "Draft of 'Xerox Printers'"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "PPOk Visual Studio License"
},
{
"title": "Servers",
"fromPageRect": {
"top": 521,
"left": 750,
"width": 45,
"right": 795,
"bottom": 536,
"height": 15
}
},
{
"title": "Draft of 'Servers'"
},
{
"title": "Server Prodessing Error",
"fromPageRect": {
"top": 508,
"left": 750,
"width": 139,
"right": 889,
"bottom": 523,
"height": 15
}
},
{
"title": "Draft of 'Server Prodessing Error'"
},
{
"title": "User stuck in GP",
"fromPageRect": {
"top": 820,
"left": 750,
"width": 100,
"right": 850,
"bottom": 835,
"height": 15
}
},
{
"title": "Draft of 'User stuck in GP'"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 313,
"left": 750,
"width": 64,
"right": 814,
"bottom": 328,
"height": 15
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Herbalife Wellness Evaluations",
"fromPageRect": {
"top": 272.046875,
"left": 757,
"width": 180,
"right": 937,
"bottom": 287.046875,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "GCP Handheld'"
},
{
"title": "Draft of 'GCP Handheld''"
},
{
"title": "GCP Handheld'"
},
{
"title": "Draft of 'GCP Handheld''"
},
{
"title": "GCP Handheld"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Uninstall DDPE that was installed with Digital Delivery"
},
{
"title": "How to use PowerShell \"DCPROMO\" Windows Server 2012",
"fromPageRect": {
"top": 790.046875,
"left": 757,
"width": 345,
"right": 1102,
"bottom": 805.046875,
"height": 15
}
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 287,
"left": 750,
"width": 157,
"right": 907,
"bottom": 302,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Exchange 2013 SP1 Key"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "OAB sync errors"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Trustee",
"fromPageRect": {
"top": 404,
"left": 750,
"width": 44,
"right": 794,
"bottom": 419,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 64,
"right": 814,
"bottom": 341,
"height": 15
}
},
{
"title": "Draft of 'Passwords'"
},
{
"title": "Passwords"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Powershell to check email exchange 2013"
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 287,
"left": 750,
"width": 65,
"right": 815,
"bottom": 302,
"height": 15
}
},
{
"title": "Draft of 'PowerShell'",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 116,
"right": 866,
"bottom": 276,
"height": 15
}
},
{
"title": "PowerShell"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Exchange 2013 Powershell Throttling"
},
{
"title": "Draft of 'Exchange 2013 Powershell Throttling'"
},
{
"title": "Exchange 2013 Powershell Throttling"
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 157,
"right": 907,
"bottom": 276,
"height": 15
}
},
{
"title": "Exchange 2013 Powershell Throttling",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 215,
"right": 965,
"bottom": 289,
"height": 15
}
},
{
"title": "Forwarding Shared mailbox PowerShell",
"fromPageRect": {
"top": 287,
"left": 750,
"width": 226,
"right": 976,
"bottom": 302,
"height": 15
}
},
{
"title": "How to use PowerShell \"DCPROMO\" Windows Server 2012",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 345,
"right": 1095,
"bottom": 315,
"height": 15
}
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 313,
"left": 750,
"width": 65,
"right": 815,
"bottom": 328,
"height": 15
}
},
{
"title": "Draft of 'PowerShell'"
},
{
"title": "PowerShell Advanced Function Parameters",
"fromPageRect": {
"top": 339,
"left": 750,
"width": 252,
"right": 1002,
"bottom": 354,
"height": 15
}
},
{
"title": "PowerShell command to get installed hotfixes Windows server",
"fromPageRect": {
"top": 352,
"left": 750,
"width": 361,
"right": 1111,
"bottom": 367,
"height": 15
}
},
{
"title": "PowerShell Common Comparison Operators",
"fromPageRect": {
"top": 365,
"left": 750,
"width": 255,
"right": 1005,
"bottom": 380,
"height": 15
}
},
{
"title": "PowerShell Data Variable Data Types",
"fromPageRect": {
"top": 378,
"left": 750,
"width": 218,
"right": 968,
"bottom": 393,
"height": 15
}
},
{
"title": "PowerShell Data Variable Data Types html",
"fromPageRect": {
"top": 391,
"left": 750,
"width": 247,
"right": 997,
"bottom": 406,
"height": 15
}
},
{
"title": "Draft of 'PowerShell Data Variable Data Types html'"
},
{
"title": "PowerShell Data Variable Data Types html"
},
{
"title": "Draft of 'PowerShell'",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 116,
"right": 866,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'PowerShell'",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 116,
"right": 866,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'PowerShell'",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 116,
"right": 866,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'PowerShell'",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 116,
"right": 866,
"bottom": 276,
"height": 15
}
},
{
"title": "PowerShell"
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 157,
"right": 907,
"bottom": 276,
"height": 15
}
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 157,
"right": 907,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'Exchange 2013 Powershell Throttling'"
},
{
"title": "Exchange 2013 Powershell Throttling"
},
{
"title": "Exchange 2013 Powershell Throttling",
"fromPageRect": {
"top": 283.046875,
"left": 757,
"width": 215,
"right": 972,
"bottom": 298.046875,
"height": 15
}
},
{
"title": "Draft of 'Exchange 2013 Powershell Throttling'"
},
{
"title": "Exchange 2013 Powershell Throttling"
},
{
"title": "Powershell to check email exchange 2013",
"fromPageRect": {
"top": 365,
"left": 750,
"width": 244,
"right": 994,
"bottom": 380,
"height": 15
}
},
{
"title": "DRACS",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 45,
"right": 795,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'DRACS'"
},
{
"title": "DRACS"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "PowerShell Script pull Cluster Shared Volume free and used space information."
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "PowerShell Scrip to pull % free space Cluster Shared Volume"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View"
},
{
"title": "Powershell to check email exchange 2013",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 244,
"right": 994,
"bottom": 315,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Sender getting blocked \"The error is \"Rejected by agent Sender Id Agent\""
},
{
"title": "Powershell to check email exchange 2013",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 244,
"right": 994,
"bottom": 315,
"height": 15
}
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 296.046875,
"left": 757,
"width": 283,
"right": 1040,
"bottom": 311.046875,
"height": 15
}
},
{
"title": "Powershell to check email exchange 2013",
"fromPageRect": {
"top": 426.046875,
"left": 757,
"width": 244,
"right": 1001,
"bottom": 441.046875,
"height": 15
}
},
{
"title": "Draft of 'Exchange 2013 Message Tracking PS Grid View'"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Powershell search text in files"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Get MAC Addresses (PowerShell)"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 283,
"right": 1033,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Topic Notes: Upgrading vCenter Server",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 227,
"right": 977,
"bottom": 289,
"height": 15
}
},
{
"title": "Topic Notes: Preparing to Upgrade vCenter Server",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 291,
"right": 1041,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Backing up IIS Certificate"
},
{
"title": "Backing up IIS Certificate",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 149,
"right": 899,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Installing CU Updates Exchange 2013"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Topic Notes: Upgrading vSphere 5",
"fromPageRect": {
"top": 287,
"left": 750,
"width": 199,
"right": 949,
"bottom": 302,
"height": 15
}
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 283,
"right": 1033,
"bottom": 276,
"height": 15
}
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 283,
"right": 1033,
"bottom": 276,
"height": 15
}
},
{
"title": "Xerox Printers",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 83,
"right": 833,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'Xerox Printers'",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 134,
"right": 884,
"bottom": 276,
"height": 15
}
},
{
"title": "Xerox Printers"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 283,
"right": 1033,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'Exchange 2013 Message Tracking PS Grid View'"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 64,
"right": 814,
"bottom": 289,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 64,
"right": 814,
"bottom": 289,
"height": 15
}
},
{
"title": "PharmaScreens",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 93,
"right": 843,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Taking ownership of distro group"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 64,
"right": 814,
"bottom": 341,
"height": 15
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 64,
"right": 814,
"bottom": 341,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 64,
"right": 814,
"bottom": 341,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 326,
"left": 750,
"width": 64,
"right": 814,
"bottom": 341,
"height": 15
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Powershell exchange mailbox size",
"fromPageRect": {
"top": 300,
"left": 750,
"width": 200,
"right": 950,
"bottom": 315,
"height": 15
}
},
{
"title": "Draft of 'Powershell exchange mailbox size'"
},
{
"title": "Powershell exchange mailbox size"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '$:/ControlPanel'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Notes",
"fromPageRect": {
"top": 417,
"left": 750,
"width": 34,
"right": 784,
"bottom": 432,
"height": 15
}
},
{
"title": "Notes",
"fromPageRect": {
"top": 613.046875,
"left": 757,
"width": 34,
"right": 791,
"bottom": 628.046875,
"height": 15
}
},
{
"title": "Setting up Call Monitor",
"fromPageRect": {
"top": 610.046875,
"left": 757,
"width": 132,
"right": 889,
"bottom": 625.046875,
"height": 15
}
},
{
"title": "Untitled 3",
"fromPageRect": {
"top": 649.046875,
"left": 757,
"width": 55,
"right": 812,
"bottom": 664.046875,
"height": 15
}
},
{
"title": "Untitled 3",
"fromPageRect": {
"top": 649.046875,
"left": 757,
"width": 55,
"right": 812,
"bottom": 664.046875,
"height": 15
}
},
{
"title": "rebuild plex server",
"fromPageRect": {
"top": 627.046875,
"left": 757,
"width": 106,
"right": 863,
"bottom": 642.046875,
"height": 15
}
},
{
"title": "Draft of 'rebuild plex server'"
},
{
"title": "rebuild plex server"
},
{
"title": "Draft of 'rebuild plex server'"
},
{
"title": "rebuild plex server"
},
{
"title": "NameChange 2012 and Exchange 2013"
},
{
"title": "Draft of 'NameChange 2012 and Exchange 2013'"
},
{
"title": "NameChange 2012 and Exchange 2013"
},
{
"title": "Bridgepoint errors not processing",
"fromPageRect": {
"top": 253.046875,
"left": 757,
"width": 191,
"right": 948,
"bottom": 268.046875,
"height": 15
}
},
{
"title": "Draft of 'Bridgepoint errors not processing'"
},
{
"title": "Quarantined FTP to DTN File",
"fromPageRect": {
"top": 396.046875,
"left": 757,
"width": 169,
"right": 926,
"bottom": 411.046875,
"height": 15
}
},
{
"title": "Draft of 'Quarantined FTP to DTN File'"
},
{
"title": "Notes",
"fromPageRect": {
"top": 500.046875,
"left": 757,
"width": 34,
"right": 791,
"bottom": 515.046875,
"height": 15
}
},
{
"title": "Draft of 'Notes'"
},
{
"title": "Export TMW to Tanker Pro AR Orders",
"fromPageRect": {
"top": 435.046875,
"left": 757,
"width": 221,
"right": 978,
"bottom": 450.046875,
"height": 15
}
},
{
"title": "Draft of 'Export TMW to Tanker Pro AR Orders'"
},
{
"title": "PO export to GP failed. Bad vendors",
"fromPageRect": {
"top": 409.046875,
"left": 757,
"width": 213,
"right": 970,
"bottom": 424.046875,
"height": 15
}
},
{
"title": "Draft of 'PO export to GP failed. Bad vendors'"
},
{
"title": "Active Report Server Subscriptions",
"fromPageRect": {
"top": 383.046875,
"left": 757,
"width": 204,
"right": 961,
"bottom": 398.046875,
"height": 15
}
},
{
"title": "Draft of 'Active Report Server Subscriptions'"
},
{
"title": "Sales Reports",
"fromPageRect": {
"top": 357.046875,
"left": 757,
"width": 82,
"right": 839,
"bottom": 372.046875,
"height": 15
}
},
{
"title": "Draft of 'Sales Reports'"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 283,
"right": 1033,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'Exchange 2013 Message Tracking PS Grid View'"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Frozen Surface Pro3"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 283,
"right": 1033,
"bottom": 276,
"height": 15
}
},
{
"title": "Draft of 'Exchange 2013 Message Tracking PS Grid View'"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "start no-ip"
},
{
"title": "start no-ip",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 58,
"right": 808,
"bottom": 276,
"height": 15
}
},
{
"title": "start no-ip",
"fromPageRect": {
"top": 261,
"left": 750,
"width": 58,
"right": 808,
"bottom": 276,
"height": 15
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "PPOK VL Licenses",
"fromPageRect": {
"top": 274,
"left": 750,
"width": 113,
"right": 863,
"bottom": 289,
"height": 15
}
},
{
"title": "Draft of 'PPOK VL Licenses'"
},
{
"title": "PPOK VL Licenses"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Command Line Ping Sweep"
},
{
"title": "PowerShell",
"fromPageRect": {
"top": 301,
"left": 750,
"width": 65,
"right": 815,
"bottom": 316,
"height": 15
}
},
{
"title": "Removing shared mailboxes from an Outlook profile",
"fromPageRect": {
"top": 327,
"left": 750,
"width": 300,
"right": 1050,
"bottom": 342,
"height": 15
}
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 379,
"left": 750,
"width": 64,
"right": 814,
"bottom": 394,
"height": 15
}
},
{
"title": "Passwords",
"fromPageRect": {
"top": 379,
"left": 750,
"width": 64,
"right": 814,
"bottom": 394,
"height": 15
}
},
{
"title": "Removing shared mailboxes from an Outlook profile",
"fromPageRect": {
"top": 327,
"left": 750,
"width": 300,
"right": 1050,
"bottom": 342,
"height": 15
}
},
{
"title": "Untitled 7"
},
{
"title": "Removing shared mailboxes from an Outlook profile",
"fromPageRect": {
"top": 327,
"left": 750,
"width": 300,
"right": 1050,
"bottom": 342,
"height": 15
}
},
{
"title": "Draft of 'Removing shared mailboxes from an Outlook profile'"
},
{
"title": "Removing shared mailboxes from an Outlook profile"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "How to lock down Exchange Web Services (EWS)"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Factory Reset IBM 3512 Array"
},
{
"title": "PPOK VL Licenses",
"fromPageRect": {
"top": 275,
"left": 750,
"width": 113,
"right": 863,
"bottom": 290,
"height": 15
}
},
{
"title": "Draft of 'PPOK VL Licenses'"
},
{
"title": "PPOK VL Licenses"
},
{
"title": "PPOK VL Licenses",
"fromPageRect": {
"top": 275,
"left": 750,
"width": 113,
"right": 863,
"bottom": 290,
"height": 15
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Office 365 64 bit version installation workaround",
"fromPageRect": {
"top": 379,
"left": 750,
"width": 277.75,
"right": 1027.75,
"bottom": 394,
"height": 15
}
},
{
"title": "Topic Notes: Virtualization Overview",
"fromPageRect": {
"top": 715.25,
"left": 757,
"width": 207.1125030517578,
"right": 964.1124877929688,
"bottom": 729.6500244140625,
"height": 14.40000057220459
}
},
{
"title": "Topic Notes: What Makes up a Virtual Datacenter?",
"fromPageRect": {
"top": 702.4500122070312,
"left": 757,
"width": 290.95001220703125,
"right": 1047.949951171875,
"bottom": 716.8500366210938,
"height": 14.40000057220459
}
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 433.6499938964844,
"left": 757,
"width": 170.5124969482422,
"right": 927.5125122070312,
"bottom": 448.04998779296875,
"height": 14.40000057220459
}
},
{
"title": "CSC Site Support information",
"fromPageRect": {
"top": 433.6499938964844,
"left": 757,
"width": 170.5124969482422,
"right": 927.5125122070312,
"bottom": 448.04998779296875,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'CSC Site Support information'"
},
{
"title": "Untitled 3",
"fromPageRect": {
"top": 232.0500030517578,
"left": 757,
"width": 54.91250228881836,
"right": 811.9124755859375,
"bottom": 246.4499969482422,
"height": 14.40000057220459
}
},
{
"title": "New Employee PPOK",
"fromPageRect": {
"top": 219.25,
"left": 757,
"width": 127.1624984741211,
"right": 884.1624755859375,
"bottom": 233.64999389648438,
"height": 14.40000057220459
}
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 206.8000030517578,
"left": 918.4000244140625,
"width": 13,
"right": 931.4000244140625,
"bottom": 221.1999969482422,
"height": 14.40000057220459
}
},
{
"title": "Adding CSC to Non-Shop PO System.",
"fromPageRect": {
"top": 261.8000183105469,
"left": 750,
"width": 221.10000610351562,
"right": 971.0999755859375,
"bottom": 276.20001220703125,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Adding CSC to Non-Shop PO System.'"
},
{
"title": "Chesapeake reports",
"fromPageRect": {
"top": 261.8000183105469,
"left": 750,
"width": 117.0625,
"right": 867.0625,
"bottom": 276.20001220703125,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Chesapeake reports'"
},
{
"title": "Current Systems Jerome is responsible for",
"fromPageRect": {
"top": 261.8000183105469,
"left": 750,
"width": 245.6374969482422,
"right": 995.6375122070312,
"bottom": 276.20001220703125,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Current Systems Jerome is responsible for'"
},
{
"title": "Re-Send Ryder PO's",
"fromPageRect": {
"top": 338.6000061035156,
"left": 750,
"width": 120.9625015258789,
"right": 870.9625244140625,
"bottom": 353,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Re-Send Ryder PO's'"
},
{
"title": "Removing Bad Email accounts from customer image portal",
"fromPageRect": {
"top": 338.6000061035156,
"left": 750,
"width": 338.8625183105469,
"right": 1088.862548828125,
"bottom": 353,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Removing Bad Email accounts from customer image portal'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "MicrosoftKeys.txt",
"fromPageRect": {
"top": 261.8000183105469,
"left": 750,
"width": 98.9625015258789,
"right": 848.9625244140625,
"bottom": 276.20001220703125,
"height": 14.40000057220459
}
},
{
"title": "PPOK VL Licenses",
"fromPageRect": {
"top": 274.6000061035156,
"left": 750,
"width": 110.55000305175781,
"right": 860.5499877929688,
"bottom": 289,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'PPOK VL Licenses'"
},
{
"title": "Untitled 8"
},
{
"title": "Untitled 9"
},
{
"title": "Draft of 'Untitled 9'"
},
{
"title": "Untitled 9"
},
{
"title": "PPOK VL Licenses"
},
{
"title": "Draft of 'PPOK VL Licenses'"
},
{
"title": "PPOK VL Licenses"
},
{
"title": "Passwords",
"fromPageRect": {
"top": 377,
"left": 750,
"width": 63.57500076293945,
"right": 813.5750122070312,
"bottom": 391.3999938964844,
"height": 14.40000057220459
}
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 261.8000183105469,
"left": 750,
"width": 280.3625183105469,
"right": 1030.362548828125,
"bottom": 276.20001220703125,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Exchange 2013 Message Tracking PS Grid View'"
},
{
"title": "Exchange 2013 Message Tracking PS Grid View"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Tracking Calendar Changes Exchange 2013"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Office Activation Reset"
},
{
"title": "Powershell exchange mailbox size",
"fromPageRect": {
"top": 301,
"left": 750,
"width": 198.71250915527344,
"right": 948.7125244140625,
"bottom": 315.3999938964844,
"height": 14.40000057220459
}
},
{
"title": "NameChange 2012 and Exchange 2013",
"fromPageRect": {
"top": 288.20001220703125,
"left": 750,
"width": 232.0124969482422,
"right": 982.0125122070312,
"bottom": 302.6000061035156,
"height": 14.40000057220459
}
},
{
"title": "Removing shared mailboxes from an Outlook profile",
"fromPageRect": {
"top": 326.6000061035156,
"left": 750,
"width": 299.13751220703125,
"right": 1049.137451171875,
"bottom": 341,
"height": 14.40000057220459
}
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 275.3999938964844,
"left": 750,
"width": 280.3625183105469,
"right": 1030.3625183105469,
"bottom": 289.79999446868896,
"height": 14.40000057220459
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Powershell License keys remote servers.",
"fromPageRect": {
"top": 275.3999938964844,
"left": 750,
"width": 236.25,
"right": 986.25,
"bottom": 289.79999446868896,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Powershell License keys remote servers.'"
},
{
"title": "Powershell License keys remote servers."
},
{
"title": "Removing shared mailboxes from an Outlook profile",
"fromPageRect": {
"top": 326.5500183105469,
"left": 750,
"width": 299.13751220703125,
"right": 1049.1375122070312,
"bottom": 340.95001888275146,
"height": 14.40000057220459
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Clone Roles and Features"
},
{
"title": "Draft of 'Clone Roles and Features'"
},
{
"title": "Clone Roles and Features"
},
{
"title": "Draft of 'Clone Roles and Features'"
},
{
"title": "Clone Roles and Features"
},
{
"title": "PPOK VL Licenses",
"fromPageRect": {
"top": 287.75,
"left": 750,
"width": 110.546875,
"right": 860.546875,
"bottom": 302.75,
"height": 15
}
},
{
"title": "Exchange 2013 Installation",
"fromPageRect": {
"top": 261.75,
"left": 750,
"width": 156.109375,
"right": 906.109375,
"bottom": 276.75,
"height": 15
}
},
{
"title": "Exchange 2013 Powershell Throttling",
"fromPageRect": {
"top": 274.75,
"left": 750,
"width": 215.34375,
"right": 965.34375,
"bottom": 289.75,
"height": 15
}
},
{
"title": "Powershell to check email exchange 2013",
"fromPageRect": {
"top": 300.75,
"left": 750,
"width": 242.796875,
"right": 992.796875,
"bottom": 315.75,
"height": 15
}
},
{
"title": "Untitled 8",
"fromPageRect": {
"top": 326.75,
"left": 750,
"width": 54.90625,
"right": 804.90625,
"bottom": 341.75,
"height": 15
}
},
{
"title": "Untitled 9",
"fromPageRect": {
"top": 339.75,
"left": 750,
"width": 54.90625,
"right": 804.90625,
"bottom": 354.75,
"height": 15
}
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 300.75,
"left": 750,
"width": 280.359375,
"right": 1030.359375,
"bottom": 315.75,
"height": 15
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Force Remove VM from SCVMM"
},
{
"title": "Draft of 'Force Remove VM from SCVMM'"
},
{
"title": "Force Remove VM from SCVMM"
},
{
"title": "Draft of 'Force Remove VM from SCVMM'"
},
{
"title": "Force Remove VM from SCVMM"
},
{
"title": "Force Remove VM from SCVMM",
"fromPageRect": {
"top": 261.75,
"left": 750,
"width": 189.96875,
"right": 939.96875,
"bottom": 276.75,
"height": 15
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Untitled 10"
},
{
"title": "Powershell to check email exchange 2013",
"fromPageRect": {
"top": 274.75,
"left": 750,
"width": 242.796875,
"right": 992.796875,
"bottom": 289.75,
"height": 15
}
},
{
"title": "Exchange 2013 Message Tracking PS Grid View",
"fromPageRect": {
"top": 261.75,
"left": 750,
"width": 280.359375,
"right": 1030.359375,
"bottom": 276.75,
"height": 15
}
},
{
"title": "Removing shared mailboxes from an Outlook profile",
"fromPageRect": {
"top": 352.75,
"left": 750,
"width": 299.125,
"right": 1049.125,
"bottom": 367.75,
"height": 15
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "MicrosoftKeys.txt",
"fromPageRect": {
"top": 392.4100036621094,
"left": 750,
"width": 98.9599609375,
"right": 848.9599609375,
"bottom": 407.3599853515625,
"height": 14.949981689453125
}
},
{
"title": "Office 365 64 bit version installation workaround",
"fromPageRect": {
"top": 340.4100036621094,
"left": 750,
"width": 276.760009765625,
"right": 1026.760009765625,
"bottom": 355.3599853515625,
"height": 14.949981689453125
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "PPOK 2019 Licenses"
},
{
"title": "Draft of 'PPOK 2019 Licenses'"
},
{
"title": "PPOK 2019 Licenses"
},
{
"title": "WXDBN-Q72HF-FBMVG-22RG9-QV8WF",
"fromPageRect": {
"top": 117,
"left": 85,
"width": 241.25,
"right": 326.25,
"bottom": 132,
"height": 15
}
},
{
"title": "G3M9N-2Y36T-Y6J6D-MGXBG-C92H7"
},
{
"title": "Draft of 'PPOK 2019 Licenses'"
},
{
"title": "Untitled 11"
},
{
"title": "Untitled 12"
},
{
"title": "Untitled 13"
},
{
"title": "PPOK 2019 Licenses"
},
{
"title": "Draft of 'PPOK 2019 Licenses'"
},
{
"title": "PPOK 2019 Licenses"
},
{
"title": "Draft of 'PPOK 2019 Licenses'"
},
{
"title": "PPOK 2019 Licenses"
},
{
"title": "Draft of 'PPOK 2019 Licenses'"
},
{
"title": "PPOK 2019 Licenses"
},
{
"title": "Draft of 'PPOK 2019 Licenses'"
},
{
"title": "PPOK 2019 Licenses"
},
{
"title": "PPOK 2019 Licenses",
"fromPageRect": {
"top": 300.75,
"left": 750,
"width": 123.578125,
"right": 873.578125,
"bottom": 315.75,
"height": 15
}
},
{
"title": "Draft of 'PPOK 2019 Licenses'"
},
{
"title": "PPOK 2019 Datacenter Licenses"
},
{
"title": "KNWRW-2HJT3-JHF97-YV32C-P92H7",
"fromPageRect": {
"top": 650,
"left": 155.828125,
"width": 226.359375,
"right": 382.1875,
"bottom": 665,
"height": 15
}
},
{
"title": "KNWRW-2HJT3-JHF97-YV32C-P92H7",
"fromPageRect": {
"top": 646,
"left": 155.828125,
"width": 226.359375,
"right": 382.1875,
"bottom": 661,
"height": 15
}
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "$:/ControlPanel"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Exchange 2010 DAG Creation and Configuration Part 1",
"fromPageRect": {
"top": 262.91668701171875,
"left": 750,
"width": 319.5333251953125,
"right": 1069.5333251953125,
"bottom": 277.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Draft of 'Exchange 2010 DAG Creation and Configuration Part 1'"
},
{
"title": "Links",
"fromPageRect": {
"top": 262.91668701171875,
"left": 750,
"width": 30.350006103515625,
"right": 780.3500061035156,
"bottom": 277.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Draft of 'Links'"
},
{
"title": "Links"
},
{
"title": "Untitled 11",
"fromPageRect": {
"top": 340.91668701171875,
"left": 750,
"width": 61.19999694824219,
"right": 811.1999969482422,
"bottom": 355.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Untitled 12",
"fromPageRect": {
"top": 353.91668701171875,
"left": 750,
"width": 62.16667175292969,
"right": 812.1666717529297,
"bottom": 368.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Untitled 11",
"fromPageRect": {
"top": 340.91668701171875,
"left": 750,
"width": 61.19999694824219,
"right": 811.1999969482422,
"bottom": 355.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Draft of 'Untitled 11'"
},
{
"title": "Untitled 11",
"fromPageRect": {
"top": 353.91668701171875,
"left": 750,
"width": 61.19999694824219,
"right": 811.1999969482422,
"bottom": 368.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Untitled 12",
"fromPageRect": {
"top": 366.91668701171875,
"left": 750,
"width": 62.16667175292969,
"right": 812.1666717529297,
"bottom": 381.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Untitled 13",
"fromPageRect": {
"top": 379.91668701171875,
"left": 750,
"width": 62.16667175292969,
"right": 812.1666717529297,
"bottom": 394.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Untitled 13",
"fromPageRect": {
"top": 379.91668701171875,
"left": 750,
"width": 62.16667175292969,
"right": 812.1666717529297,
"bottom": 394.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Draft of 'Untitled 13'"
},
{
"title": "Untitled 13"
},
{
"title": "Untitled 11",
"fromPageRect": {
"top": 353.91668701171875,
"left": 750,
"width": 61.19999694824219,
"right": 811.1999969482422,
"bottom": 368.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Untitled 13",
"fromPageRect": {
"top": 379.91668701171875,
"left": 750,
"width": 62.16667175292969,
"right": 812.1666717529297,
"bottom": 394.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Draft of 'Untitled 13'"
},
{
"title": "Topic Notes: Configure ESXi via vCenter Server",
"fromPageRect": {
"top": 301.91668701171875,
"left": 750,
"width": 275.3500061035156,
"right": 1025.3500061035156,
"bottom": 316.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Topic Notes: Configure ESXi via vSphere Client",
"fromPageRect": {
"top": 314.91668701171875,
"left": 750,
"width": 273.183349609375,
"right": 1023.183349609375,
"bottom": 329.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Topic Notes: Virtual Datacenter Management",
"fromPageRect": {
"top": 327.91668701171875,
"left": 750,
"width": 258.54998779296875,
"right": 1008.5499877929688,
"bottom": 342.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "MicrosoftKeys.txt",
"fromPageRect": {
"top": 275.91668701171875,
"left": 750,
"width": 99,
"right": 849,
"bottom": 290.5833435058594,
"height": 14.666656494140625
}
},
{
"title": "Draft of 'Calendar'"
},
{
"title": "$:/ControlPanel"
}
]
{
"tiddlers": {
"$:/plugins/danielo/encryptTiddler/unlocked": {
"created": "20140406101339943",
"modified": "20140411102434040",
"text": "<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-image-button\" \n\t viewBox=\"0 0 100 100\" style=\"enable-background:new 0 0 100 100;\" xml:space=\"preserve\">\n<g>\n\t<path d=\"M77.555,50H35.304V31.63c0-4.057,1.435-7.521,4.305-10.391c2.87-2.87,6.333-4.305,10.391-4.305\n\t\tc4.056,0,7.52,1.435,10.39,4.305s4.305,6.335,4.305,10.391c0,0.996,0.363,1.857,1.091,2.583c0.727,0.729,1.588,1.09,2.583,1.09\n\t\th3.674c0.995,0,1.856-0.361,2.583-1.09c0.727-0.727,1.091-1.588,1.091-2.583c0-7.079-2.517-13.136-7.549-18.17\n\t\tC63.136,8.428,57.08,5.912,50,5.912c-7.081,0-13.137,2.516-18.169,7.548c-5.033,5.034-7.549,11.091-7.549,18.17V50h-1.837\n\t\tc-1.531,0-2.833,0.536-3.904,1.608c-1.072,1.072-1.607,2.372-1.607,3.902v33.067c0,1.532,0.535,2.832,1.607,3.904\n\t\tc1.071,1.072,2.372,1.608,3.904,1.608h55.11c1.53,0,2.832-0.536,3.904-1.608c1.071-1.072,1.607-2.372,1.607-3.904V55.51\n\t\tc0-1.529-0.536-2.83-1.607-3.902C80.387,50.536,79.085,50,77.555,50z M54.315,72.937V83.72c0,2.173-1.762,3.935-3.935,3.935H49.62\n\t\tc-2.173,0-3.935-1.762-3.935-3.935V72.937c-2.31-1.443-3.852-4.001-3.852-6.925c0-4.511,3.657-8.167,8.167-8.167\n\t\ts8.167,3.657,8.167,8.167C58.167,68.937,56.625,71.495,54.315,72.937z\"/>\n</g>\n</svg>\n",
"type": "",
"title": "$:/plugins/danielo/encryptTiddler/unlocked",
"tags": "encrypt",
"modifier": "pepito",
"creator": "pepito"
},
"$:/plugins/danielo/encryptTiddler/styles": {
"created": "20140406110705085",
"modified": "20140411102736231",
"text": ".tw-password-field {\n\tdisplay: inline-block;\n\twidth: 55%;\n font-size:1em;\n line-height:0;\n margin:0;\n}\n\n\n/*It is for use in combination with tw-block-dropdown */\n.tw-crypt-dropdown{ \n line-height:0;\n padding:0 5px}\n\n.tw-password-field input{\n font-size:0.5em;\n\n}\n\n.tw-crypt-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n.tw-crypt-button button{\n\tfont-size:0.5em;\n}\n",
"type": "text/plain",
"title": "$:/plugins/danielo/encryptTiddler/styles",
"tags": "$:/tags/stylesheet encrypt",
"modifier": "pepito",
"creator": "pepito"
},
"$:/plugins/danielo/encryptTiddler/encrypttiddler.js": {
"created": "20140405192526957",
"modified": "20140411102818758",
"text": "/*\\\ntitle: $:/plugins/danielo/encryptTiddler/encrypttiddler.js\ntype: application/javascript\nmodule-type: widget\n\nencrypttiddler widget\n\n```\n\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\").widget;\n\nvar encryptTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t\t{type: \"tw-encrypt-tiddler\", handler: \"handleEncryptevent\"},\n\t\t\t{type: \"tw-decrypt-tiddler\", handler: \"handleDecryptevent\"},\n\t\t\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nencryptTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nencryptTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tconsole.log(\"Render\");\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*/\nencryptTiddlerWidget.prototype.execute = function() {\n\t// Get attributes\n\t this.tiddlerTitle=this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n \t this.passwordTiddler=this.getAttribute(\"passwordTiddler\");\n\t// Construct the child widgets\n\tconsole.log(this.targetTiddler);\n\t\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*/\nencryptTiddlerWidget.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\nencryptTiddlerWidget.prototype.handleEncryptevent = function(event){\n\tvar password =this.getPassword();\n\tvar title=this.tiddlerTitle;\n\tvar tiddler = this.wiki.getTiddler(title);\n\tif(tiddler && password){\n\t\tvar fields={text:\"!This is an encrypted Tiddler\",\n\t\t\t\t\tencrypted:this.encryptFields(title,password)};\n\t\tthis.saveTiddler(tiddler,fields);\n\t\t\n\t}\n};\n\nencryptTiddlerWidget.prototype.handleDecryptevent = function(event){\n\tvar password =this.getPassword();\n\tvar title=this.tiddlerTitle;\n\tvar tiddler = this.wiki.getTiddler(title);\n\tif(tiddler && password){\n\t\tvar fields=this.decryptFields(tiddler,password);\n\t\tif(fields)this.saveTiddler(tiddler,fields);\n\t}\n};\n\nencryptTiddlerWidget.prototype.saveTiddler=function(tiddler,fields){\n\tthis.wiki.addTiddler( new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,this.clearNonStandardFields(tiddler), fields ) )\n}\n\nencryptTiddlerWidget.prototype.encryptFields = function (title,password){\n\tvar jsonData=this.wiki.getTiddlerAsJson(title);\n\treturn $tw.crypto.encrypt(jsonData,password);\n\t\n};\n\nencryptTiddlerWidget.prototype.decryptFields = function(tiddler,password){\n\t\tvar JSONfields =$tw.crypto.decrypt(tiddler.fields.encrypted,password);\n\t\tif(JSONfields!==null){\n\t\t\treturn JSON.parse(JSONfields);\n\t\t}\n\t\tconsole.log(\"Error decrypting. Probably bad password\")\n\t\treturn false\n};\n\nencryptTiddlerWidget.prototype.getPassword = function(){\n\tvar tiddler=this.wiki.getTiddler(this.passwordTiddler);\n\tif(tiddler){\n\t\tvar password=tiddler.fields.text;\n\t\tthis.saveTiddler(tiddler,this.clearNonStandardFields(tiddler)); //reset password tiddler\n\t\treturn password;\n\t}\n\t\n\treturn false\n};\n\nencryptTiddlerWidget.prototype.clearNonStandardFields =function(tiddler) {\n\tvar standardFieldNames = \"title tags modified modifier created creator\".split(\" \");\n\t\tvar clearFields = {};\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(standardFieldNames.indexOf(fieldName) === -1) {\n\t\t\t\tclearFields[fieldName] = undefined;\n\t\t\t}\n\t\t}\n\t\tconsole.log(\"Cleared fields \"+JSON.stringify(clearFields));\n\t\treturn clearFields;\n};\n\nexports.encryptTiddler = encryptTiddlerWidget;\n\n})();",
"type": "application/javascript",
"title": "$:/plugins/danielo/encryptTiddler/encrypttiddler.js",
"tags": "encrypt",
"module-type": "widget",
"modifier": "pepito",
"creator": "Danielo"
},
"$:/plugins/danielo/encryptTiddler/crypt-button": {
"created": "20140405233000477",
"modified": "20140411102937292",
"text": "<span title=\"Encrypt/Decrypt tiddler\"><$transclude tiddler=\"$:/plugins/danielo/encryptTiddler/openPopup\"/>\n</span><$encryptTiddler passwordTiddler=\"$:/temp/password\"><$reveal state=\"$:/state/encrypt\" type=\"match\" text={{!!title}} animate=\"yes\">\n<div class=\"tw-block-dropdown tw-crypt-dropdown\">\n<span class=\"tw-password-field\"><$edit-text tiddler=\"$:/temp/password\" tag=\"input\" type=\"password\" default=\"\" placeholder=\"password\" class=\"tw-edit-texteditor\"/></span>\n<span class=\"tw-crypt-button\"> <$list filter=\"[is[current]!has[encrypted]]\"> <$button message=\"tw-encrypt-tiddler\" set=\"$:/state/encrypt\" setTo=\"\" class=\"\">Encrypt</$button></$list><$list filter=\"[is[current]has[encrypted]]\"> <$button message=\"tw-decrypt-tiddler\" set=\"$:/state/encrypt\" setTo=\"\" class=\"\">Decrypt</$button></$list></span>\n</div>\n</$reveal></$encryptTiddler>",
"title": "$:/plugins/danielo/encryptTiddler/crypt-button",
"tags": "$:/tags/ViewToolbar button encrypt",
"modifier": "pepito",
"creator": "Danielo"
},
"$:/plugins/danielo/encryptTiddler/openPopup": {
"created": "20140406151910358",
"modified": "20140411102902209",
"text": "<$reveal state=\"$:/state/encrypt\" type=\"nomatch\" text={{!!title}} animate=\"no\"><$button set=\"$:/state/encrypt\" setTo={{!!title}} class=\"btn-invisible\">{{$:/plugins/danielo/encryptTiddler/unlocked}}</$button></$reveal><$reveal state=\"$:/state/encrypt\" type=\"match\" text={{!!title}} animate=\"no\"><$button set=\"$:/state/encrypt\" setTo=\"\" class=\"btn-invisible\">{{$:/plugins/danielo/encryptTiddler/unlocked}}</$button></$reveal>",
"title": "$:/plugins/danielo/encryptTiddler/openPopup",
"tags": "button encrypt",
"modifier": "pepito",
"creator": "Danielo"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/fullscreen/init.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/fullscreen/init.js\ntype: application/javascript\nmodule-type: browser-startup\n\nMessage handler for full screen mode\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, Element: false */\n\"use strict\";\n\nvar d = document,\n\tdb = d.body,\n\t_requestFullscreen = db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\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_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\nvar toggleFullscreen = function() {\n\tif(document[_fullscreenElement]) {\n\t\tdocument[_exitFullscreen]();\n\t} else {\n\t\tdocument.documentElement[_requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t}\n};\n\nexports.startup = function() {\n\t// Install the full screen handler\n\tif(_requestFullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tw-full-screen\",function(event) {\n\t\t\ttoggleFullscreen();\n\t\t});\n\t}\n};\n\n})();\n",
"title": "$:/plugins/tiddlywiki/fullscreen/init.js",
"type": "application/javascript",
"module-type": "browser-startup"
}
}
}
Timothy Taylor ~TiddlyWiki
$:/themes/tiddlywiki/vanilla/themetweaks
$:/core/ui/TiddlerInfo/References
$:/core/ui/ControlPanel/Advanced/LoadedModules
$:/core/ui/AdvancedSearch/Filter
$:/core/ui/ControlPanel/Basics
$:/core/ui/MoreSideBar/System
$:/core/ui/SideBar/Recent
html body.tw-body .specialcell th {background-color:#00ff00; color:#fff;}
<table>
<tbody>
<tr>
<th>Tag</th>
<th>Count</th>
<th>Colour</th>
</tr>
<$list filter="[tags[]sort[title]]">
<tr>
<td><$transclude tiddler="$:/core/ui/TagTemplate"/></td>
<td><$count filter="[is[current]tagging[]]"/></td>
<td><$edit-text field="color" tag="input" type="color"/></td>
</tr>
</$list>
</tbody>
</table>
$:/themes/tiddlywiki/snowwhite
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tw-page-controls svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tw-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tw-tiddler-frame {\n\t\t<<box-shadow \"5px 5px 5px rgba(0, 0, 0, 0.1)\">>\n\t}\n}\n\n@media (max-width: 770px) {\n\t.tw-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tw-tiddler-controls button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tw-tiddler-controls button.tw-selected svg {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tw-tiddler-frame input.tw-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tw-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tw-tiddler-frame .tw-edit-tags input.tw-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ncanvas.tw-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tw-drop-down {\n\t<<border-radius 4px>>\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tw-block-dropdown {\n\t<<border-radius 4px>>\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tw-modal-displayed {\n\t-webkit-filter: blur(4px);\n}\n\n.modal {\n\t<<border-radius 6px>>\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.modal-footer {\n\t<<border-radius \"0 0 6px 6px\">>\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tw-alert {\n\t<<border-radius 6px>>\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tw-notification {\n\t<<border-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.tw-sidebar-lists .tw-tab-divider {\n\t<<background-linear-gradient \"left, rgb(216,216,216) 0%, rgb(236,236,236) 250px\">>\n}\n\n.tw-more-sidebar .tw-tab-buttons button {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(224,224,224) 100%\">>\n}\n\n.tw-more-sidebar .tw-tab-buttons button.tw-tab-selected {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(248,248,248) 100%\">>\n}\n\n.tw-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "Theme Tweaks",
"text": "You can tweak certain aspects of the ''Vanilla'' theme.\n\n//Take care to preserve any backticks (`) in the settings//\n\n! Settings\n\n* Font family: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings\" index=\"fontfamily\" default=\"\" tag=\"input\"/>\n\n! Sizes\n\n* Font size: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"fontsize\" default=\"\" tag=\"input\"/>\n* Line height: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"lineheight\" default=\"\" tag=\"input\"/>\n* Story left position //(the distance between the left of the screen and the left margin of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storyleft\" default=\"\" tag=\"input\"/>\n* Story top position //(the distance between the top of the screen ad the top margin of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storytop\" default=\"\" tag=\"input\"/>\n* Story right //(the distance between the left side of the screen and the left margin of the sidebar area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storyright\" default=\"\" tag=\"input\"/>\n* Story width //(the width of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storywidth\" default=\"\" tag=\"input\"/>\n* Tiddler width //(the width of individual tiddlers -- used for zoomin storyview)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"tiddlerwidth\" default=\"\" tag=\"input\"/>\n\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\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\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings##fontfamily}};\n}\n\nbody.tw-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\tword-wrap: break-word;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1em;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin: 0 0 14px;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: pre;\n\twhite-space: pre-wrap;\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\t<<border-radius 3px>>\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n white-space: pre-wrap;\n\tpadding: 0 3px 2px;\n\t<<border-radius 3px>>\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\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}\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.tw-tiddler-frame img, .tw-tiddler-frame svg, .tw-tiddler-frame canvas, .tw-tiddler-frame embed {\n\tmax-width: 100%;\n}\n\n.tw-tiddler-frame embed {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\na.tw-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.tw-sidebar-lists a.tw-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tw-sidebar-lists a.tw-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\na.tw-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tw-tiddlylink-resolves {\n}\n\na.tw-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tw-tiddlylink-shadow.tw-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tw-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tw-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tw-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tw-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.tw-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tw-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\t<<border-radius 20px>>\n}\n\n.tw-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tw-dropzone {\n\tposition: relative;\n}\n\n.tw-dropzone.tw-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"Drop here\";\n}\n\n/*\n** Buttons\n*/\n\n.btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n}\n\n.btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.btn-big-green {\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}\n\n.btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\n.tw-image-button {\n\theight: 1em;\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tw-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tw-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tw-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\n.tw-tag-label {\n\tdisplay: inline-block;\n\tpadding: 2px 9px;\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\t<<border-radius 8px>>\n}\n\n.tw-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tw-tag-label svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour tag-foreground>>;\n}\n\n/*\n** Page layout\n*/\n\n.sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.sidebar-header .title a.tw-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.sidebar-header .tw-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.sidebar-header .tw-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tw-search a svg {\n\theight: 0.75em;\n}\n\n.tw-search-results {\n\tpadding-top: 14px;\n}\n\n.tw-page-controls {\n\tmargin-top: 14px;\n}\n\n.tw-page-controls a.tw-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tw-page-controls svg {\n\theight: 1.75em;\n\tmin-width: 1px;\n\tpadding-right: 0.5em;\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tw-page-controls button:hover svg, .tw-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tw-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tw-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tw-open-tiddler-list {\n\t<<transform-origin \"0% 0%\">>\n}\n\n.tw-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.story-river {\n\tposition: relative;\n}\n\n.tw-story-spacer {\n\tposition: absolute;\n\tmin-height: 100%;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics##storywidth}}) {\n\t.sidebar-header {\n\t\tpadding: 14px;\n\t}\n\n\t.story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics##storywidth}}) {\n\t.sidebar-header {\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: 70px 0 28px 42px;\n\t}\n\n\t.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: 56px 42px 42px 42px;\n\t}\n}\n\n@media print {\n\t.sidebar-header {\n\t\tdisplay: none;\n\t}\n\n\t.story-river {\n\t\tmargin-left: 14px;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tw-tiddler-frame {\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n.tw-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.tw-tiddler-info .tw-tab-buttons button.tw-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tw-view-field-table {\n\twidth: 100%;\n}\n\n.tw-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n}\n\n.tw-view-field-value {\n}\n\n@media (max-width: 770px) {\n\t.tw-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tw-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: 770px) {\n\t.tw-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics##tiddlerwidth}};\n\t}\n\n\t.tw-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n}\n\n.titlebar img {\n\theight: 1em;\n}\n\n.tw-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tw-tiddler-missing .title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tw-tiddler-frame .tw-tiddler-controls {\n\tfloat: right;\n}\n\n.tw-tiddler-controls button {\n\tmargin: 0 0 0 5px;\n\tvertical-align: baseline;\n}\n\n.tw-tiddler-controls button svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tw-tiddler-controls button.tw-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tw-tiddler-controls button.btn-invisible:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tw-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tw-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tw-tiddler-help a.tw-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tw-tiddler-frame input.tw-edit-texteditor, .tw-tiddler-frame textarea.tw-edit-texteditor {\n\twidth: 100%;\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tmargin: 4px 0 4px 0;\n}\n\n.tw-tiddler-frame input.tw-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\ncanvas.tw-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.tw-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tw-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tw-page-controls svg.tw-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tw-page-controls svg.tw-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tw-page-controls svg.tw-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tw-tiddler-edit-frame em.tw-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tw-edit-type-dropdown a.tw-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tw-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tw-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tw-edit-add-tag .tw-add-tag-name input {\n\twidth: 50%;\n}\n\n.tw-edit-tags .tw-tag-label {\n\tdisplay: inline-block;\n}\n\n.tw-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tw-tag-editor-label {\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tw-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tw-tiddler-preview {\n\toverflow: auto;\n}\n\n.tw-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 48%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 3px 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n.tw-tiddler-preview-edit {\n\twidth: 48%;\n}\n\n.tw-edit-fields {\n\twidth: 100%;\n}\n\n\n.tw-edit-fields table, .tw-edit-fields tr, .tw-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tw-edit-fields > tbody > .tw-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tw-edit-fields > tbody > .tw-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tw-edit-field-name {\n\ttext-align: right;\n}\n\n.tw-edit-field-value input {\n\twidth: 100%;\n}\n\n.tw-edit-field-remove {\n}\n\n.tw-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tw-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tw-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Dropdowns\n*/\n\n.btn-dropdown svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tw-drop-down {\n\tmin-width: 280px;\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}\n\n.tw-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tw-drop-down a {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n}\n\n.tw-drop-down a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tw-drop-down .tw-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tw-drop-down .tw-tab-buttons button.tw-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tw-drop-down .tw-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tw-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tw-block-dropdown {\n\tposition: absolute;\n\tmin-width: 280px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 0 0 0 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n}\n\n.tw-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tw-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n/*\n** Modals\n*/\n\n.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.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.modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.modal {\n\t\tposition: fixed;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\twidth: 560px;\n\t\tmargin: -180px 0 0 -280px;\n\t}\n}\n\n.modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.modal-body {\n\tpadding: 15px;\n}\n\n.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.tw-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 14px;\n\tz-index: 1000;\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.tw-tab-set {\n}\n\n.tw-tab-buttons {\n\tfont-size: 0.85em;\n\tline-height: 100%;\n\tpadding-top: 1em;\n\tmargin-bottom: -1px;\n}\n\n.tw-tab-buttons button.tw-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.tw-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tmargin-left: 2px;\n\tmargin-right: 2px;\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}\n\n.tw-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tw-tab-content {\n\tpadding-top: 14px;\n}\n\n.tw-sidebar-lists .tw-tab-buttons button.tw-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.tw-sidebar-lists .tw-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.tw-sidebar-lists .tw-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tw-more-sidebar {\n\twhite-space: nowrap;\n}\n\n@media (min-width: 770px) {\n\t.tw-more-sidebar {\n\t\tmargin-left: -14px;\n\t}\n}\n\n.tw-more-sidebar .tw-tab-buttons {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: right;\n\tpadding-top: 0;\n\tpadding-left: 0;\n}\n\n.tw-more-sidebar .tw-tab-buttons button {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: right;\n}\n\n.tw-sidebar-lists .tw-more-sidebar .tw-tab-divider {\n\tdisplay: none;\n}\n\n.tw-more-sidebar .tw-tab-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n}\n\n.tw-more-sidebar .tw-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n}\n\n.tw-more-sidebar .tw-tab-buttons button.tw-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Alerts\n*/\n\n.tw-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tw-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.tw-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tw-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tw-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n}\n\n.tw-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\t\n}\n\n.tw-static-alert {\n\tposition: relative;\n}\n\n.tw-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n\tposition: absolute;\n}\n\n/*\n** Grids\n*/\n\n.tw-grid-frame td {\n\twidth: 1em;\n\theight: 1em;\n}\n\n/*\n** Control panel\n*/\n\n.tw-control-panel td {\n\tpadding: 4px;\n}\n\n.tw-control-panel table, .tw-control-panel table input, .tw-control-panel table textarea {\n\twidth: 100%;\n}\n\n/*\n** Message boxes\n*/\n\n.tw-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tmargin: 0 -21px 0 -21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tw-message-box img {\n\tfloat: right;\n\twidth: 150px;\n\tmargin: 0px 0px 12px 12px;\n}\n\n/*\n** Chooser\n*/\n\n.tw-chooser {\n\tborder: 1px solid <<colour table-border>>;\n}\n\n.tw-chooser-item {\n\tborder: 8px;\n}\n\n.tw-chooser-item a.tw-tiddlylink {\n\tdisplay: block;\n\ttext-decotoration: none;\n\tcolor: <<colour tiddler-link-foreground>>;\n\tbackground-color: <<colour tiddler-link-background>>;\n\tmargin: 4px;\n}\n\n.tw-chooser-item a.tw-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.tw-swatches-horiz {\n}\n\n.tw-swatches-horiz .tw-swatch {\n\tdisplay: inline-block;\n}\n\n.tw-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 4px;\n\tborder: 1px solid #000;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/metrics": {
"title": "$:/themes/tiddlywiki/vanilla/metrics",
"type": "application/x-tiddler-dictionary",
"text": "fontsize: `14px`\nlineheight: `20px`\nstoryleft: `0px`\nstorytop: `0px`\nstoryright: `770px`\nstorywidth: `770px`\ntiddlerwidth: `686px`\n"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\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 * Correct `inline-block` display not defined in IE 8/9.\n */\n\naudio,\ncanvas,\nvideo {\n display: inline-block;\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 styling not present in IE 8/9.\n */\n\n[hidden] {\n display: none;\n}\n\n/* ==========================================================================\n Base\n ========================================================================== */\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 -webkit-text-size-adjust: 100%; /* 2 */\n -ms-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* ==========================================================================\n Links\n ========================================================================== */\n\n/**\n * Address `outline` inconsistency between Chrome and other browsers.\n */\n\na:focus {\n outline: thin dotted;\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/* ==========================================================================\n Typography\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, 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 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 * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Correct font family set oddly in Safari 5 and Chrome.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, serif;\n font-size: 1em;\n}\n\n/**\n * Improve readability of pre-formatted text in all browsers.\n */\n\npre {\n white-space: pre-wrap;\n}\n\n/**\n * Set consistent quote types.\n */\n\nq {\n quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\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/* ==========================================================================\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/* ==========================================================================\n Figures\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n margin: 0;\n}\n\n/* ==========================================================================\n Forms\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 * 1. Correct font family not being inherited in all browsers.\n * 2. Correct font size not being inherited in all browsers.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\nbutton,\ninput {\n line-height: normal;\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 Chrome, Safari 5+, and IE 8+.\n * Correct `select` style inheritance in Firefox 4+ and Opera.\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 * 1. Address box sizing set to `content-box` in IE 8/9.\n * 2. Remove excess padding in IE 8/9.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\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 5 and Chrome\n * on OS X.\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\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 * 1. Remove default vertical scrollbar in IE 8/9.\n * 2. Improve readability and alignment in all browsers.\n */\n\ntextarea {\n overflow: auto; /* 1 */\n vertical-align: top; /* 2 */\n}\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"
},
"$:/themes/tiddlywiki/vanilla/settings": {
"title": "$:/themes/tiddlywiki/vanilla/settings",
"type": "application/x-tiddler-dictionary",
"text": "fontfamily: `\"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif`\n"
}
}
}
fontsize: `13px`
lineheight: `13px`
storyleft: `0px`
storytop: `20px`
storyright: `750px`
storywidth: `700px`
tiddlerwidth: `700px`
Go to Avaya IP Office Manager
Login in, open Configuration PPOK
In IP Offices, go to Users
Find user to add to be able to monitor.
To to Telophony
Supervisor Settings
Enter Extension as Login Code
Check Can Intrude
Click OK
Back uner IP Offices, Click on HuntGroups
Click MonitoringGrp
Scroll down, click on Edit
Find person you are adding to the members, click on that name and click Append
Click OK
Click OK
Click Save to Merge
version.extensions.AutoCorrectPlugin = { major: 1, minor: 0, revision: 0, date: new Date(2006,4,6),
source: "http://simonbaird.com/mptw/#AutoCorrectPlugin"
};
config.AutoCorrectPlugin = {
wordListTag: "autoCorrectWords",
excludeTags: [
"noAutoCorrect",
"CSS",
"css",
"systemConfig",
"zsystemConfig",
"Plugins",
"Plugin",
"plugins",
"plugin",
"javascript",
"code"
],
excludeTiddlers: [
"StyleSheet",
"StyleSheetLayout",
"StyleSheetColors",
"StyleSheetPrint"
]
};
if (!Array.prototype.contains)
Array.prototype.contains = function(item) {
return (this.find(item) != null);
};
if (!Array.prototype.containsAny)
Array.prototype.containsAny = function(items) {
for (var i=0;i<items.length;i++)
if (this.contains(items[i]))
return true;
return false;
};
String.prototype.upperCaseFirst = function() {
return this.substr(0,1).toUpperCase() + this.substr(1);
}
TiddlyWiki.prototype.saveTiddler_mptw_autocorrect = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {
tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
var conf = config.AutoCorrectPlugin;
if ( !tags.containsAny(conf.excludeTags)
&& !tags.contains(conf.wordListTag)
&& !conf.excludeTiddlers.contains(newTitle) ) {
var wordListTiddlers = store.getTaggedTiddlers(conf.wordListTag);
for (var i=0;i<wordListTiddlers.length;i++) {
var lines = wordListTiddlers[i].text.split(/$/m);
for (var j=0;j<lines.length;j++) {
if (lines[j].indexOf("->") > 0) {
var replacer = lines[j].trim().split("->");
newBody = newBody.replace(new RegExp(
"\\b"+replacer[0]+"\\b","g"),replacer[1]);
newBody = newBody.replace(new RegExp(
"\\b"+replacer[0].upperCaseFirst()+"\\b","g"),replacer[1].upperCaseFirst());
}
}
}
}
return this.saveTiddler_mptw_autocorrect(title,newTitle,newBody,modifier,modified,tags);
}
http://www.telecomuserguides.com/html/avaya/user-guide_ip-office-system.html
https://www.digicert.com/ssl-support/pfx-import-export-iis-8.htm#export pfx
#Go to \\otls1\uptdfs\GreatPlains\Aztec_eConnect\PROD\Accounts Receivable\CaseReceipts\Processed
#Rename anything with failed. Delete everything in the name past the .csv
#Copy file up one directory to be re-processed.
#Check processed for failed or success.
#If failed, attempt to see what is in the file preventing it from processing, fix if possible and repeat.
#If not found, notify ticket creator to re-key that batch.
"""Elite Contacts
One Toll- Free for all your needs 877-228-7910
Customer support hours: Monday - Friday 7am - 6pm CST
For Immdeiate After hours support, dial 877-228-7910 and select option 0. This will page an after hours tech specalist who will respond promptly.
Email: elite@birch.com
"""
|specialcell|k
|!Level|!Name|!Title|!Email|!Contact #|
|1st LEvel|Elite Team|Elite Account Specalist|Elite@birch.com|877-228-7910|
|2nd Level|Susan Gould|Elite Account Manager|Susan.gould@birch.com|816-300-1476|
|3rd Level|Gerry Poersch|Director, Customer Care|gerry.poersch@birch.com|816-300-1471|
|4th Level|Lisa Gatliff|VP of Operations|Lisa.Gatliff@birch.com|478-405-3785|
1) Power On Laptop
2) Go to IPAD and power on system
3) Log into Laptop as Boardroom
#Go to Avaya IP Office Manager
##Username Administrator
##PW in KeePass
#Go to Incoming Call Routes.
#Find incoming number to see it's destination
#Go to users
#Find Destination
#Select Forwarding TAB.
##Check Forward unconditional box
##Add Forward number (8+7didigit fax2mail number)
##Check Forward on Busy Box
##Add Forward number (8+7didigit fax2mail number)
#Click OK
#Save
#Merge
#Exit
Remote Desktop to VMPRO-PC
UserName bmoreno
PW P@ssword1!
Open VoiceMail Pro Client
Go to Condition Editor Yellow Bang Icon at top of the screen
Find RXLinc
Double Click Week Planner
Make needed changes
Click Ok
Click OK
Click Save and Make Live. Second Icon from left at top of screen.
Exit
Log off Vmpro-pc
Log into comptuer you want to clone from and launch PowerShell as Administrator
Get-WindowsFeature | ? { $_.Installed -AND $_.SubFeatures.Count -eq 0 } | Export-Clixml .\RnF.xml
Copy rnf.xml from the cloning server to the destination server
Log into destination server, and launch Powershell as Administrator
Change directory to the folder you put the RnF.xmp file and run the following commands
Import-Module Servermanager
Import-Clixml .\RnF.xml | Add-WindowsFeature
Here is a command line to ping sweep a single subnet.
FOR /L %i in (1,1,255) do @ping -n 1 -w 100 10.11.199.%i | find "Reply"
Power Down the VM
use vboxmanage.
**Note Tab Complete works and is your friend!!!***
C:\Program Files\Oracle\VirtualBox>vboxmanage modifyhd "c:\Users\ttaylor\Virtual
Box VMs\Windows 2k8R2 SQL 2008\Windows 2k8R2 SQL 2008.vdi" - -resize 50000
Start your VM, go to Computer Manage
go To disk management
Right click on the extended drive and go through the extend gui
Open Outlook.
Click the elliptical (Three Dots at the bottom Left side of the window.)
Go to Public Folders
Right Click new.
Name it
Select content to be Calendar.
Save
Give Owner Permissions to manager
Give Author Permissions to everyone Else
Send email to everyone showing how to add it to outlook.
= Customer Number (CUSTNMBR) does not exist in the Customer Master Table - RM00101
RM00101 Table exists in GPUTP Datebase.
#Check customer number exists in Great plains
##"""
--Confirm customer numer exists in great plains
In MSSQL Manager
select * from UPTGP.dbo.RM00101
Where Custnmbr like ('%303%')
"""
#--Find the Missig Customer ID in tblCustomerControl to confirm Export Status
##"""in MSQL Manager,
select * From TPEXPORT.dbo.tblCustomerControl
Where CustomerID = 303
"""
#I set the export status in tblcustomercontrol to null
##"""In MSSQL Manager
Update TPEXPORT.dbo.tblCustomerControl
Set Exportstatus = NULL
Where CustomerID = 303
"""
#re-ran the TankerPro Customer Export to GP Job
## Go to Jobs in MSSL Manager
#Then I set the exportstatus in tblinvoicecontro to null and re-ran the AR export to GP export.
## """
In MSSQL Manager
update TPEXPORT.dbo.tblarInvoiceControl set exportstatus = NULL
Where ARinvoice# = '7578213'
"""
#Afterwords I ran a check and everything came over fine
## """
--Confirm customer numer exists in great plains
In MSSQL Manager
select * from UPTGP.dbo.RM00101
Where Custnmbr like ('%303%')
"""
Checked with accounting, The are seeing 0 Dollar, we are seeing 50 Credit.
*Morning
**Check all Scheduled Tasks ran
**Check email for failures
**Removing Bad Email accounts from customer image portal
*Throughout the day
**Check Helpdesk Tickets
Go to the computer you want to scan to.
Set up a share, give Administrator Full access to the share.
Then see Dell MFP Scanner Settings.jpg for settings
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j/hFfFH/AELF7/4E2n/x6vdKKP7Mw/Z/eH9j4Xs/vPC/+EV8Uf8AQsXv/gTaf/HqP+EV8Uf9Cxe/+BNp/wDHq90oo/szD9n94f2Phez+88L/AOEV8Uf9Cxe/+BNp/wDHqP8AhFfFH/QsXv8A4E2n/wAer3Sij+zMP2f3h/Y+F7P7zwv/AIRXxR/0LF7/AOBNp/8AHqP+EV8Uf9Cxe/8AgTaf/Hq90oo/szD9n94f2Phez+88L/4RXxR/0LF7/wCBNp/8eo/4RXxR/wBCxe/+BNp/8er3Sij+zMP2f3h/Y+F7P7zwv/hFfFH/AELF7/4E2n/x6j/hFfFH/QsXv/gTaf8Ax6vdKKP7Mw/Z/eH9j4Xs/vPC/wDhFfFH/QsXv/gTaf8Ax6j/AIRXxR/0LF7/AOBNp/8AHq90oo/szD9n94f2Phez+88L/wCEV8Uf9Cxe/wDgTaf/AB6j/hFfFH/QsXv/AIE2n/x6vdKKP7Mw/Z/eH9j4Xs/vPC/+EV8Uf9Cxe/8AgTaf/Hq9M+Gmk3ui+DrW11C2a0uxPcyNCzqxUPcSOuSpIztYdCa6iiuqhhKWHbdPqdmGwNHCNypdQooorsO8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDkvGmrXVrcRW1vI0KlPMZozhjyRjP4frXM/wBqaj/z/XP/AH+b/Gt7xoV/tSLJ/wCWI/8AQmrAynrW0djCW4v9qaj/AM/1z/3+b/Gj+1NR/wCf65/7/N/jXnmpeEfD3iz4pamNc0bTtYWDRrMxf2haRz+Xme63bd4OM4GcegrgbLxfr6w2ej6Fc6rLp8Fvf3Npc2JsnlmhjvJI4N7XjqGhWNUyU+YhlO4cE+vTwCrL3J2el76JXTe+vbsefUxLpN80brZW1b26fPufQP8Aamo/8/1z/wB/m/xo/tTUf+f65/7/ADf414BDcSP4m1XxNPqU9rrt9Y6Vb2yWNpZ3sqNOGdoLWQrtGdrAO7tHhizbgARv/Dv4garqWrWNlqd/MY1vdTtX+3LaidxCImQSGD93vUO4Pl4GF55Bq6mWThFyjJOy13/l5tO/a/czp46M5Ri4tc2332V+qvZ6HsH9qaj/AM/1z/3+b/Gj+1NR/wCf65/7/N/jXzhNe3njAWF++rzw3N1/wjkj3dokOX3Xs4DAMjLxkMMDGQM5GQfS/ipo8WvX3huyEml31x50sqaHrob7HqQVQHVmCsBIisXXKP0YheCVU8vVOpGnOe976bWSf6+Vt3YpYvm5uWOyTWu921+nzvoeif2pqP8Az/XP/f5v8aP7U1H/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nWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqAOiornf8AhA9N/wCfnWv/AAeXv/x6j/hA9N/5+da/8Hl7/wDHqAOiornf+ED03/n51r/weXv/AMeo/wCED03/AJ+da/8AB5e//HqACx/5KFrf/YLsP/R15XRVztj/AMlC1v8A7Bdh/wCjryvKf26fEmreEf2TfiNrGhape6Lq1rZRvb3+nXDwTwsbiIEpIhDKcEjg9CaCox5pKPc94oormfiR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01LTdY12/wBPvIlnt7q28WalJFNGwBV0YXGGUgggjrmrX/Cq9F/5/fEn/hUan/8AJFNpp2ZKaaug/wCFV6L/AM/viT/wqNT/APkij/hVei/8/viT/wAKjU//AJIo/wCFV6L/AM/viT/wqNT/APkij/hVei/8/viT/wAKjU//AJIpDD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKAD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKAD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKAD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKAD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKAD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKAD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKAD/hVei/8/viT/wqNT/+SKP+FV6L/wA/viT/AMKjU/8A5Io/4VXov/P74k/8KjU//kij/hVei/8AP74k/wDCo1P/AOSKANLw54J0rwreXl3Y/bpLq8jjimnv9RuLx2SMuUUNNI5UAyyHAx941vVwfhDTF8P/ABG8SaXbXmpT2K6VptykWoalcXmyR5r5XZTM7lciOMEAgfKK7ygAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACudvv+ShaJ/wBgu/8A/R1nXRVzt9/yULRP+wXf/wDo6zoA6KiiigDnbH/koWt/9guw/wDR15R48/5Adt/2FNN/9LYKLH/koWt/9guw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AMk0f8JRqX/Qoa1/3+sv/kmgDoqK53/hKNS/6FDWv+/1l/8AJNH/AAlGpf8AQoa1/wB/rL/5JoA6Kiud/wCEo1L/AKFDWv8Av9Zf/JNH/CUal/0KGtf9/rL/AOSaAOiornf+Eo1L/oUNa/7/AFl/8k0f8JRqX/Qoa1/3+sv/AJJoA6Kiud/4SjUv+hQ1r/v9Zf8AyTR/wlGpf9ChrX/f6y/+SaAOirnb7/koWif9gu//APR1nR/wlGpf9ChrX/f6y/8Akmq1nJqOreMrC+m0S90u1tbC6gaS8kt23PJJbsoAjlc9In647UAdXRRRQBztj/yULW/+wXYf+jryuioooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==
Dell OpenManage 7.1 Ubuntu Repository
This is the community-supported Dell OpenManage 7.1 repository for 64-bit Ubuntu 10.04 or later versions, as well as Debian Squeeze and (pre-release) Wheezy. 32-bit packages are provided as well, which also have the srvadmin-megalib package, but are not tested; use the 32-bit packages at your own risk. Debian Wheezy users will need to get libssl0.9.8 from Debian Squeeze or unstable. For PowerEdge 12G servers, it is highly recommended that you are running Ubuntu 12.04 or later due to better driver coverage. Below, you will find instructions on how to install and setup OpenManage command-line and web interfaces.
IMPORTANT NOTE FOR UPGRADING:
If you are upgrading, in step 4, you must use apt-get install <meta-package name> or apt-get dist-upgrade. Do not use apt-get upgrade, as doing so will not upgrade all the necessary packages.
Installation/Upgrade:
1. (Optional for Upgrade) Create a new file ending in 'sources.list' in the '/etc/apt/sources.list.d' directory. Cut and paste the command below. (If typing by hand, note carefully the spacing.)
echo 'deb http://linux.dell.com/repo/community/deb/latest /' | sudo tee -a /etc/apt/sources.list.d/linux.dell.com.sources.list
2. To verify OMSA packages, add the repository key to apt. Note that you must re-do this step if upgrading from OMSA 6.5 because a new key is being used.
gpg --keyserver pool.sks-keyservers.net --recv-key 1285491434D8786F
gpg -a --export 1285491434D8786F | sudo apt-key add -
If you are behind a firewall that only allows outbound traffic over port 80, you may need to use this instead:
gpg --keyserver hkp://pool.sks-keyservers.net:80 --recv-key 1285491434D8786F (possibly needing to add "--keyserver-options http-proxy=http://<user>:<password>@<proxy>:<port>")
gpg -a --export 1285491434D8786F | sudo apt-key add -
3. Make apt aware of the new software repository by issuing the following command:
sudo apt-get update
4. Install one of the following selection of meta-packages to install the OMSA functionality you require:
srvadmin-all:Install all OMSA components
srvadmin-base:Install only base OMSA, no web server
srvadmin-rac4:Install components to manage the Dell Remote Access Card 4
srvadmin-rac5:Install components to manage the Dell Remote Access Card 5
srvadmin-idrac:Install components to manage iDRAC
srvadmin-idrac7:Install components to manage iDRAC7
srvadmin-webserver:Install Web Interface
srvadmin-storageservices:Install RAID Management
For example, to install all of OMSA: sudo apt-get install srvadmin-all
If you are upgrading, you must use apt-get install or apt-get dist-upgrade. Do not use apt-get upgrade, as doing so will not upgrade all the necessary packages.
CLI:
dataeng service starts automatically at reboot. If you want to manually start the service, issue the command below.
sudo service dataeng start
Now, you can use omreport, omconfig, and omhelp commands.
For example, you can issue omreport system summary to get details about your system.
You can use omconfig to configure component properties.
omhelp provides help information for commands.
See OpenManage CLI User's Guide for comprehensive documentation.
Web Interface:
To use web interface, users with appropriate permissions need to be added.
1. Add users with appropriate permissions to /opt/dell/srvadmin/etc/omarolemap file. See detailed information in the User's Guide.
Example:john_doe * Administrator
2. Start the web server.
sudo service dsm_om_connsvc start
3. Go to https://<ip_address>:1311/ in your browser to access OMSA.
4. If you want to start dsm_om_connvsc service at boot, issue sudo update-rc.d dsm_om_connsvc defaults command.
Removal
Uninstall all packages: sudo apt-get --auto-remove remove srvadmin-all
Uninstall all packages including config files: sudo apt-get --auto-remove purge srvadmin-all
|!Server|!Drac Version|!DRAC Firmware|!IP Addres|
|Padme|iDRAC 6|1.97|10.10.199.20|
|YPIOCS02|Drac 5|1.32|10.10.199.22|
|darthmaul|Drac 5|1.33|10.10.199.23|
|SIDIOUS|iDRAC6|1.97|10.10.199.30|
|Jedi|iDRAC6|1.97|10.10.199.40|
|Sith|iDRAC6|1.97|10.10.199.50|
|XPIOCS02(hulk)|iDRAC7|1.57.57|10.10.199.101|
|XPIOCS01|iDRAC7|1.57.57|10.10.199.102|
|Dagobah|iDRAC7|1.57.57|10.10.199.103|
|Anakin|iDRAC6|1.97?|10.12.116.116|
Datacenter: KNWRW-2HJT3-JHF97-YV32C-P92H7
Standard: RBMB7-NDT2P-GC4M7-GJJFC-HH8V3
Essentials: F7GN9-4C7QC-C647K-9B7JP-FYBP7
"""
!!! Must be edited in VS 2008!!!!
Open VS2008
Open File \\CRPWEB01V\c$\Inetpub\Intranet\PO\POEDITTMT.aspx
In Design View, Click on the item you need to edit, Go to Source code view, mane necessary changes. Save file, test.
In http://crpsql01/Reports/ go to /Home/Administration/Acconting/Billing
Find appropriate subscription and edit it
https://www.simple-talk.com/sysadmin/exchange/exchange-2010-dag-creation-and-configuration,-part-2/
Now that you've created your first DAG in Exchange 2010, you'll need to be sure it's correctly configured for failovers and switchovers, and you know how to troubleshoot. Fear not, for Neil Hobson tells you what you need to know.
This is the second and final article of a two-part series explaining the process of creating and configuring a simple two-node Database Availability Group (DAG) in Exchange 2010. In part one of this article, we covered topics such as the lab environment used throughout this discussion, the components that comprise a DAG, the overall network configuration requirements, and the process to actually create the DAG object using the Exchange Management Shell. If you haven’t read part one of this article, I strongly recommend that you do so before reading part two.
In this second article we will initially be examining the log files that are generated during the DAG creation and configuration processes, as these become invaluable when you are troubleshooting. Although we won’t really see deep examples of how to use these log files, this is still information you’ll be glad we covered. We will then move on to the more practical matters of adding the two mailbox servers (EX01 and EX02) to the DAG using the Exchange Management Shell, and also cover important DAG configuration parameters that can be adjusted after the DAG itself has been created. Towards the end of the article, once we have our DAG configured to our taste, I’ll talk a bit more about the Failover Cluster, show you how to add mailbox database copies to the two mailbox servers, and how to perform a process known as a database switchover.
As you can see, there is a lot of information to cover in this article, so let’s get started by examining the log files which are generated during the DAG creation process.
DagTask Logs
On the Exchange 2010 server where the New-DatabaseAvailabilityGroup cmdlet was executed, navigate to the C:\ExchangeSetupLogs\DagTasks folder, which will contain log files relevant to DAG creation and configuration tasks. Each log file name will be in the following format:
dagtask_{date and time}_{cmdlet}
In this format, {date and time} refers to the date and time that the DAG cmdlet was executed, while {cmdlet} refers to the name of the DAG cmdlet that was executed. For example, the log file name shown in Figure 1 below is dagtask_2010-02-02_20-02-18.305_newdatabaseavailabilitygroup. After the first DAG cmdlet, such as New-DatabaseAvailabilityGroup, has been executed, there will naturally only be a single dagtask log file in the C:\ExchangeSetupLogs\DagTasks folder. As further DAG tasks are run, such as those involving the Set-DatabaseAvailabilityGroup cmdlet, additional dagtask log files will be created in the same folder.
With this in mind, it’s worth nothing that the setup log file that is created at the same time as the DAG itself (i.e. as a result of running the New-DatabaseAvailabilityGroup cmdlet for the first time) is worth investigating, and Figure 1 shows an example of this dagtask log file’s contents. In this particular log file, important configuration information is shown, such as the WitnessServer and WitnessDirectory cmdlet parameters, together with a clear indication that the DAG creation process was successful. Examining the contents of this log file will prove useful when troubleshooting DAG creation failures.
Figure 1: Contents of a Dagtask Log File
Adding Mailbox Servers to the DAG
Now, once the DAG has been created, the next step is to add the first mailbox server, EX01, to the DAG. To accomplish this, the Add-DatabaseAvailabilityGroupServer cmdlet will be used, which requires two parameters. They are the –Identity parameter, which identifies which DAG is being configured, and the –MailboxServer parameter, which identifies which mailbox server is being added to the DAG. Therefore, the full cmdlet to use is:
Add-DatabaseAvailabilityGroupServer –Identity HeadOffice –MailboxServer EX01
The Add-DatabaseAvailabilityGroupServer cmdlet performs the following tasks:
First, a check is performed to see if the server EX01 is already a member of a DAG, as a mailbox server can only be a member of a single DAG.
Next, the Windows Failover Cluster components are installed on that mailbox server (if they are not already present); this second task is being performed in Figure 2. Of course, if it is known when an operating system is being deployed that it will be for a mailbox server which will also be part of a DAG, then it is still perfectly acceptable to pre-install the Windows Failover Cluster components prior to running the Add-DatabaseAvailabilityGroupServer cmdlet.
Figure 2: Installation of the Windows Failover Clustering Components
Once the Windows Failover Cluster components have been installed, the Add-DatabaseAvailabilityGroupServer cmdlet creates the Windows Failover Cluster itself, which takes its name from the name given to the DAG. Therefore, in the lab environment, the failover cluster name is HeadOffice, as this is the name given to the DAG.
Finally, the mailbox server EX01 is added to the DAG.
After the running of the Add-DatabaseAvailabilityGroupServer cmdlet, an additional dagtask log file will have been created in the DagTasks log folder mentioned earlier. This new log file contains plenty of useful information, such as the progress of the cluster formation, and the progress of adding the mailbox server to the DAG, as can be seen in Figure 3. Examining the contents of this log file will prove to be a useful exercise if you have any issues when adding a mailbox server to the DAG.
Figure 3: Dagtask Log File for Add-DatabaseAvailabilityGroupServer
Now that the first mailbox server has been added to the DAG, the Add-DatabaseAvailabilityGroupServer cmdlet needs to be repeated, specifying the second mailbox server EX02 as the server to add to the DAG. Thus, the cmdlet to achieve this is:
Add-DatabaseAvailabilityGroupServer –Identity HeadOffice –MailboxServer EX02
Once this cmdlet has completed, the properties of the DAG can be examined to confirm that both mailbox servers are now members of the DAG. To do this, the Get-DatabaseAvailabilityGroup cmdlet can be used, with the results of this cmdlet piped into the format-list (or ‘fl’ for short) cmdlet. To reduce the amount of information provided, we can filter the output to only show the ‘servers’ parameter, and so the command to achieve all of this is:
Get-DatabaseAvailabilityGroup HeadOffice | fl servers
The result of running this cmdlet is shown in Figure 4, where it can be seen that both EX01 and EX02 are confirmed as members of this DAG:
Figure 4: Confirming DAG Membership
Additional DAG Parameters
Now that you’ve got your Mailbox databases added to the DAG, the Set-DatabaseAvailabilityGroup cmdlet can be used to configure additional DAG parameters after said DAG has been created. For example, if the server hosting the witness directory fails, it is possible to change the witness server and witness directory using the Set-DatabaseAvailabilityGroup cmdlet. Other key parameters that can be specified include:
AlternateWitnessServer - It’s possible to specify an alternate witness server for the DAG to use with regards to site resilience scenarios.
AlternateWitnessDirectory - This parameter is used in conjunction with the AlternateWitnessServer parameter to form the full alternate witness location.
ReplicationPort - By default, Exchange 2010 uses the single Transmission Control Protocol (TCP) port 64327 to perform log shipping and database seeding operations. If this port number needs to be changed, this can be achieved via the ReplicationPort parameter, but be aware that if this port number is changed, the Windows Firewall exceptions will also need to be manually changed, since these are initially configured by the Exchange 2010 setup process.
NetworkCompression - This parameter determines whether network compression is enabled or disabled on the DAG networks. Microsoft states that enabling this feature can reduce network traffic by up to 30%, and so it’s likely that enabling compression is worthwhile in most deployments. This parameter has four different settings:
Disabled – network compression is disabled on all networks.
Enabled – network compression is enabled on all networks, including those on different subnets when considering site resilience scenarios.
InterSubnetOnly – network compression will be enabled only for networks on the same subnet. This is the default setting.
SeedOnly – network compression will only be enabled for database seeding processes.
NetworkEncryption - This parameter controls whether encryption is used on the DAG networks. In Exchange 2010, DAGs support the encryption features of the Windows operating system, which could prove useful for those environments that require increased security. This parameter is similar to the NetworkCompression parameter, in that it has the same four settings, namely Enabled, Disabled, InterSubnetOnly or SeedOnly, and the default setting is InterSubnetOnly.
As an example of modifying one of the key parameters listed above, suppose that there is a requirement to change the network compression setting from the default value of InterSubnetOnly to Disabled. In this example, the following Exchange Management Shell command will be required:
Set-DatabaseAvailabilityGroup HeadOffice –NetworkCompression Disabled
The result of running this command is shown in Figure 5:
Figure 5: Enabling DAG Network Compression
The Failover Cluster
Now that you have your DAG customized to your taste, let’s take a look at how we can manage it. Earlier in this article, we saw that the Windows Failover Cluster components were installed onto each mailbox server when the Add-DatabaseAvailabilityGroup cmdlet was run. There are some worthwhile observations to make regarding the role of the failover cluster in Exchange 2010, when compared to its counterpart in Exchange 2007. For example, the red highlight box in Figure 6 shows the Failover Cluster Manager snap-in expanded out to reveal that the name of the cluster is derived from the name of the DAG. From examining the blue highlight boxes, it can also be seen that there are no Exchange-related cluster resources in the Services and applications node, such as those seen in Exchange 2007.
Figure 6: The Failover Cluster Manager Snap-in
What have been created, though, are cluster core resources for the DAG name, the DAG IP address and the file share witness, as shown in Figure 7:
Figure 7: Cluster Core Resources
One of Microsoft’s design goals in Exchange 2010 was to ensure that an Exchange administrator can control a DAG and its Windows Failover Cluster requirements equally well from within the Exchange Management Console or the Exchange Management Shell, negating the need to perform any administrative duties within the Failover Cluster Manager snap-in. To highlight this, Figure 8 shows the DAG networks presented within the Exchange Management Console, whereas such objects were controlled within the Failover Cluster Manager snap-in in Exchange 2007.
In fact, in Figure 8, you can see that two networks have been created with their default names set to DAGNetwork01 and DAGNetwork02 respectively. The subnet information is also displayed and, as a result, you can see that DAGNetwork01 is actually the MAPI network, since it represents the 192.168.50.0 network, and that DAGNetwork02 is the Replication network, as it represents the 10.0.0.0 network.
Figure 8: DAG Networks in the Exchange Management Console
If you have taken the time to rename your network connections on each mailbox server to differentiate between the MAPI and Replication network interfaces, it makes sense to rename the networks that you can see in Figure 8 as well so that they match, if only to make troubleshooting easier.
With that in mind, to change the display name of DAGNetwork01 to “MAPI Network”, the command below can be used. The same process can obviously be used to rename DAGNetwork02 to “Replication Network”:
Set-DatabaseAvailabilityGroupNetwork –Identity HeadOffice\DAGNetwork01 –Name “MAPI Network”
Mailbox Database Copies
Before creating the DAG and adding the mailbox servers to it, the Exchange 2010 mailbox server role had already been installed on both servers before the start of this demonstration. As a result, a default mailbox database had already been created on each mailbox server and given the default name, which now has a format of “Mailbox Database n”, where “n” is a random 10-digit number; for example, the default mailbox database on server EX02 is called Mailbox Database 1796634876.
The reason for this default naming standard is that, in Exchange 2010, the mailbox database is now an organization object and not tied to any particular mailbox server. As a result, database names must be unique across the Exchange organization. As can be seen from the screen shots later in this article, the default databases have already been renamed to Mailbox Database 001 and Mailbox Database 002 on servers EX01 and EX02 respectively.
Now, even though a DAG has been created and both mailbox servers are members of this DAG, there still exists only a single copy of each mailbox database by default. To create a highly available mailbox database configuration, it is now necessary to ensure that a copy of Mailbox Database 001 exists on server EX02 and a copy of Mailbox Database 002 exists on server EX01. In this configuration, each mailbox server will initially host a single active database as well as a single passive copy of the active database hosted on the other server. To create this configuration, the Add-MailboxDatabaseCopy cmdlet can be used and, in the lab environment, the first command used is:
Add-MailboxDatabaseCopy –Identity “Mailbox Database 001” –MailboxServer EX02`
–ActivationPreference 2
With this command, we can see that a copy of Mailbox Database 001 is being added to the mailbox server EX02. The ActivationPreference parameter is used to determine which database to activate if there are multiple databases available that meet the activation criteria used by the Active Manager process. The Active Manager process runs on each mailbox server in a DAG, and essentially decides which database copy to activate when the need arises. If multiple databases meet all the criteria, the activation preference is consulted and the database with the lowest value is activated. Since the primary copy of the database has an activation preference of 1, a value of 2 has been chosen for the second copy of this database.
The results of running the Add-MailboxDatabaseCopy cmdlet are shown in Figure 9:
Figure 9: Adding a Mailbox Database Copy
To confirm that copies of Mailbox Database 001 now exist on both EX01 and EX02, it is possible to use the Get-MailboxDatabase cmdlet to consult the DatabaseCopies and Servers parameters, as shown in Figure 10. Then it’s just a question of re-running the Add-MailboxDatabaseCopy cmdlet for Mailbox Database 002, but this time specifying a target server of EX01. Once this cmdlet has completed, both databases have a copy that exist on the alternate mailbox server:
Figure 10: Checking ‘Mailbox Database 001’ Database Copies
Database Failovers
Now that our 2-node DAG is essentially built and configured, all that remains is to prove that the databases can be moved between the two mailbox server nodes. Before we do that though, let’s briefly cover some key terminology that Microsoft uses in this area: switchovers and failovers, collectively known as *overs (pronounced star-overs).
A switchover is an action performed by an administrator to move either a single database or all the databases on a mailbox server to an alternative mailbox server within the DAG. If the administrator moves all databases from one server to another, then this process is known as a server switchover. The most obvious example of when you might need to perform a server switchover is when applying an update rollup or service pack to an Exchange 2010 mailbox server. On the other hand, in the example I will present shortly, we will be performing a switchover of just a single database from server EX01 to server EX02 - a process known as a database switchover.
A failover is an automatic action performed by the system in response to a problem with either a single database or the entire mailbox server. Like switchovers, failovers can also apply to either a single mailbox database (a database failover) or the entire server (a server failover). I won’t be demonstrating a failover here, but I will perform a database switchover using the Exchange Management Console, although the Exchange Management Shell can also be used if you prefer.
Demonstrating a Switchover
The first thing to do is to obtain the status of the database copies. In Figure 11, you can see that the active copy of the database named Mailbox Database 001 is currently residing on server EX01, since the Copy Status column shows a value of Mounted for server EX01. Server EX02 contains a healthy copy of this database, which you can tell by virtue of the fact that the Copy Status column shows a value of Healthy for server EX02. Likewise, Mailbox Database 002 is active on server EX02 and has a healthy database copy on server EX01.
Figure 11: The Database Copy Status
To make the copy of Mailbox Database 001 on server EX02 the active copy, the following process is used:
In the bottom pane shown in Figure 11, right-click the healthy copy of Mailbox Database 001 located on server EX02, and choose the Activate Database Copy… option from the context menu (as shown in Figure 12):
Figure 12: Activating a Database Copy
Next, a window is presented that allows you to override the AutoDatabaseMountDial setting for this mailbox server. Shown in Figure 13, this setting essentially allows you to control whether or not the database will mount, depending on how many transaction log files may be missing. More information on the AutoDatabaseMountDial parameter can be found in the Exchange 2010 product documentation on the Set-Mailbox cmdlet.
Figure 13: AutoDatabaseMountDial Override
The database copy on server EX02 is then activated and, if the procedure is successful, the Exchange Management Console will now reflect this, as shown in Figure 14, where you can see that the Copy Status column now indicates that the copy of the database on server EX02 is Mounted.
Figure 14: New Active Database Copy
To perform a complete server switchover, where all databases are moved from one mailbox server to another, the Switchover Server option can be selected from the action pane when the relevant mailbox server is highlighted in the EMC’s Server Configuration -> Mailbox view. I will leave you, the reader, to discover and test out these processes in your own time.
Summary
That concludes the final article of this two-part series on creating and configuring a two-node DAG solution using Exchange 2010. If you have followed both parts of this article, you will now have a solid understanding of the steps required to construct a simple two-node DAG, as well as how to configure and use it.
Whilst there is no doubt that Microsoft has produced a compelling mailbox database high availability feature in Exchange 2010, you should be fully aware that the DAG is only one aspect of a truly highly available messaging infrastructure. Other key components, such as the Client Access Server role, the Hub Transport server role, Active Directory, DNS, and so on, all have to be planned and implemented with Exchange 2010 high availability in mind.
!!Create Virtual
#Install Server 2012 R2
#Fully update server
#Install PreRequs
##Open Windows PowerShell As Administrator and run this
##Install-WindowsFeature AS-HTTP-Activation, Desktop-Experience, NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, Web-Mgmt-Console, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-Clustering-CmdInterface
#Reboot
#Download And Install [[Microsoft Unified Communications Managed API 4.0, Core Runtime 64-bit|http://www.microsoft.com/en-us/download/details.aspx?id=34992]]
#Download And Install [[Microsoft Office 2010 Filter Pack 64 bit|http://www.microsoft.com/en-us/download/details.aspx?id=17062]] and [[Microsoft Office 2010 Filter Pack SP1 64 bit|http://www.microsoft.com/en-us/download/details.aspx?id=26604]]
#Open CMD
#run this instalation at the path of Exchange server installation directory
##setup.exe /prepareAD /IAcceptExchangeServerLicenseTerms
#Start install the Exchange server 2013.
##Run Exchange Xerver Deployment Assistant
Get-MessageTrackingLog -ResultSize Unlimited -Start "6/01/2015 00:01AM" -End "7/3/2015 23:59PM"-Sender voicemail@ppok.com -Recipients ttaylor@ppok.com | select * | Out-GridView
Get-MessageTrackingLog -resultsize unlimited -Start "10/17/2015 00:01AM" -end "11/9/2015 23:59PM" | where-object {$_.sender -like "*@medco.com" -AND $_.EventId -eq "Receive"} | ConvertTo-Csv > "C:\temp\test.csv"
http://exchangeserverpro.com/exchange-server-protocol-logging/
This will give you anything in the protocol log with microsoft.com
Get-ChildItem | Select-String -Pattern "microsoft.com"
The output will give you the IP address of the sender, so you can change the microsoft.com to the ip address and see the entire transaction for the email.
C:\>Get-ReceiveConnector -Identity "Default Frontend xviocx01" | Set-ReceiveConnector -TarpitInterval 00:00:00 -ConnectionTimeout 00:30:00 -ConnectionInactivityTimeout 00:20:00 -MaxAcknowledgementDelay 00:00:00 -MaxInboundConnection 10000 -MaxInboundConnectionPercentagePerSource 100 -MaxInboundConnectionPerSource unlimited
C:\>Get-ReceiveConnector -Identity "Default 1111" | Set-ReceiveConnector -TarpitInterval 00:00:00 -ConnectionTimeout 00:30:00 -ConnectionInactivityTimeout 00:20:00 -MaxAcknowledgementDelay 00:00:00 -MaxInboundConnection 10000 -MaxInboundConnectionPercentagePerSource 100 -MaxInboundConnectionPerSource unlimited
86PXV-P2HKP-32RH4-7JY6V-GP4BQ
http://blogs.technet.com/b/winde76/archive/2011/03/23/step-by-step-create-a-database-availability-group-dag.aspx
http://technet.microsoft.com/en-us/library/ff622321(v=exchg.141).aspx
-- ExecuteReader requires an open and available Connection
Log onto CRPAPP01
Restart the bridgepoint service
go to the following network share
\\otls1\uptdfs\GreatPlains\Aztec_eConnect\PROD\Accounts Receivable\CashReceipts\Processed
Find anything with filename of .failed at the end.
Rename the file, deleting everything after the .csv in the file.
Example :
rename Batch-SC052314LB_CRs-P077383-xxx_Aztec_CR_Input.csv_635367907111280833.Failed
to
Batch-SC052314LB_CRs-P077383-xxx_Aztec_CR_Input.csv
<li>Brush off dirt or dust with a damp cloth or soft brush.
<li>Apply an exotic leather conditioner to your cowboy boots in several thin layers.
<li>Apply a neutral or matching cream based polish, buff with a soft cloth.
<li>Apply a non-silicone water and stain protector.
#Telnet to management port IP address of controller
##Username shellUsr
##PW in keepass
#enter Command sysWipe
you will receive the following error
Warning: This command is extremely destructive. As such, it should not be used
as part of configuration restoration.
If you are NOT planning on restoring the configuration / recovering user data, y
ou may perform sysWipeAllConfigData.
If you ARE planning on restoring the configuration / recovering user data, you m
ay perform bdbmClearPrimaryDatabase
as part of the recovery procedure.
value = 35 = 0x23 = '#'
# From warning, use the command sysWipeAllConfigData and press enter
#Wait 10 minutes for the array to reboot
#Open IBM DS Stroage Manager
#Remove old array
# Add new array
Everything will have been cleared.
"""
--Financial Batch Stuck in GL10000
--Check for any batches stuck in GL10000
--If it is UPT, It will exist in UPTGP Database
--If it is GP, it will exist in GPUPT Database
--Look for a currency ID not equal to 'Z-US$'
select * from GL10000
where curncyid<>'Z-US$'
--If found, update the table by inserting 'Z-US$'
update GL10000 set curncyid='Z-US$'
where curncyid<>'Z-US$'
"""
Welcome to MoPad!
This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!
Please be cognizant of whether you are using a public pad or private/team pad, and take appropriate precautions with data you post here!
Type here when you arrive.
I understand that so far, but do not see where it is changing it to something else,
Also, it is ubuntu, so I will have to Sudo it
basedirname="/home"
findfilename="bob.txt"
for line in `find "$basedirname" -name "$findfilename"`
do
head -n1 $line | egrep ^\*$ && sed -i '0,/^\*$/{s/^\*/asterisk/}' $line
done
I knew there was a reason I hate scripting. LOL
There are other ways to do it. You could check the return code of the egrep and use and if. the && is short for if true
I assume you put that in a script file and execute it with sudo
sure
I'm double checking that it works right...
so, it will replace * with asterisk?
the sed works. The for loop looks like it may be broken. I was misreading the output. It works.
putting a variable in the half quotes won't work
okay, there. I think that does it.
I will test when I get home.
that is much easier than cd ing 2 directories deep, vi'ing one file, then backing out, rinse repeat 900 times
Yep. Much easier. I was originally thinking of moving the file, and cating it, but the sed is better, and less file moving
Log into SCVMM
Open PowerShell
Run:
get-vm -name "VM Name" | select name, hostname, id
Where VM Name is the name of the VM you are wanting to delete
This will list all VM's in SCVMM with that name. BE CAREFUL, YOU CAN DELETE A PRODUCTION RUNNING VM IF YOU ENTER THE WRING ID>
$VM = Get-VM -ID “VM ID of the VM you want to delete"
I then run a "$VM" command ton ensure it only lists the one or group of VM\s you want to delete if you are sure it is only the one or ones you wnat to delete, run the next command.
Remove-VM -VM $VM -Force
Set-Mailbox "gcpsupport@gcppharma.com" -DeliverToMailboxAndForward $true -ForwardingAddress "jmcquinn@gcppharma.com, ttaylor@ppok.com"
http://www.microsoft.com/surface/en-us/support/warranty-service-and-recovery/surface-wont-turn-on-windows-wont-start?os=windows-8.1-update-1
If OS is bad, REmove the battery.
Install Micro SD card carefully in the gun and boot.
After booted, power back off, remove the battery again, remove the SD card and boot back up.
Plug Micro USB Cable from Scanner dock to computer.
Once Intermec program can see the scanner,
Right Click The scanner,
Power Tools
Remote Viewer.
At this point, you can see the files and what is on the screen of the scanner
Move SR130... file to \cabfiles
reboot handheld
It will install the cab file and reboot again
Under software vault, under settings, copy ssbak_ck713..., Drag and drop it to the online handheld, confirm the upgrade by clicking yes
Using the pen, click the windows icon on the screen.
Input password
cr52401
Go to settings, System, remove programs-
remove "intermec Technologies ITE"
Copy GCP folder to \my device\business\
Drag and drop it there.
Close everything, take handheld to GCP to test.
SR13062501_REG_Cx70WM65_ALL
PROBLEMS ADDRESSED WITH THIS SR:
CPR Changed the refresh frequency of the OS partition from 128K to 4K
INSTALLATION INSTRUCTIONS:
1. Install manually
Copy this CAB file to \Temp.
Use the CE File Explorer to click on the CAB file to install it.
or,
2. Install automatically
Copy this CAB file to \Cabfiles.
Warm boot to install.
PREREQUISITES:
This CAB file is intended for 70 Series devices with Windows Embedded Handheld 6.5 based platforms and OS 1.30 or greater.
REGISTRY CHANGES:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashFX-OS]
"Refresh"=dword:00001000
Get-WmiObject win32_networkadapterconfiguration | select description, macaddress
[[Lean Protein Estimator|http://www.thewellnessstore.co.uk/ProteinEstimator/PE.php]]
Set-OrganizationConfig -EwsApplicationAccessPolicy:EnforceAllowList
Set-OrganizationConfig -EwsAllowList AppNameEWS
"""
The year 2012 is turning out to be a pretty big one for Microsoft software releases. Windows Server 2012 is just one of the many exciting products that has come out so far this year. As with any new release, there are some changes and some opportunities to stretch our wings and learn new stuff. In this blog post I’ll tell you about how Windows Server 2012 no longer has DCPROMO (Booooo!) and how I replaced it with PowerShell (Yay!!).
I was setting up a new SharePoint 2013 VM the other day (mainly because Shane was having trouble, and I needed to demonstrate once again that I’m smarter than he is) and when I was creating the domain I discovered that Windows 2012 no longer includes DCPROMO.EXE, the tool that creates domains. There is a pretty straight forward way to do this in the UI, but that’s no fun. You know what’s fun? PowerShell! That’s what’s fun. So here’s the code I used to create and configure my Contoso domain:
1 # Add the AD Module
2 Import-module servermanager
3 Add-WindowsFeature AD-Domain-Services
4 # Create a new forest which creates a root domain
5 Install-addsforest -domainname contoso.com -safemodeadministratorpassword (convertto-securestring `
6 "pass@word1" -asplaintext -force) -domainmode win2008r2 -domainnetbiosname contoso -forestmode `
7 win2008r2
8
9 # Add the AD tools to the server
10 Add-windowsfeature rsat-adds -includeallsubfeature
11
12 # Set the domain passwords to not expire
13 Set-ADDefaultDomainPasswordPolicy contoso.com -ComplexityEnabled $false -MaxPasswordAge "3650" `
14 -PasswordHistoryCount 0 -MinPasswordAge 0
<div style="margin-left: 3em;">
This text would be indented by 3
</div>
Optional
Set type to text/vnd.tiddlywiki "Wikitext"
then use blockquote and /blockquote
<blockquote>This text would be indented</blockquote>
however, this text would have a grey bar in front of it.
http://exchangeserverpro.com/exchange-2013-installing-cumulative-updates/
#Download and install the RSAT tools for Windows 7 from here: http://www.microsoft.com/downloads/details.aspx?FamilyID=7D2F6AD7-656B-4313-A005-4E344E43997D&displaylang=en. Install either the 32-bit or 64-bit depending on what version of Windows 7 you’re using.
#Next, go to Start - Control Panel and click on Programs.
#Next, you’ll see an option to Turn Window features on or off. Click on this option.
#Under Remote Server Administration Tools - Role Administration Tools, find the option for Hyper-V Tools, check the checkbox and click OK.
You can now type Hyper-V Manager at the Start menu or go to Start - Administrative Tools -Hyper-V Manager.
"""http://wiki.sabnzbd.org/install-ubuntu-repo
http://www.htpcbeginner.com/install-nzbdrone-on-ubuntu/
https://github.com/NzbDrone/NzbDrone/wiki/Autostart-on-Linux
http://www.htpcbeginner.com/install-couchpotato-on-ubuntu/
out of those i have had good luck getting it working. some times you avhe to go to a few other sites to get stuff working
"""
Default install will cause an error almost immedatly upon boot
Your PC needs to restart.
Please hold down the power button.
Error code: 0x000000C4
Parameters:
0×0000000000000091
0x000000000000000F
0xFFFFF801E5962A80
0×0000000000000000
The solution to the problem is this command:
"""
<ol>
<li><b>"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata [vmname] VBoxInternal/CPUM/CMPXCHG16B 1</b>
<p>
<li> You have to replace vname with the name of your Virtual Machine which you can find in the VirtualBox interface or with this command:
<p><b>"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms</b>
<p>
Don’t forget to set the VM name in quotes if it contains blanks.
The command enables the CPU instruction CMPXCHG16B. More info here.
<li>Start install,
<li>Enter product key.
<li>Enter password
<li>Re-Enter Password
<p>
<li>Log in
Currently, Chris has a report running on CRPSQL03 that saves a file to \\otls1\uptdfs\Public\Intellum
This is done at 11:55 AM every day.
The filename must be “Intellum_UPT_Driver_Info_complete.csv”
On CRPAUTO02V, I created an intellum folder on the e: Drive
There are 2 files in the folder.
Intellum.bat
Intellum.sh
There is a scheduled task that runs every 15 minutes calling the bat file.
The .bat file checks for the existence of a file in the share.
If the file exists, it uploads it to the FTP site and deletes it from the share.
If the file does not exist, it exits.
The .sh file is the script file for Winscp to connect to the FTP server.
***Future Update***
To reduce the amount of time between a driver information being entered into the system and being available to Intellum, Chris will add the following:
Chris will give the users the ability that when a new driver information is entered, they can generate a report will generate a new file for upload any time to reduce the wait time between entering a driver and their information being available. They will need to contact Intellum and notify them that the new file is uploaded.
IPSec Network-to-Network VPN SME Server 7.1 HOWTO
Author(s): Lloyd Keen, David Biczo
Revised: 7th March 2007
Summary: The purpose of this howto is to guide you through the procedure to connect two private subnets, both behind servers running SME Server version 7.1 in server/gateway mode via an encrypted tunnel using IPsec (sometimes referred to as NETKEY or Kernel IPsec). Both servers have static IP’s on the external interface using PPPoE or bridged Ethernet. NETKEY under linux 2.6 works a bit different to Ipsec under linux 2.4, the most obvious difference being that there is no visible ipsecx device as such. This document serves as a guide only, it worked for us but YMMV. As usual “all care but no responsibility taken”. Comments and suggestions are welcome. If you don’t feel comfortable following the procedure described below, then I have written a script which will prompt you for the required settings and automate the process for you. You can download the script here. This script is written for my personal use - if you can get any benefit from it - great, but if it doesn't work then you're on your own. You can download the script from here: [1]
SECTION A:
Procedure smeserverA:
#mcedit /etc/sysconfig/network-scripts/ifcfg-ipsec0
and enter the following information:
TYPE=IPSEC
ONBOOT=no
IKE_METHOD=PSK
SRCNET=192.168.aa.0/24 (smeserverA’s LAN address)
DSTNET=192.168.bb.0/24 (smeserverB’s LAN address)
SRCGW=xxx.xxx.xxx.xxx (smeserverA’s Gateway address)
DST=xxx.xxx.xxx.xxx (replace xxx’s with smeserverB’s external static IP)
Now add the preshared key into /etc/sysconfig/network-scripts/keys-ipsec0
#mcedit /etc/sysconfig/network-scripts/keys-ipsec0
and add the following line:
IKE_PSK=my_shared_secret
Procedure smeserverB:
#mcedit /etc/sysconfig/network-scripts/ifcfg-ipsec0
and enter the following information:
TYPE=IPSEC
ONBOOT=no
IKE_METHOD=PSK
SRCNET=192.168.bb.0/24 (smeserverB’s LAN address)
DSTNET=192.168.aa.0/24 (smeserverA’s LAN address)
SRCGW=xxx.xxx.xxx.xxx (smeserverB’s Gateway address)
DST=xxx.xxx.xxx.xxx (replace xxx’s with smeserverA’s external static IP)
Then add the preshared key into etc/sysconfig/network-scripts/keys-ipsec0
#mcedit /etc/sysconfig/network-scripts/keys-ipsec0
and add the following line:
IKE_PSK=my_shared_secret
NOTE: If you have a PPPoE connection you don't want the interface to come up at boot time (ONBOOT=no). You need IPSec to come up AFTER the ppp interface. You can address this issue by modifying /etc/ppp/ip-up.local and /etc/ppp/ip-down.local scripts as described later in this document. If you have a bridged Ethernet connection then you can set this option to ONBOOT=yes.
Now open up the server-manager on both servers and add the appropriate network settings into the "Local Networks" panel. For example on smeserverA you would enter the following values:
Network Address: 192.168.bb.1
Subnet Mask: 255.255.255.0
Router 192.168.aa.1
And on smeserverB you would enter the following:
Network Address: 192.168.aa.1
Subnet Mask: 255.255.255.0
Router 192.168.bb.1
SECTION B:
This section contains information on modifying the firewall and installing modified scripts to fix routing issues.
#mkdir -p /etc/e-smith/templates-custom/etc/rc.d/init.d/masq/
#cd /etc/e-smith/templates-custom/etc/rc.d/init.d/masq/
#mcedit 15AllowIPsec
and add the following:
/sbin/iptables -A INPUT -i $OUTERIF -p udp --sport 500 --dport 500 -j ACCEPT
/sbin/iptables -t mangle -A PREROUTING -i $OUTERIF -p 50 -j MARK --set-mark 1
/sbin/iptables -A INPUT -i $OUTERIF -m mark --mark 1 -j ACCEPT
/sbin/iptables -A FORWARD -i $OUTERIF -m mark --mark 1 -j ACCEPT
/sbin/iptables -t mangle -A PREROUTING -i $OUTERIF -p 51 -j MARK --set-mark 2
/sbin/iptables -A INPUT -i $OUTERIF -m mark --mark 2 -j ACCEPT
/sbin/iptables -A FORWARD -i $OUTERIF -m mark --mark 2 -j ACCEPT
Make sure to leave a blank line at the top of the file and a carriage return at the end of the file, then do:
#/sbin/e-smith/expand-template /etc/rc.d/init.d/masq
#/etc/init.d/masq restart
There appears to be a bug in the way ifup-ipsec and ifdown-ipsec sets up the routing so you will need to install modified versions of these scripts from here [2]. For more information about this bug see [3]. There is some minor code duplication in the scripts, but it works. If you have any comments or suggestions we’d be glad to hear them. Any changes made in the scripts have been documented where applicable.
#cd /etc/sysconfig/network-scripts
#mv ifup-ipsec ifup-ipsec.old
#mv ifdown-ipsec ifdown-ipsec.old
#wget http://www.comnetel.com/sme7_ipsec/ifup-ipsec
#wget http://www.comnetel.com/sme7_ipsec/ifdown-ipsec
If you have a bridged Ethernet connection you can skip the next section and either reboot or bring up the tunnel with the following command:
#/sbin/ifup ipsec0
SECTION C:
Only complete this section if you have a PPPoE connection on the external interface. And finally as mentioned previously in this document, we need to add a command to bring up the tunnel automatically at boot time. Modify /etc/ppp/ip-up.local
#mkdir –p /etc/e-smith/templates-custom/etc/ppp/ip-up.local
#cd /etc/e-smith/templates-custom/etc/ppp/ip-up.local
#mcedit 40ipup15ipsec
and add the following code to the file:
case $IPPARAM in
pppoe)
/sbin/ifdown ipsec0
sleep 5
/sbin/ifup ipsec0
;;
*)
esac
Then expand the template
#expand-template /etc/ppp/ip-up.local
Modify /etc/ppp/ip-down.local
#mkdir –p /etc/e-smith/templates-custom/etc/ppp/ip-down.local
#cd /etc/e-smith/templates-custom/etc/ppp/ip-down.local
#mcedit 40ipdown15ipsec
and add the following code into this file:
IPPARAM=$6
case $IPPARAM in
pppoe)
/sbin/ifdown ipsec0
;;
*)
esac
Then expand the template
#expand-template /etc/ppp/ip-down.local
Reboot or bring up the tunnel with the following command:
#/sbin/ifup ipsec0
|!Name|!VisualID|!Raw Data|
|Temp:|2403 21623 H|000616A8EE|
|Lorrane:|1643 18131 H|004168DA6|
|Keri Wilson:|1643 17987 H|0004168C86|
|Darius Montgomery|0494 18694 H|000416920D|
|Keri Wilson|1643 17987 H|0004168C86|
|Spare|2403 21600 H|000616A8C0|
Darius is temporarly assigned to Keri, Darius resigned, his will be spare when returned.
NEW BADGES
|!Name|!VisualID|!Raw Data|
|Lonn Wilson|26225|000616CCE3|
|Tim Taylor|26226|000616CCE5|
|Zac Kamm|26227|000616CCE7|
|Garry Weston|26228|000616CCE9|
|Cos Callis|26229|000616CCEA|
|Leslie Sanchez|26230|000616CCEC|
|Brian Thornton|26231|000616CCEF|
|Josh Cline|26232|000616CCF1|
|Brent Soulek|26233|000616CCF2|
|Mike Bevins|26234|000616CCF4|
|Michael Williams|26235|000616CCF7|
|Steve Dickson|26236|000616CCF8|
|Kim Dietz|26237|000616CCFB|
|Lonny Wilson|26238|000616CCFD|
|Dan Metcalf|26239|000616CCFE|
|Bill Barnes|26240|000616CD00|
|Matthew Brimer|26241|000616CD0?|
|Rick Rentsch|26242|000616CD05|
|Shelley McGehee|26243|000616CD06|
|John Crumly|26244|000616CD09|
|Jerelyn Trumbo|26245|000616CD0A|
|Gaea Clonce|26246|000616CD0C|
|Annamarie Bomar|26247|000616CD0F|
|Melanie Maxwell|26248|000616CD11|
|Keri Wilson|26249|000616CD12|
|Phillip Gaines|26250|000616CD14|
|Barry Benson|26251|000616CD17|
|Nicole Bowdler|26252|000616CD18|
|Aaron Schaff|26253|000616CD1B|
|Jessica McQuinn|26254|000616CD1D|
|Teresa Sutton|26255|000616CD1E|
|Greg Greenlee|26256|000616CD21|
|John Jeffreys|26257|000616CD22|
|Bryan Hill|26258|000616CD24|
|Rita Jones|26259|000616CD27|
|Jeremy Rummel|26260|000616CD28|
|Jaron Jedlicka|26261|000616CD2B|
|Jeff Wallis|26262|000616CD2D|
|Aoulanda Ray|26263|000616CD2E|
|Ginger French|26264|000616CD30|
|David Eck|26265|000616CD33|
|SzuChu Enriquez|26266|000616CD35|
|Kating Khounkhouamdy|26267|000616CD36|
|Mark Livesay|26268|000616CD39|
|Devin Luxner|26269|000616CDA3|
|Angie George|26270|000616CD3C|
|Elizabeth Somrasmy|26271|000616CD3F|
|Terry Benson|26272|000616CD41|
|Chris Good|26273|000616CD42|
|Desireah Boutahri|26274|000616CD44|
|Spencer Parker|26275|000616CD47|
|Terra Cox|26276|000616CD48|
|Lindsey Colabello|26277|000616CD4B|
|Chris Le|26278|000616CD4D|
|Trey Wilson|26279|000616CD4E|
|Meleia Williamson|26280|000616CD50|
|Lorraine Couey|26281|000616CD53|
|Austin Bowdler|26282|000616CD55|
|Leslie Bellew|26283|000616CD56|
|Schuyler Pracht|26284|000616CD59|
|Aaron Bourne|26285|000616CD5A|
|Suzan Copeland|26286|000616CD5C|
|Jennifer Rogers|26287|000616CD5F|
|Jake Simpson|26288|000616CD60|
|Jahred Enriquez|26289|000616CD63|
|Libby Johnson|26290|000616CD65|
|Angela Rutledge|26291|000616CD66|
|Dennis Lowry|26292|000616CD69|
|Chris Cioli|26293|000616CD6A|
|Gabriel Sanchez|26294|000616CD6C|
|Raymond Salazar|26295|000616CD6F|
|Heather Clark2|26296|000616CD71|
|Jimmy Ewald|26297|000616CD72|
|Matthew Miller|26298|000616CD74|
||26299|000616CD77|
||26300|000616CD78|
||26301|000616CD7B|
||26302|000616CD7D|
||26303|000616CD7E|
||26304|000616CD81|
||26305|000616CD82|
||26306|000616CD84|
||26307|000616CD87|
||26308|000616CD88|
||26309|000616CD8B|
||26310|000616CD8D|
||26311|000616CD8E|
||26312|000616CD90|
||26313|000616CD93|
||26314|000616CD95|
||26315|000616CD96|
||26316|000616CD99|
||26317|000616CD9A|
||26318|000616CD9C|
||26319|000616CD9F|
||26320|000616CDA0|
||26321|000616CDA3|
||26322|000616CDA5|
||26323|000616CDA6|
||26324|000616CDA9|
||26325|000616CDAA|
||26326|000616CDAC|
||26327|000616CDAF|
||26328|000616CDB1|
||26329|000616CDB2|
||26330|000616CDB4|
||26331|000616CDB7|
||26332|000616CDB8|
||26333|000616CDBB|
||26334|000616CDBD|
||26335|000616CDBE|
||26336|000616CDC0|
||26337|000616CDC3|
||26338|000616CDC5|
||26339|000616CDC6|
||26340|000616CDC9|
||26341|000616CDCA|
||26342|000616CDCC|
||26343|000616CDCF|
||26344|000616CDD1|
||26345|000616CDD2|
||26346|000616CDD4|
||26347|000616CDD7|
||26348|000616CDD8|
||26349|000616CDDB|
||26350|000616CDDD|
||26351|000616CDDE|
||26352|000616CDE1|
||26353|000616CDE2|
||26354|000616CDE4|
||26355|000616CDE7|
||26356|000616CDE8|
||26357|000616CDEB|
||26358|000616CDED|
||26359|000616CDEE|
||26360|000616CDF0|
||26361|000616CDF3|
||26362|000616CDF5|
||26363|000616CDF6|
||26364|000616CDF9|
||26365|000616CDFA|
||26366|000616CDFC|
||26367|000616CDFF|
||26368|000616CE00|
||26369|000616CE03|
||26370|000616CE05|
||26371|000616CE06|
||26372|000616CE09|
||26373|000616CE0A|
||26374|000616CE0C|
||26375|000616CE0F|
||26376|000616CE11|
||26377|000616CE12|
||26378|000616CE14|
||26379|000616CE17|
||26380|000616CE18|
||26381|000616CE1B|
||26382|000616CE1D|
||26383|000616CE1E|
||26384|000616CE21|
||26385|000616CE22|
||26386|000616CE24|
||26387|000616CE27|
||26388|000616CE28|
||26389|000616CE2B|
||26390|000616CE2D|
||26391|000616CE2E|
||26392|000616CE30|
||26393|000616CE33|
||26394|000616CE35|
||26395|000616CE36|
||26396|000616CE39|
||26397|000616CE3A|
||26398|000616CE3C|
||26399|000616CE3F|
||26400|000616CE41|
||26401|000616CE42|
||26402|000616CE44|
||26403|000616CE47|
||26404|000616CE48|
||26405|000616CE4B|
||26406|000616CE4D|
||26407|000616CE4E|
||26408|000616CE5-|
||26409|000616CE53|
||26410|000616CE55|
||26411|000616CE56|
||26412|000616CE59|
||26413|000616CE5A|
||26414|000616CE5C|
||26415|000616CE5F|
||26416|000616CE60|
||26417|000616CE63|
||26418|000616CE65|
||26419|000616CE66|
||26420|000616CE69|
||26421|000616CE6A|
||26422|000616CE6C|
||26423|000616CE6F|
||26424|000616CE71|
"""
EXCHANGE
[[Message Tracking|http://technet.microsoft.com/en-us/library/bb124375(v=exchg.150).aspx]]
[[Troubleshooting Certificate Validation Errors|http://technet.microsoft.com/en-us/library/bb331963(v=exchg.140).aspx]]
[[Exchange 2013 Mail Flow (MSExchange.org by Nuno Mota)|http://msexchange.org/articles-tutorials/exchange-server-2013/planning-architecture/exchange-2013-mail-flow-part1.html]]
[[Exchange Server Fourms|http://social.technet.microsoft.com/Forums/en-US/category/exchangeserver]]
[[Troubleshoot Exchange Cert issues| https://community.spiceworks.com/topic/979320-certificate-error-when-launching-outlook-2013-with-on-site-exchange-2013?started_from=new_topic]]
[[Configuring Exchange for DAG Certs| http://exchangeserverpro.com/avoiding-exchange-2013-server-names-ssl-certificates/]]
[[Ethpad Free Public Shared notepad|https://etherpad.mozilla.org/]]
[[FreeConferencecall.com|http://www.freeconferencecall.com/wall/401825030]]
[[Free online books|http://www.it-ebooks.info]]
[[MSDN Login|https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=12&ct=1398431449&rver=6.0.5276.0&wp=MCLBI&wlcxt=MSDN%24MSDN%24MSDN&wreply=http%3a%2f%2fmsdn.microsoft.com%2fen-US%2fdn308572&lc=1033&id=254354&mkt=en-US]]
[[Microsoft Virtual Academy Login|https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=12&ct=1397840329&rver=6.2.6289.0&wp=MBI&wreply=https:%2F%2Frps-mlxprod.microsoft.com:443%2FRpsSts%2FLogOn%3Fwa%3Dwsignin1.0%26wtrealm%3Dhttps%253a%252f%252fmlxprod.accesscontrol.windows.net%252f%26wreply%3Dhttps%253a%252f%252fmlxprod.accesscontrol.windows.net%252fv2%252fwsfederation%26wctx%3DcHI9d3NmZWRlcmF0aW9uJnJtPWh0dHBzJTNhJTJmJTJmd3d3Lm1pY3Jvc29mdHZpcnR1YWxhY2FkZW15LmNvbSUyZkF1dGhlbnRpY2F0aW9uSGFuZGxlci5hc3B4JnJ5PWh0dHBzJTNhJTJmJTJmd3d3Lm1pY3Jvc29mdHZpcnR1YWxhY2FkZW15LmNvbSUyZkF1dGhlbnRpY2F0aW9uSGFuZGxlci5hc3B4JmN4PQ2&lc=1033&id=291113]]
[[IP Address Share|\\ppok.com\fs\IT\NETWORK AND SYSTEMS\SDICKSON\FILES\2014 Planning]]
[[Robert Half Skillsport|https://roberthalf.skillport.com/skillportfe/login.action]]
[[Robert Half Time Sheet Login|https://authorize.roberthalftechnology.com/login/login.htm]] UserName TTaylor01
[[W 3 Online Tutorials|http://www.w3schools.com/]]
[[download link for the 10X rule|https://www.grantcardone.com/?download_file=6386&order=order_53f3c24dd025f&email=timtaylor.ok@gmail.com&key=f9993fe376d2b2558df7985565560ce4]]
[[Share link for The 10X Rule|https://drive.google.com/file/d/0B21yMkWnk6YAcFRwOGZtYmczQ1k/edit?usp=sharing]]
[[NZBDrone|http://timwtaylor.ddns.net:8090/]]
[[SAB|http://timwtaylor.ddns.net:8080]]
[[Couch Potato|http://timwtaylor.ddns.net:5050/wizard/]]
[[Plex TV|http://plex.tv/web/app]]
[[Search1|http://www.rlslog.net]]
[[Search2|http://sceper.ws]]
[[Search3|http://www.scnsrc.me]]\
[[Linuxtv.wiki|http://linuxtv.org/wiki/index.php/Main_Page]]
[[TVHeadend|https://tvheadend.org/]]
[[XBMC DVR|http://wiki.xbmc.org/index.php?title=Tvheadend_PVR]]
[[to watch|https://www.youtube.com/watch?v=g_0NmNvgP80]]
[[NZB Lists|https://www.nzb-rss.com]]
[[NZB TV|http://www.nzbtvseeker.com/]]
[[USNET-Crawler|https://www.usenet-crawler.com]]
[[CS50|https://x.cs50.net/2014/instructions]]
[[CS50 Reddit|http://www.reddit.com/r/cs50]]
[[Scratch|http://scratch.mit.edu/]]
To prevent this, before starting the edits, go to Clocks and edit each clock to set it to Inactive. Edit or create all of the employees, then edit the clocks to set them back to Active, and use the Clock Utility to update all of the badge numbers on the clocks at once.
The badges do not need to be registered on the clocks directly. If they are enrolled on the clock directly, but do not match up with an employee in the database, you will get a message each time you communicate with the clock asking you to delete them from the clock. Instead, they should just be entered in the software, then pushed out to the clock.
On the Clock Utility screen, all of the active clocks will need to have the Download box checked, or the Next button will not activate.
Go to Total Console
Go to Services for CRPCTX02
Restart the print spooler.
NET Micro Framework Porting Kit v3.0
C64GF-QGX43-2PMM3-KFGKM-Q66PR
Access 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Access 2007
KTVYK-QPGC7-9XK3X-YDXW8-D99Q8
CBPXJ-JXH6G-73FY9-8DHB7-MDMMJ
GW2RK-BDTWV-KR97B-WDGCY-PHWVW
JCF9B-D33B2-474J2-2H8XV-7GFBJ
M92RY-7H4JC-Q32BF-GH426-TDR7W
DTG2J-BM8CP-PMQ6V-86MFC-3VKQ8
PVPDW-VVPMD-6HRR4-HHWK6-M73D8
RQXQX-GXB7Y-DCJ2R-X6BRM-R84BJ
J9VQC-PJHBG-YR8XF-D4KV7-8YQD8
WP4BK-7FJF2-JBHVH-9739P-PBQD8
Access 2010
2TPWG-26RHR-FQKK7-6KJ47-CGGTV
YTG67-723PQ-GFD72-QJGYJ-Y949Y
2VBX9-QJDFD-2W6GR-CBPF7-36VHQ
MJP7R-94XTM-2CVJM-4RT63-PG9VQ
GB43K-GYRWH-RWHXQ-GWQMV-FWQH6
6JYFM-VYX4B-QDT6P-D3JKG-CC4GY
BBRQM-8WDBJ-WV9F2-9D9MQ-YD8HD
BTP6V-YQWMK-DRYGV-QV4TC-WMC3H
PRM2T-BW2VM-VMYGW-KTD39-G3392
BDK3K-3RQ26-6F2DF-KX3C3-MTT3G
Access 2003 Developer Extensions
KHCYK-2DXWD-6D4BV-9D9K6-TT9RY
Forefront Threat Management Gateway 2010
No key is required for this product.
Automatic Graph Layout
HWQWP-RXKVP-PJ4BB-9KD87-K67H2
Commerce Server 2002
QJY77-8G8BD-3FYFQ-FDFH3-4RDCP
CRM 2011 Server Edition
36D7J-FR6QG-JXPF6-H449P-2P6RR
CRM 2011 Workgroup Server Edition
73B26-GWVRK-GDX7X-MDQBX-DH28R
Dynamics CRM Server 2013
724KN-KQH62-J92M4-PWQCQ-H2XWH
Dynamics CRM Workgroup Server 2013
NVGJW-9BF9K-6CPKP-KFWM8-XWYR2
CRM 3.0 Professional Edition
D2Q47-3K4QX-FPVDT-P4QT6-3C8H8
CRM 3.0 Small Business Edition
TD7BB-D2H87-27KJH-VMH3P-QTQYW
CRM 4.0 Enterprise Edition
WQWYD-FHH7F-XQPCK-2B8KG-D6VT3
CRM 4.0 Professional Edition
KRJQ8-RQ822-YRMXF-6TTXC-HD2VM
CRM 4.0 Workgroup Edition
PYKPH-VKGGM-QC2QT-T9HYM-B7F4B
Point of Sale
WHQMR-QFK4X-634RJ-97V89-H9QH8
V4M78-68KD6-9G2B9-KWR66-HR678
W7J6G-VHYJX-JBKB2-TMH42-QGKV8
B99TX-PYVC2-4FJB8-VPWKK-H6GBW
Q4XPV-6MR8Q-2X9X4-9PB2G-7D6BW
KMHJV-9JXH3-KVGTV-6M8QB-C89V8
BPMPP-QTDM4-CVDD9-T42TY-2MKV8
XBCPF-WGT74-PRGYC-Y6C43-P4V4J
DH4K7-3HFC8-KQ32G-7BWGT-YF678
JFDHW-HK7YP-BYFKW-H2H3J-BCCMW
eMbedded Visual C++ 4.0
B222J-QW36D-DPT6T-JYKPF-YB7CM
Exchange Server 2007 Enterprise Edition
PYYMB-HQQMQ-3TBM2-XJ99F-83XVM
Exchange Server 2007 Standard Edition
W3MX6-2WXMD-QB887-4WGPK-VPVDY
Exchange Server 2010 Enterprise Edition
GVMTV-GMXWH-C234M-8FMWP-TFPFP
Exchange Server 2010 Standard Edition
XJG6B-4D4YV-4M338-Q42H6-39VT2
Exchange Server 2013 Enterprise
MV2FQ-2MVJD-WK2VK-CB8XP-3Q2D9
Exchange Server 2013 Standard
CPJFG-C9D94-J7F4K-T9Q48-FWKP7
Expression Web 1
XB8WR-CWH7T-MXH7J-CKWPH-MMYXG
Expression Blend 1
42XVR-43TCK-QFXGX-TG3P6-HVPYB
Expression Studio 1
B7QRP-P7W7G-QY689-R7DCB-4BGH4
Expression Studio 4 Premium (MSDN)
VQ7JH-R6PTK-XG733-JV6QP-7QFBY
Expression Studio 4 Ultimate (MSDN)
MVYV4-D68MJ-YRGY2-XRGJR-FRBFG
Forefront Protection 2010 for Exchange Server
D7TBP-2XXYM-6J8VX-HDJ7T-XWPVB
Forefront Protection 2010 for SharePoint
RC8TG-2B7C6-7KMYG-HF4GB-GTTGT
Forefront Security for Exchange Server with Service Pack
KR3XK-WH7WW-CDXWP-HWH6F-CQM73
Forefront Security for SharePoint with Service Pack
J2FHF-KBP2F-9PD6V-W964X-48HMQ
Forefront Security for Office Communications Server
G7FRC-CM32Y-TW3YF-KBKX2-F2B73
Forefront Threat Management Gateway 2010
No key is required for this product.
FrontPage Professional 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Groove Server 2007
R4X9H-MP2C6-CV2FX-QGPKY-93RPG
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Groove 2007 (For Use with MSDN Media)
P3PHX-9QF6H-7868V-49QCV-QW8VG
FP2YG-JTYG4-DYDC6-MWTWX-FYQDT
Groove 2007
HVH3T-MVFFG-3D9J3-W662H-6P3D8
CMKQQ-2TPF8-MKBYP-CWQTM-34PHW
HKGTG-8D78D-2X2F7-YJWC2-8VBMJ
Groove Server 2007
R4X9H-MP2C6-CV2FX-QGPKY-93RPG
Groove 2007 (For Use with MSDN Media)
P3PHX-9QF6H-7868V-49QCV-QW8VG
FP2YG-JTYG4-DYDC6-MWTWX-FYQDT
Groove 2007
HVH3T-MVFFG-3D9J3-W662H-6P3D8
CMKQQ-2TPF8-MKBYP-CWQTM-34PHW
HKGTG-8D78D-2X2F7-YJWC2-8VBMJ
Identity Lifecycle Manager 2007
DFHYB-2J4Y3-JHV7Q-T42FD-T9MQY
InfoPath 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
InterConnect 2004
C74GK-XJDWG-F7FKM-66P26-F3JTB
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
InterConnect 2007 (For Use with MSDN Media)
T83HH-JC8CR-P622Y-8Q28D-XY63T
MDGJQ-2HFXB-PHJX2-3HVDX-7FDDT
VBJKD-6W9J8-92C2R-9M8XT-QJMK6
InterConnect 2007
DDVJT-YB3R2-YBYHV-2X738-72WVW
MTFWB-C69H6-7PDVV-3M476-7C3D8
MP9P6-7RYM4-4YJRM-XCHG2-GP7YJ
GP23F-76XRT-B8YP6-3TWYK-WMJVW
RVT4K-8XKRD-Y7RTM-Q8GG6-DWXQ8
Mobile Information 2001 Server
TJC3M-87BJ7-TCGTJ-3PDXD-4DV3Y
Office 2003 Proofing Tools
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Office Professional Enterprise and Standard Edition 2003
PWMY9-DVQ26-KFKXB-RVTH3-7GPMG
Office Professional Plus 2007
WYYYK-6QCRJ-D39GB-8QJXB-RRDD6
JRFYC-XDC9Y-HFGQK-YXG8M-62BMG
TF9DY-MC77G-DMFTM-CJF9J-YPKQ6
DMDGJ-6X4T6-XGD8V-4KM3Y-M99Q6
FY9GX-JW9DQ-W4JTK-29J8H-MDG36
JJDKF-XRCF9-T6K3R-HY4WT-9TQD6
V9P9C-FR4Y3-VHJ2G-79HJG-XPWVT
JDPVR-2Y77X-8B248-GRXKQ-YC3D6
XVWKB-V72QF-VVY6K-6MW6K-DJMMG
KXCDK-2BRHP-MVQGY-JXCJ9-BKHYG
Office Ultimate 2007
V3WMQ-V4BM7-HPDB6-BPKH3-RGJVT
K7KH7-B9PFG-CTCQH-9F37B-RV3D6
BTT8F-R334F-7VQC4-96V9T-F99Q6
R6JV2-PCHHF-3DCRM-GR9MP-8XT36
P3JMC-MBJYX-28PTT-YFBWM-Y4HYG
GBHCK-CTTMV-23JMR-VDQKV-XQMMG
RT842-3THJR-DTWB3-HTTH8-DQ8VT
Q6CV8-GX3C2-K4CXX-F7G4C-WJG36
CW248-XWGP8-7X827-RYGH4-W6636
VTQ7Q-MVH9M-Y9B3J-VRTRJ-V2KQ6
Office 2007 Suites
HVMTC-YDFYQ-GVT49-6BBXH-6MDRJ
Office Enterprise 2007
BRQGW-XW8J7-XYMPP-BH46Y-YTQD6
JCYGV-CR3FC-W4VBJ-HVXJ7-4KDD6
G3T6M-3FKQB-M6MCG-D4YRD-76JVT
GQYRQ-Q74G8-69MQX-7HWV9-7C3D6
TBRJF-6XH9D-7D889-W4MH3-7YJVT
PKHJQ-87J78-8TRBQ-HQWMQ-M2F7T
HTBKG-JBJ3V-QMJX6-9889Q-KBFBG
G4FGG-2D4WV-4D742-B8MQP-7J4BG
GQDCJ-6HJ48-DK2YR-472K4-38CHT
G9T36-J2K8P-7Y66H-42PFF-YJ8VT
Office Standard 2007
VBG8X-XQVRT-G2XBX-3K3R9-4FT36
FQGBF-J7RQQ-VPJ2P-QV86W-3CBMG
V7J8M-8VWCR-BDJGC-8C6HD-87WVT
V6CC9-XDVMT-X9V7X-DBB7P-YK47T
BRK7V-R86G4-T3VC6-V4V8T-GRPHT
G2V2X-G7TCG-TTQKF-46X6C-DJG36
RHV9J-VHBTY-Q73V2-YMKFQ-4XT36
DRQB9-FF3Q6-4TCG6-BB29G-6R9Q6
WKFF9-XTCTQ-BCJRG-CYH96-6CF7T
DYQGJ-XQGWF-8XBHR-R82J7-WDCHT
Office Professional 2007
KXJTX-HDJJB-RK37X-M9XPB-HGQD6
P94K3-RFGF9-VBC92-MH8YB-V4PHT
HH8D8-V7RFY-2VBP2-H3MWX-9RT36
MQH8X-8PR8J-MCK43-7WKYJ-B2F7T
M3FQ8-782CY-D8TK2-KW7CW-JWR7T
W2CYJ-PWFCW-2YXXM-3BPMP-F8R7T
HFYQX-38T9K-FVG3G-YW9D7-CJ4BG
DJHRV-X6QQJ-HC6B7-JWPXD-CCWVT
VX9C9-Q6982-Q4M9V-WDDW6-6HRBG
TFKV4-9K3CT-KFFRT-W3MBB-72WVT
Office Professional Plus 2010
2KY8Q-PGV3X-DYY66-HWHVW-RXF8K
RJ22V-CRQPY-34X6D-JG8VX-6W64X
KHBBV-GTM9M-FMD3J-XB98D-TBK9G
7YDKD-G9QT4-22FCV-QJGD2-FH38J
8XHJK-4PMPR-Y66B3-HDFQM-FPXFB
FB3JM-K789M-GCJJF-R78K3-B9YKX
TJPHQ-W4M69-VD289-Q44PP-V8G6T
7XHJM-BP7Q2-GQ7P2-BRTXB-7KRK4
6PTCW-VV49B-BVBFT-FHJCD-JFVWF
YJY4C-8WX6K-346D6-849P3-DPTX3
Terminal Service enablement for Office 2010
6CGQT-MQGXG-4VTQR-D3BMP-HPB62
Office Standard 2010
Q7DX2-4MXRV-PP6VD-R447J-4RYR9
2T49B-JXC8M-JQYM9-QJ47Q-RR9MH
77GHV-4TYRJ-74VGQ-V9HCW-JQXFB
6QC7W-VYVC8-Q9HHX-6GWV7-GK998
7TWBM-926Y3-GY8GT-6C6DH-978VT
26GXC-9YMGP-63898-FGRVJ-42Q69
FHBHF-G72JQ-QTHQJ-WDDDP-XXY3W
PQ3X9-VWDB9-HFVFJ-DJDJT-X82YW
MFKQ8-YP6PR-M848D-HM3F8-44GJB
PTX8C-7BF97-C672Q-68M77-JGPJK
Office Pro Plus 2013
YMHP3-FNJTG-P9MGM-RXVBW-29VTX
NXPF9-JM6Q2-WHHC4-4B7PP-GQ429
Y9JF3-VNB4P-D42XK-Y62M4-MWPC9
W7NMY-YR9WV-4YK6H-WXJ74-K4P9K
GNMFF-8378G-3DK38-YVPVG-KTKKK
Legacy 10-digit product key
335-3353356
Office for Mac 2011 Home and Business
FB3XD-TKTKW-2Y32W-JKJJ6-HFT6J
2YP3T-FV9WW-RWDPP-RFXXV-PCK42
VYQCV-W9Q82-D29MB-JWPM9-KTHF8
82FD9-HCBP9-8CB9Y-PQFR4-YJDMC
HQTWT-KKM8F-3F43K-VXH4B-Q9PCF
Forms Server 2007
K76FH-Y2JHK-9BGCR-37KPR-4Y6JQ
Office Web Apps 2010
7MXKC-26TBD-D6GJ6-GCGCK-4C9TF
Office Web Apps 2013
4N6BG-CC9Q8-J7QKG-G33T7-CYQ8Y
Office XP Professional
JPXQJ-3G77T-382KW-TBR66-33GVT
OneNote 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
OneNote 2007 (For Use with MSDN Media)
KPW3V-6347X-X2XHQ-FBYK2-96VX6
OneNote 2007
R4Y9R-CQFJD-84BRC-VD62C-G3R7W
RH77R-GRMFW-WRTWQ-QQJFV-4PWVW
FH4FP-T2CDK-M6KJW-9T4Q3-6HRBJ
XC67F-M686H-CBQRV-8MH87-8P3D8
H9R7T-RRDX4-7KFCM-7B7KY-7DG38
T7XX2-KVDCR-PX9FQ-DWTFJ-XGQD8
GC9H3-M7QCT-MWP44-FX9MH-KYVYJ
D4669-66RXG-MPRTP-46GB4-3QXQ8
OneNote 2010
FBQ9B-HMY79-JCY9K-9WB4X-7P9GH
Outlook 2003
XBVJD-YCCYR-7DF28-JH2PX-MYT7M
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Outlook 2007
V74F4-KYHJV-4RCTD-HPF9D-CVKQ8
Outlook 2010
MFK86-P3CDH-CFWYW-BPR6T-D8B2F
Point of Sale
WHQMR-QFK4X-634RJ-97V89-H9QH8
V4M78-68KD6-9G2B9-KWR66-HR678
W7J6G-VHYJX-JBKB2-TMH42-QGKV8
B99TX-PYVC2-4FJB8-VPWKK-H6GBW
Q4XPV-6MR8Q-2X9X4-9PB2G-7D6BW
KMHJV-9JXH3-KVGTV-6M8QB-C89V8
BPMPP-QTDM4-CVDD9-T42TY-2MKV8
XBCPF-WGT74-PRGYC-Y6C43-P4V4J
DH4K7-3HFC8-KQ32G-7BWGT-YF678
JFDHW-HK7YP-BYFKW-H2H3J-BCCMW
Project Professional 2002
XVQYT-BP63J-DM3P2-KBC3T-4MFWW
Project Standard 2002
XVQYT-BP63J-DM3P2-KBC3T-4MFWW
Project Server 2002
DKW82-GW3MB-3FXYB-3Q33C-28M9D
Project Professional 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Project Standard 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Project Server 2003
J9XY6-9VW4K-QVFQH-7BWRP-64KPM
Project Standard 2007
VQHHC-72DYM-KVX9X-76FMY-VQG38
D72GD-JQ9V3-4Y3HJ-JJ488-373D8
JR2DJ-C4X4T-CBHWV-3VQY4-C8R7W
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Project Professional 2007
KVGQ9-MMD48-P77PM-J2FTT-2VRBJ
GC7DG-YDKKH-P9KMB-TJJGB-GPBMJ
PYJY2-PB78C-BPRGG-C3TDP-VHBMJ
Project Standard 2010
87MH7-6896Q-DC7RY-DCJ7J-4F4WH
YHC6Q-HF9CM-VVXT2-P9JM2-2F2Q3
W6RYG-24HX6-BFCG8-G3FPX-GM3BR
86CKB-WR2T4-PWJ2D-GFY8M-W94JK
W64M6-4HGJ4-PQJX7-7DG8W-YCWYP
Project Professional 2010
YDK7F-TVT92-2GCQY-H3RT6-862RB
TP97W-4YHHB-BCGQM-WVRC6-KR3GD
TH8DM-HP7K8-2DQDX-W7RW3-VKPRC
4FPHV-QPW39-D7RFK-XCXC3-FBGV8
HRBMW-2J6DR-6M7K8-PQ83V-XJVMB
Project Professional 2013
XYMNH-YQVTT-VBY6T-YX6GT-3V34X
QF7VN-D4WF4-VP6K4-GHCFR-W8C8K
CFN7Y-T7D4B-J29GW-8D3QD-489JK
TGGVP-DNGRF-PRGGP-6H8YP-MPXJK
XFTM2-PKNYQ-7TVW9-FWV2P-GQ4Y9
Project Portfolio Server 2007
QRPKT-683CC-MJ9VJ-FHBCC-HYKGD
Project Server 2007
GM27X-X6X37-T69MH-98J3Q-44TKG
Project Server 2010
GVW7M-WFRY6-QRGWM-QV97D-JP6XT
Project Server 2013
2P6G3-NPR4G-3XKF4-J7J4M-RCXJ2
Publisher 2002
XVQYT-BP63J-DM3P2-KBC3T-4MFWW
Publisher 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Publisher 2007
PXMRX-DVCGC-KQ6V6-WMHFR-VF47W
V4KY9-TH9JM-4MVW7-WG2C4-CFDD8
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Publisher 2010
W6HJF-FFTD2-4XGKX-K99RV-4XTC7
Q9YYW-P7M36-GYVG2-VKBWY-9CXV8
PRXQ3-C8DCY-XQBPY-YY462-PV7JX
74BHQ-W3TMC-2MXB4-4F3RC-84Y7V
GK3RG-CQ7XK-9R3BK-WXJDQ-C44XH
H4P87-9KFXG-442C6-PBVG9-JT3G3
TFKGT-3PDT6-B7FCD-F2VMW-9KDBW
Q497R-T3PVB-P2KWC-J6P7W-V4FGQ
W39PH-HHDG7-DVPJK-HCX64-H2PD9
FHP4J-B9XWB-XDM6P-GWM3K-HW8H6
Search Server 2008
P87VV-Q34RV-GW2HT-JVXWV-3VFPM
Search Server 2010
BH4DW-G4KWP-GRQG8-F226F-TXDH9
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
SharePoint Designer 2007
BXVFC-J4V3H-9HRGH-VCQ6C-2TVYJ
CJQ44-MM6YV-F4D2G-8T3YB-WFDD8
D276H-8VT3H-GX846-DC34K-2HRBJ
SharePoint Portal Server 2001
KRJQ8-RQ822-YRMXF-6TTXC-HD2VM
SharePoint Server 2007 Enterprise Edition
F6YVR-4XY7K-RCVY4-37FBK-G44PY
SharePoint Server 2007 Standard Edition
WFF2P-M8XYH-3B33C-6KPP9-XVQTG
SharePoint Server 2007 for Search Enterprise Edition
P87VV-Q34RV-GW2HT-JVXWV-3VFPM
SharePoint Server 2007 for Search Standard Edition
MYBJH-6YGQQ-6WW3C-FGM3V-YY6JW
SharePoint Server 2010, Enterprise
6VCWT-QBQVD-HG7KD-8BW8C-PBX7T
SharePoint Server 2010, Standard
HQ937-PP69X-8K3KR-VYY2F-RPHB3
SharePoint Server 2013 Standard
WB7H4-3N8DH-DBCT6-9MQWM-R6WFK
SharePoint Server 2013 Enterprise
N3MDM-DXR3H-JD7QH-QKKCR-BY2Y7
SharePoint Workspace 2010
YH7YF-FM8R2-9GJCD-6M9B7-M7D93
BXMGY-PC76F-VM3FC-KVRPH-XH7P6
J9JBK-7Y4H7-2P3JW-YJVTC-8KXY3
MVJ6W-GRQH2-YD7HD-CV7M3-M3VVJ
TFBTH-3YQBW-G79TM-HC7M8-VRVJJ
Small Business Financials
Small Business Financials 9.0
Registered company name Two, Inc.
Version 9.00
Concurrent users 5
Employee count 10
Business Portal count 0
Customer/Vendor count 0
Operating system Windows NT/2000/XP
Platform Intel
Database SQL
Modules Financial Suite, Fixed Asset Management, Payroll with Direct Deposit
Small Business Financials 9.0 Registration keys
6Y1ZE8FN0AQ83HMDUUY4QY6
72PACTXVE
Small Business Server 2003 R2
RDFXJ-6WP8T-XMH86-CYRP4-HH9Q3
CHTTJ-3BXC9-8C3JG-CJFK9-9DQD3
J3HYW-KFCW3-GR7BP-T9MMX-2QFBD
TFHTC-8YYGM-4TMCD-W3RJX-B2PHQ
QKFV4-XKTBP-JWXXH-G4BRK-QDQD3
HY4QC-WTF9F-DKYXK-KTWYK-7G4BD
HFDYJ-4WD9T-63Q9Y-6BCJ2-9MR7Q
CHYQP-W32PW-86KVQ-WYY74-WDVYD
V9BDR-HDYXR-JBR9G-KHDWT-XH9Q3
HCVDR-HMJYT-62HCR-4W7TQ-3PT33
SQL Server 2000 Reporting Services
KRJQ8-RQ822-YRMXF-6TTXC-HD2VM
System Center 2012
BXH69-M62YX-QQD6R-3GPWX-8WMFY
System Center 2012
BXH69-M62YX-QQD6R-3GPWX-8WMFY
Virtual PC for Mac 7.0
KPKV3-V9R8X-QMTGH-YXTCG-8P6HM
Virtual Server 2005 Standard Edition
JRH7Y-QT37X-Q4H87-WWDGC-6BRMT
MWT6W-7KKP2-YQGTR-R9YVG-D63RG
CDKXM-VRM2M-23MTM-D7B3D-T2HFG
BDWRG-V3DY9-XPBM6-M9WWF-WW94G
B2G37-4YJ4B-XY9CW-RBR6X-X6W76
PPFTB-QQKQD-JY6HH-W8H7J-GGRMT
HK7H2-83B3F-KV8VF-4FYGY-X97FG
BQYDP-8V7V3-KBRK2-DR2PX-GKJ76
C2V2C-TR6XM-686K6-37Q9T-72MYT
FJV32-RXXT4-CM2TY-RXRW6-KGGDB
Visio Professional 2002
VKXMY-3XWC2-FCGGQ-2WD2G-P6WJT
Visio Professional 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Visio Standard 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Visio Standard 2007
G94QC-QT78Q-Q3R3B-RHQQB-C447W
T4CDQ-VJK4K-4VRK6-34FVQ-KGFBJ
MHYBQ-M34HV-BP67R-RPPB6-RCF7W
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Visio Professional 2007
WG4K8-HV38M-V2MRX-TKQ9W-6T638
C6B3Q-RRH6T-QWVCF-87PH4-7J8VW
QCPDC-RKKWT-F8Q7X-DHJRQ-TP7YJ
Visio Standard 2010
388D2-4TWKX-YYJCM-6KDYG-MRT7R
GBMQV-WK2G9-QRT82-JGHBR-K6DM4
YFD3P-HPW3Y-TPB2B-824B7-K9P7J
J4RCW-HFQDM-MVP6M-JDBHT-XD247
84RR6-YCWBF-V6FMC-9YVKK-9292D
Visio Premium 2010
GVFBK-F632F-V7TY3-C2B4Q-4GGKX
MVPBK-6VTJJ-7MQ4C-DJDWQ-2RH4Q
V7F2X-X7J23-TYRG7-T2FTW-GMW9G
6T7C6-YBGY4-T3QTW-CBB4M-MQR9M
4DCT6-474RW-6H863-PDWRW-M4DMG
Visio Professional 2010
R9QD3-D62WY-DXCD4-3KQK8-V4TQ7
RG2GH-86MJW-QJVHT-R3D2R-YPTWT
C8P49-M6HPF-H6FPH-8Y3YP-HXX9M
YTTYJ-BYX4H-3FQPP-RHWVM-MFHFT
Q6R26-7H67B-TV7KY-J3QW8-Y6FFJ
Visio Professional 2013
NGFVM-2VMTB-CVKQV-GGYVY-43HV3
3V924-GHND6-BRQHG-K3W6Q-PYQ73
7DNM4-H3GYD-F6QYJ-DW3D2-2DHV3
2NFPH-22XBM-3DF8V-GY623-PYQ73
8NQGQ-DCMD2-FH8KV-7XYDG-J2MH3
Visual Basic .NET 2003
W7YCJ-2RRMD-MMHGG-3MB7C-VBMYB
Legacy 10-digit product key
335-3353356
Legacy 10-digit product key
335-3353356
Visual FoxPro (Version 7.0 and 8.0)
TCJC7-H2QDH-3T7G7-R6RTM-YRK3Y
Visual FoxPro (Version 7.0 and 8.0)
TCJC7-H2QDH-3T7G7-R6RTM-YRK3Y
Visual FoxPro Professional 9.0
W7YCJ-2RRMD-MMHGG-3MB7C-VBMYB
Visual SourceSafe 2005
QCT3X-2D7KK-RTCPQ-GTRFK-46FWG
Visual SourceSafe 6.0
335-3353356
Visual Studio Team System 2008 Team Foundation Server Trial
G99X8-DQ7VF-DVDXY-YH3PB-CTGR6
DreamSpark subscribers are entitled to upgrade Visual Studio Team System 2008 Team Foundation Server Trial to the full edition.
Visual Studio 2010 Professional
YCFHQ-9DWCY-DKV88-T2TMH-G7BHP
Visual Studio 2010 Premium
YCFHQ-9DWCY-DKV88-T2TMH-G7BHP
Visual Studio 2010 Ultimate
YCFHQ-9DWCY-DKV88-T2TMH-G7BHP
Visual Studio Test Professional 2010
DYCF9-QQPCD-Q6GKP-WXYW3-GV2DH
Visual Studio Team Foundation Server 2010
P2K4R-VPKVK-TKH4B-TRT6V-DW2GX
Visual Studio Team Explorer Everywhere 2010
7W3RJ-4WX3R-BV8JM-FC8P7-3W7QX
Visual Studio Load Test Virtual User Pack 2010
QXW73-TJYPQ-BXKFH-DX4VV-P32WV
Visual Studio Express 2012 for Windows Desktop
YDF6K-W7M6M-WT2G4-R474C-Y8CQF
Visual Studio Express 2012 for Web
BWVK8-FD442-K2GCM-98B84-J8WRV
Visual Studio Express 2012 for Windows 8
YCX46-9PQR6-YKMC9-2B8KQ-6CDHX
Visual Studio Premium 2012
MH2FR-BC9R2-84433-47M63-KQVWC
Visual Studio Professional 2012
4D974-9QX42-9Y43G-YJ7JG-JDYBP
Visual Studio Team Foundation Server 2012
BVGTF-T7MVR-TP46H-9Q97G-XBXRB
Visual Studio Team Foundation Server Express 2012
7PDGX-K8G48-99T9W-BDRH2-BG2XK
Visual Studio Test Professional 2012
RDJM7-KYC8W-QR8P9-HWKB6-JGD2M
Visual Studio Ultimate 2012
RBCXF-CVBGR-382MK-DFHJ4-C69G8
Visual Studio Team Foundation Server 2012
BVGTF-T7MVR-TP46H-9Q97G-XBXRB
Visual Studio Team Foundation Server Express 2012
7PDGX-K8G48-99T9W-BDRH2-BG2XK
Visual Studio Team Foundation Server 2012
BVGTF-T7MVR-TP46H-9Q97G-XBXRB
Visual Studio Team Foundation Server Express 2012
7PDGX-K8G48-99T9W-BDRH2-BG2XK
Visual Studio Team Foundation Server 2012
BVGTF-T7MVR-TP46H-9Q97G-XBXRB
Visual Studio Team Foundation Server Express 2012
7PDGX-K8G48-99T9W-BDRH2-BG2XK
Visual Studio Ultimate 2013 (VL)
YDJWM-3WVQ7-JXMKW-DTHV3-2KXPG
Visual Studio Professional 2013 (VL)
BBJ4B-WBV7Q-DFHJG-G97DD-GXXKR
Visual Studio Premium 2013 (VL)
FBJVC-3CMTX-D8DVP-RTQCT-92494
Visual Studio Test Professional 2013 (VL)
MVYJD-FM4GJ-HVRDK-92HMB-XG3J8
Visual Studio Team Foundation Server 2013 (VL)
MHG9J-HHHX9-WWPQP-D8T7H-7KCQG
Visual Studio Ultimate 2013 (VL)
YDJWM-3WVQ7-JXMKW-DTHV3-2KXPG
Visual Studio Professional 2013 (VL)
BBJ4B-WBV7Q-DFHJG-G97DD-GXXKR
Visual Studio Premium 2013 (VL)
FBJVC-3CMTX-D8DVP-RTQCT-92494
Visual Studio Team Foundation Server 2013 (VL)
MHG9J-HHHX9-WWPQP-D8T7H-7KCQG
Visual Studio 2010 Professional
YCFHQ-9DWCY-DKV88-T2TMH-G7BHP
Visual Studio .NET
D64GG-GXY6T-V6FTR-WCPBB-2YDYB
Windows 7 Ultimate and Ultimate K
GQBK3-G79VK-WVDPW-RVJYD-T4CDT
Windows 7 Professional and Professional K
2MH27-W8XQ6-HBH3Q-QHK3R-G22KW
4F8XB-664R7-HF3VW-HXV3W-8WHQJ
W8F9V-H7C94-VJBKM-JRJGW-KG739
7TTVW-XWFB9-W9K8C-C9J4D-88HBM
FF78B-YXTDY-XM3YW-G9YB3-PRWWT
Windows 7 Home Premium and Home Premium K
24GXP-K7P6F-PMG6W-PPWXP-9VYYG
V4Y7C-PMHMX-2W6X2-27Q7B-TH86D
GKVHK-6QCVH-D6FVR-XTWTC-H97MR
D788T-64H97-6CFVJ-Q4RMV-2VQDR
GHHB4-K2T6M-RFRPR-J87BX-GXWW6
KG2QC-9H329-P89DT-MTRMY-4822F
MCFP9-HXV6W-H979R-F6KJP-G4BCV
C8Q23-G7HK9-MXJTW-P4KMT-GQVVG
MQKHP-KHMWD-F8BMY-DRPWQ-TGRR7
W42TM-9MRXB-49P6B-3YG3M-HFFF2
Windows 7 Home Basic
TQ7K7-Y8VMQ-89Q4D-9G4QX-9YGBF
26YMB-HMQCQ-V334D-BKDR7-XXHYT
CRK49-BWRB7-W4WYC-DKTHR-7B36C
4GQ3K-YCFWR-PHQVT-26TX4-J94WC
KGBXC-TF7RR-J96WG-M2WMQ-639YC
Windows 7 Enterprise, N, K, and KN
6RY38-X8Q6K-YFHV4-J8QCT-3C3HY
Windows 7 Home Basic with Service Pack 1
T-GQXCP-V7DFW-Y7V3F-HD4TQ
F-K8GM3-BWG8G-BF8JT-K2G4C
D-TRB6T-B6FFB-TFM9R-234F3
-K7PTH-DM249-F22YP-VG74M
D-9VDYJ-W96TH-3YGJT-M3BTX
Windows 7 Home Premium and Home Premium K with Service Pack 1
H-F6PW7-XWTMR-BQ7MW-2R2WR
9-F2KCX-HRTDV-HRB4W-C4QC8
Windows 7 Ultimate and Ultimate K with Service Pack 1
F-XGMM4-2DFQ2-6TRBQ-H7X6B
P-YQT8D-38748-9GWH8-4CWWW
T-WVVRB-WCJ3X-24X4G-RPFWX
Y-6W2F2-QGF3W-QBRY2-2X8CD
J-2DYDX-DXCMJ-6KC4R-DCJG9
Windows 7 Professional and Professional K with Service Pack 1
P-Y6Y2H-J9DW9-FCGPP-XVTJ7
6-4VPPP-PGQV9-JG9KK-BRBQD
Y-967FX-MRX2F-T9MHK-VYC92
8-FR2P6-KT9KY-3M38Q-4YM4H
T-XTHQD-CGRBT-YKW22-B26HF
Windows 8
D2QBN-HJK6H-T8GXC-PH4C4-2J8XQ
7JNHY-8V6WC-R4T3H-VGJG7-CYQG3
69MRY-NFWP6-T68BB-262WH-CYQG3
RN7K2-6YFCM-VQ48B-7XDPQ-M7RDD
4XNMM-TVFMD-CCB8R-HVJFT-BPWXQ
Windows 8 Enterprise and Enterprise N
CJY98-NYHM6-XGTBX-63FRY-DPBQP
Windows 8 Pro
JDB4G-N8CB4-4M9K6-3J873-YBFDH
8RND3-CXMVR-3RD69-GYV4G-D3R9V
KQND4-798YD-7W2TC-DFQ6Y-CWCKV
RCCHD-NH36B-2P97G-PBC82-GQ4DH
YCKND-89XK8-B4VY9-KJCXF-6Q4DH
Windows 8.1
T-FNPKQ-CTM64-GTDR3-C36TG
J-N7RYW-D387R-VQY8G-FVTTG
H-TPNFH-8K7WT-PFCHJ-VH4W6
M-NY7HV-KWC8C-9BQ7K-C7HPT
N-D3BD7-JTGDG-W2B9D-T6MCT
Windows 8.1 Pro
-CC4WJ-33JWW-DM9TY-CWD2Y
-98NVF-CYQF7-C4XR9-C7HPY
-NJ8GC-9D3YJ-KXK2R-YTB9B
-H8CF4-G4D4F-WVJGQ-PYRXB
-KQ6WP-C387J-H84Y4-W8D2Y
Windows 8.1 Pro N
-NDVKM-R9WRH-734JT-V6B9C
-GGFQJ-479PF-7H2DJ-33VP2
-NKYT4-FX76T-G46P4-WFFXC
-HD3HF-RRTBB-R4JYQ-BG8KC
-XF8HP-QKV47-8DFK2-VFQ22
Windows 8.1 Enterprise, Enterprise N, Pro VL, and Pro N VL
C9D7F-NH2T2-QWFRQ-M24TC-6JD3Q
Windows 8.1
T-FNPKQ-CTM64-GTDR3-C36TG
J-N7RYW-D387R-VQY8G-FVTTG
H-TPNFH-8K7WT-PFCHJ-VH4W6
M-NY7HV-KWC8C-9BQ7K-C7HPT
N-D3BD7-JTGDG-W2B9D-T6MCT
Windows 8.1 Pro
-CC4WJ-33JWW-DM9TY-CWD2Y
-98NVF-CYQF7-C4XR9-C7HPY
-NJ8GC-9D3YJ-KXK2R-YTB9B
-H8CF4-G4D4F-WVJGQ-PYRXB
-KQ6WP-C387J-H84Y4-W8D2Y
Windows 8.1 Pro N
-NDVKM-R9WRH-734JT-V6B9C
-GGFQJ-479PF-7H2DJ-33VP2
-NKYT4-FX76T-G46P4-WFFXC
-HD3HF-RRTBB-R4JYQ-BG8KC
-XF8HP-QKV47-8DFK2-VFQ22
Windows 8.1 Enterprise, Enterprise N, Pro VL, and Pro N VL
C9D7F-NH2T2-QWFRQ-M24TC-6JD3Q
Windows Advanced Server, Limited Edition
F3VWH-8KTY3-WR2WF-4GQQH-VCXTB
Windows CE .NET 4.1
XHV63-B8QTX-F99P3-6W76G-BXQVT
Windows CE .NET 4.2 and 5.0
W3V42-KVVW2-RQD4D-W322G-YFBRB
Windows Embedded 8 Industry Pro
7XKNG-JD7W3-TKFJX-VFMVY-KD49H
Windows Embedded 8 Standard Image Builder Wizard
9GQGJ-MNTT7-6JV2W-MVGJ9-7XJWM
Windows Embedded 8 Standard Toolkit
39XMK-BGG4W-Y2GHV-7XR9X-7QP88
Windows CE .NET 4.2 and 5.0
W3V42-KVVW2-RQD4D-W322G-YFBRB
Windows Embedded CE 6.0
CGY7J-W3X4B-CDDYQ-VWB29-BY7MT
Windows Embedded CE 6.0
CGY7J-W3X4B-CDDYQ-VWB29-BY7MT
Windows Embedded CE 6.0
CGY7J-W3X4B-CDDYQ-VWB29-BY7MT
Windows Embedded Compact 2013
MVMJ6-JR4RY-RCCKM-F49TB-TGH79
Windows Embedded Compact 7
PW28V-TRKP8-RW8JQ-QG8MF-23C7F
Windows Embedded POSReady 2009
D4GQ7-HG48K-7YP6R-6JM4C-33FMQ
Windows Embedded POSReady 7
J34HH-MQ3XT-6P8J3-CQ9PT-Q86C9
Windows Embedded Standard
XPT4M-RKVC9-4YQWT-JJP76-RBXD3
Windows Embedded Standard 7 Toolkit
7XT84-3XQFP-YMXQF-PP96H-F74DV
Windows Embedded Standard 7 Runtime
MPMVY-PP762-WWVBC-83RXJ-2H7RH
Windows Server 2008 Standard
MXKVR-K2QKG-26DFG-G79WH-PB2JX
Windows Essential Business Server 2008 Standard and Premium Management Server
BFK8M-BKCY7-H4PPM-XGBD8-V6C6X
GBKYH-826BY-4QRYT-VDT2V-V2JB2
H64TW-34QMC-T9XWW-QQDR2-8WGVG
BJDVG-FJX73-R4R46-CBVRD-W9T7F
2VQ2P-BTTKB-HYWCT-DWKFH-X6D7W
Q9MT8-424HB-MVKP2-6JBGH-KJP4C
HYY4B-3X8WH-4RH3G-2K3R6-7TRM6
YWJJD-63Y9C-3M222-MQ6WJ-RTYKV
W7872-CXQJ2-3PP4P-J8XYD-WRYH7
P3TK7-FTJ87-GG6QC-BB9Y7-QQJHD
Windows Essential Business Server 2008 Standard and Premium Management Server (Virtual)
P7C2P-THHPC-T4R6G-CY8GT-32RVV
X9YYD-29MHM-4X6YF-QQV2X-KWG9R
C7FKJ-RPMY2-XMW73-HWYQR-24DWB
MWWW8-6BQMW-QQ79V-BKGW3-2DYM4
2QCHY-C8JRF-K27XJ-FB6PX-QK48X
BVTMH-JVRT8-TD6R7-JYFDB-7KPXD
MRTFQ-BYH98-WBHGM-DRTHD-F29MJ
J79QP-J4TC4-JHMQD-YDD4W-CKCC4
RCQDB-BW2H8-C29C9-DDY63-WW6Q2
PXG3H-BY227-KRCB6-TVTCG-QP9JJ
Windows Essential Business Server 2008 Standard and Premium Security Server
36F9M-MXPX4-CJVHP-W298F-VCQTY
6PF96-6PBGJ-KHG73-2G6WP-8DCWB
BMPJW-6V9X4-DV92D-G2PXD-6RKBQ
MQPKG-CYYKK-HVQ8W-F9MTR-QV6H6
6GKYR-8HW2G-6GG9J-JCBDG-2C2H8
D8J2J-J2X4K-C8KRY-3VY47-HGF8B
2J9JR-JWVR4-XH3JW-YJR7M-YX436
GBMF7-TB3X6-9TTBF-DQ4QB-KD2FB
VXPYP-WDCJX-P2VHQ-QGC3J-3QM84
H77TX-JWXMW-264T9-QMJVG-9QQQM
Windows Essential Business Server 2008 Standard and Premium Security Server (Virtual)
6GVYD-K76J2-TBX9X-GDKBF-94X9J
VQHKP-V73WG-3D8DP-6GTB8-D6J3D
QXMYD-39R7Y-F3C8J-X88FM-8FBWV
P4HF6-HF42D-T9Y3C-2XWV4-G2XPD
3XM2F-TTC3G-GHG4Y-Y9RKX-DQD64
TD6RK-FHFHT-4QFBY-7QYR6-W98GK
TRXCY-PCMJM-22J9P-T4F7R-K2VW7
FJQ4H-T8KPD-9F8GX-TJVCD-2MGBR
4DCWX-QVYTM-JJWWD-984JF-XBM88
6JY3Q-9WTYP-DHJ92-6R88Q-9CFJQ
Windows Essential Business Server 2008 Standard and Premium Messaging Server
88W73-CF4H2-QFD86-RJC4F-WVTYQ
YK82T-638FM-Y7YWJ-FK8PV-TKB86
CQB6C-M24RD-7M4Q4-F9KQY-MBF7Q
YFY2C-JKXMH-27V76-PJ68Y-42JPP
YRRKP-YGK96-X6XFP-WRBR8-R3C24
CWYF3-DGQ39-KVBRM-33MPB-YCYKJ
W862M-76KF7-3DW3V-D3H8P-CFC7Q
YMQYJ-DC2GY-4R6QP-GPM3J-KMP48
MWRX8-K8VM6-QG8FF-V3C3K-6VWD9
VVH3F-9PDBM-YR8G2-3T3JD-7XDQR
Windows Essential Business Server 2008 Standard and Premium Messaging Server (Virtual)
PPMBH-2Y8BB-VJYWY-8KF9C-XDG6H
X9TQX-V6764-V67CD-W9B6F-CRFDH
J6XWW-DWR8F-7QJRH-MB2WX-W6DVP
V3F3Q-FYQVK-D3VJR-23R64-3K36K
4DMKX-772HQ-76BVV-HFG32-D622W
YDHXK-V7D4W-QXRPH-946M6-4X8RC
V6WYG-F6XFY-W3D49-BH2G7-PWW4D
2RRV4-MW27R-JDDHC-WHKF6-9HXCQ
RFC64-TG3T6-WJ7WW-7XX32-TKMP8
28P3G-FKDXD-QPQ9M-MRTMK-48JF7
Windows Home Server with Power Pack 1
WWWPD-FTFYC-4XCKB-BB86V-YWJY6
Windows Home Server 2011
6MFR9-4YH7V-GD8KY-WQY3P-XGFK8
MXJ3V-HVVFC-FYD9V-GW7MR-CV2P9
C2R8W-MRFMY-Q98RW-YJJ6Y-TJYP8
H6VJR-D2WWJ-DDQ7Y-XDVFR-4F7MC
KJPB3-QCVYG-KQX2C-7P4CT-MKXWC
D37J6-HTKVT-VBMBV-79MQ7-338GK
GWB6P-Y6W23-PQM6Q-VB3D6-M6GXJ
D2W6G-DY8CT-6JRGR-X2FM8-4JJG2
C46J6-3T2GB-M4YWY-CYP9B-GHC2K
V84BR-D8GRX-TG6DD-MR8K8-J4H38
Windows MultiPoint Server 2011
XJWVR-YTV9M-DM6W4-KK9X7-DYFVG
MBCKB-YYJHG-R9CDC-C7C6P-DQ4CJ
6V684-YCC8F-XP8JC-BDG7J-GCXXF
RDGMW-CM8MC-WVVDF-V3YRF-YJHP6
W4TGP-BHR3M-DR3JV-DCTBY-VB4F8
4JMVC-JMKXW-XQKDW-QV3PG-H3QMV
GB4DC-JPMMP-7MRH6-J4BRR-PRQJJ
Q7GHX-CG963-X2H9T-TYHKW-QDP6M
MTQJF-YBB6B-7PWFP-R6QQJ-XPM8T
H7V82-X66TC-YYH49-9KQ3B-G8966
Windows MultiPoint Server 2012 Premium
T-K4VRB-42D8Q-PQ36D-DV3JV
6-WVJYP-YKBBB-44X8D-GFYR7
W-FCRKY-CX28B-BGF7Y-QJXWV
-FR9WM-XPJCK-224D3-H2W2H
R-JX6P6-7G3T2-8D9G3-QRPPH
Windows MultiPoint Server 2012 Standard
2-HDK23-GGHRT-73688-CPKWK
H-R2V82-P2KWH-WMVF9-WTV4X
4-YWCRQ-CTD7J-RW48G-4M2M9
-MWCRV-KGXVM-FTR3V-XD4FX
-R7PK2-9J4G2-Q3QG4-R3G8K
Windows Server 2003 Terminal Server User CAL (20)
RYT3G-6T9FM-3KT24-KG6JW-D9BGM
TRJ4G-279DJ-36H3R-9VMQC-MPMV3
JJHHY-MJHHD-CD79P-6F26P-GQT38
BVMBV-FH79X-YTVMW-4JDMW-CM9JW
KVBKH-8RVD4-QVC6B-BMKCR-XYXFB
Windows Server 2003 Terminal Server Device CAL (20)
KBJ79-PCR2Y-F9MM9-2J4WQ-PTP78
DHX3K-VGJH2-683MV-6Q8FG-QTC8B
GJX4K-BP7YF-6C7MF-Q2V2Y-7GCMD
T8RDK-TJDRW-M7MYJ-2DFRD-K8MTB
TWGR3-3CJPT-HVHKP-HR6CH-VMYQQ
Windows Server 2003 Standard x64 Edition
D3D9P-VRRRX-RJQQR-BRWF7-H9BF3
JFGRY-38BG7-393R4-G48QR-7JD43
DD7WR-BQQW3-28BQ3-7MRMG-8YMF3
TVT6R-7WD3W-7MD3F-VRVMX-768PD
BKKJF-3GWYT-6HW4K-WQTGC-BC42D
Windows Server 2003 Enterprise x64 Edition
F7D2D-D7M6V-G2V6Q-KYYXJ-FW6WQ
GV6GF-X8VCD-HQQC4-FWY4J-2CPCD
K7WGG-J7YHD-R74TQ-B8QC2-KGGWQ
WQRVP-8QQYY-C9G6R-48TBM-D2YF3
R7RJ6-2J4VW-9V4W4-JQ6K3-HJ2CD
XR3VW-WP33T-YGW7K-RFQ4H-WGMF3
QPFVJ-RDF44-B9T24-6YVRX-47PCD
CBDMG-PRMQB-2XMV3-T64H6-FM8PD
Windows Server 2003 Web Edition
VC8G3-YHK73-448JB-WMQCW-T6R6D
DHQH6-8H6GG-BTQ6J-CBQHF-T9Q83
WC92R-7Q2TW-Q7DCJ-T4X68-8WVW3
RCDCJ-2TV77-TW27D-3MDXP-H7PGD
PR9CM-42FQB-CWYF9-HQKCD-WX3CQ
Windows Server 2003 Standard Edition
V2HRF-RMPTG-2WJTT-9YR99-6JD93
BF3C9-JFCQ3-BHKJD-XYDGP-K9Q93
WTWBT-Y8B26-TJ6X9-Y9PYM-MFBK3
GW8QX-222YF-Y9QXD-F6MDW-VKBK3
TCWG7-3WTYB-7DYGP-2HWM6-9PHX3
Windows Server 2003 Enterprise Edition
GGPWJ-M9RRF-H9XTJ-TDFG7-4HPH6
D32VP-DYH6Q-2CJK4-27B4F-M9BMT
FWK4M-XRHDC-B3CF9-X8TF2-HVHYT
XTTRH-77T7P-29FB8-H2WVX-3JVYT
TV7GP-FY73J-7YQJT-CYDHB-HJVYT
WBY47-Q36Q4-6Y2TH-FTY8T-F8VYT
Windows Server 2003 R2 Enterprise Edition
CDY62-PXM2V-376HD-X8BMG-PFKHJ
KQ8TC-X367R-XCM2X-FPKVM-MWJK8
G2RFH-PR6T2-JDBJT-26K6T-P4BDW
DKDXP-F9XKM-RQ47V-XBJHV-736VJ
Windows Server 2003 R2 Enterprise x64 Edition
FV6C3-G4XHB-PC827-HCYMR-KXQ43
FM68R-BV9W3-DYB7D-XXDGC-P242D
R7B3Q-8JXJG-9B73K-Q6TKV-F9WPD
HWFX9-DX3D8-X64PW-X6J9X-2P42D
Windows Server 2003 R2 Standard Edition
Q93C8-JHM7D-3QCY7-C2K4V-V6CB3
KP87W-RQKMC-4P2VB-2KD9R-BW6WD
R2XWH-TK3FK-DVXQK-B3M9J-3V4Y3
BMXY4-9CCBF-F7M8M-G79GK-C6MFQ
Windows Server 2003 R2 Standard x64 Edition
QFY4D-VBPJ3-VF33F-3VXC4-PVC7W
BK7BX-92GQP-2X99P-6KC9Y-R4BD8
RFMTK-4VK9V-PHBVR-HD9DD-73JMJ
W8HCT-PJYCP-JG3HQ-YBH79-D29HW
Windows Server 2008 Enterprise and Windows Server 2008 Standard
MXKVR-K2QKG-26DFG-G79WH-PB2JX
Windows HPC Server 2008 and Windows Web Server 2008
VXXYP-R8KW7-8TM4M-VHHYH-GJMT6
Windows Server 2008 Terminal Services User CAL (20)
T79J9-86FGC-3QHDJ-MWRMD-GRP8Y
JMQCR-Y9DVH-CV7QT-PH8XJ-Y2MF8
WHJ4C-2HC92-M976M-2T3J2-JMP3T
PKXDG-GQ2RT-FTWW2-2984K-W6HFY
R67KV-J7DW4-D4Y9G-C7929-HMVX6
Windows Server 2008 Terminal Services Device CAL (20)
J4X82-4JT29-MVTDF-HPBJR-H897M
CKM7F-XD4TG-X8KPY-32CYG-MB3VJ
Q3XFH-DP7BF-F3XB3-WCBYK-HVRQG
QC27H-C3733-RBVMC-24W63-F7FPQ
D6X74-GFBKY-CH3PT-43JW3-7JJCT
Windows Server 2008 R2 Datacenter and Itanium
PXP6K-BJD37-6VWTK-C6C7Q-WG8CB
Windows Server 2008 R2 Standard and Enterprise
P9GVT-9Q72J-VXTDH-M6VWV-KQQ3X
Windows HPC Server 2008 R2 and Windows Web Server 2008 R2
Q7GFQ-69M4R-4QXYK-WV7H7-CJWW9
Windows Server 2008 R2 Remote Desktop Services Device CAL (20)
3333X-3CR2F-XMYXV-KG2GC-429QM
3YDHK-X78T8-6Y9QY-J9DHQ-4TMPR
W8JG3-8WCCM-7FVMH-TB27F-33FYJ
YPTK8-TRFPV-DGM6J-6FQVQ-KC8B2
VYYVC-YG86D-QT96B-GHXVJ-9866M
Windows Server 2008 R2 Remote Desktop Services User CAL (20)
MM3WR-WM99X-6R2D7-8YTHK-KQHR8
Q98VH-XC4MT-FW4FW-4H3RW-9Q847
BCXF6-KD6W6-B7V44-P7XGY-YBVF4
P87K6-MWR8G-7GMBJ-9B496-MKKFH
36CPW-R34FP-44MWR-B7FTY-Q4YBF
Windows Server 2012 Datacenter
42NHP-HBV3W-DBBTP-4X669-QV3KX
FGN33-9K9Y3-VYPHJ-QFY8X-2YQKX
WWD34-N362B-9WVCF-MKXRG-PDG9X
QFTHN-VTQCW-3TKGG-W6JGG-MKH69
Windows Storage Server 2012 Workgroup
XTG8F-NX2XT-X64QR-6KXGW-HMFGR
JFTKX-BNWVF-FBJQD-99TKC-MPW24
HDNDF-D8X76-4772T-YVVV6-72W24
YPNCV-PX3DC-YBCJ3-X67D6-C9T9F
QP4NQ-8DK7J-HY92R-248FT-4M2P4
Windows Storage Server 2012 Standard
B2FNJ-XV4RB-WC8XG-8WW4K-4JMTJ
FVYBW-4N9XY-GC7P3-X29RX-V2W2W
XWH6Q-7N3FK-7644J-4743G-J2KW8
HNKCK-GWMJ9-MHFXW-8P9WX-RM2PW
HDWN4-C7K62-9Y7HT-XRKRF-GXT88
Windows Server 2012 Foundation
FCVXV-DWNBM-8XFCB-WCPMV-B7RHG
CY272-NDFRR-6C6HC-DF99T-YG696
CQN6T-JMP9D-WX82F-YK3CK-HCBVG
X6HJD-4FND9-6G7RF-YCB9X-6CKX6
P8QQP-N8B6T-PR9X3-6QRH8-RX6DT
Windows Server 2012 Remote Desktop Services User CAL (50)
DQ2VJ-NBM2R-TYY39-2J2HY-43HC8
VY2WG-NWYCC-X4HYK-V6KPK-RM2TW
RFYYX-QNWBH-GT8BB-7D32J-J8CTW
DX9M3-PNB7T-MW2VD-6CY4X-QV3P8
Windows Server 2012 Remote Desktop Services Device CAL (50)
DN728-KBCR8-BRFRG-R2QQK-GJCTX
RVCMT-MKNTK-VF4V6-QH6MF-VMFKK
374P6-NCFV6-GFYGD-42XQ8-Q67C9
J8NBX-G6HB8-2HXKB-CHH42-VFPTX
Windows Server 2012 Standard
MDDHJ-D7NFV-C4XYB-8V89B-VQTC8
2DTWT-YNCHD-472TK-F7DMV-46V6W
8XJFB-GNXGJ-KDK38-7TQ96-KTJ28
JYWGH-3YN4J-XX8BH-2QHJM-XBQKJ
KVV67-B3N63-MV38F-96QVK-HCBTW
Windows Server 2012 Essentials
KDN46-RHT6P-MM6GD-7TCV6-PDHBJ
WXYWX-NHQV8-RJ67B-D3TMR-Q9H7W
QNQQC-983VT-MX2PC-VP3KP-JB2Q8
JFNWQ-8BTG2-MF74C-X9DJ6-68XYJ
JNRHF-CGR3Y-8R7TY-93PJR-8B2Q8
Windows Server 2012 Remote Desktop Services User CAL (50)
DQ2VJ-NBM2R-TYY39-2J2HY-43HC8
VY2WG-NWYCC-X4HYK-V6KPK-RM2TW
RFYYX-QNWBH-GT8BB-7D32J-J8CTW
DX9M3-PNB7T-MW2VD-6CY4X-QV3P8
Windows Server 2012 Remote Desktop Services Device CAL (50)
DN728-KBCR8-BRFRG-R2QQK-GJCTX
RVCMT-MKNTK-VF4V6-QH6MF-VMFKK
374P6-NCFV6-GFYGD-42XQ8-Q67C9
J8NBX-G6HB8-2HXKB-CHH42-VFPTX
Windows Server 2012 R2 Standard
6-CVGB3-BXFFH-DXQHR-VMGPB
Y-NRQCH-R2HQB-KQB4C-MPX8M
K-JCR2F-TJPWJ-BDPBY-CWDWM
-NG8F2-BWMDP-PDC3G-BPX8M
G-YTPWB-XVWM8-3D72B-3GK8M
Windows Server 2012 R2 Datacenter
2-2NGWT-WCTF2-VMKPF-JHTPM
V-BNBQK-FV7J7-CXVYH-JQJGB
N-QPVCJ-HB39J-4JMVK-C7HJY
-W44GR-MDJ47-CHBJC-D68GB
X-YQCKC-VC8K7-YG7DV-XD6PM
Windows Server 2012 R2 Foundation
D-M3PPP-96KQR-WQQFW-D9KC6
F-DFGD4-KDP8B-2W8H9-BKKC6
6-MY8KD-QC9PD-2D4P3-8K7KG
-JNB36-GCP29-966BH-8HTP6
4-6TP2F-KVQGK-TX478-RX7KG
Windows Storage Server 2012 R2 Standard
Q-RJYCB-PXMM3-FRMR2-4RFV6
C-FN6VR-P978W-VHB4K-P36RG
7-WNV2M-F9FTC-C2FM6-4M3YT
-MDNMR-YXYHV-HBPC9-P36RG
J-YTR4J-3C9WG-JHK28-W424G
Windows Storage Server 2012 R2 Workgroup
3-NQ6XJ-KKXPW-V9VVV-4CYB2
P-XNFBB-Y7MFX-FPHV7-9BRWC
N-CDCGP-3Q3Y6-GH34C-W2M8C
-78TR2-3WX7G-72T4R-7H4WC
F-6NJMV-G2XYJ-C24TB-X4QY2
Windows Server 2012 R2 Essentials
D-BYRKY-84YX2-9X2TF-KBRWJ
X-N6HTQ-2PGBM-T7TMY-2PM8J
K-TCPD6-7XKTG-VJ8CC-4RFWJ
-PFNPX-7RX8D-KFJ3X-RM3Y8
8-3DD6G-DTT4B-RYFT8-D9KFW
Windows Server 2012 R2 Essentials
D-BYRKY-84YX2-9X2TF-KBRWJ
X-N6HTQ-2PGBM-T7TMY-2PM8J
K-TCPD6-7XKTG-VJ8CC-4RFWJ
-PFNPX-7RX8D-KFJ3X-RM3Y8
8-3DD6G-DTT4B-RYFT8-D9KFW
Windows Server 2012 Remote Desktop Services User CAL (50)
DQ2VJ-NBM2R-TYY39-2J2HY-43HC8
VY2WG-NWYCC-X4HYK-V6KPK-RM2TW
RFYYX-QNWBH-GT8BB-7D32J-J8CTW
DX9M3-PNB7T-MW2VD-6CY4X-QV3P8
Windows Server 2012 Remote Desktop Services Device CAL (50)
DN728-KBCR8-BRFRG-R2QQK-GJCTX
RVCMT-MKNTK-VF4V6-QH6MF-VMFKK
374P6-NCFV6-GFYGD-42XQ8-Q67C9
J8NBX-G6HB8-2HXKB-CHH42-VFPTX
Windows Server 2012 R2 Standard
6-CVGB3-BXFFH-DXQHR-VMGPB
Y-NRQCH-R2HQB-KQB4C-MPX8M
K-JCR2F-TJPWJ-BDPBY-CWDWM
-NG8F2-BWMDP-PDC3G-BPX8M
G-YTPWB-XVWM8-3D72B-3GK8M
Windows Server 2012 R2 Datacenter
2-2NGWT-WCTF2-VMKPF-JHTPM
V-BNBQK-FV7J7-CXVYH-JQJGB
N-QPVCJ-HB39J-4JMVK-C7HJY
-W44GR-MDJ47-CHBJC-D68GB
X-YQCKC-VC8K7-YG7DV-XD6PM
Windows Server 2012 R2 Foundation
D-M3PPP-96KQR-WQQFW-D9KC6
F-DFGD4-KDP8B-2W8H9-BKKC6
6-MY8KD-QC9PD-2D4P3-8K7KG
-JNB36-GCP29-966BH-8HTP6
4-6TP2F-KVQGK-TX478-RX7KG
Windows Storage Server 2012 R2 Standard
Q-RJYCB-PXMM3-FRMR2-4RFV6
C-FN6VR-P978W-VHB4K-P36RG
7-WNV2M-F9FTC-C2FM6-4M3YT
-MDNMR-YXYHV-HBPC9-P36RG
J-YTR4J-3C9WG-JHK28-W424G
Windows Storage Server 2012 R2 Workgroup
3-NQ6XJ-KKXPW-V9VVV-4CYB2
P-XNFBB-Y7MFX-FPHV7-9BRWC
N-CDCGP-3Q3Y6-GH34C-W2M8C
-78TR2-3WX7G-72T4R-7H4WC
F-6NJMV-G2XYJ-C24TB-X4QY2
Services for Unix 2.0
TCJC7-H2QDH-3T7G7-R6RTM-YRK3Y
Windows Small Business Server 2008 Premium
TG6H8-XM7K8-QTX7C-T6D9T-FK7P3
HK63T-3728Y-JXQFB-CFJ9Y-RXR79
P8W8Q-R6CPH-2B9XP-JKCX7-RP9GW
TFVHD-28B36-29C27-Y68QX-YGKDM
FCFWP-2CPVK-XGMW3-CBPFB-DV24C
6T4WP-96FWQ-X6CG4-B882K-4MX42
P86HR-37CCD-9DBYC-H2GYJ-HKXFP
7MF84-2CG9Y-RH9PT-2VGBK-9YM2T
CR9TF-J87B3-DDJK3-69YRH-9CGWF
H7YQJ-FW6MK-62D4H-KKB8Q-JJMPT
Windows Small Business Server 2008 Premium (Virtual)
RJRW6-TYMXM-F3HHY-VR6VB-M6W4H
TDJ4R-RJXF4-47B38-TFGB2-BBP7H
BBPYD-WQPQP-C8Y2J-RCMRC-MRM86
XBFVQ-F3MJC-GYDV7-VBBJ4-RGGWW
J9KWM-7R8B3-C393D-WC77C-HKFJP
DYQGM-BR3TC-HDCJX-WHBMJ-VK8JD
P237D-82CBB-VJG32-VMDTW-CCTRQ
RDVJM-73PFT-T767T-BD2HM-JT8Q7
PVC6G-7YHVH-FCK82-DB6KM-4JMVF
TG3GX-PK2BM-T4PGK-J43HK-CTGP3
Windows Small Business Server 2008 Standard
YKQDG-8GDX4-G8VBG-3MVJM-JWDM8
88KW6-8B6KG-M8TFJ-4H7XJ-YPBW2
VP2VB-FV62D-J9DWQ-DTTBK-WMYBF
263F6-TJKWX-3DK8J-4XRQG-HKFV6
36WTK-Q6W86-XJGK7-2MVYD-CPFF2
TRCGQ-8HDBK-7W263-PYM4Y-FXPFR
MWG8J-WBH87-Y84R9-WQGQV-M44MM
6QWKK-CKC8W-F2G4Q-D38KH-HDFJB
MP8D8-DDGVF-W672P-MY9R8-TDXY4
HP24Q-77WHK-TG2RG-C2G88-YHGBY
Windows Small Business Server 2008 Standard (Virtual)
H8X9G-3K6XC-D4RV8-TFYRJ-BQRKK
CMJ9W-PB47Q-KQ24X-9BQ2C-TJ7YD
FC2VX-K64DX-QKYW9-D4PQW-62DKK
7T8G9-J7PTF-GYWDT-8V67W-QWWYD
2M399-W87D2-WFCMM-H2Q76-9V4JQ
6K4Y9-2RKK7-GBDT7-Q276C-8729X
Q3WYV-7PDH4-4966B-6R73V-BQFRG
6M39F-XJJFB-Y77PW-Q9CKM-KCTJQ
4JPGF-HTY2P-8X93V-99D6R-8KMRC
V8283-JHXY9-QMWQF-C6J48-3Q9CB
Windows Server 2008 Standard
MXKVR-K2QKG-26DFG-G79WH-PB2JX
Windows Small Business Server 2011 Essentials
779B3-8RB2G-8B2F2-TQBR6-T68XJ
GGGDB-M3VJP-MMW9D-QFJ7T-MMBWJ
VQ4HT-W2PCD-68FR8-4MVWT-VMWTX
C3FYR-7XDFY-CJJM6-J9YCD-JMYJC
7VMM2-CDXQ2-P3TXY-JFPYB-BRM79
XBK3P-WR8HM-TGQ8V-W2XKH-F4R2W
K973J-TWYP2-B4H7Y-X7284-DY4MV
PTRMT-PTCV4-GM3RM-BV6Q4-T36D4
FFXXD-M2JDG-C4B42-XTJXK-8MVKY
6HWMK-86XB2-GV2MJ-B2X6M-W438T
Windows Small Business Server 2011 Standard
CXRKY-VGBCM-PJG78-HYPMQ-3X62H
QXY3R-T7DVX-WX897-T6YVM-GW968
6CYHJ-CH84G-TP2YF-4YCK7-HXQX4
BFDTX-RP9TG-RTV87-DPKK3-G3948
6F6BR-7BJW6-WPR8G-XTCGG-RJDKF
RG2VF-KR6CF-QTBJD-B6WJC-7MJW8
7KW39-HRDBG-YVXGF-HGF34-VKD74
V64QC-PVR93-6P9X3-V7TV9-YVH23
THG8P-9P9XV-DF9KX-PBYM8-CKM4V
4DHBP-VB8KT-JK2Q3-KFV6C-848FR
Windows Storage Server 2008 Standard
J6C9J-FC9CG-R467K-FW7MP-W6FBD
4C32G-BBC7K-XGBF8-8TJCG-8RC36
Windows Storage Server 2008 Basic
TQ3VH-7TVRV-4KK64-JVXFJ-TY4H9
Windows Storage Server 2008 Enterprise
BDJJ6-W6G83-F2B4P-44CVR-9922J
C8G6G-X3M8P-DR6DC-D2WXF-26BJB
Windows Storage Server 2008 Workgroup
PMWCT-RGHMT-PBW69-PYCMF-B8Q4Q
Windows Storage Server 2008 R2 Essentials
7TMVR-V6968-TQPG2-GVM73-B8YFH
P2T7H-RCWY6-2QQH4-22W8V-7M9GK
MWTQW-8663F-V3CVM-336FX-2TD69
BP7BG-3XM9Q-3J78K-6P8TQ-RC772
GQD6V-Y73VC-7VX6X-K39T7-D68FB
Windows Thin PC
2RTGV-QHYV8-3KG2F-JCDD3-64THD
Windows Vista Enterprise
THV7H-9JJ7D-RJY32-H2FBK-7X3X6
Windows Vista Business
J77KD-JFXXJ-74JR3-K6YRB-749BC
VWHF8-8GMCJ-HF6V4-J3BXR-84MHV
6QDX4-H7BPW-FB8RQ-2MJXB-DQV3Y
Windows Vista Ultimate
HK7XX-R869Y-WYTDM-3WGFB-T4RW7
XBJX6-XP7T7-VQB9Q-F7QYR-R8CTC
BPTQH-GQQB9-7C3CW-YWW2W-3HT4B
4844G-MQF8G-V97TF-38CYQ-C4RFJ
RH8XD-G4V3B-J2YT7-JMJYR-TM9T3
GKDVW-C8DVM-26VVY-CYCHP-M6JWW
K97D4-XPTBJ-87CBM-47HF6-W3648
8YQM6-CBKQB-H6FH4-RKGW9-KBY7B
MC4JB-RDW6H-RB43B-P3CVR-2KQXH
C63TW-36282-88KBQ-HPRF2-4VCYG
Windows Vista Home Basic
PWTMF-46FBB-3BKVX-4WPG3-WFGFR
BJ3MD-DWDPH-4WW97-XC44Q-XHQKJ
YDWQ2-FF4FW-8T9G2-63MR7-34WTT
Windows Vista Home Premium
HQCFP-WY7JV-MKV2R-P6X2D-MQXRB
H7DFR-3QKMC-THFDK-XG729-TR2JT
PWYM4-DYBFP-G4QVB-MY6W6-TYY66
Windows XP Professional
G8P93-964BD-RJHQ3-QRQWC-CC448
TMX37-BVWW7-93C67-XHGVG-TB8R6
TP3XM-3XKXV-JHWFC-V6TJY-WBMJQ
CP6PW-2TKXV-49P74-H979W-QX3CB
VVWCH-8MTVW-G9DHF-QVH7R-7BXM8
P8RB9-QHM2Y-8G4JX-W8K2X-YYMJG
MM9VV-M4K97-2PT9Q-YXQ9T-WP44Q
JVG36-W2FKK-7QF9H-3WHT9-R8VWB
VC2FD-DR6KG-RXT8K-RYDXJ-VBXMW
DHT6X-MC3YJ-MYTKD-KCW63-G23FY
Windows XP Home Edition
MYY2Y-V9JKK-67BQB-4QBVH-CF886
GFPP9-73CJY-6YW24-GMKR6-FB96D
QK6VP-FGWPC-K2DY9-8CBYD-V72WY
GWX2C-GK6YK-M66GC-Q4VWM-Y66JW
P6PKM-G3JQQ-B6MQH-72T69-TQGJT
C6PTM-M83RV-CMCDW-T2V7V-RQRPD
FP28K-BQGF7-CMX49-XD3R2-3FX4W
XRTJM-GR8XK-RP2F6-88RRT-3CJ8M
MKVKP-39Y3D-PJVYP-J28FW-6JGKQ
CFJHK-Y868G-XV24W-F62FJ-FV22Y
Windows XP Media Center Edition
JVX7B-YB476-T4H6W-8X8XK-PWFPT
FHKMR-66F8K-RCW6Y-MQ7GX-FJQTD
DK346-7MGY2-JYHKJ-JPQJC-DYHGB
M84GB-3GYQK-39TDF-42M6M-BWQR8
WBG2R-CTY4G-F44W7-JQ26V-VMHF6
MJJPV-2RRDH-99768-V8XDG-YBHF3
HXP6K-RQ86G-RT3R2-3BQ9Y-W43RY
JHHXR-BDBV3-M3864-FX72T-6294W
MVPKF-7MYDT-B6HCC-3QVTW-682WG
CG2MG-3DY6J-G2C77-J2MD3-XBTJD
Windows XP Professional x64 Edition
GH2WV-HP2V9-KYBKB-F3JBB-3DFCY
WG7B7-QQX4D-YRKVJ-CRM2Q-D6MPY
J7M4C-9QT2W-CXRQ9-KM4Y9-K68XB
HHT33-3Y67Q-3YQFT-HGWQ2-TY8XB
F3T6X-YKFBT-KPWVJ-PVGT9-HC9TM
P83HM-H3Y7J-3XKTW-9JDBY-HG8XB
V4K3G-TV9BR-9QGDW-WJ29D-7JFCY
C9KCW-GXWWP-XXGKX-W96TH-TX72Y
B9GGC-36WFG-V66Q6-FRHG3-479TM
CRBYQ-6JMC6-3VJGH-C987M-W7YPY
Windows XP Tablet PC Edition
KR4QP-FRPMQ-JJVJ2-T7M9Q-2VCJJ
RPVJP-F8JRF-RK3DD-9XMTB-42G4T
VYT3C-FF7WG-YY746-82HCY-RBWWD
Windows XP Embedded
JX4Q2-PHJ7Y-VMRG6-CR6FY-F973Y
"""
TMT POs
\\otls1\uptdfs\GreatPlains\Aztec_eConnect\PROD\POVoucherInsert
AP POs
\\otls1\uptdfs\GreatPlains\Aztec_eConnect\PROD\SETTLEMENTS\
Non-shop POs ??
\\otls1\uptdfs\GreatPlains\Aztec_eConnect\PROD\PO\
"""
Do you have a user who recently got married, or have you ever fat fingered a user’s name but didn’t notice until the user tried to login with their actual name? Well these are steps for you:
1. Open Active Directory Users and Computers
2. Navigate to the Employees Organizational Unit (OU)
3. Right-click on the name of the employee for the name change and select rename
4. Rename the employee
5. Rename User dialog box appears
Full Name should be correct
First Name should be correct
Last Name should be changed to the new Last Name
Display Name will changed in the above step
User Logon Name should be changed to the new Last Name
User Logon name (pre-Windows 2000) will be changed in the above step
6. Open Exchange Management Console
7. Under Recipient Configuration click on Mailbox to view all user mailboxes
8. Right click the employee name and select Properties
9. In the General Tab
Change the Alias to match username changed in Active Directory Users and computers
Click Apply button
10. In the E-Mail Addresses Tab
SMTP address with the new name should be bold
Highlight the old address, right click and select remove
Click Apply Button, then OK
11. Update the Offline Address Book, navigate to Organization Configuration and select Mailbox
12. Select the Offline Address Book Tab
13. Right click on the Default Offline Address Book select Update
14. Click Yes in the dialog box
if re-using key-fob / ID Badge, all can be done remotely if the previous users is still in the database.
If a new one, you must do the id part in the MDF room to register the ID badge.
Remote into windu2.
Remote in as boardroom if possible, Password in KeyPass
Log into Hub Manager
Username and Password in KeyPass
Set up ID card.
Wasptime
Start WaspTime
Click Exit to close opening window
Click OK
Click Employees
Click New
Leave Employee ID at whatever it defaults
Enter Last Name and First Name, MI is optional
Badge Number is middle 5 digits of key-fob Visible ID
Enter Department, Group, and manager
Go to Security tab, put login as firstinitiallastname Example ttaylor
enter password as 4 digit pin entered with fob assignment and verify with same password.
Choose appropriate clocks for log in and log out. (The more picked, the longer the update will take when you save the employee.)
Enter name, password and verify password again here.
Click Save
Log into System Link
KDNP7-JRB7H-GBY8K-YWVYx-4JP2J
NTJVQ-3JQ94-KF8Q6-Y7CBR-CR2BY
87CVB-6NP78-YBC7D-CVJ2P-GQ4YY
To find out which machine a particular office key is installed on.
#Log into the machine
#Open an elevated command prompt
#Type the following `
##Cd\
##Dir ospp.vbs /s `
## Then change directory to the directory it is located in
#Type the follwing `
##Cscript ospp.vbs /dstatus `
It will output something like this
SKU ID: 41499869-4103-4d3b-9da6-d07df41b6e39
LICENSE NAME: Office 15, OfficeProPlusMSDNR_Retail edition
LICENSE DESCRIPTION: Office 15, RETAIL channel
LICENSE STATUS: ---LICENSED---
`Last 5 characters of installed product key: KTKKK `
---------------------------------------
---------------------------------------
---Exiting-----------------------------
It only gives the last 5 of the key, but it should be enough to identify which one is installed on it.
To resolve this issue, follow these steps:
<li>Start Internet Explorer, click Tools, and then click Internet Options.
<li>On the Connections tab, click LAN settings.
elect the Bypass proxy server for local addresses check box, and then click Advanced.
<li>Type the FQDN of the Exchange 2007 CAS server, and then click OK.
<li>Restart Outlook.
Steps to reproduce the behavior
<li>Make sure that the offline address list generation server is running Exchange 2007.
<li>On a client computer, start Internet Explorer, configure one proxy, and then clear the Bypass proxy server for local addresses check box.
<li>In Outlook, try to download the offline address book (OAB).
Use Office Deployment Tool
Create folder at C:\ labeled ODT
Change configuration file to:
<Configuration>
<Add SourcePath="C:\odt" OfficeClientEdition="32" >
<Product ID="O365ProPlusRetail">
<Language ID="en-us" />
</Product>
</Add>
<Display Level="Full" AcceptEULA="TRUE" />
<Logging Level="Standard" Path="%temp%" />
<Property Name="AUTOACTIVATE" Value="1" />
</Configuration>
NOTE - for 64 bit, change "32" to "64"
From elevated command prompt navigate to c:\ODT and run:
Setup.exe /download
After that completes, run:
Setup.exe /configure
Close all office apps
Open CMD Prompt as administrator
Cd c:\program files\microsoft office\office16
Run cscript.exe ospp.vbs /dstatus
This will give you the output of the key currently installed that has expired. Put that in the next line after the unpkey: and run
cscript.exe ospp.vbs /unpkey:BKJGP
Open word as administrator, you will not get prompted to reactivate.
"""
[[Expert SQL Server 2008|http://it-ebooks.info/read/1708/]]
[[Programming VB.net|http://www.it-ebooks.info/read/322/]] Page 204 of 782
!This is an encrypted Tiddler
There is a secure site where you retrieve PharmScreens builds, where there are also APAR.NET builds.
This is where we release software from. The URL is: https://web2.lakersoftware.com/
User: mxc
PW in KeePass
Download the latest version, copy it to approriate location.
For PharmaScreens, create a folder in \\10.10.100.150\users\UCONN
Create the folder named Pharmascreens.NET-Version Number
Move old folder to \\10.10.100.150\users\UCONN\Older Versions
Once tested, you have to make sure everyone is out of the application
To confirm everyone is out,
# Remote into the server, XVIOCI01
#in Server Manager, select Local Computer
#In tools, select "Computer Management"
#Expand Shared Folders
#Click Sessions
##This is the list of everyone with current open sessions on the server
#click Open Files
## This is the list of everyone using each file. You can look for users using c:\users\UCONN\Pharmascreens.exe
##Contact them and have them log out
copy the file from \\10.10.100.150\users\UCONN\Pharmascreens.NET-VersionNumber\Pharmascreens.exe to \\10.10.100/150\users\UCONN
Notfy Developers of the file location, request they push it to the public site.
how to update all help on a system
Update-help -module * -force -ea 0
How to get a list of common verbs
get-verb | Where group -match 'common" | Format-wide verb -auto
Set-Location = The Set-Location cmdlet sets the working location to a specified location. That location could be a directory, a
sub-directory, a registry location, or any provider path.
You can also use the StackName parameter of the Set-Location cmdlet to make a named location stack the current
location stack. For more information about location stacks, see the Notes.
Remove-Item (RI) Remove item, Can be file, directory, variable.
Get-Item (The Get-Item cmdlet gets the item at the specified location. It does not get the contents of the item at the
location unless you use a wildcard character (*) to request all the contents of the item.)
New-Item (Create Files, directories, or Variables) -value switch allows adding a text to a file during creation.
Add-Content appends content to a file
set-content overwrites value of the file
Working in Registery.
Returning only the value of the default property requires a bit of manipulation. The default property
requires using literal quotation marks to force the evaluation of the parentheses in the name.
This appears here:
PS HKCR:\> (Get-ItemProperty .\.ps1 -Name '(default)').'(default)'
Microsoft.PowerShellScript.
Shut down all computers at one time.
invoke-command -computername sql1, sql2, dc1 -scriptblock {stop-computer -force}
|specialcell|k
|!To|! Do this|
|Use an external command-line utility|Type the name of the command-line utility while inside Windows PowerShell.|
|Use multiple external command-line utilities sequentially|Separate each command-line utility with a semicolon on a single Windows PowerShell line.|
|Obtain a list of running processes|Use the Get-Process cmdlet.|
|Stop a process|Use the Stop-Process cmdlet and specify either the name or the process ID as an argument.|
|Model the effect of a cmdlet before actually performing the requested action|Use the -whatif argument.|
|Instruct Windows PowerShell to start up, run a cmdlet, and then exit|Use the PowerShell command while prefixing the cmdlet with & and enclosing the name of the cmdlet in curly brackets.|
|Prompt for confirmation before stopping a process|Use the Stop-Process cmdlet while specifying the -confirm argument.|
|Produce a list of all the files in a folder|Use the Get-ChildItem cmdlet and supply a value for the folder.|
|Produce a list of all the files in a folder and in the subfolders|Use the Get-ChildItem cmdlet, supply a value for the folder, and specify the -recurse argument.|
|Produce a wide output of the results of a previous cmdlet|Use the appropriate cmdlet and pipe the resulting object to the Format-Wide cmdlet.|
|Produce a listing of all the methods available from the Get-ChildItem cmdlet|Use the cmdlet and pipe the results into the Get-Member cmdlet. Use the -membertype argument and supply the Noun method.|
|Produce a pop-up box|Create an instance of the wshShell object by using the New-Object cmdlet. Use the Popup method.|
|Retrieve the name of the currently logged-on user|Create an instance of the wshNetwork object by using the New-Object cmdlet. Query the username property.|
|Retrieve a listing of all currently mapped drives|Create an instance of the wshNetwork object by using the New-Object cmdlet. Use the EnumNetworkDrives method.|
|Produce a listing of all variables defined in a Windows PowerShell session|Use the Set-Location cmdlet to change location to the Variable PS drive, and then use the Get-ChildItem cmdlet.|
|Obtain a listing of all the aliases|Use the Set-Location cmdlet to change location to the Alias PS drive, and then use the Get-ChildItem cmdlet to produce a listing of aliases. Pipeline the resulting object into the Where-Object cmdlet and filter on the name property for the appropriate value.|
|Delete a directory that is empty|Use the Remove-Item cmdlet and supply the name of the directory.|
|Delete a directory that contains other items|Use the Remove-Item cmdlet and supply the name of the directory and specify the -recurse argument.|
|Create a new text file|Use the New-Item cmdlet and specify the -path argument for the directory location. Supply the -name argument and specify the -type argument as file. Example: New-Item -path C:\Mytest -name Myfile.txt -type file.|
|Obtain a listing of registry keys from a registry hive|Use the Get-ChildItem cmdlet and specify the appropriate PS drive name for the -path argument. Complete the path with the appropriate registry path. Example: gci -path HKLM:\software|
|Obtain a listing of all functions on the system|Use the Get-ChildItem cmdlet and supply the PS drive name of function:\ to the -path argument. Example: gci -path function:\|
|Work interactively on a remote system|Use the Enter-PSSession cmdlet to create a remote session.|
|Configure Windows PowerShell remoting|Use the Enable-PSRemoting function.|
|Run a command on a remote system|Use the Invoke-Command cmdlet and specify the commandin a -scriptblock parameter.|
|Run a command as a job|Use the Start-Job cmdlet to execute the command.|
|Check on the progress of a job|Use the Get-Job cmdlet and specify either the job ID or the job name.|
|Check on the progress of the newest job|Use the Get-Job cmdlet and specify the -newest parameter, and supply the number of new jobs to monitor.|
|Retrieve the results from a job|Use the Receive-Job cmdlet and specify the job ID.|
|Retrieve the script execution policy|Use the Get-ExecutionPolicy cmdlet.|
|Set the script execution policy|Use the Set-ExecutionPolicy cmdlet.|
|Create a variable|Type the variable name in the script.|
|Create a constant|Use the New-Variable cmdlet and specify constant for the -option argument.|
|Loop through a collection when you do not know how many items are in the collection|Use the ForEach-Object cmdlet.|
|Read the contents of a text file|Use the Get-Content cmdlet and supply the path to the file as the value for the -path argument.|
|Delete a folder|Use the Remove-Item cmdlet and supply the path to the folder as the value for the -path argument|
|Create a function|Use the Function keyword, and provide a name and a script block.|
|Reuse a Windows PowerShell function|Dot-source the file containing the function.|
|Constrain a data type|Use a type constraint in square brackets and place it in front of the variable or data to be constrained.|
|Provide input to a function|Use the Param keyword and supply variables to hold the input.|
|To use a function|Load the function into memory.|
|To store a function|Place the function in a script file.|
|To name a function|Use Get-Verb to identify an appropriate verb and use the verb-noun naming convention.|
|!To|!Do This|
|specialcell|k
|!Parameter attribute property|!Example|!Meaning|
|Mandatory|Mandatory=$true|The parameter must be specified.|
|Position|Position=0|The parameter occupies the first position when calling the function.|
|ParameterSetName|ParameterSetName=”name”|The parameter belongs to the specified parameter set.|
|ValueFromPipeline|ValueFromPipeline=$true|The parameter accepts pipelined input.|
|ValueFromPipelineByPropertyName|ValueFromPipelineByPropertyName=$true|The parameter uses a property on the object instead of the entire object.|
|ValueFromRemainingArguments|ValueFromRemainingArguments=$true|The parameter collects unassigned arguments.|
|HelpMessage|HelpMessage=”parameter help info”|A short help message for the parameter is displayed.|
|!Parameter attribute property|!Example|!Meaning|
Get-HotFix | Export-Csv c:\hotfix.csv
|specialcell|k
|!Operator|!Description|!Example|!Result|
|-eq|Equals|$a = 5 ; $a -eq 4|False|
|-ne|Not equal|$a = 5 ; $a -ne 4|True|
|-gt|Greater than|$a = 5 ; $a -gt 4|True|
|-ge|Greater than or equal to|$a = 5 ; $a -ge 5|True|
|-lt|Less than|$a = 5 ; $a -lt 5|False|
|-le|Less than or equal to|$a = 5 ; $a -le 5|True|
|-like|Wildcard comparison|$a = "This is Text" ; $a -like "Text"|False|
|-notlike|Wildcard comparison|$a = "This is Text" ; $a -notlike "Text"|True|
|-match|Regular expression comparison|$a = "Text is Text" ; $a -match "Text"|True|
|-notmatch|Regular expression comparison|$a = "This is Text" ; $a -notmatch "Text$"|False|
|specialcell|k
|!Alias|!Type|
|[int]|A 32-bit signed integer|
|[long]|A 64-bit signed integer|
|[string]|A fixed-length string of Unicode characters|
|[char]|A Unicode 16-bit character, UTF-16|
|[bool]|A true/false value|
|[byte]|An 8-bit unsigned integer|
|[double]|A double-precision 64-bit floating-point number|
|[decimal]|An 128-bit decimal value|
|[single]|A single-precision 32-bit floating-point number|
|[array]|An array of values|
|[xml]|An XML document|
|[hashtable]|A hashtable object (similar to a dictionary object)|
<html>
<head>
<style>
table,th,td
{
border:2px solid green;
}
</style>
</head>
<body>
<table>
<col width="20">
<col width="800">
<tr>
<th>Alias</th>
<th>Type</th>
</tr>
<tr>
<td>[int]</td>
<td>A 32-bit signed integer</td>
</tr>
<tr>
<td>[long]</td>
<td>A 64-bit signed integer</td>
</tr>
<tr>
<td>[string]</td>
<td>A fixed-length string of Unicode character</td>
</tr>
<tr>
<td>[char]</td>
<td>A Unicode 16-bit Character, UTF-16</td>
</tr>
<tr>
<td>[bool]</td>
<td>A true/false value</td>
</tr>
<tr>
<td>[byte]</td>
<td>An 8-bit unsigned integer</td>
</tr>
<tr>
<td>[double]</td>
<td>A double-precision 64-bit floating-point number</td>
</tr>
<tr>
<td>[decimal]</td>
<td>An 128-bit decimal value</td>
</tr>
<tr>
<td>[single]</td>
<td>A single-precision 32-bit floating-point number</td>
</tr>
<tr>
<td>[array]</td>
<td>An array of values</td>
</tr>
<tr>
<td>[xml]</td>
<td>An XML document</td>
</tr>
<tr>
<td>[hashtable]</td>
<td>A hashtable object (similar to a dictionary object)</td>
</tr>
Get-MailboxStatistics -Database "Mailbox Database 0719488628" | Select DisplayName, ItemCount, TotalItemSize | Sort-Object TotalItemSize -Descending | Export-CSV C:\MBSizes.csv
Open PowerShell with administrator rights and run the following commands
<li>
set-executionpolicy unrestricted
<li>Import-Module C:\users\ttaylor\Downloads\Get-ProductKey.ps1
<li>get-Productkey -computername luke,10.12.116.12,windu2,ironman,xvebac01,yvebac01,plagueis,tyranus
,jaina,darthmaul,hoth,hulk,sql2014dev,10.10.110.20,xviocs01,ypiocs01,ypiocs02,deathstar,valorum,corde,ashla,padme,artoo,
corellia,cracken,jacen,nettools,ossus,tfs2013testvm1,tfsvirtual,varonis,xvioci03,xviocm03,moseisley,mosentha,mosespa,dag
obah,vader,jedi,sidious,sith,xpeocc01,xveocc02,xveocc03,yveocc01,yoda2,amidala,rxl_server,xviocf01,ppok-dev-vs2008,xvioc
701,xviocn01,pdmsvirtual,padme2,xveoci01,xveoci02,xveoci03,xveoci04,xveoci05,xveoci06,xveocr03,xveocr04,xveocr05,xvioci0
1,xvioci02,xvioci03,yveoci01,xveocr01,xveocr02,yveocr01| select-object osdescription,computername,productkey | export-csv c:\users\ttaylor\downloads\keys.csv
Get-ClusterSharedVolume | select -Expand SharedVolumeInfo | select -Expand Partition | ft -auto @{ Label = "PercentFree" ; Expression = { "{0:N2}" -f ($_.PercentFree) } }
Get-ClusterSharedVolume | select -Expand SharedVolumeInfo | select -Expand Partition | ft -auto Name,@{ Label = "Size(GB)" ; Expression = { "{0:N2}" -f ($_.Size/1024/1024/1024) } },@{ Label ="FreeSpace(GB)" ; Expression = { "{0:N2}" -f ($_.FreeSpace/1024/1024/1024) } },@{ Label= "UsedSpace(GB)" ; Expression = { "{0:N2}" -f ($_.UsedSpace/1024/1024/1024) } },@{ Label = "PercentFree" ; Expression = { "{0:N2}" -f ($_.PercentFree) } }
Change to the hightest directory you want to start at.
To search all log files for throttling and export it to a text file
dir -I *.log -R |Select-string "Throttling Limit" | Export-csv outputfile.csv
Get-MessageTrackingLog -ResultSize Unlimited -Start "3/28/2013 8:00AM" -End "3/28/2013 5:00PM" -EventId "Fail" -Sender "pat@contoso.com"
Product activation key(s):
NYQ8F-JKJ8B-FRKCK-7TMP9-YDYM4
WXDBN-Q72HF-FBMVG-22RG9-QV8WF
GBXMN-HQGM7-J87FG-F74QY-TX2JF
3FW69-XTNHK-28K6V-B4QRW-JFJWF
QJJNP-BKB9J-GQFTB-KKDGR-2KFB4
PTYNR-29FV9-PY37T-87BD4-KBWWF
Note: CALs are granted access upon installation of the product key code. Please reference your invoice for additional information.
Host Machine Activation Keys (Not Applicable with ESXi)
These licenses will be used to license your virtual machines. There is no activation limit on these licenses. ESXi Compatible
The following MAK keys can be used for Windows Server 2019.
MAK key
Datacenter: G3M9N-2Y36T-Y6J6D-MGXBG-C92H7
Standard: KT9NC-C9PFT-HFF9Y-34CM8-D9QFD
Essentials: NT8BR-VWRGQ-JRYHT-8DKCT-WXFC7
Site 2:
Product activation key(s):
CN894-GT3B8-Y7FMV-GYCCJ-BWT4R
MNYF9-QKV43-KFTJB-BDHG4-W8HY4
CPNMR-FQHWK-Q86R8-24RQP-BTF8F
QHHHB-4N42C-TTW3Q-QF9MH-T3DFR
XY6M3-NX3RH-M7HYY-VR43V-R9FB4
3KNJ6-H4R3C-7CBD4-FP4JD-VXQFR
These licenses will be used to license your virtual machines. There is no activation limit on these licenses. ESXi Compatible
The following MAK keys can be used for Windows Server 2019.
MAK key
Datacenter: KNWRW-2HJT3-JHF97-YV32C-P92H7
Standard: RBMB7-NDT2P-GC4M7-GJJFC-HH8V3
Essentials: F7GN9-4C7QC-C647K-9B7JP-FYBP7
Kessel.ppok.com
Members:Jedi,Sidious, Sith
Avengers - XCIOS00.ppok.com
Members: Ironman, SPIOCS01, XPIOCS02,
Office Pro Plus 2010 YJV7V-QY8TR-PT3BF-684JF-CR96Y DBA Intern
FBJVC-3CMTX-D8DVP-RTQCT-92494
Windows 2k12R2 - KDNP7-JRB7H-GBY8K-YWVYX-4JP2J
"""
Module Module1
Sub Main()
Dim x = 0
Dim y = 0
Dim a = 0
Dim b = 0
'Assignment operator
x = 3
'Addition Operator
x = 3 + 4
'Subtraction operator
x = 4 - 3
'Multiplication operator
x = 10 * 5
'Division operator
x = 10 / 5
'Equality operator
If x = y Then
'stuff goes here
End If
'Greater than operator
If x > y Then
'stuff goes here
End If
'Less than operator
If x < y Then
'stuff goes here
End If
'Greater or equal to operator
If x >= y Then
'stuff goes here
End If
'less or equal operator
If x <= y Then
'stuff goes here
End If
'Conditional OR operator
If x > y Or a > b Then
'stuff goes here
End If
'Conditional AND operator
If x > y And a > b Then
'stuff goes here
End If
'Member access and method invocation
Console.WriteLine("hi!")
End Sub
End Module
"""
https://etherpad.mozilla.org/
1)Backup SAB
2) Backup NZB Drone
3) Copy Configurations and API keys from everything
4) Hook up HDHomeRun to network
5) Install Linux (Ubuntu x64)
6)Install FFMPEG from source
7)Install MythTV
8)Configure Schedules Direct, Commercial Detection
9)Install MythicalLibrarian
10)Install Plex Media Server
11)Install NZB Drone
12) Install SAB
13)Setup conversion Scripts
14)Setup Cron Tabs
15) Install PlexApp for mythTV
After you download and install the cisco anyconnect software, there is a registry key you need to edit.
It is:
HKLM\System\CurrentControlSet\Services\VPNVA
Display name will be something like
@oem20.inf,%vpnva_Desc%;Cisco AnyConnect VPN Virtual Miniport Adapter for Windows x64
Change it to
Cisco AnyConnect VPN Virtual Miniport Adapter for Windows x64
Save and re-connect
#Go to Avaya IP Office Manager
##Username Administrator
##PW in KeePass
#Go to Incoming Call Routes.
#Find incoming number to see it's destination
#Go to users
#Find Destination
#Select Forwarding TAB.
##Un-Check Forward unconditional box
##Un-Check Forward on Busy Box
#Click OK
#Save
#Merge
#Exit
When someone has been granted full access to a folder, and it is later removed, it will not automatically remove from their list of folders in Outlook 2013.
<li> Open Active Directory Users and Computers
<li> Go to View menu and select Advanced Features
<li>Open the user account that is showing in your mailbox (in the screenshot, my mailbox is in Mary's profile)
<li> Open the Properties dialog
<li> Click Attribute Editor tab
<li> Locate MsExchDelegateListLink
<li> Click Edit
<li> Remove your name from the attribute
<li> Close the dialogs
<li> exit and re-open outlook
<li>
Alternate method
#Log into Exchange Server
#Open Exchange Management shell
#Run this command
##"Add-MailboxPermission -Identity {shared mailbox alias} -User {mailbox of user with shared email being removed} -AccessRights FullAccess -InheritanceType All -Automapping $false"
<CR>
4.exit and re-open outlook in a few minutes the box will go away.
To enable Sender ID
Set-SenderIDConfig -Enabled $true (Already done in XVIOCX01)
This example configures the Sender ID agent to bypass the Sender ID check for messages sent to user1@contoso.com and user2@contoso.com, and to bypass the Sender ID check for messages sent from the steampowered.com domain.
Set-SenderIDConfig -BypassedRecipients scopeland@ppok.com, jwallis@ppok.com; jwallis@gcppharms.com, scopeland@ppok.com, rrentsch@ppok.com -BypassedSenderDomains torrentpharma.us
1. Login as sa or another user that has been setup with SQL permissions to create a new user.
2. Open the User Setup window (Microsoft Dynamics GP > Tools > Setup > System > User).
a. Enter a User ID and User Name – these are the only required fields in this window.
b. In the Password field, either enter a password for this user or leave it blank – if left blank, the user will be able to create their own password when they first log in.
c. For all other settings, look at a similar user to determine the settings.
d. Choose Copy Access if there is an existing user that you want to copy security settings from, such as roles, tasks, and company access. If not, proceed to step three.
e. In the Copy User Security window, select the User ID that you would like to copy security settings from and Click OK. This completes the setup of this user.
3. Open the User Access Setup window (Microsoft Dynamics GP > Tools > Setup > System > User Access) and select the new User ID.
a. Mark all companies under the Access column that you wish this user to have access to. Click OK.
4. Open the User Security Setup window (Microsoft Dynamics GP > Tools > Setup > System > User Security).
a. Select the new User ID and a company that you have assigned this user to have access to.
b. Mark any Security Role IDs that this user should be assigned to and select an Alternate/Modified Forms and Reports ID.
c. Click Save to complete the setup. If you have multiple companies, move on to the next step.
5. To copy the security across all companies, click Copy and select all companies and click OK. If security for this user should be different across different companies, repeat steps twelve to thirteen for each company.
Grant the new user the role “POWERUSER” if you want the user to have full access to the system.
If a blank password is left for a new user, the new user will only need to enter their user ID when they first log in – it will then prompt them to enter a new password.
Instead of going through the menu to open each window, you can simply click on the Administration tab in the Navigation Pane.
Open Avaya IP Office Manager
Go to users
Under Short Codes add:
Code: *99*N#
Feature: Call Listen
Telephone Number: N
Line Group: 0
Local:Blank
Force Account Code :NOT CHECKED
Go to Telephony
Change Monitor Group: Monitoring Group
Put Check in Can Intrude
Click Save
Make sure configuration is set to merge
click ok
Enter Administrator password.
#Log into Corde
#Open EFT Server
##Username EFTadmin, PW in KeePass
#Expand the site you want to add the user to
#Expand UserSettings Templates
#Expand PPOK User Settings
#Right Click PPOK User Settings
#Click New User. Enter the following
##Username (This is what they will log in as.)
##Click Generate Password.
##Copy password
##Click Details and paste the password into the comments section of details.
#Click Next
#Click Groups
#Double Click FTP Users, Click OK
#Click Next
#Uncheck FTP
#Click Finish
If you are setting up a new user, this works, you are done close it.
If you are editing a user, you will have to click the apply button to make the changes.
Create email with Site, Port, Protocol, Username and password and send it to the requester.
Standard FTP Port 21, Protocol FTP, Secure FTP Port 22, Protocol SFTP
"""
ATT DSL
squid
cache
192.168.1.108:3128
Exclude Internal Put the list below
192.168.0.0/16
192.168.*
172.20.*
otl-upt.com
"""
*SELECT
**extracts data from a database
*UPDATE
**updates data in a database
*DELETE
**deletes data from a database
*INSERT INTO
**inserts new data into a database
*CREATE DATABASE
**creates a new database
*ALTER DATABASE
**modifies a database
*CREATE TABLE
**creates a new table
*ALTER TABLE
**modifies a table
*DROP TABLE
**deletes a table
*CREATE INDEX
**creates an index (search key)
*DROP INDEX
**deletes an index
|specialcell|k
|!Data type|!Access|!SQLServer|!Oracle|!MySQL|!PostgreSQL|
|boolean|Yes/No|Bit|Byte|N/A|Boolean|
|integer|Number (integer)|Int|Number|Int Integer|Int Integer|
|float|Number (single)|Float Real|Number|Float|Numeric|
|currency|Currency|Money|N/A|N/A|Money|
|string (fixed)|N/A|Char|Char|Char|Char|
|string (variable)|Text (<256) Memo (65k+)|Varchar|Varchar Varchar2|Varchar|Varchar|
|binary object|OLE Object Memo|Binary (fixed up to 8K)Varbinary (<8K)Image (<2GB)|Long Raw|Blob Text|Binary Varbinary|
|specialcell|k
|!Data type |!Description|
|CHARACTER(n)|Character string. Fixed-length n |
|VARCHAR(n) or CHARACTER VARYING(n)|Character string. Variable length. Maximum length n|
|BINARY(n)|Binary string. Fixed-length n|
|BOOLEAN|Stores TRUE or FALSE values|
|VARBINARY(n) or BINARY VARYING(n)|Binary string. Variable length. Maximum length n|
|INTEGER(p)|Integer numerical (no decimal). Precision p|
|SMALLINT|Integer numerical (no decimal). Precision 5|
|INTEGER|Integer numerical (no decimal). Precision 10|
|BIGINT|Integer numerical (no decimal). Precision 19|
|DECIMAL(p,s)|Exact numerical, precision p, scale s. Example: decimal(5,2) is a number that has 3 digits before the decimal and 2 digits after the decimal|
|NUMERIC(p,s)|Exact numerical, precision p, scale s. (Same as DECIMAL)|
|FLOAT(p)|Approximate numerical, mantissa precision p. A floating number in base 10 exponential notation. The size argument for this type consists of a single number specifying the minimum precision|
|REAL|Approximate numerical, mantissa precision 7|
|FLOAT|Approximate numerical, mantissa precision 16|
|DOUBLE PRECISION|Approximate numerical, mantissa precision 16|
|DATE|Stores year, month, and day values|
|TIME|Stores hour, minute, and second values|
|TIMESTAMP|Stores year, month, day, hour, minute, and second values|
|INTERVAL|Composed of a number of integer fields, representing a period of time, depending on the type of interval|
|ARRAY|A set-length and ordered collection of elements|
|MULTISET|A variable-length and unordered collection of elements|
|XML|Stores XML data|
String Types
|specialcell|k
|!Data type|!Description|!Storage|
|char(n)|Fixed width character string. Maximum 8,000 characters|Defined width|
|varchar(n)|Variable width character string. Maximum 8,000 characters|2 bytes + number of chars|
|varchar(max)|Variable width character string. Maximum 1,073,741,824 characters|2 bytes + number of chars|
|text|Variable width character string. Maximum 2GB of text data|4 bytes + number of chars|
|nchar|Fixed width Unicode string. Maximum 4,000 characters|Defined width x 2|
|nvarchar|Variable width Unicode string. Maximum 4,000 characters||
|nvarchar(max)|Variable width Unicode string. Maximum 536,870,912 characters| |
|ntext|Variable width Unicode string. Maximum 2GB of text data| |
|bit|Allows 0, 1, or NULL| |
|binary(n)|Fixed width binary string. Maximum 8,000 bytes| |
|varbinary|Variable width binary string. Maximum 8,000 bytes| |
|varbinary(max)|Variable width binary string. Maximum 2GB| |
|image|Variable width binary string. Maximum 2GB||
Number types:
|specialcell|k
|!Data type|!Description|!Storage|
|tinyint|Allows whole numbers from 0 to 255|1 byte|
|smallint|Allows whole numbers between -32,768 and 32,767|2 bytes|
|int|Allows whole numbers between -2,147,483,648 and 2,147,483,647|4 bytes|
|bigint|Allows whole numbers between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807|8 bytes|
|decimal(p,s)|Fixed precision and scale numbers.<p>Allows numbers from -10^38 +1 to 10^38 –1. </p> <p>The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.</p><p>The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0</p>|5-17 bytes|
|numeric(p,s)|Fixed precision and scale numbers.<p>Allows numbers from -10^38 +1 to 10^38 –1.</p><p>The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.</p><p>The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0</p>|5-17 bytes|
|smallmoney|Monetary data from -214,748.3648 to 214,748.3647|4 bytes|
|money|Monetary data from -922,337,203,685,477.5808 to 922,337,203,685,477.5807|8 bytes|
|float(n)|Floating precision number data from -1.79E + 308 to 1.79E + 308.<p>The n parameter indicates whether the field should hold 4 or 8 bytes. float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default value of n is 53.</p>|4 or 8 bytes|
|real|Floating precision number data from -3.40E + 38 to 3.40E + 38|4 bytes|
Date Types
|specialcell|k
|!Data type|!Description|!Storage|
|datetime|From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 milliseconds|8 bytes|
|datetime2|From January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds|6-8 bytes|
|smalldatetime|From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute|4 bytes|
|date|Store a date only. From January 1, 0001 to December 31, 9999|3 bytes|
|time|Store a time only to an accuracy of 100 nanoseconds|3-5 bytes|
|datetimeoffset|The same as datetime2 with the addition of a time zone offset|8-10 bytes|
|timestamp|Stores a unique number that gets updated every time a row gets created or modified. The timestamp value is based upon an internal clock and does not correspond to real time. Each table may have only one timestamp variable||
Other Data Types
|specialcell|k
|!Data type|!Description|
|sql_variant|Stores up to 8,000 bytes of data of various data types, except text, ntext, and timestamp|
|uniqueidentifier|Stores a globally unique identifier (GUID)|
|xml|Stores XML formatted data. Maximum 2GB|
|cursor|Stores a reference to a cursor used for database operations|
|table|Stores a result-set for later processing|
A ~StyleSheet tiddler is a system tiddler in which a user can add CSS in order to change the appearance of a ~TiddlyWiki. You can create a ~StyleSheet tiddler by
*creating a new tiddler,
*entitling it $:/~StyleSheet,
*and tagging it $:/tags/stylesheet.
Support for TMW software at UPT consists of three separate groups of people. Please read the following, which identifies these groups, each of their supporting roles, and how you can contact them as needed.
UPT’s own “TMW Super Users”
The goal of our internal training group (Frank Adams and our “TMW Super Users”) is to provide the skills necessary for completing the vast majority of tasks required in TMW software on a day-to-day basis. When something does not work as intended, or we don’t understand how to perform a particular task in TMW, our local/regional “TMW Super Users” are a good place to start.
NEEDING ADDITIONAL INFO: I think it would be a good idea to provide a call group or email group for the “TMW Super Users”. We could publish names and contact info in the TMW wiki (which I think we still need to set up)
TMW Systems Support
UPT pays for TMW support annually as part of our software licensing and services agreement. With this, we get a dedicated and knowledgeable support team that we can utilize when we are having difficulty using their software. Generally speaking, the TMW support group is most knowledgeable on all components of our TMW Systems software.
Initiating a Support Request (by phone or email)
Our TMWSuite support team is SupportTeam-2@tmwsystems.com or (800) 663-0626 (6, 1, 2)
<div style="margin-left: 3em;">
Customers Only - Technical Support
For better service, the large numer of TMWSuite customers are supported by three cross-disciplinary tecnical support teams. Each team is dedicated to a particular group of customerrs to learn their unique business needs and operational styles. Please take a moment to confirm your company's TMWSuite support team number before contacting TMW, or use the "Contact Us" link above to send in a general support inquiry that will then be directed to the appropriate team.
TMWSquite solutions center / TTS
Phone (800) 663-0626, Press 6, then 1, then the number matching your support team
email - Please know which TMWSuite support team works with your company:
supportteam-1@tmwsystems.com
supportteam-2@tmwsystems.com
supportteam-3@tmwsystems.com</div>
The TMW AMS (TMW/Transman) Suppport team is tmsupport@tmwsystems.com or (800) 633-0626 (6, 3)
<div style="margin-left: 3em;">Asset Maintenance Solutions Center (formerly, TMT Software, Transman)
Phone (800) 663-0626. Select option 6, then 3 for support.
Email: tmtsupport@tmwsystems.com
</div>
TotalMail support is totalmailsupport@tmssystems.com or (800)633-0626 (6, ?)
TMW Imaging support is imagingsupport@tmwsystems.com or (800)633-0626 (6, ?)
Initating remote support sessions (if requested by TMW Support)
NEEDING SCREENSHOT OF SHORTCUT ON DESKTOP ALONG WITH INSTURCTIONS
UPT’s Information Services/Technology Department
Most of our knowledge stems from debugging new software installations, upgrades, or component integrations. We have an overall understanding of many of the high-level components and functions of TMW Systems software, but we do not work within these products on a daily basis like most of our UPT staff. We are best geared to get involved when problems are not solved by our “TMW Super Users” or the knowledgeable TMW Support Teams. Our typical engagement is mostly working with TMW Support on a difficult case where we need to change software configurations, re-install software, run database queries, or perform other tasks that no one else has access or expertise to perform.
|!Company|!Number|
|Fax-2-mail|866-323-9707|
Set-DistributionGroup -Identity 'ppok.com/PPOK Groups/analytics'-BypassSecurityGroupManagerCheck -ManagedBy 'michael williams', 'tim taylor','steve dickson'
<li>Padme Drive
<li>Ossus Drive
<li> Drive Array Drive
<li> Exchange Virtual
<li> excel locking up SzuChu
<li> OPHA access file imported to Access 2013
<li>Badge Pictures ready to print
<li>Badges imported
<li>Credentling PC Rebuild
<li>Visio with Steve
<li> Database for Hubman
<li>Authentication test off Valorum
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
Total Console
\operations ar usefull tuools
\home\admin\accounting\billing - Programs location
Topic Notes: Additional Plug-in Installation
vCenter Server provides a means for adding functionality to the core services of vCenter Server via plug-ins. As an administrator implements new products or functionality within vCenter, plug-ins are often times installed to provide an interface and configuration components to vCenter Server for the new product or feature.
Update Manager
Software patches are an unfortunate fact of life in today's IT departments. Most organizations recognize that software updates are necessary to correct problems or flaws and to add new features. Fortunately, VMware offers a tool to help centralize, automate, and manage these patches for vSphere. This tool is called vSphere Update Manager (VUM).
VUM is a tool designed to help VMware administrators automate and streamline the process of applying updates, which could be patches or upgrades to their vSphere environment. VUM is fully integrated within vCenter Server and offers the ability to scan and remediate ESXi hosts, host extensions (such as EMC's Powerpath/VE multipathing software), older ESX and ESXi hosts (circa 3.5, 4.0, and 4.1), and virtual appliances. VUM can also upgrade VMware Tools and VM hardware.
VUM integrates itself tightly with vSphere's inherent cluster features. It can use the Distributed Resource Scheduler (DRS) for non-disruptive updating of ESX/ESXi hosts by moving its VMs between hosts in the cluster and avoiding downtime The whole VUM experience is fully synthesized with vCenter, allowing the configuration and remediation work to be carried out in the same vSphere Client. VUM uses two views – the Administrative view, where you can configure VUM settings and manage baselines, and a Compliance view, where you can scan and remediate vSphere objects. It can identify when hardware upgrades and VMware Tools are needed and combine them into a single, actionable task. To help keep your vSphere environment patched and up to date, VUM utilizes your company's Internet connection to download information about available updates, the products to which those updates apply, and the actual updates themselves. Based on rules and policies that are defined and applied by the VMware administrator using the vSphere Client, VUM will then apply updates to hosts and VMs.
ESXi Dump Collector
The VMware vSphere Dump Collector allows an administrator to specify a location for a memory dump file of an ESXi host should it encounter a critical failure. Typically, memory dumps are configured to be transmitted to a centralized server which is running a remote netdump service, rather than a disk-based coredump collection.
ESXi Syslog Collector
VMware Syslog Collector allows ESXi system logs to be stored on a remote server as opposed to a local disk. When used with vCenter Server, as opposed to a standalone implementation, an architecture and process for storing and reviewing ESXi system logs is integrated into vCenter Server. Note that the Syslog Collector in not supported in previous versions of vCenter Server and does not need to be installed on the same machine as vCenter Server.
Auto Deploy
When ESXi is deployed using vSphere Auto Deploy, you aren't actually installing ESXi (hence, the usage of the word deploy). Instead of installing ESXi onto a local disk or a SAN boot LUN, an environment is created where ESXi is directly loaded into memory on a physical host as it boots.
vSphere Auto Deploy uses a set of rules (called deployment rules) to control which hosts are assigned a particular ESXi image (called an image profile). Because ESXi isn't actually installed on the local disks, this means that deploying a new ESXi image is as simple as modifying the deployment rule to point that physical host to a new image profile and then rebooting. When the host boots up, it will receive a new image profile.
While the end result seems simplistic, there is plenty of planning and configuration one will need to do in order to create an efficient and workable Auto Deploy environment, including the installation and configuration of an Auto Deploy and TFTP server.
Authentication Proxy
As a general rule, any time objects are presented to Active Directory, authentication credentials are required. The vSphere Authentication Proxy provides a means for allowing an ESXi host to join a domain without using Active Directory credentials. By allowing the authentication proxy to provide needed authentication information, Active Directory credentials and security information do not need to be stored in the host configuration file when used with Auto Deploy.
Topic Notes: Configure ESXi via the DCUI
Whether you are installing from a CD/DVD or performing an unattended installation of ESXi, once the installation is complete, there are several post-installation steps that are necessary or might be necessary, depending on your specific configuration. Post configuration tasks with the DCUI may include:
Providing a root password
Configuring static IP information (assuming DHCP is not used)
DNS and Host Name information
Configure and test the Management Network to ensure connectivity
ESXi Configuration via DCUI
The basic steps for configuring an ESXi host via the DCUI are listed here:
Step 1: F2 to Login or F12 to Shutdown/Restart
Step 2: Login/Authenticate account
Step 3: System Customization
Step 4: Configure Password
Step 5: Configure Lockdown Mode (grayed out)
Step 6: Configure Management Network
Network Adapters
VLAN
IP Configuration
IPv6 Configuration
DNS Configuration
Custom DNS Suffixes
Step 7: Restart Management Network
Step 8: Test Management Network
Step 9: Restore Network Settings
Step 10: Restore Standard Switch
Step 11: Configure Keyboard
Step 12: Troubleshoot Options
Enable ESXi Shell
Enable SSH
Modify ESXi Shell Timeouts
Restart Management Agents
Step 13: View System Logs
Syslog
VMKernel
Config
Management Agent (Hostd)
Virtual Center Agent (vpxa)
VMware ESXi Observation Logs (vobd)
Step 14: View Support Information
Step 15: Reset System Configuration
Topic Notes: Configure ESXi via vCenter Server
Configure ESXi via the vCenter Server
While the steps to configure an ESXi hosts via vCenter Server are similar, the first thing one might notice is the additional options available when using vCenter Server. Remember vCenter Server provides an inventory of several objects within your vSphere environment, as well as adds additional functionality and feature sets.
When using vCenter Server, one needs to take into account how vCenter Server will inventory the ESXi host. The first consideration is typically where the ESXi host will reside in the vCenter Server inventory (in which datacenter, will this host be part of a cluster, etc.). Once a location is decided upon, the ESXi host can be added to vCenter Server by providing a hostname or IP address of the host.
Topic Notes: Configure ESXi via vSphere Client
You can configure an ESXi host by using the vSphere Client to connect directly to the host. Note that when connected to an ESXi host directly, the information displayed in the vSphere Client (Inventory, Permissions, etc) pertain only to that specific host. If for example an administrator is configuring security roles or viewing logging information, they need to keep in mind that unlike connecting to the host via vCenter Server, only host-specific information can be configured.
Common configuration tasks include license configuration, setting time sources, IP configuration, such as IP address, DNS, hostname and routing, and configuring Active Directly integration.
In vSphere Client, the tabs in the details pane provide some host-management features. Additional commands may be added as extensions are installed into vCenter Server or depending on the ESXi host's configuration. Here is an example of a few of the tabs that are displayed when a host is selected in the Inventory view, along with a brief description of what each tab does:
Tabs and their description
|!Tab|!Description|
|Getting Started|This tab facilitates the construction of a new datacenter.|
|Summary |This tab gathers and displays information about the underlying physical hardware, the storage devices that are configured and accessible, the networks that are configured and accessible, and the status of certain features such as vMotion and vSphere FT. In addition, the Commands area of the Summary tab provides links to commonly performed host-management tasks.|
|Virtual Machines|This tab lists the VMs currently running on the selected host. The list of VMs also provides summary information on the VMs' status, provisioned versus used space, and how much CPU and RAM the VMs are actually using.|
|Resource Allocation|This tab displays the breakdown of resource allocation on an ESXi host.|
|Performance|This tab displays performance information for the host, such as overall CPU utilization, memory utilization, disk I/O, and network throughput.|
|Configuration|This tab is where you will make configuration changes to the host. Tasks such as configuring storage, changing security settings, configuring hardware, license configuration, and setting time sources are performed here. IP configuration, such as IP address, DNS, hostname and routing, and configuring Active Directly integration are also all performed here.|
|Local Users & Groups|This tab displays local users and groups. It allows the creation of new users or groups, editing existing users or groups including changing the password, and deleting users and groups.|
|Tasks & Events|All tasks and events related to the selected host are displayed here. The Tasks view shows all tasks, the target object, the account that initiated the task, the vCenter Server that was involved, and the result of the task. The Events view lists all events related to the selected host.|
|Alarms|This tab shows either triggered alarms or alarm definitions. If a host is using almost its entire RAM or if a host's CPU utilization is very high, you may see some triggered alarms. The Alarms Definition section allows you to define your own alarms.|
|Permissions|This tab shows permissions on the selected host. This includes permissions inherited from parent objects or containers as well as permissions granted directly to the selected host.|
|Maps|This tab shows a graphical topology map of resources and VMs associated with that host.|
|Storage Views|This tab brings together a number of important storage related pieces of information. For each VM on the selected host, the Storage Views tab shows the current multi-pathing status, the amount of disk space used, the amount of snapshot space used, and the current number of disks.|
|Hardware Status|This tab displays sensor information on hardware components such as fans, CPU temperature, power supplies, network interface cards (NICs) and NIC firmware, and more. For example let's say you want to configure time synchronization for your ESXi host using vSphere Client. You perform the following steps to enable NTP using vSphere Client:|
Use vSphere Client to connect directly to the ESXi host.
Select the hostname from the inventory tree, and then click the Configuration tab in the details pane.
Select Time Configuration from the Software menu.
Click the Properties link.
In the Time Configuration dialog box, select NTP Client Enabled, and then click the Options button.
In the NTP Daemon (ntpd) Options dialog box, select the NTP Settings option and add one or more NTP servers to the list.
Check the box marked Restart NTP Service To Apply Changes and then click OK.
Click OK to return to the vSphere Client. The Time Configuration area will update to show the new NTP servers.
Perform these steps to configure your ESXi host to use Active Directory as its centralized security authority:
Log into the ESXi host using the vSphere Client and authenticate with the root account (or an equivalent account)
Select the ESXi host from the inventory and click the Configuration tab
From the Software section, select Authentication Services
Click the Properties link
In the Directory Services Configuration dialog box, select Active Directory from the Select Directory Service Type drop-down list
Supply the DNS domain name of the Active Directory domain that this ESXi host will use for authentication
Click the Join Domain button
Specify a username and password that has permission to allow the host to join the domain
Once the ESXi host is joined to Active Directory, users will be able to authenticate to an ESXi host using their Active Directory credentials.
Topic Notes: Configuring the VCSA Console and Browser
VCSA Console Configuration
The VCSA configuration is a text-based configuration menu that allows you to
Configure your Network setting: You will be able to set IPv4, subnet and gateway.
Apply the correct time to the VCSA: If the VCSA is installed on a host, it will automatically sync to the host's time.
Get the URL information associated with the VCSA.
VCSA Browser Configuration Process Overview
Open the browser configuration page to manage your appliance by entering the IP address of the VCSA server (example, https://xxx.xxx.xxx.xxx:5480/). You will be prompted to accept the End User License Agreement.
You will be allowed to do the following through browser configuration:
• Change Password
• Configure Network
• Time Zone
• Configure Updates
• Reboot
• Start/Stop vCenter Services such as Syslog, NetDump, and Auto Deploy
• Login with vSphere Client
• Create/Add Inventory
Topic Notes: Deploying vCenter Server Appliance
VCSA Primer
The vCenter Server Appliance (VCSA) provides centralized management of your vSphere virtual environment packaged within a Linux distribution. This is the same functionality provided by vCenter Server, which is Windows-based.
Some of the highlights:
Installed on SUSE Linux Enterprise Server 11x64
2vCPUs, 8GB RAM, and 80GB HD (can be less if using less hosts and virtual machines)
Included database (PostgreSQL) supports:
5 ESXi Hosts
50 virtual machines
Can be linked to Oracle database for larger environments
Hosts must be ESX/ESXi 4.x and up
Thin provision disk 8GB maximum
Can use existing Active Directory or NIS for authentication
Key features not provided by VCSA that can be found in vCenter Server:
No Support for Microsoft SQL, or DB2 as a remote database
No Linked Mode
Deploying VCSA
The first step in deploying vCenter Server Appliance is to download the binaries from VMware.com. To do this, you must have a registered account with VMware. The download consists of three files – an .ovf file, and two .vmdk files (data and system). Make sure to download the version of VCSA that correlates to the version you use in your environment. Make sure the files are accessible to the vSphere Client.
Once the download is completed, import into an ESXi host using the vSphere Client. Make sure the vSphere Client is directly connected to the host you are installing the VCSA on. You will also want to make sure that you have a management network available on the host.
After verification is complete, on the vSphere Client, go to File - Deploy OVF Template. Browse to the location of the .ovf file previously downloaded and continue the deployment process. At this time, you can alter the amount of memory you require for your installation. When you have finished deploying the template, power on the VCSA and log into the machine using the default password VMware and username root.
Topic Notes: ESXi Installation Options and Requirements
ESXi Installation Options
As of the 5.0 release, vSphere no longer includes ESX. In previous versions of vSphere, users had to choose between using ESX—with the full Linux-based Service Console—or ESXi. Now, with this release of vSphere, ESXi is the only form of the VMware hypervisor available. Even though users no longer need to choose between ESX and ESXi, they do need to choose which variant of ESXi they will use, ESXi Installable or ESXi Embedded. ESXi Installable is the 'traditional' form of the vSphere hypervisor.
ESXi Embedded refers to the original equipment manufacturer (OEM) installation of the vSphere hypervisor onto a persistent storage device inside qualified hardware. This is an exciting option that saves administrators the time to perform any type of installation.
When it comes to installing ESXi, you have several standard media options for the installation. You can download a 60-day evaluation copy from the VMware website and:
Create a bootable installation CD/DVD and boot the ESXi host to the optical drive to start the installation
Format a USB Drive to boot to or store the ESXi installer
PXE boot the ESXi installer
There are some different ways to install ESXi, including:
Interactive
A traditional means of installation, typically used when a small number of ESXi installations are required. The interactive installation prompts the user for information as the installation proceeds.
Scripted
ESXi supports the use of an installation script (answer file) that automates the installation routine. By using an installation script, administrators can create unattended installation routines that make it easy to quickly deploy multiple instances of ESXi.
Auto Deploy
ESXi is directly loaded into memory on a physical host as it boots. vSphere Auto Deploy uses a set of rules (called deployment rules) to control which hosts are assigned a particular ESXi image (called an image profile). Because ESXi isn't actually installed on the local disks, this means that deploying a new ESXi image is as simple as modifying the deployment rule to point that physical host to a new image profile and then rebooting. When the host boots up, it will receive a new image profile. Image Builder CLI can be used to create and edit custom image profiles used with Auto Deploy.
ESXi Server Pieces
Compared to traditional operating systems like Windows or Linux, ESXi has more stringent hardware restrictions. ESXi won't necessarily support every storage controller or every network adapter chipset available on the market. ESXi Embedded, in particular, has a strict list of supported hardware platforms.
VMware offers a Compatibility Guide, located on their website, which allows you to search for compatible systems (as well as other hardware components):
http://www.vmware.com/resources/compatibility/search.php
ESXi Server Hardware Requirements
As mentioned before, ESXi has relatively rigid hardware requirements. Don't forget to refer to the VMware Compatibility website (HCL) when selecting server hardware.
ESXi Interactive Installation
Installation tasks for an ESXi Interactive Installation have been consolidated below:
Ensure that your server hardware is configured to boot from the CD-ROM drive. This will vary from manufacturer to manufacturer and will also depend on whether you are installing locally or remotely via an IP-based KVM or other remote management facility.
Ensure that VMware ESXi installation media are available to the server. Again, this will vary based on a local installation (which involves simply inserting the VMware ESXi installation CD into the optical drive) or a remote installation (which typically involves mapping an image of the installation media (ISO Image) to a virtual optical drive).
Power on the server. Once it boots from the installation media, the initial boot menu screen displays, Press Enter to boot the ESXi installer. The installation process itself is relatively quick and easy. After installation, post-installation configuration is required.
Topic Notes: Installing vSphere Client
Installing vSphere Client
In previous versions of VMware vSphere, one of the easiest vSphere Client installation methods was to simply connect to an ESX/ESXi host or a vCenter Server instance using a web browser. From there, one clicked on a link to download the vSphere Client right from the web page. In vSphere 5, the vSphere Client download link for ESXi hosts doesn't point to a local copy of the installation files; it redirects to a VMware-hosted web site to download the files. The vSphere Client download link for vCenter Server 5, though, still points to a local copy of the vSphere Client installer. Regardless of how the installer is obtained, the installation process is the same once the installation wizard begins.
vSphere Client
The vSphere Client has the following requirements:
500 MHz or faster CPU
1 GB RAM
1.5 GB free disk space (includes prerequisites of .NET and Visual J#)
Gigabit Networking
MS Windows Operating System
.NET 3.5 SP1
vSphere Client Configuration
The vSphere client can be configured by accessing the Client Settings from the Edit menu. The General tab allows for the configuration of the behavior of client timeout settings, maximum pop-out console windows, the display of hints, and turning off the Getting Started tabs. Sizes of Lists and Maps can also be configured.
Topic Notes: Installing vSphere Web Client
vSphere Web Client
The vCenter Server Web Client offers a subset of the full functionality available in the Windows-based vSphere Client. Most day-to-day administrative tasks and maintenance can be accomplished, making it an ideal client for Network Operations Centers (NOCs) and Helpdesk staff.
The vSphere Web Client has the following requirements:
Quad-Core 2 GHz CPU
2 GB RAM (minimum)
Adobe Flash 10.1.x
vCenter Server is accessed via http
Supported browsers include Internet Explorer 7 & 8 and Mozilla Firefox 3.6
vSphere Web Client Installation
A required server component must first be installed before accessing an ESXi host via your browser. The installer is a standard wizard, prompting the user for their name and organization, desired ports, and installation location.
vSphere Web Client Configuration
Assuming default ports were configured during installation, the vSphere Web Client Administration tool can be launched from https://{vCenter Server Name}:9443/admin-app. From here, vCenter Server can be registered by providing the name of the vCenter Server and login credentials.
Logging in to vCenter Server
Depending on the client, the login procedure is different.
vSphere Client Login:
Launch the vSphere Client from the Desktop or Program Files Menu
Login with your credentials
Customize client if necessary
vSphere Web Client Login:
Launch browser and access:
https://vcenterServerName:9443//vsphere-client
Login (Domain\Username)
<ol>
<li><span style="background-color: #00ccdd">Check your Logs</span></li>
<li><span style="background-color:#64FE2E">Install the corresponding vSphere Client Version</span></li>
<li><span style="background-color: #FFFF00">Add/Install License</span></li>
<li><span style="background-color: #00ccdd">Upgrade Modules / Plugins</span></li>
<li><span style="background-color:#64FE2E">Verify SSL Cert Check for hosts that are in the cluster</span></li>
<li><span style="background-color: #FFFF00">Join linked mode if applicable</span></li>
<li><span style="background-color: #00ccdd">Confirm additional administrative settings</span></li>
<li><span style="background-color:#64FE2E">Verify permissions, users, roles, etc.</span></li>
Topic Notes: Preparing to Upgrade vCenter Server
Preparation Work
It is important that prior to beginning the upgrade process of vCenter Server, you are aware of all the preparations necessary to complete this process. You will want to ensure that all the currently used software and hardware are able to handle the upgrade process without issue.
When upgrading, it is also important to note any hardware requirement changes and ensure that those requirements are met by the hardware you intend to use. Upgrading presents a perfect opportunity to make any hardware changes needed for either the minimum requirements or for increased performance.
Some other concerns when upgrading are as follows:
Database
Ensure your database is able to be upgraded. Consult your vendor documentation to verify this process.
SSL Certificates
You will want to back these up prior to the upgrade process so you will be able to import them into the upgraded environment.
Timing
Make sure to block off more than the time you need, in case you run into unforeseen delays.
Team Notification
Make sure you notify all team members that the services will be going down and some features may not be available during the upgrade time frame.
Port Conflicts
Make sure any new services do not conflict with any ports currently in use or that are blocked by security settings.
Upgrade Matrix to vSphere 5
Below are listed some of the common upgrade criteria required for components of vSphere 5.
vCenter Server:
VirtualCenter 2.5 update 6 and higher may be upgraded to vSphere 5.
vSphere 4.0 (32 bit) must use data migration tools (64 bit will upgrade in place).
vSphere 4.1 will be able to upgrade in place.
Database:
SQL 2000 and Oracle 9i is no longer supported.
vSphere Client:
All versions less than 5.0 will require a new install.
If you are maintaining a host version less than 5.0, it will require you to maintain a vSphere Client that is the same version. You will not be able to use the 5.0 Client to manage an older version.
License Server:
No longer needed.
ESX and ESXi:
Version 3.5 requires two step upgrade process.
Version 4.0 requires update to version 4.1 prior to upgrading to version 5.x.
Virtual Machines:
Virtual machine hardware version VM2 and greater will be able to upgrade.
<ol>
QUICK OVERVIEW
<li><span style="background-color: #00ccdd">Deplou the lstest version and import existing settings</span></li>
<li><span style="background-color:#64FE2E">Decommission old server (Power Down)</span></li>
CONNECT TO THE NEW SERVER
<li><span style="background-color: #FFFF00">Configure Network</span></li>
<li><span style="background-color: #00ccdd">Select upgrade tab</span></li>
<ul><li><span style="background-color:#64FE2E">Choose "Destination" for the role</span></li>
<li><span style="background-color: #FFFF00">Set Role</span></li>
<li><span style="background-color: #00ccdd">Establish Trust</span></li></ul>
CONNECT TO OLD SERVER
<li><span style="background-color:#64FE2E">Select the upgrade tab and select "Source"</span></li>
<li><span style="background-color: #FFFF00">Establish Trust</span></li>
<li><span style="background-color: #00ccdd">Copy the remote appliance Key</span></li>
NEW SERVER
<li><span style="background-color:#64FE2E">Import remote key and start the import process</span></li>
Topic Notes: Upgrading vCenter Server
Upgrade vCenter Server
In order to upgrade the vCenter Server, you need to download the .iso file from the VMware site. Once you have the .iso file, you will need to mount it on the machine (or VM) you wish to run the vCenter Server on.
You will first run the upgrade checker that will check the compatibility with existing plug-ins and your environment's hosts. This should only take 3-10 minutes, maybe a little more if you have several hosts.
Schedule 1 to 2 hours for this upgrade:
HA will still function
DRS will be down
Close all connections to vCenter Server
Shutdown all services on vCenter Server
Follow the Upgrade Wizard
Recommendation: Install Web Client and any other add-on now
12 Steps to upgrade
<ol>
<li>Turn off services related to VMware and click vCenter Server to start the installation.</li>
<li><span style="background-color:#64FE2E">Click NEXT when the wizard detects an esting version of vCenter</span></li>
<li><span style="background-color: #FFFF00">Read the license agreement, accept and click Next</span></li>
<li>Enter customer informaiton, username, orginization, and click NEXT</li>
<li><span style="background-color:#64FE2E">If Required, enter the database credentials</span></li>
<li><span style="background-color: #FFFF00">Click OK when the wizard tells you the VUM plug-in is incompatible with vCenter 5</span></li>
<li>ackup the vCenter Server Database snd any SSL certificates</li>
<li><span style="background-color:#64FE2E">Select Upgrade Option</span></li>
<li><span style="background-color: #FFFF00">Verify the System Account Information</span></li>
<li>Verify the installation destination folder</li>
<li><span style="background-color:#64FE2E">Verify the Port information</span></li>
<li><span style="background-color: #FFFF00">Select Java Virtual Machine Memory and click Install</span></li>
Topic Notes: Upgrading VCSA and Update Manager
Upgrade the VCSA
To begin your upgrade of the VCSA, you will first download the latest version of the VirtualCenter Server Appliance (VCSA). Instead of a traditional upgrade, you will install the new VCSA, and then import settings through logging directly into the VCSA and clicking the Upgrade tab. You will have to set the roles for each of the VCSA:
Original VCSA = Source
New VCSA (upgrade) = Destination
Once roles are set, you will copy the upgrade key from the source VCSA to the Destination in order to establish trust. Once trust has been established, then you will import remote key from the destination back into the Source VCSA. Once that has been finished, you can import settings from the new VCSA.
Post Upgrade
After a successful upgrade, there may still be some unresolved issues with the new version. It is important to look through your installation log for any unresolved errors that may have occurred during the upgrade process. You will also want to install your licenses at this point and join Linked Mode if applicable.
After installation some items you may wish to check include:
Upgrade modules and plug-ins
Verify SSL certifications
Configure administrative settings
Verify permissions, users, and roles
Upgrade Update Manager
Prior to this upgrade, you will want to ensure that vCenter Server has been upgraded. Load the installer from the .iso image and follow the installation wizard to complete the upgrade process for Update Manager. While going through the wizard, you will be prompted to keep or delete the old files from the repository for Update Manager. This will be especially true if you are deprecating older ESXi hosts.
You will want to manually choose the download repository files you wish to run at this time. This is to limit the amount bandwidth that may impact your production environment. Upgrading the Update Manager database will be scripted automatically and will not require user input.
Topic Notes: Upgrading vSphere 5
Caveats
Listed below are certain procedures that should be kept in mind throughout the entire upgrade process:
In order to be successful in an upgrade process, you must start with a plan.
Upgrades cannot be undone, so make sure that you have all the requirements met prior to beginning this process.
Make sure to backup the following items: VirtualCenter Server database, VirtualCenter Server, Update Manager, Update Manager database, ESXi hosts, virtual machines, virtual appliances, and additional add-ons or plug-ins.
No multitasking in the initial phases, do things one step at a time to avoid missing an important step.
Verify hardware requirements are met, and meet your performance requirements.
Verify licensing with your sales associate, and whether or not you qualify for any free upgrades or how the upgrade will affect your previously paid items.
Use Virtual Update Manager (VUM) to reduce the complexity of the upgrade process.
The Upgrade Process
Steps to upgrade your environment
By using VMware's Product Interoperability Matrix (http://www.vmware.com/resources/compatibility/sim/inerop_matrix.php):
Verify that you are able to upgrade to the latest 5.x version of your VMware environment. Take note of any interim upgrade needed prior to upgrading to 5.x.
Verify using the matrix that you meet all hardware and software requirements.
Verify licensing; ensure that you have a valid license to apply to your upgraded environment. Trial period is for 60 days.
Upgrade vCenter Server.
Upgrade VMware Update Manager.
Upgrade ESXi Hosts.
Hosts and datastores (VMFS5).
Apply Licensing.
Upgrade virtual machines and appliances.
VM tools provide the new drivers to the virtual machines guest OS.
VM hardware.
Changes from vSphere 4 to vSphere 5
There are several changes from vSphere 4 to version 5.0:
No Service Console: Service console port group was combined into the VM Kernel port group.
No Graphical Installer: Installation is now text-based.
Auto Deploy with CLI Image Builder: Some of the API is now available to set up a PIXE boot environment.
No CLI used to upgrade from version 4.0 to 5.0: Now done through a scripted install or Update Manager.
No rollbacks: You can use disaster recovery procedures to rollback changes.
GUID-based partition table: No longer uses MS DOS.
vCenter Server Appliance: Linux-based version of vCenter Server that is limited to 5 hosts and 50 clients (does not require Windows license).
vSphere Web Client: Limited scope of administration in version 5.0. In version 5.1, the Web Client is a fully functional administration tool.
Hardware Upgrade Requirements
Prior to beginning your upgrade to vSphere 5.x, you may want to upgrade your hardware to meet the needs of your organization or to meet the needs of version of vSphere you are moving to. You will want to look at the CPU, RAM, and NIC as well as your Storage Controllers to make sure they meet your requirements along with the minimum specs of the upgraded environment. Make sure to upgrade to the latest firmware for your components prior to upgrading.
vCenter Server ( or VCSA) hardware
You'll want to look at the CPU, RAM, storage, and networking components here as well. Make sure that you are not only able to accommodate the upgrade, but any future growth. VCSA will require 8 GB of RAM and 80 GB of storage. This can be thin provisioned or manually changed later, but this will impact performance in larger environments.
Please consult with the Configuration Maximums guide on VMware's website for details on the latest releases.
vCenter Center Server:
Install the .NET framework (application role).
Ports: Ensure the appropriate ports are open.
DNS: Names should resolve.
vSphere Client and vSphere Web Client:
.NET Framework: May have to download for newer Windows boxes.
Logs, Auto Deploy, VUM:
Disk Space: Expand disk storage space in order to maintain logs and dumps.
Hardware:
RAM
CPU
NIC
Topic Notes: VCSA Web Interfaces and Clients
VCSA Web Interface Options
A general overview of the options available for the web interface (v5.0) is given.
vCenter Server tab (very top of screen)
Status
Start and stop the vCenter Server and provides general information for server.
Database
Allows for the configuration of database or reset the database.
Settings
Read-only view of the ports that you have. Limited to 5 hosts and 50 virtual machines.
Administration
Allows the changing of root account username and password.
Storage
Allows you to configure the storage location of log files.
Services tab
Status
Stop and start services as well as general information.
Syslog
Verify and configure ports for the Syslog Collector.
NetDump
Similar to the Syslog, allows you to point servers to a particular UDP port.
Auto Deploy
Lists Auto Deploy ports for each service.
Authentication tab
Status
Gives general information for Active Directory or NIS integration.
NIS
Edit/Enter NIS settings for integration.
Active Directory
Edit/Enter AD settings for integration.
Network tab
Status
General information and current configuration of the VCSA.
Address
Used to make changes to address settings.
Proxy
Allows the addition of proxy server settings, if needed.
System tab
Information
Host name, operating system, template information, and version.
Time Zone
Lists currently used time zone and allows editing of the current setting.
Update tab
Status
Lists current version (should match ESXi version currently used).
Settings
To edit settings for automatic updates, or change to a preferred upgrade data location.
Upgrade tab
Prepare
Allows you to set server roles; source and destination. Source will be the old VCSA and the destination will be the new or upgraded server.
Establish Trust
Populates the application key or allows you to input the application key. Older VCSA will populate the application key and you will then input the key to the new VCSA.
Import
Will begin the binary import from the old VCSA.
VCSA vSphere Clients (Desktop and Web)
There are two Clients that we can use to access the VCSA. The vSphere Client (or Desktop Client) is the physically installed program on a Windows-based PC that allows you to control the VCSA. The web interface allows you to access the VCSA through a web browser and is not OS limited to windows.
The Web Interface, in version, 5.0, is a light version of the Desktop Client. It does not allow for full administration of the VCSA. Although useful for small administrative tasks, it is recommended that at least one Desktop Client is used to provide for the full administration of the VCSA.
As of version 5.1 the web interface is now comparable in administrative functionality to the Desktop Client.
Topic Notes: Virtual Datacenter Management
vCenter Server
Stop for a moment to think about your current network. Does it include Active Directory? There is a good chance it does. Now imagine your network without Active Directory, without the ease of a centralized management database, without the single sign-on capabilities, and without the simplicity of groups. That is what managing VMware ESXi hosts would be like without using VMware vCenter Server. Not a very pleasant thought, is it? Now calm yourself down, take a deep breath, and know that vCenter Server like Active Directory is meant to provide a centralized management utility for all ESXi hosts and their respective VMs. vCenter Server allows IT administrators to deploy, manage, monitor, automate, and secure a virtual infrastructure in a centralized fashion. To help provide scalability, vCenter Server leverages a backend database (Microsoft SQL Server and Oracle are both supported, among others) that stores all the data about the hosts and VMs. The vCenter Server Home screen contains a list of management tasks and tools. Inventory tracks the virtual components of your virtual datacenter. Administration allows for the configuration of the vCenter Server instance itself, along with security and logging and licensing information. Options within the Management section apply to the management of the vCenter Server instance, including several maintenance options.
Plug-ins
vCenter Server plug-ins can be installed to provide vCenter Server with extended functionality. A number of vCenter Server plug-ins are installed by default to provide functionality for the base vCenter Server installation. These plug-ins include:
vCenter Storage Monitoring : Simplifies the access to and review of information pertaining to the storage mechanisms monitored by a vCenter Server instance
vCenter Hardware Status : Provides, via CIM, the hardware status of ESXi hosts associated with a vCenter Server instance
vCenter Service Status : Provides information regarding the status of vCenter Server systems, and the services provided by each plug-in requiring a separate installation to enable extended functionality include:
vSphere Update Manager : Apply patches and updates to ESXi hosts and VMs from a central location
vShield Zones : Provides an application level firewall to assist in securing virtual datacenters
vCenter Server Orchestrator : Provides a workflow framework for the automation of several tasks such as VM creation, start and stop, clone, etc
Data Recovery : Provides vCenter Server with the functionality for disk-based backup and recovery of virtual machines
vSphere Client
vCenter Server provides a centralized management framework for VMware ESXi hosts, but it's the vSphere Client where vSphere administrators will spend most of their time. The vSphere Client is a Windows-based application that allows you to manage ESXi hosts either directly or through an instance of vCenter Server. You can install the vSphere Client by browsing to the URL of an ESXi host or vCenter Server and selecting the appropriate installation link. Although, keep in mind that Internet access might be required in order to download the client in some instances. The vSphere Client provides a rich graphical user interface (GUI) for all day-to-day management tasks and for the advanced configuration of a virtual infrastructure. While you can connect the vSphere Client either directly to an ESXi host or to an instance of vCenter Server, the full set of management capabilities are only available when connecting the vSphere Client to vCenter Server.
vSphere Web Client
With the release of vSphere 5, VMware also adds a robust new vSphere Web Client. The vSphere Web Client provides a dynamic, web-based user interface for managing a virtual infrastructure and enables vSphere administrators to manage their infrastructure without first needing to install the full vSphere Client on a system. However, the vSphere Web Client in its current form only provides a subset of the functionality available to the full vSphere Client.
While the vSphere Web Client is OS independent, there are browser versioning restrictions. Additionally, the vSphere Web Client can only connect to instances of vCenter Server and not an ESXi host directly. The vSphere Web Client is targeted for administrators and help staff needing access to tools which allow for the day-to-day administration of the virtual environment.
SDK and PowerCLI
vSphere PowerCLI provides administrators a command-line interface for interacting with their virtual environment with a C# and PowerShell interface, which integrates with the vSphere APIs.
PowerCLI provides a means for executing Cmdlets and automating common administration tasks from the command line. Additionally, it includes several pre-built scripts ranging from basic tasks to more advanced implementation plans.
Direct Virtual Machine Console Access
Working within the VM console is like working at the console of a physical system. From here, one can access the VM's BIOS and modify settings, turn the power to the VM off (and back on again), and interact with the guest OS while installing. Of course, the guest OS interface can be accessed an interacted with after installation as well.
Additionally, VMs can be accessed directly via their native interfaces such a RDP (Remote Desktop) or SSH/Telnet for VMs with Linux as their guest OS.
One of the biggest developments in IT Infrastructure Management is the emergence of server virtualization. Although they have been around for a long time, virtualization technologies are now available for a nominal cost. In fact, in many cases, the technology is freely available or included as a feature in an operating system. Virtualization is well suited for most business applications and is widely in use for all but the most demanding workloads.
This brings many economic advantages. It allows an organization to run multiple operating systems, called virtual machines (VMs), simultaneously on a single physical machine. The ability to consolidate multiple machines allows the IT department to reduce its hardware and software costs as well as significantly reducing its operational costs.
Virtualization isn't limited to simply creating virtual machines. Other infrastructure components, such as networking and storage can also be virtualized, hiding the complexities of the underlying networking and storage components from the virtual machines. Once virtualized, the physical resources such as processor power, network switches, and SAN resources can be aggregated and combined together for use by virtual machines resulting in better utilization of physical resources, load balancing, and fault tolerance/redundancy.
Virtualization
In a traditional implementation, the operating system (Microsoft Windows, Suse Linux, MAC OS) is installed directly on a physical computer's hard drive and has exclusive access to any hardware on the physical machine, such as memory, network interface cards, and USB ports. Once installed, local operating system coordinates communication between itself, applications, and the hardware resources, which comprise the physical computer. In terms of having managerial authority over all hardware, the local operating system calls the shots.
Virtualization creates an environment by presenting physical hardware components in a virtual form to a software-based computer's guest operating system. This provides a means of aggregating physical resources to one or more virtual machines running on a physical server. The physical hardware is hidden from the VM, and virtual hardware is presented in its place. This allows for an environment where several operating systems can run simultaneously on a single physical computer. This separation and aggregation of physical hardware is provided by a hypervisor.
Hypervisors
A hypervisor is a virtualization technique, which provides a virtual operating platform for one or more simultaneous instances of an operating system.
A Type 1 hypervisor, also known as a bare metal hypervisor, is software installed directly onto a physical computer. Once installed and configured, the hypervisor will act as a mediator of sorts between the virtual machines, their guest operating systems, and the physical hardware now being controlled by the hypervisor. The guest OS of a VM passes data to the virtual hardware presented to it, and it is then passed to the hypervisor, which handles the actual processing by physical hardware. vSphere uses a Type 1 hypervisor called ESXi.
A Type 2 hypervisor provides hypervisor functionality above, or on top of an already installed operating system. In short, the hypervisor is installed as an application, providing the platform for VMs.
As mentioned, vSphere's hypervisor is called ESXi. A physical computer on which ESXi has been installed is called an ESXi host, as it is hosting all of the physical resources made available to the guest VMs running on top of ESXi's hypervisor.
Computer Virtualization
Physical hardware is not only masked from the VMs, but is also aggregated. VMs can share the aggregate whole of all available physical resources. Because each VM is presented with its own unique virtual hardware, they are unaware of each other and of the fact that they are not communicating directly with physical hardware. Failure of a VM does not affect the operational state of another VM.
The use of virtual hardware also means that the guest OS of a VM is not dependent on the physical hardware, allowing VMs with different guest OSs to run simultaneously. After virtualization:
Hardware Resources are maximized
Multiple operating systems can be running simultaneously on a single physical server
Resources are shared among virtual machines
Each virtual machine is isolated
Hardware independence via virtual hardware
Server Consolidation
A foundational component of virtualization is the concept of server consolidation, which is an application of or form of computer virtualization.
It is not uncommon for many staple servers, such as DNS or DHCP servers to be underutilized. This is even more emphasized if these services happen to be hosted on different servers. Whether 20% utilized or 90% utilized, a server that is powered on is still running up an electrical bill. Among other things, converting several physical servers into virtual machines running on an ESXi host reduces the amount of physical space they occupy, reduces the electrical costs associated with powering and cooling, and increases security.
Topic Notes: Infrastructure Virtualization Overview
Infrastructure Virtualization
The concept of server consolidation and virtualization can be expanded to include other elements in your physical environment. Virtualization of your entire IT infrastructure, including the virtualization of networks utilized by virtual machines and the storage solutions to which they have access.
By virtualizing different components of the IT infrastructure, one can reduce the amount of physical space consumed by racks/cabinets, reduce management overhead with centralized management, increase efficiency, and reduce downtime. The process of server deployment is simplified and associated time involved is reduced with easier and faster deployment. When implemented correctly, several servers and their associated networking and storage needs can be deployed and made available in a matter of minutes.
Business Continuity
The availability of critical business applications is something that must be ensured. Virtualization strategies such as server consolidation present the potential problem of a single point of failure. Putting all of one's virtual eggs into a virtual basket may seem risky. A server failure on the physical host would of course cause any virtual machines running on the host to fail as well. Virtualization can significantly reduce disaster recovery processes. A virtual machine running on one physical host can quickly and seamlessly be moved to another. The consolidated servers become portable, allowing an administrator to quickly relocate them. When physical ESXi hosts are clustered, solutions such as High Availability can reduce downtime, and features such as Fault Tolerance can eliminate it.
Revisiting the virtual eggs in the same basket reference, consider that in a traditional environment, disaster recovery is typically a relatively daunting task, involving several manual steps.
Cloud Computing
Utility computing provides the resources in which one is interested (computation power, storage, application services) on an as-needed basis. It allows for a shift in thinking of computing as a consumable service as opposed to a product which needs to be purchased, implemented, and maintained. Rather than invest in expensive hardware and the costs associated with managing and maintaining hardware and services, companies may instead opt to rent services as they are needed. Virtualization allows for a very scalable delivery model, which allows administrators to adjust for changing needs of resources. Need to provide additional resources for your enterprise on the third Tuesday of every month? The scalability of cloud computing allows businesses to consume (and pay for) services and computing on an as-needed basis.
Virtualization Vendors
Several companies provide virtualization products:
Virtualization Vendors
Vendor Product
Microsoft Hyper-V
Citrix XenServer
Oracle Oracle VM
VMware vSphere 5
VMware Product Family
vSphere provides for the virtualization and management of the components of the IT infrastructure, while Cloud Director allows for the management and delivery of those resources as a service. New to VMware 5, VSA provides a simplified means of managing shared storage solutions.
Desktop management products, such as VMware View and Workstation provide administrators with powerful, centralized tools for creating and deploying entire desktop solutions. Application services such as ThinApp allow for the virtualization of applications, isolating them from both – each other and the operating system, eliminating potential conflicts between operating systems. vFabric provides a platform through which data-intensive, web-oriented applications can be built and delivered in anticipation of both predictable and unpredictable utilization and traffic.
From a management and security perspective, VMware provides products for standardizing and automating the way in which cloud-based IT processes are implemented and serviced. vShield provides a management framework for securing virtualized resources from the host level all the way to the desktop. vCenter Orchestrator is a workflow automation engine that is automatically installed with every instance of vCenter Server. Using vCenter Orchestrator, vSphere administrators can build automated workflows for a wide variety of tasks available within vCenter Server. The automated workflows built using vCenter Orchestrator range from simple to complex. VMware also makes vCenter Orchestrator plug-ins to extend the functionality to include manipulating Microsoft Active Directory, Cisco's Unified Computing System (UCS), and VMware vCloud Director. This makes vCenter Orchestrator a powerful tool to use in building automated workflows in the virtualized data center. If planning on implementing core virtualization services in smaller environments, many of VMware's products are available for free.
Topic Notes: VM Resources and Networking
Virtual Machine Resources
One of the most significant advantages of server virtualization is the ability to allocate resources to a VM based on the machine's actual performance needs. In the traditional physical server environment, a server is often provided with more resources than it really needs because it was purchased with a specific budget in mind and the server specifications were maximized for the budget provided. VMware vSphere offers a set of controls that are designed to guarantee access to resources when necessary, to curb or control the use of resources, and to enable prioritized access to resources when available resources are low. Specifically, vSphere offers three controls for controlling or modifying resource allocation: reservations, limits, and shares.
Reservations
Reservations serve to act as guarantees of a particular resource and a specific VM is absolutely assured to have access to a particular amount of a given resource.
Limits
Limits are, quite simply, a way to restrict the amount of a given resource that a VM can use. VMs already have some limits simply by how they are constructed — for example; a VM configured to have a single virtual CPU (vCPU) is limited to using only that single vCPU. The Limit feature within vSphere grants even greater granularity over how resources are utilized. Depending on the resource to which the limit is being applied, the specific behavior of ESXi will change.
Shares
Shares serve to establish priority. When an ESXi host comes under contention and must decide which VM gets access to which resources, shares are used to determine priority. VMs with higher shares assigned will have higher priority, and therefore greater access to the ESXi host's resources.
Virtual CPU
There are a few considerations regarding CPU configuration for VMs. Compatibility, implementation of Multi core CPUs, and VM CPU limitations are listed here:
CPU Limits
32 SMP (depends on license)
32 Sockets equals 32 vCPUs available to VM
Make sure OS supports virtual SMP
Supported OS may support less than what is available
Performance issues when hyper threading mismatch between Host and guest OS
Multi Core CPU
Must have Virtual SMP license
Can't have more CPUs than physical socket count (4 physical sockets and 24 vCPUs)
CPU ID Mask
Expose ID mask to present CPU features to guest OS and CPU Security
Hide ID to have migration compatibility between different hosts
Virtual Memory
Several factors affect the availability of and performance of the virtual memory which is used by the VMs operating systems and applications. ESXi manages the virtual memory for the VMs associated with it.
Memory Reservations, shares, and limits can be configured to allow an administrator more granular controls in terms of which VMs have access to system resources, such as vRAM.
If the guest OS and VM Hardware version support it, one can hot add memory to a VM while it is running.
If supported by the host, Non-Uniform Memory Access (NUMA) can be configured to optimize memory bandwidth used for processing. NUMA provides a mechanism in which VMs can more efficiently access memory, even if it is memory that belongs to another processor in an SMP environment.
When powered on, a VM creates a swap file to emulate memory. By default, this swap file is created with the VM on the datastore containing the VM's .vmdk file. This default location can be changed should there be a more appropriate storage area for the VM's swap file.
Virtual Networking
Eventually, it all comes back to the network. Having servers running VMware ESXi with VMs stored on a highly redundant Fiber Channel SAN is great, but they are ultimately useless if the VMs cannot communicate across the network. What good is the ability to run 10 production systems on a single host at less cost if those production systems aren't available? Clearly, virtual networking within ESXi is a key area for every vSphere administrator to understand fully.
There are several NIC emulations available. Availability depends on factors such as the installed guest OS and hardware version of the VM.
The environment can determine which solution is best based on the needs of the VM and the limitations of network speed/capacity. Additionally, selecting different virtual network cards allows one to tweak or experiment with different virtual NIC configurations and types, potentially enhancing performance of various network applications, which may require specific networking implementations.
Topic Notes: vSphere 5 Licensing
Processor Licensing with vRAM Entitlements
vSphere is licensed based on the number of processors in the ESXi host, regardless of the number of cores.
The physical RAM within the ESXi host does not determine the type of license required and is not a factor when calculating your license needs. In short, when purchasing a license, there is no distinction between and ESXi host with 16 GB of RAM vs 32 GB of RAM. However, how much of the physical memory that can be allocated to VMs is dependent on the type of license purchased.
The amount of physical RAM VMs on a host are allowed to utilize is dependent on the amount of vRAM made available to the VMs by the license (called a vRAM Entitlement). vRAM is pooled virtual memory, meaning that vRAM entitlements of multiple licenses can be combined as an aggregation of entitlement; more licenses means more physical RAM is made available to VMs in the form of vRAM. VMs may only utilize the amount of vRAM made available by vRAM entitlement even if configured for more. Should more vRAM be needed, additional licenses must be purchased or current licenses upgraded to an edition offering more vRAM .
Licensing can be monitored and managed via the License Manager within vCenter Server.
License Management
Product licensing can be managed via the License Management utility within vCenter Server.
The license key itself is an alphanumeric 25-character string. Licenses can be applied to an ESXi host explicitly or to an instance of vCenter Server, and can be removed or reassigned as needed as long as the key capacity is not exceeded. If implemented through vCenter Server, licensing will be automatically applied to a cluster. This prevents administrators from having to manually move or reconfigure licenses to hosts which may have the need for additional vRAM but are not explicitly licensed. Additionally, if a host is removed, vCenter Server will retain the license and can apply it to the vRAM capacity pool.
Licensing Examples
Example : Given two hosts with two CPUs and a deployment plan of 50 VMs configured with 4 GB of RAM, which licensing example is appropriate?
Standard Licensing : Two hosts with two CPUs will require four processor licenses (one for each CPU). Each Standard license entitles the VMs on the host to 32 GB of vRAM. When pooled together (32 GB x 4), the total pooled vRAM capacity is 128 GB. The deployment plan will require 50 VMs, each configured with 4 GB of RAM (4x50=200 GB). In this example, we only have 128 GB of pooled vRAM. Licenses will either need to be added or upgraded to an edition which entitles the VMs to more vRAM.
Enterprise and Enterprise Plus : They offer more vRAM entitlement per license (64 GB and 96 GB each, respectively). In either scenario, the pooled vRAM with either of these two licenses will exceed the 200 GB requirement for the rollout plan making either a viable solution.
vSphere 4 vs. vSphere 5 Licensing
The majority of changes in licensing from vSphere 4 to vSphere 5 revolve around reducing the physical constraints of the server being licensed (the removal of limits on CPU cores and RAM). Physical RAM and physical cores of CPUs are no longer a consideration in terms of licensing, giving administrators more flexibility when it comes to choosing the hardware they wish to implement. In vSphere 5, to remain compliant with licensing, each active processor must have at least one license applied and the average daily high watermark of configured vRAM per running VM cannot exceed the pooled vRAM capacity (aggregated).
Upgrade Paths
Upgrading from vSphere 4 to vSphere 5 requires you to upgrade your current licenses to vSphere 5, as older licenses will not work on vSphere 5. Active SnS contracts allow for an upgrade at no charge. Customers with inactive SnS contracts will have to pay additional fees.
In some scenarios, companies may have to upgrade a current edition of vSphere 5 to a license with more vRAM entitlements. In this case, a new license key will be issued to comply with the new edition and its hardware entitlements, and any SnS agreement will be recalculated.
How Much will it Cost?
Pricing may vary based on promotional pricing and the kit/editions purchased. The Vmware.com web site lists several options.
Topic Notes: vSphere 5 Products
VMware products such as ESXi and vCenter Server are licensed differently depending on their implementation. Factors such as the size of your environment, the resource needs of VMs, and the vSphere features one wishes to utilize will determine the license type, configuration, and costs.
Many of these factors will determine the type or edition of vSphere licensing your purchase. Each edition provides a feature set as well as determines the amount of physical resources VMs will have available to them (RAM, CPU, etc).
All editions include base functionality and service, such as High Availability, DRS, and vMotion. Advanced features, such as Fault Tolerance and Auto Deploy are only available in certain editions.
vSphere Editions
vSphere is available in several different editions. The differences between editions typically revolve around the available features available in each edition, as well as the amount of vRAM entitlement and how many processors a VM is allowed to utilize. Core features of vSphere such as High Availability and vMotion are available in all editions, but more advanced features such as Fault Tolerance are only included in Enterprise and Enterprise Plus.
vSphere Kits
Kits provide all-in-one solutions which contain all needed licenses as products for specific implementations. Most of these are aimed at small to medium sized businesses.
Essentials Kits : Essentials kits are available in two editions, Essentials and Essentials Plus. Both include processor licenses and vCenter Server for Essentials, but are limited to a maximum of three hosts with up to two CPUs each and a maximum pooled vRAM capacity of 192 GB. Upgrading to meet scalability needs requires upgrading the entire kit.
Acceleration Kits : They provide a means for purchasing bundles of needed components to implement a new VMware environment, often offered with promotional discounts. Once installed, the individual products degrade to their individual kit components, so that customers can make product-based decisions regarding upgrades or SnS renewals. Acceleration kits can offer more in terms of the feature set of vSphere, as well as resource entitlements.
vCenter Server Editions
To access the functional features of vSphere found in the majority of both small and enterprise solutions, vCenter Server is a requirement. vCenter Server is required for centralized management of VMs, hosts, and vSphere features.
vCenter Server is available in the following editions. All include a management server, database server, and search engine, as well as vSphere Client and APIs for integration with other tools.
Essentials : Provided in the Essentials Kit
Foundation : For up to three ESXi hosts
Standard : The most recommended and scalable solution
Topic Notes: What Makes up a Virtual Datacenter?
vSphere 5 is a virtualization software suite meant to create virtual counterparts which correspond to or replace the physical components of a datacenter.
New Features
There are some new features in vSphere 5; the new version of virtual machine version 8 increases the maximum capacities of a virtual machines. A VM can now have up to 32 virtual CPUs and 1 TB of RAM.
The ability to add 3D graphics allowing Windows Aero to run. If you have Windows 7 or Windows Vista, you can have that Aero interface run through the 3D graphics.
Support USB 3.0 devices as well as Mac OSX Server.
A new command line interface or CLI. The old command line has been removed and has been replaced with the ESXCLI, which can be downloaded from VMware's web site. This new CLI interfaces really well with PowerShell, so if you have both installed, those two will work seamlessly and provide significant improvements to the ESXi firewall.
You now can have various different security profiles. You can modify various different ports and applications that you want to have within your vCenter environment. You can also run and manage your firewall through the command line interface, and once you've done that, you can also have as a third option third-party support, so you can have any type of third-party integration that'll come in and enhance your firewall.
The image builder is a way for you to have a solid image with all of your additional add-ons and plug-ins. If you have third-party vendor monitoring tools that you want for your ESXi server, you can package that into a VIB format and that'll be your profile; so you can have an ESXi 5 profile that has a few different add-ons and additions.
The Auto Deploy server, which is a PIXIE boot server environment allowing for hands-off DCHP deployment. The DHCP address assigns the specific profile and attaches to a host so it can boot up via Auto Deploy, and have the image automatically deployed to power on the host, and be added to a cluster, and added into virtual center without having to go through the process of an interactive installation or a scripted installation.
And finally you have your vCenter Update Manager. The Update Manager provides significant upgrade paths for your VMware Tools – that allow the upgrade from ESXi 4 to ESXi 5. Update Manager features an Integrated Download Manager that can download updates and patches for your ESXi host as well as your VM Tools.
Physical Parts of a Virtual Datacenter
Compute Servers : Provide computational and processing resources. Prior to virtualization, compute servers may include several underutilized servers running various operating systems and applications.
Storage networks/arrays : Provide a physical location for storing data in a shared or centralized location. Implementations may include iSCSI and Fiber Channel.
IP Networks : Switches, routers, and cables provide a physical data path.
Management Servers : Provides a centralized repository of datacenter elements.
Management Clients : Provides and interface for interacting with the components of the datacenter, typically through a management server.
vSphere Components
Compute Servers : An ESXi host provides the hypervisor upon which VMs can operate. Aggregation of resources of the physical host by the hypervisor allows VMs to utilize the total available amount of processing power and memory of the host.
Management Server : vCenter Server provides a centralized repository which collects and stores information about several components of the virtual infrastructure. Information pertaining to virtual machines, ESXi hosts, virtual networking, and storage and applications are organized and recorded in vCenter Server's database.
Management Clients : vSphere provides two primary interfaces for interacting with your virtual datacenter. The vSphere Client is a full-featured, Windows-based interface whereas the vSphere Web Client provides a subset of management tools but is able to run on platforms other than Windows via a web browser.
vSphere Datacenter
The virtual datacenter is a virtualization of the physical datacenter, including host servers, virtual machines, storage, and networks.
Hosts represent the physical ESXi host, which aggregates the physical resources of the server, making them available to virtual machines. Just as the physical resources of a single ESXi host are aggregated and presented to VMs, multiple ESXi hosts can be clustered, which aggregates the resources of multiple ESXi hosts. Further aggregation and distribution of resources can be fine-tuned through the use of resource pools.
Datastores can be thought of as a formatted file system (typically VMFS), which may or may not incorporate several physical storage techniques. A datastore is seen by vSphere as a single storage entity, capable of storing data (specifically, the files which comprise a VM). A datastore may be comprised of several different physical storage locations.
Finally, virtual networking provides a means for creating virtual networks, which VMs can use to communicate with each other or with the physical network. This is accomplished by binding the virtual networks addressing information to the physical NIC located on the ESXi host (called an uplink).
Distributed Services
As an example, vSphere in a clustered environment generally means that lots of shared storage — Fiber Channel or iSCSI SAN or NFS are standard, supported solutions. What happens when an older storage array is upgraded with a new one? What kind of downtime would be required, or what about a situation where a specific array is becoming over utilized and needs to be balanced with others either from a capacity or performance perspective? vSphere Storage vMotion directly addresses these situations.
By providing the ability to move the storage for a running VM between datastores, Storage vMotion enables administrators to address all of these situations without downtime. This feature ensures that outgrowing datastores or moving to a new SAN does not force an outage for the affected VMs and provides administrators with yet another tool to increase their flexibility in responding to changing business needs.
vMotion is a manual operation, meaning that an administrator must initiate the vMotion operation. What if VMware vSphere could perform vMotion operations automatically? That is the basic idea behind vSphere Distributed Resource Scheduler (DRS). If you think that vMotion sounds exciting, your anticipation will only grow after learning about DRS. DRS, simply put, leverages vMotion to provide automatic distribution of resource utilization across multiple ESXi hosts that are configured in a cluster.
High Availability (HA) provides a means to restart a VM on a different ESXi host in case of a server failure. There is downtime associated with the restart of the VM on a new functioning server. Fault Tolerance expands on the idea of HA, but without the associated downtime. A shadow VM is continually updated and can immediately step in should the primary VM fail.
Virtual Networking
Virtual Networking provides a means for creating virtual networks which allow VMs on the same host to communicate with one another and allowing VMs to connect with an participate in communications on a physical network. VMs participate in networking via their virtual NICs (vNIC).
Each ESXi host maintains at least one virtual switch within the VMkernel. This virtual switch allows you to create port groups assigned to VM networks or for binding the virtual switch to a physical NIC within the ESXi host. Binding the virtual switch to a physical NIC allows the VMs running on the ESXi host to provided services for and interact with the physical network. Standard switches are specific to a single ESXi host, whereas distributed switches can span or be shared between hosts – a real advantage when network re-configurations are needed. It is far simpler to change settings on one distributed switch, as opposed to 20 individual vSwitches spread out among 20 ESXi hosts.
Multiple physical NICs on an ESXi host can be configured to provide both load balancing and fault tolerance.
Storage Architecture
Storage arrays and devices are typically arranged to provide shared storage. Common implementations include SCSI, NFS, iSCSI, and Fiber Channel. The individual storage devices or combination of devices are presented as datastores to provide a uniform presentation to virtual machines. Again, datastores provide a file system (typically VMFS) for housing the files, which comprise a VM.
Virtual machines access their virtual disk (.vmdk) via their virtual SCSI controller. This is seen by the VM as a local drive, but in reality the .vmdk file is located on the VMFS datastore, which is accessed via the virtual networking associated with the SAN. As you will see, shared storage available to multiple ESXi hosts allows the VM to run on any supported ESXi host that has access to the shared storage.
Get-CalendarDiagnosticLog -Identity "Lonny Wilson" -subject "Meeting with Mike Akers and Greg" -StartDate "4/21/2017 6:00:00 AM" -EndDate "4/24/2017 5:00:00 PM"
$logs = Get-CalendarDiagnosticLog -Identity "lonny Wilson" -meetingid "040000008200E00074C5B7101A82E0080000000090DEB6D77DBAD201000000000000000010000000C9D67B83099A0746B89619A4FD6FEC2F"
Get-CalendarDiagnosticAnalysis -CalendarLogs $logs -DetailLevel Advanced > calendarlog.csv
http://crpsql03.otls1.otl-upt.com/Reports/Pages/Report.aspx?ItemPath=%2fOperations%2fCSCs%2fTMT+Units+Out+of+Service
#Log into Corde
#Open EFT Server
##Username EFTadmin
##PW in Keepass
#Expand Default Server Group
#Expand Local Host
#Click on site with issue. (ftp.ppok.com)
#Click Connections tab
##Inder network usage and security settings, Click IP Access/ban List Configure button.
#Click the Auto-Ban List Button.
#Find banned IP and remove it from the list.
Anyone trying more than 3 times to log in unsuccessfully will be on this list.
John Hardman Trustee
PO Box 613309
Memphis, TN
38101-3309
Case Number 14-12487-NLJ
$1620.00
(405) 236-4843
In short, a normal install of DDPE is done via Dell Digital Delivery, using a master installer. When installed in this way you don't get access to the uninstallers. You can't uninstall in the normal way.
You have to find the master installer (buried under ProgramData\Dell\Digital Deliver), extract the exe file in the zip file and then run a special command to extract the installers from the .exe file (ddpsetup /z"\"EXTRACT_INSTALLERS=c:\extracted"") - include all quotes.
Then uninstall in this order:
DDPE
Security Tools
Authentication
Cloud
then you can remove the "Dell Digital Delivery" from Programs and Features.
If it wasn't installed with Dell Digital Delivery (DDD) you'll need to know what version of DDPE you have so I can link you to the correct master installer.
VBoxInternal/CPUM/CMPXCHG16B 1
Datacenter: KNWRW-2HJT3-JHF97-YV32C-P92H7
Standard: RBMB7-NDT2P-GC4M7-GJJFC-HH8V3
Essentials: F7GN9-4C7QC-C647K-9B7JP-FYBP7
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 15">
<meta name=Originator content="Microsoft Word 15">
<link rel=File-List
href="file:///C:/Users/ttaylor/AppData/Local/Temp/msohtmlclip1/01/clip_filelist.xml">
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<link rel=themeData
href="file:///C:/Users/ttaylor/AppData/Local/Temp/msohtmlclip1/01/clip_themedata.thmx">
<link rel=colorSchemeMapping
href="file:///C:/Users/ttaylor/AppData/Local/Temp/msohtmlclip1/01/clip_colorschememapping.xml">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="376">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hashtag"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Unresolved Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Link"/>
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-536869121 1107305727 33554432 0 415 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-469750017 -1073732485 9 0 511 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-font-family:Calibri;
mso-fareast-theme-font:minor-latin;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Calibri;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
</style>
<![endif]-->
</head>
<body lang=EN-US style='tab-interval:.5in'>
<!--StartFragment-->
<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=0
style='width:0in;mso-cellspacing:0in;mso-yfti-tbllook:1184;mso-padding-alt:
0in 0in 0in 0in'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:15.75pt'>
<td valign=top style='padding:1.5pt 2.25pt 1.5pt 2.25pt;height:15.75pt'>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial",sans-serif;
color:#2A2A2A'>Datacenter: KNWRW-2HJT3-JHF97-YV32C-P92H7<o:p></o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;height:15.75pt'>
<td valign=top style='padding:1.5pt 2.25pt 1.5pt 2.25pt;height:15.75pt'>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial",sans-serif;
color:#2A2A2A'>Standard: RBMB7-NDT2P-GC4M7-GJJFC-HH8V3<o:p></o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:2;mso-yfti-lastrow:yes;height:15.75pt'>
<td valign=top style='padding:1.5pt 2.25pt 1.5pt 2.25pt;height:15.75pt'>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial",sans-serif;
color:#2A2A2A'>Essentials: F7GN9-4C7QC-C647K-9B7JP-FYBP7<o:p></o:p></span></p>
</td>
</tr>
</table>
<!--EndFragment-->
</body>
</html>
ping $false"
4.exit and re-open outlo
Licenses
Topic Notes: Configure ESXi via the DCUI
VI Editor Basics
Draft of 'PPOK VL Licenses'
PPOK VL Licenses
license×
tag name
add
$:/tags/SideBar
$:/tags/stylesheet
apar
Avaya
exchange 2013
GP
license
Monitoring
pharmascreens
Phones
PowerShell
PowerShell Script
PPOK
Service Provider
Stuck
systemConfig
Use WikiText to add formatting, images, and dynamic features hide preview
Windows 2k12R2 - KDNP7-JRB7H-GBY8K-YWVYX-4JP2J
Windows 2k12R2 - KDNP7-JRB7H-GBY8K-YWVYX-4JP2J
Type:
content type
Add a new field:
field name
add
MicrosoftKeys.txt
Timothy taylor 2 years ago
NET Micro Framework Porting Kit v3.0
C64GF-QGX43-2PMM3-KFGKM-Q66PR
Access 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Access 2007
KTVYK-QPGC7-9XK3X-YDXW8-D99Q8
CBPXJ-JXH6G-73FY9-8DHB7-MDMMJ
GW2RK-BDTWV-KR97B-WDGCY-PHWVW
JCF9B-D33B2-474J2-2H8XV-7GFBJ
M92RY-7H4JC-Q32BF-GH426-TDR7W
DTG2J-BM8CP-PMQ6V-86MFC-3VKQ8
PVPDW-VVPMD-6HRR4-HHWK6-M73D8
RQXQX-GXB7Y-DCJ2R-X6BRM-R84BJ
J9VQC-PJHBG-YR8XF-D4KV7-8YQD8
WP4BK-7FJF2-JBHVH-9739P-PBQD8
Access 2010
2TPWG-26RHR-FQKK7-6KJ47-CGGTV
YTG67-723PQ-GFD72-QJGYJ-Y949Y
2VBX9-QJDFD-2W6GR-CBPF7-36VHQ
MJP7R-94XTM-2CVJM-4RT63-PG9VQ
GB43K-GYRWH-RWHXQ-GWQMV-FWQH6
6JYFM-VYX4B-QDT6P-D3JKG-CC4GY
BBRQM-8WDBJ-WV9F2-9D9MQ-YD8HD
BTP6V-YQWMK-DRYGV-QV4TC-WMC3H
PRM2T-BW2VM-VMYGW-KTD39-G3392
BDK3K-3RQ26-6F2DF-KX3C3-MTT3G
Access 2003 Developer Extensions
KHCYK-2DXWD-6D4BV-9D9K6-TT9RY
Forefront Threat Management Gateway 2010
No key is required for this product.
Automatic Graph Layout
HWQWP-RXKVP-PJ4BB-9KD87-K67H2
Commerce Server 2002
QJY77-8G8BD-3FYFQ-FDFH3-4RDCP
CRM 2011 Server Edition
36D7J-FR6QG-JXPF6-H449P-2P6RR
CRM 2011 Workgroup Server Edition
73B26-GWVRK-GDX7X-MDQBX-DH28R
Dynamics CRM Server 2013
724KN-KQH62-J92M4-PWQCQ-H2XWH
Dynamics CRM Workgroup Server 2013
NVGJW-9BF9K-6CPKP-KFWM8-XWYR2
CRM 3.0 Professional Edition
D2Q47-3K4QX-FPVDT-P4QT6-3C8H8
CRM 3.0 Small Business Edition
TD7BB-D2H87-27KJH-VMH3P-QTQYW
CRM 4.0 Enterprise Edition
WQWYD-FHH7F-XQPCK-2B8KG-D6VT3
CRM 4.0 Professional Edition
KRJQ8-RQ822-YRMXF-6TTXC-HD2VM
CRM 4.0 Workgroup Edition
PYKPH-VKGGM-QC2QT-T9HYM-B7F4B
Point of Sale
WHQMR-QFK4X-634RJ-97V89-H9QH8
V4M78-68KD6-9G2B9-KWR66-HR678
W7J6G-VHYJX-JBKB2-TMH42-QGKV8
B99TX-PYVC2-4FJB8-VPWKK-H6GBW
Q4XPV-6MR8Q-2X9X4-9PB2G-7D6BW
KMHJV-9JXH3-KVGTV-6M8QB-C89V8
BPMPP-QTDM4-CVDD9-T42TY-2MKV8
XBCPF-WGT74-PRGYC-Y6C43-P4V4J
DH4K7-3HFC8-KQ32G-7BWGT-YF678
JFDHW-HK7YP-BYFKW-H2H3J-BCCMW
eMbedded Visual C++ 4.0
B222J-QW36D-DPT6T-JYKPF-YB7CM
Exchange Server 2007 Enterprise Edition
PYYMB-HQQMQ-3TBM2-XJ99F-83XVM
Exchange Server 2007 Standard Edition
W3MX6-2WXMD-QB887-4WGPK-VPVDY
Exchange Server 2010 Enterprise Edition
GVMTV-GMXWH-C234M-8FMWP-TFPFP
Exchange Server 2010 Standard Edition
XJG6B-4D4YV-4M338-Q42H6-39VT2
Exchange Server 2013 Enterprise
MV2FQ-2MVJD-WK2VK-CB8XP-3Q2D9
Exchange Server 2013 Standard
CPJFG-C9D94-J7F4K-T9Q48-FWKP7
Expression Web 1
XB8WR-CWH7T-MXH7J-CKWPH-MMYXG
Expression Blend 1
42XVR-43TCK-QFXGX-TG3P6-HVPYB
Expression Studio 1
B7QRP-P7W7G-QY689-R7DCB-4BGH4
Expression Studio 4 Premium (MSDN)
VQ7JH-R6PTK-XG733-JV6QP-7QFBY
Expression Studio 4 Ultimate (MSDN)
MVYV4-D68MJ-YRGY2-XRGJR-FRBFG
Forefront Protection 2010 for Exchange Server
D7TBP-2XXYM-6J8VX-HDJ7T-XWPVB
Forefront Protection 2010 for SharePoint
RC8TG-2B7C6-7KMYG-HF4GB-GTTGT
Forefront Security for Exchange Server with Service Pack
KR3XK-WH7WW-CDXWP-HWH6F-CQM73
Forefront Security for SharePoint with Service Pack
J2FHF-KBP2F-9PD6V-W964X-48HMQ
Forefront Security for Office Communications Server
G7FRC-CM32Y-TW3YF-KBKX2-F2B73
Forefront Threat Management Gateway 2010
No key is required for this product.
FrontPage Professional 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Groove Server 2007
R4X9H-MP2C6-CV2FX-QGPKY-93RPG
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Groove 2007 (For Use with MSDN Media)
P3PHX-9QF6H-7868V-49QCV-QW8VG
FP2YG-JTYG4-DYDC6-MWTWX-FYQDT
Groove 2007
HVH3T-MVFFG-3D9J3-W662H-6P3D8
CMKQQ-2TPF8-MKBYP-CWQTM-34PHW
Licenses
Topic Notes: Configure ESXi via the DCUI
Untitled 8
VI Editor Basics
Untitled 8
Timothy taylor 1 second ago
Licenses
Topic Notes: Configure ESXi via the DCUI
VI Editor Basics
Draft of 'PPOK VL Licenses'
PPOK VL Licenses
license×
tag name
add
$:/tags/SideBar
$:/tags/stylesheet
apar
Avaya
exchange 2013
GP
license
Monitoring
pharmascreens
Phones
PowerShell
PowerShell Script
PPOK
Service Provider
Stuck
systemConfig
Use WikiText to add formatting, images, and dynamic features hide preview
Windows 2k12R2 - KDNP7-JRB7H-GBY8K-YWVYX-4JP2J
Windows 2k12R2 - KDNP7-JRB7H-GBY8K-YWVYX-4JP2J
Type:
content type
Add a new field:
field name
add
MicrosoftKeys.txt
Timothy taylor 2 years ago
NET Micro Framework Porting Kit v3.0
C64GF-QGX43-2PMM3-KFGKM-Q66PR
Access 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Access 2007
KTVYK-QPGC7-9XK3X-YDXW8-D99Q8
CBPXJ-JXH6G-73FY9-8DHB7-MDMMJ
GW2RK-BDTWV-KR97B-WDGCY-PHWVW
JCF9B-D33B2-474J2-2H8XV-7GFBJ
M92RY-7H4JC-Q32BF-GH426-TDR7W
DTG2J-BM8CP-PMQ6V-86MFC-3VKQ8
PVPDW-VVPMD-6HRR4-HHWK6-M73D8
RQXQX-GXB7Y-DCJ2R-X6BRM-R84BJ
J9VQC-PJHBG-YR8XF-D4KV7-8YQD8
WP4BK-7FJF2-JBHVH-9739P-PBQD8
Access 2010
2TPWG-26RHR-FQKK7-6KJ47-CGGTV
YTG67-723PQ-GFD72-QJGYJ-Y949Y
2VBX9-QJDFD-2W6GR-CBPF7-36VHQ
MJP7R-94XTM-2CVJM-4RT63-PG9VQ
GB43K-GYRWH-RWHXQ-GWQMV-FWQH6
6JYFM-VYX4B-QDT6P-D3JKG-CC4GY
BBRQM-8WDBJ-WV9F2-9D9MQ-YD8HD
BTP6V-YQWMK-DRYGV-QV4TC-WMC3H
PRM2T-BW2VM-VMYGW-KTD39-G3392
BDK3K-3RQ26-6F2DF-KX3C3-MTT3G
Access 2003 Developer Extensions
KHCYK-2DXWD-6D4BV-9D9K6-TT9RY
Forefront Threat Management Gateway 2010
No key is required for this product.
Automatic Graph Layout
HWQWP-RXKVP-PJ4BB-9KD87-K67H2
Commerce Server 2002
QJY77-8G8BD-3FYFQ-FDFH3-4RDCP
CRM 2011 Server Edition
36D7J-FR6QG-JXPF6-H449P-2P6RR
CRM 2011 Workgroup Server Edition
73B26-GWVRK-GDX7X-MDQBX-DH28R
Dynamics CRM Server 2013
724KN-KQH62-J92M4-PWQCQ-H2XWH
Dynamics CRM Workgroup Server 2013
NVGJW-9BF9K-6CPKP-KFWM8-XWYR2
CRM 3.0 Professional Edition
D2Q47-3K4QX-FPVDT-P4QT6-3C8H8
CRM 3.0 Small Business Edition
TD7BB-D2H87-27KJH-VMH3P-QTQYW
CRM 4.0 Enterprise Edition
WQWYD-FHH7F-XQPCK-2B8KG-D6VT3
CRM 4.0 Professional Edition
KRJQ8-RQ822-YRMXF-6TTXC-HD2VM
CRM 4.0 Workgroup Edition
PYKPH-VKGGM-QC2QT-T9HYM-B7F4B
Point of Sale
WHQMR-QFK4X-634RJ-97V89-H9QH8
V4M78-68KD6-9G2B9-KWR66-HR678
W7J6G-VHYJX-JBKB2-TMH42-QGKV8
B99TX-PYVC2-4FJB8-VPWKK-H6GBW
Q4XPV-6MR8Q-2X9X4-9PB2G-7D6BW
KMHJV-9JXH3-KVGTV-6M8QB-C89V8
BPMPP-QTDM4-CVDD9-T42TY-2MKV8
XBCPF-WGT74-PRGYC-Y6C43-P4V4J
DH4K7-3HFC8-KQ32G-7BWGT-YF678
JFDHW-HK7YP-BYFKW-H2H3J-BCCMW
eMbedded Visual C++ 4.0
B222J-QW36D-DPT6T-JYKPF-YB7CM
Exchange Server 2007 Enterprise Edition
PYYMB-HQQMQ-3TBM2-XJ99F-83XVM
Exchange Server 2007 Standard Edition
W3MX6-2WXMD-QB887-4WGPK-VPVDY
Exchange Server 2010 Enterprise Edition
GVMTV-GMXWH-C234M-8FMWP-TFPFP
Exchange Server 2010 Standard Edition
XJG6B-4D4YV-4M338-Q42H6-39VT2
Exchange Server 2013 Enterprise
MV2FQ-2MVJD-WK2VK-CB8XP-3Q2D9
Exchange Server 2013 Standard
CPJFG-C9D94-J7F4K-T9Q48-FWKP7
Expression Web 1
XB8WR-CWH7T-MXH7J-CKWPH-MMYXG
Expression Blend 1
42XVR-43TCK-QFXGX-TG3P6-HVPYB
Expression Studio 1
B7QRP-P7W7G-QY689-R7DCB-4BGH4
Expression Studio 4 Premium (MSDN)
VQ7JH-R6PTK-XG733-JV6QP-7QFBY
Expression Studio 4 Ultimate (MSDN)
MVYV4-D68MJ-YRGY2-XRGJR-FRBFG
Forefront Protection 2010 for Exchange Server
D7TBP-2XXYM-6J8VX-HDJ7T-XWPVB
Forefront Protection 2010 for SharePoint
RC8TG-2B7C6-7KMYG-HF4GB-GTTGT
Forefront Security for Exchange Server with Service Pack
KR3XK-WH7WW-CDXWP-HWH6F-CQM73
Forefront Security for SharePoint with Service Pack
J2FHF-KBP2F-9PD6V-W964X-48HMQ
Forefront Security for Office Communications Server
G7FRC-CM32Y-TW3YF-KBKX2-F2B73
Forefront Threat Management Gateway 2010
No key is required for this product.
FrontPage Professional 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Groove Server 2007
R4X9H-MP2C6-CV2FX-QGPKY-93RPG
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Groove 2007 (For Use with MSDN Media)
P3PHX-9QF6H-7868V-49QCV-QW8VG
FP2YG-JTYG4-DYDC6-MWTWX-FYQDT
Groove 2007
HVH3T-MVFFG-3D9J3-W662H-6P3D8
CMKQQ-2TPF8-MKBYP-CWQTM-34PHW
Draft of 'PPOK VL Licenses'
PPOK VL Licenses
license×
tag name
add
$:/tags/SideBar
$:/tags/stylesheet
apar
Avaya
exchange 2013
GP
license
Monitoring
pharmascreens
Phones
PowerShell
PowerShell Script
PPOK
Service Provider
Stuck
systemConfig
Use WikiText to add formatting, images, and dynamic features hide preview
Windows 2k12R2 - KDNP7-JRB7H-GBY8K-YWVYX-4JP2J
Windows 2k12R2 - KDNP7-JRB7H-GBY8K-YWVYX-4JP2J
Type:
content type
Add a new field:
field name
add
MicrosoftKeys.txt
Timothy taylor 2 years ago
NET Micro Framework Porting Kit v3.0
C64GF-QGX43-2PMM3-KFGKM-Q66PR
Access 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Access 2007
KTVYK-QPGC7-9XK3X-YDXW8-D99Q8
CBPXJ-JXH6G-73FY9-8DHB7-MDMMJ
GW2RK-BDTWV-KR97B-WDGCY-PHWVW
JCF9B-D33B2-474J2-2H8XV-7GFBJ
M92RY-7H4JC-Q32BF-GH426-TDR7W
DTG2J-BM8CP-PMQ6V-86MFC-3VKQ8
PVPDW-VVPMD-6HRR4-HHWK6-M73D8
RQXQX-GXB7Y-DCJ2R-X6BRM-R84BJ
J9VQC-PJHBG-YR8XF-D4KV7-8YQD8
WP4BK-7FJF2-JBHVH-9739P-PBQD8
Access 2010
2TPWG-26RHR-FQKK7-6KJ47-CGGTV
YTG67-723PQ-GFD72-QJGYJ-Y949Y
2VBX9-QJDFD-2W6GR-CBPF7-36VHQ
MJP7R-94XTM-2CVJM-4RT63-PG9VQ
GB43K-GYRWH-RWHXQ-GWQMV-FWQH6
6JYFM-VYX4B-QDT6P-D3JKG-CC4GY
BBRQM-8WDBJ-WV9F2-9D9MQ-YD8HD
BTP6V-YQWMK-DRYGV-QV4TC-WMC3H
PRM2T-BW2VM-VMYGW-KTD39-G3392
BDK3K-3RQ26-6F2DF-KX3C3-MTT3G
Access 2003 Developer Extensions
KHCYK-2DXWD-6D4BV-9D9K6-TT9RY
Forefront Threat Management Gateway 2010
No key is required for this product.
Automatic Graph Layout
HWQWP-RXKVP-PJ4BB-9KD87-K67H2
Commerce Server 2002
QJY77-8G8BD-3FYFQ-FDFH3-4RDCP
CRM 2011 Server Edition
36D7J-FR6QG-JXPF6-H449P-2P6RR
CRM 2011 Workgroup Server Edition
73B26-GWVRK-GDX7X-MDQBX-DH28R
Dynamics CRM Server 2013
724KN-KQH62-J92M4-PWQCQ-H2XWH
Dynamics CRM Workgroup Server 2013
NVGJW-9BF9K-6CPKP-KFWM8-XWYR2
CRM 3.0 Professional Edition
D2Q47-3K4QX-FPVDT-P4QT6-3C8H8
CRM 3.0 Small Business Edition
TD7BB-D2H87-27KJH-VMH3P-QTQYW
CRM 4.0 Enterprise Edition
WQWYD-FHH7F-XQPCK-2B8KG-D6VT3
CRM 4.0 Professional Edition
KRJQ8-RQ822-YRMXF-6TTXC-HD2VM
CRM 4.0 Workgroup Edition
PYKPH-VKGGM-QC2QT-T9HYM-B7F4B
Point of Sale
WHQMR-QFK4X-634RJ-97V89-H9QH8
V4M78-68KD6-9G2B9-KWR66-HR678
W7J6G-VHYJX-JBKB2-TMH42-QGKV8
B99TX-PYVC2-4FJB8-VPWKK-H6GBW
Q4XPV-6MR8Q-2X9X4-9PB2G-7D6BW
KMHJV-9JXH3-KVGTV-6M8QB-C89V8
BPMPP-QTDM4-CVDD9-T42TY-2MKV8
XBCPF-WGT74-PRGYC-Y6C43-P4V4J
DH4K7-3HFC8-KQ32G-7BWGT-YF678
JFDHW-HK7YP-BYFKW-H2H3J-BCCMW
eMbedded Visual C++ 4.0
B222J-QW36D-DPT6T-JYKPF-YB7CM
Exchange Server 2007 Enterprise Edition
PYYMB-HQQMQ-3TBM2-XJ99F-83XVM
Exchange Server 2007 Standard Edition
W3MX6-2WXMD-QB887-4WGPK-VPVDY
Exchange Server 2010 Enterprise Edition
GVMTV-GMXWH-C234M-8FMWP-TFPFP
Exchange Server 2010 Standard Edition
XJG6B-4D4YV-4M338-Q42H6-39VT2
Exchange Server 2013 Enterprise
MV2FQ-2MVJD-WK2VK-CB8XP-3Q2D9
Exchange Server 2013 Standard
CPJFG-C9D94-J7F4K-T9Q48-FWKP7
Expression Web 1
XB8WR-CWH7T-MXH7J-CKWPH-MMYXG
Expression Blend 1
42XVR-43TCK-QFXGX-TG3P6-HVPYB
Expression Studio 1
B7QRP-P7W7G-QY689-R7DCB-4BGH4
Expression Studio 4 Premium (MSDN)
VQ7JH-R6PTK-XG733-JV6QP-7QFBY
Expression Studio 4 Ultimate (MSDN)
MVYV4-D68MJ-YRGY2-XRGJR-FRBFG
Forefront Protection 2010 for Exchange Server
D7TBP-2XXYM-6J8VX-HDJ7T-XWPVB
Forefront Protection 2010 for SharePoint
RC8TG-2B7C6-7KMYG-HF4GB-GTTGT
Forefront Security for Exchange Server with Service Pack
KR3XK-WH7WW-CDXWP-HWH6F-CQM73
Forefront Security for SharePoint with Service Pack
J2FHF-KBP2F-9PD6V-W964X-48HMQ
Forefront Security for Office Communications Server
G7FRC-CM32Y-TW3YF-KBKX2-F2B73
Forefront Threat Management Gateway 2010
No key is required for this product.
FrontPage Professional 2003
HVCBT-WQ823-BHMJC-RQJ3P-9T9VT
Groove Server 2007
R4X9H-MP2C6-CV2FX-QGPKY-93RPG
Office 2007 Applications
M3HX8-4X6BF-9WPKC-QWWFT-VXCVY
Groove 2007 (For Use with MSDN Media)
P3PHX-9QF6H-7868V-49QCV-QW8VG
FP2YG-JTYG4-DYDC6-MWTWX-FYQDT
Groove 2007
HVH3T-MVFFG-3D9J3-W662H-6P3D8
CMKQQ-2TPF8-MKBYP-CWQTM-34PHW
$error.Clear()
Update-Help -Module * -Force -ea 0
For ($i = 0 ; $i -lt $error.Count ; $i ++)
{ "`nerror $i" ; $error[$i].exception }
|specialcell|k
|!Database Table|!Comments|
|Uptgp.dbo.pm00100|Vendor Class ID, only 2 entires, OO and Customer, neither are default|
|UPTGP.dbo.pm00200|6011 rows, 4974 rows where vndclsid = 'AP'|
|_|_|
|GPUPT.DBO.PM00100 |Vendor Class ID 3 entires AP, 00, DD00, AP is Default|
|GPUPT.DBO.PM00200|3574 rows, 2909 rows where vndclsid='AP'|
|_|_|
|OTLGP.DBO.PM00100|Vendor Class ID AP only|
|OTLGP.DBO.PM00200|33 Rows, all 33 rowsvndclsid='AP'|
|_|_|
|ERGP.dbo.pm00100|Vendor Class ID AP only|
|ERGP.dbo.pm00200|39 rows, all 39 rows vndclsid='AP'|
<ol start="1">
<li>Download and "Install" File Checksum Integrity Verifier, often simply referred to as FCIV. This program is freely available from Microsoft and works on all commonly used versions of Windows.
<p>
FCIV is a command-line tool but don't let that scare you away. It's very easy to use, especially with the tutorial below.
<p>
<b>Tip:</b> Obviously if you've followed the tutorial above in the past then you can skip this step. The remainder of these steps assumes that you've downloaded FCIV and placed it in the appropriate folder as described in the link above.
<p>
<li>Navigate to the folder that contains the file that you want to create the checksum value for.
<li>
Once there, hold down your Shift key while right-clicking on any empty space in the folder. In the resulting menu, select the Open command window here option.
<p>
Command Prompt will open and the prompt will be preset to this folder.
<p>
For example, on my computer, the file I wanted to create the checksum for was in my Downloads folder, so the prompt in my Command Prompt window reads <b>C:\Users\Tim\Downloads></b> after following this step from my Downloads folder.
<p>
<li>
Next we need to make sure we know the exact file name of the file you want FCIV to generate the checksum for. You may already know it but you should double-check to be sure.
<p>
The easiest way to do this is to execute the dir command and then write down the full file name. Type the following in Command Prompt:
<p>
<b>dir</b>
<p>
which should generate a list of files in that folder:
C:\Users\Tim\Downloads>dir
Volume in drive C has no label.
Volume Serial Number is D4E8-E115
Directory of C:\Users\Tim\Downloads
11/11/2011 02:32 PM <DIR> .
11/11/2011 02:32 PM <DIR> ..
04/15/2011 05:50 AM 15,287,296 LogMeIn.msi
07/31/2011 12:50 PM 397,312 ProductKeyFinder.exe
08/29/2011 08:15 AM 595,672 R141246.EXE
09/23/2011 08:47 AM 6,759,840 setup.exe
09/14/2011 06:32 AM 91,779,376 VirtualBox-4.1.2-73507-Win.exe
5 File(s) 114,819,496 bytes
2 Dir(s) 22,241,402,880 bytes free
C:\Users\Tim\Downloads>
<p>
In this example, the file I want to create the checksum for is <b>VirtualBox-4.1.2-73507-Win.exe</b> so I'll write that down exactly.
<p>
<li>Now we can run one of the cryptographic hash functions supported by FCIV to create a checksum value for this file.
<p>
Let's say that the website I downloaded the VirtualBox-4.1.2-73507-Win.exe file from published an SHA-1 hash to compare to. This means that I also want to create an SHA-1 checksum on my copy of the file.
<p>
To do this, execute FCIV as follows:
<b>fciv VirtualBox-4.1.2-73507-Win.exe -sha1</b>
<p>
Be sure you type the entire file name. Don't forget the file extension!
<p>
If you need to create an MD5 checksum, end the command with <b>-md5</b> instead of <b>-sha1</b>
<p>
<b>Tip:</b> Did you get a "'fciv' is not recognized as an internal or external command..." message? Be sure you've placed the fciv.exe file in an appropriate folder as described in the tutorial linked to in Step 1 above.
<p>
<li>Continuing our example above, here's the result of using FCIV to create an SHA-1 checksum on my file:
<p>
File Checksum Integrity Verifier version 2.05.
<p>
6b719836ab24ab48609276d32c32f46c980f98f1 virtualbox-4.1.2-73507-win.exe
<p>
The number/letter sequence before the file name in the Command Prompt window is your checksum.
<p>
<b>Note:</b> Don't worry if it takes several seconds or longer to generate the checksum value, especially if you're trying to generate one on a very large file.
<p>
<b>Tip:</b> You can save the checksum value produced by FCIV to a file by adding > <b>filename.txt</b> to the end of the command you executed in Step 5.
<p>
<li>Now that you've generated a checksum value for your file, you need to see if it equals the checksum value the download source provided for comparison.
<p>
<b>Do the Checksums Match?</b>
<p>
Great! You can be completely certain that the file on your computer is an exact copy of the one being provided.
<p>
This means that there were no errors during the download process and, as long as you're using a checksum provided by the original author or a very trusted source, you can also be sure that the file hasn't been altered for malicious purposes.
<p>
<b>Do the Checksums NOT Match?
</b><p>
Download the file again. If you're not downloading the file from the original source, do that instead.
Opening a file
vi filename
Creating text
Edit modes: These keys enter editing modes and type in the text
of your document.
i Insert before current cursor position
I Insert at beginning of current line
a Insert (append) after current cursor position
A Append to end of line
r Replace 1 character
R Replace mode
<ESC> Terminate insertion or overwrite mode
Deletion of text
x Delete single character
dd Delete current line and put in buffer
ndd Delete n lines (n is a number) and put them in buffer
J Attaches the next line to the end of the current line (deletes carriage return).
Oops
u Undo last command
cut and paste
yy Yank current line into buffer
nyy Yank n lines into buffer
p Put the contents of the buffer after the current line
P Put the contents of the buffer before the current line
cursor positioning
^d Page down
^u Page up
:n Position cursor at line n
:$ Position cursor at end of file
^g Display current line number
h,j,k,l Left,Down,Up, and Right respectivly. Your arrow keys should also work if
if your keyboard mappings are anywhere near sane.
string substitution
:n1,n2:s/string1/string2/[g] Substitute string2 for string1 on lines
n1 to n2. If g is included (meaning global),
all instances of string1 on each line
are substituted. If g is not included,
only the first instance per matching line is
substituted.
^ matches start of line
. matches any single character
$ matches end of line
These and other "special characters" (like the forward slash) can be "escaped" with \
i.e to match the string "/usr/STRIM100/SOFT" say "\/usr\/STRIM100\/SOFT"
Examples:
:1,$:s/dog/cat/g Substitute 'cat' for 'dog', every instance
for the entire file - lines 1 to $ (end of file)
:23,25:/frog/bird/ Substitute 'bird' for 'frog' on lines
23 through 25. Only the first instance
on each line is substituted.
Saving and quitting and other "ex" commands
These commands are all prefixed by pressing colon (:) and then entered in the lower
left corner of the window. They are called "ex" commands because they are commands
of the ex text editor - the precursor line editor to the screen editor
vi. You cannot enter an "ex" command when you are in an edit mode (typing text onto the screen)
Press <ESC> to exit from an editing mode.
:w Write the current file.
:w new.file Write the file to the name 'new.file'.
:w! existing.file Overwrite an existing file with the file currently being edited.
:wq Write the file and quit.
:q Quit.
:q! Quit with no changes.
:e filename Open the file 'filename' for editing.
:set number Turns on line numbering
:set nonumber Turns off line numbering
http://blogs.msdn.com/b/visualstudio/archive/2013/08/09/xaml-editor-improvements-in-visual-studio-2013.aspx
http://xamlsnippets.codeplex.com
http://msdn.microsoft.com/en-us/library/vstudio/dn320181(v=vs.120).aspx
"""
@MRU Most Recently Used
@MENU searches for menu items with specified word
@OPT searches Tools|Options
@DOC Searches file names and pathc (Not file contents, there are other tools to help you search file contents)
"""
More Information: [[Quick Launch See Zain Nablowski's Blog post|http://blogs.msdn.com/b/zainnab/archive/2013/07/17/visual-studio-2013-quick-launch.aspx]]
Record Files
convert to wav files with Switch Sound File Converter.
Wav PCM Uncomressed 8000 HZ, 16 Bit Mono
Copy files to
\\vmpro-pc\c$\Program Files (x86)\Avaya\IP Office\Voicemail Pro\VM\WAVS\Custom
Open Voice Mail Pro Client
Replace holiday file with new file, confirm decision tree.
Finance and Maxcare printers are Xerox
1-800-822-2979
Call with Serial number
Finance Serial number XKK392727