{"20230428":"hans","$:/AdvancedSearch":"hans","$:/ControlPanel":"hans","$:/DefaultTiddlers":"hans","$:/SiteSubtitle":"hans","$:/SiteTitle":"hans","$:/config/AnimationDuration":"hans","$:/config/DefaultMoreSidebarTab":"hans","$:/config/EmptyStoryMessage":"hans","$:/config/Navigation/UpdateAddressBar":"hans","$:/config/Navigation/UpdateHistory":"hans","$:/config/Navigation/openLinkFromInsideRiver":"hans","$:/config/NewJournal/Text":"hans","$:/config/NewJournal/Title":"hans","$:/config/NewTiddler/Tags":"hans","$:/config/RelinkOnRename":"hans","$:/config/TiddlerInfo/Mode":"hans","$:/config/Tiddlers/TitleLinks":"hans","$:/config/TiddlyTools/Filters":"hans","$:/config/TiddlyTools/FindTags":"hans","$:/config/TiddlyTools/FindTitles":"hans","$:/config/TiddlyTools/PowerSearch":"hans","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221108114653":"hans","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221109065128":"hans","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221109131049":"hans","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221122151411":"hans","$:/config/TiddlyTools/PowerSearch/SavedFilters/20230211094718":"hans","$:/config/TiddlyTools/TagCloud":"hans","$:/config/TiddlyTools/Time":"hans","$:/config/ViewTemplateBodyFilters/default":"hans","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone":"hans","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others":"hans","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info":"hans","$:/language/DefaultNewTiddlerTitle":"hans","$:/plugins/EvidentlyCube/AutoComplete":"hans","$:/plugins/HwW/CoreH":"hans","$:/plugins/kookma/gatha":"hans","$:/plugins/telmiger/details":"hans","$:/plugins/wikilabs/field-search":"hans","$:/tags/TopLeftBar":"hans","$:/tags/ViewTemplate":"hans","$:/ᢳ/":"hans","-03":"hans","...":"hans","0121":"hans","0702":"hans","0915":"hans","0z":"hans","AiMls":"hans","AlterTags0":"hans","Bp/":"hans","Bp/Xe/H":"hans","BpXeH":"hans","ChineseZodiac":"hans","CpH":"hans","CtrlsForGeoTwH":"hans","CurbSide":"hans","DanGowans":"hans","DataDictionary":"hans","DataWidget":"hans","DataWidgetH":"hans","DesignThoughts":"hans","DevH":"hans","Df/Aas":"hans","DiigoH":"hans","DlDtDd":"hans","DnDrop":"hans","Do/Id/T":"hans","DoT":"hans","EdD2023":"hans","EdD22":"hans","ExportImport":"hans","FairPay":"hans","FiCoRe":"hans","FilterNotation":"hans","FiltersH":"hans","FusionT":"hans","GeoJsonClues":"hans","GeoSpatial":"hans","GeoTwH":"hans","GetPut":"hans","Hans":"hans","HansIsland":"hans","HintsHw":"hans","HwT":"hans","HwT-11-":"hans","HwW":"hans","HwW/P":"hans","HwW202304":"hans","HwX/pub":"hans","Hww/":"hans","Hww/Private":"hans","Hww/Public":"hans","HwwPriX":"hans","HwwPubX":"hans","HwwX":"hans","IdHw":"hans","IdHwN":"hans","IdWeek":"hans","IsA":"hans","IsOne":"hans","JrH":"hans","JrHw":"hans","LaLn":"hans","LaLn.ca":"hans","LaLo":"hans","LaLoAlCa":"hans","LaLoCa":"hans","LatLon.ca":"hans","MetaContent":"hans","MetaTid":"hans","MicroContent":"hans","MiddleMeetUp":"hans","MmDd":"hans","New㊿":"hans","NonWords":"hans","NotMapped":"hans","NrH":"hans","OldestAndBiggest":"hans","PobTob":"hans","PorTor":"hans","PriH":"hans","PsH":"hans","PsH0":"hans","PublicHww":"hans","QrSt":"hans","SideEditor":"hans","TdaT1123":"hans","TestId":"hans","TiddlyHost":"hans","TiddlyTools":"hans","TiddlyTools/Home":"hans","TiddlyTools/Macros/edit-list":"hans","TiddlyTools/Search/Filters":"hans","TiddlyTools/Search/Info":"hans","TiddlyTools/Search/PowerSearch":"hans","TiddlyTools/Search/TagCloud":"hans","TiddlyTools/Search/Tags":"hans","TiddlyTools/Search/Titles":"hans","TiddlyTools/Time/3MonthCalendar":"hans","TiddlyTools/Time/Alarms":"hans","TiddlyTools/Time/AutoSaver":"hans","TiddlyTools/Time/Calendar":"hans","TiddlyTools/Time/Clocks":"hans","TiddlyTools/Time/CountDown":"hans","TiddlyTools/Time/EditDate":"hans","TiddlyTools/Time/Events":"hans","TiddlyTools/Time/action-timeout.js":"hans","TilesH0529":"hans","TimePeriodsH":"hans","TmD/w46":"hans","TmD/w47":"hans","Tn/Tda/NotMapped":"hans","TpT":"hans","Tw/Notes":"hans","TwRecognition":"hans","TwScale":"hans","TweT":"hans","UlcPosition":"hans","UniCode":"hans","UsernameH":"hans","VariablesH":"hans","Xememex":"hans","XememexH":"hans","XxHT":"hans","XxHT-11":"hans","YourData":"hans","_":"hans","a.𝕬":"hans","e.":"hans","e.1":"hans","e._":"hans","e.code":"hans","e.cols":"hans","e.date!do":"hans","e.do":"hans","e.do.25":"hans","e.do0":"hans","e.do1":"hans","e.due":"hans","e.edit":"hans","e.go":"hans","e.open":"hans","e.rc":"hans","e.rows":"hans","e.say":"hans","e.tabs":"hans","hAsDc":"hans","hans":"hans","hanswobbe":"hans","hwo":"hans","quiz":"hans","quiz2":"hans","quizCode":"hans","quizTid":"hans","¡/寅":"hans","༠":"hans","༠\\༠":"hans","᙮":"hans","ᢳ":"hans","ᢳ/":"hans","ᢳ/ViewTemplates/_":"hans","ᢳ/ℋ":"hans","ᢳ/㊿":"hans","ℋ":"hans","ℋ⇔":"hans","ℋ⇔֎":"hans","ℋ⑱":"hans","ℋ㋁":"hans","ℋ㋄":"hans","⇔":"hans","⇔Xe":"hans","∅":"hans","∅.":"hans","⌂":"hans","⍾":"hans","①♄":"hans","⑱":"hans","⑱♄":"hans","★":"hans","☉":"hans","♄":"hans","⧗":"hans","⭾":"hans","⮣":"hans","㉝/㊿":"hans","㊼/StVar":"hans","㊼/♄":"hans","㊼ᢳ":"hans","㊼㋋":"hans","㊿":"hans","㊿\\":"hans","㊿\\Meta":"hans","㋃":"hans","㏩":"hans","㏲":"hans","㠭":"hans","卯/0915":"hans","卯㋆/㉗/今":"hans","卯㋇/㉝/今":"hans","卯㋈/㉟/今":"hans","寅㋋":"hans","寅㋋/㏹":"hans","寅㋋26":"hans","🆔.5.6.7":"hans","🆔/ℋ":"hans","🌐":"hans","📓":"hans","🔍":"hans","🔍/🆔":"hans","🔝":"hans","🔣":"hans","!":"hans"}
{"20230428":"\"df50bcdc4e12a82d0e48a18c3fd89274\"","$:/AdvancedSearch":"\"997006a8c0ca4e6052926ac384f8b555\"","$:/ControlPanel":"\"7f594bd93e12cd42ffb664c9479e8f83\"","$:/DefaultTiddlers":"\"85daa9b7b3ede7207ad8f31ad2d0cb87\"","$:/SiteSubtitle":"\"d5d0174dff9f6943fd2ee54623cecd77\"","$:/SiteTitle":"\"7cdcb8a433dfc92cd1f20f37210a6370\"","$:/config/AnimationDuration":"\"2e226b8ce7f9cfb00efd06f3a4e7cab5\"","$:/config/DefaultMoreSidebarTab":"\"7244dbacedf41e404b730eec25acb98e\"","$:/config/EmptyStoryMessage":"\"18c03c8257176f2552e98648c07d3ef4\"","$:/config/Navigation/UpdateAddressBar":"\"af7620e91f6221798331441dc0dbf5f3\"","$:/config/Navigation/UpdateHistory":"\"b50913a57202e0a4a9bc23693622d2a3\"","$:/config/Navigation/openLinkFromInsideRiver":"\"89a3bd4a26cd0fa089a22eb384a16541\"","$:/config/NewJournal/Text":"\"126da33d15c7dd58cc46bf66fac7e9d0\"","$:/config/NewJournal/Title":"\"5cfef353e35e86fbb352295c57c9813f\"","$:/config/NewTiddler/Tags":"\"86f1422d7617925395c01663fe5f19bb\"","$:/config/RelinkOnRename":"\"4f2e7a3092700987e7d9cd5fe2cfe4d0\"","$:/config/TiddlerInfo/Mode":"\"7d3111192b2fc174e6544364816eaa9d\"","$:/config/Tiddlers/TitleLinks":"\"c9f7869162aee02d6f2d073d0c9e01c5\"","$:/config/TiddlyTools/Filters":"\"7de33505440d7b938a68a5850a1db833\"","$:/config/TiddlyTools/FindTags":"\"ed98d05e8cdb2b33d59e835bb28daa0c\"","$:/config/TiddlyTools/FindTitles":"\"8306e0c909c8b07544d8e2fdcaa97ef8\"","$:/config/TiddlyTools/PowerSearch":"\"a54010e95c5bd538a4ce18157bd07b12\"","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221108114653":"\"dd3dcedac79b78fb5284400ceac1c5b2\"","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221109065128":"\"88f6f4bec0d6b252b2ccf5329fd31380\"","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221109131049":"\"ea445e1ba65348fba3771b5dca1963a9\"","$:/config/TiddlyTools/PowerSearch/SavedFilters/20221122151411":"\"9ea7e0d1f72168c5c590a9cd91a8833f\"","$:/config/TiddlyTools/PowerSearch/SavedFilters/20230211094718":"\"2fea70e911418e2a0932e882c6fd9a9e\"","$:/config/TiddlyTools/TagCloud":"\"cb9573277be17559bec85fc72ef5ebab\"","$:/config/TiddlyTools/Time":"\"a8941c93000a4ded43c2e7ac3f9ce2cc\"","$:/config/ViewTemplateBodyFilters/default":"\"0b63169ab5e5475eeb1bd5c47c0343ba\"","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone":"\"c9adbb25c9825dc63912386b6fd53b19\"","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others":"\"1ad32e8e099f961cd643eef242a413af\"","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info":"\"356a5c17335f06fecc1ee00cce06ace0\"","$:/language/DefaultNewTiddlerTitle":"\"d369d414ca983ca90663a93806745711\"","$:/plugins/EvidentlyCube/AutoComplete":"\"6b8377c75a13e55472d9298ba0ad636a\"","$:/plugins/HwW/CoreH":"\"65b6366abfba1e4f55550b20f40ff0c2\"","$:/plugins/kookma/gatha":"\"3afb52ab73bad62242f8ed712e8fb7b2\"","$:/plugins/telmiger/details":"\"9b4b35bc83efab773050c2b9c25fc594\"","$:/plugins/wikilabs/field-search":"\"565b9ca24c469c21310680e43645a041\"","$:/tags/TopLeftBar":"\"f0282ae63668c4294384e54ca2ae57c0\"","$:/tags/ViewTemplate":"\"39412217e533ac1a9c21cdc13e6f8b13\"","$:/ᢳ/":"\"bd07e8026d209acefdeb39c86211c650\"","-03":"\"63efb4edb6aadf16abb92317f1f2866b\"","...":"\"198a1883a58bd0aecff53b804a6ab93d\"","0121":"\"b137446eede1fc00fd958e4b50900b8f\"","0702":"\"9bb71ad446c94918b1697bc331e99007\"","0915":"\"0dfa7319ac34eb3c426b26282aad5066\"","0z":"\"b2ffcba4a5b45911b68ef4542c88a219\"","AiMls":"\"6d993e1623007b2135dae3c775f6900d\"","AlterTags0":"\"32b27b43e018b96119a3867c5a8e32a8\"","Bp/":"\"dd840c589d4b9d6abfa118f7d73bb7e0\"","Bp/Xe/H":"\"3b3e0500b37f2e69c297641b999b41f4\"","BpXeH":"\"882310bd26190b3690514b51c45e7515\"","ChineseZodiac":"\"29fa7be57ade15dd79c95f57d2552725\"","CpH":"\"88734edca979b6f31766761209c6d5da\"","CtrlsForGeoTwH":"\"ff514cbe4357c57a092a124ff400d0f7\"","CurbSide":"\"abafe45d15d8edafa932d22b614afc81\"","DanGowans":"\"5adf8becb33e6f0fd77fe7b5da90b0f7\"","DataDictionary":"\"f054446b001062248bc13b780c211bcd\"","DataWidget":"\"3ca079ccf58b0bcfe8201dbb0ff8050e\"","DataWidgetH":"\"61283ac48036a6b99098f3c79bebaeb2\"","DesignThoughts":"\"6dfcd601f6f42a6918a93b4af1a30904\"","DevH":"\"2383d6eb7c2fb0f8361fd56ae37cf502\"","Df/Aas":"\"4fb9ac9be95b34dad7ab9ea32b994916\"","DiigoH":"\"86515325d4eb10f8777c6230b1f3a24d\"","DlDtDd":"\"126216f3c4393228268f14b28f1b0a66\"","DnDrop":"\"26d95eea12dbf84bb5080f357809d83c\"","Do/Id/T":"\"92fb553175e48f9f12b9c978c1533867\"","DoT":"\"e323ad229439a55bc2529c027e35682c\"","EdD2023":"\"d8652ef5ebb6af5e4f8833cd60b340a4\"","EdD22":"\"194e6acc7a6f37c840c0b7cca9666ea6\"","ExportImport":"\"35c889a66d1f284d61c3c5fcef137b03\"","FairPay":"\"218d97a06360123a6eb8e587dcbe79fe\"","FiCoRe":"\"4f01e722f60ffd75dd3e4e8967beca94\"","FilterNotation":"\"99e6b61fbc983c56267bd743c69d4e87\"","FiltersH":"\"2f653c86beca4c2beae249e3832eef28\"","FusionT":"\"f8c6cdcf43ec2d2a731adc691bd3ac2b\"","GeoJsonClues":"\"7fdbf100345c1de09a05e88a05d2c041\"","GeoSpatial":"\"dfbb01baf13515f4920359d9516978c0\"","GeoTwH":"\"103fd4d45a31e72b9a8c8bb4df39cfdc\"","GetPut":"\"994c91439588f63381b33c5f47384199\"","Hans":"\"3235739cc39904ce4e0e42361d36eb4a\"","HansIsland":"\"23a86ab66206d01e108474e272baead9\"","HintsHw":"\"50683a0f3d80a67bc29f9d578612f7d4\"","HwT":"\"a3d26403c6ec331e7ed0f77e04254f58\"","HwT-11-":"\"9f32cf286814477d2484059f0c9eebf2\"","HwW":"\"78d15613b80d100915dd7fd7315da981\"","HwW/P":"\"b6bae880ae7469aacf28506b75fdb770\"","HwW202304":"\"d246753fd0c8381a0d663b8596445f08\"","HwX/pub":"\"8b30f2d5d64f215784b9dfd212373ccb\"","Hww/":"\"9444f24ac5d1a61133a7f735e603637c\"","Hww/Private":"\"fa91eaf650a515aaa0c3d55ac6b654c5\"","Hww/Public":"\"7da4840b7d7ee9590eeb0d6ccfbddc0a\"","HwwPriX":"\"79b5cfe3553dada9c4b28279aa167b29\"","HwwPubX":"\"ada069854aef165df67138f8b7368320\"","HwwX":"\"84050345ae3535271bbf333e946746b8\"","IdHw":"\"c8fc8b4fe681aa0ebc9684f2d30b6884\"","IdHwN":"\"d3f6ae3815942c929453ea066b1fc816\"","IdWeek":"\"f9d7b807847cdd599fc097f8be22d6e1\"","IsA":"\"eb2c64249fa7da499e543530411b9b58\"","IsOne":"\"d9620ff083ff6bd6d8b215381bbb6960\"","JrH":"\"d9c81b11636fc6f5a7a9db70f59d52be\"","JrHw":"\"0b73b24504aaa19af40249d30d8b9738\"","LaLn":"\"84915714e8562f1ecbbd1bd89c11f15d\"","LaLn.ca":"\"256084d78cff419dfedb33e3189b85f4\"","LaLo":"\"0760d89fe80334e59a19b580a296fdda\"","LaLoAlCa":"\"4b45ea7b78166c7e5bf3cfe8b504b07a\"","LaLoCa":"\"95a5ebf89ea78d13607e008220429ed3\"","LatLon.ca":"\"68f45d12400cb9355670813d0317a8ed\"","MetaContent":"\"c5ab71a66817479ddd31fa6282fd01a7\"","MetaTid":"\"a2675f0ffe1732de5477ae368c296391\"","MicroContent":"\"ce0fc822839dda3360f1069f22a21675\"","MiddleMeetUp":"\"7f6521b4709ddc447abfcdfe5472f450\"","MmDd":"\"a2e5adaed1c70fef5c195954dccd8196\"","New㊿":"\"51d4affad242d42597896c63be51106a\"","NonWords":"\"185bb487945eba013e3097167ad16192\"","NotMapped":"\"20d2aabb66695f72ffcd5af4b24225e3\"","NrH":"\"55eee6de3aef88d490055044f26e05dd\"","OldestAndBiggest":"\"3494c4437f00d9b477049f3dd130dd99\"","PobTob":"\"01a2a111df654bd0ec3994f4319e081c\"","PorTor":"\"57b3f4096c892632e45402cb0a5f7244\"","PriH":"\"50efcedcbb80695b279782fcd22d20eb\"","PsH":"\"ae4467b9ed84fcbd3f2a461d1afa2d02\"","PsH0":"\"2fa53218036c68dc15aa7856727cf2ac\"","PublicHww":"\"bb8e47c94e28d8f108e62c892a7dfaaa\"","QrSt":"\"0317363561c5725042341083b16b6fca\"","SideEditor":"\"c34fe6ee559e84944a817fe0a1e1691b\"","TdaT1123":"\"a07bbc3a9fe9602598348b3cc9be5626\"","TestId":"\"04f8113b5fab57bdde85e0a9b1541314\"","TiddlyHost":"\"a57ed85a71d38493c843e7b287b23f78\"","TiddlyTools":"\"6422c54ce1b9d02c5ecaf54b27552742\"","TiddlyTools/Home":"\"056821729947e2cd6b0d865b11007885\"","TiddlyTools/Macros/edit-list":"\"0b3a5e1851dac13aaf25aa166491f51a\"","TiddlyTools/Search/Filters":"\"7cb4bda597d75fd2d5fdd3bf7c8cbf40\"","TiddlyTools/Search/Info":"\"63d9b119d119c29126f9273d0dcbcb5e\"","TiddlyTools/Search/PowerSearch":"\"a1db978484b7d69a93b31de9df7f491c\"","TiddlyTools/Search/TagCloud":"\"6aa310a47cdac91d091ea559dca695ba\"","TiddlyTools/Search/Tags":"\"09fe1a24bcd7cb1e8912979dfd0a1521\"","TiddlyTools/Search/Titles":"\"f375cdfa5815e3cb1eeb216132693941\"","TiddlyTools/Time/3MonthCalendar":"\"9733d76f313e3bf66822dd5864cb9eb1\"","TiddlyTools/Time/Alarms":"\"ba7161a3fa4cb2fd83ea0342bf8507d3\"","TiddlyTools/Time/AutoSaver":"\"d8164ae8bcd5b821921f12bb5495dd8b\"","TiddlyTools/Time/Calendar":"\"b69e8b8e62852a228dac8ce317252910\"","TiddlyTools/Time/Clocks":"\"31120c348c14fa1940f83020cacf00e4\"","TiddlyTools/Time/CountDown":"\"a61c0eca2832f2977b5e45d51f4615ca\"","TiddlyTools/Time/EditDate":"\"c40be4cb984ab2463b4504732eb9df3c\"","TiddlyTools/Time/Events":"\"d61a1dd6081c600f29609e93a5ac14b1\"","TiddlyTools/Time/action-timeout.js":"\"6995e7c48505970c02a67d43dc870fd8\"","TilesH0529":"\"beb53aff1e145c0be7323ef2c017e7cd\"","TimePeriodsH":"\"a57ce321f0a45dfdb3e33738c48bb12c\"","TmD/w46":"\"660b97a9d8792b4aef70a6b2b691d1d3\"","TmD/w47":"\"6e02b3022797bb986d5d549577322da4\"","Tn/Tda/NotMapped":"\"3558e9eb1bc967d5e1e24800eb307f5a\"","TpT":"\"cd8f56cec2148ed5faffffeb41b6a157\"","Tw/Notes":"\"6be8a7a290e15e24b568099be2a2b15e\"","TwRecognition":"\"e9cddbff28d0042012f0c384d1d43d3b\"","TwScale":"\"242af275729c6ef26ebd4831ddd710c9\"","TweT":"\"c06970ef15f655dcd9bb6e4c57246f53\"","UlcPosition":"\"5cddaf957511c190cf865e8c24bfa7f6\"","UniCode":"\"d9d571ef6e11a2a9a18323b54dea0562\"","UsernameH":"\"7f97e73439a86a69d85afec781ce053d\"","VariablesH":"\"84e208538bb8600436b08ca7668ebca4\"","Xememex":"\"800b17af03e8d93458be9febc6b5738e\"","XememexH":"\"8e5daeaeedad2fe8abc498bccf00c349\"","XxHT":"\"25fedc56d4245914560436fb4c73343c\"","XxHT-11":"\"31d82c2d8d94c7b81613a57d9b6a2e28\"","YourData":"\"0c4f6339225562f636813c47dae6a841\"","_":"\"57d150de34cf9d5f8d653e123d3f8fec\"","a.𝕬":"\"4513d5236e4f92f153f6c956b7ef5142\"","e.":"\"35f9266c863f88c0c6223560febbbf95\"","e.1":"\"824cb6bea3e393ad0579794abc04f0b1\"","e._":"\"498967aeba37b58d7a0ce24f2fc0a723\"","e.code":"\"b2dc7ae360eb89b62902144448bf2c80\"","e.cols":"\"0fe876d0b188e13d3562bd7d1b4317e6\"","e.date!do":"\"35efcc84a7e3bbb3b11903c04cf88435\"","e.do":"\"ed63e5b687c9d5da60ac8bcc942a3e4d\"","e.do.25":"\"e4677b84cba061260a93a61d5db11683\"","e.do0":"\"3221c3054df16037ca488d0876a04a6c\"","e.do1":"\"487b3519bc8c88318c46758e166510a0\"","e.due":"\"ce7d218c0195af63a20457a49d63df31\"","e.edit":"\"d11eb42641d8047f5b3640d9a320ddde\"","e.go":"\"e26ac9e52e5b4d6a3626f3304c588117\"","e.open":"\"0b233316a2e1d5c08b449ce693b14777\"","e.rc":"\"be0d761111e8a9108e525a1fc02b4d4c\"","e.rows":"\"89dd0e21eed65ac22239bd93e46d7379\"","e.say":"\"0cd139ac96ecc8f1825c205a51928d86\"","e.tabs":"\"23f1fc6c18799a089f93e1c411613993\"","hAsDc":"\"a16fec649c453ea7d60ada116f91a903\"","hans":"\"eb8d337de6567da96c1952cd95bd8de6\"","hanswobbe":"\"1059403be9dcb4981854fb130df75932\"","hwo":"\"b93b0d7972a789f4a7a8fdd522eb04ee\"","quiz":"\"c62c9b0488b331169d36478c747b0265\"","quiz2":"\"84a950527becd7b2c6815a1f249b80ed\"","quizCode":"\"96921311e8556c8bc21714aed4ff8c98\"","quizTid":"\"9c0e7bc3f0b7894f86352138240b0be2\"","¡/寅":"\"a5cc55f910a4f1b28552912f47ec1b94\"","༠":"\"3c3dadef86acd7a04483c1e12dd70d1d\"","༠\\༠":"\"7f0d01c156d27a4f5c7118721357f8ac\"","᙮":"\"d545104863b865922f2415f80fcd048c\"","ᢳ":"\"db0122b9d592f8a7d454eb287cf66ed7\"","ᢳ/":"\"17db9c9b84cd368ca922f5ede77d6ea2\"","ᢳ/ViewTemplates/_":"\"076971b24592c118fdda95507e40a538\"","ᢳ/ℋ":"\"2dea7c0b666f00431d542dd36cb35a5f\"","ᢳ/㊿":"\"78834b6fac7a37925bf94aaf46216145\"","ℋ":"\"2be84c34ec3915b179335b25c018fd8f\"","ℋ⇔":"\"309843a8c307dceb0a95990132525215\"","ℋ⇔֎":"\"2917eaf9de6382e85d955e0f34d3333c\"","ℋ⑱":"\"cd13e02c9c7358fc56e53ea51c1d00c5\"","ℋ㋁":"\"e7a7c896913ecca8bea5de975ed78eef\"","ℋ㋄":"\"3fd93f3e43ba222dd9f0d028b3cc5b1f\"","⇔":"\"6258ba35ad4d8a26b1697a6fc5dddc61\"","⇔Xe":"\"6bd598ff752b692eea6ef1fbbb61e36a\"","∅":"\"dee5cb98d553ef6323a3b8ee2091bfec\"","∅.":"\"b819c6ddd8383863cc0d9652d84db1be\"","⌂":"\"aded5cc1c0196704aea1f79a19cb12cc\"","⍾":"\"fc8c1c9b83a825c37d846c4242ce4377\"","①♄":"\"4ae06eac692c3af69344150b16be9b3e\"","⑱":"\"bef1c1ea5b202249cde7c5707268a9e4\"","⑱♄":"\"1e41bc2703fe9648a839beaefb0595e4\"","★":"\"a6579b829c0f232138d4b65f55a98421\"","☉":"\"39bd061887f589b417125a84667028de\"","♄":"\"4e2628592884ece72710170509e62f47\"","⧗":"\"dddbb972f370eb7c1b1b6438b974ddad\"","⭾":"\"0505ca3127c6f8d5650147518d9e5eff\"","⮣":"\"f375aecff24a075a2742dff26916be01\"","㉝/㊿":"\"a9642d9fa9f0f9af2e0ccc9f6e893b13\"","㊼/StVar":"\"a5bedf18f18f38d72a495c44dcf898e7\"","㊼/♄":"\"4dd2b60e8a987bd0ba850befd252bfb0\"","㊼ᢳ":"\"d7a00c92442634b338792bbaa060c992\"","㊼㋋":"\"8cd439da79f781d0430f46fc78bc4c34\"","㊿":"\"9f5120d832336042a03ec87c71ae38f9\"","㊿\\":"\"299d2c8fce0ac4c955a47803ddea54a5\"","㊿\\Meta":"\"8b6d78859904db3d9350226e3bdab690\"","㋃":"\"a9c9281bb51d352daeaa5db3f448909e\"","㏩":"\"1172bfaa760cf853c942587e378c5dba\"","㏲":"\"705aeb3dd58fc9e6114a49ee7bf1f97e\"","㠭":"\"f9eb378a61a7cd3f2f906ee0965bebfb\"","卯/0915":"\"0a650406f831f288283c81f5b08f5b58\"","卯㋆/㉗/今":"\"67e7d2f143c75bf990e8186c38d9ecc5\"","卯㋇/㉝/今":"\"f090eb2df75bc8b6d9d0df12e568857e\"","卯㋈/㉟/今":"\"3b6e1d758ae19471c3956e6118db0df9\"","寅㋋":"\"4d63668b807280981cf6b49adbc015ba\"","寅㋋/㏹":"\"8f4bde79f580c879e2d9ca22e97c5ff9\"","寅㋋26":"\"2ee08b0ca38dc282aa805c9d1eb547bf\"","🆔.5.6.7":"\"9c5dc849279a03f5e832d00183f8e8a6\"","🆔/ℋ":"\"f7e67bedbff305c3c7970c404b94c1cf\"","🌐":"\"d81fade1a96ecb45bbbd580a8d326f11\"","📓":"\"fc396dbaa2c5b23ede95cf51697234c4\"","🔍":"\"4dd0c332c8bd1a7c72a87c8fa451228b\"","🔍/🆔":"\"289a82f9117ede5b1a6486dc11e42ea5\"","🔝":"\"98793e4c0ca2a025ed8be15723ed62c0\"","🔣":"\"d99c7b3703630c9a40f1214b93309e65\"","!":"\"9ece5e2fb7b138329ad541605d8bad93\""}
https://3ra8f69t8l.execute-api.eu-west-2.amazonaws.com/prod/
7dt020qa8e7mu1oqeqqc0sdss4
eu-west-2:a8912c43-2425-4dc8-b508-26f00b4c2342
hans
eu-west-2
eu-west-2_ozdiUBB1W
\whitespace trim <div class="tc-advanced-search"> <$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]" default="$:/core/ui/AdvancedSearch/System" actions="""<$action-setfield $tiddler="$:/state/advancedsearch/currentTab" text=<<currentTab>>/>""" explicitState="$:/state/tab--1498284803"/> </div>
\whitespace trim <div class="tc-control-panel"> <$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]" default="$:/core/ui/ControlPanel/Info" explicitState="$:/state/tab-1749438307"/> </div>
[list[DefaultTiddlers!!text]] ᢳ/
<$transclude tiddler="SiteSubtitle"> HwwPubX ℋ's [[卯㋈/㉟/今]] ~PublicDesignIndex [[ᢳ]]</$transclude>
Xememex.[[ℋ]]
0
$:/core/ui/MoreSideBar/Explorer
[[∅]] [[e.do.25]]
permaview
yes
above
HwW
YYYY-0MM-0DD
yes
sticky
yes
{}
{ "text": "", "tiddler": "is[tiddler]", "shadow": "", "system": "", "tag": "", "missing": "", "orphan": "", "image": "", "binary": "" }
{ "has": "", "term": "ℋ⑱", "notprefix": "$", "field": "modifier", "sort": "text" }
{ "has": "", "term": "ℋ" }
{ "has": "", "term": "20230426", "notprefix": "$", "field": "modified" }
{ "has": "", "term": "26", "notprefix": "$", "field": "modified", "sort": "modified" }
{ "has": "", "term": "ℋ⑱", "notprefix": "$", "field": "modifier", "sort": "text" }
{ "has": "", "term": "ℋ㋃", "notprefix": "$", "field": "modifier", "sort": "text", "custom": "hanswobbe" }
{ "untagged": "no", "tiddlers": "yes", "shadows": "no", "order": "count" }
[[$:/core/ui/ViewTemplate/body/default]]
show
show
show
[[New㊿]]
{"tiddlers":{"$:/plugins/EvidentlyCube/Common/Settings":{"title":"$:/plugins/EvidentlyCube/Common/Settings","tags":"$:/tags/ControlPanel","caption":"Evidently Cube","text":"\\whitespace trim\n! Evidently Cube plugins Settings\n\nBelow are settings for all Evidently Cube plugins.\n\n<$macrocall\n\t$name=\"tabs\"\n\ttabsList=\"[all[shadows+tiddlers]tag[$:/tags/EvidentlyCube/SettingsTab]!is[draft]sort[]]\"\n\tdefault={{{ [all[shadows+tiddlers]tag[$:/tags/EvidentlyCube/SettingsTab]!is[draft]sort[]limit[1]] }}}/>\n\n"},"$:/plugins/EvidentlyCube/AutoComplete/history":{"title":"$:/plugins/EvidentlyCube/AutoComplete/history","type":"text/vnd.tiddlywiki","text":"* ''1.0.15'':\n** ''Code Mirror integration:'' No longer throws an exception when triggering completion in non-codemirror input when codemirror editor is opened\n** ''Code Mirror integration:'' Completion opens at the correct position even when window is scrolled\n** ''Code Mirror integration:'' No longer throws an exception when selecting an option with mouse in non-codemirror input when codemirror editor is opened\n* ''1.0.14'':\n** Fixed a bug where navigating through auto completion would still trigger TW's keyboard widgets eg. navigating auto completion in sidebar search would also change selected search result\n** The list of suggestion can now be scrolled down using the keyboard.\n* ''1.0.13'' -- Added caption to triggers to improve how they are displayed in the settings\n* ''1.0.12'' -- Various small fixes and tweaks to problems introduced between 1.0.9 and 1.0.11.\n* ''1.0.11'' -- This plugin now takes preference over `codemirror-autocomplete` and will prevent the code mirror Auto Complete from opening at the same time as this\n* ''1.0.10'' -- No longer crashes when using together with a Twitter plugin or any other plugin which delays the execution of the `startup` module\n* ''1.0.9'' -- Using mouse for Auto Complete now works in tiddlers opened in a separate window\n* ''1.0.8'' -- Auto Complete now works gracefully with `codemirror-closebrackets` plugin\n* ''1.0.7'' -- Auto Complete now only opens in the window in which it was invoked when using Side Editor plugin or just opening a tiddler in a new window\n* ''1.0.6'':\n** If you use Auto Complete in a text area that is scrolled, Auto Complete window will now be correctly positioned.\n** If you use framed editor but the main window was scrolled, Auto Complete window will now be correctly positioned\n** Fixed incorrect placeholder for description field\n** Changed the default trigger slightly\n* ''1.0.5'' -- Auto Complete now also opens in tiddlers opened in a new window\n* ''1.0.4'' -- Added `Transform Filter` option to triggers which allows transforming the suggestion before it is inserted (eg to insert a field value instead)\n* ''1.0.3'' -- Added compatibility with Streams - this plugin's Enter takes priority over Streams's Enter\n* ''1.0.2'' -- Upped version because issue\n* ''1.0.1'' -- Added `z-index` to CSS so the completion always (tries to) appear at the top\n* ''1.0.0'' -- Initial release"},"$:/plugins/EvidentlyCube/AutoComplete/icon":{"title":"$:/plugins/EvidentlyCube/AutoComplete/icon","text":"iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAELklEQVRYhc2X309bZRjHP+/hnNIC2nXt5hYjrJHR8cOR1CiRBBISk6FGE2JK1JtdmEi4IPPKkOwf2D9g8ErTW27UC4WYGJRVL7xAN2DJ4hjMDRI2VmiRdqenPa8Xb1fa0gIt0PhNTs573vd9nvdznve3kFJK/ifSnyeSySRzc3OkUqmaNe5wOAgGg7hcrl2YZDJJf38/fr8fj8dTsVMpJaZp4nQ6K7Lb3NxkeXmZ2dlZBSSllJFIRIZCIWnbtqxGa2trcmxsrGI727ZlKBSSkUhESimlDpBKpfB4PFiWxfXr14nH4wV/cOXKFVZXV1lYWKClpYWOjg6mpqYA0DSNnp4e7ty5U3FEhRB4PJ7c0MiNGSkluq4zNDSEaZoFRn6/n7a2Nrq6unC73fh8Ptxud86hYRgVg+S3+1w6gNfrZXFxEcuy6O3tPZST5ubmXHp7e5uRkZGKQUzTZHFxEa/XC4DIdh83btxgenr6SH9ZqSzLYnBwkPHxcYQQCgZUuJLJJOl0umYwuq7jcrkQQqhvANu2CYfDTE5OYllWzWAMw2B4eJirV6+iaZqCmZ+fJxwOMzExgcPhqBlMKpVidHSUYDBId3e3golGowQCAdrb28nYkCnaIAwNbLk3vxIZGqQlIEHXINszBAIBotEokDe1AVIZ+Pwn2Cqc2XxwER7G4c/16mE+6YQfl+BZGq69Ad0v7a1TAOOogy/fUfT5EiKbdYTICAHvte6mS6kAxpZwL5oNZ5E8TjDTkMhONpeu4GN5URTAhVOqrBzQftoD88sD2C6xcQfPweYzWN5S3y+/AL4GuJXXdboGH3eWhzlIBWa6Bp8FK3Pwtr+6hg+EsSX8/kh1R76EgOIjmBDwqgce70C8aMDn12n1QLO7CpiMDb89LO+8WIYGC0/gUbx0uRBqXFUMs7IFP9yDgPdwhgBPk3C+ST3ltJGA7+6WL1/ZKgHz8wr8+i1cPgvObO5yDLwueLFoUZbA3afQ4laDdX0HHsSpauqnV2C8GCZjQx0w3AHuepU3tQTtPrhQIszh2/D+RTjtgj/W4JvbykfFyrPJwbT7oO8y/B3dLTzToMK8kdjro/MM3N9Sjybg0+4qQICbkRIwfc3w1bvwNAFpG5ocanYlspu4Uwe3Uy1sx6mR70vAgIL4+pZa9PpeUe+/1hVAmxc+6lBr0UmpAMbQ4Iu3Cit8eOnkGt8XJiPh5j9q995Pr52F+5uwU+Icdq5JzcgjwwA8ScC/B1wqL3khmoSN5N6ypiOczQpg6gSE2g9neNhVtWqYjJ09ABWFXwh4/Tz4Tx0/QFkYiRoLxd0kBLSePlmQHIxhGMRiMeqE5Nqbx72S7K9YLJa7qwkppUwkEgwMDFBfX09jY2PNQHZ2djBNk5mZGRoaGnYvcZZlsbS0VNN7k67rtLa2FkamZq0foP8APw/vuJS94F4AAAAASUVORK5CYII=","type":"image/png"},"$:/plugins/EvidentlyCube/AutoComplete/license":{"title":"$:/plugins/EvidentlyCube/AutoComplete/license","type":"text/vnd.tiddlywiki","text":"This plugin is licensed under the MIT license.\n\nCopyright 2022 Maurycy Zarzycki\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."},"$:/plugins/EvidentlyCube/AutoComplete/readme":{"title":"$:/plugins/EvidentlyCube/AutoComplete/readme","type":"text/vnd.tiddlywiki","text":"[[Github|https://github.com/EvidentlyCube/TW5-AutoComplete]]\n\n----\n\n! Features\n\nA versatile and easy to use auto completion for TiddlyWiki:\n\n* Auto complete anything you want:\n** Tiddler titles\n** Field values\n** Any filter result\n* Define your own triggers\n** Customize the filter which retrieves the suggestions\n** Customize template used for inserting the selected suggestion\n** Customize how the suggestions are displayed in the completion window\n** Control auto-triggering separately for inputs and text areas\n* Clear interface for editing the triggers\n* Manually open auto complete with customizable keyboard shortcut\n\n!! Plugin compatibility\n\n * Official [[Code Mirror|https://tiddlywiki.com/plugins/tiddlywiki/codemirror/]] plugin\n * [[Streams|https://saqimtiaz.github.io/streams/]] by saqimtiaz\n\n! How to use\n\n* After installing head to the Control Panel and open the tab ''Evidently Cube''\n* Create a new trigger using the button\n** It will be filled with sensible defaults\n** Customize the trigger to your heart's content\n* At any time press <kbd>Ctrl+Space</kbd> right in front of a defined trigger to open the completion window manually\n** Or use a different keyboard shortcut you defined"},"$:/plugins/EvidentlyCube/AutoComplete/Config":{"title":"$:/plugins/EvidentlyCube/AutoComplete/Config","rows":"8"},"$:/config/shortcuts/EC-AutoComplete":{"title":"$:/config/shortcuts/EC-AutoComplete","text":"ctrl+space"},"$:/config/ShortcutInfo/EC-AutoComplete":{"title":"$:/config/ShortcutInfo/EC-AutoComplete","text":"Triggers completion of Auto Complete plugin\n"},"$:/plugins/EvidentlyCube/AutoComplete/completion-api.js":{"title":"$:/plugins/EvidentlyCube/AutoComplete/completion-api.js","text":"/*\\\ntitle: $:/plugins/EvidentlyCube/AutoComplete/completion-api.js\ntype: application/javascript\nmodule-type: library\n\nAPI for the modal\n\n\\*/\n(function () {\n\n\tconst DATA_TIDDLER_NAME = \"$:/temp/AutoComplete/completion-data\";\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\n\tvar OPTIONS_TIDDLERS = [\n\t\t'$:/config/shortcuts/EC-AutoComplete',\n\t\t'$:/config/shortcuts-linux/EC-AutoComplete',\n\t\t'$:/config/shortcuts-not-linux/EC-AutoComplete',\n\t\t'$:/config/shortcuts-mac/EC-AutoComplete',\n\t\t'$:/config/shortcuts-not-mac/EC-AutoComplete',\n\t\t'$:/config/shortcuts-windows/EC-AutoComplete',\n\t\t'$:/config/shortcuts-not-windows/EC-AutoComplete',\n\t];\n\n\tfunction EC_AutoComplete() {\n\t\tthis.isActive = false;\n\t\tthis.activeState = {\n\t\t\ttrigger: null,\n\t\t\tlastQuery: null,\n\t\t\tselectedResult: -1,\n\t\t\tresults: [],\n\t\t\toptions: {}\n\t\t}\n\t\tthis.options = {\n\t\t\ttriggers: [],\n\t\t\ttriggerTiddlers: []\n\t\t}\n\n\t\tthis._loadOptions();\n\t\tthis._updateTriggerList(this._getTriggerTiddlerList());\n\n\t\tdocument.addEventListener('keydown', this._handleGlobalKeydownCapture.bind(this), true);\n\t\t$tw.wiki.addEventListener(\"change\", this._handleChange.bind(this));\n\t};\n\n\tEC_AutoComplete.prototype._handleGlobalKeydownCapture = function (event) {\n\t\tif (this.isActive && event.key === \"Escape\") {\n\t\t\tthis.finishCompletion();\n\t\t\tevent.stopImmediatePropagation();\n\t\t\tevent.preventDefault();\n\t\t}\n\t};\n\n\tEC_AutoComplete.prototype.getMatchingTrigger = function (lastCharacter, inputType, getFragmentCallback) {\n\t\tvar ignoreType = lastCharacter === null || lastCharacter === \"\";\n\n\t\tfor (let i = 0; i < this.options.triggers.length; i++) {\n\t\t\tvar triggerData = this.options.triggers[i];\n\n\t\t\tif (!ignoreType && !triggerData.autoTriggerInput && inputType === 'INPUT') {\n\t\t\t\tcontinue;\n\n\t\t\t} else if (!ignoreType && !triggerData.autoTriggerTextArea && inputType === 'TEXTAREA') {\n\t\t\t\tcontinue;\n\n\t\t\t} else if (lastCharacter && triggerData.triggerLastCharacter !== lastCharacter) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst fragment = getFragmentCallback(triggerData.trigger.length);\n\t\t\tif (fragment !== triggerData.trigger) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\treturn triggerData;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tEC_AutoComplete.prototype.startCompletion = function (trigger, position, options) {\n\t\tthis.isActive = true;\n\t\tthis.activeState.trigger = trigger;\n\t\tthis.activeState.lastQuery = null;\n\t\tthis.activeState.selectedResult = 0;\n\t\tthis.activeState.results = [];\n\t\tthis.activeState.options = options || {}\n\n\t\tthis.updateQuery(\"\");\n\n\t\tconst newStyle = `left: ${position.left.toFixed(4)}px; top: ${position.top.toFixed(4)}px`;\n\n\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'show', null, \"1\");\n\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'style', null, newStyle);\n\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'display-filter', null, trigger.displayFilter);\n\t\tif (typeof options.windowID !== \"undefined\") {\n\t\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'show-window', null, options.windowID);\n\t\t} else {\n\t\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'show-window', null, \"-1\");\n\t\t}\n\t};\n\n\tEC_AutoComplete.prototype.finishCompletion = function () {\n\t\tif (this.activeState.options.onFinish) {\n\t\t\tthis.activeState.options.onFinish();\n\t\t}\n\n\t\tthis.isActive = false;\n\t\tthis.activeState.trigger = null;\n\t\tthis.activeState.lastQuery = null;\n\t\tthis.activeState.selectedResult = -1;\n\t\tthis.activeState.results = [];\n\n\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'show', null, \"0\");\n\t};\n\n\tEC_AutoComplete.prototype.updateQuery = function (query) {\n\t\tif (query === this.activeState.lastQuery) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activeState.lastQuery = query;\n\t\tthis.activeState.selectedResult = 0;\n\n\t\tconst results = $tw.wiki.filterTiddlers(this.activeState.trigger.filter, getVariableFauxWidget('query', query));\n\n\t\tthis.activeState.results = results;\n\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'list', null, this.activeState.results);\n\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'index', null, 1);\n\t};\n\n\tEC_AutoComplete.prototype.changeSelection = function (delta) {\n\t\tthis.activeState.selectedResult += delta\n\n\t\tif (this.activeState.selectedResult < 0) {\n\t\t\tthis.activeState.selectedResult = this.activeState.results.length - 1;\n\t\t} else if (this.activeState.selectedResult >= this.activeState.results.length) {\n\t\t\tthis.activeState.selectedResult = 0;\n\t\t}\n\n\t\t$tw.wiki.setText(DATA_TIDDLER_NAME, 'index', null, this.activeState.selectedResult + 1);\n\t};\n\n\tEC_AutoComplete.prototype.getCompletedTemplate = function (option) {\n\t\tconst withReplacedOption = this.activeState.trigger.insertTemplate.replace(/\\$option\\$/g, option);\n\t\tconst caretTokenIndex = withReplacedOption.indexOf(\"$caret$\");\n\t\tconst withRemovedCaret = withReplacedOption.replace(/\\$caret\\$/g, '');\n\t\treturn {\n\t\t\ttext: withRemovedCaret,\n\t\t\tcaretIndex: caretTokenIndex !== -1\n\t\t\t\t? caretTokenIndex\n\t\t\t\t: withRemovedCaret.length\n\t\t};\n\t}\n\n\tEC_AutoComplete.prototype.getSelected = function () {\n\t\tconst selectedResult = this.activeState.results[this.activeState.selectedResult] || \"\";\n\n\t\treturn selectedResult\n\t\t\t? $tw.wiki.filterTiddlers(this.activeState.trigger.transformFilter,getVariableFauxWidget('currentTiddler', selectedResult))\n\t\t\t: \"\";\n\t};\n\n\tEC_AutoComplete.prototype.setSelectionByValue = function(value) {\n\t\tconst index = this.activeState.results.indexOf(value);\n\n\t\tif (index !== -1) {\n\t\t\tthis.activeState.selectedResult = index;\n\t\t}\n\t}\n\n\tEC_AutoComplete.prototype.getClicked = function (event) {\n\t\tif (event.target && event.target.classList.contains('ec_ac-link')) {\n\t\t\treturn event.target.innerText;\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tEC_AutoComplete.prototype.isManualTrigger = function (event) {\n\t\treturn $tw.keyboardManager.checkKeyDescriptors(event, this.options.manualTriggerKeyInfo);\n\t}\n\n\tEC_AutoComplete.prototype._handleChange = function (changedTiddlers) {\n\t\tif ($tw.utils.hopArray(changedTiddlers, OPTIONS_TIDDLERS)) {\n\t\t\tthis._loadOptions();\n\t\t}\n\n\t\tconst newTriggerTiddlerList = this._getTriggerTiddlerList();\n\n\t\tif (\n\t\t\t$tw.utils.hopArray(changedTiddlers, newTriggerTiddlerList)\n\t\t\t|| $tw.utils.hopArray(changedTiddlers, this.options.triggerTiddlers)\n\t\t) {\n\t\t\tthis._updateTriggerList(newTriggerTiddlerList);\n\t\t}\n\t};\n\n\tEC_AutoComplete.prototype._loadOptions = function () {\n\t\tthis.options.manualTriggerKeyInfo = $tw.keyboardManager.parseKeyDescriptors('((EC-AutoComplete))', { wiki: this.wiki });\n\t}\n\n\tEC_AutoComplete.prototype._getTriggerTiddlerList = function () {\n\t\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/EC/AutoComplete/Trigger\");\n\t};\n\n\tEC_AutoComplete.prototype._updateTriggerList = function (tiddlerList) {\n\t\tthis.options.triggers = [];\n\t\tthis.options.triggerTiddlers = tiddlerList;\n\n\t\tfor (var i = 0; i < tiddlerList.length; i++) {\n\t\t\tvar title = tiddlerList[i],\n\t\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields,\n\t\t\t\ttrigger = tiddlerFields.trigger,\n\t\t\t\tfilter = tiddlerFields.filter,\n\t\t\t\tinsertTemplate = tiddlerFields.template;\n\n\t\t\tif (!filter || !insertTemplate || !trigger) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.options.triggers.push({\n\t\t\t\tfilter: tiddlerFields.filter,\n\t\t\t\tdisplayFilter: tiddlerFields['display-filter'],\n\t\t\t\ttransformFilter: tiddlerFields['transform-filter'] || \"[<currentTiddler>]\",\n\t\t\t\ttrigger: trigger,\n\t\t\t\ttriggerLastCharacter: trigger.charAt(trigger.length - 1),\n\t\t\t\tinsertTemplate: insertTemplate,\n\t\t\t\tautoTriggerInput: tiddlerFields['auto-trigger-input'],\n\t\t\t\tautoTriggerTextArea: tiddlerFields['auto-trigger-textarea'],\n\t\t\t});\n\t\t}\n\t};\n\n\tfunction getVariableFauxWidget(name, value) {\n\t\treturn {\n\t\t\tgetVariable: function (name_) {\n\t\t\t\tif (name_ === name) {\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\texports.EC_AutoComplete = EC_AutoComplete;\n})();\n","type":"application/javascript","module-type":"library"},"$:/plugins/EvidentlyCube/AutoComplete/completion-window.js":{"title":"$:/plugins/EvidentlyCube/AutoComplete/completion-window.js","text":"/*\\\ntitle: $:/plugins/EvidentlyCube/AutoComplete/completion-window.js\ntype: application/javascript\nmodule-type: startup\n\nAdds support for auto complete in tiddlers opened in a new window\n\\*/\n\n(function () {\n\n\t/*jslint node: false, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\n\t// Export name and synchronous status\n\texports.name = \"evidentlycube-tiddlercompletion-window\";\n\texports.platforms = [\"browser\"];\n\texports.after = [\"windows\"];\n\texports.synchronous = true;\n\n\texports.startup = function () {\n\t\tconst innerListener = $tw.rootWidget.eventListeners['tm-open-window'];\n\t\t$tw.rootWidget.addEventListener(\"tm-open-window\", function (event) {\n\t\t\tinnerListener(event);\n\n\t\t\tvar title = event.param || event.tiddlerTitle;\n\t\t\tvar paramObject = event.paramObject || {};\n\t\t\tvar windowID = paramObject.windowID || title;\n\n\t\t\tconst window = $tw.windows[windowID];\n\t\t\tconst parser = $tw.wiki.parseTiddler(\"$:/plugins/EvidentlyCube/AutoComplete/window\");\n\t\t\tconst widgetNode = $tw.wiki.makeWidget(parser, {\n\t\t\t\tdocument: window.document,\n\t\t\t\tparentWidget: $tw.rootWidget,\n\t\t\t\tvariables: {\n\t\t\t\t\t'tv-window-id': windowID\n\t\t\t\t }\n\t\t\t});\n\t\t\tconst refreshHandler = function (changes) {\n\t\t\t\twidgetNode.refresh(changes);\n\t\t\t}\n\n\t\t\t// Used to prevent auto complete opening in all windows\n\t\t\twindow.document._ecAcWindowID = windowID;\n\t\t\t$tw.wiki.addEventListener(\"change\", refreshHandler);\n\t\t\twindow.addEventListener(\"beforeunload\", function (event) {\n\t\t\t\t$tw.wiki.removeEventListener(\"change\", refreshHandler);\n\t\t\t}, false);\n\n\t\t\twidgetNode.render(window.document.body, window.document.body.firstChild);\n\t\t});\n\t};\n\n})();\n","type":"application/javascript","module-type":"startup"},"$:/plugins/EvidentlyCube/AutoComplete/completion.js":{"title":"$:/plugins/EvidentlyCube/AutoComplete/completion.js","text":"/*\\\ntitle: $:/plugins/EvidentlyCube/AutoComplete/completion.js\ntype: application/javascript\nmodule-type: startup\n\nHooks the module\n\\*/\n\n(function () {\n\n\t/*jslint node: false, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\n\t// Export name and synchronous status\n\texports.name = \"evidentlycube-tiddlercompletion\";\n\texports.platforms = [\"browser\"];\n\texports.after = [\"startup\"];\n\texports.before = [\"render\"];\n\texports.synchronous = true;\n\n\texports.startup = function () {\n\t\tif ($tw.node) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst monkeypatch = {\n\t\t\tsequence: function(originalMethod, newMethod) {\n\t\t\t\treturn function() {\n\t\t\t\t\tconst result = originalMethod.apply(this, arguments);\n\n\t\t\t\t\tnewMethod.apply(this, arguments);\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tpreventable: function(originalMethod, newMethod) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif (newMethod.apply(this, arguments) !== false) {\n\t\t\t\t\t\treturn originalMethod.apply(this, arguments);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst EC_AutoComplete = require('$:/plugins/EvidentlyCube/AutoComplete/completion-api.js').EC_AutoComplete;\n\t\tconst completionApi = new EC_AutoComplete();\n\n\t\trequire('$:/plugins/EvidentlyCube/AutoComplete/integration-core.js').patch(completionApi, monkeypatch);\n\t\ttry {\n\t\t\trequire('$:/plugins/EvidentlyCube/AutoComplete/integration-codemirror.js').patch(completionApi, monkeypatch);\n\t\t} catch (e) {\n\t\t\t// Silently ignore if Code Mirror is not installed\n\t\t}\n\n\t};\n\n})();\n","type":"application/javascript","module-type":"startup"},"$:/plugins/EvidentlyCube/AutoComplete/integration-codemirror.js":{"title":"$:/plugins/EvidentlyCube/AutoComplete/integration-codemirror.js","text":"/*\\\ntitle: $:/plugins/EvidentlyCube/AutoComplete/integration-codemirror.js\ntype: application/javascript\nmodule-type: library\n\nAutocompletion integration for Simple text editor\n\n\\*/\n(function () {\n\n\texports.patch = function(completionAPI, monkeypatch) {\n\t\tvar editCodeMirrorWidget = require('$:/plugins/tiddlywiki/codemirror/edit-codemirror.js')['edit-codemirror'];\n\n\t\tvar selectionStart = -1;\n\t\tvar activeCm = null;\n\t\tvar activeDocument = null;\n\t\tvar triggerLength = -1;\n\n\t\teditCodeMirrorWidget.prototype.render = monkeypatch.sequence(editCodeMirrorWidget.prototype.render, widgetRender);\n\n\t\tfunction widgetRender() {\n\t\t\tthis.engine.cm.on('keydown', handleKeydown);\n\t\t\tthis.engine.cm.on('blur', handleBlur);\n\t\t\tthis.engine.cm.on('change', handleEngineInput);\n\t\t\tthis.engine.cm.on('cursorActivity', handleCursorActivity);\n\t\t}\n\n\t\tfunction handleKeydown(cm, event) {\n\t\t\tif (completionAPI.isActive) {\n\t\t\t\tswitch(event.key) {\n\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\t\tcompletionAPI.changeSelection(event.key === \"ArrowUp\" ? -1 : 1);\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"Enter\":\n\t\t\t\t\t\tconst option = completionAPI.getSelected();\n\n\t\t\t\t\t\tif (option) {\n\t\t\t\t\t\t\tinsertSelection(option);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcompletionAPI.finishCompletion();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (completionAPI.isManualTrigger(event)) {\n\t\t\t\t\t\t\t// Prevent codemirror-autocomplete from triggering while this one is visible\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t} else if (completionAPI.isManualTrigger(event)) {\n\t\t\t\tvar triggerData = completionAPI.getMatchingTrigger(\"\", \"\", function (length) {\n\t\t\t\t\tconst caret = cm.getCursor();\n\t\t\t\t\tconst start = {\n\t\t\t\t\t\tline: caret.line,\n\t\t\t\t\t\tch: Math.max(0, caret.ch - length)\n\t\t\t\t\t};\n\n\t\t\t\t\treturn cm.getRange(start, caret);\n\t\t\t\t});\n\n\t\t\t\tif (triggerData) {\n\t\t\t\t\tstartCompletion(triggerData, cm);\n\t\t\t\t\t// Prevent codemirror-autocomplete from triggering\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction startCompletion(triggerData, cm) {\n\t\t\tactiveCm = cm;\n\t\t\tactiveDocument = cm.getInputField().ownerDocument;\n\n\t\t\tactiveDocument.addEventListener('mousedown', handleDocumentMouseDownCapture, true);\n\n\t\t\ttriggerLength = triggerData.trigger.length;\n\t\t\tselectionStart = cm.getCursor();\n\t\t\tcompletionAPI.startCompletion(triggerData, getCaretCoordinates(cm, selectionStart), {\n\t\t\t\tonFinish: handleFinishCompletion,\n\t\t\t\twindowID: cm.getInputField().ownerDocument._ecAcWindowID\n\t\t\t});\n\t\t}\n\n\t\tfunction handleDocumentMouseDownCapture(event) {\n\t\t\tconst target = event.target;\n\t\t\tif (\n\t\t\t\t!completionAPI.isActive\n\t\t\t\t|| !activeCm\n\t\t\t\t|| !target\n\t\t\t\t|| !target.classList.contains('ec_ac-link')\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = target.getAttribute('data-value');\n\n\t\t\tcompletionAPI.setSelectionByValue(value);\n\t\t\tinsertSelection(completionAPI.getSelected());\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\n\t\tfunction handleFinishCompletion() {\n\t\t\tactiveDocument.removeEventListener('keydown', handleDocumentMouseDownCapture, true);\n\n\t\t\tactiveCm = null;\n\t\t\tactiveDocument = null;\n\t\t}\n\n\t\tfunction handleEngineInput(cm, operation) {\n\t\t\tconst data = getOperationData(cm, operation);\n\n\t\t\tif (!completionAPI.isActive && data !== null && data !== \"\") {\n\t\t\t\tselectionStart = cm.getCursor();\n\n\t\t\t\tvar triggerData = completionAPI.getMatchingTrigger(data, \"TEXTAREA\", function (length) {\n\t\t\t\t\tconst caret = cm.getCursor();\n\t\t\t\t\tconst start = {\n\t\t\t\t\t\tline: caret.line,\n\t\t\t\t\t\tch: Math.max(0, caret.ch - length)\n\t\t\t\t\t};\n\n\t\t\t\t\treturn cm.getRange(start, caret);\n\t\t\t\t});\n\n\t\t\t\tif (triggerData) {\n\t\t\t\t\tactiveCm = cm;\n\t\t\t\t\tstartCompletion(triggerData, cm);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction getOperationData(cm, operation) {\n\t\t\tif (!operation || !operation.text || operation.text.length !== 1 || operation.origin !== \"+input\") {\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\tconst inputText = operation.text[0];\n\n\t\t\tconst autoCloseBracketsConf = cm.getOption('autoCloseBrackets');\n\t\t\tif (autoCloseBracketsConf) {\n\t\t\t\t// Special handling if autoCloseBrackets plugin is enabled\n\t\t\t\tconst pairs = autoCloseBracketsConf.pairs || \"()[]{}''\\\"\\\"\";\n\t\t\t\tconst index = pairs.indexOf(inputText);\n\n\t\t\t\t// If a configured pair was input then let's act as if only the first character was inserted\n\t\t\t\tif (index !== -1 && index % 2 === 0) {\n\t\t\t\t\treturn inputText.substring(0, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn inputText;\n\t\t}\n\n\t\tfunction handleBlur() {\n\t\t\tif (completionAPI.isActive) {\n\t\t\t\tcompletionAPI.finishCompletion();\n\t\t\t}\n\t\t}\n\n\t\tfunction handleCursorActivity(cm) {\n\t\t\tif (!completionAPI.isActive || !cm.hasFocus()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cursor = cm.getCursor();\n\n\t\t\tif (cursor.line < selectionStart.line || cursor.ch < selectionStart.ch) {\n\t\t\t\tcompletionAPI.finishCompletion();\n\t\t\t} else {\n\t\t\t\tcompletionAPI.updateQuery(cm.getRange(selectionStart, cursor));\n\t\t\t}\n\t\t}\n\n\t\tfunction insertSelection(value) {\n\t\t\tconst completed = completionAPI.getCompletedTemplate(value);\n\t\t\tconst sliceStart = {\n\t\t\t\tline: selectionStart.line,\n\t\t\t\tch: selectionStart.ch - triggerLength\n\t\t\t};\n\t\t\tconst sliceEnd = activeCm.getCursor();\n\n\t\t\tactiveCm.replaceRange(completed.text, sliceStart, sliceEnd);\n\t\t\tactiveCm.setCursor({\n\t\t\t\tline: selectionStart.line,\n\t\t\t\tch: selectionStart.ch - triggerLength + completed.caretIndex\n\t\t\t});\n\t\t\tcompletionAPI.finishCompletion();\n\t\t}\n\n\t\tfunction getCaretCoordinates(cm, caretPos) {\n\t\t\tconst coords = cm.charCoords(caretPos);\n\n\t\t\treturn {\n\t\t\t\tleft: coords.left,\n\t\t\t\ttop: coords.bottom\n\t\t\t}\n\t\t}\n\t}\n})();\n","type":"application/javascript","module-type":"library"},"$:/plugins/EvidentlyCube/AutoComplete/integration-core.js":{"title":"$:/plugins/EvidentlyCube/AutoComplete/integration-core.js","text":"/*\\\ntitle: $:/plugins/EvidentlyCube/AutoComplete/integration-core.js\ntype: application/javascript\nmodule-type: library\n\nAutocompletion integration for Simple text editor\n\n\\*/\n(function () {\n\n\texports.patch = function(completionAPI, monkeypatch) {\n\t\tvar editTextWidget = require('$:/core/modules/widgets/edit-text.js')['edit-text'];\n\t\tvar simpleEngine = require('$:/core/modules/editor/engines/simple.js').SimpleEngine;\n\t\tvar framedEngine = require('$:/core/modules/editor/engines/framed.js').FramedEngine;\n\t\tvar getBaseCaretCoordinates = require('$:/plugins/EvidentlyCube/AutoComplete/textarea-caret-position.js').getCaretCoordinates;\n\n\t\tvar selectionStart = -1;\n\t\tvar activeDom = null;\n\t\tvar activeDocument_keyHook = null;\n\t\tvar activeDocument_mouseHook = null;\n\t\tvar triggerLength = -1;\n\n\t\t// Needed to be able to detect main TW window in the mechanism that prevents\n\t\t// Auto Complete from opening in multiple windows\n\t\tdocument._ecAcWindowID = \"\";\n\n\t\teditTextWidget.prototype.render = monkeypatch.sequence(editTextWidget.prototype.render, widgetRender);\n\t\teditTextWidget.prototype.handleKeydownEvent = monkeypatch.preventable(editTextWidget.prototype.handleKeydownEvent, handleWidgetKeydown);\n\t\tsimpleEngine.prototype.handleInputEvent = monkeypatch.preventable(simpleEngine.prototype.handleInputEvent, handleEngineInput);\n\t\tframedEngine.prototype.handleInputEvent = monkeypatch.preventable(framedEngine.prototype.handleInputEvent, handleEngineInput);\n\n\t\tfunction widgetRender() {\n\t\t\tthis.engine.domNode.addEventListener('blur', handleBlur);\n\t\t\tthis.engine.domNode.addEventListener('keyup', handleKeyup);\n\n\t\t\t// We need to be able to detect this even for inputs\n\t\t\tif (!this.editShowToolbar) {\n\t\t\t\t$tw.utils.addEventListeners(this.engine.domNode, [\n\t\t\t\t\t{ name: 'keydown', handlerObject: this, handlerMethod: 'handleKeydownEvent' }\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\n\t\tfunction handleWidgetKeydown(event) {\n\t\t\tif (completionAPI.isActive) {\n\t\t\t\tswitch(event.key) {\n\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\t\tcompletionAPI.changeSelection(event.key === \"ArrowUp\" ? -1 : 1);\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t} else if (completionAPI.isManualTrigger(event)) {\n\t\t\t\tvar triggerData = completionAPI.getMatchingTrigger(\"\", event.target.tagName, function (length) {\n\t\t\t\t\treturn event.target.value.substr(event.target.selectionStart - length, length);\n\t\t\t\t});\n\n\t\t\t\tif (triggerData) {\n\t\t\t\t\tstartCompletion(triggerData, event.target);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction startCompletion(triggerData, dom) {\n\t\t\t// Special handling to avoid confirm to close draft when editing in framed editor\n\t\t\tactiveDocument_keyHook = dom.ownerDocument;\n\t\t\tactiveDocument_mouseHook = activeDocument_keyHook.defaultView.top.document;\n\n\t\t\t// Iframed editor compatibility: Prevent escape from asking to close the tiddler if completion is active\n\t\t\t// Streams Plugin compatibility: Handle enter on root to circumvent new stream being created\n\t\t\tactiveDocument_keyHook.addEventListener('keydown', handleDocumentKeydownCapture, true);\n\t\t\tactiveDocument_mouseHook.addEventListener('mousedown', handleDocumentMouseDownCapture, true);\n\n\t\t\tactiveDom = dom;\n\t\t\ttriggerLength = triggerData.trigger.length;\n\t\t\tselectionStart = dom.selectionStart;\n\t\t\tcompletionAPI.startCompletion(triggerData, getCaretCoordinates(dom, selectionStart), {\n\t\t\t\tonFinish: handleFinishCompletion,\n\t\t\t\twindowID: dom.ownerDocument.defaultView.top.document._ecAcWindowID\n\t\t\t});\n\t\t}\n\n\t\tfunction handleFinishCompletion() {\n\t\t\tactiveDocument_keyHook.removeEventListener('keydown', handleDocumentKeydownCapture, true);\n\t\t\tactiveDocument_mouseHook.removeEventListener('mousedown', handleDocumentMouseDownCapture, true);\n\n\t\t\tactiveDom = null;\n\t\t\tactiveDocument_keyHook = null;\n\t\t\tactiveDocument_mouseHook = null;\n\t\t}\n\n\t\tfunction handleDocumentMouseDownCapture(event) {\n\t\t\tconst target = event.target;\n\t\t\tif (!completionAPI.isActive || !target || !target.classList.contains('ec_ac-link')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = target.getAttribute('data-value');\n\n\t\t\tcompletionAPI.setSelectionByValue(value);\n\t\t\tinsertSelection(completionAPI.getSelected());\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\n\t\tfunction handleDocumentKeydownCapture(event) {\n\t\t\tif (!completionAPI.isActive) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tswitch(event.key) {\n\t\t\t\tcase 'Escape':\n\t\t\t\t\tcompletionAPI.finishCompletion();\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Enter':\n\t\t\t\t\tif (!event.ctrlKey && !event.shiftKey && !event.altKey) {\n\t\t\t\t\t\tconst option = completionAPI.getSelected();\n\n\t\t\t\t\t\tif (option) {\n\t\t\t\t\t\t\tinsertSelection(option);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcompletionAPI.finishCompletion();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleEngineInput(event) {\n\t\t\tif (!completionAPI.isActive && event.data !== null && event.data !== \"\") {\n\t\t\t\tvar triggerData = completionAPI.getMatchingTrigger(event.data, event.target.tagName, function (length) {\n\t\t\t\t\treturn event.target.value.substr(event.target.selectionStart - length, length);\n\t\t\t\t});\n\n\t\t\t\tif (triggerData) {\n\t\t\t\t\tactiveDom = event.target;\n\t\t\t\t\tstartCompletion(triggerData, event.target);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction handleBlur(event) {\n\t\t\tif (completionAPI.isActive) {\n\t\t\t\tcompletionAPI.finishCompletion();\n\t\t\t}\n\t\t}\n\n\t\tfunction handleKeyup(event) {\n\t\t\tif (!completionAPI.isActive) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (activeDom.selectionStart < selectionStart) {\n\t\t\t\tcompletionAPI.finishCompletion();\n\t\t\t} else {\n\t\t\t\tcompletionAPI.updateQuery(activeDom.value.substring(selectionStart, activeDom.selectionStart));\n\t\t\t}\n\t\t}\n\n\t\tfunction insertSelection(value) {\n\t\t\tconst completed = completionAPI.getCompletedTemplate(value);\n\t\t\tconst sliceStart = selectionStart - triggerLength;\n\t\t\tconst sliceEnd = activeDom.selectionStart;\n\n\t\t\tif (activeDom.getRootNode().execCommand) {\n\t\t\t\tactiveDom.selectionStart = sliceStart;\n\t\t\t\tactiveDom.selectionEnd = sliceEnd;\n\t\t\t\tactiveDom.getRootNode().execCommand(\"insertText\", false, completed.text);\n\n\t\t\t} else {\n\t\t\t\tactiveDom.value = activeDom.value.substr(0, sliceStart)\n\t\t\t\t\t+ completed.text\n\t\t\t\t\t+ activeDom.value.substr(sliceEnd);\n\t\t\t}\n\n\t\t\tactiveDom.selectionStart = activeDom.selectionEnd = selectionStart - triggerLength + completed.caretIndex;\n\t\t\tcompletionAPI.finishCompletion();\n\t\t}\n\n\t\tfunction getCaretCoordinates() {\n\t\t\tconst baseCoords = activeDom.getBoundingClientRect();\n\t\t\tconst domDocument = activeDom.getRootNode();\n\t\t\tconst domWindow = domDocument.defaultView;\n\t\t\tconst caretCoords = getBaseCaretCoordinates(activeDom, selectionStart);\n\t\t\tconst domScroll = {left: -activeDom.scrollLeft, top: -activeDom.scrollTop};\n\t\t\tconst containingIframe = getContainingIframe(activeDom);\n\t\t\tconst iframeCoords = getIframeOffset(containingIframe);\n\t\t\tconst parentWindowCoords = containingIframe\n\t\t\t\t? {left: containingIframe.ownerDocument.defaultView.scrollX, top: containingIframe.ownerDocument.defaultView.scrollY}\n\t\t\t\t: {left: 0, top: 0};\n\n\t\t\tconst totalCoords = sumCoords([baseCoords, caretCoords, iframeCoords, parentWindowCoords, domScroll]);\n\n\t\t\treturn {\n\t\t\t\tleft: totalCoords.left + domWindow.scrollX,\n\t\t\t\ttop: totalCoords.top + domWindow.scrollY + caretCoords.height\n\t\t\t}\n\t\t}\n\n\t\tfunction sumCoords(coords) {\n\t\t\tconst totalCoords = {left: 0, top: 0};\n\t\t\tfor(const coord of coords) {\n\t\t\t\ttotalCoords.left += coord.left;\n\t\t\t\ttotalCoords.top += coord.top;\n\t\t\t}\n\n\t\t\treturn totalCoords;\n\t\t}\n\n\t\tfunction getContainingIframe(dom) {\n\t\t\tconst root = dom.getRootNode();\n\n\t\t\tif (root !== document) {\n\t\t\t\tconst parentDocument = root.defaultView.parent.document;\n\t\t\t\tconst iframes = parentDocument.querySelectorAll('iframe');\n\t\t\t\tfor (var i = 0; i < iframes.length; i++) {\n\t\t\t\t\tconst iframe = iframes[i];\n\n\t\t\t\t\tif (iframe.contentDocument !== root) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn iframe;;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction getIframeOffset(containingIframe) {\n\t\t\treturn containingIframe\n\t\t\t\t? containingIframe.getBoundingClientRect()\n\t\t\t\t: {top: 0, left: 0};\n\t\t}\n\t}\n})();\n","type":"application/javascript","module-type":"library"},"$:/plugins/EvidentlyCube/AutoComplete/Settings":{"title":"$:/plugins/EvidentlyCube/AutoComplete/Settings","tags":"$:/tags/EvidentlyCube/SettingsTab","caption":"Auto Complete","text":"\\define action-new-trigger()\n<$action-createtiddler\n\t$basetitle={{{ [all[shadows+tiddlers]tag[$:/tags/EC/AutoComplete/Trigger]!is[draft]count[]add[1]addprefix[$:/EvidentlyCube/Trigger/]] }}}\n\ttags=\"$:/tags/EC/AutoComplete/Trigger\"\n\tcaption={{{ [all[shadows+tiddlers]tag[$:/tags/EC/AutoComplete/Trigger]!is[draft]count[]add[1]addprefix[Unnamed trigger ]] }}}\n\ttrigger=\"[[\"\n\tfilter=\"[all[tiddlers]!is[system]!is[draft]search:title<query>]\"\n\tdisplay-filter=\"[<currentTiddler>]\"\n\ttemplate=\"[[$option$]]$caret$\"\n\tauto-trigger-textarea=\"1\"\n>\n\t<$action-navigate $to=<<createTiddler-title>> scroll=\"yes\"/>\n</$action-createtiddler>\n\\end\n\n\\define action-open-keyboard-shortcuts()\n<$action-setfield $tiddler=\"$:/state/tab-1749438307\" text=\"$:/core/ui/ControlPanel/KeyboardShortcuts\" />\n\\end\n\n\\define comp-open-keyboard-shortcuts()\n<$button\n\ttag=\"a\"\n\tclass=\"tc-tiddlylink tc-tiddlylink-resolves ec_ac-pointer\"\n\tactions=<<action-open-keyboard-shortcuts>>\n>Keyboard Shortcuts</$button>\n\n\\end\n\nConfiguration for the [[Auto Complete|$:/plugins/EvidentlyCube/AutoComplete]] plugin.\n\n! Registered Triggers\n\n<ul>\n\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EC/AutoComplete/Trigger]!is[draft]sortan[title]sortan[caption]]\">\n\t\t<li><$link to=<<currentTiddler>>><$view field=\"caption\"><$view field=\"title\"/></$view></$link> (Trigger <code>{{!!trigger}}</code>)</li>\n\t</$list>\n\t<li><$button actions=<<action-new-trigger>>>Create a new trigger</$button></li>\n</ul>\n\n! Config\n\n<table>\n<colgroup>\n\t<col width=\"60%\"/>\n</colgroup>\n<tbody>\n<tr>\n\t<td align=\"center\">\n\t\t''Displayed results''<br/>\n\t\t//Maximum number of results to display in the auto complete window, must be between 1 and 99//\n\t</td>\n\t<td>\n\t\t<$edit-text tiddler=\"$:/plugins/EvidentlyCube/AutoComplete/Config\" field=\"rows\" default=\"8\"/>\n\t\t<$list filter=\"\"\"\n\t\t\t[{$:/plugins/EvidentlyCube/AutoComplete/Config!!rows}floor[]compare:number:lt[1]]\n\t\t\t[{$:/plugins/EvidentlyCube/AutoComplete/Config!!rows}floor[]compare:number:gt[99]]\n\t\t\t+[count[]!match[0]]\n\t\t\"\"\">\n\t\t\t<div class=\"tc-error\">Must be a number between 1 and 99</div>\n\t\t</$list>\n\t</td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Keyboard Shortcut''<br/>\n\t\t//Use this keyboard shortcut right in front of a trigger to manually open the completion window; can be changed in <<comp-open-keyboard-shortcuts>>tab//\n\t</td>\n\t<td>\n\t<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\">\n\t\t<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{{ [<currentTiddler>addsuffix[EC-AutoComplete]get[text]] }}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\t</$list>\n\t</td>\n</tr>\n</tbody>\n</table>\n\n"},"$:/plugins/EvidentlyCube/AutoComplete/template-cascade":{"title":"$:/plugins/EvidentlyCube/AutoComplete/template-cascade","tags":"$:/tags/ViewTemplateBodyFilter","list-after":"$:/config/ViewTemplateBodyFilters/system","text":"[tag[$:/tags/EC/AutoComplete/Trigger]then[$:/plugins/EvidentlyCube/AutoComplete/template]]"},"$:/plugins/EvidentlyCube/AutoComplete/template":{"title":"$:/plugins/EvidentlyCube/AutoComplete/template","text":"\\define must-be-defined(field name)\n<$list filter=\"[{!!$field$}match[]]\">\n\t<span class=\"tc-error\">\n\t\t$name$ must be defined\n\t</span>\n</$list>\n\\end\n\n\\define must-be-valid-filter(field)\n<$let\n\tbase-filter={{!!$field$}}\n\tsuffix=\" +[limit[1]]\"\n\tfilter={{{ [<base-filter>addsuffix<suffix>] }}}\n>\n<$list filter=<<filter>>>\n\t<$list filter={{{ [<currentTiddler>prefix[Filter error]] }}}>\n\t\t<span class=\"tc-error\">\n\t\t\t<$text text=<<currentTiddler>>/>\n\t\t</span>\n\t</$list>\n</$list>\n</$let>\n\\end\n\n<div class=\"ec_ac-options\">\n<h1>Auto complete trigger</h1>\n\n<p>This tiddler defines a trigger for Auto Complete plugin.</p>\n\n<table>\n<colgroup>\n\t<col width=\"50%\"/>\n</colgroup>\n<tbody>\n<tr>\n\t<td align=\"center\">\n\t\t''Caption:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tOptional caption displayed in the Control Panel instead of the tiddler name\n\t\t</p>\n\t</td>\n\t<td><$edit-text class=\"ec-tc-disabled\" field=\"caption\" default=\"\" placeholder=\"Caption...\"/></td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Description:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tA description of this trigger to make it easier to keep things clean.\n\t\t</p>\n\t</td>\n\t<td><$edit-text class=\"ec-tc-disabled\" field=\"text\" default=\"\" placeholder=\"Description for this trigger...\"/></td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Trigger:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tDefines the text which will trigger auto completion.<br/>\n\t\t\tFor example `[[` will cause the auto completion to appear after you type `[[` in any text field.\n\t\t</p>\n\t</td>\n\t<td>\n\t\t<$edit-text class=\"ec-tc-disabled\" field=\"trigger\" placeholder=\"Trigger...\"/>\n\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EC/AutoComplete/Trigger]field:trigger{!!trigger}] -[<currentTiddler>] +[limit[1]]\">\n\t\t\t<span class=\"tc-error\">\n\t\t\t\tTrigger already used in: <<currentTiddler>>\n\t\t\t</span>\n\t\t</$list>\n\t\t<<must-be-defined \"trigger\" \"Trigger\">>\n\t</td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Suggestion Filter:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tThis filter generates the list of options that will be displayed in the auto completion.<br/>\n\t\t\tUse variable `query` to inject the typed text.\n\t\t</p>\n\t</td>\n\t<td>\n\t\t<$edit-text class=\"ec-tc-disabled\" tag=\"textarea\" field=\"filter\" placeholder=\"Filter...\"/>\n\t\t<<must-be-valid-filter \"filter\">>\n\t\t<<must-be-defined \"filter\" \"Filter\">>\n\t</td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Display Filter:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tAdvanced feature!<br/>\n\t\t\tTransforms how the suggestion will be displayed in auto complete window.<br/>\n\t\t\t`<currentTiddler>` contains the suggestion being displayed.\n\t\t</p>\n\t</td>\n\t<td>\n\t\t<$edit-text class=\"ec-tc-disabled\" tag=\"textarea\" field=\"display-filter\" placeholder=\"Display filter...\"/>\n\t\t<<must-be-valid-filter \"display-filter\">>\n\t\t<<must-be-defined \"display-filter\" \"Display filter\">>\n\t</td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Transform Filter:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tAdvanced feature!<br/>\n\t\t\tTransform the selected suggestion before it's inserted.<br/>\n\t\t\tIt's useful when you want to insert tiddler's text or data indexes.<br/>\n\t\t\t`<currentTiddler>` contains the suggestion selected.\n\t\t</p>\n\t</td>\n\t<td>\n\t\t<$edit-text class=\"ec-tc-disabled\" tag=\"textarea\" field=\"transform-filter\" placeholder=\"[<currentTiddler>]\"/>\n\t\t<<must-be-valid-filter \"transform-filter\">>\n\t</td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Template:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tA template that is inserted when you select an option from auto completion.<br/>\n\t\t\t`$option$` will be replaced by the selected option. <br/>\n\t\t\t`$caret$` will put the caret on that position after insertion.\n\t\t</p>\n\t</td>\n\t<td>\n\t\t<$edit-text class=\"ec-tc-disabled\" field=\"template\" placeholder=\"Template...\"/>\n\t\t<<must-be-defined \"template\" \"Template\">>\n\t</td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Auto trigger on Inputs:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tIf checked auto completion will automatically open as soon as you type the ''trigger'' in a single-line text input.<br/>\n\t\t\tOtherwise you need to open it manually with a keyboard shortcut.\n\t\t</p>\n\t</td>\n\t<td>\n\t\t<$checkbox field=\"auto-trigger-input\" checked=\"1\"> Auto trigger on Inputs</$checkbox>\n\t</td>\n</tr>\n<tr>\n\t<td align=\"center\">\n\t\t''Auto trigger on Text Areas:''<br/>\n\t\t<p class=\"ec_ac-muted\">\n\t\t\tIf checked auto completion will automatically open as soon as you type the ''trigger'' in a multi-line text input.<br/>\n\t\t\tOtherwise you need to open it manually with a keyboard shortcut.\n\t\t</p>\n\t</td>\n\t<td>\n\t\t<$checkbox field=\"auto-trigger-textarea\" checked=\"1\"> Auto trigger on Text Areas</$checkbox>\n\t</td>\n</tr>\n</tbody>\n</table>\n\n<h1>Test the filter</h1>\n\n<$let\n\ttemp=<<qualify \"$:/temp/completion-test\">>\n\trows={{{ [{$:/plugins/EvidentlyCube/AutoComplete/Config!!rows}floor[]!match[0]else[8]min[99]max[1]] }}}\n\tdefault-transform-filter=\"[<currentTiddler>]\"\n\tfilter-suffix=\" +[limit<rows>]\"\n\tdisplay-filter={{!!display-filter}}\n\ttransform-filter={{{ [{!!transform-filter}!match[]else<default-transform-filter>] }}}\n\tfilter={{{ [{!!filter}addsuffix<filter-suffix>] }}}\n>\n\t''Query:'' <$edit-text tag=\"input\" class=\"ec-tc-disabled\" tiddler=<<temp>> field=\"query\" default=\"\" placeholder=\"Test...\"/>\n\n\t<p class=\"ec_ac-muted\">Only the first <<rows>> results will be displayed.</p>\n\n\t<table>\n\t<thead>\n\t<tr>\n\t\t<th>Suggestion</th>\n\t\t<th>Displays as</th>\n\t\t<th>After insertion</th>\n\t</tr>\n\t</thead>\n\t<tbody>\n\t<$let\n\t\tquery={{{ [<temp>get[query]] }}}\n\t>\n\t\t<$list filter=<<filter>> emptyMessage=\"\"\"<tr><td colspan=\"3\" class=\"ec_ac-muted\">No results</td></tr>\"\"\">\n\t\t\t<tr>\n\t\t\t\t<td><$text text={{{ [<currentTiddler>] }}} /></td>\n\t\t\t\t<td><$text text={{{ [<currentTiddler>subfilter<display-filter>] }}} /></td>\n\t\t\t\t<td><$text text={{{ [<currentTiddler>subfilter<transform-filter>] }}} /></td>\n\t\t\t</tr>\n\t\t</$list>\n\t</$let>\n\t</tbody>\n\t</table>\n</$let>\n</div>\n"},"$:/plugins/EvidentlyCube/AutoComplete/Style":{"title":"$:/plugins/EvidentlyCube/AutoComplete/Style","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":".ec_ac-muted {\n\tcolor: <<colour foreground>>;\n\topacity: 0.75;\n\tfont-style: italic;\n}\n\n.ec_ac-completion {\n\tposition: absolute;\n\tbackground: <<colour modal-background>>;\n\tborder: 2px solid <<colour modal-border>>;\n\tpadding: 2em 1em;\n\tbox-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);\n\tz-index: 100000;\n\tmin-width: 250px;\n}\n\n.ec_ac-dots-top {\n\tposition: absolute;\n\tfont-size: 2em;\n\ttext-align: center;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n}\n.ec_ac-dots-bottom {\n\tposition: absolute;\n\tfont-size: 2em;\n\ttext-align: center;\n\tbottom: 0.5em;\n\tleft: 0;\n\tright: 0;\n}\n.ec_ac-completion li {\n\tlist-style: none;\n}\n.ec_ac-completion .label {\n\tcolor: <<colour muted-foreground>>;\n}\n.ec_ac-completion .ec_ac-link {\n\tcolor: <<colour tiddler-link-foreground>>;\n\tcursor: pointer;\n}\n.ec_ac-completion .ec_ac-link.selected,\n.ec_ac-completion .ec_ac-link:hover\n{\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\tcolor: <<colour background>>;\n}\n\n.ec_ac-options table {\n\twidth: 100%;\n}\n\n.ec_ac-options p {\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n}\n.ec_ac-options input:not([type=\"checkbox\"]),\n.ec_ac-options textarea {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 7px;\n\tmargin-bottom: 7px;\n}\n\n.ec_ac-options .tc-error a {\n\tcolor: white;\n\ttext-decoration: underline;\n}\n\n.ec_ac-pointer {\n\tcursor: pointer;\n}"},"$:/plugins/EvidentlyCube/AutoComplete/textarea-caret-position.js":{"title":"$:/plugins/EvidentlyCube/AutoComplete/textarea-caret-position.js","text":"/*\\\ntitle: $:/plugins/EvidentlyCube/AutoComplete/textarea-caret-position.js\ntype: application/javascript\nmodule-type: library\n\nComputes pixel-position of the caret\n\nTaken from: https://github.com/koddsson/textarea-caret-position\nThe MIT License (MIT)\n\nCopyright (c) 2015 Jonathan Ong me@jongleberry.com\n\\*/\n\n(function(){\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n\t'direction', // RTL support\n\t'boxSizing',\n\t'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n\t'height',\n\t'overflowX',\n\t'overflowY', // copy the scrollbar for IE\n\n\t'borderTopWidth',\n\t'borderRightWidth',\n\t'borderBottomWidth',\n\t'borderLeftWidth',\n\t'borderStyle',\n\n\t'paddingTop',\n\t'paddingRight',\n\t'paddingBottom',\n\t'paddingLeft',\n\n\t// https://developer.mozilla.org/en-US/docs/Web/CSS/font\n\t'fontStyle',\n\t'fontVariant',\n\t'fontWeight',\n\t'fontStretch',\n\t'fontSize',\n\t'fontSizeAdjust',\n\t'lineHeight',\n\t'fontFamily',\n\n\t'textAlign',\n\t'textTransform',\n\t'textIndent',\n\t'textDecoration', // might not make a difference, but better be safe\n\n\t'letterSpacing',\n\t'wordSpacing',\n\n\t'tabSize',\n\t'MozTabSize'\n]\n\nconst isBrowser = typeof window !== 'undefined'\nconst isFirefox = isBrowser && window.mozInnerScreenX != null\n\nexports.getCaretCoordinates = function (element, position, options) {\n\tconst debug = (options && options.debug) || false\n\tif (debug) {\n\t\tconst el = document.querySelector('#input-textarea-caret-position-mirror-div')\n\t\tif (el) el.parentNode.removeChild(el)\n\t}\n\n\t// The mirror div will replicate the textarea's style\n\tconst div = document.createElement('div')\n\tdiv.id = 'input-textarea-caret-position-mirror-div'\n\tdocument.body.appendChild(div)\n\n\tconst style = div.style\n\tconst computed = window.getComputedStyle ? window.getComputedStyle(element) : element.currentStyle // currentStyle for IE < 9\n\tconst isInput = element.nodeName === 'INPUT'\n\n\t// Default textarea styles\n\tstyle.whiteSpace = 'pre-wrap'\n\tif (!isInput) style.wordWrap = 'break-word' // only for textarea-s\n\n\t// Position off-screen\n\tstyle.position = 'absolute' // required to return coordinates properly\n\tif (!debug) style.visibility = 'hidden' // not 'display: none' because we want rendering\n\n\t// Transfer the element's properties to the div\n\tfor (const prop of properties) {\n\t\tif (isInput && prop === 'lineHeight') {\n\t\t\t// Special case for <input>s because text is rendered centered and line height may be != height\n\t\t\tif (computed.boxSizing === 'border-box') {\n\t\t\t\tconst height = parseInt(computed.height)\n\t\t\t\tconst outerHeight =\n\t\t\t\t\tparseInt(computed.paddingTop) +\n\t\t\t\t\tparseInt(computed.paddingBottom) +\n\t\t\t\t\tparseInt(computed.borderTopWidth) +\n\t\t\t\t\tparseInt(computed.borderBottomWidth)\n\t\t\t\tconst targetHeight = outerHeight + parseInt(computed.lineHeight)\n\t\t\t\tif (height > targetHeight) {\n\t\t\t\t\tstyle.lineHeight = `${height - outerHeight}px`\n\t\t\t\t} else if (height === targetHeight) {\n\t\t\t\t\tstyle.lineHeight = computed.lineHeight\n\t\t\t\t} else {\n\t\t\t\t\tstyle.lineHeight = 0\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstyle.lineHeight = computed.height\n\t\t\t}\n\t\t} else if (!isInput && prop === 'width' && computed.boxSizing === 'border-box') {\n\t\t\t// With box-sizing: border-box we need to offset the size slightly inwards. This small difference can compound\n\t\t\t// greatly in long textareas with lots of wrapping, leading to very innacurate results if not accounted for.\n\t\t\t// Firefox will return computed styles in floats, like `0.9px`, while chromium might return `1px` for the same element.\n\t\t\t// Either way we use `parseFloat` to turn `0.9px` into `0.9` and `1px` into `1`\n\t\t\tlet totalBorderWidth = parseFloat(computed.borderLeftWidth) + parseFloat(computed.borderRightWidth)\n\t\t\t// When a vertical scrollbar is present it shrinks the content. We need to account for this by using clientWidth\n\t\t\t// instead of width in everything but Firefox. When we do that we also have to account for the border width.\n\t\t\tlet width = isFirefox ? parseFloat(computed[prop]) - totalBorderWidth : element.clientWidth + totalBorderWidth\n\t\t\tstyle[prop] = `${width}px`\n\t\t} else {\n\t\t\tstyle[prop] = computed[prop]\n\t\t}\n\t}\n\n\tif (isFirefox) {\n\t\t// Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n\t\tif (element.scrollHeight > parseInt(computed.height)) style.overflowY = 'scroll'\n\t} else {\n\t\tstyle.overflow = 'hidden' // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n\t}\n\n\tdiv.textContent = element.value.substring(0, position)\n\t// The second special handling for input type=\"text\" vs textarea:\n\t// spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n\tif (isInput) div.textContent = div.textContent.replace(/\\s/g, '\\u00a0')\n\n\tconst span = document.createElement('span')\n\t// Wrapping must be replicated *exactly*, including when a long word gets\n\t// onto the next line, with whitespace at the end of the line before (#7).\n\t// The *only* reliable way to do that is to copy the *entire* rest of the\n\t// textarea's content into the <span> created at the caret position.\n\t// For inputs, just '.' would be enough, but no need to bother.\n\tspan.textContent = element.value.substring(position) || '.' // || because a completely empty faux span doesn't render at all\n\tdiv.appendChild(span)\n\n\tconst coordinates = {\n\t\ttop: span.offsetTop + parseInt(computed['borderTopWidth']),\n\t\tleft: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n\t\theight: parseInt(computed['lineHeight'])\n\t}\n\n\tif (debug) {\n\t\tspan.style.backgroundColor = '#aaa'\n\t} else {\n\t\tdocument.body.removeChild(div)\n\t}\n\n\treturn coordinates\n}\n})();","type":"application/javascript","module-type":"library"},"$:/plugins/EvidentlyCube/AutoComplete/window":{"title":"$:/plugins/EvidentlyCube/AutoComplete/window","tags":"$:/tags/PageTemplate","text":"\\whitespace trim\n<$let\n\twindow-id={{{ [<tw-window-id>else[]] }}}\n\tcount={{{ [list[$:/temp/AutoComplete/completion-data]count[]] }}}\n\tbase-limit={{$:/plugins/EvidentlyCube/AutoComplete/Config!!rows}}\n\tlimit={{{ [<base-limit>add[1]compare:number:eq<count>else<base-limit>] }}}\n\thalf-limit={{{ [<limit>divide[2]ceil[]] }}}\n\tmax-offset={{{ [<count>subtract<limit>] }}}\n\tselected={{$:/temp/AutoComplete/completion-data!!index}}\n\toffset={{{ [<selected>subtract<half-limit>min<max-offset>max[0]] }}}\n>\n<$list filter=\"\"\"\n[{$:/temp/AutoComplete/completion-data!!show}]\n=[{$:/temp/AutoComplete/completion-data!!show-window}match<tv-window-id>then[1]]\n=[{$:/temp/AutoComplete/completion-data!!show-window}match[-1]then[1]]\n+[match[1]count[]match[2]]\n\"\"\" variable=\"ignore\">\n\n<ul class=\"ec_ac-completion\" style={{$:/temp/AutoComplete/completion-data!!style}}>\n\t<$list filter=\"[<offset>compare:number:gt[0]]\">\n\t\t<li class=\"ec_ac-dots-top\">...</li>\n\t</$list>\n\t<$list\n\t\tfilter=\"[list[$:/temp/AutoComplete/completion-data]rest<offset>first<limit>]\"\n\t\tcounter=\"index\"\n\t\temptyMessage=\"\"\"<li class=\"label\">No results</li>\"\"\"\n\t>\n\t\t<$list filter=\"[<index>add<offset>match<selected>]\" variable=\"_\" emptyMessage=\"\"\"\n\t\t\t<li class=\"ec_ac-link\" data-value=<<currentTiddler>>>\n\t\t\t\t<$text text={{{ [<currentTiddler>subfilter{$:/temp/AutoComplete/completion-data!!display-filter}] }}} />\n\t\t\t</li>\n\t\t\"\"\">\n\t\t\t<li class=\"ec_ac-link selected\" data-value=<<currentTiddler>>>\n\t\t\t\t<$text text={{{ [<currentTiddler>subfilter{$:/temp/AutoComplete/completion-data!!display-filter}] }}} />\n\t\t\t</li>\n\t\t</$list>\n\t</$list>\n\t<$list filter=\"[<offset>compare:number:lt<max-offset>]\">\n\t\t<li class=\"ec_ac-dots-bottom\">...</li>\n\t</$list>\n</ul>\n</$list>\n</$let>"}}}
{"tiddlers":{"$:/plugins/kookma/gatha/actions/add-boilerplate":{"title":"$:/plugins/kookma/gatha/actions/add-boilerplate","caption":"add boilerplate tiddlers","created":"20190325083646838","list":"readme license history","modified":"20220217194756785","tags":"$:/tags/Gatha/Action","type":"text/vnd.tiddlywiki","text":"\\define plugin-tiddler-within(title) $(namePrefix)$$(__publisher__)$/$(__plugin-name__)$/$title$\n\n<$set name=\"old-list\" tiddler=<<plugin-full-path>> field=\"list\">\n<$set name=\"list\" filter=\"[enlist<old-list>] -[[readme]] -[[license]] -[[history]]\">\n<$set name=\"new-list\" filter=\"readme license history [enlist<list>]\">\n<$button class=\"tc-btn-invisible\" >{{!!caption}}\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<plugin-tiddler-within \"history\">> $param=\"$:/plugins/kookma/gatha/templates/boilerplate/history\" />\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<plugin-tiddler-within \"license\">> $param=\"$:/plugins/kookma/gatha/templates/boilerplate/license\" />\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<plugin-tiddler-within \"readme\">> $param=\"$:/plugins/kookma/gatha/templates/boilerplate/readme\" />\n<$action-setfield $tiddler=<<plugin-full-path>> list=<<new-list>> />\n</$button>\n</$set>\n</$set>\n</$set>"},"$:/plugins/kookma/gatha/actions/add-icon":{"title":"$:/plugins/kookma/gatha/actions/add-icon","caption":"add plugin icon","created":"20220203085116186","modified":"20220217200238689","tags":"$:/tags/Gatha/Action","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/create-item\n\n<!-- create the icon tiddler, if exist navigate to it -->\n<$vars iconTemplate=\"$:/plugins/kookma/gatha/templates/icon\" iconTiddlerTitle={{{ [<plugin-full-path>addsuffix[/icon]] }}}>\n<$button class=\"tc-btn-invisible\"> {{!!caption}}\n<$list filter=\"[<iconTiddlerTitle>is[missing]]\" emptyMessage='<$action-navigate $to=<<iconTiddlerTitle>>/>' variable=ignore>\n<$action-sendmessage $message=\"tm-new-tiddler\" $param=<<iconTemplate>> title=<<iconTiddlerTitle>> />\n</$list>\n</$button>\n</$vars>"},"$:/plugins/kookma/gatha/actions/add-plugin.info":{"title":"$:/plugins/kookma/gatha/actions/add-plugin.info","text":"\\define plugin-tiddler-within(title) $(namePrefix)$$(publisherName)$/$(pluginName)$/$title$\n\\define plugin-title() $:/plugins/$(publisherName)$/$(pluginName)$\n\n\\define addInfo-actions()\n<$action-setfield $index=\"title\" $value=<<plugin-title>> />\n<$action-setfield $index=\"name\" $value={{{ [<plugin-title>get[name]] }}} />\n<$action-setfield $index=\"description\" $value={{{ [<plugin-title>get[description]] }}} />\n<$action-setfield $index=\"author\" $value={{{ [<plugin-title>get[author]] }}} />\n<$action-setfield $index=\"version\" $value={{{[<plugin-title>get[version]]}}} />\n<$action-setfield $index=\"core-version\" $value={{{[<plugin-title>get[core-version]] ~[<version>]}}} />\n<$action-setfield $index=\"source\" $value={{{[<plugin-title>get[source]]}}} />\n<$action-setfield $index=\"list\" $value={{{[<plugin-title>get[list]]}}} />\n<$action-setfield $index=\"parent-plugin\" $value={{{[<plugin-title>get[parent-plugin]]}}} />\n<$action-setfield $index=\"dependents\" $value={{{[<plugin-title>get[dependents]]}}} />\n<$action-setfield $index=\"plugin-type\" $value={{{[<plugin-title>get[plugin-draft]]}}} />\n<$action-setfield $index=\"packaged-by\" $value=<<now \"Gatha on DDth MMM YYYY, 0hh:0mm:0ss\">> />\n<$action-navigate $to=<<currentTiddler>>/>\n\\end\n\n\n<$button class=\"tc-btn-invisible\">{{!!caption}}\n<$tiddler tiddler=<<plugin-tiddler-within \"plugin.info\">> >\n<<addInfo-actions>>\n</$tiddler>\n</$button>\n\n","type":"text/vnd.tiddlywiki","caption":"add plugin.info (for node.js)","created":"20220203084403617","modified":"20220217093353611","tags":"$:/tags/Gatha/Action"},"$:/plugins/kookma/gatha/actions/new-edittemplate":{"title":"$:/plugins/kookma/gatha/actions/new-edittemplate","caption":"new edit template","created":"20220201133156251","modified":"20220204090128824","tags":"$:/tags/Gatha/Action","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/create-item\n\n<$macrocall $name=create-item\n btnCaption={{!!caption}}\n type=\"edittemplates\"\n tidTitle=\"etm\"\n template=\"$:/plugins/kookma/gatha/templates/edittemplate\"\n fields=\"tags='$:/tags/EditTemplate'\"\n/>\n"},"$:/plugins/kookma/gatha/actions/new-macro":{"title":"$:/plugins/kookma/gatha/actions/new-macro","caption":"new macro","created":"20190325083151771","modified":"20220204090128824","tags":"$:/tags/Gatha/Action","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/create-item\n<$macrocall $name=create-item\n btnCaption={{!!caption}}\n type=\"macros\"\n tidTitle=\"mac\"\n template=\"$:/plugins/kookma/gatha/templates/macro\"\n fields=\"tags='$:/tags/Macro'\"\n/>\n"},"$:/plugins/kookma/gatha/actions/new-stylesheet":{"title":"$:/plugins/kookma/gatha/actions/new-stylesheet","caption":"new stylesheet (css)","created":"20190325083208620","modified":"20220217193508418","tags":"$:/tags/Gatha/Action","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/create-item\n\n<$macrocall $name=create-item\n btnCaption={{!!caption}}\n type=\"styles\"\n tidTitle=\"css\"\n template=\"$:/plugins/kookma/gatha/templates/style\"\n fields=\"tags='$:/tags/Stylesheet'\"\n/>\n"},"$:/plugins/kookma/gatha/actions/new-tiddler":{"title":"$:/plugins/kookma/gatha/actions/new-tiddler","caption":"new tiddler","created":"20190325083111809","modified":"20220204090128824","tags":"$:/tags/Gatha/Action","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/create-item\n\n<$macrocall $name=create-item\n btnCaption={{!!caption}}\n tidTitle=\"tid\"\n template=\"$:/plugins/kookma/gatha/templates/tiddler\"\n fields=\"\"\n/>\n"},"$:/plugins/kookma/gatha/actions/new-viewtemplate":{"title":"$:/plugins/kookma/gatha/actions/new-viewtemplate","caption":"new view template","created":"20190326200941455","modified":"20220204090128824","tags":"$:/tags/Gatha/Action","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/create-item\n\n<$macrocall $name=create-item\n btnCaption={{!!caption}}\n type=\"viewtemplates\"\n tidTitle=\"vtm\"\n template=\"$:/plugins/kookma/gatha/templates/viewtemplate\"\n fields=\"tags='$:/tags/ViewTemplate'\"\n/>\n"},"$:/plugins/kookma/gatha/export/download-empty":{"title":"$:/plugins/kookma/gatha/export/download-empty","created":"20220212190254612","hide-body":"yes","modified":"20220218102334056","tags":"show-content","type":"text/vnd.tiddlywiki","text":"\\define saveTiddlerFilter()\n[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] [subfilter{$:/config/gatha/PublishFilter}] [subfilter{$:/config/$(publisherName)$/$(pluginName)$/PublishFilter}] +[sort[title]]\n\\end\n\n\\define savingEmpty()\nyes\n\\end\n\n`<script class=\"tiddlywiki-tiddler-store\" type=\"application/json\">[`\n<!--- JSON for plugin tiddler here -->\n{{||$:/plugins/kookma/gatha/export/json-template}}\n`]</script>`\n{{$:/core/templates/tiddlywiki5.html}}\n"},"$:/plugins/kookma/gatha/export/export-btn-plugin-backup":{"title":"$:/plugins/kookma/gatha/export/export-btn-plugin-backup","caption":"plugin source backup","created":"20220215052330147","modified":"20220217134613850","tags":"$:/tags/Gatha/ExportButton","type":"text/vnd.tiddlywiki","text":"\\define plugin-exported-backup-json-filename() backup_$(pluginType)$_$(publisherName)$_$(pluginName)$_v$(pluginVersion)$_$(timedate)$.json\n\n\\define export-plugin-source()\n<$set name=exportFilter filter=\"[prefix<currentTiddler>] [enlist{!!extra-tiddlers}] [enlist{!!resource-tiddlers}] [[$:/config/$(publisherName)$/$(pluginName)$/PublishFilter]has[title]]\">\n<$button class=\"\" dragFilter=<<exportFilter>> class=\"tc-btn-invisible\" tooltip=\"export plugin source as a json file\">\n{{$:/core/images/export-button}}<span class=\"tc-btn-text\">plugin source (backup json file)</span>\n<$action-sendmessage $message=\"tm-download-file\" \n $param=\"$:/core/templates/exporters/JsonFile\" \n exportFilter=<<exportFilter>> \n filename=<<plugin-exported-backup-json-filename>>\n/>\n</$button>\n</$set>\n\\end\n\n<<export-plugin-source>>"},"$:/plugins/kookma/gatha/export/export-btn-plugin-demo":{"title":"$:/plugins/kookma/gatha/export/export-btn-plugin-demo","caption":"export plugin+empty.jtml","created":"20220208104449795","modified":"20220215065309855","tags":"$:/tags/Gatha/ExportButton","type":"text/vnd.tiddlywiki","text":"\\define plugin-exported-demo-filename() demo_$(publisherName)$_$(pluginName)$_v$(pluginVersion)$_$(timedate)$.html\n\n\\define publishFilter() \n<$button message=\"tm-edit-tiddler\" \n param=\"$:/config/$(publisherName)$/$(pluginName)$/PublishFilter\"\n class=\"tc-btn-invisible\" \n tooltip=\"edit plugin plublish filter\">...\n</$button>\n\\end\n\n\\define export-demo-html()\n<$button class=\"tc-btn-invisible\" tooltip=\"export plugin in a working demo wiki\">\n{{$:/core/images/globe}}<span class=\"tc-btn-text\">plugin demo (demo.html)</span>\n<$action-sendmessage \n $message=\"tm-download-file\"\n $param=\"$:/plugins/kookma/gatha/export/download-empty\"\n filename=<<plugin-exported-demo-filename>>\n currentTiddler=<<plugin-full-path>>\n publisherName=<<publisherName>>\n pluginName=<<pluginName>>\n/>\n</$button> <<publishFilter>>\n\\end\n\n<<export-demo-html>>"},"$:/plugins/kookma/gatha/export/export-btn-plugin-packaged":{"title":"$:/plugins/kookma/gatha/export/export-btn-plugin-packaged","caption":"export json file","created":"20220208103953299","modified":"20220213191422278","tags":"$:/tags/Gatha/ExportButton","type":"text/vnd.tiddlywiki","text":"\\define plugin-exported-json-filename() $(pluginType)$_$(publisherName)$_$(pluginName)$_v$(pluginVersion)$_$(timedate)$.json\n\n\\define export-packaged-plugin()\n<$button class=\"tc-btn-invisible\" tooltip=\"export plugin as a packed json file\">\n{{$:/core/images/list}}<span class=\"tc-btn-text\">packaged plugin (json file)</span>\n<$action-sendmessage $message=\"tm-download-file\" \n $param=\"$:/plugins/kookma/gatha/export/json-template\" \n pluginType=<<pluginType>>\n currentTiddler=<<plugin-full-path>>\n filename=<<plugin-exported-json-filename>>\n/>\n</$button>\n\\end\n\n<<export-packaged-plugin>>"},"$:/plugins/kookma/gatha/export/export-btn-plugin-zipped":{"title":"$:/plugins/kookma/gatha/export/export-btn-plugin-zipped","caption":"export zip file","created":"20220208104324219","hide-body":"yes","modified":"20220215054944327","tags":"$:/tags/Gatha/ExportButton","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\\define plugin-exported-zip-filename() $(pluginType)$_$(publisherName)$_$(pluginName)$_v$(pluginVersion)$_$(timedate)$.zip\n\n\\define tempZipTiddler() $:/temp/gatha/_ZipTiddler\n\\define delete-temp-action() <$action-deletetiddler $tiddler=<<tempZipTiddler>> />\n\n\\define renderContent()\n <$action-sendmessage $message=\"tm-zip-create\" $param=<<tempZipTiddler>>/>\n\t<!-- add tiddlers under plugin namespace -->\n <$list filter=\"[prefix<currentTiddler>] -[<currentTiddler>] -[[$(currentTiddler)$/plugin.info]]\" > <!-- currentTiddler refers to plugin fullname here -->\n <$action-sendmessage \n\t\t $message=\"tm-zip-render-file\" \n\t\t $param=<<tempZipTiddler>>\n\t\t\tfilename={{{ [<currentTiddler>split[/]butfirst[2]slugify[]join[/]addsuffix[.tid]] }}} \n\t\t\ttiddler=<<currentTiddler>> \n\t\t\ttemplate=\"$:/core/templates/tid-tiddler\"\n />\n </$list>\n\t<!-- add plugin.info if exist -->\n <$list filter=\"[[$(currentTiddler)$/plugin.info]has[title]]\" variable=plugininfoTiddler>\n\t <$action-sendmessage $message=\"tm-zip-add-text-file\"\n $param=<<tempZipTiddler>>\n filename={{{[[plugin.info]addprefix[$(publisherName)$/$(pluginName)$/]]}}}\n text={{{ [<plugininfoTiddler>get[text]] }}}\n />\n </$list>\n\t\t\n\t<!-- add extra tiddlers which do not follow the plugin namespace -->\n <$list filter=\"[enlist{!!extra-tiddlers}] :filter[has[title]]\" > <!-- currentTiddler refers to plugin fullname here -->\n <$action-sendmessage \n\t\t $message=\"tm-zip-render-file\" \n\t\t $param=<<tempZipTiddler>>\n\t\t\tfilename={{{ [<currentTiddler>search-replace:g[$:],[system]] +[split[/]slugify[]join[/]addsuffix[.tid]addprefix[$(publisherName)$/$(pluginName)$/extra/]] }}} \n\t\t\ttiddler=<<currentTiddler>> \n\t\t\ttemplate=\"$:/core/templates/tid-tiddler\"\n />\n </$list>\t\n\t\n\t\n\t<!-- export zip file for download -->\n <$action-sendmessage $message=\"tm-zip-download\" $param=<<tempZipTiddler>> filename=<<plugin-exported-zip-filename>> />\n\\end\n\n\n\\define export-zipped-plugin()\n<$button actions=<<delete-temp-action>> class=\"tc-btn-invisible\" tooltip=\"export plugin folder to be used with Tiddlywiki on Node.js\">\n {{$:/core/images/storyview-classic}}<span class=\"tc-btn-text\">plugin folder (zip file)</span>\n <<renderContent>>\n</$button>\n\\end\n\n\n<<export-zipped-plugin>>"},"$:/plugins/kookma/gatha/export/json-template":{"title":"$:/plugins/kookma/gatha/export/json-template","created":"20220212162136459","modified":"20220217134131497","tags":"show-content","type":"text/vnd.tiddlywiki","text":"\\define plugin-shadow-tiddlers()\n{\"tiddlers\": {<$list filter=\"[subfilter<exportFilter>]+[bl[]]\">\n\"{{{ [<currentTiddler>] +[jsonstringify[]] }}}\": <$text text=<<jsontiddler>>/>,\n</$list><$list filter=\"[subfilter<exportFilter>]+[last[]]\">\n\"{{{ [<currentTiddler>] +[jsonstringify[]] }}}\": <$text text=<<jsontiddler>>/></$list>}\n}\n\\end\n\n<$set name=exportFilter filter=\"[prefix<currentTiddler>] -[<currentTiddler>] [enlist{!!extra-tiddlers}] :filter[has[title]]\">\n<$wikify name=pluginShadows text=<<plugin-shadow-tiddlers>> >\n<$jsontiddler tiddler=<<currentTiddler>> \n $plugin-type={{!!plugin-draft}}\n $packaged-by=<<now \"Gatha on DDth MMM YYYY, 0hh:0mm:0ss\">>\n $text=<<pluginShadows>>\n exclude=\"plugin-draft extra-tiddlers resource-tiddlers\"\n escapeUnsafeScriptChars=\"yes\" />\n</$wikify>\n</$set>"},"$:/plugins/kookma/gatha/extra/extra-tiddlers":{"title":"$:/plugins/kookma/gatha/extra/extra-tiddlers","created":"20220203060016202","modified":"20220217132040519","tags":"","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\\import $:/plugins/kookma/gatha/macros/definition\n\n\\define clear-all()\n<$list filter=\"[list[!!extra-tiddlers]count[]!match[0]]\" variable=\"null\" emptyMessage=\" drop tiddlers here\">\n<$button class=\"tc-btn-invisible tc-btn-mini\" tooltip=\"remove all extra tiddlers\" >remove all\n<$action-confirm $message=\"Do you wish to remove all extra tiddlers?\">\n<$action-setfield $tiddler=<<gv-extra-list>> $field=\"extra-tiddlers\" $value=\"\"/>\n</$action-confirm>\n</$button>\n</$list>\n\\end\n\n\\define remove-tiddler-from-list()\n<$button \n tooltip=\"remove tiddler\" aria-label=\"remove tiddler\" \n class=\"tc-btn-invisible tc-btn-mini tc-small-gap-right\"\n actions=\"\"\"<$action-listops $tiddler=<<gv-extra-list>> $field=\"extra-tiddlers\" $subfilter=\"-[<currentTiddler>]\"/>\"\"\" >\n {{$:/core/images/close-button}}\n</$button>\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n\\end\n\n\n\\define drop-actions()\n<$list filter=\"[<actionTiddler>!prefix<gv-extra-list>] :filter[has[title]]\" variable=null><!-- don ot allow to drop tiddlers from the same plugin -->\n<$action-listops $tiddler=<<gv-extra-list>> $field=\"extra-tiddlers\" $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n</$list>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n\\define add-bulk-tiddler()\n<$button to=<<tid-addExtraTiddlers-ui>> class=\"tc-btn-invisible ga-extra-button\" tooltip=\"add bulk of tiddlers\"> {{$:/core/images/clone-button}}\n<$action-setfield $tiddler=<<tid-addExtraTiddlers-ui>> $field=\"target-plugin\" $value=<<currentTiddler>> />\n</$button>\n\\end\n\n<!--(1) show header with number of extra tiddlers and optional button for add bulk tiddlers-->\n<div class=\"ga-extra-label\" title=\"drop tiddlers here\">\n<$list filter=\"[<tidConfig>getindex[add-tiddlers]match[show]]\" variable=null><<add-bulk-tiddler>> </$list>\n<b>Extra tiddlers</b> (<$count filter=\"[enlist{!!extra-tiddlers}]\" />)\n</div>\n\n<!--(2) draggable list of extra tiddlers -->\n<div class=\"tc-sidebar-tab-open\" style=\"margin-left:14px;\">\n<$vars gv-extra-list=<<currentTiddler>> >\n\t\n<$list filter=\"[list[!!extra-tiddlers]]\" storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=<<remove-tiddler-from-list>> />\n</div>\n</$list>\n<div><$macrocall $name=\"droppable-item\" button=<<clear-all>> /></div>\n</$vars>\n</div> "},"$:/plugins/kookma/gatha/extra/resource-tiddlers":{"title":"$:/plugins/kookma/gatha/extra/resource-tiddlers","created":"20220217120516225","modified":"20220217135321432","tags":"","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\\import $:/plugins/kookma/gatha/macros/definition\n\n\\define clear-all()\n<$list filter=\"[list[!!resource-tiddlers]count[]!match[0]]\" variable=\"null\" emptyMessage=\" drop tiddlers here\">\n<$button class=\"tc-btn-invisible tc-btn-mini\" tooltip=\"remove all extra tiddlers\" >remove all\n<$action-confirm $message=\"Do you wish to remove all resource tiddlers?\">\n<$action-setfield $tiddler=<<gv-extra-list>> $field=\"resource-tiddlers\" $value=\"\"/>\n</$action-confirm>\n</$button>\n</$list>\n\\end\n\n\\define remove-tiddler-from-list()\n<$button \n tooltip=\"remove tiddler\" aria-label=\"remove tiddler\" \n class=\"tc-btn-invisible tc-btn-mini tc-small-gap-right\"\n actions=\"\"\"<$action-listops $tiddler=<<gv-extra-list>> $field=\"resource-tiddlers\" $subfilter=\"-[<currentTiddler>]\"/>\"\"\" >\n {{$:/core/images/close-button}}\n</$button>\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n\\end\n\n\n\\define drop-actions()\n<$list filter=\"[<actionTiddler>!prefix<gv-extra-list>] :filter[has[title]]\" variable=null><!-- don ot allow to drop tiddlers from the same plugin -->\n<$action-listops $tiddler=<<gv-extra-list>> $field=\"resource-tiddlers\" $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n</$list>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n\\define add-bulk-tiddler()\n<$button to=<<tid-addExtraTiddlers-ui>> class=\"tc-btn-invisible ga-extra-button\" tooltip=\"add bulk of tiddlers\"> {{$:/core/images/clone-button}}\n<$action-setfield $tiddler=<<tid-addExtraTiddlers-ui>> $field=\"target-plugin\" $value=<<currentTiddler>> />\n</$button>\n\\end\n\n<$list filter=\"[<tidConfig>getindex[res-tiddlers]match[show]]\" variable=null>\n<!--(1) show header with number of extra tiddlers and optional button for add bulk tiddlers-->\n<div class=\"ga-extra-label\" style=\"margin-top:10px;\" title=\"drop note, doc, bookmark, and example tiddlers here\">\n<b>Resource tiddlers</b> (<$count filter=\"[enlist{!!resource-tiddlers}]\" />)\n</div>\n\n<!--(2) draggable list of extra tiddlers -->\n<div class=\"tc-sidebar-tab-open\" style=\"margin-left:14px;\">\n<$vars gv-extra-list=<<currentTiddler>> >\n\t\n<$list filter=\"[list[!!resource-tiddlers]]\" storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=<<remove-tiddler-from-list>> />\n</div>\n</$list>\n<div><$macrocall $name=\"droppable-item\" button=<<clear-all>> /></div>\n</$vars>\n</div> \n</$list>\n\n<!-- NOTE\nThis tiddler is a clone of [[$:/plugins/kookma/gatha/extra/extra-tiddlers]] but does not use the add bulk tiddlers button and also uses resource-tiddlers instead of\nextra-tiddlers field\n-->"},"$:/plugins/kookma/gatha/extra/search-by-filter":{"title":"$:/plugins/kookma/gatha/extra/search-by-filter","caption":"Filter search","created":"20220211064639323","modified":"20220217180502176","tags":"$:/tags/Gatha/Search","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/extra/search-inputbox\n\n\\define btn-actions()\n<$action-listops $tiddler={{!!target-plugin}} \n $field={{{[<modifier>match[ctrl]then[resource-tiddlers]else[extra-tiddlers]]}}} \n $subfilter={{{ [<tempTid>get[text]] }}} \n/>\n\\end\n\n\\define add-by-filter-Button()\n<$list filter=\"[subfilter{$(tempTid)$}] :filter[has[title]] +[limit[1]]\" variable=null>\n<$button class=\"tc-btn-invisible\" tooltip=\"add bulk of tiddlers to target plugin\" actions=<<btn-actions>> >\n{{$:/core/images/clone-button}}\n</$button>\n</$list>\n\\end\n\n\nTarget plugin: {{!!target-plugin}}\n\n<$macrocall $name=\"add-bulk-extra-tiddlers\" label=\"Search by filter\" placeholder=\"enter a filter e.g [tag[doc]]\" addbutton=<<add-by-filter-Button>> /> \n\n<!-- show results -->\n<$vars resultFilter={{{ [<tempTid>get[text]] }}} >\n<small>//<$count filter=\"[subfilter<resultFilter>] :filter[has[title]]\" /> matches//</small>\n\n<$list filter=\"[subfilter<resultFilter>] :filter[has[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</$vars>"},"$:/plugins/kookma/gatha/extra/search-by-hierarchy":{"title":"$:/plugins/kookma/gatha/extra/search-by-hierarchy","caption":"Hierarchical search","created":"20220211064820107","modified":"20220219191804596","tags":"$:/tags/Gatha/Search","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/definition\n\\import $:/plugins/kookma/gatha/extra/search-inputbox\n\n\\define toc-list(here,max,exclude,level:\"1\")\n<!-- SHOW ALL TOC TIDDLER TITLES AS A FLAT LIST (SIMPLE RECURSION) Credit: Eric Shulman-->\n<$list filter=\"\"\"[tag[$here$]] $exclude$ -[[$here$]]\"\"\">\n <$text text={{{ [<currentTiddler>format:titlelist[]] }}}/><br>\n <$reveal default=\"$level$\" type=\"nomatch\" text=\"$max$\">\n <$macrocall $name=\"toc-list\" here=<<currentTiddler>> max=\"$max$\" exclude=\"\"\"$exclude$ -[[$here$]]\"\"\" level={{{ [[$level$]add[1]] }}}/>\n </$reveal>\n</$list>\n\\end\n\n\\define btn-actions()\n<$action-listops $tiddler={{!!target-plugin}} \n $field={{{[<modifier>match[ctrl]then[resource-tiddlers]else[extra-tiddlers]]}}} \n $subfilter=\"[enlist<allTiddlers>]\" \n/>\n\\end\n\n\\define add-by-hierarchy-Button()\n<$wikify name=allTiddlers text=\"\"\"<$macrocall $name=toc-list here={{{ [<tempTid>get[text]trim[]!search:title<lb>!search:title<rb>] }}}/>\"\"\" >\n<$list filter=\"[enlist<allTiddlers>has[title]limit[1]]\" variable=null>\n<$button class=\"tc-btn-invisible\" tooltip=\"add bulk of tiddlers to target plugin\" actions=<<btn-actions>> >\n{{$:/core/images/clone-button}}\n</$button>\n</$list>\n</$wikify>\n\\end\n\n\\define display-results()\n<$button class=\"ga-toggle-result tc-btn-invisible\" tooltip=\"toggle display results\"> {{$:/plugins/kookma/gatha/images/toggle}}\n<$action-listops $tiddler=<<tidConfig>> $index=\"hierarchical-result\" $subfilter=\"+[toggle[toc-style]]\" />\n</$button>\n<$reveal default=\"\" text=\"toc-style\" type=nomatch stateTitle=<<tidConfig>> stateIndex=\"hierarchical-result\"><!-- flat list-->\n<$list filter=\"[enlist<allTiddlers>] :filter[has[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</$reveal>\n<$reveal default=\"\" text=\"toc-style\" type=match stateTitle=<<tidConfig>> stateIndex=\"hierarchical-result\"><!-- toc list-->\n<div class=\"tc-table-of-contents\">\n<$macrocall $name=toc tag={{{ [<tempTid>get[text]trim[]!search:title<lb>!search:title<rb>] }}} />\n</div>\n</$reveal>\n\\end\n\nTarget plugin: {{!!target-plugin}}\n\n<$vars lb=\"[\" rb=\"]\">\n<$macrocall $name=\"add-bulk-extra-tiddlers\" label=\"Root tag\" placeholder=\"enter a root tag e.g Contents\" addbutton=<<add-by-hierarchy-Button>> />\n\n<$wikify name=allTiddlers text=\"\"\"<$macrocall $name=toc-list here={{{ [<tempTid>get[text]trim[]!search:title<lb>!search:title<rb>] }}}/>\"\"\" >\n\n<small>//<$count filter=\"[enlist<allTiddlers>] :filter[has[title]]\" /> matches//</small>\n<<display-results>>\n\n</$wikify>\n</$vars>\n\n<!-- remarks\nThe two $wikify here are used to prevent focus loss on edit-text.\nIf a better solution is found remove them\n-->"},"$:/plugins/kookma/gatha/extra/search-inputbox":{"title":"$:/plugins/kookma/gatha/extra/search-inputbox","created":"20220211065912093","modified":"20220211093944167","tags":"","type":"text/vnd.tiddlywiki","text":"\\define tempTid() $:/temp/gatha/add-bulk\n\n\\define clear-action()\n<$action-setfield $tiddler=<<tempTid>> $field=\"text\" $value=\"\"/>\n\\end\n\n\\define clearButton()\n<$list filter=\"[<tempTid>get[text]trim[]!is[blank]]\" variable=null>\n<$button class=\"tc-btn-invisible\" actions=<<clear-action>> >{{$:/core/images/close-button}}</$button>\n</$list>\n\\end\n\n\\define add-bulk-extra-tiddlers(label, placeholder:\"\", addbutton)\n<div class=\"tc-search tc-advanced-search\">\n<$keyboard actions=<<clear-action>> key=\"escape\">\n$label$: <$edit-text tiddler=<<tempTid>> tag=input default=\"\" placeholder=\"$placeholder$\" focus={{$:/config/Search/AutoFocus}}/>\n</$keyboard> <<clearButton>> $addbutton$\n</div>\n\\end\n"},"$:/plugins/kookma/gatha/history":{"title":"$:/plugins/kookma/gatha/history","created":"20220211102040368","modified":"20220409160228442","tags":"","type":"text/vnd.tiddlywiki","text":"Full change log https://kookma.github.io/TW-Gatha/#ChangeLog\n\n* ''1.0.0'' -- 2022.02.25 -- stable release\n* ''0.9.5'' -- 2022.02.19 -- stable release candidate\n* ''0.8.1'' -- 2022.02.11 -- ui for add extra tiddlers\n* ''0.1.0'' -- 2019.01.12 -- first beta release\n"},"$:/plugins/kookma/gatha/icon":{"title":"$:/plugins/kookma/gatha/icon","created":"20220203214409579","modified":"20220203214423853","tags":"","type":"text/vnd.tiddlywiki","text":"<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-plugin tc-image-button\" fill=\"orange\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"},"$:/plugins/kookma/gatha/images/toggle":{"title":"$:/plugins/kookma/gatha/images/toggle","created":"20220211135435011","library":"Font Awesome","modified":"20220211135514608","tags":"","type":"text/vnd.tiddlywiki","text":"<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fa-toggle-off tc-image-button\" viewBox=\"0 0 576 512\"><path d=\"M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z\"/></svg>"},"$:/plugins/kookma/gatha/import/load-plugin":{"title":"$:/plugins/kookma/gatha/import/load-plugin","created":"20220210134436854","modified":"20220215202754831","tags":"","type":"text/vnd.tiddlywiki","text":"\\define loadTid() $:/temp/gatha/load\n\\define excluded-plugins() $:/temp/info-plugin $:/core $:/plugins/kookma/gatha\n\n\\define load-actions()\n<$tiddler tiddler={{{ [<loadTid>get[text]] }}} >\n<$action-confirm $message=\"Do you wish to load selected plugin into Gatha and convert it to a draft? This action cannot be undone!\">\n<!--(1) load extra tiddlers and create plugin-draft ----->\n<$list filter=\"[all[current]!has[plugin-draft]]\"><!-- if plugin is loaded, do not load agin -->\n<$action-setfield $field=\"plugin-draft\" $value={{!!plugin-type}} />\n<$set name=shadows filter=\"[all[current]plugintiddlers[]!prefix<currentTiddler>]\">\n<$action-setfield $field=\"extra-tiddlers\" $value=<<shadows>> />\n</$set>\n</$list>\n<!--(2) convert shadow tiddlers to real tiddlers ----->\n<$list filter=\"[all[current]plugintiddlers[]]\">\n<$action-setfield $field=modified $value=<<now \"YYYY0MM0DD0hh0mm0ssXXX\">> />\n</$list>\n<!--(3) delete plugin-type and text ----->\n<$action-deletefield text plugin-type/>\n<!--(4) notify user to save and relaod -->\n<$action-sendmessage $message=\"tm-notify\" $param=\"$:/plugins/kookma/gatha/import/notify-template\" currentPlugin=<<currentTiddler>> />\n</$action-confirm>\n</$tiddler>\n<$action-deletetiddler $tiddler=\"$:/temp/popup/gatha/select-plugin\"/> \n<$action-deletetiddler $tiddler=<<loadTid>> /> \n\\end\n\n\\define select-to-load()\n<$set name=plugins filter=\"[all[shadows+tiddlers]plugin-type[plugin]sort[name]] -[enlist<excluded-plugins>]\" >\nSelect plugin to modify <$select tiddler=<<loadTid>> default={{{ [enlist<plugins>first[]] }}} >\n<optgroup label='Plugins'>\n<$list filter=\"[enlist<plugins>]\">\n<option value=<<currentTiddler>>><$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}} /></option>\n</$list>\n</optgroup>\n<optgroup label='Themes'>\n<$list filter=\"[all[shadows+tiddlers]plugin-type[theme]sort[name]]\">\n<option value=<<currentTiddler>>><$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}} /></option>\n</$list>\n</optgroup>\n<optgroup label='Languages'>\n<$list filter=\"[all[shadows+tiddlers]plugin-type[language]sort[name]]\">\n<option value=<<currentTiddler>>><$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}} /></option>\n</$list>\n</optgroup>\n</$select>\n</$set>\n\\end\n\n\\define load-plugin-ui()\n<$button class=\"tc-btn-invisible\" popup=\"$:/temp/popup/gatha/select-plugin\" tooltip=\"load exisiting plugins to modify\">{{$:/core/images/edit-button}}<span class=\"tc-btn-text\">load plugin</span></$button>\n<$reveal type=\"popup\" state=\"$:/temp/popup/gatha/select-plugin\" class=\"tc-popup-keep\">\n<div class=\"tc-drop-down\">\n\n<<select-to-load>>\n\n<$list filter=\"[<loadTid>get[text]]\" variable=selected-plugin >\n<$button class=\"tc-btn-invisible tc-tiddlylink\" style=\"margin:5px 0; padding:0;\" actions=<<load-actions>> disabled=<<disabled>> >\n{{$:/core/images/edit-button}}\n<span class=\"tc-btn-text\">Load <$text text=<<selected-plugin>> /></span>\n</$button>\n</$list>\n</div>\n</$reveal>\n\\end"},"$:/plugins/kookma/gatha/import/notify-template":{"title":"$:/plugins/kookma/gatha/import/notify-template","created":"20220215181159591","modified":"20220215181519444","tags":"","type":"text/vnd.tiddlywiki","text":"The <<currentPlugin>> has been loaded into ''Gatha''.\n\nPlease save and reload."},"$:/plugins/kookma/gatha/license":{"title":"$:/plugins/kookma/gatha/license","created":"20220211102040369","modified":"20220211102259101","tags":"","type":"text/vnd.tiddlywiki","text":"Distributed under an MIT license.\n\nCopyright (c) 2022 [[Mohammad Rahmani|https://github.com/kookma]]\n\n<<<\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n<<<"},"$:/plugins/kookma/gatha/macros/create-item":{"title":"$:/plugins/kookma/gatha/macros/create-item","created":"20190328122950761","modified":"20220208052553027","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\n\\define create-item(btnCaption:\"new item\", type, tidTitle, template, fields)\n<$set name=\"newTitle\" \n filter=\"[<__type__>!is[blank]]\" \n value={{{[<plugin-full-path>addsuffix[/$type$]addsuffix[/$tidTitle$]]}}} \n emptyValue={{{[<plugin-full-path>addsuffix[/$tidTitle$]]}}} \n>\n<$button class=\"tc-btn-invisible\" > $btnCaption$\n<$macrocall $name=unique-title baseTitle=<<newTitle>> template=<<__template__>> fields=<<__fields__>> />\n</$button>\n</$set>\n\\end\n\n\\define unique-title(baseTitle:\"New Tiddler\", template, fields:\"\" n:0)\n<$set name=\"inc\" value={{{ [<__n__>add[1]addprefix[0000]split[]last[3]join[]] }}}>\n<$set name=\"newTitle\" value={{{[<__baseTitle__>addsuffix<inc>]}}}>\n<$list filter=\"[<newTitle>] +[!has[title]]\" \nemptyMessage=\"\"\" <$macrocall $name=\"unique-title\" baseTitle=<<__baseTitle__>> template=<<__template__>> fields=<<__fields__>> n=<<inc>> /> \"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" $param=<<__template__>> title=<<newTitle>> $fields$/>\n</$list>\n</$set>\n\\end"},"$:/plugins/kookma/gatha/macros/create-plugin":{"title":"$:/plugins/kookma/gatha/macros/create-plugin","created":"20220207055708331","modified":"20220208051610311","tags":"","type":"text/vnd.tiddlywiki","text":"\\define create-new-plugin()\n <$button tooltip=\"create new plugin\" class=\"tc-btn-invisible\" >\n {{$:/core/images/new-button}}<span class=\"tc-btn-text\">new plugin</span>\n <$action-sendmessage $message=\"tm-new-tiddler\" title=\"$:/plugins/PublisherName/PluginName\" plugin-draft=\"plugin\" type=\"application/json\"/>\n </$button>\n\\end"},"$:/plugins/kookma/gatha/macros/definition":{"title":"$:/plugins/kookma/gatha/macros/definition","created":"20220211124538419","modified":"20220211125032477","tags":"","type":"text/vnd.tiddlywiki","text":"\\define tidConfig() $:/config/gatha/UIElements\n\\define tid-addExtraTiddlers-ui() Gatha Add Bulk of Extra Tiddlers"},"$:/plugins/kookma/gatha/macros/pluginActions":{"title":"$:/plugins/kookma/gatha/macros/pluginActions","created":"20190325073934260","modified":"20220201131528146","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\n\\define plugin-full-path() $:/plugins/$(publisher)$/$(plugin-name)$\n\n\\define plugin-full-path-slash() $:/plugins/$(publisher)$/$(plugin-name)$/\n\n\\define plugin-contents-filter() [prefix<plugin-full-path>addsuffix[/]!is[shadow]sort[]]\n\n\\define list-plugins(pluginName, publisherName)\n\n<$vars plugin-name=<<__pluginName__>> publisher=<<__publisherName__>> >\n\n<!-- plugin actions -->\n<$set name=\"qp\" value={{{[<plugin-full-path>addsuffix[/$(currentTiddler)$/popup-state]]>}}} >\n<$button popup=<<qp>> class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n<$reveal state=<<qp>> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/tehran/action]!has[draft.of]sort[caption]]\">\n<$transclude mode=\"inline\"/>\n</$list>\n</div>\n</$reveal> \n<!-- plugin author/name w. link -->\n<$link to=<<plugin-full-path>>>\n <$macrocall $name=\"plugin-name\" $output=\"text/plain\" />\n</$link>\n (<$count filter=<<plugin-contents-filter>> />)\n\n\n\n<!-- list of plugin contents -->\n<div class=\"tc-tree\" style=\"padding:5px;padding-left:12px;\">\n <$macrocall $name=\"tree-node\" prefix=<<plugin-full-path-slash>> />\n</div>\n</$set>\n</$vars>\n\\end\n\n\n\\define tehran()\n<$list filter=\"[tag[newPlugin]prefix[$:/plugins/]] -[all[shadows]prefix[$:/plugins/]shadowsource[]removeprefix[$:/plugins/]]\" variable=\"newPlugin\">\n<$vars \n pluginName= {{{[<newPlugin>removeprefix[$:/plugins/]split[/]last[1]]}}}\n publisherName={{{[<newPlugin>removeprefix[$:/plugins/]split[/]first[1]]}}}\n> \n<$macrocall $name=list-plugins pluginName=<<pluginName>> publisherName=<<publisherName>> />\n</$vars>\n</$list>\n\\end\n"},"$:/plugins/kookma/gatha/plugin-types/language":{"title":"$:/plugins/kookma/gatha/plugin-types/language","caption":"Language","created":"20141025180244406","modified":"20220204090607469","tags":"$:/tags/Gatha/PluginType","type":"text/vnd.tiddlywiki","text":"`language` -- this plugin is a language package for the language \"{{!!name}}\". This language plugin will automatically be used when you select this language in the [[basic settings|$:/core/ui/ControlPanel/Basics]] of the [[control panel|$:/ControlPanel]]."},"$:/plugins/kookma/gatha/plugin-types/plugin":{"title":"$:/plugins/kookma/gatha/plugin-types/plugin","caption":"Plugin","created":"20141025155451829","list-before":"","modified":"20220204091104083","tags":"$:/tags/Gatha/PluginType","type":"text/vnd.tiddlywiki","text":"\\rules except wikilink\n`plugin` -- this is the most general form of a TiddlyWiki 5 plugin."},"$:/plugins/kookma/gatha/plugin-types/theme":{"title":"$:/plugins/kookma/gatha/plugin-types/theme","caption":"Theme","created":"20141025174630240","modified":"20220204090639133","tags":"$:/tags/Gatha/PluginType","type":"text/vnd.tiddlywiki","text":"\\rules except wikilink\n`theme` -- contains a TiddlyWiki 5 theme.\nYou can select this theme through the [[theme switcher|$:/core/ui/ControlPanel/Theme]] in the [[control pane|$:/ControlPanel]]."},"$:/plugins/kookma/gatha/plugin-types/undefined":{"title":"$:/plugins/kookma/gatha/plugin-types/undefined","caption":"Undefined","created":"20141025155725392","modified":"20220204090541920","tags":"$:/tags/Gatha/PluginType","type":"text/vnd.tiddlywiki","text":"<code><$view field=\"plugin-draft\"/></code> -- is an ''unknown plugin type''."},"$:/plugins/kookma/gatha/readme":{"title":"$:/plugins/kookma/gatha/readme","created":"20220211102040369","modified":"20220217085856305","tags":"","type":"text/vnd.tiddlywiki","text":"; Gatha Studio Workspace\nCreate Tiddlywiki plugins, themes, languages, editions, contents in browser in an easy way and distribute as packaged JSON file, Node.JS plugin folder, or a Tiddlywiki app.\n\n;Code and demo\nFor learning plugin features, syntax, tutorial and examples see the plugin demo and code pages\n\n* Demo: https://kookma.github.io/TW-Gatha/\n* Code: https://github.com/kookma/TW-Gatha\n"},"$:/plugins/kookma/gatha/styles/main":{"title":"$:/plugins/kookma/gatha/styles/main","created":"20220203025826558","modified":"20220219191848697","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/*--------------- correct button svg color in sidebar */\n.ga-sidebar button svg {\n\tfill: <<colour sidebar-tiddler-link-foreground>>;\n}\n.ga-sidebar button:hover svg {\n\tfill: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n.ga-sidebar button.tc-btn-invisible {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n.ga-sidebar button.tc-btn-invisible:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\n/*--------------- tc-tree for tree macro*/\n.ga-sidebar .tc-tree button {\n\tcolor:<<colour sidebar-tiddler-link-foreground>>;\n\tfont-weight:500;\n}\n.ga-sidebar .tc-tree li:hover svg{\n\tfill: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\n.ga-sidebar .tc-tree li span{\n\tcolor:<<colour sidebar-tiddler-link-foreground>>; \n}\n\n/*--- for the add bulk of tiddlers button */\n.ga-extra-button{\n\topacity:0.4;\n}\n\n.ga-extra-label:hover .ga-extra-button{\n\topacity:1;\n}\n\n/*--------------- extra tiddlers tree */\n.ga-sidebar .tc-sidebar-tab-open .tc-sidebar-tab-open-item button svg {\n\tfill: <<colour sidebar-tiddler-link-foreground>>;\n}\n.ga-sidebar .tc-sidebar-tab-open .tc-sidebar-tab-open-item:hover button svg {\n\tfill: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\n/*--- toggle in add extra tiddlers ui */\n\n.tc-btn-invisible.ga-toggle-result svg {\n\tfill: <<colour sidebar-tiddler-link-foreground>>;\n\twidth:1.1em;\n\theight:1.1em;\n}\n.tc-btn-invisible.ga-toggle-result:hover svg {\n\tfill: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\n/*ther ui elements */\n.ga-edit-publish{\n width:95%;\n margin-top:5px;\n}\n\n.ga-sidebar .tc-drop-down button:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n}"},"$:/plugins/kookma/gatha/styles/plugin-table":{"title":"$:/plugins/kookma/gatha/styles/plugin-table","created":"20220203030437428","modified":"20220209064518277","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/* Newly added */\n.ga-plugin-info{\n\twidth:100%;\n}\n.ga-plugin-edit-element-value input{\n\twidth:100%;\n}\ntd.ga-plugin-info-element-name{\n\twidth:14rem;\n}\n/* the plugin-type input */\n.ga-plugin-edit-element-value input[type=text].ga-plugin-edit-element-type {width:70%;}\n.ga-plugin-edit-element-value select {\n\twidth: calc(30% - 8px);\n\tborder-width:2px;\n}\n\n/*---from tfc---*/\n\ntr.ga-plugin-info-element td {\n\tpadding-top: 0.4ex;\n\tpadding-bottom: 0.4ex;\n\tvertical-align: baseline;\n}\n\ntd.ga-plugin-info-element-name {\n\ttext-align: right;\n\tvertical-align: baseline;\n\twhite-space: nowrap;\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntd.ga-plugin-info-element-value {\n\ttext-align: left;\n\tvertical-align: top;\n}\n\nspan.ga-plugin-info-unspecified {\n\tfont-style: italic;\n\tcolor: <<colour very-muted-foreground>>;\n}\n\nspan.ga-plugin-info-unspecified:before {\n\tfont-style: normal;\n\tcontent: \"(\";\n}\n\nspan.ga-plugin-info-unspecified:after {\n\tfont-style: normal;\n\tcontent: \")\";\n\tpadding-left: 0.15em;\n}"},"$:/plugins/kookma/gatha/tabs/button-template":{"title":"$:/plugins/kookma/gatha/tabs/button-template","created":"20220201111641839","modified":"20220201125359121","tags":"","type":"text/vnd.tiddlywiki","text":"<$tiddler tiddler=<<currentTab>>>\n<$text text={{{ [<currentTiddler>split[/]last[]] }}}/>\n</$tiddler>"},"$:/plugins/kookma/gatha/tabs/content-template":{"title":"$:/plugins/kookma/gatha/tabs/content-template","created":"20220201123140487","hide-body":"yes","modified":"20220217195150441","tags":"","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\\define plugin-full-path() $(namePrefix)$$(publisherName)$/$(pluginName)$\n\n\\define disp-export-buttons()\n<!-- export buttons -->\n<div style=\"margin-top:10px;\">\n''Export plugin''<br><hr>\n<$list filter=\"[prefix<currentTiddler>] -[<currentTiddler>] [enlist{!!extra-tiddlers}] :filter[has[title]] +[limit[1]]\" variable=null emptyMessage=\"There is nothing to export!\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Gatha/ExportButton]!has[draft.of]sort[caption]]\" variable=button>\n<div class=\"tc-menu-list-item\" style=\"padding-left:14px;\">\n<$transclude tiddler=<<button>> mode=\"inline\"/>\n</div>\n</$list>\n</$list>\n</div>\n\\end\n\n\n\\define disp-plugin-tree(plugin-name, publisher)\n<!-- plugin actions -->\n<$set name=\"qp\" value={{{ [<plugin-full-path>addprefix[$:/state/popup/actions/]] >}}} >\n<$button popup=<<qp>> class=\"tc-btn-invisible\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n<$reveal state=<<qp>> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Gatha/Action]!has[draft.of]sort[caption]]\">\n<$transclude mode=\"inline\"/>\n</$list>\n</div>\n</$reveal>\n</$set>\n<!-- plugin author/name w. link -->\n<$link to=<<plugin-full-path>> />\n (<$count filter=\"[all[tiddlers+shadows]prefix<plugin-full-path>] -[<plugin-full-path>]\" />)\n\n<!-- list of plugin contents -->\n<div class=\"tc-tree\" style=\"padding:6px 6px 6px 12px;\">\n <$macrocall $name=\"tree-node\" prefix={{{ [<plugin-full-path>addsuffix[/]] }}} />\n</div>\n\\end\n\n\n<$tiddler tiddler=<<currentTab>>>\n<$let \n pluginType = {{!!plugin-draft}}\n namePrefix = {{{ [<pluginType>addprefix[$:/]addsuffix[s/]] }}}\n pluginName = {{{ [<currentTiddler>removeprefix<namePrefix>split[/]last[1]] }}}\n publisherName = {{{ [<currentTiddler>removeprefix<namePrefix>split[/]first[1]] }}}\n pluginVersion = {{{ [<currentTiddler>get[version]else[0.0.0]] }}}\n timedate = <<now \"YYYY0MM0DD\">>\n> \n\n<!--- create the tab content for one plugin-draft --->\n<$macrocall $name=disp-plugin-tree plugin-name=<<pluginName>> publisher=<<publisherName>> />\n<!-- extra plugin tiddlers section -->\n{{||$:/plugins/kookma/gatha/extra/extra-tiddlers}}\n\n<!-- test and debug section -->\n{{||$:/plugins/kookma/gatha/extra/resource-tiddlers}}\n\n<!-- export button -->\n<$macrocall $name=disp-export-buttons />\n\n</$let>\n</$tiddler>"},"$:/plugins/kookma/gatha/tabs/ide":{"title":"$:/plugins/kookma/gatha/tabs/ide","created":"20220215072303432","modified":"20220219184106266","tags":"","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/create-plugin\n\\import $:/plugins/kookma/gatha/import/load-plugin\n\\import $:/plugins/kookma/gatha/macros/definition\n\n<div class=\"ga-sidebar\">\n\n<<create-new-plugin>><$list filter=\"[<tidConfig>getindex[load-plugin]match[show]]\" variable=null> | <<load-plugin-ui>></$list>\n\n<!-- creats tabs from plugin drafts -->\n<$macrocall $name=\"tabs\"\n tabsList= \"[all[tiddlers]has:field[plugin-draft]!has[draft.of]] :sort[split[/]!is[blank]nth[4]]\" \n default= {{{ [all[tiddlers]has:field[plugin-draft]first[]] }}}\n buttonTemplate=\"$:/plugins/kookma/gatha/tabs/button-template\"\n template=\"$:/plugins/kookma/gatha/tabs/content-template\"\n class=\"tc-vertical\"\n />\n </div>"},"$:/plugins/kookma/gatha/templates/boilerplate/history":{"title":"$:/plugins/kookma/gatha/templates/boilerplate/history","created":"20220201130519606","modified":"20220201130547454","tags":"","type":"text/vnd.tiddlywiki","text":"Full change log https://kookma.github.io/TW-???/#ChangeLog\n\n* ''0.2.0'' -- 2020.03.12 -- first plugin\n* ''0.1.0'' -- 2019.11.19 -- first plugin\n"},"$:/plugins/kookma/gatha/templates/boilerplate/license":{"title":"$:/plugins/kookma/gatha/templates/boilerplate/license","created":"20220201130333814","modified":"20220201130444783","tags":"","type":"text/vnd.tiddlywiki","text":"Distributed under an MIT license.\n\nCopyright (c) 2021 [[Mohammad Rahmani|https://github.com/kookma]]\n\n<<<\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n<<<"},"$:/plugins/kookma/gatha/templates/boilerplate/readme":{"title":"$:/plugins/kookma/gatha/templates/boilerplate/readme","created":"20220201130111954","modified":"20220201130456686","tags":"","type":"text/vnd.tiddlywiki","text":"; Shiraz[use correct name]\ndescribe what is the plugin in one paragraph\n\n;Code and demo\nFor learning plugin features, syntax, tutorial and examples see the plugin demo and code pages\n\n* Demo: https://kookma.github.io/TW-???/\n* Code: https://github.com/kookma/TW-???\n"},"$:/plugins/kookma/gatha/templates/edittemplate":{"title":"$:/plugins/kookma/gatha/templates/edittemplate","created":"20220201133241150","modified":"20220201133259271","tags":"","type":"text/vnd.tiddlywiki","text":"<!--plugin edit template -->"},"$:/plugins/kookma/gatha/templates/icon":{"title":"$:/plugins/kookma/gatha/templates/icon","created":"20220203085427669","modified":"20220204062509929","tags":"","type":"text/vnd.tiddlywiki","text":"<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-plugin tc-image-button\" fill=\"orange\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"},"$:/plugins/kookma/gatha/templates/macro":{"title":"$:/plugins/kookma/gatha/templates/macro","created":"20190326185335149","modified":"20220201132347501","type":"text/vnd.tiddlywiki","text":"\\define mymacro()\n..\n\\end"},"$:/plugins/kookma/gatha/templates/style":{"title":"$:/plugins/kookma/gatha/templates/style","text":"/* add your plugin CSS rules here */","created":"20190326185244821","modified":"20220202210448198","type":"text/css"},"$:/plugins/kookma/gatha/templates/tiddler":{"title":"$:/plugins/kookma/gatha/templates/tiddler","created":"20190326185534510","modified":"20220201130246967","type":"text/vnd.tiddlywiki","text":"<!-- short description -->"},"$:/plugins/kookma/gatha/templates/viewtemplate":{"title":"$:/plugins/kookma/gatha/templates/viewtemplate","created":"20190326201159551","modified":"20220201130253454","type":"text/vnd.tiddlywiki","text":"<!--plugin viewtemplate -->"},"$:/plugins/kookma/gatha/ui/ControlPanel/Settings":{"title":"$:/plugins/kookma/gatha/ui/ControlPanel/Settings","caption":"Gatha","created":"20220211122052524","list-after":"$:/core/ui/ControlPanel/Settings/TiddlyWiki","modified":"20220219150630263","tags":"$:/tags/ControlPanel/SettingsTab $:/tags/MoreSideBar","type":"text/vnd.tiddlywiki","text":"\\import $:/plugins/kookma/gatha/macros/definition\n\\define tidToggleVisibility() $:/temp/gatha/fields-visibility\n\n\\define hiddenFields() author core-version description extra-tiddlers name plugin-priority plugin-type parent-plugin plugin-draft resource-tiddlers source version\n\n\\define toggle-plugin-fields-visibility()\n<$vars status={{{[<tidToggleVisibility>get[text]] :map[match[hide]then[show]] :else[[hide]] }}} >\n<$button class=\"tc-btn-invisible\" tooltip=\"hide/show plugin fields in edit mode\">\n{{$:/plugins/kookma/gatha/images/toggle}}<span class=\"tc-btn-text\">toggle fileds visibility</span>\n<$list filter=\"[enlist<hiddenFields>addprefix[$:/config/EditTemplateFields/Visibility/]]\">\n<$action-setfield $field=text $value=<<status>> />\n</$list>\n<$action-listops $tiddler=<<tidToggleVisibility>> $field=\"text\" $subfilter=\"+[toggle[hide]]\" />\n</$button>\n</$vars>\n\\end\n\n<div class=\"ga-sidebar\">\n\nThese settings let you customise the behaviour of Gatha plugin.\n\n---\n\n;Show Gatha setting in more sidebar\n:<$checkbox tiddler=\"$:/plugins/kookma/gatha/ui/ControlPanel/Settings\" tag=\"$:/tags/MoreSideBar\"> Show setting in more sidebar</$checkbox>\n\n; Hide Gatha in sidebar\n:<$checkbox tiddler=\"$:/plugins/kookma/gatha/ui/sidebar\" tag=\"$:/tags/SideBar\"> Disable Gatha development interface</$checkbox>\n\n<dl>\n<dt>Hide plugin fields</dt>\n<dd> <<toggle-plugin-fields-visibility>> </dd>\n<$list filter=\"[enlist<hiddenFields>addprefix[$:/config/EditTemplateFields/Visibility/]]\">\n<dd><$checkbox tiddler=<<currentTiddler>> field=text checked=\"hide\" unchecked=\"show\" default=\"show\"> <$link/></$checkbox></dd>\n</$list>\n</dl> \n\n;Global publish filter ($:/config/gatha/PublishFilter)\n:<$edit-text tiddler=\"$:/config/gatha/PublishFilter\" field=text class=\"ga-edit-publish\"/>\n\n;Advanced ptions\n:<$checkbox tiddler=<<tidConfig>> index=\"load-plugin\" checked=\"show\" unchecked=\"hide\" default=\"hide\"> Show load-plugin button</$checkbox>\n:<$checkbox tiddler=<<tidConfig>> index=\"add-tiddlers\" checked=\"show\" unchecked=\"hide\" default=\"hide\"> Show add extra tiddlers button</$checkbox>\n:<$checkbox tiddler=<<tidConfig>> index=\"res-tiddlers\" checked=\"show\" unchecked=\"hide\" default=\"hide\"> Show resource tiddlers section</$checkbox>\n\n</div>"},"$:/plugins/kookma/gatha/ui/edit-template-plugin-meta-data":{"title":"$:/plugins/kookma/gatha/ui/edit-template-plugin-meta-data","created":"20220201135853103","list-before":"$:/core/ui/EditTemplate/body","modified":"20220209063826936","tags":"","type":"text/vnd.tiddlywiki","text":"\\define plugin-info-row(name, value, output:\"html\")\n\\rules except wikilink\n <tr class=\"ga-plugin-info-element\">\n <td class=\"ga-plugin-info-element-name\">\n $name$:\n </td>\n <td class=\"ga-plugin-edit-element-value\">\n\t $value$\n </td>\n </tr>\n\\end\n\n\\define plugin-edit-row(name, field, placeholder)\n <tr class=\"ga-plugin-info-element\">\n <td class=\"ga-plugin-info-element-name\">\n $name$:\n </td>\n <td class=\"ga-plugin-edit-element-value\">\n <$edit-text field=\"$field$\" placeholder=\"$placeholder$\"/>\n </td>\n </tr>\n\\end\n\n<!-- select plugin-type and update the draft title\nThe update-draft-title-action used by select widget to update title of draft plugin\n-->\n\\define update-draft-title-action() \n<$vars old-draft-title={{{ [all[current]get[draft.title]split[/]butfirst[2]] +[join[/]] }}} >\n<$action-setfield $field=\"draft.title\" $value={{{ [{!!plugin-draft}addprefix[$:/]addsuffix[s/]addsuffix<old-draft-title>] }}} />\n</$vars>\n\\end\n\n\\define plugin-edit-row-plugintype(name, field, placeholder)\n<tr class=\"ga-plugin-info-element\">\n <td class=\"ga-plugin-info-element-name\">\n $name$:\n </td>\n <td class=\"ga-plugin-edit-element-value\">\n\t<$edit-text field=\"$field$\" placeholder=\"$placeholder$\" class=\"ga-plugin-edit-element-type\"/> <$select field=\"$field$\" default=\"plugin\" actions=<<update-draft-title-action>> >\n <$list filter=\"[all[tiddlers+shadows]tag[$:/tags/Gatha/PluginType]] :filter[has[caption]get[caption]!match[Undefined]]\">\n <option value={{{ [{!!caption}lowercase[]] }}} ><$text text={{!!caption}}/></option>\n </$list>\n </$select>\n </td>\n</tr> \n\\end \n\n\n<!-- create the table -->\n<$list filter=\"[all[current]has:field[plugin-draft]]\">\n\n<div class=\"ga-plugin-info\">\n <table class=\"ga-plugin-info\">\n <$set name=\"publisher\" filter=\"[all[current]get[draft.title]split[/]nth[3]]\">\n <<plugin-info-row name:\"Plugin publisher\" value:\"$(publisher)$\" output:\"text\">>\n <$set name=\"plugin-name\" filter=\"[all[current]get[draft.title]split[/]nth[4]]\">\n <<plugin-info-row name:\"Plugin name\" value:\"$(plugin-name)$\" output:\"text\">>\n </$set>\n </$set>\n\n\t<<plugin-edit-row \"Version\" \"version\" \"0.0.1\">>\n\t<<plugin-edit-row-plugintype \"Plugin type\" \"plugin-draft\" \"plugin\">>\n\t<<plugin-edit-row \"Display name\" \"name\" \"The name displayed in plugins page\">>\n\t<<plugin-edit-row \"Description\" \"description\" \"Tell TiddlyWiki users about what your plugin does\">>\n\t<<plugin-edit-row \"Author\" \"author\" \"U. K. Known\">>\n\t<<plugin-edit-row \"Source\" \"source\" \"https://example.org/foo\">>\n\t<<plugin-edit-row \"Plugin parent\" \"parent-plugin\" \"e.g. $:/plugins/kookma/utility\">>\t\n\t<<plugin-edit-row \"Plugin priority\" \"plugin-priority\" \"\">>\n\t<<plugin-edit-row \"Plugin dependencies\" \"dependents\" \"Plugins required by this one e.g. $:/plugins/kookma/shiraz\">>\t\n\t<<plugin-edit-row \"Required TW Core version\" \"core-version\" \">=5.1.23\">>\n</table>\n</div>\n\n</$list>\n"},"$:/plugins/kookma/gatha/ui/sidebar":{"title":"$:/plugins/kookma/gatha/ui/sidebar","caption":"Gatha","created":"20220201102742703","modified":"20220217112303388","tags":"$:/tags/SideBar","type":"text/vnd.tiddlywiki","text":"{{$:/plugins/kookma/gatha/tabs/ide}}"},"$:/plugins/kookma/gatha/ui/view-template-plugin-meta-data":{"title":"$:/plugins/kookma/gatha/ui/view-template-plugin-meta-data","created":"20220201135412536","list-before":"$:/core/ui/ViewTemplate/plugin","modified":"20220217084505769","tags":"","type":"text/vnd.tiddlywiki","text":"\\define plugin-type-infotiddler(tiddler)\n <$transclude tiddler=\"$tiddler$\">\n <$transclude tiddler=\"$:/plugins/kookma/gatha/plugin-types/undefined\"/>\n </$transclude>\n\\end\n\n\\define plugin-type-info(type)\n <$macrocall $name=\"plugin-type-infotiddler\" tiddler=\"$:/plugins/kookma/gatha/plugin-types/$type$\"/>\n\\end\n\n\\define plugin-info-row(name, value)\n\\rules except wikilink\n <tr class=\"ga-plugin-info-element\">\n <td class=\"ga-plugin-info-element-name\">\n $name$:\n </td>\n <td class=\"ga-plugin-info-element-value\">\n $value$\n </td>\n </tr>\n\\end\n\n\\define plugin-info-field-unspecified()\n <span class='ga-plugin-info-unspecified'>unspecified</span>\n\\end\n\n\\define plugin-info-field(name, field)\n <<plugin-info-row \"$name$\" \"<$view field='$field$' format='text'><$macrocall $name='plugin-info-field-unspecified' /></$view>\">>\n\\end\n\n\\define plugin-info-field-plugin-type-int(name, type)\n <$set name=\"desc\" value=<<plugin-type-info \"$type$\" >> >\n <$macrocall $name=\"plugin-info-row\" name=\"$name$\" value=<<desc>> />\n </$set>\n\\end\n\n\\define plugin-info-field-plugin-type(name)\n <$macrocall $name=\"plugin-info-field-plugin-type-int\" name=\"$name$\" type={{!!plugin-draft}} />\n\\end\n\n\\define plugin-info-field-link(name, field)\n <$list filter=\"[all[current]!field:$field$[]]\" emptyMessage=\"\"\"<<plugin-info-row \"$name$\" \"<$macrocall $name='plugin-info-field-unspecified'/>\" >>\"\"\">\n <$macrocall $name=\"plugin-info-row\" name=\"$name$\" value={{!!$field$}} />\n </$list>\n\\end\n\n\\define plugin-info-filter(name, filter)\n <$list filter=\"$filter$\" emptyMessage=\"\"\"<<plugin-info-row \"$name$\" \"<$macrocall $name='plugin-info-field-unspecified'/>\" >>\"\"\">\n <$macrocall $name=\"plugin-info-row\" name=\"$name$\" value={{!!title}} />\n </$list>\n\\end\n\n\\define update-plugin-info(name)\n <tr class=\"ga-plugin-info-element\">\n <td class=\"ga-plugin-info-element-name\">\n $name$:\n </td>\n <td class=\"ga-plugin-info-element-value\"><!-----changed----->\n <$importvariables filter=\"[[$:/plugins/kookma/gatha/actions/add-plugin.info]]\">\n <$vars plugin-title=<<currentTiddler>> currentTiddler={{{ [<currentTiddler>addsuffix[/plugin.info]] }}} >\n <$button class=\"tc-btn-invisible tc-tiddlylink\" tooltip=\"create and update plugin.info\"> update\n <<addInfo-actions>>\n </$button>\t\t\n </$vars>\t\t\t \n </$importvariables> \n </td>\n </tr>\n\\end\n\n\n<$list filter=\"[all[current]has:field[plugin-draft]]\">\n\n{{||$:/core/ui/Components/plugin-info}}\n\n<div class=\"ga-plugin-info\">\n <table class=\"ga-plugin-info\">\n <<plugin-info-filter \"Plugin publisher\" \"[all[current]split[/]nth[3]]\">>\n <<plugin-info-filter \"Plugin name\" \"[all[current]split[/]nth[4]]\">>\n <<plugin-info-field \"Version\" \"version\">>\n <$macrocall $name=\"plugin-info-field-plugin-type\" name=\"Plugin type\" />\n <<plugin-info-field \"Display name\" \"name\">>\n <<plugin-info-field \"Description\" \"description\">>\n <<plugin-info-field \"Information tabs\" \"list\">>\t\t\n <<plugin-info-field \"Author\" \"author\">>\n <$macrocall $name=\"plugin-info-field-link\" name=\"Source\" field=\"source\" />\n <<plugin-info-field \"Plugin parent\" \"parent-plugin\">>\t\t\t\n <<plugin-info-field \"Plugin priority\" \"plugin-priority\">>\n\t\t<<plugin-info-field \"Plugin dependencies\" \"dependents\">>\t\n <<plugin-info-field \"Required TW Core version\" \"core-version\">>\n <<update-plugin-info \"Plugin.info\">>\n </table>\n</div>\n</$list> "},"Gatha Add Bulk of Extra Tiddlers":{"title":"Gatha Add Bulk of Extra Tiddlers","created":"20220210172215455","modified":"20220219191812060","tags":"","target-plugin":"$:/plugins/kookma/bahar","type":"text/vnd.tiddlywiki","text":"<<tabs \n tabsList:\"[all[tiddlers+shadows]tag[$:/tags/Gatha/Search]!has[draft.of]sort[title]]\" \n default:\"$:/plugins/kookma/gatha/extra/search-by-filter\">>"},"$:/config/gatha/PublishFilter":{"title":"$:/config/gatha/PublishFilter","created":"20220213162905027","modified":"20220218102600956","tags":"","type":"text/vnd.tiddlywiki","text":"[[$:/DefaultTiddlers]]\n[subfilter{$:/DefaultTiddlers}]"},"$:/config/gatha/EditTemplateBodyFilters/PluginMetaData":{"title":"$:/config/gatha/EditTemplateBodyFilters/PluginMetaData","created":"20220201053911869","list-before":"$:/config/EditTemplateBodyFilters/canonical-uri","modified":"20220203155420936","tags":"$:/tags/EditTemplateBodyFilter","type":"text/vnd.tiddlywiki","text":"[has:field[plugin-draft]then[$:/plugins/kookma/gatha/ui/edit-template-plugin-meta-data]]"},"$:/config/gatha/ViewTemplateBodyFilters/PluginMetaData":{"title":"$:/config/gatha/ViewTemplateBodyFilters/PluginMetaData","created":"20220201054343503","list-before":"$:/config/ViewTemplateBodyFilters/system","modified":"20220203155424881","tags":"$:/tags/ViewTemplateBodyFilter","type":"text/vnd.tiddlywiki","text":"[has[plugin-draft]then[$:/plugins/kookma/gatha/ui/view-template-plugin-meta-data]]"}}}
{"tiddlers":{"$:/plugins/telmiger/details/accordion":{"title":"$:/plugins/telmiger/details/accordion","created":"20180928194557274","creator":"Thomas Elmiger","modified":"20200219093956524","modifier":"Thomas Elmiger","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define accordion(filter:\"_no_\",open:\"no\",class:\"\")\n<$vars accordion-filter=\"\"\"$filter$\"\"\" open=\"\"\"$open$\"\"\" class=\"\"\"$class$\"\"\">\n<$list filter=<<accordion-filter>>>\n<$details summary=<<currentTiddler>> open=<<open>> class=<<class>>>\n\n<$transclude tiddler=<<currentTiddler>>/>\n\n</$details>\n</$list>\n</$vars>\n\\end\n\n<!-- !!! Accordion Macro for Details\n\nList tiddlers and open them in a details-summary structure\n\n!!!! Attributes\n* filter: filter to select tiddlers\n* open: set to \"open\" to display details on load\n* class: set a class for the details tag\n\n-->"},"$:/plugins/telmiger/details/colours.css":{"title":"$:/plugins/telmiger/details/colours.css","created":"20180925155320737","creator":"Thomas Elmiger","modified":"20200219093956600","modifier":"Thomas Elmiger","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/* details and summary colours */\n\ndetails {\n background-color: <<colour tiddler-info-tab-background>>;\n color: <<colour foreground>>;\n}\n\ndetails summary {\n background-color: <<colour dropdown-tab-background>>;\n}\n\ndetails.notification summary {\n background-color: <<colour notification-background>>;\n /* TW leaves color undefined/uses foreground */\n}\n\ndetails.warning summary {\n background-color: #ffbbaf;\n color: #000;\n}\n\ndetails.success summary {\n background-color: #88edc5;\n color: #000;\n}\n"},"$:/plugins/telmiger/details/details.css":{"title":"$:/plugins/telmiger/details/details.css","created":"20170122140815442","creator":"Thomas Elmiger","modified":"20200219093956595","modifier":"Thomas Elmiger","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/* details and summary */\n\ndetails {\n transition: height 1s ease;\n padding: 0 0.5em 0 0.66em;\n margin-top: 0.66em;\n margin-bottom: 0.66em;\n}\n\ndetails + details {\n margin-top: -0.46em;\n}\n\ndetails[open] {\n padding-bottom: 1em;\n}\n\ndetails:not([open]) { \n cursor: pointer;\n}\n\ndetails > summary {\n display: list-item;\n margin: 0 -0.5em 0 -0.66em;\n padding: 0.2em 0.5em 0.2em 0.66em;\n padding-left: 1.76em; /* adjust for indentation */\n text-indent: -1.1em;\n cursor: pointer;\n}\n\ndetails[open] > summary {\n margin-bottom: 1em;\n}\n\ndetails[open] > *:first-child:not(summary) {\n margin-top: 1em;\n}\n"},"$:/plugins/telmiger/details/details.js":{"title":"$:/plugins/telmiger/details/details.js","text":"/*\\\ntitle: $:/plugins/telmiger/details/details.js\ntype: application/javascript\nmodule-type: widget\n\nDetails widget v 0.8\n\nWill output an HTML 5 <details> section including a <summary>\n\n```\n\t<details>\n\t\t<summary>This sums it up</summary> \n\t\tAll the details follow here.\n\t</details>\n```\n\n|Parameter |Description |h\n|summary |Optional text to display as summary. Wins over field (see below). |\n|open |Optional initial state, set to \"open\" to show details on load. Defaults to \"\". |\n|state |An optional TextReference containing the state. Wins over open. |\n|field |Optionally, the summary is taken from the field with this name in a given tiddler. Defaults to \"title\". |\n|tiddler |Optional title of a tiddler to watch, connected to field. Defaults to current tiddler. |\n|class |Optional CSS classes to be assigned to the details tag. |\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DetailsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDetailsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDetailsWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute attributes\n\tthis.computeAttributes();\n\t// Execute logic\n\tthis.execute();\n\t// Create elements\n\tthis.detailsDomNode = this.document.createElement(\"details\");\n\tif(this.detailsClass !== \"\") {\n\t\t// this.detailsClass += \" \";\n\t\t// this.detailsClass += \"tc-details\";\n\t\tthis.detailsDomNode.setAttribute(\"class\",this.detailsClass);\n\t}\n\tif(this.detailsOpen == \"open\") {\n\t\tthis.detailsDomNode.setAttribute(\"open\",\"open\");\n\t}\n\tif(this.detailsSummary !== \"\") {\n\t\tthis.summaryDomNode = this.document.createElement(\"summary\");\n\t\t// this.summaryDomNode.setAttribute(\"class\",\"tc-summary\");\n\t\tthis.detailsDomNode.appendChild(this.summaryDomNode);\n\t\tthis.summaryDomNode.appendChild(this.document.createTextNode(this.detailsSummary));\n\t}\n// register an event listener\n/* Maybe this can be reactivated later, see below.\n\tif(this.detailsStateTitle) {\n\t\t$tw.utils.addEventListeners(this.detailsDomNode,[\n\t\t\t{name: \"toggle\", handlerObject: this, handlerMethod: \"handleToggleEvent\"},\n\t\t]);\n\t}\n*/\n// As iOS mobile browsers lack support of toggle events on details \n// we emulate the toggle event using click\n\tif(this.detailsStateTitle && this.summaryDomNode) {\n\t\t$tw.utils.addEventListeners(this.summaryDomNode,[\n\t\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleToggleEvent\"},\n\t\t]);\n\t} else {\n\t\tif(this.detailsStateTitle) {\n\t\t\t$tw.utils.addEventListeners(this.detailsDomNode,[\n\t\t\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleToggleEvent\"},\n\t\t\t]);\n\t\t}\n\t}\n\t// Insert the details into the DOM and render any children\n\tthis.parentDomNode.insertBefore(this.detailsDomNode,nextSibling);\n\tthis.renderChildren(this.detailsDomNode,null);\n\tthis.domNodes.push(this.detailsDomNode);\n};\n\n/*\nRetrieve the value of the summary\n*/\nDetailsWidget.prototype.getSummary = function() {\n\tvar summary = \"\";\n\tif(this.summaryTitle === \"Tiddler not found\" && this.summaryField === \"\") {\n\t// nothing defined: leave empty \n\t\tsummary = \"\";\n\t} else {\n\t\t// tiddler defined? use defined field or title\n\t\tif(this.myTiddler) {\n\t\t\tif(this.summaryField === \"title\" || this.summaryField === \"\") {\n\t\t\t\tsummary = this.summaryTitle;\n\t\t\t} else {\n\t\t\t\tif(this.summaryField === \"text\") {\n \t\t// getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\t\tsummary = this.wiki.getTiddlerText(this.summaryTitle);\n\t\t\t\t} else {\n\t\t\t\t\tsummary = this.myTiddler.fields[this.summaryField];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.summaryField !== \"\" && this.summaryField !== \"text\") {\n\t\t\t\t// try defined field in current tiddler\n\t\t\t\tvar tiddler = this.wiki.getTiddler(this.getVariable(\"currentTiddler\"));\n\t\t\t\tsummary = tiddler.fields[this.summaryField];\n\t\t\t} else {\n\t\t\t\tsummary = \"\";\n\t\t\t}\n\t\t}\n\t}\n return summary;\n};\n\n/*\nRetrieve the value of the state text reference\n*/\nDetailsWidget.prototype.getStateFromReference = function() {\n var state = this.detailsStateTitle ? this.wiki.getTextReference(this.detailsStateTitle,\"\",this.getVariable(\"currentTiddler\")) : \"\";\n return state;\n};\n\n/*\nCheck all open signals, state fields/tiddlers get priority\n*/\nDetailsWidget.prototype.getOpenState = function() {\n\tvar result = \"\";\n\tif((this.detailsOpenDefault !== \"\" && this.detailsOpenDefault !== \"no\") \n\t || this.detailsState === \"open\") {\n\t\tresult = \"open\";\n\t } \n\tif(this.detailsStateTitle !==\"\" && this.detailsState !== \"open\") {\n\t\tresult = \"\";\n\t}\n\treturn result;\n};\n\n/*\nUpdate the state text reference after click event\n*/\nDetailsWidget.prototype.updateState = function(openState) {\n\tvar fieldValue = \"false\";\n\tvar currentTiddler = this.getVariable(\"currentTiddler\");\n // get the title for the (existing/new) tiddler\n\tvar tr = $tw.utils.parseTextReference(this.detailsStateTitle);\n\tvar tidTitle = tr.title || currentTiddler;\n // is it an existing state tiddler?\n\tvar isStateTiddler = (tr.title === this.detailsStateTitle);\n\tvar hasStateTiddler = this.wiki.tiddlerExists(tr.title);\n\tvar currentStateTiddler = (tr.title === currentTiddler);\n\tif(isStateTiddler || hasStateTiddler || (currentStateTiddler && tr.field !== \"text\")) { \n\t\t// Set the state field (but never overwrite the current tiddler’s text field\n\t\tthis.wiki.setText(tidTitle,tr.field,tr.index,openState);\n\t} else {\n\t\tif(!hasStateTiddler && tidTitle !== currentTiddler) {\n\t\t\tthis.createTiddler(tidTitle);\n\t\t\tthis.wiki.setText(tidTitle,tr.field,tr.index,openState);\n\t\t} else {\n\t\t\tconsole.log (\"Something went wrong in updateState\");\n\t\t}\n\t}\n};\n\n/*\nCreate a tiddler with a title only\n*/\nDetailsWidget.prototype.createTiddler = function(tidTitle) {\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: tidTitle,\n\t\t\ttags: []\n\t\t}\n\t));\n};\n\n/*\nSet openState according to click\n*/\nDetailsWidget.prototype.handleToggleEvent = function(event) {\n\t// check if an open attribute is present\n\tvar newState = this.detailsDomNode.open ? \"\" : \"open\";\n\t// update only, if the node has a new state\n\tif(newState !== this.detailsState) {\n\t\tthis.updateState(newState);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDetailsWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes \n\tvar tryTiddler = this.getAttribute(\"tiddler\");\n\tthis.myTiddler = this.wiki.getTiddler(tryTiddler);\n\tthis.summaryTitle = this.myTiddler ? tryTiddler : \"Tiddler not found\";\n\tthis.summaryField = this.getAttribute(\"field\",\"\");\n\tthis.detailsSummary = this.getAttribute(\"summary\") || this.getSummary();\n\tthis.detailsStateTitle = this.getAttribute(\"state\",\"\");\n\tthis.detailsState = this.getStateFromReference();\n\tthis.detailsOpenDefault = this.getAttribute(\"open\",\"\");\n\tthis.detailsOpen = this.getOpenState();\n\tthis.detailsClass = this.getAttribute(\"class\",\"\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDetailsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.summary || changedAttributes.state || changedAttributes.open || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tvar testState = this.getStateFromReference();\n\t\tif(testState !== this.detailsState) {\n\t\t\t// state change\n\t\t\tthis.refreshSelf();\n\t\t\trefreshed = true;\n\t\t} \n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.details = DetailsWidget;\n\n})();","type":"application/javascript","module-type":"widget","created":"20170124173619910","creator":"Thomas Elmiger","modified":"20200219093956587","modifier":"Thomas Elmiger","tags":"Plugins"},"$:/plugins/telmiger/details/icon":{"title":"$:/plugins/telmiger/details/icon","created":"20170205205314072","modified":"20200219093956580","tags":"","type":"text/vnd.tiddlywiki","text":"<svg class=\"tc-image-button telmiger-icon\" viewBox=\"0 0 128 128\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\" viewBox=\"0 0 128 128\" role=\"img\" aria-labelledby=\"title\"><title id=\"title\">T</title><path class=\"circle\" d=\"M64 2C30 2 2 29.753 2 64c0 34.235 27.753 62 62 62s62-27.752 62-62C126 29.753 98.221 2 64 2z\"/><path class=\"t\" d=\"M100.41 63.254c-2.886 1.92-7.544 2.883-13.979 2.883h-8.008c-4.246 0-7.331.845-9.254 2.536-1.922 1.69-3.449 5.086-4.576 10.19 0 0-.181 1.481-.503 1.481s-.369-.877-.518-1.586a37.897 37.897 0 0 0-.721-2.754c-.631-2.137-1.262-3.753-1.894-4.847-.764-1.359-1.727-2.452-2.889-3.28-1.162-.83-2.49-1.326-3.985-1.492l-2.092-.248H41.73c-6.144 0-10.711-.962-13.7-2.884-4.976-3.159-7.649-9.129-8.02-17.91-.03-.706.003-1.351.132-2.171h.585c.399 3.975 3.679 7.048 6.086 9.219 2.408 2.172 6.269 3.258 11.581 3.258h9.313c5.347 0 9.257 1.226 11.731 3.68 2.231 2.213 3.701 5.68 4.406 10.4.076.511.03.736.178.736.149 0 .11-.256.17-.783.713-6.122 3.085-10.219 7.117-12.294 2.487-1.292 6.434-1.906 11.841-1.839l6.368.1c4.311.066 7.942-.788 10.893-2.56 2.953-1.773 6.447-5.079 6.844-9.917h.595c.183.478.16 1.576.127 2.333-.371 8.752-2.894 14.668-7.567 17.749z\"/></svg>\n<style>\n.telmiger-icon .circle { fill: #e2001a }\n.telmiger-icon .t { fill: #fff }\n</style>"},"$:/plugins/telmiger/details/license":{"title":"$:/plugins/telmiger/details/license","created":"20170205213335455","modified":"20200219093956569","tags":"","type":"text/vnd.tiddlywiki","text":"!! Plugin license\n!!!The MIT License (MIT)\n\n```\nCopyright © 2017/2018 Thomas Elmiger – thomas-elmiger.ch\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```"},"$:/plugins/telmiger/details/readme":{"title":"$:/plugins/telmiger/details/readme","created":"20170205212323032","modified":"20200219093956554","tags":"","type":"text/vnd.tiddlywiki","text":"! ~DetailsWidget\n\nA plugin for [[TiddlyWiki|http://tiddlywiki.com]] 5 containing a script and some styles to create an HTML 5 `<details>` section including a `<summary>`. Here’s an example:\n\n<$details summary=\"W3C definition\">\n\n<<<\nThe [[details|http://w3c.github.io/html/interactive-elements.html#elementdef-details]] element represents a disclosure widget from which the user can obtain additional information or controls.\n<<< W3C\n\n</$details>\n\nDocumentation can be found at http://tid.li/tw5/plugins.html#DetailsWidget\n"}}}
{"tiddlers":{"$:/config/field-search/data/Any Field":{"text":"{\n \"*\": \"any field\"\n}","type":"application/json","caption":"Any Field","tags":"$:/tags/field-search/data","title":"$:/config/field-search/data/Any Field"},"$:/config/field-search/exclude":{"title":"$:/config/field-search/exclude","type":"text/vnd.tiddlywiki","text":"bag revision exclude draft.of draft.title"},"$:/config/field-search/sortby":{"title":"$:/config/field-search/sortby","type":"text/vnd.tiddlywiki","text":"title text tags caption subtitle creator modifier created modified type"},"$:/config/field-search/tab/Any Field":{"title":"$:/config/field-search/tab/Any Field","caption":"Any Field","opt-checked":"[all[]]","opt-unchecked":"[!is[system]]","search-set":"[!is[system]]","search-sort":"[sort[title]limit[250]]","tags":"$:/tags/SearchResults","type":"text/vnd.tiddlywiki","text":"\\define searchTerm() [search:$(field)$<userInput>]\n\n<$list filter=\"[[$:/config/field-search/data/Any Field]indexes[]sortby{$:/config/field-search/sortby}]\" variable=field emptyMessage=\"[[- configuration needed -|$:/plugins/wikilabs/field-search/readme]]\">\n{{||$:/plugins/wikilabs/field-search/templates/Results}}\n</$list>"},"$:/plugins/wikilabs/field-search/css/column-styles":{"title":"$:/plugins/wikilabs/field-search/css/column-styles","text":"/* columns responsive*/\n.c2, .c3, .columns2, .columns3 {\n column-rule: 1px solid #ccc;\n column-gap: 2em;\n}\n\n.c2, .columns2 { column-count:2;}\n.c3, .columns3 { column-count:3;}\n\n.-gap { column-gap: initial;}\n.-cr { column-rule: initial;}\n\n.wltc-max-width {\n width: 100%;\n}","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/wikilabs/field-search/styles":{"title":"$:/plugins/wikilabs/field-search/styles","tags":"$:/tags/Stylesheet","text":".wltc-show-system {\n float: right;\n cursor: pointer;\n}\n\n.wltc-show-system input {\n visibility: hidden;\n margin-left: -1em;\n width: initial;\n}\n\n.wltc-show-system input[checked] + span{\n color: blue;\n font-weight: bold;\n}"},"$:/plugins/wikilabs/field-search/history":{"title":"$:/plugins/wikilabs/field-search/history","text":"V 0.5.0 - 2022-03-27\n\n* update to TW v5.2.2\n* ''Important'': Changed license to Attribution-NonCommercial-ShareAlike -- [[CC-BY-NC-SA|$:/plugins/wikilabs/field-search/license]]\n\nV 0.4.1 - 2021-03-28\n\n* add match counter into field-search dropdown\n\nV 0.3.0 - 2021-03-06\n\n* \"+system\" is more visible if selected\n** shows a \"pointer cursor\" now\n* show field-names in \"all Fields\" tab\n* complete redesign\n\nV 0.2.4 - 2020-12-25\n\n* update license\n\nV 0.2.3 - 2020.01.19\n\n* Update license link/text\n\nV 0.2.2 - 2019.02.27\n\n* add \"include system tiddlers\" option per tab\n* work with a single template instead of duplicated code\n* Adjust minimum TW version to V5.1.18 because of \"subfilter\" usage\n\nV 0.1.0 - 2019.02.19\n\n* Make it more \"update-friendly\"\n** wrappers are tagged instead of \"search-list\" tiddlers\n\nV 0.0.1 - 2019.02.19\n\n* Initial release\n* Add \"Field Search\" tab to search results\n* Basic configuration options\n"},"$:/plugins/wikilabs/field-search/icon":{"title":"$:/plugins/wikilabs/field-search/icon","text":"<svg width=\"22pt\" height=\"22pt\" version=\"1.1\" viewBox=\"0 0 128 128\">\n<path transform=\"scale(4.36)\" d=\"m18.6 0-14.5 7.33-3.93 14.7 10.5 7.33 14.5-7.33 3.93-14.7-10.5-7.33zm-5.84 4.81c2.22 0 4.16 1.21 5.2 3h0.34v0.00195c0.277-0.0114 0.548 0.0881 0.744 0.273l2.8 2.64c0.182 0.171 0.287 0.402 0.291 0.645h0.00391v10.5c0 0.516-0.443 0.936-0.99 0.936h-9.91c-0.547 0-0.99-0.419-0.99-0.936v-5.56c-0.285-0.132-0.561-0.282-0.82-0.455l-4.3 4.3c-0.462 0.462-1.21 0.462-1.67 0-0.462-0.462-0.462-1.21 0-1.67l4.3-4.3c-0.656-0.985-1.01-2.14-1-3.33 0-3.32 2.69-6.01 6.01-6.01zm0 1.6c-2.07 0.0138-4.32 1.67-4.32 4.41 0 1.57 0.662 2.9 1.81 3.67v-5.73c0-0.516 0.443-0.936 0.99-0.936h4.71c-0.873-0.893-2.07-1.41-3.19-1.41zm-1.14 2.82v5.83c0.358 0.0841 0.734 0.143 1.14 0.143 2.36 0 4.44-1.74 4.44-4.38 0-0.577-0.115-1.11-0.309-1.59h-5.27zm1.26 1.45h3.12c0.508 0 0.916 0.443 0.916 0.992v0.0273c0 0.549-0.408 0.99-0.916 0.99h-3.12c-0.508 0-0.918-0.441-0.918-0.99v-0.0273c0-0.549 0.41-0.992 0.918-0.992zm5.86 0.531c-0.2 3.14-2.8 5.62-5.99 5.62-0.391 0-0.77-0.0497-1.14-0.121v4.62h9.05v-9.94h-1.38c-0.204 0-0.382-0.0727-0.539-0.172z\" style=\"stroke-width:.229\"/>\n</svg>"},"$:/plugins/wikilabs/field-search/license":{"title":"$:/plugins/wikilabs/field-search/license","license-text":"https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode","text":"[[Field Search-Plugin|https://wikilabs.github.io/#field-search]] (c) Mario Pietsch - 2019-2022\n\n[[Creative Commons Attribution-NonCommercial-ShareAlike|https://creativecommons.org/licenses/by-nc-sa/4.0/]]\n"},"$:/plugins/wikilabs/field-search/readme":{"title":"$:/plugins/wikilabs/field-search/readme","text":"This plugin adds a \"Field Search\" tab to the search results\n\n{{$:/plugins/wikilabs/field-search/CP/Settings/field-search}}\n\n!! This plugin replaces the following system modules\n\n<ul><$list filter=\"[[$:/plugins/wikilabs/field-search]plugintiddlers[]prefix[$:/core/]]\"><li><$link to=<<currentTiddler>>><<currentTiddler>><br></$link></li></$list></ul>"},"$:/core/ui/DefaultSearchResultList":{"title":"$:/core/ui/DefaultSearchResultList","caption":"{{$:/language/Search/DefaultResults/Caption}}","first-search-filter":"[!is[system]search:title<userInput>sort[title]limit[250]]","second-search-filter":"[!is[system]search<userInput>sort[title]limit[250]]","tags":"$:/tags/SearchResults","type":"text/vnd.tiddlywiki","text":"//<small>{{$:/language/Search/Matches/Title}}</small>//\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[first-search-filter]] ~[{$:/config/SearchResults/Default}get[first-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span></$list></$list>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[second-search-filter]] ~[{$:/config/SearchResults/Default}get[second-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-secondaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n"},"$:/plugins/wikilabs/field-search/templates/ItemTemplate":{"title":"$:/plugins/wikilabs/field-search/templates/ItemTemplate","type":"text/vnd.tiddlywiki","text":"<span title=\"Drag & Drop sort\">:::</span> <$link />"},"$:/plugins/wikilabs/field-search/templates/ListItemTemplate":{"title":"$:/plugins/wikilabs/field-search/templates/ListItemTemplate","type":"text/vnd.tiddlywiki","text":"<div class=\"tc-menu-list-item tc-small-gap-left\">\n<$link />\n</div>"},"$:/plugins/wikilabs/field-search/templates/Results":{"title":"$:/plugins/wikilabs/field-search/templates/Results","modified":"20210328092315108","type":"text/vnd.tiddlywiki","text":"\\define showAll()\n<small><$checkbox field=\"search-set\" checked={{!!opt-checked}} unchecked={{!!opt-unchecked}} class=\"wltc-show-system\">+ system</$checkbox></small>\n\\end\n<$tiddler tiddler=<<currentTab>>>\n<$set name=lst filter=\"[subfilter{!!search-set}] +[subfilter<searchTerm>] +[subfilter{!!search-sort}]\">\n//Field: ''<<field>>'' (<$count filter=\"\"\"[enlist<lst>]\"\"\"/>) <<showAll>>//\n\n<$list filter=\"[enlist<lst>]\" template=\"$:/core/ui/ListItemTemplate\" emptyMessage=\"\"\"<div class=\"tc-menu-list-item tc-small-gap-left\">n/a</div>\"\"\"/>\n</$set>\n</$tiddler>"},"$:/plugins/wikilabs/field-search/templates/WrapperTemplate":{"title":"$:/plugins/wikilabs/field-search/templates/WrapperTemplate","caption":"Fields","opt-checked":"[all[]]","opt-unchecked":"[!is[system]]","search-set":"[!is[system]]","search-sort":"[sort[title]limit[250]]","type":"text/vnd.tiddlywiki","text":"`\\define searchTerm() [search:$(field)$<userInput>]\n\\define openConfig() \n<$button>\n <$action-setfield $tiddler=\"$:/state/tab-1749438307\" text=\"$:/plugins/wikilabs/field-search/CP/Settings/field-search\"/>\n <$action-navigate $to=\"$:/ControlPanel\"/>\n- configuration needed -\n</$button>\n\\end\n\n<$list filter=\"[[`<<newConfigName>>`]indexes[]sortby{$:/config/field-search/sortby}]\" variable=field emptyMessage=\"<<openConfig>>\">\n{{||$:/plugins/wikilabs/field-search/templates/Results}}\n</$list>`\n"},"$:/plugins/wikilabs/field-search/CP/Settings/field-search":{"title":"$:/plugins/wikilabs/field-search/CP/Settings/field-search","caption":"Field-Search","tags":"$:/tags/ControlPanel","text":"\\define setDefault()\n<$action-deletetiddler $tiddler=\"$:/plugins/wikilabs/field-search/ui/fieldWrapper\"/>\n<$action-deletetiddler $tiddler=\"$:/plugins/wikilabs/field-search/ui/aliasWrapper\"/>\n<$action-deletetiddler $tiddler=\"$:/plugins/wikilabs/field-search/ui/captionWrapper\"/>\n<$action-deletetiddler $tiddler=\"$:/plugins/wikilabs/field-search/ui/textWrapper\"/>\n<$action-deletetiddler $tiddler=\"$:/plugins/wikilabs/field-search/ui/titleWrapper\"/>\n<$action-deletetiddler $tiddler=\"$:/core/ui/DefaultSearchResultList\"/>\n\\end\n\n{{$:/plugins/wikilabs/field-search/ui/TabConfigurator}}\n\n!! Return to Default\n\nThe following shaddow tiddlers have been modified: \n\n<<list-links filter:\"[tag[$:/tags/SearchResults]is[tiddler]is[shadow]sort[title]]\">>\n\n<$button actions=<<setDefault>> >\nReturn to: Default Settings!\n</$button>\n\n"},"$:/plugins/wikilabs/field-search/ui/edit/exclude":{"title":"$:/plugins/wikilabs/field-search/ui/edit/exclude","type":"text/vnd.tiddlywiki","text":"!! [[Exclude Fields|$:/plugins/wikilabs/field-search/ui/edit/exclude]]\n<<<\nThe following fields are excluded: ''{{$:/config/field-search/exclude}}'' \n\nExclude from field list: \n<$edit-text class=\"wltc-max-width\" tiddler=\"$:/config/field-search/exclude\" tag=\"input\"/>\n<<<"},"$:/plugins/wikilabs/field-search/ui/edit/sortby":{"title":"$:/plugins/wikilabs/field-search/ui/edit/sortby","type":"text/vnd.tiddlywiki","text":"!! [[Field Sort order|$:/plugins/wikilabs/field-search/ui/edit/sortby]]\n<<<\nSort order: [[$:/config/field-search/sortby]]\n\n<$edit-text class=\"wltc-max-width\" tiddler=\"$:/config/field-search/sortby\" tag=\"input\"/>\n<<<"},"$:/plugins/wikilabs/field-search/ui/ExistingTabs":{"title":"$:/plugins/wikilabs/field-search/ui/ExistingTabs","type":"text/vnd.tiddlywiki","text":"\\define getTempName() $:/temp/field-search/tabName\n\\define getCurrentDataName() $:/config/field-search/data/$(currentCaption)$\n\\define getCurrentTabName() $:/config/field-search/tab/$(currentCaption)$\n\n\\define editConfig()\n<$action-createtiddler $basetitle=<<getTempName>> $overwrite=yes $template=<<getCurrentDataName>> tags=\"\"/>\n<$action-setfield $tiddler=\"$:/temp/field-search/select\" text=<<getCurrentDataName>>/>\n\\end\n\n\\define editConfigButton()\n<$button tooltip=\"Load Configuration\" class=\"tc-btn-invisible\" actions=<<editConfig>>>{{$:/core/images/copy-clipboard}} Edit</$button>\n\\end\n\n\\define deleteConfig()\n<$action-sendmessage $message=\"tm-delete-tiddler\" $param=<<getCurrentTabName>>/>\n<$action-sendmessage $message=\"tm-delete-tiddler\" $param=<<getCurrentDataName>>/>\n\\end\n\n\\define deleteButton()\n<$button tooltip=\"Load Configuration\" class=\"tc-btn-invisible\" actions=<<deleteConfig>>>{{$:/core/images/delete-button}} Delete</$button>\n\\end\n\n\\define checkbox()\n<$checkbox tiddler=<<currentTiddler>> tag=\"$:/tags/SearchResults\" checked=\"$:/tags/SearchResults\" unchecked=\"\" default=\"\"/>\n\\end\n\n!! [[Custom Search Configurations|$:/plugins/wikilabs/field-search/ui/ExistingTabs]]\n<<<\nIf the element is checked, the configuration will be used:\n\n<table><tbody>\n<$list filter=\"[prefix[$:/config/field-search/tab/]]\" emptyMessage=\"n/a\">\n<tr>\n<$vars currentCaption={{!!caption}}>\n<td><<checkbox>></td><td><$link to=<<currentTiddler>>><<currentCaption>></$link> - used <$link to=<<getCurrentDataName>>> fields</$link>: ''<$list filter=\"[<getCurrentDataName>indexes[]sortby{$:/config/field-search/sortby}]\" variable=field><<field>>, </$list>'' </td><td><<deleteButton>></td><td><<editConfigButton>></td>\n</$vars>\n</tr>\n</$list>\n</tbody></table>\n\n<<<"},"$:/plugins/wikilabs/field-search/ui/TabConfigurator":{"title":"$:/plugins/wikilabs/field-search/ui/TabConfigurator","type":"text/vnd.tiddlywiki","text":"\\define getTabName() $:/config/field-search/tab/$(tabName)$\n\\define getConfigName() $:/config/field-search/data/$(tabName)$\n\\define getTempName() $:/temp/field-search/tabName\n\\define getTempSelect() $:/temp/field-search/select\n\n\\define clearTemp()\n\\whitespace trim\n<$button class=\"tc-btn-invisible\">\n <$action-deletetiddler $tiddler=<<getTempName>>/>\n <$action-deletetiddler $tiddler=<<getTempSelect>>/>\n {{$:/core/images/close-button}}\n</$button>\n\\end\n\n\\define createTab()\n<$set name=newConfigName value=<<getConfigName>> >\n <$wikify name=aa text={{$:/plugins/wikilabs/field-search/templates/WrapperTemplate}} output=text>\n <$action-createtiddler $basetitle=<<getTabName>> $overwrite=yes $template=\"$:/plugins/wikilabs/field-search/templates/WrapperTemplate\" caption={{{ [<getTempName>get[caption]] }}} text=<<aa>> tags=\"$:/tags/SearchResults\"/>\n <$action-createtiddler $basetitle=<<getConfigName>> $template=<<getTempName>> $overwrite=yes tags=\"$:/tags/field-search/data\"/>\n </$wikify>\n</$set>\n\\end\n\n\\define selectActions()\n<$action-createtiddler $basetitle=<<getTempName>> $overwrite=yes $template={{{ [<getTempSelect>get[text]] }}} tags=\"\"/>\n\\end\n\n\\define selectData()\n<$select tiddler=<<getTempSelect>> default=\"\" actions=<<selectActions>> >\n <option value=\"\">---</option>\n <$list filter=\"[tag[$:/tags/field-search/data]]\" >\n <option value=<<currentTiddler>> >{{!!caption}}</option>\n </$list>\n</$select>\n\\end\n\n!! Default Setting\n<<<\n* <$checkbox tiddler=\"$:/core/ui/DefaultSearchResultList\" tag=\"$:/tags/SearchResults\" checked=\"$:/tags/SearchResults\" unchecked=\"\" default=\"$:/tags/SearchResults\"> Add ''Default Search'' tab to the search dropdown!</$checkbox>\n* <$checkbox tiddler=\"$:/config/field-search/tab/Any Field\" tag=\"$:/tags/SearchResults\" checked=\"$:/tags/SearchResults\" unchecked=\"\" default=\"$:/tags/SearchResults\"> Add ''Any Field'' tab to the search dropdown!</$checkbox>\n<<<\n\n{{$:/plugins/wikilabs/field-search/ui/ExistingTabs}}\n\n!! [[Create / Modify Configuration|$:/plugins/wikilabs/field-search/ui/TabConfigurator]]\n<<<\nNew caption: <$edit-text tiddler=<<getTempName>> field=\"caption\"/> <<clearTemp>> <!-- Load config: <<selectData>> -->\n\nUsed fields: ''<$list filter=\"[<getTempName>indexes[]sortby{$:/config/field-search/sortby}]\" variable=field><<field>>, </$list>''\n\n---\n\n<$vars tabName={{{ [<getTempName>get[caption]] }}}>\n\n@@.columns3.j\n<$list filter=\"[all[]!is[system]fields:exclude{$:/config/field-search/exclude}sort[]sortby{$:/config/field-search/sortby}]\" variable=\"field\">\n<$checkbox tiddler=<<getTempName>> index=<<field>> checked=\"comment\" default=\"closed\" > <<field>><br></$checkbox>\n</$list>\n@@\n\n<table class=\"wltc-max-width\"><tbody>\n<$list filter=\"[<getTempName>indexes[]sortby{$:/config/field-search/sortby}]\" variable=field>\n<tr>\n<td><<field>></td><td><$edit-text class=\"wltc-max-width\" tiddler=<<getTempName>> index=<<field>> tag=input/> </td>\n</tr>\n</$list>\n</tbody></table>\n\n---\n\n<$list filter=\"[<getTabName>get[caption]match<tabName>addprefix[Update ]else[Create]]\" variable=\"buttonText\" >\n<$button actions=<<createTab>> disabled={{{[<getTempName>get[caption]then[no]else[yes]]}}}>\n<<buttonText>>\n</$button>\n</$list>\n</$vars>\n<<<\n\n!! Tab Order\n<<<\nYou can use ''drag&drop to sort'' the list:\n\n<<list-tagged-draggable tag:\"$:/tags/SearchResults\" itemTemplate:\"$:/plugins/wikilabs/field-search/templates/ItemTemplate\">>\n<<<\n\n{{$:/plugins/wikilabs/field-search/ui/edit/exclude}}\n\n{{$:/plugins/wikilabs/field-search/ui/edit/sortby}}\n"}}}
...
* try DnDrop * Home & .open & fieldNames ( NrH ) * testing h...w... X...50
>>>> AdManCa > CeEa >>> AdManQu > AnMan(Montreal) <--| >> AdManOn > MPAC & TeraNet > CPC > /\ . > adManYyz
!!! 0701: TwV5.3.0 released ... # reduced topBar content --- !!! 0613: * it may be necessary to .open & create a tiddler before it can be saved * Try working in a different App if only to see if my fear of loss is reduced. * It might be better to pin a menu tiddler above the Story. This should separate the "logged in" message from the topOfStory tiddler's controls.
* confirm I can upgrade this Xememex instance to 5.3.1
This is an initial NonWords instance. It is referred to in PsH0.'custom filter' to make it an effective initial Note.
* a source of newListings is now active as of -02- ** I'm using the approach of establishing TechnicalFeasibility first *** (just the ) Df Testing of this is being done manually
<<tag ¡/now>> {{p.m.||$:/core/ui/TagTemplate}} {{①||$:/core/ui/TagTemplate}} {{⌂.||$:/core/ui/TagTemplate}} {{②||$:/core/ui/TagTemplate}} <<tag _週>> {{-㉟||$:/core/ui/TagTemplate}} {{月||$:/core/ui/TagTemplate}} {{㋋||$:/core/ui/TagTemplate}} {{⛏.||$:/core/ui/TagTemplate}} <<tag 𝟘>> {{⒈/a.m.||$:/core/ui/TagTemplate}} <$details summary="wip" > | #ff0000<<tag ←>> #00ff00<<tag ⧗>> #32b446<<tag 日>> #0000ff<<tag →>> |{{#汇}} | TagUseN ... | | {{𝖆||$:/core/ui/TagTemplate}} {{~||$:/core/ui/TagTemplate}} {{𝕯月||$:/core/ui/TagTemplate}} {{ώ||$:/core/ui/TagTemplate}} | FindH [[#.pick]] [[⎔dropdownTags]] | *ReTag [[⟔]] * FtH. H/TagSteps AlterTags * _- _-27 ㍨ _086 ㏺Tda _🈁 ☽ ♂ ☿ ♃ ♀ ♄ ☉ 𝗠 𝗡 🔝 ㋁ _-日 今 ¡ ¡寅 今 🐟_3 * ☽♂☿♃♀♄☉ 𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥 𝗦(19/52) 𝗧𝗨𝗩𝗪𝗫𝗬𝗭 ... 𝗺 𝗻 𝗼 𝗽 𝗾 𝗿 𝘀 𝘁 𝘂 𝘃 𝘄 𝘅 𝘆 𝘇 [[⧗]] !! wip: * try to generalize the codes to use fields other than specifically !!tags ** this capability likely exists as a specific searchReplace * $:/temp/RenameTags/replace * $:/temp/RenameTags/search | [[🈁]] TimeTags <<tag 𝗧>> [[🐟]] [[月]] [[亥]] | [[#汇]] [[.cloud]] | [[+]] | ` {$:/temp/RenameTags/search}!tag{$:/temp/RenameTags/replace} ` [[⧗]] </$details> 今 [[今]] 兹 [[兹]] 次 [[次]] 日 [[日]] [[☽/♂☿♃♀♄☉]] ㏻ ㏼ ㏽ ㏾ [[月]] [[𝗔]] [[㋀]] [[㋁]] [[㋂]] [[㋃]] [[㋄]] [[㋅]] [[㋆]] ㋇ [[㋉/㋇]] <<tag ㋉/㋇>> [[㋉]] [[㋉]] [[㋊]] ㋋ [[㋋]] <<tag ㋋>> {{CpH##CpHtags}} !!! ( [[⧗]] [[⦒]] )tagValues !!!!!//1) Apply the "Replace by" <$tiddler tiddler={{$:/temp/RenameTags/replace}}><$transclude tiddler="showtag"/></$tiddler> to the following tiddlers// <$list filter="[!has[draft.of]tag{$:/temp/RenameTags/search}!tag{$:/temp/RenameTags/replace}sort[created]]"> <$checkbox tag={{$:/temp/RenameTags/replace}}> <$link to={{!!title}}><$view field="title"/></$link></$checkbox> </$list> !!!!!//2) Remove the "Search tag" <$tiddler tiddler={{$:/temp/RenameTags/search}}><$transclude tiddler="showtag"/></$tiddler> from the following tiddlers// <$list filter="[!has[draft.of]tag{$:/temp/RenameTags/search}tag{$:/temp/RenameTags/replace}sort[created]]"> <$checkbox tag={{$:/temp/RenameTags/search}}> ~~<$link to={{!!title}}><$view field="title"/></$link>~~</$checkbox> </$list> |[[$:/temp/RenameTags/search]]| <$edit-text tiddler="$:/temp/RenameTags/search" tag="input" type="text"/> | |[[$:/temp/RenameTags/replace]]| <$edit-text tiddler="$:/temp/RenameTags/replace" tag="input" type="text"/> | {{H/TagSteps}} |[[_jDate]] | <$details summary="..." > * H/TagSteps 'AlterTags' shown to tw google group by [[Alberto Molina|https://groups.google.com/forum/#!topic/tiddlywiki/OCntQ79DuwM]]. See ~TaskManagementExample. ---- * [[showTag]] * TagsH should incorporate this tiddler. * TagSet Clusters formed by a Tag filter should likely become (portable) ~ConTexts. ** 𝓓_ ... * Consider adding a tagButton to this tiddler for ... ** ~TdaH(s) = {{时!!days}} ** {{!!-}} *** or other series for ordinal uses, like ... **** [[①]] [[㋀]] ... * _108 PsN → ①story EditVN ㋃子 fieldEdits fieldTable JsonMangler 子🐟 TwT * 週!!{{週!!-n}} * 日!!{{日!!-n}} ` 日 [search:tags[日]] 𝖊 [[⎔𝖘.]] ` ---- </$details> [[Help?]] `_09`-0`t `
* Explain ...[[Xe]]... as an instance of a TwoLetter WikiSyllable(s) in a WardsWiki NameRules ** Link to WikiPedia TLA
| DgH | TimeTags DebateGraph [[IChing]] | https://en.wikipedia.org/wiki/Chinese_zodiac | Rat Ox Tiger Rabbit Dragon Snake Horse Ram Monkey Rooster Dog Pig | 子 丑 寅 卯 辰 巳 午 未 申 [[酉]] [[戌]] [[亥]] | [[zodiac|https://unicode-table.com/en/sets/signs-of-the-zodiac/]] | | | ChineseZodiac | [[ChineseZodiac←]] {{←||$:/core/ui/TagTemplate}} | {{→||$:/core/ui/TagTemplate}} [[ChineseZodiac→]] | | {{子||$:/core/ui/TagTemplate}} [[子]] | Rat |[[2021-]] |Feb ?? – Jan ?? | | | {{丑||$:/core/ui/TagTemplate}} [[丑]] | Ox |[[2021-]] |Feb 12 – Jan 31 | | | {{寅||$:/core/ui/TagTemplate}} [[寅]] | Tiger |[[2022-]] |Feb 01 – Jan 21 | | | {{卯||$:/core/ui/TagTemplate}} [[卯]] | Rabbit |[[2023-]] |Jan 22 – Feb 09 | | | {{辰||$:/core/ui/TagTemplate}} [[辰]] | Dragon |[[2024-]] |Feb 10 – Jan 28 | | | {{巳||$:/core/ui/TagTemplate}} [[巳]] | Snake |[[2025-]] |Jan 29 – Feb 16 | | | {{午||$:/core/ui/TagTemplate}} [[午]] | Horse |[[2026-]] |Feb 17 – Feb 05 | | | {{未||$:/core/ui/TagTemplate}} [[未]] | Goat |[[2027-]] ... | | | | {{申||$:/core/ui/TagTemplate}}[[申]] | Monkey |[[2028-]] ... | | | | {{酉||$:/core/ui/TagTemplate}} [[酉]] | Rooster |[[2029-]] [[🐟酉]] | | | | {{戌||$:/core/ui/TagTemplate}}[[戌]] | Dog |[[2030-]] ... | | | | {{亥||$:/core/ui/TagTemplate}}[[亥]] | Pig |[[2031-]] ... | | | | [[*]] | [[...]] |...| [[2032-]] [[2039-]]| | ---- | | ChineseZodiac | [[ChineseZodiac←]] {{←||$:/core/ui/TagTemplate}} {{→||$:/core/ui/TagTemplate}} [[ChineseZodiac→]] | | | {{子||$:/core/ui/TagTemplate}} [[子]] | Rat | [[1948-]] 1960- 1972- 1984- 1996- 2008- 2020- |Jan 25 – Feb. 11 | | [[丑]] | Ox | 1949- 1961- 1973- 1985- 1997- 2009- | Feb 12 2021–Jan 31 2022 | | [[寅]] | Tiger | 1950- 1962- 1974- 1986- 1998- 2010- | | | [[卯]] | Rabbit | 1951- 1963- 1975- 1987- 1999- 2011- | | | [[辰]] | Dragon | 1952- 1964- 1976- 1988- 2000- 2012- | | | {{巳||$:/core/ui/TagTemplate}} [[巳]] | Snake | 1953- 1965- 1977- 1989- 2001- 2013- |Feb 10 –Jan 30 | | {{午||$:/core/ui/TagTemplate}} [[午]] | Horse | 1954- 1966- 1978- 1990- 2002- 2014- |Jan 31 – Feb 18 | | {{未||$:/core/ui/TagTemplate}} [[未]] | Goat | 1955- 1967- 1979- 1991- 2003- 2015- |Feb 19 – Feb 7 | | {{申||$:/core/ui/TagTemplate}} [[申]] | Monkey | 1956- 1968- 1980- 1992- 2004- [[2016-]] |Feb 8 – Jan 27 | | {{酉||$:/core/ui/TagTemplate}} [[酉]] | Rooster | 1957- 1969- 1981- 1993- 2005- [[2017-]] |Jan 28 – Feb 15 | | {{戌||$:/core/ui/TagTemplate}} [[戌]] | Dog | 1958- 1970- 1982- 1994- 2006- [[2018-]] |Feb 16 – Feb 04 | | {{亥||$:/core/ui/TagTemplate}} [[亥]] | Pig {{🐟亥||$:/core/ui/TagTemplate}} | 1959- 1971- 1983- 1995- 2007- [[2019-]] |Feb 05 – Jan 24 | ---- * start to distinguish the Types of each astrological symbol in order to extend into using the full 60 or 120 years * alternatively ... ** Year + Rank [ 600 = 12 X (0 ... 50) ] ** Year + Type [ 240 = 12 X ( 0 ... 20) ] ** Year + Week [724 = 12 X (1 ... 52) ] ** Year+month can be used to subdivide year into 144 intervals ** Year +
_ : `{{CpH##_}}` CpH: {{CpH##CpT}} [[午]] 0 : `{{CpH##0}}` CpH: [[★]] StVar [[丌]] [[Do]] DoT 0. : `{{CpH##0.}}` CpH: 0. [[本]] EventsH TasksH DevH TwLearn 2. : 2.Contents 2.9 : 2.9: EndNotes: ... 9_ : 9: {{CpH##fromTp}} 9. : 9. ... ⮃⇄ : [[⮃⇄]] .1 : CpH: [[丌cols]] : <<list-table-draggable 丌cols>> .2 : CpH: <<list-table-draggable myCheckboxRowTemplate>> .f.cr: ! Findings: f.c.r: ! Conclusions: fc.r.: ! Recommendations: .open : 汇 _ ㏦ Do 㠭 丌 CpD : ( TmoD CpH )~CpD CpH : EventsH SetDic TasksH DevH TwLearn CpH CpH : C(ontrol) p(oint) H(wW) [[🔍]] CpH.2 : 2.Contents 9.(end)Notes CpHN : CpH.N(otes) QrSt : CpH.QrSt - Q(ueue) r(ank) S(pace) t(ime) > [[🆔]] from [[🔣]] CpT : ( [[/#]] ; EdD ; CpD CpH )CpT CpCol : {{⮃⇄!!list}} CpRow : [[丌rows]] [[myRowTemplate]] [[$:/plugins/TWaddle/list-table-draggable/defaultTemplate]] CpTable : [[丌cols]] [[丌rows]] CpT : CpH: `{{CPH##CpT}}` CpT(ime) {{CpH##CpTda}} [[兹]][[週]] 🆔/㊹ 🆔.且 [[日]] {{CpH##CpTmo}} [[月]] 今兹次 CpTda : ☽♂☿♃♀♄☉ ☉/週 CpTmo : ㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉ [[㋊]] ㋋ [[月]] EdD : CpH:NrH [[preRelease|https://tiddlywiki.com/prerelease/parameterised-transclusions/]] Fcr : FiH CoH ReH TopicFcr FcrT HwW : [[ℋ]] Tn : ☽♂☿♃♀♄☉日 ... TnT [[次]] Wp : WikiPedia code.f2t : _3: <<fields2table "[search:_[_3]sort[_]]" >> fromTp : [[wayBack|https://web.archive.org/web/20220000000000]] myRows01 : myRowTemplate x : CpH: [[🔣]] [[🆔]] inde[[᙮]]
* Bear in mind that this is a 5.3.0 preRelease * it may be effective to set up a TH file that can be used to update this file ** this could be an alternative to PsH
* Link to the eric-test site more often now that the slow load issue is resolved.load. It was designed for mobile use. Try it on Samsung.Android. ! ToDo…
* https://github.com/dangowans ** https://www.npmjs.com/package/ntfy
# CpH ---- * Can a DataDictionary be used to exploit GuidTiddlers ?
! Introduction The data widget is used with the <<.wlink TestCaseWidget>> widget and the [[Innerwiki Plugin]] to specify payload tiddlers that are to be included in the test case or innerwiki. ! Content and Attributes The content of the data widget is rendered as if the data widget were not present. It supports the following attributes: |!Attribute |!Description | |<<.attr $tiddler>> |Optional title of a tiddler to be used as a payload tiddler (optional) | |<<.attr $filter>> |Optional filter string identifying tiddlers to be used as payload tiddlers (optional) | |<<.attr $compound-tiddler>> |Optional title of a tiddler containing payload tiddlers in `text/vnd.tiddlywiki-multiple` format (see below) | |//any attribute<br>not starting<br>with $// |Field values to be assigned to the payload tiddler(s) | The data widget is not rendered when used within the <<.wlink TestCaseWidget>> widget or the [[Innerwiki Plugin]] but for ease of testing, when used elsewhere it renders a JSON representation of the payload tiddlers. Without any of the attributes <<.attr $tiddler>>, <<.attr $filter>> or <<.attr $compound-tiddler>>, any attributes whose name does not start with $ are used as the field values for creating a single new tiddler. For example, here a tiddler with the title "Epsilon" and the text "Theta" is created: ``` <$data title="Epsilon" text="Theta"/> ``` If any of the attributes <<.attr $tiddler>>, <<.attr $filter>> or <<.attr $compound-tiddler>> are specified then they are used to generate base tiddlers that are then modified with the addition of fields derived from any attributes whose name does not start with $. This example, here we specify a copy of the "HelloThere" tiddler with the addition of the field "custom" set to "Alpha": ``` <$data $tiddler="HelloThere" custom="Alpha"/> ``` This example injects all image tiddlers with the addition of the field "custom" set to "Beta": ``` <$data $filter="[is[image]]" custom="Beta"/> ``` ! Compound Tiddlers Compound tiddlers provide a way to easily create multiple tiddlers from within a single tiddler. They are contained in tiddlers of type `text/vnd.tiddlywiki-multiple`. The text field consists of a series of tiddlers in the same format as `.tid` files, each separated by a line containing a single `+` character. For example: ``` title: First tags: one two This is the first tiddler + title: Second tags: three four This is the second tiddler + title: third tags: five six This is the third tiddler ```
* consider using DataWidget to pack tiddlers * https://tiddlywiki5-git-geospatial-plugin-jermolene.vercel.app/#DataWidget ** review the changes to this site (since -04-13) *** there were many on -04-19 * 'Compound Tiddlers' is a component of DataTiddlers in XmX sites ** NrH extension could be 1st 2 and last consonants. ** this may well collide with Trailing 'Class/Type' characters *** if so: .../... nameSpace conventions may be used ** consider any [[ᢳ]] issues that will arise - e.g. [[ᢳ/]]...
* Focus on: Smallest semantically meaningful information. ** Meta.Symbols that provide the same information to both Carbon-based and Silicon-based processors. *** consider: ... non-linear NoteBook ... more deeply. ---- * Phones and Tablettes should generally not display the sidebar. ** size the tiddlers so that the sidebar is a topmost display when open. ---- * It should be possible to Read cross-domain (assuming only Write is blocked) ** TransClusion could then allow the use of a Reader's vocabulary to locally nvoke a remote function *** arguments might even be pulled from yet another source **** the necessary grammar and syntax could be implemented using DataDictionary structures like CpH. ***** {{CpH##CpH}} ---- !!! UlcPosition ...
` <dl> <$list filter="[tag[vocab]]"> <dt>{{!!title}}</dt> <dd>{{!!summary}} <$link>…</$link></dd> </$list> </dl> ` ---- * note the missing Clone control
* Details is needed * evaluate PowerSearch: Install and Use # tagPill-based dnDrop works now that write permissions are in place
<<tree Do>>
* `chrome://settings/passwords` * review controlsH ** add the footer Tabs function? * [[_]] * reload will reset Username (UsernameH) ** check for these defaults *** get the actual variableName * reposition GeoSpatial ---- !!! consider adding: * https://br-tabs-organizer.tiddlyhost.com/ ---- !! Tasks * $:... for H. Is needed * XemArch considerations will emerge from needs per CnIt * hAsDc is needed * consider Id as the first WikiSyllable in NrH * FiltersH are captured from PsH # DoT(ime) * SignificanceVsPrecision ---- * https://nodered.org/ - API
* there may be a likeNamed page in my working file that needs to be reconciled. !!! EdD22 * there is extensive work undertaken to: ** review the initial wiki Hypothesis *** CamelCase (for easier links) *** Community editing (per WikiPedia) *** the impact of the most recent TwReleases that extend the original capabilities *** the existance of Xememex as an AWS Cloud solution ** Assess the impact of the legal recognition that CoreAddress data is in the PublicDomain *** contractual language support for the proposed technological innovations *** ... ** Assess the value of this work by reviewing the Fraud/Integrity aspects *** KfW 1 month of log time is 8% *** Kyle 2 weeks & 2 months 24% of Jurgen ( Subject Matter guidance for AdManCa, including DataQuality considerations and Association opportunities ) *** management over-head 7% spread across the Wednesday meetings X 3 (not HwW) *** another 8% of Geoff and 4% of Derrick *** 20% of BrainCandy for explanoatory material ** the Emergency work-around for the motherboard failure that did not meet contracted SLAs * 60% of Lisa's time to direct Prototype testing, Usability evaluations and ... * 10% of PRW's time - gsd dpl see the rest of last year's cast
* should a double headed arrow be used?? * ... --- !! plugin notes: There is a another way to create a plugin, without using ANY extra tools like ThirdFlow, Gatha, or Tinka… After developing your plugin tiddlers using a third-party editor like VSCode or the in-browser TiddlyWiki tiddler editor: # Open the TiddlyWiki that contains the desired tiddlers # Open https://tiddlywiki.com/empty in a separate browser window # Drag-and-drop the desired tiddlers into https://tiddlywiki.com/empty # The $:/Import tiddler will appear. DO NOT press the “Import” button! # Instead, EDIT the $:/Import tiddler # Change the tiddler’s title to your desired plugin name (e.g., $:/plugins/yourname/pluginname) # Scroll to the bottom of the tiddler to see the “extra” fields # Change the value of the plugin-type field from “import” to “plugin” # Delete the status field # Scroll back to the top of the tiddler and press the “done” (checkmark) button to save the tiddler changes. That’s it! You now have an INSTALLED plugin containing the “imported” tiddlers, which are all available as shadow tiddlers! Note that if there are any .js tiddlers in your plugin, you will need to save-and-reload for those tiddlers to take effect. To install your plugin in another TiddlyWiki, you can simply drag-and-drop the newly created plugin tiddler (e.g. $:/plugins/yourname/pluginname) into that other TiddlyWiki. enjoy, -e ---- * https://talk.tiddlywiki.org/t/how-do-tws-json-formats-look-like/5998
!! Try outlining FairPay here ; linking to DiigoH * alternatively, consider PDFs * how does convertIo compare to the Adobe link Lz provided?
... !! `CpH##HwW` is: {{CpH##HwW}} `CpH##.f.cr` `CpH##f.c.r` `CpH##c.r.` {{CpH##.f.cr}} * Changing the Username changes the logged in message. ** This likely also sets up the ability to autoConfigure a Usename's preferences. # the current Practice seemed to be best. * [[HwW/㊺]] msy be useful .OR. [[Hww㊺]] * DoT or [[Do/Id/T]] ---- {{CpH##f.c.r}} Design for the smallest device that is likely to be used. ---- {{CpH##fc.r.}}
* link to Mohammad's site ** https://kookma.github.io/TW-Gatha/#Install * https://tiddlywiki.com/#Introduction%20to%20filter%20notation ---- These will likely be useful as aI make more use of FiltersH: * [all[tiddlers]search:Type:literal[Project]] * this might become part of CurbSide ** [[TiddlyTools/PublishFilter]]
* Extend these * It should be possible to use Let OR Set to activate these values. # [all[tiddlers]!prefix[$]search:modified:words[20221109]sort[title]] # [all[tiddlers]search:title,text,tags:words[HwW]sort[title]]
https://www.neimagazine.com/news/newsnovatron-fusion-group-secures-investment-to-develop-fusion-10419422#.Y5H3px7NrOc.linkedin
...
This tiddler should be developed assuming that it will be dragged onto https://xememex.com/hans/#GeoSpatial:GeoSpatial (a version of the GeoSpatial edition). * https://tiddlywiki5-git-geospatial-plugin-jermolene.vercel.app/ ** https://tiddlywiki5-git-geospatial-plugin-jermolene.vercel.app/#Variables ** https://tiddlywiki5-git-geospatial-plugin-jermolene.vercel.app/#DataWidget * TwSpatial https://www.flickr.com/groups/14850276@N23/ ** https://www.flickr.com/groups/14850276@N23/ ** https://www.flickr.com/photos/hwo/49823325192/sizes/w/ ** https://www.flickr.com/photos/hwo/49823325192/sizes/m/ * link to the current GeoSpatial edition * GitHub existance? ---- * https://mepa1363.github.io/ ** getInTouch > "what do you want me to do?" *** to which hwo did not respond. ---- * try to import this from XememexH if only to test my ability to resolve deltas * ... ---- * APIs consider polygons to be Features ** 50 freatures for the US states *** intersection of Features will need prefix operators ---- * https://tiddlywiki5-git-geospatial-plugin-jermolene.vercel.app/ * https://xememex.com/hans/index.html# * CurbSide https://xememex.com/eric-test/index.html * https://xememex.com/hans-private/index.html#
|GeoTwH | CtrlsForGeoTwH | ...| * it should be possible to "update" with a whole TwFile's content. ** ... * again/still there is a need to use NrH for ExportImport ** creating a new <<now "-0DD" >> file may be a good start *** drag it back to TwH.working (better name?) **** use PsH to "fill" the needed (wanted) tiddlers ***** add tags and drag the resulting mass back to the GeoTwH file to work with ** remember that Saves are not possible here * reconsider the decision to Import the els advancedSearch * XememexH likely has some of the needed tools
|DevH | * https://wikilabs.github.io/editions/field-search/ * does each edit of a different tiddler generate a sync error?
There is an introductory Note in the Pin on these map(s) that can and should contain links to other environments at our disposal. * test the GeoSpatial interactions with this site ** ... * confirm the pin has attached Links ** ... ** try HwWvW searches *** twitter - https://twitter.com/HansWobbe * link to the JrHw primitives site ** check the version of eric's search. * C7GMRGGP+GX !!! gMaps https://www.google.com/maps/place/80%C2%B049'34.5%22N+66%C2%B027'45.2%22W/@80.8262476,-66.4794757,15z/data=!3m1!4b1!4m12!1m7!3m6!1s0x4fcf2bbd21314427:0xa411e99efbd18178!2sHans+Island!8m2!3d80.8268705!4d-66.4596503!16zL20vMDF3YnM0!3m3!8m2!3d80.826248!4d-66.462567 !!! gEarth https://earth.google.com/web/search/hans+island/@80.7700704,-66.7664356,-17.37060119a,386324.60456053d,35y,0h,0t,0r/data=CigiJgokCW5fBcmoHkZAER-vA0ooHkZAGZmwlu6SJ1PAIZ0GZ3DOJ1PA ---- * add HintsHw (central documentation) to pins on this location). ** consider relocating one of the incorporated companies to this location for the purposes of: *** Selling subscriptions to Virtual Tours *** establishing "prior art" to protect the IP *** delineating Governance jurisdictions with respect to: **** Taxation (commensurate with the value of the government services that are provided) **** ... * link to myMaps * review the Meta-Vers (and other Big Tech) precedents --- !!! Done: # linked to googleEarth
# UsernameH # accept hanswobbe Username for now
.
!! -07- ... * ... * enhance FiCoRe # ... ---- !!! 0613 ---- * SystemMemory worked well on my larger Samsung tablette - ** with Chrome *** a perpetual log may still add value, to mitigate Browser change risks. * confirm passwords prior to Saves ** ...50... is unlikely but might explain current requests * bring in the new exportImport tools ** take care not to over-write this tiddler. * Consider a siteSufficSigil; perhaps X? *** set a prefix sigil now. **** the MonthDate should suffice as a name for the Clone. ***** if this tid is cloned in case an over-write may come in, it may be better to have... ***** is there a limit on bullets? ****** the problem was conflicting markup code ****** a site prefixSigil ***** the Import alert regarding over-writes via the temporary Import tid. ******* this can be used to craft a merged copy * ... WikiPedia re: schedules, binaryLogic, quantumLogic * How are ( CpH [[hAsDc]] ) best employed? ** this shows CpH can be used for my fcr headings *** fcr may be better deployed within various ConText(s) * LinkedInH https://www.linkedin.com/feed/ * test PDF use. * The bitly bookmarklette needs review. # since recent content loss is a mystery ## DnDrop [ D(rag) (a)n(d) Drop ] works ## take care to 'port MicroContent into other locations ### Use PsH
!!! prior Usaernames: * HwwPubX * [[ℋ㋁]]
! 0. Cover(s) ... * I need to start populating this environment with MicroContent * Consider the implications of also doing that with FeatherWiki ( FeatherH ) ---- ! 9.0. ! 9.7 * ... * Try using the ReportsH structure. It should be easy to find. * Add toggleSwitchs to (dis/en)able the viewTemplatescalling !!! Technical considerations: * It is possible to nest Folders within Folders, which is likely inherent in the Bags and Recipes capabilities. * The design of such a structure needs more consideration. ---- * A TransClusion should be used to populate this page, if only to see what is sent to RemarkableH ** [[hAsDc]] can be used to select MicroContent that is included in the E-book that results from using RemarkableH *** for example: {{㊼♄ || hAsDc}} ---- Does HwwP make sense as a stem of <<tree Hww/>> ( [[Hww/]] ) for: * [[Hww/Private]] * [[Hww/Public]] ---- this might lead to [[HwW/P]]
!! TopicsH !!! FusionT
The aboveStory tag (<<tag $:/tags/AboveStory>>} is working as expected. <$details summary="IdHw..." > * it may aid to track TpT versions of Usernames to ensure that prior versions of tiddlers are updated * [[🔍]] ; note the overArching TiddlyTools menuBar * the namespace is evolving ** import the new DdTid # [[ᢳ/]] is emerging as a personal nameSpace ; confirmed the use of edit-text to minimize .open needs </$details>
* this should be integrated into the emerging NameSpace * Update the default Name for NewTiddler(s) * craft tags that can be DnDrop handles to update files * PsH should be udseful * ArcH could be a HansIsland contender ** a globalWarming partnership might appeal for NotForProfit funding as an Ngo. *** many already exist, so it should be easy to re-purpose one. ---- # confirmed this trivial change has been Save(d)
.
|JrH | ... | ...| * allows the use of the ...H SufFix, combined with PsH0, for ExportImport ** obviously .!!_ will need to be used as a filter *** this supports PsH0 - PsH999
* https://mepa1363.github.io/ ** self-styled GeoSpatial.Geek * AiMls: a source of newListings is now active is now working ** I'm using the aproach of establishing TechnicalFeasibility first *** (just the ) Df Testing of this is being done manually **** this is part of the TreeFortTech Mortgage Fraud Insurance demo * Mortgage Fraud Insurance via TreeFortTech * TravelTime ** Voting Place Management ** proper distance to nearest Poll ** re-distribution (of Voters) *** ED boundaries **** SSM !!! techs * TurfJs is the "bedrock" we are building on * intersection isoChromes * PostFix operators, next ** next: Prefix operators * filter Operators ** niladic, mon... Dy... Tri... ** polymorphic ** Frankenstein operator * nameSpaces (at the wiki level_ can both be used by DEVs and PROCs ** icon's in tids - change the RTID ** table of tids mapped to ... avoids changes ... but ... !! GeoSpatial * APIs consider polygons to be Features ** 50 freatures for the US states *** intersection of Features will need prefix operators !! Flickr: * flickR is a pr-eminent site & is now becomming a Foundation ** their mapping has always been poor !! Design Insights & Philosophies * Agree that GeoSpatial will be low-hanging-fruit ** PlusCodes are openSource *** Addresses are public Domain **** good Ethics should be encouraged * example(s): ** https://www.flickr.com/photos/hwo/50107305627/in/dateposted-friend/ !! Questions * can there be more than one Index.HTML file in a XememexH site? * ... ---- !! XememexH & TiddlyHost * https://tiddlyhost.com/hub/user/HansAtTiddlyhost ---- * https://otter.ai/u/LRs4wscH2UNysyXCvvZKzhHSQoE?tab=summary&utm_campaign=meeting_summary_outline_only&utm_campaign=meeting_summary_outline_only&utm_is_new_user=false%3Ftab%3Dsummary%3Futm_source%3Dmeeting_summary_outline_only&utm_is_new_user=false
* LaLo or LatLon may be preferable ** LaLn( YourDataNet YourDataOrg ) !! LaLn.ca * 4146 https://www.google.com/maps/place/4146+Bath+Rd,+Kingston,+ON+K7M+4Y7,+Canada/@44.2367103,-76.6358996,6127m/data=!3m2!1e3!4b1!4m9!1m2!11m1!3e4!3m5!1s0x4cd2ad658569185d:0xc316e0de246944eb!8m2!3d44.2367115!4d-76.6189909!15sCgEqkgERY29tcG91bmRfYnVpbGRpbmfgAQA?hl=en-US * ... * LatLon search https://www.google.com/search?q=latlon.ca&rlz=1C1CHBF_enCA848CA879&oq=latlon.ca&aqs=chrome..69i58j69i57j0i8i15i30j69i60.10739j0j7&sourceid=chrome&ie=UTF-8 ---- * https://www.latlong.net/ * https://www.openstreetmap.org/copyright
!!! .La(titude) Lo(ngitude) Al(titude) Ca(nada) emerges --- * consider this as a possible component of metamorphises into an operating company ** steps( 1 ... ?? ) include the loan repayment and dividendDemand * T(ime) p(rior): [[LatLon.ca]] * take care to correctly recognize each of the two XememexH sites as approprite MetaContent/MicroContent repositories for particular Audiences. ---- Renamed from LaLoCa
* [[127 Pim St, Sault Ste. Marie, ON P6A3G7|https://www.google.com/maps/place/127+Pim+St,+Sault+Ste.+Marie,+ON+P6A+3G7/@46.5073284,-84.3254273,17z/data=!3m1!4b1!4m6!3m5!1s0x4d36384893e80f7b:0x8c0b135347f1364f!8m2!3d46.5073247!4d-84.3228524!16s%2Fg%2F11c5jvnh8x?authuser=0&entry=ttu]] ** in which the Postal Code is displayed as "P6A3G7" is displayed.
* Interface to YourData.net & YourData.org
MetaContent may be MicroContent that can exist in multiple Files. Ideally: * there will only be one (version, that is intelligent enough to adapt to its containing File * ...
MetaTid tiddlers are those that exist in multiple ConText(s) This is a preferable term to Pan(Wiki)Tid * PeidPiper ( PeterPan image ) ; Mullhausen ; TalesH ; ... | [[ᢳ/]] |
* [[e.]]
{{Tn/Tda/NotMapped}} [[Tn/Tda/NotMapped]]
* these need to be updated to show the EdD/Ll22 (LessonsLearned)2022 * try using TimePeriodsH
!! PobTob = P(lace) o(f) B(irth) + T(ime) o(f) B(irth) * current wannabeCompetition and slowly evolving Regulation clouds the evolution of these technologies ** ...
!! PorTor = P(lace) o(f) R(esidence) + T(ime) o(f) R(esidence) * Vote Eligibility * ...
{{TiddlyTools/Search/PowerSearch}}
[[♄]] [[ℋ㋁]] [[⇔]] HwW [[LatLon.ca]] [[日]] {{TiddlyTools/Search/PowerSearch}} [[㊿\]]
* it may be effective to use the Username (for signing edits) as a way of identifying the current MicroContent repository in which edits are taking place and the dateOfEdit. ** this is a bit like using a Timestamp to distinguish Authors, Edit(sequence - Time), and (repo) Sites *** traditional Subject and Index entries may also be incorporated. **** Index might be a trailing Sigil (mapped to a DataDictionary) given recent improvements in FilterLogic
!! QrSt QrstFail * [[⇹]] [[⌖⇹⑴⌘⏳]] [[⌖/⇹⑴⌘⏳]] <<tag ⌖>><<tag ⇹>> [[⑴]] <<tag ⌘>><<tag ⏳>> * [[⋮]] - the are rightUpward and leftDownward ellipses that could be used for Trends * [[1]] - fullWidth ( & halfWidth - SingleByteCharacteSet.WikiPedia ** [[A]] * [[༠]] ... [[rootTidPlus]] RootTidN !! [[⓾]] PqR42 PqrsT ( Q r S t )( ⇹ ⑴ ⌘ ⏳ ) * These likely need to be re-ordered to help [[⌱]] dimensionOrigin ** defer this until the evolution of "root..." is more advanced since the possible scope of values is far greater than needed * ( {{!!.open}} )`{{!!.open}}` ** there are at least 8 easily distinct 1(s) * ⑴ [[⑴]] <<tag ⑴>> is the first element of the first series of 1-20 digits that are mostSignificant. * 𝟏 [[𝟏]] <<tag 𝟏>> * 𝟙 [[𝟙]] <<tag 𝟙>> * 𝟭 [[𝟭]] <<tag 𝟭>> * 𝟷 [[𝟷]] <<tag 𝟷>> * ⓵ [[⓵]] <<tag ⓵>> * ① [[①]] <<tag ① >> * ❶ [[❶]] <<tag ❶>> * 🄂 [[🄂]] <<tag 🄂>> * ① [[①]] <<tag ①>> ... ㊿ [[㊿\]] <<tag ㊿\>> * ⒈ [[⒈]] <<tag ⒈>> is useful as a oneChar numberedList indicator. * ⓾ [[⓾]] <<tag ⓾>> is the leastSignificant of the 1's. **verify this since the series seems to appear earlier in this list * https://www.notion.so/PqR42-0ba3c662a4bc47a58563841f6e791b43
!!! SideEditor * this tiddler does not contain the .code ** is the pluguin installed properly? ---- * I recall seeing a showFieldsOnly control
[[㏦]] <<tag ㏦>>
* Stylus choice really matters.
https://talk.tiddlywiki.org/t/is-there-a-way-to-edit-my-tw-files-from-an-iframe-in-another-of-my-tw-files/328/4?u=hans_wobbe * https://feather-tw-h.tiddlyhost.com/ * https://hw5-2-0.tiddlyhost.com/
* [[HwW/At/Els/Tt]] - this will need to be a DataDict to allow short indirections fileNames * [[TiddlyTools/Editable]] * [[TiddlyTools/Macros/more]] * New TiddlyTools geoCode location function * https://tiddlytools.com/ * $:/config/TiddlyTools/Places * https://tiddlytools.com/#TiddlyTools/Palettes/Manager ----- HwW needs to be added to my Plugin: [[$:/plugins/ᢳℋ/卯㋃]]
<$button message="tm-home" class="tc-btn-invisible" actions=<<reset_config>> tooltip="reset to startup configuration and open default tiddlers"> {{$:/core/images/home-button}} </$button>
\define edit-list( id:"", tiddler:"", field:"text", index:"", timestamp:"yes", default:"", placeholder:"", tooltip:"", type:"", width:"15em", filter:"", find:"", goto:"no", confirm:"no", focus:"no", focusPopup:"", cancelPopups:"no", listwidth:"100%", listheight:"10", stretch:"no", show:"no", fontsize:"100%", colors:"no", multiple:"no", view:"<<item>>", mobile:"auto" ) \whitespace trim \define filter() $filter$ <!-----------------> <!-- ENVIRONMENT --> <!-----------------> <$vars tid={{{ [[$tiddler$]!match[]else<currentTiddler>] }}} re="[^a-zA-Z0-9\-\_]"> <$vars id={{{ [[$index$]!match[]else[$field$]] +[addprefix[/]addprefix<tid>addsuffix[_$id$]] }}}> <$vars id={{{ [<id>search-replace[$:/],[]search-replace:g:regexp<re>,[_]addsuffix<qualify>search-replace:g:[--],[-]search-replace:g:[__],[_]] }}}> <$vars modal={{{ [[$:/state/modal/edit-list/]addsuffix<id>] }}}> <$vars popup={{{ [[$:/state/popup/edit-list/]addsuffix<id>] }}}> <$vars popup={{{ [<filter>!match[]] [[$type$]match[calendar]] +[limit[1]then[$show$]match[no]then<popup>] }}}> <$vars minmax={{{ [[$:/state/popup/edit-list/minmax/]addsuffix<id>] }}}> <!---------------> <!-- VARIABLES --> <!---------------> <$vars field={{{ [[$index$]match[]then[$field$]else[]] }}} index="""$index$""" timestamp="""$timestamp$""" goto_button={{{ [[$goto$]match[yes]] }}} default="""$default$""" placeholder="""$placeholder$""" tooltip="""$tooltip$""" width={{{ [[$width$]match[auto]then[15em]else[$width$]] }}} filter=<<filter>> find="""$find$""" confirm="""$confirm$""" listwidth={{{ [[$listwidth$]match[fit]then[auto]else[$listwidth$]] }}} listheight="""$listheight$""" show="""$show$""" fontsize="""$fontsize$""" stretch={{{ [[$stretch$]match[yes]then[auto]else[$stretch$]] }}} focus="""$focus$""" focusPopup={{{ [[$focusPopup$]!match[]then<popup>else[$focusPopup$]] }}} multiple={{{ [[$multiple$]match[yes]] }}} colors="""$colors$""" calendar={{{ [[$type$]match[calendar]then[TiddlyTools/Time/Calendar]is[tiddler]then[yes]] }}} type={{{ [[$type$]match[calendar]then[TiddlyTools/Time/Calendar]is[missing]then[date]else[$type$]] }}} show={{{ [[$type$]match[calendar]then[TiddlyTools/Time/Calendar]is[missing]then[no]else[$show$]] }}} > <!-------------------> <!-- ABBREVIATIONS --> <!-------------------> <$vars openpopup=""" <$action-deletetiddler $filter="[prefix[$:/state/popup/edit-list/]] -[prefix[$:/state/popup/edit-list/currentitem/]] -[<minmax>]"/> <$action-setfield $tiddler=<<popup>> text="show"/>""" closepopup=""" <$action-deletetiddler $filter="[<popup>]"/>""" gotoinput=""" <$action-sendmessage $message="tm-focus-selector" $param={{{ [[.editlist_input_]addsuffix<id>] }}}/>""" gotoselect=""" <$action-sendmessage $message="tm-focus-selector" $param={{{ [[.editlist_popup_select_]addsuffix<id>] }}}/>""" startmodal=""" <$list filter="[<confirm>match[yes]then<modal>!is[tiddler]]"><$action-setfield $tiddler=<<tid>> title=<<modal>>/>""" maximize=""" <$action-setfield $tiddler=<<minmax>> hmax="yes" vmax="yes"/>""" minimize=""" <$action-deletetiddler $filter="[<minmax>]"/>""" input=""" <$eventcatcher $focusin="<$list filter='[<focusPopup>!match[]]'><<openpopup>></$list><<startmodal>>"> <$eventcatcher $focusout="<$list filter='[<modal>!is[tiddler]]'><<closepopup>></$list>"> <$edit-text tiddler={{{ [<modal>is[tiddler]else<tid>] }}} class={{{ [[tc-popup-handle editlist_input editlist_input_]addsuffix<id>] }}} tag="input" type=<<type>> field=<<field>> index=<<index>> default=<<default>> placeholder=<<placeholder>> cancelPopups="$cancelPopups$" focus={{{ [<modal>is[tiddler]then[yes]else<focus>] }}} focusPopup={{{ [[$focusPopup$]!match[yes]then[$focusPopup$]] }}}/>""" select=""" <$eventcatcher $focusin="<<openpopup>><<startmodal>>"> <$eventcatcher $focusout="<$list filter='[<modal>!is[tiddler]]'><<closepopup>></$list>"> <$eventcatcher $click="<$list filter='[<modal>!is[tiddler]then<multiple>!match[yes]]'><<closepopup>><<goto>></$list>"> <<editlist_select_showheading>> <$select tiddler={{{ [<modal>is[tiddler]else<tid>] }}} field=<<field>> index=<<index>> multiple=<<multiple>> class={{{ [[editlist_select editlist_popup_select_]addsuffix<id>] }}} size={{{ [<minmax>get[vmax]match[yes]then[2]] ~[<listheight>regexp[^\d+$]!match[1]else[2]] }}}> <<editlist_select_showlist>>""" option=""" <$vars fg={{{ [enlist<dark>match<item>then[white;]else[black;]] }}}> <$vars colors={{{ [[$colors$]match[yes]then[background-color:]addsuffix<item>addsuffix[;color:]addsuffix<fg>] }}}> <option style=<<colors>> value=<<item>> title=<<item>>> $view$ </option>""" dark=""" Black Blue DarkBlue DarkGreen DarkOliveGreen DarkSlateBlue DarkSlateGray DimGray ForestGreen Gray Indigo Maroon MediumBlue MidnightBlue Navy Purple RebeccaPurple""" save=""" <$list filter="[<modal>is[tiddler]]"> <$vars newval={{{ [<modal>getindex<index>] ~[<modal>get<field>] }}}> <$action-setfield $timestamp=<<timestamp>> $tiddler=<<tid>> $field=<<field>> $index=<<index>> $value=<<newval>>/> <$list filter="[<newval>match[]]"><<clear>></$list>""" clear=""" <$action-setfield $timestamp=<<timestamp>> $tiddler=<<tid>> $field=<<field>> $index=<<index>> $value=""/> <$action-deletetiddler $tiddler=<<currentitem>>/> <<closepopup>><<gotoinput>>""" done=""" <$action-deletetiddler $filter="[<modal>] [<popup>]"/>""" goto=""" <$list filter="[[$goto$]match[yes]]"> <$vars tid={{{ [<modal>is[tiddler]else<tid>] }}}> <$list filter="[<multiple>!match[yes]]"><$action-navigate $to={{{ [<tid>getindex<index>] ~[<tid>get<field>] }}}/></$list> <$list filter="[<multiple>match[yes]]" ><$list filter="[<tid>getindex<index>] ~[<tid>get<field>] +[enlist-input[]]"><$action-navigate/></$list></$list>""" reset=""" <$list filter="[<modifier>match[shift]]"><$action-setfield $timestamp=<<timestamp>> $tiddler=<<tid>> $field=<<field>> $index=<<index>>/></$list> <$list filter="[<index>!match[]then<tid>get[text]match[{}]]"> <$action-setfield $timestamp=<<timestamp>> $tiddler=<<tid>> $field="text"/> <$action-setfield $timestamp=<<timestamp>> $tiddler=<<tid>> $field="type"/>""" > <!--------------------> <!-- MOBILE LISTBOX --> <!--------------------> <$vars currentitem= {{{ [[$:/state/popup/edit-list/currentitem/]addsuffix<id>] }}} showitem=""" <$list filter='[<sel>!match[]]' emptyMessage="<input type=checkbox tabindex=-1/>"><input type=checkbox checked=yes tabindex=-1/></$list> <$text text=$view$/>""" toggleitem=""" <$list filter='[<multiple>!match[yes]]'><$action-setfield $tiddler=<<curr>> $field=<<field>> $index=<<index>> $value={{{ [<sel>match[]then<item>] }}}/></$list> <$list filter='[<multiple>match[yes]]' ><$action-listops $tiddler=<<curr>> $field=<<field>> $index=<<index>> $subfilter='+[toggle<item>]' /></$list>""" trackitem=""" <$action-setfield $tiddler=<<currentitem>> offset=<<i>> item=<<item>>/>""" gotoitem=""" <$vars i={{{ [<currentitem>get[offset]else<i>] }}}> <$vars i={{{ [<count>!match[]then<i>min<count>max[1]else<i>] }}}> <$action-sendmessage $message="tm-focus-selector" $param={{{ [[.editlist_popup_select_]addsuffix<id>addsuffix[_]addsuffix<i>] }}}/> <$action-deletetiddler $tiddler=<<currentitem>>/>""" select_mobile=""" <$eventcatcher $focusin="<<openpopup>><<startmodal>>"> <$eventcatcher $focusout="<$list filter='[<modal>!is[tiddler]]'><<closepopup>></$list>"> <$eventcatcher $click="<$list filter='[<modal>!is[tiddler]then<multiple>!match[yes]]'><<closepopup>><<goto>></$list>"> <<editlist_select_showheading>> <$vars listwidth={{{ [<listwidth>match[100%]then<width>else<listwidth>] }}}> <$wikify name="fg" text=<<colour select-tag-foreground>>><$vars fg={{{ [<fg>!match[]then<fg>else[black;]] }}}> <$wikify name="bg" text=<<colour select-tag-background>>><$vars bg={{{ [<bg>!match[]then<bg>else[white;]] }}}> <$keyboard key="down" actions="<$vars i=1><<gotoitem>>"> <button class={{{ [[editlist_select editlist_popup_select_]addsuffix<id>] }}} style={{{ [[border:1px solid gray;padding:0;white-space:nowrap;vertical-align:bottom;color:]addsuffix<fg>addsuffix[;background-color:]addsuffix<bg>] }}}> <$vars curr={{{ [<modal>is[tiddler]else<tid>] }}}><$vars val={{{ [<curr>getindex<index>] ~[<curr>get<field>] }}}> <<editlist_select_showlist>>""" option_mobile=""" <$keyboard key="home" actions="<$vars i=1 ><<gotoitem>>"> <$keyboard key="up" actions="<$vars i={{{ [<i>subtract[1]] }}}><<gotoitem>>"> <$keyboard key="page_up" actions="<$vars i={{{ [<i>subtract<listheight>] }}}><<gotoitem>>"> <$keyboard key="page_down" actions="<$vars i={{{ [<i>add<listheight>] }}}><<gotoitem>>"> <$keyboard key="down" actions="<$vars i={{{ [<i>add[1]] }}}><<gotoitem>>"> <$keyboard key="end" actions="<$vars i=<<count>> ><<gotoitem>>"> <$vars fg={{{ [enlist<dark>match<item>then[white;]else[black;]] }}}> <$vars colors={{{ [[$colors$]match[yes]then[background-color:]addsuffix<item>addsuffix[;color:]addsuffix<fg>] }}}> <$vars sel={{{ [<multiple>!match[yes]then<val>match<item>] [<multiple>match[yes]then<val>enlist-input[]match<item>] }}}> <$button class={{{ [[editlist_select editlist_popup_select_]addsuffix<id>addsuffix[_]addsuffix<i>] }}} style=<<colors>> tooltip=<<item>> actions="<<toggleitem>><<trackitem>><<gotoselect>>"> <<showitem>> </$button><br>""" > <!-- IF MOBILE, USE ALTERNATIVE select() AND option() --> <$vars mobile_browsers="android ios windowsphone"> <$vars mobile={{{ [[$mobile$]regexp[yes|no]] ~[enlist<mobile_browsers>addprefix[$:/info/browser/is/]get[text]match[yes]] ~[[no]] }}}> <$vars select={{{ [<mobile>!match[yes]then<select>else<select_mobile>] }}}> <$vars option={{{ [<mobile>!match[yes]then<option>else<option_mobile>] }}}> <!-------------------------> <!-- STYLES AND CONTROLS --> <!-------------------------> <<editlist_styles>> <div class={{{ [[editlist_wrapper editlist_wrapper_]addsuffix<id>] }}} style={{{ [<show>match[no]then[margin-bottom:1em;]] [<filter>match[]then<calendar>!match[yes]then[margin-bottom:1em;]] }}} title=<<tooltip>>> <<editlist_input>> <$list filter="[<calendar>match[]] "> <<editlist_select>> </$list> <$list filter="[<calendar>!match[]]"> <<editlist_calendar>> </$list> </div> \end \define editlist_styles() <style> .editlist_wrapper_$(id)$ { position:relative; display:inline-block; width:$(width)$; margin:0; } .editlist_input_$(id)$ { position:absolute; width:100% !important; height:1.5em; } .editlist_input_buttons_$(id)$ { position:absolute; width:max-content; right:0; } .editlist_modal_buttons_$(id)$ { position:absolute; width:max-content; left:$(width)$; } .editlist_clear { height:1.5em; width:1.5em; padding:0 0.25em 0 0.25em; vertical-align:text-bottom; } .editlist_popup { height:1.5em; width:1.5em; padding:0 0.25em 0 0.25em; vertical-align:text-bottom; } .editlist_save { height:1.5em; width:1.5em; padding:0 0.25em 0 0.25em; vertical-align:text-bottom; } .editlist_cancel { height:1.5em; width:1.5em; padding:0 0.25em 0 0.30em; vertical-align:text-bottom; } .editlist_popup_wrapper_$(id)$ { position:absolute; width:fit-content; min-width:$(listwidth)$; z-index:1; top:1.6em; } .editlist_popup_heading_$(id)$ { position:relative; font-size:80%; line-height:1.2em; text-align:center; background:#eee; border:1px solid gray; border-bottom:0; } .editlist_popup_minmax_$(id)$ { position:absolute; top:-1px; right:calc(-1.5em - 3px); padding-left:3px; transition:2s; } .editlist_popup_minmax_$(id)$ button { display:block; font-size:100%; line-height:1em; padding:0 0.125em; margin-bottom:1px; } .editlist_popup_select_$(id)$ { overflow-y:auto; font-size:$(fontsize)$; line-height:1em; } .editlist_popup_select_$(id)$ option { overflow:hidden;text-overflow:ellipsis; } .editlist_popup_select_$(id)$ button { width:100%; text-align:left; line-height:1.4em; padding:0 2px; border:0; background:none; overflow:hidden; text-overflow:ellipsis; } .editlist_popup_select_$(id)$ input { width:auto; } .editlist_calendar_wrapper { position:absolute; z-index:1; top:1.6em; } .editlist_calendar { width:18.75em; padding:0.5em; } .editlist_calendar_format { width:17.5em; } .editlist_calendar.tc-block-dropdown a { padding-top:0; padding-bottom:0; } .editlist_wrapper_$(id)$ .fadeIn { opacity:0; } .editlist_wrapper_$(id)$:hover .fadeIn { opacity:1; } .editlist_wrapper_$(id)$:focus-within .fadeIn { opacity:1; } /* FALLBACK IF "FOCUS-WITHIN" NOT AVAILABLE... see https://www.caniuse.com/css-focus-within */ .editlist_input_$(id)$:focus + .editlist_input_buttons_$(id)$ .fadeIn { opacity:1; } .editlist_clear:focus { opacity:1; } .editlist_popup:focus { opacity:1; } .editlist_clear:focus + editlist_popup { opacity:1; } </style> <$list filter="[<modal>is[tiddler]] [<popup>is[tiddler]] +[limit[1]]"> <style> .editlist_wrapper_$(id)$ .fadeIn { opacity:1; } </style> </$list> <$list filter="[<show>!match[no]]"> <style> .editlist_popup_wrapper_$(id)$ { position:static; margin-top:1.6em; } </style> </$list> <$list filter="[<colors>match[yes]]"> <$let curr={{{ [<modal>is[tiddler]else<tid>] }}} bg={{{ [<curr>getindex<index>] ~[<curr>get<field>] }}} fg={{{ [enlist<dark>match<bg>then[white]else[black]] }}}> <style> .editlist_input_$(id)$ { background:<$text text=<<bg>>/> !important; color:<$text text=<<fg>>/> !important; } </style> </$let> </$list> <$list filter="[<stretch>!match[no]]"> <style> .editlist_wrapper_$(id)$:hover, .editlist_wrapper_$(id)$:focus-within { min-width:$(width)$; width:$(stretch)$ !important; } </style> <style> .editlist_popup_select_$(id)$:hover, .editlist_popup_select_$(id)$:focus { min-width:$(width)$; width:$(stretch)$ !important; } </style> </$list> <$vars curr={{{ [<modal>is[tiddler]else<tid>] }}}> <$vars val={{{ [<curr>getindex<index>] ~[<curr>get<field>] }}}> <$vars bwidth={{{ [<val>!match[]then[1.5]] [<popup>!match[]then[1.50]] +[sum[]] }}}> <$list filter="[<width>!match[100%]]"><<editlist_styles_setinputsize>></$list> \end \define editlist_styles_setinputsize() <!-- MAKE ROOM FOR CLEAR AND/OR POPUP BUTTONS --> <style> .editlist_wrapper_$(id)$:hover .editlist_input_$(id)$ { width:calc(100% - $(bwidth)$em) !important; } .editlist_wrapper_$(id)$:focus-within .editlist_input_$(id)$ { width:calc(100% - $(bwidth)$em) !important; } </style> <$list filter="[<modal>is[tiddler]] [<popup>is[tiddler]] +[limit[1]]"> <style> .editlist_input_$(id)$ { width:calc(100% - $(bwidth)$em) !important; } </style> </$list> \end \define editlist_styles_setselectsize() <!-- WIDTH: MATCH INPUT SIZE, LISTWIDTH PARAM, OR HMAX (AUTO) --> <style>.editlist_popup_select_$(id)$ { min-width:$(width)$; width:$(listwidth)$; }</style> <$list filter="[<minmax>get[hmax]]" ><style>.editlist_popup_select_$(id)$ { min-width:$(listwidth)$; width:auto; }</style></$list> <$list filter="[<mobile>match[yes]]"><style>.editlist_popup_select_$(id)$ { min-width:100%; }</style></$list> <!-- HEIGHT: USE SIZE, LISTHEIGHT (CSS UNITS), OR VMAX (COUNT) --> <style>.editlist_popup_select_$(id)$ { height:calc($(size)$ * 1.4em + 0.25em); }</style> <$list filter="[<listheight>!regexp[^\d+$]]"><style>.editlist_popup_select_$(id)$ { height:$(listheight)$; }</style></$list> <$list filter="[<listheight>match[fit]] [<minmax>get[vmax]] +[limit[1]]"> <style>.editlist_popup_select_$(id)$ { height:calc($(count)$ * 1.4em + 0.25em); }</style> <$list filter="[<mobile>match[yes]]"><style>.editlist_popup_select_$(id)$ { height:max-content; }</style></$list> </$list> \end \define editlist_input() \whitespace trim <$keyboard key="enter" actions="<<save>><<goto>><<done>>"> <$keyboard key="escape" actions="<<done>>"> <$keyboard key="down" actions="<<openpopup>><<gotoselect>>"> <$keyboard key="up" actions="<<closepopup>><<gotoinput>>"> <<input>> <span class="editlist_input_buttons_$(id)$"><<editlist_clear>><<editlist_popup>></span> <span class="editlist_modal_buttons_$(id)$"><<editlist_save>><<editlist_cancel>></span> \end \define editlist_clear() \whitespace trim <!-- IF INDEX OR FIELD VALUE IS NOT BLANK, SHOW CLEAR BUTTON --> <$vars tid={{{ [<modal>is[tiddler]else<tid>] }}}> <$list filter="[<tid>getindex<index>] ~[<tid>get<field>] +[!match[]]" variable="show_clear"> <$eventcatcher $focusin="<$list filter='[<focusPopup>!match[]]'><<openpopup>></$list><<startmodal>>"> <$button class="tc-button editlist_clear fadeIn" tooltip="clear input" actions=<<reset>>> <div style="transform:translateY(-0.1em);">''x''</div> <<clear>> </$button> \end \define editlist_popup() \whitespace trim <!-- IF LIST OR CALENDAR NOT SHOWN, SHOW POPUP BUTTON --> <$list filter="[<popup>!match[]]" variable="show_popup"> <$vars tip={{{ [<popup>is[missing]then[show ]else[hide ]] [<calendar>match[]then[list]else[calendar]] +[join[]] }}}> <$eventcatcher $focusin=<<startmodal>>> <$button class="tc-button editlist_popup fadeIn" tooltip=<<tip>> actions=<<gotoinput>>> <$list filter="[<popup>is[missing]]" emptyMessage=<<closepopup>>><<openpopup>></$list> <$list filter="[<calendar>match[]]"> <!-- DOWN OR UP TRIANGLE --> <div style="font-size:80%;transform:translateY(-0.04em);"> <$list filter="[<popup>is[missing]]" emptyMessage="▲">▼</$list> </div> </$list> <$list filter="[<calendar>!match[]]"> <!-- CALENDAR EMOJI --> <span style="font-size:90%;margin-left:-0.2em;vertical-align:text-top;">📅</span> </$list> </$button> \end \define editlist_save() \whitespace trim <!-- IF MODAL IS ACTIVE, SHOW SAVE BUTTON --> <$list filter="[<modal>is[tiddler]]"> <$button class="tc-button editlist_save" tooltip="save" actions="<<reset>><<goto>>"> <div style="transform:translateY(-0.05em);">{{$:/core/images/done-button}}</div> <<save>><<done>> </$button> \end \define editlist_cancel() \whitespace trim <!-- IF MODAL IS ACTIVE, SHOW CANCEL BUTTON --> <$list filter="[<modal>is[tiddler]]"> <$button class="tc-button editlist_cancel" tooltip="cancel"> <div style="transform:translateY(-0.05em);">{{$:/core/images/cancel-button}}</div> <<done>> </$button> \end \define editlist_select() \whitespace trim <!-- IF NOT FILTERING, DON'T SHOW LIST --> <$list filter="[<filter>!match[]]" variable="show_select"> <!-- IF FIXED-HEIGHT, OR POPUP IS OPEN, SHOW LIST --> <$list filter="[<show>!match[no]] [<popup>is[tiddler]] +[limit[1]]" variable="show_select"> <$keyboard key="enter" actions="<<save>><<goto>><<done>>"> <$keyboard key="escape" actions="<<done>>"> <$keyboard key="right" actions="<<maximize>>"> <$keyboard key="left" actions="<<minimize>>"> <$keyboard key="backspace" actions="<<closepopup>><<gotoinput>>"> <div class="editlist_popup_wrapper_$(id)$"><<select>></div> \end \define editlist_select_showheading() \whitespace trim $(editlist_select_search)$ <div class="editlist_popup_heading_$(id)$"> <$text text={{{ [<total>addsuffix[ items]] }}}/> <$list filter="[<val>!match[]then<find>!match[]]"> <$list filter="[<found>match[0]] [<found>!match<selected>] +[limit[1]]"> , <<found>> matches </$list> </$list> <$text text={{{ [<selected>!match[0]then[, ]addsuffix<selected>addsuffix[ selected]] }}}/> <<editlist_select_minmax_goto>> </div> \end \define editlist_select_showlist() $(editlist_select_search)$ <<editlist_styles_setselectsize>> <$list filter="[enlist<display>]" variable="item" counter="i"> <<option>> </$list> \end \define editlist_select_search() <$set name="curr" filter="[<modal>is[tiddler]else<tid>]"> <$set name="exclude" filter="[<field>match[tags]then<curr>get[tags]enlist-input[]] :filter[tagging[]count[]match[1]]"> <$set name="all" filter="[subfilter<filter>] -[enlist<exclude>] -[prefix[$:/state/popup/edit-list]]"> <$set name="total" filter="[enlist<all>count[]]"> <$set name="case" filter="[enlist[OR AND EXACT REGEXP]match<find>]" value="casesensitive" emptyValue=""> <$set name="find" filter="[<find>lowercase[]]"> <$set name="find" filter="[enlist[or and exact regexp]match<find>]" value=<<find>> emptyValue=""> <$set name="match" filter="[<find>match[exact]]" value="literal" emptyValue=""> <$set name="regexp" filter="[<find>match[regexp]]" value="regexp" emptyValue=""> <$set name="flags" filter="[<match>!match[]] [<regexp>!match[]] [<case>!match[]] +[join[,]]"> <$set name="val" filter="[<curr>getindex<index>] ~[<curr>get<field>]" select=0> <$wikify name="or" text=<<editlist_select_or>>> <$wikify name="and" text=<<editlist_select_and>>> <$vars selected={{{ [<multiple>match[yes]then<match>!match[exact]then<val>enlist-input[]] ~[<val>] :intersection[enlist<all>] +[count[]] }}}> <$vars results={{{ [<find>match[or]then<or>] ~[<find>match[and]then<and>] ~[<find>match[exact]then<and>] ~[<find>match[regexp]then<and>] ~[<all>] +[trim[]] }}}> <$vars found={{{ [enlist<results>count[]] }}}> <$vars display={{{ [<found>match[0]then<all>] ~[<found>match<selected>then<all>] ~[<results>] }}}> <$vars count={{{ [enlist<display>count[]] }}}> <$vars size={{{ [<listheight>match[fit]then<total>] ~[<count>min<listheight>] +[max[1]] }}}> \end \define editlist_select_or() <$list filter="[enlist<val>sort[]]" variable="val"> <<editlist_select_and>> </$list> \define editlist_select_and() <$list filter="[enlist<all>search:title:$(flags)$<val>]"> `[[`<<currentTiddler>>`]]`<br> </$list> \define editlist_select_minmax_goto() \whitespace trim <$list filter="[<listheight>compare:integer:gt[1]] [<listheight>!regexp[^\d+$]] [<listheight>match[fit]]" +[limit[1]]><!-- not a dropdown --> <div class="editlist_popup_minmax_$(id)$ fadeIn"> <$vars hmax={{{ [<minmax>get[hmax]] }}} vmax={{{ [<minmax>get[vmax]] }}}> <$list filter="[<hmax>!match[]] ~[<listwidth>!match[auto]]"> <$button tooltip={{{ [<hmax>match[]then[fit width]else[restore width]] }}}> <$list filter="[<hmax>match[]]" emptyMessage={{$:/core/images/chevron-left}}>{{$:/core/images/chevron-right}}</$list> <$action-setfield $tiddler=<<minmax>> hmax={{{ [<hmax>match[]then[yes]else[]] }}} /> <$list filter="[<hmax>!match[]then<vmax>match[]]"><$action-deletetiddler $filter="[<minmax>]"/></$list> <<gotoselect>> </$button> </$list> <$list filter="[<vmax>!match[]] ~[<listheight>!regexp[^\d+$]] ~[<count>compare:integer:gt<listheight>] +[then<listheight>!match[fit]]"> <$button tooltip={{{ [<vmax>match[]then[fit height]else[restore height]] }}}> <$list filter="[<vmax>match[]]" emptyMessage={{$:/core/images/chevron-up}}>{{$:/core/images/chevron-down}}</$list> <$action-setfield $tiddler=<<minmax>> vmax={{{ [<vmax>match[]then[yes]else[]] }}} /> <$list filter="[<hmax>match[]then<vmax>!match[]]"><$action-deletetiddler $filter="[<minmax>]"/></$list> <<gotoselect>> </$button> </$list> <$vars curr={{{ [<modal>is[tiddler]else<tid>] }}}><$vars val={{{ [<curr>getindex<index>] ~[<curr>get<field>] }}}> <$list filter="[<goto_button>match[yes]then<val>!match[]]"> <$button tooltip="view selected items"> {{$:/core/images/preview-open}} <<goto>></$button> </$list> \end \define editlist_calendar() <$importvariables filter="TiddlyTools/Time/Calendar"> <$vars showday_popup_extras=<<editlist_selectday>>> <$vars target={{{ [<modal>is[tiddler]else<tid>] }}}> <$vars config="$:/state/popup/calendar/config"> <$vars format="YYYY/0MM/0DD" month=<<now "[UTC]MM">> year=<<now "[UTC]YYYY">>> <$list filter="[<config>]"> <$vars width={{{ [<stretch>match[auto]then<width>else<stretch>] }}}> <!-- CONVERT WIDTH TO EMWIDTH --> <$vars emwidth={{{ [<width>removesuffix[em]] }}}> <$vars emwidth={{{ [<width>removesuffix[in]multiply[6.420]else<emwidth>] }}}> <!-- EMs per inch --> <$vars emwidth={{{ [<width>removesuffix[cm]multiply[2.530]else<emwidth>] }}}> <!-- EMs per cm --> <$vars emwidth={{{ [<width>removesuffix[mm]multiply[.2530]else<emwidth>] }}}> <!-- EMs per mm --> <$vars emwidth={{{ [<width>removesuffix[px]multiply[0.066]else<emwidth>] }}}> <!-- EMs per pixel --> <$vars emwidth={{{ [<width>removesuffix[pt]multiply[0.089]else<emwidth>] }}}> <!-- EMs per point --> <!-- GET HEIGHT FROM DAYS PER MONTH --> <$vars yyyy={{{ [<config>get[year]else<year>] }}} mm={{{ [<config>get[month]else<month>pad[2]] }}}> <$vars date={{{ [<yyyy>addsuffix<mm>addsuffix[01]] }}}> <$wikify name="first" text="""<$view tiddler=<<date>> field="title" format="date" template="[UTC]ddd" />"""> <$vars first={{{ [all[shadows]prefix[$:/language/Date/Short/Day/]get[text]allbefore<first>count[]] }}}> <$vars dpm={{{ [<yyyy>remainder[4]match[0]then[31 29 31 30 31 30 31 31 30 31 30 31]else[31 28 31 30 31 30 31 31 30 31 30 31]] }}}> <$vars dm={{{ [<dpm>split[ ]nth<mm>] }}}> <!-- days this month --> <$vars rows={{{ [<first>subtract[1]add<dm>divide[7]add[1]trunc[]] }}}> <!-- rows this month --> <$vars height={{{ [<rows>multiply[2.5]add[7.25]addsuffix[em]] }}}> <!-- rows + heading + format --> <!-- SET SCALE AND SPACER --> <$vars scale={{{ [<stretch>match[no]then[1]] ~[<emwidth>addsuffix[/18.75]] }}}> <!-- 18.75 = 7 days + borders + padding --> <$vars spacer={{{ [<height>addsuffix[*]addsuffix<scale>] }}}> <!-- SHOW POPUP OR INLINE CALENDAR --> <$list filter="[<show>match[no]]" variable="show_popup_calendar"> <$reveal state=<<popup>> type="nomatch" text="" class="editlist_calendar_wrapper tc-popup-keep"><<editlist_calendar_show>></$reveal> </$list> <$list filter="[<show>!match[no]]" variable="show_inline_calendar"> <div style="margin-top:1.6em;"><<editlist_calendar_show>></div> </$list> \end \define editlist_calendar_show() \whitespace trim <$eventcatcher events="focusin" actions-focusin="<$list filter='[<show>match[no]]'><<openpopup>></$list><<startmodal>>"> <div style="height:calc($(spacer)$);"> <div style="transform-origin:top left;transform:scale(calc($(scale)$));"> <div class="editlist_calendar tc-block-dropdown" style="margin:0;min-width:auto;"> <$macrocall $name="showmonth" yyyy={{{ [<config>get[year]else<year>] }}} mm={{{ [<config>get[month]else<month>] }}} view="edit" /> <div> <$list filter="[<config>get[format]]"> <$button class="tc-btn-invisible" style="float:right;" tooltip="use default format">{{$:/core/images/close-button}} <$action-deletefield $tiddler=<<config>> $field="format" /> </$button> </$list> format:<br/> <$edit-text tag="input" class="editlist_calendar_format" tiddler=<<config>> field="format" default=<<format>> placeholder=<<format>> /> </div> </div> </div> </div> \end \define editlist_selectday() \whitespace trim <!-- ADD CUSTOM CALENDAR SHOWDAY_POPUP_EXTRAS() MACRO WITH SIMPLE "SELECTDAY" BUTTON --> <$vars UTC="[UTC]" time=<<now "0hh0mm0ss0XXX">>> <$vars template={{{ [<config>get[format]else<format>addprefix<UTC>] }}}> <$vars value={{{ [<date>addsuffix<time>format:date<template>] }}}> <$button class="tc-button tt-button" style="text-align:center;width:100%;margin:0.25em 0;"> ''select this date'' <$action-setfield $timestamp=<<timestamp>> $tiddler=<<target>> $field=<<field>> $index=<<index>> $value=<<value>> /> <$action-deletetiddler $filter="[<calendar_popID>]" /> <$list filter='[<confirm>!match[yes]]'><<closepopup>></$list> </$button> \end | author|''[ext[Eric Shulman|mailto:elsdesign@gmail.com]]''| | source|''http://TiddlyTools.com/edit-list.html''| | updated|''<$view field="modified" format="date" template="DDD, MMM DDth YYYY at 0hh12:0mm:0ssam"/>''| <pre style="font-size:80%;line-height:1em;"><$text text={{TiddlyTools/Macros/edit-list}}/></pre>
\define config() $:/config/TiddlyTools/Filters \define temp() $:/temp/TiddlyTools/Filters \define popup() $:/state/popup/TiddlyTools/Filters \define modal() $:/state/modal/TiddlyTools/Filters \define filters_maxheight() 50vh \define filters_dateformat() DDD, MMM DDth YYYY, 0hh12:0mm:0ssam \define filters_timeformat() 0hh:0mm:0ss \define filters_size() [<currentTiddler>fields[]] :map[<..currentTiddler>get<currentTiddler>else[]length[]] +[sum[]] \define filters_styles() <style> .tt-filters .notation { font-size:70%; line-height:1em; white-space:nowrap; } .tt-filters .controls { margin-top:0.25em; border-top:1px solid; padding-top:0.25em; } .tt-filters .controls button { width:auto; height:auto; padding:0; vertical-align:sub; background:none; } .tt-filters .controls .wide { display:block; clear:both; width:100%; min-height:1.2em; overflow:hidden; resize:none; } .tt-filters .controls .search { border:1px solid gray; background:<<colour background>>; background:<<colour select-tag-background>>; } .tt-filters .controls .search input { display:inline; width:calc(100% - 1.5em); border:0; outline:0; } .tt-filters .controls a { padding-top:0; padding-bottom:0; line-height:1.2em; } .tt-filters .tids { margin-top:0.5em; padding:1px 0.5em; font-size:90%; line-height:1em; } .tt-filters .tids { max-height:$(filters_maxheight)$; overflow:auto; } .tt-filters .tids blockquote { margin:0 0 0 1em; padding:0.5em 0 0.5em 0; border:0; } .tt-filters .tids a { margin:0; padding:0; line-height:1.2em; font-weight:normal; } .tt-filters .tc-modal-header { padding:0em 1em; } .tt-filters .tc-modal-header .checkbox { width:auto !important; } .tt-filters .tc-modal-body { padding:1em 1em 0.5em 1em; } .tt-filters .tc-modal-body p { margin:0; } .tt-filters .tc-modal-body .listitem { overflow:hidden; word-break:break-all; text-overflow:ellipsis; } .tt-filters .tc-modal-footer { padding:0.5em 1em; } .tt-filters .popup { padding:0.5em; width:max-content; } .tt-filters .popup svg { fill:<<colour foreground>> !important; } .tt-filters .popup .tids { max-height:$(filters_maxheight)$; overflow:auto; } .tt-filters table { border:0; padding:0px; margin:0 auto 0.25em auto; font-size:80%; line-height:1.4em; } .tt-filters table tr { border:0; padding:0px; margin:0; height:1.5em; } .tt-filters table td { border:0; padding:2px; margin:0; vertical-align:text-top; font-weight:bold; } .tt-filters table button { width:1.5em !important; height:1.5em !important; background:revert !important; vertical-align:top !important; } .tt-filters table .editlist_input { outline:none; } .tt-filters pre { margin:auto; padding:0.25em 1em; width:33em; word-break:break-all; font-size:80%; line-height:1em; border-radius:1em; } <$list filter="[<powersearch>match[]]"> /* FLOATING PANEL */ .tt-filters .powersearch { position:relative; overflow:visible; transform:translateX(100%); z-index:1; } .tt-filters .powersearch-inner { position:absolute; } .tt-filters .powersearch .tt-shadowbox { DISABLED_FOR_NOW_font-size:90%; line-height:1em; } </$list> nav.tc-menubar .tt-filters .tc-block-dropdown { max-height:initial; } /* PREVENT EXTRA SCROLLBAR ON MENUBAR POPUP */ </style> \end \define filters_header() <$let filt={{{ [<popid>get[filt]] }}} count={{{ [subfilter<filt>count[]] }}} total={{{ [subfilter<filt>] :map[subfilter<filters_size>] +[sum[]] }}}> <span style="vertical-align:sub;"> ''<<count>> matching tiddler<$text text={{{ [<count>!match[1]then[s]] }}}/>'' <$list filter="[<count>!match[0]]">@@.notation (<<total>> bytes)@@</$list> </span> <div style="clear:both;"/> \end \define filters_controls() <div class="controls"> <<filters_select>> <<filters_powersearch>> <<filters_copy>> <<filters_edit>> <<filters_save>> <<filters_delete>> <<filters_reset>> <<filters_clear>> <<filters_sort>> <<powersearch_popup>> <<filters_filt>> <<filters_find>> </div> \end \define filters_select() <$let thispopid={{{ [<popup>addsuffix[/select/]addsuffix<qualify>] }}}> <$button class="tc-btn-invisible tc-popup-keep" popup=<<thispopid>> tooltip="select a filter"> ''Filters:'' {{$:/core/images/down-arrow}} </$button> <$reveal state=<<thispopid>> type="popup" position="below" animate="yes"> <div class="tc-block-dropdown-wrapper"> <div class="tc-block-dropdown tc-edit-type-dropdown tt-shadowbox" style="padding:0.5em;"> <$button class="tc-btn-invisible" style="float:right; margin-left:0.5em; padding:0;" tooltip="close"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<thispopid>>/> </$button> ''Select a filter'' <div class="tt-shadowbox inset" style="clear:both; padding-right:0;"> <div style="max-height:50vh; overflow:auto; margin-right:0.5em; padding-right:0.5em; padding-bottom:2px;"><<filters_select_list>></div> </div> </div> </div> </$reveal> \end \define filters_select_list() <$set name="tv-show-missing-links" value="yes"> <$linkcatcher actions="<<filters_select_actions>>"> <$list filter="[all[tiddlers]tag[$:/tags/Filter]!has[draft.of]limit[1]]"> <div style="margin:0.5em;">__''Custom filters:''__</div> <$list filter="[all[tiddlers]tag[$:/tags/Filter]!has[draft.of]] :sort[get[description]]"> <$link to={{!!filter}} tooltip={{!!filter}}><$let tv-wikilinks="no"><$transclude field="description"/></$let></$link> </$list> </$list> <div style="margin:0.5em">__''Shadow filters:''__</div> <$list filter="[all[shadows]tag[$:/tags/Filter]]"> <$link to={{!!filter}} tooltip={{!!filter}}><$let tv-wikilinks="no"><$transclude field="description"/></$let></$link> </$list> \end \define filters_select_actions() <$let filt=<<navigateTo>> tid={{{ [all[tiddlers+shadows]tag[$:/tags/Filter]] :filter[get[filter]match<filt>] }}} desc={{{ [<tid>get[description]] }}} text={{{ [<tid>get[text]] }}}> <$action-setfield $tiddler="$:/temp/advancedsearch" text=<<filt>>/> <$action-setfield $tiddler="$:/temp/advancedsearch/input" text=<<filt>>/> <$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text='yes'/> <$action-setfield $tiddler=<<config>> text=<<text>> filt=<<filt>> type="application/json"/> <$action-setfield $tiddler=<<temp>> text=<<desc>> filt=<<filt>> type="application/json"/> <$action-setfield $tiddler=<<popid>> text=<<text>> filt=<<filt>> type="application/json"/> <$list filter="[<popup>addsuffix[/powersearch]is[tiddler]]"><$action-setfield text=<<text>> filt=<<filt>> type="application/json"/></$list> <$action-deletetiddler $tiddler=<<thispopid>>/> \end \define filters_clear() \whitespace trim <$list filter="[<popid>get[filt]]"> <$button class="tc-btn-invisible" style="margin-left:0.5em;" tooltip="clear all inputs"> {{$:/core/images/cancel-button}} <$action-deletetiddler $filter="[prefix[$:/temp/advancedsearch]]"/> <$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text='yes'/> <$action-deletetiddler $filter="[<temp>] [<popid>]"/> <$action-setfield $tiddler=<<config>> text="" filt=""/> <$list filter="[<popup>addsuffix[/powersearch]is[tiddler]]"><$action-setfield text="" filt=""/></$list> </$button> \end \define filters_powersearch() \define init() <$action-setfield $tiddler=<<popid>> update="yes" text={{{ [<config>get[text]] }}} filt={{{ [<config>get[filt]] }}} type="application/json"/> \define close() <$action-deletetiddler $tiddler=<<popid>>/> <$let outerid=<<popid>> popid={{{ [<popup>addsuffix[/powersearch]] }}} tip={{{ [<popid>is[missing]then[show]else[hide]] [[FilterMaker]] +[join[ ]] }}}> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" popup={{{ [<powersearch>!match[inline]then<popid>] }}} tooltip=<<tip>>> {{$:/core/images/theme-button}} <$list filter="[<popid>is[missing]]"><<init>> </$list> <$list filter="[<popid>is[tiddler]]"><<close>></$list> </$button> \end \define powersearch_popup() <div class="powersearch"><div class="powersearch-inner" style=<<powersearch_pos>>> <$let outerid=<<popid>> popid={{{ [<popup>addsuffix[/powersearch]] }}} go={{{ [<popid>get[update]match[yes]then<powersearch_go>else[]] }}}> <$list filter="[<popid>is[tiddler]]"> <div style="clear:both; height:0.25em;"><!-- spacer --></div> <div class={{{ [<powersearch>!match[inline]then[tc-block-dropdown tc-popup-handle tt-shadowbox]] }}} style={{{ [<powersearch>!match[inline]then[padding:0.25em 0.5em 0.5em 0.5em;]else[border-top:1px solid; padding:0.25em 0 0.5em 0;]] }}}> <<powersearch_close>> <<powersearch_apply>> <<powersearch_togglefloat>> <<powersearch_pause>> <<powersearch_go reset>> <<powersearch_clear>> <div class="tt-shadowbox inset" style="clear:both; margin-top:0.25em; padding:0.5em; border:1px solid; border-radius:0.5em;"> <$eventcatcher $keyup=<<go>> $click=<<go>> $change=<<go>>> <<powersearch_table>> </$eventcatcher> <<powersearch_go preview>> </div> </div> </$list> \end \define powersearch_close() <span style="float:right; margin-left:0.5em;"> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" tooltip="close PowerSearch panel" actions="<<close>>"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> \end \define powersearch_apply() <span style="float:right; margin-left:0.5em;"> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" tooltip="apply PowerSearch filter" actions="<<powersearch_go>>"> {{$:/core/images/done-button}} </$button> \end \define powersearch_togglefloat() <span style="float:right; margin-left:0.5em;"> <$let tip={{{ [<config>get[powersearch]then[dock FilterMaker panel]else[float FilterMaker panel]] }}} img={{{ [<config>get[powersearch]then[$:/core/images/storyview-pop]else[$:/core/images/open-window]] }}} val={{{ [<config>get[powersearch]then[]else[floating]] }}}> <$button class="tc-btn-invisible tc-popup-handle" style="margin-left:0.5em; padding:0;" tooltip=<<tip>>> <$transclude tiddler=<<img>>/> <$action-setfield $tiddler=<<config>> powersearch=<<val>>/> <$list filter="[<val>match[]]"><$action-setfield $tiddler=<<config>> $field=powersearch /></$list> </$button> \end \define powersearch_pause() <$button class="tc-btn-invisible" style="padding:0;" tooltip={{{ [<popid>get[update]match[yes]then[pause]else[resume]] [[PowerSearch automatic search updates]] +[join[ ]] }}}> <span style="vertical-align:middle; margin-right:0.5em;">''~FilterMaker:''</span> <$list filter="[<popid>get[update]match[yes]]" emptyMessage="{{$:/core/images/timestamp-off}}">{{$:/core/images/timestamp-on}}</$list> <$action-setfield $tiddler=<<popid>> update={{{ [<popid>get[update]match[yes]then[no]else[yes]] }}}/> </$button> \end \define powersearch_clear() <$list filter="[<config>get[text]] [<config>get[filt]] +[limit[1]]"> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" tooltip="clear PowerSearch inputs" actions="<<clear>>"> {{$:/core/images/cancel-button}} <$action-setfield $tiddler=<<config>> text="" filt=""/> </$button> \end \define powersearch_table() \define get(i,f,p,m) <$macrocall $name="filters_input" tiddler=<<config>> index="$i$" filter=<<__f__>> width="20em" find="or" placeholder="$p$" multiple="$m$" /> <$set name="tidList" filter="tiddlers shadows tiddlers+shadows tags orphans missing"> <$set name="tagsList" filter="[tags[]sort[]] [all[shadows]tags[]sort[]]"> <$set name="sysFields" filter="title text tags created creator modified modifier"> <$set name="tidFields" filter="[all[tiddlers]] -[prefix[$:/state/popup]] +[fields[]!enlist<sysFields>sort[]]"> <$set name="shadowFields" filter="[all[shadows]fields[]!enlist<sysFields>!enlist<tidFields>sort[]]"> <$set name="fieldsList" filter="[enlist<sysFields>] [enlist<tidFields>] [enlist<shadowFields>]"> <$set name="searchList" filter="[enlist<sysFields>] [[*]] [enlist<fieldsList>!enlist<searchList>]"> <$set name="flagsList" filter="words literal whitespace regexp casesensitive anchored"> <$wikify name="shadowList" text=<<powersearch_shadowList>>> | search all|<<get "tids" "[enlist<tidList>]" "(none)">> | | match prefix|<<get "prefix" "[enlist<shadowList>]" "(none)">> | | exclude prefix|<<get "notprefix" "[enlist<shadowList>]" "(none)">> | | match suffix|<<get "suffix" "[enlist<shadowList>]" "(none)">> | | exclude suffix|<<get "notsuffix" "[enlist<shadowList>]" "(none)">> | | match tag|<<get "tag" "[enlist<tagsList>]" "(none)">> | | exclude tag|<<get "nottag" "[enlist<tagsList>]" "(none)">> | | has field|<<get "has" "[enlist<fieldsList>]" "(none)">> | | search fields|<<get "field" "[enlist<searchList>]" "title,text,tags" "yes">> | | using flags|<<get "flags" "[enlist<flagsList>]" "words" "yes">> | | sort by|<<get "sort" "[enlist<fieldsList>]" "(none)">> | | match term|<<get "term" "" "(none)">> | | custom filter|<<get "custom" "" "(none)">> | \end \define powersearch_shadowList(prefix: "$:/",maxdepth:"4") \whitespace trim <$list filter="[all[shadows]removeprefix[$prefix$]splitbefore[/]sort[]suffix[/]]" variable="chunk"> <$vars path={{{ [title[$prefix$]addsuffix<chunk>removesuffix[/]] }}}> <$text text=<<path>>/> <$list filter="[<path>split[/]count[]min[$maxdepth$]!match[$maxdepth$]]"> <$macrocall $name="powersearch_shadowList" prefix={{{ [title[$prefix$]addsuffix<chunk>] }}}/> </$list> </$vars> </$list> \end \define powersearch_go(action) \define tv-wikilinks() no <$let tids={{{ [<config>getindex[tids]] }}} pre={{{ [<config>getindex[prefix]] }}} notpre={{{ [<config>getindex[notprefix]] }}} suff={{{ [<config>getindex[suffix]] }}} notsuff={{{ [<config>getindex[notsuffix]] }}} tagval={{{ [<config>getindex[tag]] }}} nottag={{{ [<config>getindex[nottag]] }}} has={{{ [<config>getindex[has]] }}} field={{{ [<config>getindex[field]enlist-input[]join[,]] ~[[title,text,tags]] }}} flags={{{ [<config>getindex[flags]enlist-input[]join[,]] ~[[words]] }}} sort={{{ [<config>getindex[sort]] }}} custom={{{ [<config>getindex[custom]addprefix[ ]] }}} term={{{ [<config>getindex[term]] }}} tidsFilter={{{ [<tids>!match[]then<tidsFilter>] }}} preFilter={{{ [<pre>!match[]then<preFilter>] }}} notpreFilter={{{ [<notpre>!match[]then<notpreFilter>] }}} suffFilter={{{ [<suff>!match[]then<suffFilter>] }}} notsuffFilter={{{ [<notsuff>!match[]then<notsuffFilter>] }}} tagFilter={{{ [<tagval>!match[]then<tagFilter>] }}} nottagFilter={{{ [<nottag>!match[]then<nottagFilter>] }}} hasFilter={{{ [<has>!match[]then<hasFilter>] }}} searchFilter={{{ [<term>!match[]then<searchFilter>] }}} sortFilter={{{ [<sort>!match[]then<sortFilter>] }}}> <$let parts="tidsFilter preFilter notpreFilter suffFilter notsuffFilter tagFilter nottagFilter hasFilter searchFilter sortFilter" lb={{{ [charcode[91]] }}} rb={{{ [charcode[93]] }}} newfilt={{{ [enlist<parts>getvariable[]join[]] +[!match[]addprefix<lb>addsuffix<rb>] [<custom>] +[join[]trim[]] }}}> <!-- IF TRIGGERED FROM A BUTTON ACTION, THEN APPLY FILTER --> <$action-setfield $tiddler=<<outerid>> filt=<<newfilt>>/> <!-- IF RENDERED OUTSIDE A BUTTON, SHOW PREVIEW --> <$list filter="[<popid>get[update]match[no]then<__action__>match[preview]then<newfilt>!match[]]"> <div style="text-align:center; margin-top:0.5em;"> <$button class="tc-btn-invisible" tooltip="copy PowerSearch filter preview to clipboard" message="tm-copy-to-clipboard" param=<<result>>> <pre><<newfilt>></pre> </$button> </div> </$list> <!-- IF RENDERED OUTSIDE A BUTTON, SHOW RESET BUTTON --> <$let oldfilt={{{ [<popid>get[filt]] }}} oldtext={{{ [<popid>get[text]] }}}> <$list filter="[<__action__>match[reset]then<oldfilt>!match<newfilt>]"> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" tooltip="reset PowerSearch inputs"> <span style="fill:green;">{{$:/core/images/refresh-button}}</span> <$action-setfield $tiddler=<<config>> text=<<oldtext>> filt=<<oldfilt>>/> <$action-setfield $tiddler=<<outerid>> filt=<<oldfilt>>/> </$button> </$list> \end \define tidsFilter() all[$(tids)$] \define preFilter() prefix[$(pre)$] \define notpreFilter() !prefix[$(notpre)$] \define suffFilter() suffix[$(suff)$] \define notsuffFilter() !suffix[$(notsuff)$] \define tagFilter() tag[$(tagval)$] \define nottagFilter() !tag[$(nottag)$] \define hasFilter() has:field[$(has)$] \define searchFilter() search:$(field)$:$(flags)$[$(term)$] \define sortFilter() sort[$(sort)$] \define filters_edit() <$let custom={{{ [all[tiddlers+shadows]tag[$:/tags/Filter]] :filter[get[description]match<type>] }}}> <$list filter="[<custom>!match[]]"> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" tooltip="edit filter"> {{$:/core/images/edit-button}} <$action-sendmessage $message="tm-edit-tiddler" $param=<<custom>>/> </$button> \end \define filters_save() <$list filter="[<popid>get[filt]]"> <$let filt=<<currentTiddler>> outerid=<<popid>> popid={{{ [<popup>addsuffix[/savefilter]addsuffix<qualify>] }}}> <$wikify name=desc text=<<type>>> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" popup=<<popid>> tooltip="save filter"> <$let oldfilt={{{ [<temp>get[filt]] }}} newfilt=<<currentTiddler>> changed={{{ [<newfilt>!match<oldfilt>then[yes]] }}}> <span class={{{ [<changed>match[yes]then[tc-dirty-indicator]] }}}>{{$:/core/images/save-button}}</span> </$let> <$action-setfield $tiddler=<<popid>> desc=<<desc>> filt=<<filt>> newt={{{ [<config>] [[/CustomFilters/]] [<now "YYYY0MM0DD0hh0mm0ss0XXX">] +[join[]] }}}/> </$button> </$wikify> <$reveal state=<<popid>> type="popup"> <div class="tc-block-dropdown tc-popup-handle tt-shadowbox" style="padding:0.5em; width:30em;"> <<filters_save_close>> <<filters_save_done>> ''Save custom filter'' <div class="tt-shadowbox inset" style="clear:both;"> <$keyboard key="escape" actions="<$action-deletetiddler $tiddler=<<popid>>/>"> Description: <div><$edit-text tiddler=<<popid>> field="desc" class="wide" placeholder="enter a description" focus="yes"/></div> Filter: <div><$edit-text tiddler=<<popid>> field="filt" class="wide" tag="textarea" rows="2" minHeight="2.4em" placeholder="enter a filter"/></div> </$keyboard> </div> </div> </$reveal> \end \define filters_save_close() <$button class="tc-btn-invisible" style="float:right; margin-left:0.5em; padding:0;" tooltip="close"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> \end \define filters_save_done() \define replace() <$action-setfield $tiddler=<<custom>> text=<<text>> description=<<desc>> filter=<<filt>>/> \define save() <$action-createtiddler $basetitle=<<newt>> text=<<text>> description=<<desc>> filter=<<filt>> tags="$:/tags/Filter"/> \define select() <$action-setfield $tiddler=<<temp>> text=<<desc>> filt=<<filt>>/><$action-setfield $tiddler=<<outerid>> filt=<<filt>>/> \define close() <$action-deletetiddler $tiddler=<<popid>>/> <$button class="tc-btn-invisible" style="float:right; margin:0 0.5em; padding:0;" tooltip="save filter"> {{$:/core/images/done-button}} <$let newt={{{ [<popid>get[newt]] }}} text={{{ [<config>get[text]] }}} desc={{{ [<popid>get[desc]trim[]] }}} filt={{{ [<popid>get[filt]trim[]] }}}> <$list filter="[<desc>!match[]then<filt>!match[]]"> <$let custom={{{ [all[tiddlers]tag[$:/tags/Filter]] :filter[get[description]match<desc>] }}}> <$list filter="[<custom>!match[]]" emptyMessage="<<save>><<select>><<close>>"> <$let msg={{{ [[A custom filter called "]] [<desc>] [[" already exists.]] [charcode[10]] [[Are you sure you want to replace it?]] +[join[]] }}}> <$action-confirm $message=<<msg>>><<replace>><<select>><<close>></$action-confirm> </$let> </$list> </$let> </$list> </$let> </$button> \end \define filters_delete() \define delete() <$action-deletetiddler $tiddler=<<custom>>/> \define select() <$action-setfield $tiddler=<<temp>> text=""/> <$let custom={{{ [all[tiddlers]tag[$:/tags/Filter]] :filter[get[description]match<type>] }}} desc={{{ [<custom>get[description]] }}}> <$list filter="[<custom>is[tiddler]]"> <$let msg={{{ [[Are you sure you want to delete custom filter]] =[charcode[10]] [[ "]] [<desc>] [["]] =[charcode[10]] [[ ]] [<custom>] +[join[]] }}}> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0;" tooltip="delete filter"> {{$:/core/images/delete-button}} <$action-confirm $message=<<msg>>><<delete>><<select>></$action-confirm> </$button> \end \define filters_reset() <$let oldfilt={{{ [<temp>get[filt]] }}} newfilt={{{ [<popid>get[filt]] }}} changed={{{ [<newfilt>!match<oldfilt>then[yes]] }}}> <$list filter="[<changed>match[yes]]"> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0; fill:green;" tooltip={{{ [<changed>match[yes]then[reset filter]] }}}> {{$:/core/images/refresh-button}} <$action-setfield $tiddler=<<popid>> filt={{{ [<temp>get[filt]] }}}/> </$button> \end \define filters_sort() <span style="float:right; margin-left:1em; font-size:90%; line-height:1em; white-space:nowrap;"> ''sort by'' <$select tiddler=<<config>> field="sort" default="+[sort[title]]"> <option value="" style="font-style:italic;" >default order </option> <option value="+[sort[title]]" >title - A to Z </option> <option value="+[!sort[title]]" >title - Z to A </option> <option value="+[sortsub:integer<filters_size>]" >size - small to large </option> <option value="+[!sortsub:integer<filters_size>]">size - large to small </option> <option value="+[sort[created]]" >created - old to new </option> <option value="+[!sort[created]]" >created - new to old </option> <option value="+[sort[modified]]" >modified - old to new </option> <option value="+[!sort[modified]]" >modified - new to old </option> </$select> <div style="height:1px;"/> \end \define filters_filt() <div style="position:relative;" title="ESCAPE=clear input"> <$keyboard key="escape" actions="<$action-setfield $tiddler=<<popid>> filt=''/>"> <$edit-text tiddler=<<popid>> field="filt" class="tc-popup-handle wide" tag="textarea" rows="1" minHeight="1.2em" placeholder="enter filter syntax here"/> <$button class="tc-btn-invisible" style="position:absolute; top:0; right:0; width:1.5em; height:1.5em; padding:0;" tooltip="copy filter to clipboard"> {{$:/core/images/copy-clipboard}} <$action-sendmessage $message="tm-copy-to-clipboard" $param={{{ [<popid>get[filt]] }}}/> </$button> \end \define filters_find() <$list filter="[<popid>get[filt]]"> <div class="search" style="margin-top:2px;"> <$keyboard key="escape" actions="<$action-setfield $tiddler=<<popid>> find=''/>"> <span title="enter title search text or pattern (regexp), ESCAPE=clear input"> <$edit-text tiddler=<<popid>> field="find" class="tc-popup-handle wide" tag="input" default="" placeholder="enter title search text or pattern"/> </span> <$list filter="[<popid>get[find]]"> <$button class="tc-btn-invisible" style="float:right; margin:0.125em 0.25em 0 0; padding:0; font-size:90%; line-height:1em;" tooltip="clear title search text"> {{$:/core/images/close-button}} <$action-setfield $tiddler=<<popid>> find=""/> </$button> </$list> <div style="clear:both;"/> \end \define filters_list() <$let AtoZ="+[sort[title]]" find={{{ [<popid>get[find]] }}} search="+[search:title:regexp<find>]" bydate={{{ [<config>get[sort]search:title[created]then[created]] [<config>get[sort]search:title[modified]then[modified]] }}}> <$set name=items filter={{{ [<popid>get[filt]] [<AtoZ>] [<config>get[sort]] [<search>] +[join[ ]] }}}> <$list filter="[<find>!match[]]"> <div style="font-size:90%; line-height:1em; margin:0.25em 0.5em;"> <$button class="tc-btn-invisible" style="float:right; padding:0;"> ''clear search text''<$action-setfield $tiddler=<<popid>> find=''/> </$button> <$button class="tc-btn-invisible" style="padding:0;"> ''Found <$count filter="[enlist<items>]"/> matching title<$text text={{{ [enlist<items>count[]!match[1]then[s]] }}}/>:'' </$button> </div> </$list> <$list filter="[<items>!match[]]"> <div class="tids"> <$list filter="[<bydate>!match[]]"> <$set name="sameday" filter="[<bydate>match[modified]]" value="[sameday:modified<thisdate>]" emptyValue="[sameday:created<thisdate>]"> <$list filter="[enlist<items>eachday<bydate>get<bydate>]" variable=thisdate> <div>''<$text text={{{ [<thisdate>format:date[DDD, MMM DDth YYYY]] }}}/>''</div> <blockquote><$list filter="[enlist<items>subfilter<sameday>]" variable=item><<filters_item>></$list></blockquote> </$list> </$set> <$set name=undated filter="[enlist<items>!has<bydate>]"> <$list filter="[enlist<undated>limit[1]]"> <div>''undated (<$count filter="[enlist<undated>]"/>)''</div> <blockquote><$list filter="[enlist<undated>]" variable=item><<filters_item>></$list></blockquote> </$list> </$set> </$list> <$list filter="[<bydate>match[]]"> <$list filter="[enlist<items>]" variable=item><<filters_item>></$list> </$list> \end \define filters_item() <$let bydate={{{ [<bydate>match[created]else[modified]] }}} date={{{ [<item>get<bydate>format:date<filters_dateformat>] }}} time={{{ [<item>get<bydate>format:date<filters_timeformat>] }}} size={{{ [<item>] :map[subfilter<filters_size>] +[!match[0]addsuffix[ bytes]] }}} tip={{{ [<item>] [<date>!match[]addprefix[ on ]addprefix<bydate>] [<size>!match[]] +[join[ - ]] }}}> <$link to=<<item>> tooltip=<<tip>>> <$list filter="[<sameday>!match[]]"><<time>></$list> <$text text=<<item>>/> <span style="float:right; margin-left:1em;"><$text text={{{ [<size>!match[]else[---]] }}}/></span> </$link> <div style="clear:both;"/> \end \define filters_modals() <$let filt={{{ [<popid>get[filt]] }}} count={{{ [subfilter<filt>count[]] }}} AtoZ="+[sort[title]]" find={{{ [<popid>get[find]] }}} search="+[search:title:regexp<find>]" bydate={{{ [<config>get[sort]search:title[created]then[created]] [<config>get[sort]search:title[modified]then[modified]] }}}> <span style="float:right;padding-top:0.25em;"> <<modal_button tag>> <<modal_button clone>> <<modal_button export>> <<modal_button delete>> </span> \end \define modal_button(function) <$set name=items filter={{{ [<filt>] [<AtoZ>] [<config>get[sort]] [<search>] +[join[ ]] }}}> <$set name="selected" filter="[enlist<items>encodeuricomponent[]]"> <$button class="tc-btn-invisible" style="margin-left:1em; padding:0;" message="tm-modal" param=<<modal>> tooltip="$function$ tiddlers"> <span style={{{ [<count>match[0]then[fill:gray;]] }}}><$transclude tiddler="$:/core/images/$function$-button"/></span> <$list filter="[<count>!match[0]]"> <$action-setfield $tiddler=<<modal>> class="tt-filters tc-popup-handle" subtitle=<<modal_title>> text=<<modal_text>> footer=<<modal_footer>> function="$function$" list=<<selected>> wrap=<<wrap>> cols=<<cols>> nostamp={{$:/config/TimestampDisable}}/> </$list> </$button> \end \define modal_timestamp() <$let tid="$:/config/TimestampDisable" value={{{ [<tid>get[text]] }}}> <$button class="tc-button tt-button" style="margin:0 1em; padding:revert;"> <$transclude tiddler={{{ [<value>match[yes]then[$:/core/images/timestamp-off]else[$:/core/images/timestamp-on]] }}}/> <$action-setfield $tiddler=<<tid>> text={{{ [<value>match[yes]then[no]else[yes]] }}}/> </$button> \end \define modal_title() \import TiddlyTools/Search/Filters \define filter() $(filt)$ <$let cols={{{ [[$(config)$]get[cols]else[3]] }}} wrap={{{ [[$(config)$]get[wrap]else[nowrap]] }}}> <span style="float:right;font-size:80%;line-height:1em;margin-top:0.5em;"> columns: <$select tiddler="$(config)$" field="cols" default=<<cols>>><option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option></$select> <$checkbox tiddler="$(config)$" field="wrap" default=<<wrap>> checked="normal" unchecked="nowrap" class="checkbox"> wrap </$checkbox>  <<modal_timestamp>> <<modal_cancel "{{$:/core/images/close-button}}">> <<modal_ok "{{$:/core/images/done-button}}" >> </span> ''<$text text={{{ [{!!function}addsuffix[ tiddlers]sentencecase[]] }}}/>:'' <div style="font-size:70%;line-height:1em;margin-bottom:0.5em;">''<$text text=<<filter>>/>''</div> \end \define modal_text() \import TiddlyTools/Search/Filters \define all() $(selected)$ <<styles>> <$let cols={{{ [[$(config)$]get[cols]else[3]] }}} wrap={{{ [[$(config)$]get[wrap]else[nowrap]] }}}> <div style={{{ [[max-height:calc(65vh - 5em);overflow:auto;font-size:80%;line-height:1em;margin-bottom:0.5em;white-space:]addsuffix<wrap>] }}}> <ol style={{{ [[margin:0;column-gap:3em;column-width:1em;column-count:]addsuffix<cols>] }}}> <$list filter=<<all>> variable="thisTiddler"> <li> <div class="listitem" title={{{ [<thisTiddler>decodeuricomponent[]] }}}> <$list filter="[<currentTiddler>contains<thisTiddler>]"> <$eventcatcher $click='<$action-listops $subfilter="-[<thisTiddler>]"/>'> <input type="checkbox" checked="checked"> <$text text={{{ [<thisTiddler>decodeuricomponent[]] }}}/> </$eventcatcher> </$list> <$list filter="[<currentTiddler>!contains<thisTiddler>]"> <$eventcatcher $click='<$action-listops $subfilter="[<thisTiddler>]"/>'> <input type="checkbox"> <$text text={{{ [<thisTiddler>decodeuricomponent[]] }}}/> </$eventcatcher> </$list> </div> </li> </$list> </ol> </div> <$let count={{{ [<currentTiddler>get[list]enlist-input[]count[]] }}}> <$list filter="[<count>match[0]]" variable="msg">''Select tiddlers you want to {{!!function}}''</$list> <$list filter="[<count>!match[0]]" variable="msg"> ''Are you sure you want to {{!!function}} <$list filter="[<count>!match[1]]" emptyMessage="this tiddler?">these <<count>> tiddlers?</$list>'' </$list> \end \define modal_footer() \import TiddlyTools/Search/Filters \define select() $(filter_exclude)$ +[encodeuricomponent[]] <$set name="all" filter=<<select>>> <div style="text-align:center;"> <div style="float:left;text-align:left;"> <$button class="tc-button tt-button">all <$action-setfield list=<<all>>/></$button> <$button class="tc-button tt-button">none <$action-setfield list=""/></$button> </div> <div style="float:right;text-align:left;"><<modal_cancel>> <<modal_ok>></div> <<modal_options>> \end \define modal_cancel(label:"cancel") <$button class="tc-button tt-button" message="tm-close-tiddler" tooltip="cancel" actions=<<modal_done>>> $label$ </$button> \end \define modal_ok(label:{{!!function}}) <$let ok={{{ [{!!function}!match[tag]] [{$(modal)$/add}!is[blank]] [{$(modal)$/remove}!is[blank]] +[then{!!list}!match[]then[yes]] }}}> <$list filter="[<ok>match[yes]]" emptyMessage="<$button class='tc-button tt-button'>@@color:gray;fill:gray; $label$@@</$button>" variable="is_enabled"> <$button class="tc-button tt-button" message="tm-close-tiddler" tooltip={{!!function}} actions=<<modal_done>>> $label$ <<modal_functions>> </$button> </$list> \end \define modal_done() <$list filter="[[$:/config/TimestampDisable]is[tiddler]]" variable="reset_timestamp_setting"> <$action-setfield $tiddler="$:/config/TimestampDisable" text={{!!nostamp}}/> <$list filter="[{!!nostamp}match[]]"><$action-deletetiddler $tiddler="$:/config/TimestampDisable" /></$list> </$list> <$action-deletetiddler $filter="[prefix[$(modal)$]]" /> \end \define modal_options() \define taglist(tid,filter) <<filters_input tiddler:"$tid$" width:12em multiple:yes filter:"$filter$" placeholder:"enter/select tags">> <div style="display:inline-block;"> <$list filter="[{!!function}match[tag]]" variable="function"> <nobr style="text-align:left;">''Add tags:'' <<taglist "$(modal)$/add" "[tags[]sort[]] [all[shadows]tags[]sort[]]">></nobr> <nobr style="text-align:left;">''Remove tags:'' <<taglist "$(modal)$/remove" "[enlist{$(modal)$!!list}decodeuricomponent[]tags[]sort[]]">></nobr> </$list> <$list filter="[{!!function}match[clone]]" variable="function"> <nobr>''Replace'' <$edit-text tiddler="$(modal)$/from" tag="input" size="20" default="" placeholder=""/></nobr> <nobr>''with'' <$edit-text tiddler="$(modal)$/to" tag="input" size="20" default="" placeholder=""/></nobr> </$list> <$list filter="[{!!function}match[export]]" variable="function"> ''Filename/format'': <$edit-text tiddler="$(modal)$/filename" tag="input" size="20" default="" placeholder={{{ [{$(modal)$/format}suffix[TidFile]then[-- uses tiddler title --]else[tiddlers]] }}} disabled={{{ [{$(modal)$/format}suffix[TidFile]then[yes]] }}}/> <$select tiddler="$(modal)$/format" default="$:/core/templates/exporters/JsonFile"> <option value="$:/core/templates/exporters/CsvFile"> csv </option> <option value="$:/core/templates/exporters/StaticRiver"> html</option> <option value="$:/core/templates/exporters/JsonFile"> json</option> <option value="$:/core/templates/exporters/TidFile"> tid </option> </$select> </$list> <$list filter="[{!!function}match[delete]]" variable="function"> <!-- NO OPTIONS --> </$list> \end \define modal_functions() <$list filter="[{!!function}match[tag]]" variable="function"> <$list filter="[enlist{!!list}decodeuricomponent[]]"> <$action-listops $field="tags" $subfilter="+[append{$(modal)$/add}remove{$(modal)$/remove}]"/> </$list> </$list> <$list filter="[{!!function}match[clone]]" variable="function"> <$list filter="[enlist{!!list}decodeuricomponent[]]"> <$let newtitle={{{ [<currentTiddler>search-replace{$(modal)$/from},{$(modal)$/to}] }}}> <$action-createtiddler $basetitle=<<newtitle>> $template=<<currentTiddler>> /> </$let> </$list> </$list> <$list filter="[{!!function}match[export]]" variable="function"> <$let format={{{ [[$(modal)$/format]get[text]else[$:/core/templates/exporters/JsonFile]] }}} filename={{{ [[$(modal)$/filename]get[text]else[tiddlers]] }}} ext={{{ [<format>get[extension]] }}} target={{{ [<ext>addprefix<filename>] }}} list="[enlist{$(modal)$!!list}decodeuricomponent[]]"> <$list filter="[<format>!suffix[TidFile]]"> <$action-sendmessage $message="tm-download-file" $param=<<format>> exportFilter=<<list>> filename=<<target>> /> </$list> <$list filter="[<format>suffix[TidFile]]"> <$list filter=<<list>>> <$action-sendmessage $message="tm-download-file" $param=<<format>> exportFilter=<<currentTiddler>> filename={{{ [<currentTiddler>addsuffix<ext>] }}} /> </$list> </$list> </$let> </$list> <$list filter="[{!!function}match[delete]]" variable="function"> <$action-deletetiddler $filter="[enlist{!!list}decodeuricomponent[]]" /> </$list> \end \define filters_input(tiddler,index,width,confirm,multiple,filter,find,placeholder) \define stip() enter/select a value \define mtip() enter/select all that apply (use ctrl-click or shift-click) <$list filter="[[edit-list]is[variable]]" variable="if_edit_list_installed"> <$macrocall $name="edit-list" tiddler="$tiddler$" index="$index$" tooltip={{{ [[$multiple$]match[]then<stip>else<mtip>] }}} width="$width$" listwidth="fit" fontsize="100%" focusPopup={{{ [<__filter__>!match[]then[yes]] }}} confirm="$confirm$" multiple="$multiple$" filter=<<__filter__>> find="$find$" placeholder="$placeholder$"/> </$list> <$list filter="[[edit-list]!is[variable]]" variable="fallback_no_edit_list"> <style> .tt-powersearch_input { width:$width$ !important; } </style> <$let prefix={{{ [<popup>] [[/powersearch/]] [<__tid__>] [[/]] +[join[]] }}} popid={{{ [<prefix>] [<__index__>] [<qualify>] +[join[]] }}}> <$edit-text class="tt-powersearch_input" tag="input" tiddler="$tiddler$" field="text" index="$index$" default="" placeholder="$placeholder$"/> <$list filter="[<__filter__>!match[]]"> <span style="position:relative;"> <$button class="tc-button tt-button" popup=<<popid>>> <$list filter="[<popid>is[missing]]" emptyMessage="{{$:/core/images/up-arrow}}">{{$:/core/images/down-arrow}}</$list> <$action-deletetiddler $filter='[prefix<prefix>]'/> </$button> <$reveal state=<<popid>> type="nomatch" text="" style="position:absolute; right:0.25em; top:1.5em; z-index:1;"> <$select tiddler=<<__tiddler__>> index=<<__index__>> multiple=<<__multiple__>> size={{{ [subfilter<__filter__>count[]min[10]] }}}> <$list filter=<<__filter__>>><option><<currentTiddler>></option></$list> </$select> </$reveal> </span> </$list> <$button class="tc-button tt-button" style={{{ [<__tiddler__>getindex<__index__>else[fill:gray;]] }}} actions="<<powersearch_go>>"> {{$:/core/images/close-button}} <$action-setfield $tiddler=<<__tiddler__>> $index=<<__index__>>/><$action-deletetiddler $filter="[prefix<prefix>]"/> </$button> </$let> </$list> \end \define filters_popup() \whitespace trim <style> .tc-topbar button.popup, nav.tc-menubar button.popup { filter:grayscale(1) opacity(0.5); } .tc-topbar button.popup:hover, nav.tc-menubar button.popup:hover { filter:grayscale(0) opacity(1.0); } </style> <span class="tt-filters"> <$let popid={{{ [<popup>addsuffix<qualify>] }}}> <$button class="tc-btn-invisible popup" style="padding:0;" popup=<<popid>> tooltip="TiddlyTools PowerSearch"> <!-- {{$:/core/images/advanced-search-button}} -->🔎 </$button> <$reveal state=<<popid>> type="nomatch" text="" style="font-size:initial; line-height:1em;"> <div class="tc-popup-handle tc-block-dropdown tt-shadowbox popup" style="overflow:visible;"> <$button class="tc-btn-invisible" style="float:right; margin-left:1em; padding:0; fill:initial;" tooltip="close"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> <$button class="tc-btn-invisible" style="padding:0;" to="$:/AdvancedSearch" tooltip="open $:/AdvancedSearch"> {{$:/core/images/advanced-search-button}} ''~TiddlyTools ~PowerSearch'' <$action-setfield $tiddler="$:/state/tab--1498284803" $value="TiddlyTools/Search/Filters"/> <$action-deletetiddler $tiddler=<<popid>>/> </$button> <div class="tt-shadowbox inset" style="clear:both;border-top:1px solid;"> <<filters_show "top:-6em; left:1.5em;">> </div> </div> </$reveal> \end \define filters_show(powersearch_pos) <div class="tt-filters" style="display:inline-block; line-height:1em;"> <$let type={{{ [<temp>get[text]] }}} filt={{{ [<temp>get[filt]] }}} popid=<<popup>>> <$let powersearch={{{ [<config>get[powersearch]then[]else[inline]] }}} powersearch_pos={{{ [<__powersearch_pos__>!match[]else[top:-2em; left:0.5em;]] }}}> <<filters_styles>> <<filters_modals>> <<filters_header>> <<filters_controls>> <<filters_list>> \end <$reveal default=<<storyTiddler>> type=match text="" tag=span><<filters_popup>></$reveal> <$reveal default=<<storyTiddler>> type=nomatch text="" tag=div> <<filters_show>> </$reveal>
\define program() [prefix[TiddlyTools/Search]] [[TiddlyTools/Macros/edit-list]] +[!sort[modified]] \define import(type) <$set name="tids" filter="[all[tiddlers+shadows]!plugin-type[plugin]subfilter<$type$>]"> <$let popid=<<qualify "$:/state/popup/$(currentTiddler)$/$type$">> count={{{ [enlist<tids>] +[count[]] }}} label={{{ [[There are]] [<count>] [[$type$]] [[tiddlers]] +[join[ ]] }}}> <$macrocall $name="get" type="$type$" tids=<<tids>> label=<<label>>/> \end \define get(type:"required",tids,label) \define show() <$list filter="[enlist<tids>]"> <nobr><$link/>''<$text text={{{ [enlist<tids>last[]!match<currentTiddler>then[,]] }}}/>''</nobr> </$list> \define save() <$action-sendmessage $message="tm-download-file" $param=<<format>> exportFilter=<<tids>> filename={{{ [<popid>get[target]] ~[[tiddlers]] +[addsuffix[.json]] }}} /> \define format() $:/core/templates/exporters/JsonFile <$set name="tids" filter="[subfilter<__tids__>]"> <$let popid=<<qualify "$:/state/popup/$(currentTiddler)$/$tids$">> count={{{ [enlist<tids>] +[count[]] }}} class={{{ [<__label__>!match[]then[tc-btn-invisible tc-tiddlylink]else[tc-button tt-button]] }}} style={{{ [<__label__>!match[]else[font-size:90%;line-height:1em;margin-top:2px;]] }}} label={{{ [<__label__>!match[]else[$type$]sentencecase[]] }}} tip={{{ [<count>] [[$type$ tiddlers:]] [[CLICK to download or DRAG AND DROP to install]] +[join[ ]] }}}> <div style=<<style>>> <$button class=<<class>> style=<<style>> popup=<<popid>> dragFilter=<<tids>> tooltip=<<tip>>><$text text=<<label>>/> {{$:/core/images/download-button}}</$button> <$list filter="[<__label__>match[]]"><<show>></$list> </div> <$reveal type="popup" state=<<popid>> class="tc-drop-down tc-popup-handle tt-shadowbox" style="padding:0.5em;"> <span style="float:right;margin-left:1em;"> <$button class="tc-btn-invisible" style="display:inline;width:auto;padding:0;margin-left:0.5em;" tooltip="download tiddlers to JSON file"> {{$:/core/images/done-button}} <<save>> </$button> <$button class="tc-btn-invisible" style="display:inline;width:auto;padding:0;margin-left:0.5em;" tip="close"> {{$:/core/images/close-button}}<$action-deletetiddler $tiddler=<<popid>>/> </$button> </span> ''Download <<count>> tiddler<$text text={{{ [<count>!match[1]then[s]] }}}/>''<br> <div class="tt-shadowbox inset" style="margin-bottom:0.25em;border:1px solid;border-radius:0.5em;padding:0.25em;"> <div style="padding:0 0.25em;max-height:30vh;font-size:90%;line-height:1em;overflow:auto;"> <$list filter="[enlist<tids>]"><$link/></$list> </div> </div> <$keyboard key="enter" actions="<<save>>"> <center>Save as: <$edit-text tiddler=<<popid>> field="target" default="tiddlers" placeholder="tiddlers"/> .json</center> </$keyboard> </$reveal> \end \define top() <a class="resize" style="float:right;fill:gray;" href="##top" title="go to Table of Contents">{{$:/core/images/chevron-up}}</a> \define id(name) <a id="#$name$">[[$name$]]</a> \define anchor(name) <a class="tc-tiddlylink" href="##$name$">''<$text text="$name$"/>''</a> <style> .tt_info .contents { font-size:80%;line-height:1.2em;border:1px solid;padding:1em;border-radius:1em;background:<<colour background>>;box-shadow: 0.3em 0.3em 0.6em rgba(0,0,0,0.5); } .tt_info .contents a::after { display:block; content: ""; } .tt_info h1 { border-bottom:1px solid; } </style> <span class="tt_info"> <div style="float:right;padding-left:0.5em;"> <a id="#top"></a> ''Contents:'' <div class="contents"> <<anchor "TiddlyTools/Search/Titles">> <<anchor "TiddlyTools/Search/Tags">> <<anchor "TiddlyTools/Search/TagCloud">> <<anchor "TiddlyTools/Search/PowerSearch">> </div> </div> | author|''[ext[Eric Shulman|mailto:elsdesign@gmail.com]]''| | source|''https://TiddlyTools.com'' ([[license|https://TiddlyTools.com/#TiddlyTools%2FCatalog%2FLegal]])| | updated|''<$view field="modified" format="date" template="DDD, MMM DDth YYYY at 0hh12:0mm:0ssam"/>''| <<import program>> ~TiddlyTools' Search defines several $:/AdvancedSearch addon tabs to provide a variety of specialized searches. !! <<id "TiddlyTools/Search/Titles">> <<top>> <<< ''Search for tiddler titles in selected types of tiddlers'' <<get required "[[TiddlyTools/Search/Titles]]">> * Finds tiddlers that contain the specified text anywhere in their title * Select one or more types of tiddlers to search in:<br> tiddlers, shadows, system, tags, missing, orphans, images, binaries <<< !! <<id "TiddlyTools/Search/Tags">> <<top>> <<< ''Search for tiddlers using a combination of tags'' <<get required "[[TiddlyTools/Search/Tags]]">> * Shows checkboxes for all tags in the file, including shadow tags * Select any combination of tags to search for * Shows results matching all tags (AND) and one or more tags (OR) <<< !! <<id "TiddlyTools/Search/TagCloud">> <<top>> <<< ''Display tags using proportional size based on the number of tiddlers for each tag'' <<get required "[[TiddlyTools/Search/TagCloud]]">> * Select tags to include * Shows number of matching tiddlers on each tag "pill" * Sort results by tag title or number of matching tiddlers * options: min=minimum font size, step=font size increment, max=maximum font size, group=tag count cluster size <<< !! <<id "TiddlyTools/Search/PowerSearch">> <<top>> <<< ''Assemble a compound filter to search for matching tiddlers'' <<get required "[[TiddlyTools/Search/PowerSearch]]">> <<get optional "[[TiddlyTools/Macros/edit-list]]">> * select types of tiddlers to search * include/exclude prefixes, suffixes or tags * find tiddlers that have a specific field (even if blank) * search in one or more specified fields * use flags to define the search criteria * sort results by any tiddler field * copy the assembled filter syntax to the clipboard * save assembled filters for later re-use * add/remove tags, clone/rename, export, or delete matching/selected tiddlers <<<
\define config() $:/config/TiddlyTools/PowerSearch \define saved() $:/config/TiddlyTools/PowerSearch/SavedFilters/ \define show() $:/config/TiddlyTools/PowerSearch!!show \define popup() $:/state/popup/TiddlyTools/PowerSearch \define options() $:/state/popup/TiddlyTools/PowerSearch/options \define menu() $:/state/popup/TiddlyTools/PowerSearch/menu/ \define default_width() 15em \define default_columns() 1 \define default_height() auto \define default_wrap() nowrap \define popup_maxw() 80vw \define popup_maxh() 70vh \define styles() <style> .tt-powersearch a { display:inline; padding:0; } .tt-powersearch button { padding:0 0.25em; } .tt-powersearch svg { fill:<<colour foreground>> !important; } .tt-powersearch_btn { filter:grayscale(1) opacity(0.5); } .tt-powersearch_btn:hover { filter:grayscale(0) opacity(1.0); } .tt-powersearch_popup { padding:0.5em; min-width:35em; width:max-content; max-width:$(popup_maxw)$; } .tc-powersearch_popup_inner { max-height:$(popup_maxh)$; overflow:auto; padding:0.5em; font-size:90%; line-height:1em; } .tt-powersearch_table { border:0; padding:0; margin:0; float:left; margin-right:0.5em; } .tt-powersearch_table tr { border:0; padding:0; margin:0; } .tt-powersearch_table td { border:0; padding:2px; margin:0; } .tt-powersearch_table .editlist_input { outline:none; } .tt-powersearch_savedfilters { font-size:100%;line-height:1em;max-height:20em;padding-bottom:1px;overflow:auto; } .tt-powersearch_optionwidth { width:4em !important; } .tt-powersearch_checkboxwidth input { width:auto !important; } .tt-powersearch_listitem { overflow:hidden;word-break:break-all;text-overflow:ellipsis; } .tt-powersearch_modal .tc-modal-header { padding:0em 1em; } .tt-powersearch_modal .tc-modal-body { padding:1em 1em 0.5em 1em; } .tt-powersearch_modal .tc-modal-footer { padding:0.5em 1em; } .tt-powersearch_modal .tc-modal-body p { margin:0; } nav.tc-menubar .tt-powersearch .tc-block-dropdown { max-height:initial; } </style> \end \define get(index,filter,placeholder,multiple) \define filter() $filter$ <$macrocall $name="edit" tiddler=<<config>> index="$index$" filter=<<filter>> width="$(width)$" confirm=<<confirm>> multiple="$multiple$" find="or" placeholder="$placeholder$"/> \end \define edit(tiddler,index,width,confirm,multiple,filter,find,placeholder) \define filter() $filter$ \define stip() enter/select a value \define mtip() enter/select all that apply (use ctrl-click or shift-click) <$list filter="[[edit-list]is[variable]]" variable="if_edit_list_installed"> <$macrocall $name="edit-list" tiddler="$tiddler$" index="$index$" tooltip={{{ [[$multiple$]match[]then<stip>else<mtip>] }}} width="$width$" listwidth="fit" fontsize="100%" focusPopup={{{ [<filter>!match[]then[yes]] }}} confirm="$confirm$" multiple="$multiple$" filter=<<filter>> find="$find$" placeholder="$placeholder$"/> </$list> <$list filter="[[edit-list]!is[variable]]" variable="fallback_no_edit_list"> <style> .tt-powersearch_inputwidth { width:$width$; } </style> <span title={{{ [[$multiple$]match[]then<stip>else<mtip>search-replace[/select],[]search-replace[use ctrl-click or shift-click],[space separated]] }}}> <$edit-text class="tt-powersearch_inputwidth" tag="input" tiddler="$tiddler$" field="text" index="$index$" default="" placeholder="$placeholder$"/> </span> </$list> \end \define shadowList(prefix: "$:/",maxdepth:"4") \whitespace trim <$list filter="[all[shadows]removeprefix[$prefix$]splitbefore[/]sort[]suffix[/]]" variable="chunk"> <$vars path={{{ [title[$prefix$]addsuffix<chunk>removesuffix[/]] }}}> <$text text=<<path>>/> <$list filter="[<path>split[/]count[]min[$maxdepth$]!match[$maxdepth$]]"> <$macrocall $name="shadowList" prefix={{{ [title[$prefix$]addsuffix<chunk>] }}}/> </$list> </$vars> </$list> \end \define inputs() <$set name="tidList" filter="tiddlers shadows tiddlers+shadows tags orphans missing"> <$set name="tagsList" filter="[tags[]sort[]] [all[shadows]tags[]sort[]]"> <$set name="sysFields" filter="title text tags created creator modified modifier"> <$set name="tidFields" filter="[all[tiddlers]] -[prefix[$:/state/popup]] +[fields[]!enlist<sysFields>sort[]]"> <$set name="shadowFields" filter="[all[shadows]fields[]!enlist<sysFields>!enlist<tidFields>sort[]]"> <$set name="fieldsList" filter="[enlist<sysFields>] [enlist<tidFields>] [enlist<shadowFields>]"> <$set name="searchList" filter="[enlist<sysFields>] [[*]] [enlist<fieldsList>!enlist<searchList>]"> <$set name="flagsList" filter="words literal whitespace regexp casesensitive anchored"> <$wikify name="shadowList" text=<<shadowList>>> |tt-powersearch_table|k | search all|<<get "tids" "[enlist<tidList>]" "tiddlers">> | | match prefix|<<get "prefix" "[enlist<shadowList>]" "(none)" >> | | exclude prefix|<<get "notprefix" "[enlist<shadowList>]" "(none)" >> | | match suffix|<<get "suffix" "[enlist<shadowList>]" "(none)" >> | | exclude suffix|<<get "notsuffix" "[enlist<shadowList>]" "(none)" >> | | match tag|<<get "tag" "[enlist<tagsList>]" "(none)" >> | | exclude tag|<<get "nottag" "[enlist<tagsList>]" "(none)" >> | | has field|<<get "has" "[enlist<fieldsList>]" "(none)" >> | | search fields|<<get "field" "[enlist<searchList>]" "title,text,tags" "yes">> | | using flags|<<get "flags" "[enlist<flagsList>]" "words" "yes">> | | sort by|<<get "sort" "[enlist<fieldsList>]" "title" >> | | match term|<<get "term" "" "(none)" >> | | custom filter|<<get "custom" "" "(none)" >> | \end \define savedFilters() <$list filter="[prefix<saved>limit[1]]"> <div style="white-space:nowrap;"> <$button class="tc-btn-invisible" style="padding:0;" tooltip="delete all saved filters"> {{$:/core/images/delete-button}} <$action-confirm $message="Are you sure you want to delete all saved filters?"> <$action-deletetiddler $filter="[prefix<saved>]" /> </$action-confirm> </$button> ''Saved filters:'' (<$count filter="[prefix<saved>]"/>) <hr style="margin:1px 0;"> <div class="tt-powersearch_savedfilters"> <$list filter="[prefix<saved>sort[]]" variable="item"> <<savedFilters_menu>> <$button class="tc-btn-invisible" style="padding:0;" tooltip={{{ [[use this filter:]] [<item>get[filter]] +[join[ ]] }}}> <$text text={{{ [<item>get[description]] }}}/> <$action-setfield $tiddler=<<config>> text={{{ [<item>get[text]] }}}/> </$button><br> </$list> </div> \end \define savedFilters_menu() <$let popid={{{ [<item>removeprefix<saved>addprefix<menu>addsuffix<qualify>] }}} desc={{{ [<item>get[description]] }}} filt={{{ [<item>get[filter]] }}} cust={{{ [<config>getindex[custom]addsuffix[ ]] }}} class="tc-btn-invisible" style="display:block;padding:0 0.5em;" lf={{{ [charcode[10]] }}}> <$button class=<<class>> style="padding:0;" popup=<<popid>>> {{$:/core/images/menu-button}}</$button> <$reveal type="popup" state=<<popid>> class="tc-drop-down" style="min-width:auto;"> <$button class=<<class>> style=<<style>> tooltip=<<filt>>> {{$:/core/images/done-button}} use this filter <$action-setfield $tiddler=<<config>> text={{{ [<item>get[text]] }}}/> </$button> <$button class=<<class>> style=<<style>> tooltip="add to custom filter"> {{$:/core/images/new-button}} add to custom filter <$action-setfield $tiddler=<<config>> $index="custom" $value={{{ [<cust>addsuffix<filt>trim[]] }}}/> </$button> <$button class=<<class>> style=<<style>> tooltip="copy to clipboard"> {{$:/core/images/copy-clipboard}} copy to clipboard <$action-sendmessage $message="tm-copy-to-clipboard" $param=<<filt>>/> </$button> <$button class=<<class>> style=<<style>> tooltip="edit this filter"> {{$:/core/images/edit-button}} edit this filter <$action-sendmessage $message="tm-edit-tiddler" $param=<<item>> /> </$button> <$button class=<<class>> style=<<style>> tooltip="delete this filter"> {{$:/core/images/delete-button}} delete this filter <$action-confirm $message={{{ [<filt>] [<desc>] [[ ]] [[Are you sure you want to delete this filter?]] +[join<lf>] }}}> <$action-deletetiddler $tiddler=<<item>> /> </$action-confirm> </$button> </$reveal> \end \define preFilter() prefix[$(pre)$] \define notpreFilter() !prefix[$(notpre)$] \define suffFilter() suffix[$(suff)$] \define notsuffFilter() !suffix[$(notsuff)$] \define tagFilter() tag[$(tagval)$] \define nottagFilter() !tag[$(nottag)$] \define hasFilter() has:field[$(has)$] \define searchFilter() search:$(field)$:$(flags)$[$(term)$] \define filter() [all[$(tids)$]$(preFilter)$$(notpreFilter)$$(suffFilter)$$(notsuffFilter)$$(tagFilter)$$(nottagFilter)$$(hasFilter)$$(searchFilter)$sort[$(sort)$]] $(custom)$ \define filter_exclude() $(filter)$ -[prefix[$:/state/modal]] -[prefix[$:/state/popup]] -[prefix[$:/temp/PowerSearch]] -[prefix[$:/temp/edit-list]] \define doSearch() <$vars tids={{{ [<config>getindex[tids]] ~[[tiddlers]] }}} pre={{{ [<config>getindex[prefix]] }}} notpre={{{ [<config>getindex[notprefix]] }}} suff={{{ [<config>getindex[suffix]] }}} notsuff={{{ [<config>getindex[notsuffix]] }}} tagval={{{ [<config>getindex[tag]] }}} nottag={{{ [<config>getindex[nottag]] }}} has={{{ [<config>getindex[has]] }}} field={{{ [<config>getindex[field]enlist-input[]join[,]] ~[[title,text,tags]] }}} flags={{{ [<config>getindex[flags]enlist-input[]join[,]] ~[[words]] }}} sort={{{ [<config>getindex[sort]] ~[[title]] }}} custom={{{ [<config>getindex[custom]] }}} term={{{ [<config>getindex[term]] }}}> <$vars preFilter={{{ [<pre>!is[blank]then<preFilter>] }}} notpreFilter={{{ [<notpre>!is[blank]then<notpreFilter>] }}} suffFilter={{{ [<suff>!is[blank]then<suffFilter>] }}} notsuffFilter={{{ [<notsuff>!is[blank]then<notsuffFilter>] }}} tagFilter={{{ [<tagval>!is[blank]then<tagFilter>] }}} nottagFilter={{{ [<nottag>!is[blank]then<nottagFilter>] }}} hasFilter={{{ [<has>!is[blank]then<hasFilter>] }}} searchFilter={{{ [<term>!is[blank]then<searchFilter>] }}}> <<doSearch_showresults>> \end \define doSearch_showresults() <$vars count={{{ $(filter_exclude)$ +[count[]] }}}> ''<<count>> match<$list filter="[<count>!match[1]]">es</$list>'' <<toggleList>> <<saveFilter>> <<clearAll>> <<setOptions>>   <$vars height={{{ [<config>get[height]] ~[<default_height>] }}} cols={{{ [<config>get[cols]] ~[<default_columns>] }}} wrap={{{ [<config>get[wrap]] ~[<default_wrap>] }}}> <$list filter="[<count>!match[0]]"> <<modal tag>> <<modal clone>> <<modal export>> <<modal delete>> </$list> <$reveal state=<<show>> type="match" text="show" style="font-size:90%;line-height:1em;"> columns: <$select tiddler=<<config>> field="cols" default=<<cols>>><option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option></$select> <$checkbox tiddler=<<config>> field="wrap" checked="normal" unchecked="nowrap" default=<<wrap>> class="tt-powersearch_checkboxwidth"> wrap </$checkbox> </$reveal> <$reveal state=<<show>> type="match" text="show"> <<doSearch_showlist>> </$reveal> \end \define doSearch_showlist() <fieldset style="border-radius:0.5em;"> <legend> <$button class="tc-btn-invisible" style="font-size:90%;text-align:left;word-break:break-all;" message="tm-copy-to-clipboard" param=<<filter>> tooltip="Copy filter to clipboard"> ''<$text text=<<filter>>/>'' {{$:/core/images/copy-clipboard}} </$button> </legend> <div style="max-height:$(height)$;white-space:$(wrap)$;padding-bottom:0.2em;overflow:auto;font-size:80%;line-height:1em;"> <ol style="margin:0;column-gap:3em;column-count:$(cols)$;column-width:1em;"> <$list filter=<<filter_exclude>>> <li><div class="tt-powersearch_listitem" title=<<currentTiddler>>><$link/></div></li> </$list> </ol> </div> </fieldset> \end \define toggleList() <$reveal state=<<show>> type="match" text=""> <$button tooltip="Show results"> {{$:/core/images/chevron-down}} <$action-setfield $tiddler=<<config>> show="show" /> </$button> </$reveal> <$reveal state=<<show>> type="match" text="show"> <$button tooltip="Hide results"> {{$:/core/images/chevron-up}} <$action-setfield $tiddler=<<config>> $field="show" /> </$button> </$reveal> \end \define saveFilter() <$vars target={{{ [<now YYYY0MM0DD0hh0mm0ss>addprefix<saved>] }}}> <$button tooltip="Save current filter"> {{$:/core/images/save-button}} <$action-setfield $tiddler=<<target>> type="application/json" text={{{ [<config>get[text]] }}} filter={{{ [<filter>trim[]] }}} description={{{ [<filter>trim[]] }}} tags="$:/tags/Filter" /> </$button> \end \define clearAll() <$tiddler tiddler=<<config>>> <$button tooltip="Clear all inputs"> {{$:/core/images/close-button}} <$list filter="tids prefix notprefix suffix notsuffix tag nottag has field term flags sort custom"> <$action-setfield $tiddler=<<config>> $index=<<currentTiddler>> /> </$list> <$action-deletetiddler $filter="[prefix[$:/state/popup/edit-list/]]"/> </$button> \end \define setOptions() <$let popid={{{ [<options>addsuffix<qualify>] }}}> <$button popup=<<popid>> tooltip="Set display options"> {{$:/core/images/options-button}} </$button> <$reveal type="popup" state=<<popid>> position="below" class="tc-drop-down tt-drop-down tc-popup-keep" style="min-width:auto;padding:0.5em;"> <$button class="tc-btn-invisible" style="display:inline;width:auto;padding:0;float:right;margin-left:1em;" tooltip="close"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> <$button class="tc-btn-invisible" style="display:inline;width:auto;padding:0;" message="tm-edit-tiddler" param=<<config>> tooltip="edit $(config)$"> ~PowerSearch options </$button> <div class="tt-shadowbox inset" style="clear:both;text-align:right;"> search input width <$edit-text tiddler=<<config>> field="width" class="tt-powersearch_optionwidth" default="" placeholder=<<default_width>> /><br> max list height <$edit-text tiddler=<<config>> field="height" class="tt-powersearch_optionwidth" default="" placeholder=<<default_height>>/><br> max popup width <$edit-text tiddler=<<config>> field="popup_maxw" class="tt-powersearch_optionwidth" default="" placeholder=<<popup_maxw>> /><br> max popup height <$edit-text tiddler=<<config>> field="popup_maxh" class="tt-powersearch_optionwidth" default="" placeholder=<<popup_maxh>> /><br> <center> <$checkbox tiddler=<<config>> field="confirm" checked="yes" unchecked="" default="" class="tt-powersearch_checkboxwidth"> confirm search inputs </$checkbox> </center> </div> </$reveal> <$let popup_maxw={{{ [<config>get[popup_maxw]] ~[<popup_maxw>] }}} popup_maxh={{{ [<config>get[popup_maxh]] ~[<popup_maxh>] }}}> <<styles>> \end \define modal(function) \define select() $(filter_exclude)$ +[encodeuricomponent[]] <$set name="selected" filter=<<select>>> <$button message="tm-modal" param="$:/temp/PowerSearch" tooltip="$function$ tiddlers"> <$transclude tiddler="$:/core/images/$function$-button"/> <$action-setfield $tiddler="$:/temp/PowerSearch" class="tt-powersearch_modal tc-popup-handle" subtitle=<<modal_title>> text=<<modal_text>> footer=<<modal_footer>> function="$function$" list=<<selected>> wrap=<<wrap>> cols=<<cols>> nostamp={{$:/config/TimestampDisable}}/> </$button> \end \define modal_title() \import TiddlyTools/Search/PowerSearch \define filter() $(filter)$ <span style="float:right;font-size:80%;line-height:1em;margin-top:0.5em;"> columns: <$select field="cols"><option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option></$select> <$checkbox field="wrap" checked="normal" unchecked="nowrap" class="tt-powersearch_checkboxwidth"> wrap </$checkbox>  <$vars tv-config-toolbar-icons="yes" tv-config-toolbar-text="no">{{$:/core/ui/Buttons/timestamp}}</$vars>  <<modal_cancel "{{$:/core/images/close-button}}">> <<modal_ok "{{$:/core/images/done-button}}" >> </span> ''<$text text={{{ [{!!function}addsuffix[ tiddlers]sentencecase[]] }}}/>:'' <div style="font-size:70%;line-height:1em;margin-bottom:0.5em;">''<$text text=<<filter>>/>''</div> \end \define modal_text() \import TiddlyTools/Search/PowerSearch \define all() $(filter_exclude)$ +[encodeuricomponent[]] <<styles>> <div style={{{ [[max-height:calc(65vh - 5em);overflow:auto;font-size:80%;line-height:1em;margin-bottom:0.5em;white-space:]addsuffix{!!wrap}] }}}> <ol style={{{ [[margin:0;column-gap:3em;column-width:1em;column-count:]addsuffix{!!cols}] }}}> <$list filter=<<all>> variable="thisTiddler"> <li> <div class="tt-powersearch_listitem" title={{{ [<thisTiddler>decodeuricomponent[]] }}}> <$list filter="[<currentTiddler>contains<thisTiddler>]"> <$eventcatcher $click='<$action-listops $subfilter="-[<thisTiddler>]"/>'> <input type="checkbox" checked="checked"> <$text text={{{ [<thisTiddler>decodeuricomponent[]] }}}/> </$eventcatcher> </$list> <$list filter="[<currentTiddler>!contains<thisTiddler>]"> <$eventcatcher $click='<$action-listops $subfilter="[<thisTiddler>]"/>'> <input type="checkbox"> <$text text={{{ [<thisTiddler>decodeuricomponent[]] }}}/> </$eventcatcher> </$list> </div> </li> </$list> </ol> </div> <$vars count={{{ [<currentTiddler>get[list]enlist-input[]count[]] }}}> <$list filter="[<count>match[0]]" variable="msg">''Select tiddlers you want to {{!!function}}''</$list> <$list filter="[<count>!match[0]]" variable="msg"> ''Are you sure you want to {{!!function}} <$list filter="[<count>!match[1]]" emptyMessage="this tiddler?">these <<count>> tiddlers?</$list>'' </$list> \end \define modal_footer() \import TiddlyTools/Search/PowerSearch \define select() $(filter_exclude)$ +[encodeuricomponent[]] <$set name="all" filter=<<select>>> <div style="text-align:center;"> <div style="float:left;text-align:left;"> <$button>all <$action-setfield list=<<all>>/></$button> <$button>none <$action-setfield list=""/></$button> </div> <div style="float:right;text-align:left;"><<modal_cancel>> <<modal_ok>></div> <<modal_options>> \end \define modal_cancel(label:"cancel") <$button message="tm-close-tiddler" tooltip="cancel" actions=<<modal_done>>> $label$ </$button> \end \define modal_ok(label:{{!!function}}) <$vars ok={{{ [{!!function}!match[tag]] [{$:/temp/PowerSearch/add}!is[blank]] [{$:/temp/PowerSearch/remove}!is[blank]] +[then{!!list}!match[]then[yes]] }}}> <$list filter="[<ok>match[yes]]" emptyMessage="<$button> @@color:gray;fill:gray; $label$@@</$button>" variable="is_enabled"> <$button message="tm-close-tiddler" tooltip={{!!function}} actions=<<modal_done>>> $label$ <<modal_functions>> </$button> </$list> \end \define modal_done() <$list filter="[[$:/config/TimestampDisable]is[tiddler]]" variable="reset_timestamp_setting"> <$action-setfield $tiddler="$:/config/TimestampDisable" text={{!!nostamp}}/> <$list filter="[{!!nostamp}match[]]"><$action-deletetiddler $tiddler="$:/config/TimestampDisable" /></$list> </$list> <$action-deletetiddler $filter="[prefix[$:/temp/PowerSearch]]" /> \end \define modal_options() \define taglist(tid,filter) <<edit tiddler:"$tid$" width:12em multiple:yes filter:"$filter$" placeholder:"enter/select tags">> <div style="display:inline-block;"> <$list filter="[{!!function}match[tag]]" variable="function"> <nobr style="text-align:left;">''Add tags:'' <<taglist "$:/temp/PowerSearch/add" "[tags[]sort[]] [all[shadows]tags[]sort[]]">></nobr> <nobr style="text-align:left;">''Remove tags:'' <<taglist "$:/temp/PowerSearch/remove" "[enlist{$:/temp/PowerSearch!!list}decodeuricomponent[]tags[]sort[]]">></nobr> </$list> <$list filter="[{!!function}match[clone]]" variable="function"> <nobr>''Replace'' <$edit-text tiddler="$:/temp/PowerSearch/from" tag="input" size="20" default="" placeholder=""/></nobr> <nobr>''with'' <$edit-text tiddler="$:/temp/PowerSearch/to" tag="input" size="20" default="" placeholder=""/></nobr> </$list> <$list filter="[{!!function}match[export]]" variable="function"> ''Filename/format'': <$edit-text tiddler="$:/temp/PowerSearch/filename" tag="input" size="20" default="" placeholder={{{ [{$:/temp/PowerSearch/format}suffix[TidFile]then[-- uses tiddler title --]else[tiddlers]] }}} disabled={{{ [{$:/temp/PowerSearch/format}suffix[TidFile]then[yes]] }}}/> <$select tiddler="$:/temp/PowerSearch/format" default="$:/core/templates/exporters/JsonFile"> <option value="$:/core/templates/exporters/CsvFile"> csv </option> <option value="$:/core/templates/exporters/StaticRiver"> html</option> <option value="$:/core/templates/exporters/JsonFile"> json</option> <option value="$:/core/templates/exporters/TidFile"> tid </option> </$select> </$list> <$list filter="[{!!function}match[delete]]" variable="function"> <!-- NO OPTIONS --> </$list> \end \define modal_functions() <$list filter="[{!!function}match[tag]]" variable="function"> <$list filter="[enlist{!!list}decodeuricomponent[]]"> <$action-listops $field="tags" $subfilter="+[append{$:/temp/PowerSearch/add}remove{$:/temp/PowerSearch/remove}]"/> </$list> </$list> <$list filter="[{!!function}match[clone]]" variable="function"> <$list filter="[enlist{!!list}decodeuricomponent[]]"> <$vars newtitle={{{ [<currentTiddler>search-replace{$:/temp/PowerSearch/from},{$:/temp/PowerSearch/to}] }}}> <$action-createtiddler $basetitle=<<newtitle>> $template=<<currentTiddler>> /> </$vars> </$list> </$list> <$list filter="[{!!function}match[export]]" variable="function"> <$vars format={{{ [[$:/temp/PowerSearch/format]get[text]else[$:/core/templates/exporters/JsonFile]] }}} filename={{{ [[$:/temp/PowerSearch/filename]get[text]else[tiddlers]] }}}> <$vars ext={{{ [<format>get[extension]] }}}> <$vars target={{{ [<ext>addprefix<filename>] }}}> <$vars list="[enlist{$:/temp/PowerSearch!!list}decodeuricomponent[]]"> <$list filter="[<format>!suffix[TidFile]]"> <$action-sendmessage $message="tm-download-file" $param=<<format>> exportFilter=<<list>> filename=<<target>> /> </$list> <$list filter="[<format>suffix[TidFile]]"> <$list filter=<<list>>> <$action-sendmessage $message="tm-download-file" $param=<<format>> exportFilter=<<currentTiddler>> filename={{{ [<currentTiddler>addsuffix<ext>] }}} /> </$list> </$list> </$vars> </$vars> </$vars> </$vars> </$list> <$list filter="[{!!function}match[delete]]" variable="function"> <$action-deletetiddler $filter="[enlist{!!list}decodeuricomponent[]]" /> </$list> \end \define powersearch_popup() \whitespace trim <span class="tt-powersearch"> <$let popid={{{ [<popup>addsuffix<qualify>] }}}> <$button class="tc-btn-invisible tt-powersearch_btn" style="font-size:90%;padding:0;" popup=<<popid>> tooltip="TiddlyTools PowerSearch"> {{$:/core/images/advanced-search-button}} </$button> <$reveal state=<<popid>> type="nomatch" text="" style="font-size:initial;line-height:1em;"> <div class="tc-popup-handle tc-block-dropdown tt-shadowbox tt-powersearch_popup"> <$button class="tc-btn-invisible" style="float:right;padding:0;margin-left:1em;fill:initial;" tooltip="close"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> <$button class="tc-btn-invisible" style="padding:0;" to="TiddlyTools/Search/PowerSearch"> ''~TiddlyTools ~PowerSearch'' </$button> <div class="tt-shadowbox inset" style="clear:both;border-top:1px solid;"> <div class="tc-powersearch_popup_inner"><<powersearch_show>></div> </div> </div> </$reveal> \end \define powersearch_show() <$let width={{{ [<config>get[width]] ~[<default_width>] }}} confirm={{{ [<config>get[confirm]] }}}> <<styles>> <<inputs>> <<savedFilters>> </$let> <div style="clear:both;padding-top:0.5em;"> <<doSearch>> \end <$reveal default=<<storyTiddler>> type=match text="" tag=span><<powersearch_popup>></$reveal> <$reveal default=<<storyTiddler>> type=nomatch text="" tag=div> <<powersearch_show>> </$reveal>
\define here() TiddlyTools/Search/TagCloud \define config() $:/config/TiddlyTools/TagCloud \define temp() $:/temp/TiddlyTools/TagCloud \define popup() $:/state/popup/TiddlyTools/TagCloud \define advsearch() $:/temp/advancedsearch \define listheight() 5 \define default_min() 0.75 \define default_step() 0.25 \define default_max() 3.00 \define default_group() 5 \define default_poph() 30vh <!-- TAG-PILL-INNER(): copied from $:/core/macros/tag - adds font-size, margin-bottom and count display in pill --> <!-- This has no whitespace trim to avoid modifying $actions$. Closing tags omitted for brevity. --> \define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions) <$vars foregroundColor=<<contrastcolour target:"""$colour$""" fallbackTarget:"""$fallbackTarget$""" colourA:"""$colourA$""" colourB:"""$colourB$""">> backgroundColor="""$colour$""" > <div style="display:inline-block;font-size:$(size)$em;line-height:1em;margin-bottom:2px;"> <$element-tag$ $element-attributes$ class="tc-tag-label tc-btn-invisible" style=<<tag-pill-styles>> >$actions$<$transclude tiddler="""$icon$"""/><$view tiddler=<<__tag__>> field="title" format="text" /> ($(count)$)</$element-tag$> \end \define tagcloud_styles() <style> .tt-tagcloud { white-space:normal; } .tt-tagcloud.select-tags { display:inline-block; float:left; margin-right:1em; } .tt-tagcloud.filter { width:100% !important; } .tt-tagcloud.filter textarea { width:calc(100% - 3em); min-height:1.4em; overflow:hidden; resize:none; } .tt-tagcloud.filter button.select { position:absolute; top:0; right:1.5em; width:1.5em; height:1.55em; padding:0; } .tt-tagcloud.filter button.clear { position:absolute; top:0; right:0.0em; width:1.5em; height:1.55em; padding:0; } .tt-tagcloud.options { margin:0.25em 0; width:100% !important; } .tt-tagcloud.cloud { clear:both; text-align:center; } .tt-tagcloud.summary { margin:0 0.5em 0.5em 0.5em; padding:0.25em 1em; border:1px solid; border-radius:1em; display:inline-block; } .tt-tagcloud .tt-shadowbox { padding:1em 2em; border:1px solid; border-radius:0.5em; } .tt-tagcloud .tt-shadowbox a { padding-top:0; padding-bottom:0; line-height:1.2em; } .tt-tagcloud input { width:auto !important; } .tt-tagcloud input.option { width:3em !important; text-align:right; } .tt-tagcloud button { padding:0; opacity:1 !important; } .tt-tagcloud button svg { fill:revert !important; } .tt-tagcloud ol { margin:0 0.5em 0 1em; padding-right:0.5em; padding-bottom:2px; max-height:<<poph>>; overflow:auto; } /* FONT SIZES */ .tt-tagcloud.select-tags { font-size:80%; line-height:1em; } .tt-tagcloud.info { font-size:90%; line-height:1em; } .tt-tagcloud.filter { font-size:90%; line-height:1em; } .tt-tagcloud.options { font-size:90%; line-height:1em; } .tt-tagcloud.summary { font-size:80%; line-height:1em; } .tt-tagcloud ol { font-size:90%; line-height:1em; } /* BOX SHADOW/GLOW EFFECTS */ .tt-tagcloud .tt-shadowbox { box-shadow: 0.3em 0.3em 0.6em #00000099; transition:box-shadow 1s; } .tt-tagcloud .tt-shadowbox:hover { box-shadow: 0.3em 0.3em 0.6em #666699cc; transition:box-shadow 1s; } .tt-tagcloud .tt-shadowbox.inset { box-shadow: 0.3em 0.3em 0.6em #00000099 inset; transition:box-shadow 1s; } .tt-tagcloud .tt-shadowbox.inset:hover { box-shadow: 0.3em 0.3em 0.6em #666699cc inset; transition:box-shadow 1s; } /* ADJUSTMENTS FOR TOPBAR AND MENUBAR */ <$list filter="[<storyTiddler>match[]]"> .tc-topbar .tt-tagcloud { min-width:min-content; width:max-content; max-width:50vw; } .tc-topbar .tt-tagcloud.cloud { width:100%; padding:1em 0.5em; 1em 1em; font-size:80%; line-height:1em; } .tc-topbar .tt-tagcloud.cloudscroll { width:100%; max-height:50vh; overflow:auto; margin:auto; padding:1em 1em; } nav.tc-menubar .tt-tagcloud { min-width:min-content; width:max-content; max-width:50vw; } nav.tc-menubar .tt-tagcloud.cloud { width:100%; padding:1em 0.5em; 1em 1em; font-size:80%; line-height:1em; } nav.tc-menubar .tt-tagcloud.cloudscroll { width:100%; max-height:50vh; overflow:auto; margin:auto; padding:1em 1em; } nav.tc-menubar .tt-tagcloud .tc-block-dropdown { max-height:initial; } /* PREVENT EXTRA SCROLLBAR ON MENUBAR POPUP */ </$list> </style> \end \define tagcloud_select_tags() <$set name="taglist" filter="[all[tiddlers+shadows]tags[]sort[]]"> <div class="tt-tagcloud select-tags"> Select tags: <$button class="tc-btn-invisible"> <span style={{{ [<config>get[taglist]else[font-weight:bold;]] }}}>none</span> <$action-setfield $tiddler=<<config>> $field=taglist /> </$button> | <$button class="tc-btn-invisible"> <span style={{{ [<config>get[taglist]match<taglist>then[font-weight:bold;]] }}}>all</span> <$action-setfield $tiddler=<<config>> $field=taglist $value=<<taglist>> /> </$button> <div style="clear:both;"> <$select tiddler=<<config>> field="taglist" size=<<listheight>> multiple> <$list filter="[enlist<taglist>]"><option><<currentTiddler>></option></$list> </$select> \end \define tagcloud_info() <$let tiddlers={{{ [enlist<taglist>tagging[]is[tiddler]count[]addsuffix[ tiddlers]] }}} shadows={{{ [enlist<taglist>tagging[]!is[tiddler]count[]addsuffix[ shadows]] }}} count={{{ [enlist<taglist>count[]] }}}> <div class="tt-tagcloud info"> <nobr> There <$text text={{{ [<count>match[1]then[is]else[are]] }}}/> ''<<count>> selected tag<$text text={{{ [<count>!match[1]then[s]] }}}/>'' </nobr> <nobr> <$text text={{{ [<tiddlers>!match[]] =[<shadows>!match[]] +[limit[1]then[tagging ]] }}}/> ''<<tiddlers>>'' <$text text={{{ [<tiddlers>!match[]then<shadows>!match[]then[ and ]] }}}/> ''<<shadows>>'' </nobr> </div> \end \define tagcloud_filter() <div class="tt-tagcloud filter"> ''Filter:'' @@font-size:90%;<<tagcloud_filtername '"' '"'>>@@ <div style="clear:both; position:relative" title="ESCAPE=clear filter"> <$keyboard key="escape" actions="<$action-setfield $tiddler=<<config>> $index=filter />"> <$edit-text tiddler=<<config>> index="filter" tag="textarea" class="filter" rows="1" minHeight="1.4em" placeholder="enter filter syntax here"/> <<tagcloud_selectfilter>> <$button class="tc-button tt-button clear" tooltip="clear filter"> {{$:/core/images/close-button}} <$action-setfield $tiddler=<<config>> $index=filter /> <$action-setfield $tiddler=<<config>> $index=filter_tid /> </$button> </$keyboard> </div> </div> \end \define tagcloud_filtername(prefix,suffix) <$tiddler tiddler=<<config>>> <$list filter="[<filtertid>!match[]] ~[{##filter_tid}get[filter]match{##filter}]"> <$wikify name=txt text={{{ [<filtertid>!match[]then<filtername>] ~[<config>getindex[filter_tid]get[description]] }}}> <$button class="tc-btn-invisible" style="width:fit-content;white-space:nowrap;" tooltip="edit this filter" message="tm-edit-tiddler" param={{{ [<filtertid>!match[]] ~[<config>getindex[filter_tid]] }}}> ''$prefix$<$text text=<<txt>>/>$suffix$'' </$button> </$wikify> </$list> \end \define tagcloud_selectfilter() <$let popid={{{ [<popup>addsuffix[/select]addsuffix<qualify>] }}}> <$button class="tc-button tt-button select" popup=<<popid>> tooltip="select a filter"> {{$:/core/images/down-arrow}} </$button> <$reveal state=<<popid>> type="popup"> <div class="tc-block-dropdown-wrapper"> <div class="tc-block-dropdown tc-edit-type-dropdown tt-shadowbox" style="position:absolute; top:0.25em; right:-1.5em; padding:0.5em;"> <$button class="tc-btn-invisible" style="float:right; margin-left:0.5em; padding:0;" tooltip="close"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> ''Select a filter'' <div class="tt-shadowbox inset" style="clear:both; padding:0.5em;"> <div style="max-height:30vh; overflow:auto; padding-right:0.5em; padding-bottom:2px; font-size:90%; line-height:1em;"> <<tagcloud_selectfilter_list>> </div> </div> </div> </div> </$reveal> \end \define tagcloud_selectfilter_list() <$let tv-show-missing-links="yes"> <$set name=items filter="[all[tiddlers]tag[$:/tags/Filter]!has[draft.of]]"> <$linkcatcher actions=" <$action-setfield $tiddler=<<config>> $index=filter $value={{{ [<navigateTo>get[filter]] }}}/> <$action-setfield $tiddler=<<config>> $index=filter_tid $value=<<navigateTo>>/> <$action-deletetiddler $tiddler=<<popid>>/>"> <$list filter="[enlist<items>count[]!match[0]]"> <div style="margin:0.5em;">__''Custom filters:''__</div> <$list filter="[enlist<items>] :sort[get[description]]"> <$link to=<<currentTiddler>> tooltip={{!!filter}}><$let tv-wikilinks="no"><$transclude field="description"/></$let></$link> </$list> </$list> <div style="margin:0.5em">__''Shadow filters:''__</div> <$list filter="[all[shadows]tag[$:/tags/Filter]]"> <$link to=<<currentTiddler>> tooltip={{!!filter}}><$let tv-wikilinks="no"><$transclude field="description"/></$let></$link> </$list> \end \define tagcloud_show() <!-- compute filters: all, filt --> <$set name="all" filter="[<show_t>match[yes]then<show_s>match[no]]" value="[all[tiddlers]]" emptyValue="[all[tiddlers+shadows]]"> <$set name="all" filter="[<show_t>match[no]then<show_s>match[yes]]" value="[all[shadows]!is[tiddler]]" emptyValue=<<all>>> <$let filt={{{ [<customfilter>!match[]] ~[<config>getindex[filter]search-replace:g[\n],[]trim[]!match[]] ~[<all>] }}}> <!-- get all and apply extra filter (if any) --> <$set name="allfilt" filter="[subfilter<all>subfilter<filt>]"> <!-- calculate the totals --> <$let tiddlers={{{ [enlist<allfilt>] :intersection[enlist<taglist>tagging[]] +[is[tiddler]count[]] :filter[<show_t>match[yes]] }}} shadows={{{ [enlist<allfilt>] :intersection[enlist<taglist>tagging[]] +[!is[tiddler]count[]] :filter[<show_s>match[yes]] }}} untagged_t={{{ [enlist<allfilt>] +[is[tiddler]!has[tags]] +[count[]] :filter[<show_t>match[yes]then<show_u>match[yes]] }}} untagged_s={{{ [enlist<allfilt>] +[!is[tiddler]!has[tags]] +[count[]] :filter[<show_s>match[yes]then<show_u>match[yes]] }}} untagged={{{ [<untagged_t>] [<untagged_s>] +[sum[]] }}} total={{{ [<tiddlers>] [<shadows>] [<untagged>] +[sum[]] }}}> <!-- show the options and cloud --> <div style={{{ [<maxcloudwidth>!match[]then[max-width:]addsuffix<maxcloudwidth>addsuffix[;]] }}}> <<tagcloud_show_options>> <<tagcloud_show_cloud>> </div> \end \define tagcloud_show_options() <$list filter="[<showoptions>!match[no]]"> <div class="tt-tagcloud options"> <nobr style="margin-right:1em;"> Show <$checkbox tiddler=<<config>> index="tiddlers" checked="yes" unchecked="no" default="yes"> tiddlers</$checkbox> <$checkbox tiddler=<<config>> index="shadows" checked="yes" unchecked="no" default="no" > shadows</$checkbox> <span style={{{ [<config>getindex[tiddlers]match[no]then<config>getindex[shadows]match[no]then[display:none;]] }}}> <$checkbox tiddler=<<config>> index="untagged" checked="yes" unchecked="no" default="yes"> untagged</$checkbox> </span> </nobr> <nobr> <span style={{{ [<config>getindex[tiddlers]match[no]then<config>getindex[shadows]match[no]then[display:none;]] }}}> Sort by <$radio tiddler=<<config>> index="order" value="name" default="name"> name </$radio> <$radio tiddler=<<config>> index="order" value="count" default="name"> count </$radio> </span> </nobr> <div style="float:right; margin-left:0.5em;"> <<tagcloud_show_options_togglecontrols>> <<tagcloud_show_options_popup>> </div> \end \define tagcloud_show_options_togglecontrols(label) <$let show={{{ [<temp>get[text]match[hide]then[show]else[hide]] }}} label={{{ [<__label__>!match[]] ~[<show>match[hide]then[◑]else[◐]] }}} tip={{{ [<show>addsuffix[ taglist and filter controls]] }}}> <$list filter="[<storyTiddler>match<here>] [<storyTiddler>match[$:/AdvancedSearch]] [<filtertid>match[]] +[limit[1]]"> <$button class="tc-btn-invisible" style="margin-left:0.5em; padding:0; transform:translateY(0.1em);" tooltip=<<tip>>> <<label>> <$action-setfield $tiddler=<<temp>> text=<<show>>/> </$button> \end \define tagcloud_show_options_popup() <$let popid={{{ [<popup>addsuffix[/settings]addsuffix<qualify>] }}} btnstyle="display:inline;padding:0;width:auto;"> <$button class="tc-btn-invisible" style="margin-left:0.5em;" popup=<<popid>> tooltip="TagCloud settings"> {{$:/core/images/options-button}} </$button> <$reveal type="popup" state=<<popid>> position="belowleft" class="tc-drop-down tt-drop-down tc-popup-keep tt-shadowbox" style="min-width:auto; margin-top:0.2em; padding:0.5em;"> <span style="float:right; margin-left:1em;"> <$button class="tc-btn-invisible" style=<<btnstyle>> tooltip="reset to defaults">{{$:/core/images/refresh-button}} <$action-setfield $tiddler=<<config>> $index=min /> <$action-setfield $tiddler=<<config>> $index=max /> <$action-setfield $tiddler=<<config>> $index=step /> <$action-setfield $tiddler=<<config>> $index=group/> <$action-setfield $tiddler=<<config>> $index=poph /> </$button> <$button class="tc-btn-invisible" style=<<btnstyle>> tooltip="close">{{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> </span> <$button class="tc-btn-invisible" style=<<btnstyle>> to="$:/config/TiddlyTools/TagCloud">~TagCloud settings</$button> <div class="tt-shadowbox inset" style="clear:both; text-align:right; margin:0; padding:0.5em;"> minimum size: <$edit-text tiddler=<<config>> index=min tag=input class=option default=<<default_min>> placeholder=<<default_min>> /><br> maximum size: <$edit-text tiddler=<<config>> index=max tag=input class=option default=<<default_max>> placeholder=<<default_max>> /><br> step size: <$edit-text tiddler=<<config>> index=step tag=input class=option default=<<default_step>> placeholder=<<default_step>> /><br> group size: <$edit-text tiddler=<<config>> index=group tag=input class=option default=<<default_group>> placeholder=<<default_group>>/><br> tag popup height: <$edit-text tiddler=<<config>> index=poph tag=input class=option default=<<default_poph>> placeholder=<<default_poph>> /><br> </div> </$reveal> \end \define tagcloud_show_cloud() <!-- define "subclass" of $:/core/ui/TagTemplate - adds <ol> formatting and subFilter=<<subfilter>> to "list-tagged-draggable" $macrocall --> \define src() $:/core/ui/TagTemplate \define old() <$macrocall $name="list-tagged-draggable" tag=<<currentTiddler>>/> \define new() <ol style="text-align:left;padding:0 0.5em 0 0;"><$macrocall $name="list-tagged-draggable" tag=<<currentTiddler>> subFilter=<<subfilter>>/></ol> <$let tag-template={{{ [<src>get[text]search-replace:g<old>,<new>] }}}> <!-- show the cloud --> <$list filter="[<total>!match[0]]"> <$list filter="[<show_t>match[yes]] [<show_s>match[yes]] [<show_u>match[yes]] +[limit[1]]"> <div class={{{ [[tt-tagcloud cloud]] [<hidebox>!match[yes]then[tt-shadowbox]] +[join[ ]] }}}> <<tagcloud_show_summary>> <div class="tt-tagcloud cloudscroll" style={{{ [<maxcloudwidth>!match[]then[max-width:]addsuffix<maxcloudwidth>addsuffix[;]] }}}> <$let min={{{ [<config>getindex[min]] ~[<default_min>] }}} max={{{ [<config>getindex[max]] ~[<default_max>] }}} step={{{ [<config>getindex[step]] ~[<default_step>] }}} group={{{ [<config>getindex[group]] ~[<default_group>] }}}> <$let subfilter="] :intersection[enlist<allfilt>"> <$set name="sortby" filter="[<show_s>match[no]]" value="[tagging[]is[tiddler]] :intersection[enlist<allfilt>] +[count[]]" emptyValue="[tagging[]] :intersection[enlist<allfilt>] +[count[]]"> <$set name="sortby" filter="[<order>match[name]]" value="[get[title]]" emptyValue=<<sortby>>> <$list filter="[enlist<taglist>] :sort:integer:reverse[subfilter<sortby>]"> <$let tiddlers={{{ [enlist<allfilt>] :intersection[<currentTiddler>tagging[]] +[is[tiddler]count[]] :filter[<show_t>match[yes]] }}} shadows={{{ [enlist<allfilt>] :intersection[<currentTiddler>tagging[]] +[!is[tiddler]count[]] :filter[<show_s>match[yes]] }}} count={{{ [enlist<tiddlers>] =[enlist<shadows>] +[sum[]] }}}> <$list filter="[<count>!match[0]]" variable="has_tiddlers"> <$let size={{{ [<count>divide<group>trunc[]multiply<step>add<min>min<max>] }}}><<tag-template>></$let> </$list> </$let> </$list> <<tagcloud_show_untagged>> \end \define tagcloud_show_summary() <$list filter="[<hidesummary>!match[yes]then<total>!match[0]]"> <$let tiddlers={{{ [<tiddlers>] [<untagged_t>] +[sum[]!match[0]addsuffix[ tiddlers]] }}} shadows={{{ [<shadows>] [<untagged_s>] +[sum[]!match[0]addsuffix[ shadows]] }}}> <span class="tt-tagcloud summary" title=<<filt>>> <div><nobr><<tagcloud_filtername "" ":">></nobr></div> <nobr> <$text text={{{ [<tiddlers>!match[]] [<shadows>!match[]] +[join[, ]] }}}/> <$text text={{{ [<tiddlers>!match[]] [<shadows>!match[]] +[count[]match[2]then<total>addprefix[(]addsuffix[ items)]] }}}/> </nobr> </span> <div style="height:0.5em;"/> \end \define tagcloud_show_untagged() <!-- define "subclass" of $:/core/ui/TagTemplate - replace "list-tagged-draggable" with numbered tiddler list --> \define src() $:/core/ui/TagTemplate \define old() <$macrocall $name="list-tagged-draggable" tag=<<currentTiddler>>/> \define new() <ol style="text-align:left;"><$list filter="[enlist<tids>]"><li><$link/></li></$list></ol> <$let fake-tag-template={{{ [<src>get[text]search-replace:g<old>,<new>] }}}> <!-- show fake tag pills for untagged tiddlers and shadows --> <$list filter="[<show_u>match[yes]]"> <$set name="untagged" filter="[enlist<allfilt>!has[tags]sort[]]"> <$set name="tiddlers" filter="[enlist<untagged>is[tiddler]] [enlist<untagged>is[missing]] -[all[shadows]!is[tiddler]]"> <$set name="shadows" filter="[enlist<untagged>] -[enlist<tiddlers>]"> <$list filter="[<tiddlers>!match[]] [<shadows>!match[]] +[limit[1]]"> <$list filter="[<show_t>match[yes]] [<show_s>match[yes]] +[limit[1]]"><div style="margin:0.5em;"/></$list> <$list filter="[<show_t>match[yes]]"><<tagcloud_show_untagged_items tiddlers>></$list> <$list filter="[<show_s>match[yes]]"><<tagcloud_show_untagged_items shadows >></$list> </$list> \end \define tagcloud_show_untagged_items(var) <$let tids=<<$var$>>> <$list filter="[enlist<tids>count[]!match[0]]" variable=count> <$let size={{{ [<count>divide<group>trunc[]multiply<step>add<min>min<max>] }}}> <$tiddler tiddler={{{ [[Untagged]] [<__var__>sentencecase[]] +[join[ ]] }}}><<fake-tag-template>></$tiddler> \end \define tagcloud_inline() <div class="tt-tagcloud"> <$let poph={{{ [<config>getindex[poph]] ~[<default_poph>] }}}><<tagcloud_styles>></$let> <$set name=taglist filter="[<config>get[taglist]enlist-input[]]"> <!-- PROCESS EXTERNAL PARAMS: filtername, showoptions, showtiddlers, showshadows, showuntagged, hidesummary, hidebox, and order If filtername is not specified or cannot be found, ignore all external params If showoptions=yes, ignore showtiddlers, showshadows, showuntagged, and order, and use a temporary config to store display options --> <$let filtertid={{{ [all[tiddlers+shadows]tag[$:/tags/Filter]] :filter[get[description]match<filtername>] }}} customfilter={{{ [<filtertid>get[filter]] }}} showoptions={{{ [<filtertid>!match[]then<showoptions>] }}} showtiddlers={{{ [<filtertid>!match[]then<showtiddlers>] }}} showshadows={{{ [<filtertid>!match[]then<showshadows>] }}} showuntagged={{{ [<filtertid>!match[]then<showuntagged>] }}} hidesummary={{{ [<filtertid>!match[]then<hidesummary>] }}} hidebox={{{ [<filtertid>!match[]then<hidebox>] }}} order={{{ [<filtertid>!match[]then<order>] }}} config={{{ [<showoptions>match[yes]then<temp>addsuffix[/config/]addsuffix<storyTiddler>addsuffix<qualify>] ~[<config>] }}} show_t={{{ [<showoptions>!match[yes]then<showtiddlers>!match[]] ~[<config>getindex[tiddlers]] ~[[yes]] }}} show_s={{{ [<showoptions>!match[yes]then<showshadows>!match[]] ~[<config>getindex[shadows]] ~[[no]] }}} show_u={{{ [<showoptions>!match[yes]then<showuntagged>!match[]] ~[<config>getindex[untagged]] ~[[yes]] }}} order={{{ [<showoptions>!match[yes]then<order>!match[]] ~[<config>getindex[order]] ~[[name]] }}}> <!-- SHOW CONTROLS --> <$list filter="[<storyTiddler>match<here>] [<storyTiddler>match[$:/AdvancedSearch]] [<filtertid>match[]] +[limit[1]]"> <$reveal state=<<temp>> type="nomatch" text="hide"> <<tagcloud_select_tags>> <div style="height:1.5em;"/> <div style="display:inline-block;"> <<tagcloud_info>> <div style="height:1em;"/> <<tagcloud_filter>> </div> <div style="clear:both;"/> <div style="height:1em;"/> </$reveal> </$list> <!-- SHOW THE TAG CLOUD --> <<tagcloud_show>> \end \define tagcloud_popup() \whitespace trim <style> .tc-topbar button.popup, nav.tc-menubar button.popup { filter:grayscale(1) opacity(0.5); } .tc-topbar button.popup:hover, nav.tc-menubar button.popup:hover { filter:grayscale(0) opacity(1.0); } </style> <span class="tt-tagcloud"> <$let poph={{{ [<config>getindex[poph]] ~[<default_poph>] }}}><<tagcloud_styles>></$let> <$let popid={{{ [<popup>addsuffix<qualify>] }}}> <$button class="tc-btn-invisible popup" style="padding:0;" popup=<<popid>> tooltip="TiddlyTools TagCloud"> <!-- {{$:/core/images/tag-button}} -->🏷 </$button> <$reveal state=<<popid>> type="nomatch" text="" style="font-size:initial; line-height:1em;"> <div class="tc-popup-handle tc-block-dropdown tt-shadowbox" style="padding:0.5em;"> <$button class="tc-btn-invisible" style="float:right; margin-left:1em; padding:0;" tooltip="close"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<popid>>/> </$button> <$button class="tc-btn-invisible" style="padding:0;" to="$:/AdvancedSearch" tooltip="open $:/AdvancedSearch TagCloud"> {{$:/core/images/tag-cloud}} ''~TiddlyTools ~TagCloud'' <$action-setfield $tiddler="$:/state/tab--1498284803" $value="TiddlyTools/Search/TagCloud"/> <$action-deletetiddler $tiddler=<<popid>>/> </$button> <div class="tt-shadowbox inset" style="clear:both; border-top:1px solid; padding:0.5em;"> <<tagcloud_inline>> </div> </div> </$reveal> \end <$reveal default=<<storyTiddler>> type=match text="" tag=span><<tagcloud_popup>> </$reveal> <$reveal default=<<storyTiddler>> type=nomatch text="" tag=div> <<tagcloud_inline>></$reveal>
\define config() $:/config/TiddlyTools/FindTags <style> .tt-findTags input { width:auto !important; } .tt-findTags .columns4 { display:block; column-count:4; column-gap:1em; } .tt-findTags .small { font-size:80%; line-height:1.3em; } .tt-findTags .nowrap { white-space:nowrap; } </style> <span class="tt-findTags"> find tiddlers tagged with: <p class="columns4 small nowrap"> <$list filter="[all[tiddlers+shadows]tags[]sort[]]"> <$checkbox tiddler=<<config>> index=<<currentTiddler>> checked=" " checkactions="""<$action-setfield $tiddler=<<config>> $index=<<currentTiddler>> $value=" " />""" uncheckactions="""<$action-setfield $tiddler=<<config>> $index=<<currentTiddler>> />"""> <$text text=<<currentTiddler>>/> </$checkbox><br> </$list> </p> <$wikify name="filter" text="""[all[tiddlers+shadows]<$list filter="[title<config>indexes[]]">tag[<<currentTiddler>>]</$list>] +[sort[]]"""> <$list filter="[<config>indexes[]count[]] -[[0]]"> <$set name="filter_text" filter="[<config>indexes[]join[ AND ]]"> <$wikify name="filter_text" text=<<filter_text>>> There are <$count filter=<<filter>>/> tiddlers tagged with <<filter_text>> </$wikify> </$set> <blockquote class="columns4 small"> <$list filter=<<filter>>><$link/><br></$list> </blockquote> </$list> </$wikify> <$wikify name="filter" text="""<$list filter="[title<config>indexes[]]">[all[tiddlers+shadows]tag[<<currentTiddler>>]] </$list> +[sort[]]"""> <$list filter="[<config>indexes[]count[]] -[[0]] -[[1]]"> <$set name="filter_text" filter="[<config>indexes[]join[ OR ]]"> <$wikify name="filter_text" text=<<filter_text>>> There are <$count filter=<<filter>>/> tiddlers tagged with <<filter_text>> </$wikify> </$set> <blockquote class="columns4 small"> <$list filter=<<filter>>><$link/><br></$list> </blockquote> </$list> </$wikify>
\define config() $:/config/TiddlyTools/FindTitles <style> .tt-findTitles input[type=text] { min-width:30vw; } .tt-findTitles input[type=checkbox] { width:auto !important; } .tt-findTitles .columns3 { display:block; column-count:3; column-gap:1em; } .tt-findTitles .small { font-size:80%; line-height:1.3em; } .tt-findTitles .nowrap { white-space:nowrap; } </style> <span class="tt-findTitles"> find titles containing: <$edit-text tiddler=<<config>> index="text" tag="input" focus="yes"/><br> in <$checkbox tiddler=<<config>> index="tiddler" checked="is[tiddler]" unchecked=""> tiddlers </$checkbox> <$checkbox tiddler=<<config>> index="shadow" checked="is[shadow]" unchecked=""> shadows </$checkbox> <$checkbox tiddler=<<config>> index="system" checked="is[system]" unchecked=""> system </$checkbox> <$checkbox tiddler=<<config>> index="tag" checked="is[tag]" unchecked=""> tags </$checkbox> <$checkbox tiddler=<<config>> index="missing" checked="is[missing]" unchecked=""> missing </$checkbox> <$checkbox tiddler=<<config>> index="orphan" checked="is[orphan]" unchecked=""> orphans </$checkbox> <$checkbox tiddler=<<config>> index="image" checked="is[image]" unchecked=""> images </$checkbox> <$checkbox tiddler=<<config>> index="binary" checked="is[binary]" unchecked=""> binaries </$checkbox> <$tiddler tiddler=<<config>>> <$wikify name="is" text="{{##tiddler}}{{##shadow}}{{##system}}{{##tag}}{{##missing}}{{##orphan}}{{##image}}{{##binary}}"> <$wikify name="filter" text="[<<is>>search:title[{{##text}}]sort[]]"> <$reveal default=<<is>> type="nomatch" text=""> <p/> __There are <$count filter=<<filter>>/> tiddlers matching ''<$text text=<<filter>>/>''__ <blockquote class="columns3 small nowrap"> <$list filter=<<filter>>><$link/><br></$list> </blockquote> </$reveal>
\define show(offset) \import TiddlyTools/Time/Calendar <$let yyyy={{{ [{!!year}!match[]else<now "YYYY">] }}} mm={{{ [{!!month}!match[]else<now "MM">] +[add<__offset__>] }}}> <$macrocall $name="showmonth" view="3-month" yyyy={{{ [<mm>compare:integer:lt[1]then<yyyy>subtract[1]] ~[<mm>compare:integer:gt[12]then<yyyy>add[1]] ~[<yyyy>] }}} mm={{{ [<mm>compare:integer:lt[1]then[12]add<mm>] ~[<mm>compare:integer:gt[12]then<mm>subtract[12]] ~[<mm>] }}}/> \end <<show -1>><<show 0>><<show +1>>
\define alarms_input() $:/temp/time/alarms_input/$(currentTiddler)$ \define alarms_msg() $:/temp/time/alarms_msg/$(freq)$/$(this_time)$ \define alarms_defaultmsg() BEEP! BEEP! BEEP! \define alarms_form() <style> .alarms_edit { width:3em; text-align:center; } .alarms_msg { width:calc(100% - 4.5em); } </style> <<alarms_form_freq>> at <<alarms_form_time>> <span style={{{ [<alarms_input>get[freq]match[yearly]then[position:absolute]else[display:none;]] }}}> on <<alarms_form_month>> <<alarms_form_day>></span> <span style={{{ [<alarms_input>get[freq]match[monthly]then[position:absolute]else[display:none;]] }}}> on the <<alarms_form_day>> day of the month</span> <span style={{{ [<alarms_input>get[freq]match[once]] ~[<alarms_input>!has[freq]] ~[[visibility:hidden;]] }}}> on <<alarms_form_month>> <<alarms_form_day>> <<alarms_form_year>></span> <div><<alarms_form_msg>> <<alarms_add>> <<alarms_reset>></div> \end \define alarms_form_freq() <$select tiddler=<<alarms_input>> field="freq" default="once" actions="<$action-deletefield $tiddler=<<alarms_input>> year month day/>"> <option value="once">Once</option><option value="yearly">Yearly</option><option value="monthly">Monthly</option><option value="daily">Daily</option> <$list filter="[all[shadows]prefix[$:/language/Date/Long/Day/]]"><option value={{!!text}}>{{!!text}}s</option></$list> </$select> \end \define alarms_form_time() <$edit-text tag="input" class="alarms_edit" tiddler=<<alarms_input>> field="hour" placeholder="hh"/> <$edit-text tag="input" class="alarms_edit" tiddler=<<alarms_input>> field="min" placeholder="mm"/> <$edit-text tag="input" class="alarms_edit" tiddler=<<alarms_input>> field="sec" placeholder="ss"/> \end \define alarms_form_month() <$select tiddler=<<alarms_input>> field="month" default=<<now 0MM>>> <$list filter="[range[12]]" variable="m"> <option value={{{ [<m>pad[2]] }}}>{{{ [<m>addprefix[$:/language/Date/Long/Month/]get[text]] }}}</option> </$list> </$select> \end \define alarms_form_day() <$let freq={{{ [<alarms_input>get[freq]] }}} year={{{ [<alarms_input>get[year]] ~[<now YYYY>] }}} month={{{ [<alarms_input>get[month]] ~[<now MM>] }}} leap={{{ [<year>remainder[4]match[0]then[yes]] }}} dpm={{{ [<leap>match[]then[31 28 31 30 31 30 31 31 30 31 30 31]] ~[[31 29 31 30 31 30 31 31 30 31 30 31]] }}} dm={{{ [<freq>match[monthly]then[31]] ~[<dpm>split[ ]nth<month>] }}}> <$select tiddler=<<alarms_input>> field="day" default=<<now 0DD>>> <$list filter="[range<dm>]" variable="d"> <option value={{{ [<d>pad[2]] }}}><<d>><$transclude tiddler={{{ [[$:/language/Date/DaySuffix/]addsuffix<d>] }}}/></option> </$list> </$select> \end \define alarms_form_year() <$edit-text tag="input" class="alarms_edit" tiddler=<<alarms_input>> field="year" default=<<now YYYY>> placeholder=<<now YYYY>>/> \end \define alarms_form_msg() <$edit-text tag="input" class="alarms_msg" tiddler=<<alarms_input>> field="msg" placeholder="enter a message"/> \end \define alarms_add() <$let notnum="[^0123456789-]" old={{{ [<alarms_input>get[old_alarm]] }}} freq={{{ [<alarms_input>get[freq]] ~[[once]] }}} year={{{ [<alarms_input>get[year]] ~[<now YYYY>] }}} month={{{ [<alarms_input>get[month]] ~[<now 0MM>] }}} day={{{ [<alarms_input>get[day]] ~[<now 0DD>] }}} hour={{{ [<alarms_input>get[hour]search-replace:g:regexp<notnum>,[]split[]first[2]join[]!match[]pad[2]] ~[[--]] }}} min={{{ [<alarms_input>get[min]search-replace:g:regexp<notnum>,[]split[]first[2]join[]!match[]pad[2]] ~[[--]] }}} sec={{{ [<alarms_input>get[sec]search-replace:g:regexp<notnum>,[]split[]first[2]join[]!match[]pad[2]] ~[[--]] }}} msg={{{ [<alarms_input>get[msg]] +[encodeuricomponent[]search-replace:g[%20],[ ]] }}} date={{{ =[<year>] =[<month>] =[<day>] +[join[-]] }}} date={{{ [<freq>match[once]then<date>] ~[<freq>match[yearly]then[....-]addsuffix<month>addsuffix[-]addsuffix<day>] ~[<freq>match[monthly]then[....-..-]addsuffix<day>] ~[[]] }}} time={{{ =[<hour>] =[<min>] =[<sec>] +[join[:]] }}} time={{{ [<time>!match[--:--:--]search-replace:g[--],[00]else<time>] }}} new={{{ =[<freq>] =[<date>] =[<time>] =[<msg>] +[join[;]] }}}> <$button class="tc-button tt-button" style="padding:1px 0.5em !important;width:2em;" tooltip={{{ [<old>match[]then[add alarm]else[update alarm]] }}}> <$transclude tiddler={{{ [<old>match[]then[new-button]else[done-button]] +[addprefix[$:/core/images/]] }}}/> <$list filter="[<old>match[]]" variable=none><$action-listops $field="alarms" $subfilter="[<new>]"/></$list> <$list filter="[<old>!match[]]" variable=none><$action-listops $field="alarms" $subfilter="[<new>] +[replace<old>]"/></$list> <$action-deletetiddler $tiddler=<<alarms_input>>/> </$button> \end \define alarms_reset() <$button class="tc-button tt-button" style="padding:1px 0.5em !important;width:2em;" tooltip="reset input"> {{$:/core/images/close-button}} <$action-deletetiddler $tiddler=<<alarms_input>>/> </$button> \end \define alarms_edit() <$button class="tc-button tt-button" tooltip="edit this alarm" actions=<<alarms_edit_actions>>> {{$:/core/images/edit-button}} </$button> \end \define alarms_edit_actions() <$let this_year=<<now "YYYY">> this_month=<<now "0MM">> this_day=<<now "0DD">> freq={{{ [<this_alarm>split[;]nth[1]split[@]nth[1]] }}} year={{{ [<this_alarm>split[;]nth[2]split[-]nth[1]] ~[<this_year>] +[!match[....]] }}} month={{{ [<this_alarm>split[;]nth[2]split[-]nth[2]] ~[<this_month>] +[!match[..]] }}} day={{{ [<this_alarm>split[;]nth[2]split[-]nth[3]] ~[<this_day>] +[!match[..]] }}} hour={{{ [<this_alarm>split[;]nth[3]split[:]nth[1]] +[!match[--]] }}} min={{{ [<this_alarm>split[;]nth[3]split[:]nth[2]] +[!match[--]] }}} sec={{{ [<this_alarm>split[;]nth[3]split[:]nth[3]] +[!match[--]] }}} msg={{{ [<this_alarm>split[;]nth[4]] +[decodeuricomponent[]] }}}> <$action-setfield $tiddler=<<alarms_input>> old_alarm=<<this_alarm>> freq=<<freq>> year=<<year>> month=<<month>> day=<<day>> hour=<<hour>> min=<<min>> sec=<<sec>> msg=<<msg>>/> \end \define alarms_delete() <$wikify name=txt text=<<alarms_show>>> <$let txt={{{ [<txt>trim[]search-replace:g:regexp[\s+],[ ]search-replace:g:regexp[\n],[]] }}} msg={{{ [<this_alarm>split[;]nth[4]!match[]decodeuricomponent[]] ~[<alarms_defaultmsg>] }}} msg={{{ [<msg>is[tiddler]addprefix[Action: ]] ~[<msg>] }}} out={{{ [<txt>] =[charcode[10]] [[ ]] [<msg>] =[charcode[10]] [[Are you sure you want to delete this alarm?]] +[join[]] }}}> <$button class="tc-button tt-button" tooltip="delete this alarm"> {{$:/core/images/delete-button}} <$action-confirm $message=<<out>>><$action-listops $field="alarms" $subfilter="-[<this_alarm>]"/></$action-confirm> </$button> \end \define alarms_deleteall() <$let out={{{ [[Are you sure you want to delete all alarms from]] =[charcode[10]] [[ ]] [{!!caption}!match[]else{!!title}] +[join[]] }}}> <$button class="tc-btn-invisible" tooltip="delete all alarms"> {{$:/core/images/delete-button}} <$list filter="[<currentTiddler>has[alarms]!has[draft.of]]"> <$action-confirm $message=<<out>>><$action-setfield alarms=""/><$action-deletetiddler $tiddler=<<alarms_input>>/></$action-confirm> </$list> </$button> \end \define alarms_heading() @@float:right;<<alarms_countdown_toggle>>@@ <span title={{{ [[open ]addsuffix<currentTiddler>] }}}><$link>''<$view field="caption">Alarms</$view>''</$link> <<alarms_deleteall>> \end \define alarms_list() <style> .alarms_table table, .alarms_table tr, .alarms_table td { border:0;padding:0;margin:0;vertical-align:top; } </style> <div class="alarms_table"> <table> <$list filter={{!!alarms}} variable="this_alarm"> <tr> <td><nobr><<alarms_edit>> <<alarms_delete>></nobr></td> <td style="text-align:right;padding:0 0.5em;"><nobr><<alarms_toggle>></nobr></td> <td> <$let msg={{{ [<this_alarm>split[;]nth[4]!match[]decodeuricomponent[]] ~[<alarms_defaultmsg>] }}}> <$button class="tc-btn-invisible" style="text-align:left;" tooltip="edit this alarm" actions=<<alarms_edit_actions>>> <$list filter="[<msg>is[tiddler]]">Action: <$link to=<<msg>>/></$list> <$list filter="[<msg>!is[tiddler]]"><$text text=<<msg>>/></$list> @@font-size:80%;''<<alarms_countdown>>''@@ </$button> </$let> </td> </tr> </$list> </table> </div> \end \define alarms_toggle() \whitespace trim <$let freq={{{ [<this_alarm>split[;]nth[1]split[@]first[]] }}} paused={{{ [<this_alarm>split[;]nth[1]split[@]rest[]] }}} date={{{ [<this_alarm>split[;]nth[2]] }}} time={{{ [<this_alarm>split[;]nth[3]] }}} msg={{{ [<this_alarm>split[;]nth[4]] }}}> <$reveal default=<<paused>> type="match" text=""> <$button class="tc-btn-invisible" tooltip="this alarm is active... click to pause" actions=<<alarms_pause>>> ''<<alarms_show>>'' {{$:/core/images/timestamp-on}} </$button> </$reveal> <$reveal default=<<paused>> type="match" text="paused"> <$button class="tc-btn-invisible" tooltip="this alarm is paused... click to resume" actions=<<alarms_resume>>> @@opacity:75%;''<<alarms_show>>''@@ {{$:/core/images/timestamp-off}} </$button> </$reveal> <$reveal default=<<paused>> type="match" text="expired"> <$button class="tc-btn-invisible" tooltip="this alarm has expired... click to edit" actions=<<alarms_edit_actions>>> @@opacity:75%;''<<alarms_show>>''@@ {{$:/core/images/done-button}} </$button> </$reveal> \end \define alarms_pause() <$let new_alarm={{{ =[<freq>addsuffix[@paused]] =[<date>] =[<time>] =[<msg>] +[join[;]] }}}> <$action-setfield $timestamp="no" $field="alarms" $value={{{ [{!!alarms}search-replace<this_alarm>,<new_alarm>] }}}/> \end \define alarms_expire() <$let new_alarm={{{ =[<freq>addsuffix[@expired]] =[<date>] =[<time>] =[<msg>] +[join[;]] }}}> <$action-setfield $timestamp="no" $field="alarms" $value={{{ [{!!alarms}search-replace<this_alarm>,<new_alarm>] }}}/> \end \define alarms_resume() <$let new_alarm={{{ =[<freq>] =[<date>] =[<time>] =[<msg>] +[join[;]] }}}> <$action-setfield $timestamp="no" $field="alarms" $value={{{ [{!!alarms}search-replace<this_alarm>,<new_alarm>] }}}/> \end \define alarms_show() <$let freq={{{ [<this_alarm>split[;]nth[1]split[@]first[]] }}} date={{{ [<this_alarm>split[;]nth[2]] }}} month={{{ [<this_alarm>split[;]nth[2]split[-]nth[2]trim:prefix[0]addprefix[$:/language/Date/Long/Month/]get[text]] }}} day={{{ [<this_alarm>split[;]nth[2]split[-]nth[3]trim:prefix[0]] }}} time={{{ [<this_alarm>split[;]nth[3]] }}} suffix={{{ [[$:/language/Date/DaySuffix/]addsuffix<day>get[text]] }}}> <$list filter="[<freq>match[once]]"><<date>> at</$list> <$list filter="[<freq>match[daily]]">Every day at</$list> <$list filter="[<freq>match[monthly]]"><<day>><<suffix>> of the month at</$list> <$list filter="[<freq>match[yearly]]">Every <<month>> <<day>><<suffix>> at</$list> <$list filter="[<freq>!match[once]then<freq>!match[daily]then<freq>!match[monthly]then<freq>!match[yearly]]"><<freq>>s at</$list> <$text text={{{ [<time>!match[--:--:--]] ~[[startup]] }}}/> \end \define alarms_countdown() <$list filter={{!!countdown}}> <$let freq={{{ [<this_alarm>split[;]nth[1]split[@]first[]] }}} inactive={{{ [<this_alarm>split[;]nth[1]split[@]rest[]] }}} date={{{ [<this_alarm>split[;]nth[2]search-replace:g[-],[]] }}} month={{{ [<this_alarm>split[;]nth[2]split[-]nth[2]] }}} day={{{ [<this_alarm>split[;]nth[2]split[-]nth[3]] }}} time={{{ [<this_alarm>split[;]nth[3]search-replace:g[-],[0]search-replace:g[:],[]] }}} tick={{{ [<now "YYYY0MM0DD0hh0mm0ss">] }}} weekly={{{ [range[0,6]add<now "YYYY0MM0DD">] :filter[add[1]format:date[DDD]match<freq>] }}} when={{{ [<freq>match[once]then<date>] ~[<freq>match[daily]then<now "YYYY0MM0DD">] ~[<freq>match[monthly]then<now "YYYY0MM">addsuffix<day>] ~[<freq>match[yearly]then<now "YYYY">addsuffix<month>addsuffix<day>] ~[<weekly>] [<time>] +[join[]] }}} next={{{ [<freq>match[once]then<date>] ~[<freq>match[daily]then<now "YYYY0MM0DD">add[1]] ~[<freq>match[monthly]then<now "YYYY0MM">add[1]addsuffix<day>] ~[<freq>match[yearly]then<now "YYYY">add[1]addsuffix<month>addsuffix<day>] ~[<weekly>add[7]] [<time>] +[join[]] }}} when={{{ [<when>subtract<tick>compare:integer:lt[0]then<next>] ~[<when>] }}} diff={{{ [<when>format:date[TIMESTAMP]] [<tick>format:date[TIMESTAMP]multiply[-1]] +[sum[]] +[divide[1000]trunc[]] }}}> <$let D={{{ [<diff>divide[86400]trunc[]pad[2]] }}} H={{{ [<diff>remainder[86400]divide[3600]trunc[]pad[2]] }}} M={{{ [<diff>remainder[3600]divide[60]trunc[]pad[2]] }}} S={{{ [<diff>remainder[60]pad[2]] }}}> <$list filter="[<diff>!prefix[-]then<inactive>match[]]">(<$list filter='[<D>!match[00]]'><<D>>:</$list><<H>>:<<M>>:<<S>>)</$list> \end \define alarms_countdown_toggle() <$let img={{{ [{!!countdown}match[]then[$:/core/images/preview-open]else[$:/core/images/preview-closed]] }}} tip={{{ [{!!countdown}match[]then[show]else[hide]] [[ countdown timers]] +[join[]] }}}> <$button class="tc-btn-invisible" tooltip=<<tip>>> <$transclude tiddler=<<img>>/> <$let time=<<now "DDD, MMM DDth YYYY 0hh:0mm:0ss">>>@@font-size:80%;''<<time>>''@@</$let> <$action-setfield $timestamp="no" countdown={{{ [{!!countdown}!match[yes]then[yes]] }}}/> </$button> \end \define alarms_tick(startup) <!-- CALLED EVERY SECOND FROM TiddlyTools/Time/Ticker --> <$let this_date=<<now "YYYY-0MM-0DD">> this_month=<<now "0MM">> this_day=<<now "DDD">> this_daynum=<<now "0DD">> this_time=<<now "0hh:0mm:0ss">>> <$list filter="[has[alarms]!has[draft.of]]"> <$list filter="[<currentTiddler>enlist{!!alarms}]" variable="this_alarm"> <$let freq={{{ [<this_alarm>split[;]nth[1]] }}} paused={{{ [<this_alarm>split[;]nth[1]split[@]rest[]] }}} date={{{ [<this_alarm>split[;]nth[2]] }}} month={{{ [<this_alarm>split[;]nth[2]split[-]nth[2]] }}} daynum={{{ [<this_alarm>split[;]nth[2]split[-]nth[3]] }}} time={{{ [<this_alarm>split[;]nth[3]] }}} msg={{{ [<this_alarm>split[;]nth[4]decodeuricomponent[]] }}} when={{{ [<date>search-replace:g[-],[]] [<time>search-replace:g[-],[0]search-replace:g[:],[]] [[000]] +[join[]] }}}> <$list filter="[<paused>match[]]" variable="active_alarm"> <$reveal default=<<freq>> type="match" text="once"> <$reveal default=<<when>> type="lt" text=<<now "YYYY0MM0DD0hh0mm0ss000">>><<alarms_expire>></$reveal> </$reveal> <$list filter="[<time>match<this_time>] ~[<__startup__>!match[]then<time>match[--:--:--]]" variable="check_alarm"> <$reveal default=<<freq>> type="match" text="once"> <$reveal default=<<date>> type="match" text=<<this_date>>><<alarms_trigger>></$reveal> </$reveal> <$reveal default=<<freq>> type="match" text="yearly"> <$reveal default=<<month>> type="match" text=<<this_month>>> <$reveal default=<<daynum>> type="match" text=<<this_daynum>>><<alarms_trigger>></$reveal> </$reveal> </$reveal> <$reveal default=<<freq>> type="match" text="monthly"> <$reveal default=<<daynum>> type="match" text=<<this_daynum>>><<alarms_trigger>></$reveal> </$reveal> <$reveal default=<<freq>> type="match" text="daily"><<alarms_trigger>></$reveal> <$reveal default=<<freq>> type="match" text=<<this_day>>><<alarms_trigger>></$reveal> </$list> </$list> </$let> </$list> </$list> \end <!-- CALLED ONCE AT STARTUP FROM TiddlyTools/Time/Ticker --> \define alarms_startup() <<alarms_tick startup>> \define alarms_trigger() <$let when=<<now "DDD, YYYY-0MM-0DD at 0hh:0mm:0ss">>> <$list filter="[<msg>is[tiddler]]" variable="do_action"><$transclude tiddler=<<msg>>/></$list> <$list filter="[<msg>!is[tiddler]]" variable="do_message"><<alarms_message msg:"""$(msg)$""">></$list> \end \define alarms_message(msg) <$reveal state=<<alarms_msg>> type="match" text=""> <$action-setfield $tiddler=<<alarms_msg>> subtitle="""<span style="font-size:1.5em;"><$text text={{{ [[$(currentTiddler)$]get[caption]else[$(currentTiddler)$]] }}}/></span>""" text={{{ [<when>] [[<br> <br>@@font-size:2em;]] [[$msg$]!match[]else<alarms_defaultmsg>] [[@@]] +[join[]] }}} footer=<<alarms_message_footer>>/> <$action-sendmessage $message="tm-modal" $param=<<alarms_msg>>/> </$reveal> \end \define alarms_message_footer() \define tid() $(currentTiddler)$ \define del() <$action-deletetiddler $tiddler=<<currentTiddler>>/> <$button class="tc-button tt-button" message="tm-close-tiddler">view<<del>> <$list filter="[[$:/StoryList]!contains<tid>]"><$action-listops $subfilter="[<tid>] +[putfirst[]]"/></$list> <$action-navigate $to=<<tid>>/> </$button> <$button class="tc-button tt-button" message="tm-close-tiddler">close<<del>></$button> \end @@display:inline-block;<nobr><<alarms_heading>><br><<alarms_form>></nobr>@@ <$list filter="[<currentTiddler>has[alarms]]"><<alarms_list>></$list>
\define tt_time_config() $:/config/TiddlyTools/AutoSaver \define exclude() -[prefix[$:/boot]] -[[$:/build]] -[[$:/core]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/library/sjcl.js]] -[[$:/StoryList]] -[[$:/temp/info-plugin]] \define tids() [all[tiddlers]!is[system]sort[]] [all[tiddlers]is[system]sort[]] $(exclude)$ -[prefix[$:/temp/time]] \define exporters() $:/core/templates/exporters/ \define -----() FACTORY DEFAULTS \define saveH() 00 \define saveM() 30 \define saveS() 00 \define styles() <style> .tt-autosaver { display:inline-block; } .tt-autosaver-dropdown { color:$(fgcolor)$;padding:0.5em;border:1px solid;border-radius:0.5em; } .tt-autosaver-select { width:100%;overflow:auto;border:1px solid;border-top:0;border-bottom:0; } .tt-autosaver-select_hdr { text-align:center;border-bottom:1px solid;font-weight:bold; } .tt-autosaver-select option { overflow:hidden;text-overflow:ellipsis; } .tt-autosaver-filters { width:calc(100% - 4.50em);background:$(bgcolor)$;border:0;font-weight:bold;overflow:hidden;text-overflow:ellipsis; } .tt-autosaver-filters_btn { width:1.50em; background:$(bgcolor)$;border:0;font-weight:bold;padding:0; } .tt-autosaver-edit { width:calc(100% - 4.75em);background:$(bgcolor)$;border:0;font-weight:bold;height:100%; } .tt-autosaver-format { width:4.75em; background:$(bgcolor)$;border:0;font-weight:bold;border-left:1px solid; } .tt-autosaver-status { margin-top:0.5em;padding:0.5em 0.75em;font-size:80%;line-height:1.2em;text-align:left; border:1px solid;box-shadow: 0.3em 0.3em 0.6em rgba(63,63,63,0.8);border-radius:0.5em;background:$(bgcolor)$; } .tt-autosaver-status_clear { float:right;margin-left:0.25em;fill:$(fgcolor)$; } .tt-autosaver-status_msg { text-align:left;line-height:1.2em;color:$(fgcolor)$; } .tt-autosaver-status_list { max-height:11.5em;width:19.5em;line-height:1em;overflow:auto;margin:0.25em 0;padding-right:0.25em; } .tt-autosaver-status_item { padding-bottom:0.15em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis; } .tt-autosaver-countdown { width:2.5em; text-align:center; } </style> \end \define startup() <$let saveH={{{ [<tt_time_config>get[hours]else<saveH>] }}} saveM={{{ [<tt_time_config>get[mins]else<saveM>] }}} saveS={{{ [<tt_time_config>get[secs]else<saveS>] }}}> <$macrocall $name="setCountdown" H=<<saveH>> M=<<saveM>> S=<<saveS>>/> <$list filter={{{ [<tt_time_config>get[startup]match[yes]] }}}><$action-setfield $tiddler=<<temp>> go="go"/></$list> \end \define autosaver_tick() <!-- called from TiddlyTools/Time/Ticker --> <$let temp="$:/temp/time/AutoSaver"> <$list filter="[<temp>get[go]match[go]then<temp>]"> <<setRemaining>> <$list filter="[<temp>get[text]match[1]then<temp>]"> <$action-setfield $tiddler=<<temp>> go='stop'/> <$let here={{{ [<temp>split[/]last[]] }}}> <<done>> </$let> </$list> <$list filter="[<temp>get[text]!match[1]then<temp>]"> <$action-setfield $tiddler=<<temp>> text={{{ [<temp>get[text]subtract[1]] }}}/> </$list> </$list> \end \define setRemaining() <$tiddler tiddler=<<temp>>> <$let R={{{ [<temp>get[text]subtract[1]] }}}> <$action-setfield hours={{{ [<R>divide[3600]trunc[]pad[2]] }}} mins={{{ [<R>remainder[3600]divide[60]trunc[]pad[2]] }}} secs={{{ [<R>remainder[60]trunc[]pad[2]] }}}/> \end \define setCountdown(H:"00",M:"00",S:"00") <$tiddler tiddler=<<temp>>> <$action-setfield text={{{ [[$H$]multiply[60]add[$M$]multiply[60]add[$S$]] }}} hours={{{ [[$H$]pad[2]] }}} mins={{{ [[$M$]pad[2]] }}} secs={{{ [[$S$]pad[2]] }}} done=<<done>>/> \end \define done() <$let saveH={{{ [<tt_time_config>get[hours]else<saveH>] }}} saveM={{{ [<tt_time_config>get[mins]else<saveM>] }}} saveS={{{ [<tt_time_config>get[secs]else<saveS>] }}} ask={{{ [<tt_time_config>get[ask]else[yes]] }}}> <$reveal default=<<ask>> type="match" text="no"> <!-- SAVE AND CONTINUE --> <<autosaver_actions>> <$macrocall $name="setCountdown" H=<<saveH>> M=<<saveM>> S=<<saveS>>/> <$action-setfield $tiddler=<<temp>> go="go"/> </$reveal> <$reveal default=<<ask>> type="nomatch" text="no"> <!-- PAUSE and ASK TO SAVE, THEN CONTINUE --> <$action-setfield $tiddler=<<temp>> go="stop"/> <$action-setfield $tiddler={{{ [<temp>addsuffix[/ask]] }}} subtitle="""<$text text="AutoSaver"/>""" text=<<done_text>> footer=<<done_footer>>/> <$action-sendmessage $message="tm-modal" $param={{{ [<temp>addsuffix[/ask]] }}}/> </$reveal> \end \define done_text() @@font-size:2em;OK to auto save?@@<p/> <$checkbox tiddler=<<tt_time_config>> field="ask" default="yes" unchecked="yes" checked="no"> ''do not ask again'' </$checkbox> \end \define done_footer() \import TiddlyTools/Time/AutoSaver <$let temp="$:/temp/time/AutoSaver" saveH={{{ [<tt_time_config>get[hours]else<saveH>] }}} saveM={{{ [<tt_time_config>get[mins]else<saveM>] }}} saveS={{{ [<tt_time_config>get[secs]else<saveS>] }}}> <$button class="tc-button tt-button" message="tm-close-tiddler"> cancel <$macrocall $name="setCountdown" H=<<saveH>> M=<<saveM>> S=<<saveS>>/> <$action-setfield $tiddler=<<temp>> go="go"/> <$action-deletetiddler $tiddler={{{ [<temp>addsuffix[/ask]] }}}/> </$button> <$button class="tc-button tt-button" message="tm-close-tiddler"> save <<autosaver_actions>> <$macrocall $name="setCountdown" H=<<saveH>> M=<<saveM>> S=<<saveS>>/> <$action-setfield $tiddler=<<temp>> go="go"/> <$action-deletetiddler $tiddler={{{ [<temp>addsuffix[/ask]] }}}/> </$button> \end \define settings() <$let popid=<<qualify "$:/temp/time/AutoSaver/settings">>> <$tiddler tiddler=<<tt_time_config>>> <$button popup=<<popid>> class="tc-btn-invisible" style="width:100%;text-align:left;" tooltip="set AutoSaver timer and actions"> <<status_clear>> @@vertical-align:text-top; ~AutoSaver {{$:/core/images/options-button}} <<save>>@@ <<status_timer>> </$button> <$reveal state=<<popid>> type="popup" position="below"> <div class="tc-block-dropdown tt-autosaver-dropdown tc-popup-keep"> <div style="float:right;font-size:80%;fill:initial;"><<settings_reset>> <<settings_done>></div> ~AutoSaver settings: <div class="tt-shadowbox inset" style="clear:both;margin-top:0.25em;padding:0.5em;border:1px solid;border-radius:0.5em;"> <div> countdown timer <$edit-text field="hours" tag="input" class="tt-autosaver-countdown" default=<<saveH>> placeholder=<<saveH>>/> <$edit-text field="mins" tag="input" class="tt-autosaver-countdown" default=<<saveM>> placeholder=<<saveM>>/> <$edit-text field="secs" tag="input" class="tt-autosaver-countdown" default=<<saveS>> placeholder=<<saveS>>/> </div> <div><$checkbox field="startup" checked="yes" unchecked="no" default="no" > begin countdown at startup </$checkbox></div> <div><$checkbox field="ask" checked="yes" unchecked="no" default="yes"> ask before saving/exporting </$checkbox></div> <div><$checkbox field="file" checked="yes" unchecked="no" default="yes"> save the file </$checkbox></div> <div><$checkbox field="changes" checked="yes" unchecked="no" default="no" > export changes </$checkbox><<changes>></div> <div><$checkbox field="export" checked="yes" unchecked="no" default="no" checkactions=<<export_init>>> export tiddlers </$checkbox><<export>></div> </div> </div> </$reveal> \end \define settings_reset() <$button class="tc-button tt-button" style="display:inline;height:1.5em;padding:0 0.5em;" tooltip="use default settings">{{$:/core/images/refresh-button}} <$action-confirm $message="Are you sure you want to reset all AutoSaver settings?"> <$list filter="[<tt_time_config>fields[]]" variable="fieldname"> <$action-setfield $tiddler=<<tt_time_config>> $field=<<fieldname>>/> </$list> <$macrocall $name="setCountdown" H=<<saveH>> M=<<saveM>> S=<<saveS>>/> <$action-deletefield $tiddler=<<temp>> go text/> <$action-deletetiddler $tiddler=<<popid>>/> \end \define settings_done() <$button class="tc-button tt-button" style="display:inline;height:1.5em;padding:0 0.5em;" tooltip="apply settings">{{$:/core/images/done-button}} <$let saveH={{{ [<tt_time_config>get[hours]else<saveH>] }}} saveM={{{ [<tt_time_config>get[mins]else<saveM>] }}} saveS={{{ [<tt_time_config>get[secs]else<saveS>] }}}> <$action-setfield $timestamp="no" hours=<<saveH>>/> <$action-setfield $timestamp="no" mins=<<saveM>>/> <$action-setfield $timestamp="no" secs=<<saveS>>/> <$macrocall $name="setCountdown" H=<<saveH>> M=<<saveM>> S=<<saveS>>/> <$action-setfield $tiddler=<<temp>> go="go"/> <$action-deletetiddler $tiddler=<<popid>>/> \end \define save() <$button class="tc-btn-invisible" style="margin-left:0.25em;" tooltip="save/export now" actions=<<autosaver_actions>>> <span class="tc-dirty-indicator"><$transclude tiddler="$:/core/images/save-button-dynamic">{{$:/core/images/save-button}}</$transclude></span> </$button> \end \define changes() \whitespace trim <$reveal state="!!changes" type="match" text="yes"> <div style="margin-bottom:0.25em;font-size:80%;line-height:1em;border:1px solid gray;"> <$edit-text class="tt-autosaver-edit" field="changes_filename" tag="input" size="20" default="changes" placeholder="changes"/> <$select class="tt-autosaver-format" field="changes_format" default="JsonFile"> <option value="JsonFile">.json</option> <option value="CsvFile">.csv</option> <option value="StaticRiver">.html</option> </$select> \end \define export() <$reveal state="!!export" type="match" text="yes"> <span style="margin-bottom:0.25em;font-size:80%;line-height:1em;"> <$set name="filt" filter="[{!!filter}!match[]]" value={{{ [{!!filter}get[filter]] }}} emptyValue=<<tids>>> <$set name="all" filter=<<filt>>> <span style="float:right;"> <$button class="tc-button tt-button" style="display:inline;height:1.5em;padding:0 0.5em;">none <<export_none>></$button> <$button class="tc-button tt-button" style="display:inline;height:1.5em;padding:0 0.5em;">all <<export_all>> </$button> </span> <div style="clear:both;"><<export_filters>> <<export_tiddlers>> <<export_target>> \end \define export_init() <$list filter="[{!!export_tiddlers}match[]]" variable="_"><<export_all>></$list> \define export_none() <$action-setfield export_tiddlers=""/> \define export_all() <$tiddler tiddler=<<tt_time_config>>> <$set name="filt" filter="[{!!filter}!match[]]" value={{{ [{!!filter}get[filter]] }}} emptyValue=<<tids>>> <$set name="all" filter=<<filt>>> <$action-setfield export_tiddlers=<<all>>/> \end \define export_filters() \whitespace trim <$wikify name="description" text={{{ [{!!filter}get[description]] }}}> <div title=<<description>> style="border:1px solid gray;background:$(bgcolor)$;"> <$select class="tt-autosaver-select tt-autosaver-filters" field="filter" default="" actions=<<export_all>>> <option value="" title="All tiddlers">All tiddlers</option> <$list filter="[all[tiddlers+shadows]tag[$:/tags/Filter]]"> <$wikify name="description" text={{{ [<currentTiddler>get[description]else<currentTiddler>] }}}> <option value=<<currentTiddler>> title=<<description>>><<description>></option> </$wikify> </$list> </$select> <$tiddler tiddler={{!!filter}}> <$button class="tc-btn-invisible tt-autosaver-filters_btn" style="display:inline !important;" tooltip="clone this filter"> {{$:/core/images/clone-button}} <$action-sendmessage $message="tm-new-tiddler" $param={{{ [<currentTiddler>!match[]else[New Filter]] }}} filter={{{ [<currentTiddler>!match[]then{!!filter}else<tids>] }}} description="" tags={{{ [<currentTiddler>!match[]then{!!tags}else[$:/tags/Filter]] }}}/> </$button> <$button class="tc-btn-invisible tt-autosaver-filters_btn" style="display:inline !important;" tooltip="edit this filter"> <$list filter="[<currentTiddler>is[tiddler]]" emptyMessage="@@fill:gray;{{$:/core/images/edit-button}}@@"> @@fill:initial;{{$:/core/images/edit-button}}@@ <$action-sendmessage $message="tm-edit-tiddler"/> </$list> </$button> <$button class="tc-btn-invisible tt-autosaver-filters_btn" style="display:inline !important;" tooltip="delete this filter"> <$list filter="[<currentTiddler>is[tiddler]]" emptyMessage="@@fill:gray;{{$:/core/images/delete-button}}@@"> @@fill:initial;{{$:/core/images/delete-button}}@@ <$action-confirm $message="Are you sure you want to delete this filter?"> <$action-sendmessage $message="tm-delete-tiddler" $param=<<currentTiddler>>/> <$action-setfield $tiddler=<<tt_time_config>> filter="" export_tiddlers=""/> </$action-confirm> </$list> </$button> \end \define export_tiddlers() \whitespace trim <$select class="tt-autosaver-select" field="export_tiddlers" size="10" multiple="multiple"> <option value="" disabled="disabled" class="tt-autosaver-select_hdr"> {{{ [enlist<all>count[]addsuffix[ tiddlers, ]] [enlist{!!export_tiddlers}count[]addsuffix[ selected]] }}} </option> <$list filter=<<filt>>><option title=<<currentTiddler>>><<currentTiddler>></option></$list> </$select> \end \define export_target() \whitespace trim <div style="border:1px solid gray;"> <$set name="target" filter="[{!!filter}!match[]]" value={{{ [{!!filter}split[/]last[]] }}} emptyValue="tiddlers"> <$set name="target" filter="[<target>multiply[1]!match[0]]" value={{{ [{!!filter}get[description]] }}} emptyValue=<<target>>> <$edit-text field="export_filename" tag="input" class="tt-autosaver-edit" size="20" default={{{ [<target>slugify[]] }}} placeholder="tiddlers"/> <$select class="tt-autosaver-format" field="export_format" default="JsonFile"> <option value="JsonFile">.json</option> <option value="CsvFile">.csv</option> <option value="StaticRiver">.html</option> </$select> \end \define autosaver_actions() <$let time=<<now "mmm 0DD YYYY 0hh:0mm:0ss">> timestamp=<<now "YYYY0MM0DD0hh0mm0ss">> lf={{{ [charcode[10]] }}}> <$tiddler tiddler={{{ [<temp>addsuffix[/status]] }}}> <$reveal stateTitle=<<tt_time_config>> stateField="file" type="nomatch" text="no"> <<autosaver_actions_file>> </$reveal> <$reveal stateTitle=<<tt_time_config>> stateField="changes" type="match" text="yes"> <<autosaver_actions_changes>> </$reveal> <$reveal stateTitle=<<tt_time_config>> stateField="export" type="match" text="yes"> <<autosaver_actions_export>> </$reveal> </$tiddler> \end \define autosaver_actions_file() <$importvariables filter="TiddlyTools/SaveChanges"> <$list filter="[<show_modal>is[blank]]" emptyMessage=<<show_modal>>><$action-sendmessage $message="tm-save-wiki"/></$list> </$importvariables> <$set name="list" filter="[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$"> <$let msg={{{ [<time>addsuffix[ ''Save ~TiddlyWiki file'']] }}}> <$action-setfield text={{{ [{!!text}addsuffix<status_details "_file">addsuffix[<br>]addsuffix<lf>] }}}/> \end \define autosaver_actions_changes() <$set name="list" filter="[haschanged[]] $(exclude)$ -[prefix[$:/temp/time]]"> <$let format={{{ [<tt_time_config>get[changes_format]else[JsonFile]] +[addprefix<exporters>] }}} filename={{{ [<tt_time_config>get[changes_filename]else[changes]] +[slugify[]] }}} target={{{ [<format>get[extension]addprefix<filename>] }}} num={{{ [enlist<list>count[]] }}} plural={{{ [<num>!match[1]then[ changes ]else[ change ]] }}} msg={{{ [<time>addsuffix[ ''Export ]addsuffix<num>addsuffix<plural>addsuffix['']] }}}> <$list filter="[<num>!match[0]]" variable="has_changes_to_save"> <$action-sendmessage $message="tm-download-file" $param=<<format>> exportFilter=<<list>> filename=<<target>>/> <$action-setfield text={{{ [{!!text}addsuffix<status_details "_changes">addsuffix[<br>]addsuffix<lf>] }}}/> </$list> \end \define autosaver_actions_export() <$set name="target" filter="[<tt_time_config>get[filter]!match[]]" value={{{ [<tt_time_config>get[filter]split[/]last[]] }}} emptyValue="tiddlers"> <$set name="target" filter="[<target>multiply[1]!match[0]]" value={{{ [<tt_time_config>get[filter]get[description]] }}} emptyValue=<<target>>> <$let format={{{ [<tt_time_config>get[export_format]else[JsonFile]] +[addprefix<exporters>] }}} filename={{{ [<tt_time_config>get[export_filename]else<target>] +[slugify[]] }}} target={{{ [<format>get[extension]addprefix<filename>] }}} list={{{ [<tt_time_config>get[export_tiddlers]] }}} num={{{ [enlist<list>count[]] }}} plural={{{ [<num>!match[1]then[ tiddlers ]else[ tiddler ]] }}} msg={{{ [<time>addsuffix[ ''Export ]addsuffix<num>addsuffix<plural>addsuffix['']] }}}> <$list filter="[<num>!match[0]]" variable="has_tiddlers_to_save"> <$action-sendmessage $message="tm-download-file" $param=<<format>> exportFilter=<<list>> filename=<<target>>/> <$action-setfield text={{{ [{!!text}addsuffix<status_details "_export">addsuffix[<br>]addsuffix<lf>] }}}/> </$list> \end \define status() <div style="clear:both;"> <$list filter="[<temp>addsuffix[/status]is[tiddler]]"> <div class="tt-autosaver-status tt-shadowbox"><$transclude/></div> \end \define status_details(id) <$let state="$(currentTiddler)$!!$(timestamp)$$id$" list="""$(list)$"""> <$reveal state=<<state>> type="match" text=""> <$button class="tc-btn-invisible tt-autosaver-status_msg" style="width:100%;" tooltip="show details"> <span style="float:right;margin-left:0.25em;">{{$:/core/images/down-arrow}}</span>$(msg)$ <$action-setfield $field="$(timestamp)$$id$" $value="show"/> </$button> </$reveal> <$reveal state=<<state>> type="nomatch" text=""> <$button class="tc-btn-invisible tt-autosaver-status_msg" style="width:100%;" tooltip="hide details"> <span style="float:right;margin-left:0.25em;">{{$:/core/images/close-button}}</span>$(msg)$ <div class="tt-shadowbox inset" style="margin:0.25em 0;padding:0.25em;border:1px solid;border-radius:0.5em;"> <ol class="tt-autosaver-status_list"> <$list filter=<<list>>> <li><div class="tt-autosaver-status_item"><$link tooltip=<<currentTiddler>>/></div></li> </$list> </ol> </div> <$action-deletefield $field="$(timestamp)$$id$"/> </$button> </$reveal> </$let> \end \define status_clear() <$list filter={{{ [<temp>addsuffix[/status]is[tiddler]] }}}> <$button class="tc-btn-invisible tt-autosaver-status_clear" tooltip="clear messages">{{$:/core/images/delete-button}} <$action-deletetiddler $tiddler={{{ [<temp>addsuffix[/status]] }}}/> </$button> \end \define status_timer() <$let time={{{ =[<temp>get[hours]else<saveH>] =[<temp>get[mins]else<saveM>] =[<temp>get[secs]else<saveS>] +[join[:]] }}}> <span style="padding:0 0.25em;"><$macrocall $name="pause" class="tc-btn-invisible" label1=<<time>> label2=<<time>>/></span> <$list filter="[<temp>!has[go]]" ><<start>></$list> <$list filter="[<temp>get[go]match[go]]" ><<stop>> </$list> <$list filter="[<temp>get[go]match[stop]]"><<pause>></$list> \end \define start(class:"tc-button tt-button",label:"start") <$tiddler tiddler=<<temp>>> <$let H={{!!hours}} M={{!!mins}} S={{!!secs}}> <$button class=<<__class__>> tooltip="start countdown"> <$list filter="[<H>add<M>add<S>!match[0]]" variable="if-not-zeros"> <$list filter="[<temp>{!!go}!match[go]]" variable="if-not-countdown"> <<__label__>><$macrocall $name="setCountdown" H=<<H>> M=<<M>> S=<<S>>/><$action-setfield go="go"/> </$list> </$list> </$button> \end \define stop(class:"tc-button tt-button",label:"stop") <$tiddler tiddler=<<temp>>> <$let saveH={{{ [<tt_time_config>get[hours]else<saveH>] }}} saveM={{{ [<tt_time_config>get[mins]else<saveM>] }}} saveS={{{ [<tt_time_config>get[secs]else<saveS>] }}}> <$button class=<<__class__>> tooltip="stop/reset countdown"> <<__label__>><$macrocall $name="setCountdown" H=<<saveH>> M=<<saveM>> S=<<saveS>>/><$action-deletefield go text/> </$button> \end \define pause(class:"tc-button tt-button",label1:"pause",label2:"resume") <$tiddler tiddler=<<temp>>> <$let tip={{{ [{!!go}match[go]then[pause]] ~[{!!go}match[stop]then[resume]] +[!match[]addsuffix[ countdown]] }}}> <$button class=<<__class__>> tooltip=<<tip>>> <$list filter="[<temp>get[text]compare:integer:gt[1]]" variable="has-countdown" emptyMessage="@@color:gray;<<__label1__>>@@"> <$list filter="[{!!go}match[]then<temp>]"> @@color:gray;<<__label1__>>@@ </$list> <$list filter="[{!!go}match[go]then<temp>]"> <<__label1__>><$action-setfield go="stop"/></$list> <$list filter="[{!!go}match[stop]then<temp>]"><<__label2__>><$action-setfield go="go" /></$list> </$list> </$button> \end <div class="tt-autosaver authortools"> <$let temp="$:/temp/time/AutoSaver"> <$wikify name="fgcolor" text="<<colour foreground>>"> <$wikify name="bgcolor" text="<<colour background>>"> <<styles>><<startup>><<settings>><<status>>
\define tt_calendar_config() $:/config/TiddlyTools/Calendar \define calendar_popup() $:/state/popup/calendar \define calendar_state() $(calendar_popup)$/$(here)$ \define calendar_alarms_add_popup() $(calendar_popup)$/alarms/add/$(date)$ \define calendar_events_add_popup() $(calendar_popup)$/events/add/$(date)$ \define calendar_events_menu_popup() $(calendar_popup)$/events/menu/$(currentTiddler)$ \define calendar_colors_popup() $(calendar_popup)$/colors/$(currentTiddler)$ \define calendar_boxsize() 2.5em \define calendar_barheight() 0.5em \define calendar_yearsize() font-size:$(yearsize)$;line-height:1em; \define calendar_monthsize() font-size:$(monthsize)$;line-height:1em; \define calendar_boxshadow() border:1px solid;box-shadow:0.3em 0.3em 0.6em rgba(0,0,0,0.5); \define calendar_listhmax() calc($(calendar_boxsize)$ * 7 + 2px); \define calendar_listvmax() calc($(calendar_boxsize)$ * 6 - 1em); \define calendar_listframe() position:relative;padding:0.5em 0.5em 0.5em 0.5em;margin-top:0.25em;width:$(width)$;border-radius:0.5em;$(calendar_boxshadow)$; \define calendar_listbar() position:relative;margin:0.5em 0.25em calc($(calendar_barheight)$ + 0.5em) 0em; \define calendar_listscroll() white-space:nowrap;padding-right:0.25em;overflow:hidden auto;max-height:$(height)$ \define calendar_listitems() font-size:calc($(textsize)$ * 0.75);line-height:1.2em;margin-bottom:0.5em;page-break-inside:avoid; \define calendar_gridframe() display:inline-block;white-space:nowrap;$(calendar_boxshadow)$;background:$(background)$; \define calendar_gridbox() position:relative;display:inline-block !important;overflow:hidden;width:$(calendar_boxsize)$;height:$(calendar_boxsize)$;border:1px solid;background:$(foreground)$; \define calendar_numstyle() position:absolute;display:inline-block;z-index:1;transform:translate(-50%,-50%);top:45%;left:50%;color:$(numbers)$; \define calendar_popupstyle() min-width:auto;width:max-content;padding:0.5em;font-size:calc($(textsize)$ * 0.80);line-height:1em; \define calendar_colorbar() position:absolute;bottom:0;left:0;width:calc(100% + 2px);height:$(calendar_barheight)$;border-top:1px solid; \define calendar_colorbox() display:inline-block;vertical-align:top;outline:1px solid;height:$(calendar_barheight)$;width:$(colorwidth)$;background:$(color)$; \define calendar_itembox() display:inline-block !important;width:1em;height:1em;padding:0;border:1px solid gray;border-radius:0%;background:$(color)$; \define calendar_adminpanel() min-width:calc($(sidebarwidth)$ - 5em); \define calendar_admintable() width:$(width)$;max-height:$(height)$;overflow:auto;font-size:80%;line-height:1em;white-space:normal; \define test(msg) <$list filter="[{TiddlyTools/Time/Tester!!timers}match[yes]]"><center><<now "0hh:0mm:0ss.0XXX">> $msg$</center></$list> \define calendar() <$list filter="[<preview>match[yes]]"> <style> @media print { .calendar_hideForPrint { display:none; } } body.tc-body.tc-single-tiddler-window { padding:1em; background-color:white !important; background-image:none !important; } </style> </$list> <$let thisyear=<<now "YYYY">> thismonth=<<now "MM">>> <$let here={{{ [<here>!match[]else<currentTiddler>] }}}> <div style="text-align:center;"> <!-- show month_only view if printing SidebarCalendar or ToolbarCalendar --> <$list filter="[<here>prefix[TiddlyTools/Time/SidebarCalendar]]"> {{TiddlyTools/Time/SidebarCalendar}} <<controls_print_now>> </$list> <$list filter="[<here>removeprefix[$(calendar_popup)$/toolbar/]]"> <$importvariables filter="TiddlyTools/Time/ToolbarCalendar"><<calendar_toolbar_popup>></$importvariables> <<controls_print_now>> </$list> <!-- else show full year or monthly view --> <$list filter="[<here>!prefix[TiddlyTools/Time/SidebarCalendar]then<here>!prefix[$(calendar_popup)$/toolbar]]"> <<showcontrols>> <<controls_print_now>> <$tiddler tiddler=<<calendar_state>>> <$let yyyy={{{ [{!!year}multiply[1]!match[0]else<thisyear>pad[4]] }}} mm={{{ [{!!month}!match[]else<thismonth>] }}} yearsize={{{ [<tt_calendar_config>getindex[calendar_yearsize]] ~[[70%]] }}} monthsize={{{ [<tt_calendar_config>getindex[calendar_monthsize]] ~[[150%]] }}}> <$reveal default={{!!month}} type="match" text=""><div style=<<calendar_yearsize>> ><$macrocall $name=showyear yyyy=<<yyyy>>/></div></$reveal> <$reveal default={{!!month}} type="nomatch" text=""><div style=<<calendar_monthsize>>><$macrocall $name=showmonth yyyy=<<yyyy>> mm=<<mm>>/></div></$reveal> </$let> </$tiddler> </$list> \end \define showcontrols() <$list filter="[<preview>!match[yes]]"> Year: <<controls_getyear>> Month: <<controls_getmonth>>   <<controls_settings>> <<controls_reset all>> <<controls_print>> @@display:inline-block;text-align:left;width:6em;<<controls_togglelist>><$list filter="[<calendar_state>has[showlist]]"><<controls_togglemax "01" "12">></$list>@@ <div style="height:1em;"/> \end \define showyear(yyyy) \define get(id) [<tt_calendar_config>getindex[$id$]] <$let here={{{ [<here>!match[]else<currentTiddler>] }}}> <<test>> <$let showtimers={{{ [subfilter<get calendar_showtimers>] ~[[yes]] }}} showalarms={{{ [subfilter<get calendar_showalarms>] ~[[yes]] }}} showjournals={{{ [subfilter<get calendar_showjournals>] ~[[yes]] }}} showevents={{{ [subfilter<get calendar_showevents>] ~[[yes]] }}} showcreated={{{ [subfilter<get calendar_showcreated>] ~[[yes]] }}} showmodified={{{ [subfilter<get calendar_showmodified>] ~[[yes]] }}} showtiddlers={{{ [subfilter<get calendar_showtiddlers>] ~[[yes]] }}} showsystem={{{ [subfilter<get calendar_showsystem>] ~[[no]] }}} showcustom={{{ [subfilter<get calendar_showcustom>] ~[[no]] }}} customfilter={{{ [subfilter<get calendar_customfilter>] }}}> <$let annual="yes"> <$wikify name="annual_tiddlers" text="<$macrocall $name=gettiddlers yyyy='$yyyy$'/>"> <$wikify name="annual_timers" text="<$macrocall $name=gettimers yyyy='$yyyy$'/>"> <$wikify name="annual_alarms" text="<$macrocall $name=getalarms yyyy='$yyyy$'/>"> <$wikify name="annual_journals" text="<$macrocall $name=getjournals yyyy='$yyyy$'/>"> <$wikify name="annual_events" text="<$macrocall $name=getevents yyyy='$yyyy$'/>"> <<test "<br>'' <$count filter=<<annual_tiddlers>>/> tiddlers<br> <$count filter=<<annual_timers>>/> timers<br> <$count filter=<<annual_alarms>>/> alarms<br> <$count filter=<<annual_journals>>/> journals<br> <$count filter=<<annual_events>>/> events''<p/>">> <$list filter="[range[1,12]]" variable="month"> <$macrocall $name=showmonth yyyy='$yyyy$' mm=<<month>> view=year/> <$list filter="[<month>remainder[4]match[0]]"><p/></$list> </$list> <<test>> \end \define showmonth(yyyy,mm,view) \define get(id) [<tt_calendar_config>getindex[$id$]!match[Default]] <style>.tt-calendar-popup-items a { padding-top:0; padding-bottom:0; }</style> <$let here={{{ [<here>!match[]else<currentTiddler>] }}}> <div style="display:inline-block;text-align:left;vertical-align:top;"> <<test>> <<showheading "$yyyy$" "$mm$" "$view$">> <$let order={{{ [subfilter<get calendar_order>] ~[[0 1 2 3 4 5 6]] }}} dayformat={{{ [subfilter<get calendar_dayformat>] ~[[ddd, MMM DDth YYYY]] }}} numbers={{{ [subfilter<get calendar_numbers>] ~[[Black;font-size:1.5em;font-weight:bold;]] }}} textsize={{{ [subfilter<get calendar_textsize>] ~[[100%]] }}} background={{{ [subfilter<get calendar_background>] ~[[LightGray]] }}} foreground={{{ [subfilter<get calendar_foreground>] ~[[White]] }}} todaybg={{{ [subfilter<get calendar_today>] ~[[Gold]] }}} timersbg={{{ [subfilter<get calendar_timers>] ~[[Orange]] }}} alarmsbg={{{ [subfilter<get calendar_alarms>] ~[[Red]] }}} eventsbg={{{ [subfilter<get calendar_events>] ~[[LightGreen]] }}} journalsbg={{{ [subfilter<get calendar_journals>] ~[[OliveDrab]] }}} createdbg={{{ [subfilter<get calendar_created>] ~[[RoyalBlue]] }}} modifiedbg={{{ [subfilter<get calendar_modified>] ~[[LightBlue]] }}} showtimers={{{ [subfilter<get calendar_showtimers>] ~[[yes]] }}} showalarms={{{ [subfilter<get calendar_showalarms>] ~[[yes]] }}} showjournals={{{ [subfilter<get calendar_showjournals>] ~[[yes]] }}} showevents={{{ [subfilter<get calendar_showevents>] ~[[yes]] }}} showcreated={{{ [subfilter<get calendar_showcreated>] ~[[yes]] }}} showmodified={{{ [subfilter<get calendar_showmodified>] ~[[yes]] }}} showtiddlers={{{ [subfilter<get calendar_showtiddlers>] ~[[yes]] }}} showsystem={{{ [subfilter<get calendar_showsystem>] ~[[no]] }}} showcustom={{{ [subfilter<get calendar_showcustom>] ~[[no]] }}} customfilter={{{ [subfilter<get calendar_customfilter]] }}} popupmaxw={{{ [<calendar_popup_maxw>!match[]] ~[subfilter<get calendar_popup_maxw>] ~[[40vw]] }}} popupmaxh={{{ [<calendar_popup_maxh>!match[]] ~[subfilter<get calendar_popup_maxh>] ~[[60vh]] }}} popuppos={{{ [<calendar_popup_pos>!match[]] ~[subfilter<get calendar_popup_pos>] ~[[below]] }}}> <$wikify name=numbers text=<<numbers>>> <$wikify name=background text=<<background>>> <$wikify name=foreground text=<<foreground>>> <$wikify name=todaybg text=<<todaybg>>> <$wikify name=timersbg text=<<timersbg>>> <$wikify name=alarmsbg text=<<alarmsbg>>> <$wikify name=eventsbg text=<<eventsbg>>> <$wikify name=journalsbg text=<<journalsbg>>> <$wikify name=createdbg text=<<createdbg>>> <$wikify name=modifiedbg text=<<modifiedbg>>> <$let mm={{{ [[$mm$]pad[2]] }}} yyyymm={{{ [[$mm$]pad[2]addprefix[$yyyy$]] }}} xxxxmm={{{ [[$mm$]pad[2]addprefix[....]] }}}> <$let match_tids="[get[created]format:date[YYYY0MM]match<yyyymm>] [get[modified]format:date[YYYY0MM]match<yyyymm>]"> <$let match_events="[prefix<yyyymm>] [prefix<xxxxmm>]"> <$wikify name="tiddlers" text={{{ [<annual>match[]then[<$macrocall $name=gettiddlers yyyy='$yyyy$' mm=<<mm>>/>]] }}}> <$wikify name="timers" text={{{ [<annual>match[]then[<$macrocall $name=gettimers yyyy='$yyyy$' mm=<<mm>>/>]] }}}> <$wikify name="alarms" text={{{ [<annual>match[]then[<$macrocall $name=getalarms yyyy='$yyyy$' mm=<<mm>>/>]] }}}> <$wikify name="journals" text={{{ [<annual>match[]then[<$macrocall $name=getjournals yyyy='$yyyy$' mm=<<mm>>/>]] }}}> <$wikify name="events" text={{{ [<annual>match[]then[<$macrocall $name=getevents yyyy='$yyyy$' mm=<<mm>>/>]] }}}> <$set name="tiddlers" filter="[enlist<tiddlers>] ~[enlist<annual_tiddlers>filter<match_tids>]"> <$set name="timers" filter="[enlist<timers>] ~[enlist<annual_timers>prefix<yyyymm>]"> <$set name="alarms" filter="[enlist<alarms>] ~[enlist<annual_alarms>prefix<yyyymm>]"> <$set name="journals" filter="[enlist<journals>] ~[enlist<annual_journals>prefix<yyyymm>]"> <$set name="events" filter="[enlist<events>] ~[enlist<annual_events>filter<match_events>]"> <<test "<br>'' <$count filter=<<tiddlers>>/> tiddlers<br> <$count filter=<<timers>>/> timers<br> <$count filter=<<alarms>>/> alarms<br> <$count filter=<<journals>>/> journals<br> <$count filter=<<events>>/> events''">> <!-- days per month... adjust for leap year --> <$let dpm={{{ [[$yyyy$]remainder[4]match[0]then[31 29 31 30 31 30 31 31 30 31 30 31]else[31 28 31 30 31 30 31 31 30 31 30 31]] }}}> <$let dm={{{ [<dpm>split[ ]nth[$mm$]] }}}> <!-- days in this month --> <!-- show grid or list --> <$let show={{{ [<calendar_state>has[showlist]then[showlist]else[showgrid]] }}}> <$let show={{{ [[$view$]match[edit]then[showgrid]else<show>] }}}> <$macrocall $name=<<show>> yyyy='$yyyy$' mm=<<mm>>/> <<test>> \end \define showheading(yyyy,mm,view) \whitespace trim <div style="text-align:center;"> <$list filter="[<preview>match[]]" variable="hide_for_preview"> <$reveal default="$view$" type="nomatch" text="year"> <span style="float:left;"> <<controls_prev "tc-btn-invisible">> <$list filter="[[$view$]match[month_only]then[$view$]!match[edit]]" variable="show_buttons"> <<controls_settings "tc-btn-invisible">> <<controls_reset "date" "tc-btn-invisible">> </$list> </span> <span style="float:right;"> <$list filter="[[$view$]match[month_only]then[$view$]!match[edit]]" variable="show_buttons"> <<controls_print "tc-btn-invisible">> <<controls_togglelist "tc-btn-invisible" "$view$" "$mm$">> </$list> <<controls_next "tc-btn-invisible">> </span> </$reveal> </$list> <<controls_toggleyear "$yyyy$" "$mm$" "$view$">> \end \define showlist(yyyy,mm) \whitespace trim <!-- monthly_modified excludes tiddlers created and modified on the same day --> <$set name="monthly_alarms" filter="[enlist<alarms>prefix[$yyyy$$mm$]] +[sort[]]"> <$set name="monthly_timers" filter="[enlist<timers>prefix[$yyyy$$mm$]] +[sort[]]"> <$set name="monthly_journals" filter="[enlist<journals>prefix[$yyyy$$mm$]] +[sort[]]"> <$set name="monthly_events" filter="[enlist<events>prefix[$yyyy$$mm$]] [enlist<events>prefix[....$mm$]] +[sort[]]"> <$set name="monthly_created" filter="[enlist<tiddlers>] :filter[get[created]format:date[YYYY0MM]match[$yyyy$$mm$]]"> <$set name="monthly_sameday" filter="[enlist<monthly_created>] :filter[sameday:modified{!!created}]"> <$set name="monthly_modified" filter="[enlist<tiddlers>!enlist<monthly_sameday>] :filter[get[modified]format:date[YYYY0MM]match[$yyyy$$mm$]]"> <$set name="monthly_created" filter="[<showcreated>match[yes]]" value=<<monthly_created>> emptyValue=""> <$set name="monthly_modified" filter="[<showmodified>match[yes]]" value=<<monthly_modified>> emptyValue=""> <$let width={{{ [<calendar_state>get[hmax-$mm$]match[yes]then[auto;min-width:$(calendar_listhmax)$]else<calendar_listhmax>] }}}> <$let height={{{ [<calendar_state>get[vmax-$mm$]match[yes]then[auto;min-height:$(calendar_listvmax)$]else<calendar_listvmax>] }}}> <div class="tt-shadowbox" style=<<calendar_listframe>>> <<controls_togglemax "$mm$" "$mm$" "position:absolute;top:1.75em;right:-1em;">> <div style=<<calendar_listbar>>><<showcolorbar monthly>></div> <div style=<<calendar_listscroll>>> <$list filter="[range<dm>]" variable="dd"> <$let date={{{ [<dd>pad[2]addprefix[$yyyy$$mm$]] }}}><div style=<<calendar_listitems>>><<showday list>></div></$let> </$list> </div> </div> \end \define showgrid(yyyy,mm) \whitespace trim <$set name=days filter="[enlist<order>addprefix[$:/language/Date/Short/Day/]get[text]]"> <$let fmt="[UTC]ddd" first={{{ [[$yyyy$$mm$01]format:date<fmt>] }}} spacer={{{ [enlist<days>allbefore<first>count[]] }}}> <div style="clear:both;width:calc($(calendar_boxsize)$ * 7);margin:0 auto;white-space:nowrap;"> <$list filter="[enlist<days>]" variable="day"> <div style="display:inline-block;width:$(calendar_boxsize)$;text-align:center;">@@font-size:75%;line-height:1em;''<<day>>''@@</div> </$list> </div> <div style=<<calendar_gridframe>>> <$list filter="[range<spacer>]"><div style="display:inline-block;width:$(calendar_boxsize)$;height:1px;"/></$list> <$list filter="[range<dm>]" variable="dd"> <$let date={{{ [<dd>pad[2]addprefix[$yyyy$$mm$]] }}}><<showday grid>><$list filter="[<dd>add<spacer>remainder[7]match[0]]"><br></$list></$let> </$list> </div> \end \define showcolorbar(type:"todays") \whitespace trim <$list filter="[<$type$_alarms>] [<$type$_timers>] [<$type$_journals>] [<$type$_events>] [<$type$_created>] [<$type$_modified>] +[!match[]limit[1]]"> <$set name="event_colors" filter="[enlist<$type$_events>] :map[split[;]nth[2]get[eventcolor]!match[Default]else<eventsbg>] +[unique[]]"> <$set name="colors" filter=" [<$type$_alarms>!match[]then<alarmsbg>] [<$type$_timers>!match[]then<timersbg>] [<$type$_journals>!match[]then<journalsbg>] [enlist<event_colors>] [<$type$_created>!match[]then<createdbg>] [<$type$_modified>!match[]then<modifiedbg>]"> <$let tip={{{ [enlist<$type$_alarms>count[]addprefix[alarms:]] [enlist<$type$_timers>count[]addprefix[timers:]] [enlist<$type$_journals>count[]addprefix[journals:]] [enlist<$type$_events>count[]addprefix[events:]] [enlist<$type$_created>count[]addprefix[created:]] [enlist<$type$_modified>count[]addprefix[modified:]] +[!suffix[:0]join[, ]] }}}> <$let colorwidth={{{ [enlist<colors>count[]addprefix[calc(100% / ]addsuffix[);]] }}}> <div style=<<calendar_colorbar>> title=<<tip>>><$list filter="[enlist<colors>]" variable="color"><div style=<<calendar_colorbox>>></div></$list></div> \end \define showday(type) \whitespace trim <$let thisdate={{{ [<date>addsuffix[120000000]] }}} todays_date=<<now "YYYY0MM0DD">> annual_date={{{ [<date>split[]rest[4]join[]addprefix[....]] }}}> <!-- todays_created and todays_modified excludes todays_journals, todays_modified excludes todays_created --> <$set name="todays_alarms" filter="[enlist<alarms>prefix<date>] +[sort[]]"> <$set name="todays_timers" filter="[enlist<timers>prefix<date>] +[sort[]]"> <$set name="todays_journals" filter="[enlist<journals>prefix<date>] +[sort[]]"> <$set name="todays_events" filter="[enlist<events>prefix<date>] [enlist<events>prefix<annual_date>] +[sort[]]"> <$set name="todays_created" filter="[enlist<tiddlers>sameday:created<thisdate>sort[]] -[enlist<todays_journals>split[;]nth[2]]"> <$set name="todays_modified" filter="[enlist<tiddlers>sameday:modified<thisdate>!sort[modified]] -[enlist<todays_created>] -[enlist<todays_journals>split[;]nth[2]]"> <$set name="todays_created" filter="[<showcreated>match[yes]]" value=<<todays_created>> emptyValue=""> <$set name="todays_modified" filter="[<showmodified>match[yes]]" value=<<todays_modified>> emptyValue=""> <$list filter="[[$type$]match[list]]" variable="show_list"><<showday_list>></$list> <$list filter="[[$type$]!match[list]]" variable="show_grid"><<showday_grid>></$list> \end \define showday_list() \whitespace trim <$let popupmaxh="auto" popupmaxw="auto"> <<showday_popup_header>> <<showday_popup_items>> \end \define showday_grid() \whitespace trim <$let calendar_popID=<<qualify "$(calendar_popup)$/$(date)$$(id)$">>> <$let btnstyle={{{ [<calendar_gridbox>] [[border-radius:0;]] +[join[]] }}}> <$let btnstyle={{{ [<todays_date>match<date>then<btnstyle>addsuffix[background:]addsuffix<todaybg>else<btnstyle>] }}}> <$let btntooltip={{{ [enlist<todays_events>first[]split[;]nth[3]split[|]first[]] }}}> <$button class="tc-btn-invisible" popup=<<calendar_popID>> style=<<btnstyle>> tooltip=<<btntooltip>>> <<showcolorbar>> <span style=<<calendar_numstyle>>><<dd>></span> <<showday_button_actions>> <!-- FOR USE BY CUSTOMIZATIONS --> </$button> <span style="font-size:initial;"> <$reveal type="popup" state=<<calendar_popID>> class="tc-drop-down tt-shadowbox tc-popup-keep" position=<<popuppos>> style=<<calendar_popupstyle>>> <<showday_popup_header>> <<showday_popup_items>> </$reveal> \end \define showday_popup_header() @@float:left;white-space:nowrap;width:calc(100% - 6.75em);overflow:hidden;text-overflow:ellipsis; <<showday_showdate>> @@ @@float:right;text-align:right;white-space:nowrap;width:6.75em; <<showday_editjournal>> <<showday_addalarm>> <<showday_addevent>>@@ <div style="clear:both;"/> <<showday_popup_extras>> <!-- FOR USE BY CUSTOMIZATIONS --> \end \define showday_popup_items() <$list filter="[<todays_alarms>] [<todays_timers>] [<todays_journals>] [<todays_events>] [<todays_created>] [<todays_modified>] +[!match[]limit[1]]"> <div class="tt-shadowbox inset"> <div style="max-height:calc( $(popupmaxh)$ );max-width:calc( $(popupmaxw)$ );overflow:hidden auto;text-overflow:ellipsis;"> <<showday_items timers>> <<showday_items alarms>> <<showday_items journals>> <<showday_items events>> <<showday_items created>> <<showday_items modified>> </div> </div> \end \define showday_showdate() <span style="font-size:100%;line-height:1.75em;" title={{{ [<thisdate>format:date<dayformat>] }}}> <$tiddler tiddler=<<thisdate>>>''__<$view field="title" format="date" template=<<dayformat>>/>__'' \end \define showday_editjournal() <$button class="tc-button tt-button" style="display:inline !important;width:auto;padding:0 0.25em !important;" tooltip="edit Journal" actions=<<showday_editjournal_actions>>> {{$:/core/images/edit-button}} </$button> \end \define showday_editjournal_actions() <$let UTC="[UTC]" time=<<now "0hh0mm0ss0XXX">>> <$let journalFormat={{{ [{$:/config/NewJournal/Title}addprefix<UTC>] }}}> <$let journalTitle={{{ [<date>addsuffix<time>format:date<journalFormat>] }}}> <$let journalDate={{{ [<date>addsuffix<time>] }}}> <$let journalText={{{ [<journalTitle>get[text]else{$:/config/NewJournal/Text}] }}}> <$let journalTags={{{ [{$:/config/NewJournal/Tags}] [{$:/config/NewJournal/Tags!!tags}] +[join[ ]] }}}> <$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> text=<<journalText>> tags=<<journalTags>> journal-date=<<journalDate>>/> \end \define showday_addalarm() <$list filter="[[TiddlyTools/Time/Alarms]is[tiddler]] ~[[TiddlyTools/Time/Alarms]is[shadow]]"> <$tiddler tiddler=<<tt_calendar_config>>> <<controls_alarms_new class:"tc-button tt-button" style:"display:inline;width:auto;padding:0 0.25em !important;" tooltip:"add an alarm">> \end \define showday_addevent() <$tiddler tiddler=<<tt_calendar_config>>> <<controls_events_new class:"tc-button tt-button" style:"display:inline;width:auto;padding:0 0.25em !important;" tooltip:"add an event">> \end \define showday_items(type) <div class="tt-calendar-popup-items"> <$list filter="[enlist<todays_$type$>limit[1]]"> ''$type$:'' (<$count filter="[enlist<todays_$type$>]"/>)<br> <$list filter="[enlist<todays_$type$>]"> <$let this_text={{{ [<currentTiddler>split[;]nth[3]split[|]first[]else<currentTiddler>] }}} this_link={{{ [<currentTiddler>split[;]nth[3]split[|]rest[]else<this_text>] }}}> <$link to=<<this_link>> tooltip=<<this_text>>> <div style="font-style:normal;overflow:hidden;text-overflow:ellipsis;"><<showday_color $type$>> <$text text=<<this_text>>/></div> </$link> </$let> </$list> </$list> \end \define showday_color(type) \whitespace trim <$let src={{{ [<currentTiddler>split[;]nth[2]] }}} tip={{{ [<src>get[caption]else<src>] }}} eventsbg={{{ [<src>get[eventcolor]!match[Default]else<eventsbg>] }}} color=<<$type$bg>>> <$button to=<<src>> tooltip=<<tip>> class="tc-btn-invisible" style=<<calendar_itembox>>></$button> \end \define gettiddlers(yyyy,mm) <$let yyyy="[get[created]format:date[YYYY]match[$yyyy$]] [get[modified]format:date[YYYY]match[$yyyy$]]" > <$let yyyymm="[get[created]format:date[YYYY0MM]match[$yyyy$$mm$]] [get[modified]format:date[YYYY0MM]match[$yyyy$$mm$]]"> <$set name="tids" filter="[<showtiddlers>match[yes]]" value="[!is[system]]" emptyValue=""> <$set name="sys" filter="[<showsystem>match[yes]]" value="[is[system]]" emptyValue=""> <$set name="cust" filter="[<showcustom>match[yes]]" value="[prefix[$:/config]]" emptyValue=""> <$set name="cust" filter="[<showcustom>match[yes]then<customfilter>!match[]]" value=<<customfilter>> emptyValue=<<cust>>> <$set name="match" filter="[[$mm$]!match[]]" value=<<yyyymm>> emptyValue=<<yyyy>>> <$set name="tiddlers" filter="[subfilter<tids>] [subfilter<sys>] [subfilter<cust>] -[has[draft.of]] +[filter<match>]"> <$list filter=<<tiddlers>>> `[[`<$text text=<<currentTiddler>>/>`]]`<br> </$list> \end \define gettimers(yyyy,mm) \import TiddlyTools/Time/Timers \define fmt() [UTC]0hh:0mm:0ss <$reveal default=<<showtimers>> type="match" text="yes"> <$list filter="[!has[draft.of]has[startlist]has[stoplist]]"> <$let timer_name={{{ [<currentTiddler>removeprefix<timer_config>removeprefix[/]] }}} timer_count={{{ [enlist{!!startlist}count[]] }}}> <$list filter="[range<timer_count>]" variable="item"> <$let date={{{ [enlist{!!startlist}nth<item>split[]first[8]join[]] }}} start={{{ [enlist{!!startlist}nth<item>] }}} stop={{{ [enlist{!!stoplist}nth<item>] }}}> <$list filter="[<date>prefix[$yyyy$$mm$]]" variable="match_date"> `[[`<<date>>;<<currentTiddler>>;<<timer_name>> {{{ [<start>format:date<fmt>] }}}-{{{ [<stop>format:date<fmt>] }}}|<<currentTiddler>>`]]`<br> </$list> </$let> </$list> </$let> </$list> \end \define getalarms(yyyy,mm) \define out() `[[`<<yyyy>><<mm>><<dd>>;<<currentTiddler>>;<<time>> - "<<msg>>"|<<currentTiddler>>`]]`<br> <$reveal default=<<showalarms>> type="match" text="yes"> <$let dpm={{{ [[$yyyy$]remainder[4]match[0]then[31 29 31 30 31 30 31 31 30 31 30 31]else[31 28 31 30 31 30 31 31 30 31 30 31]] }}}> <$list filter="[!has[draft.of]has[alarms]]"> <$list filter="[enlist{!!alarms}]" variable="this_alarm"> <$let freq={{{ [<this_alarm>split[;]nth[1]split[@]nth[1]] }}} status={{{ [<this_alarm>split[;]nth[1]split[@]nth[2]] }}} date={{{ [<this_alarm>split[;]nth[2]split[-]join[]] }}} yyyy={{{ [<this_alarm>split[;]nth[2]split[-]nth[1]] }}} mm={{{ [<this_alarm>split[;]nth[2]split[-]nth[2]] }}} dd={{{ [<this_alarm>split[;]nth[2]split[-]nth[3]] }}} time={{{ [<this_alarm>split[;]nth[3]] }}} msg={{{ [<this_alarm>split[;]nth[4]] }}}> <$let time={{{ [<time>match[--:--:--]then[startup]else<time>] }}}> <$let msg={{{ [<msg>!match[]] ~[[BEEP! BEEP! BEEP!]] +[decodeuricomponent[]search-replace[<<now],[<<getalarms_now]] }}}> <$reveal default=<<status>> type="nomatch" text="paused"> <$reveal default=<<freq>> type="match" text="once" ><$list filter="[<date>prefix[$yyyy$$mm$]]" variable="match_date"> <<out>> </$list></$reveal> <$reveal default=<<freq>> type="match" text="yearly" ><$list filter="[<date>prefix[....$mm$]]" variable="match_date"><$let yyyy="$yyyy$"> <<out>> </$let></$list></$reveal> <$reveal default=<<freq>> type="match" text="monthly"><$list filter="[[$mm$]!match[]] ~[range[1,12]pad[2]]" variable="mm"><$let yyyy="$yyyy$"> <<out>> </$let></$list></$reveal> <$list filter="[all[shadows]prefix[$:/language/Date/Long/Day/]get[text]match<freq>]" variable="this_day"> <$list filter="[[$mm$]!match[]] ~[range[1,12]pad[2]]" variable="mm"> <$let fmt="[UTC]DDD" yyyy="$yyyy$" dm={{{ [<dpm>split[ ]nth<mm>] }}}> <$list filter="[range<dm>pad[2]] :filter[<currentTiddler>addprefix<mm>addprefix<yyyy>format:date<fmt>match<this_day>]" variable="dd"> <<out>> </$list> </$let> </$list> </$list> </$reveal> </$let> </$let> </$let> </$list> </$list> \end \define getalarms_now(fmt:"DDD, MMM DDth YYYY") <$let fmt="[UTC]$fmt$">{{{ [[$(yyyy)$$(mm)$$(dd)$]format:date<fmt>] }}} \define getjournals(yyyy,mm) <$reveal default=<<showjournals>> type="match" text="yes"> <$let journalTags={{{ [{$:/config/NewJournal/Tags}] [{$:/config/NewJournal/Tags!!tags}] +[join[ ]] }}}> <$list filter="[enlist<journalTags>tagging[]!has[draft.of]]"> <$let journaldate={{{ [{!!journal-date}split[]first[8]join[]] }}}> <$let titledate={{{ [{!!title}parsedate[YYYY0MM0DD]] }}}> <$let createddate={{{ [{!!created}format:date[YYYY0MM0DD]] }}}> <$set name="thisdate" value=<<journaldate>> emptyValue=<<titledate>>> <$set name="thisdate" filter="[<thisdate>search:title[NaN]]" value=<<createddate>> emptyValue=<<thisdate>>> <$set name="thisdate" filter="[<thisdate>match[]]" value=<<createddate>> emptyValue=<<thisdate>>> <$list filter="[<thisdate>prefix[$yyyy$$mm$]]" variable="matching_journal"> `[[`<<thisdate>>;<<currentTiddler>>;<<currentTiddler>>|<<currentTiddler>>`]]`<br> </$list> \end \define getevents(yyyy,mm) <!-- if yyyy and mm are omitted, gets ALL events --> <$reveal default=<<showevents>> type="match" text="yes"> <$let events={{{ [<tt_calendar_config>getindex[events]] }}}> <$list filter="[all[tiddlers+shadows]tag[events]!has[draft.of]]" variable="source"> <$list filter="[enlist<events>match<source>]"> <<getevents_listed "$yyyy$" "$mm$">> </$list> </$list> <$list filter="[all[tiddlers+shadows]suffix[.ics]!has[draft.of]]" variable="source"> <$list filter="[enlist<events>match<source>]"> <<getevents_ics "$yyyy$" "$mm$">> </$list> </$list> <$list filter="[all[tiddlers+shadows]tag[timeline]!has[draft.of]]" variable="source"> <$list filter="[enlist<events>match<source>]"> <<getevents_timeline "$yyyy$" "$mm$">> </$list> </$list> \end \define getevents_listed(yyyy,mm,convert) <$let eventlist={{{ [<source>get[caption]else<source>] }}}> <$let eventlist={{{ [<source>!match[TiddlyTools/Time/Events]then<eventlist>addsuffix[: ]] }}}> <$wikify name="eventdata" text={{{ [<source>get[text]] }}} mode="inline"> <$list filter="[<eventdata>splitregexp[\n]trim[]!match[]]" variable="line"> <$let date={{{ [<line>split[;]nth[1]] }}}> <$let text={{{ [<line>split[;]nth[2]] }}}> <$list filter="[<date>prefix[....$mm$]] ~[<date>prefix[$yyyy$$mm$]]" variable="thismonth"> <$list filter="[[$convert$]match[]]" > `[[`<<date>>;<<source>>;<<eventlist>><<text>>|<<text>>`]]`<br> </$list> <$list filter="[[$convert$]!match[]]"> `[[`<<date>>;<<text>>`]]`<br> </$list> \end \define getevents_ics(yyyy,mm,convert) <$let calname={{{ [<source>get[text]splitregexp[\nX-WR-CALNAME.*:]rest[]splitregexp[\n]first[]trim[]addsuffix[: ]] }}}> <$list filter="[<source>get[text]split[BEGIN:VEVENT]rest[]trim[]]" variable="event"> <$let date={{{ [<event>splitregexp[DTSTART.*:]rest[]split[]first[8]join[]!match[]] }}}> <$let text={{{ [<event>splitregexp[SUMMARY.*:]rest[]splitregexp[\n\S]first[]splitregexp[\n ]split[\]join[]] }}}> <$list filter="[<date>prefix[$yyyy$$mm$]]" variable="thismonth"> <$list filter="[[$convert$]match[]]" > `[[`<<date>>;<<source>>;<<calname>><<text>>|<<text>>`]]`<br> </$list> <$list filter="[[$convert$]!match[]]"> `[[`<<date>>;<<text>>`]]`<br> </$list> \end \define getevents_timeline(yyyy,mm,convert) <$let timeline={{{ [<source>get[caption]else<source>] }}}> <$let list={{{ [<source>get[list]] }}} filt={{{ [<source>get[filter]] }}}> <$list filter="[all[tiddlers+shadows]tag<source>] [enlist<list>] [subfilter<filt>] +[!has[draft.of]!title<tt_calendar_config>]" variable="event"> <$let mod={{{ [<event>get[modified]split[]first[8]join[]] }}} start={{{ [<event>get[timeline.start]else<mod>] }}} end={{{ [<event>get[timeline.end]else<start>] }}} type={{{ [<event>get[timeline.type]] }}} days={{{ [<event>get[timeline.days]] }}}> <$list filter="[<end>length[]match[4]] ~[<type>match[annual]]" variable="annual"><<getevents_timeline_annual "$yyyy$" "$mm$" "$convert$">></$list> <$list filter="[<end>length[]!match[4]then<type>!match[annual]]" variable="range" ><<getevents_timeline_range "$yyyy$" "$mm$" "$convert$">></$list> \end \define getevents_timeline_annual(yyyy,mm,convert) <$let YS={{{ [<start>split[]first[4]join[]] }}} YE={{{ [<end>split[]first[4]join[]] }}} M={{{ [<start>split[]rest[4]first[2]join[]] }}} D={{{ [<start>split[]rest[6]first[2]join[]] }}}> <$list filter="[range<YS>,<YE>]" variable="Y"> <$list filter="[<Y>addsuffix<M>prefix[$yyyy$$mm$]]" variable="thismonth"> <$let text={{{ [<event>get[caption]else<event>] }}}> <$list filter="[[$convert$]match[]]" > `[[`<<Y>><<M>><<D>>;<<source>>;<<timeline>>: <<text>>|<<event>>`]]`<br> </$list> <$list filter="[[$convert$]!match[]]"> `[[`<<Y>><<M>><<D>>;<<text>>|<<event>>`]]`<br> </$list> \end \define getevents_timeline_range(yyyy,mm,convert) <!-- REQUIRES v530+ or retrofit $:/core/modules/filters/format/timestamp.js --> <$let start={{{ [<start>] [<end>] +[sort[]first[]] }}} end={{{ [<start>] [<end>] +[sort[]last[]] }}}> <$let start={{{ [<start>format:date[TIMESTAMP]] }}} end={{{ [<end>format:date[TIMESTAMP]] }}}> <$list filter="[range<start>,<end>,[86400000]]" variable="t"> <$let fmt="[UTC]YYYY0MM0DD" date={{{ [<t>format:timestamp<fmt>] }}} fmt="[UTC]DDD" thisday={{{ [<date>format:date<fmt>] }}}> <$let text={{{ [<event>get[caption]else<event>] }}}> <$list filter="[<days>is[blank]] ~[<event>contains:timeline.days<thisday>]"> <$list filter="[[$convert$]match[]]" > `[[`<<date>>;<<source>>;<<timeline>>: <<text>>|<<event>>`]]`<br> </$list> <$list filter="[[$convert$]!match[]]"> `[[`<<date>>;<<text>>|<<event>>_<<date>>`]]`<br> </$list> </$list> \end \define calendar_events_generator(first,last,days,desc) <$let fmt="[UTC]YYYY0MM0DD" start={{{ [<__first__>format:date[TIMESTAMP]] }}} end={{{ [<__last__>format:date[TIMESTAMP]] }}} step={{{ [<__days__>multiply[86400000]] }}}> <tt style="white-space:pre;"> <$list filter="[range<start>,<end>,<step>]" counter="item" variable="when"> {{{ [<when>format:timestamp<fmt>] }}};<<__desc__>> \end \define controls_getyear(default:"<<thisyear>>",placeholder:"<<thisyear>>") <style> .calEditYear { width:4em; text-align:center; } </style> <$let yyyy={{{ [{$(calendar_state)$!!year}multiply[1]!match[0]else<thisyear>] }}}> <$button class="tc-button tt-button" tooltip={{{ [<yyyy>subtract[1]pad[4]] }}}> {{$:/core/images/chevron-left}} <$action-setfield $tiddler=<<calendar_state>> month="" year={{{ [<yyyy>subtract[1]pad[4]] }}}/> </$button> </$let> <$edit-text tag="input" class="calEditYear" tiddler=<<calendar_state>> field="year" default=$default$ placeholder=$placeholder$/> <$let yyyy={{{ [{$(calendar_state)$!!year}multiply[1]!match[0]else<thisyear>] }}}> <$button class="tc-button tt-button" tooltip={{{ [<yyyy>add[1]pad[4]] }}}> {{$:/core/images/chevron-right}} <$action-setfield $tiddler=<<calendar_state>> month="" year={{{ [<yyyy>add[1]pad[4]] }}}/> </$button> </$let> \end \define controls_getmonth() <$tiddler tiddler=<<calendar_state>>> <<controls_prev>> <$select field="month" default=""> <$list filter="[range[1,12]]"> <option value=<<currentTiddler>>>{{{ [<currentTiddler>addprefix[$:/language/Date/Long/Month/]get[text]] }}}</option> </$list> </$select> <<controls_next>> \end \define controls_prev(class:"tc-button tt-button") <$let thisyear=<<now "YYYY">> thismonth=<<now "MM">>> <$let mm={{{ [{!!month}!match[]else<thismonth>] }}} yyyy={{{ [{!!year}!match[]else<thisyear>] }}}> <$let prev_month={{{ [<mm>match[1]then[12]] ~[<mm>subtract[1]] }}}> <$let prev_year={{{ [<mm>match[1]then<yyyy>subtract[1]] ~[<yyyy>] }}}> <$let prev_tip={{{ [<prev_month>addprefix[$:/language/Date/Long/Month/]get[text]addsuffix[ ]addsuffix<prev_year>] }}}> <$button class="$class$" tooltip=<<prev_tip>>> {{$:/core/images/chevron-left}} <$action-setfield $timestamp="no" month=<<prev_month>> year=<<prev_year>>/> </$button> \end \define controls_next(class:"tc-button tt-button") <$let thisyear=<<now "YYYY">> thismonth=<<now "MM">>> <$let mm={{{ [{!!month}!match[]else<thismonth>] }}} yyyy={{{ [{!!year}!match[]else<thisyear>] }}}> <$let next_month={{{ [<mm>match[12]then[1]] ~[<mm>add[1]] }}}> <$let next_year={{{ [<mm>match[12]then<yyyy>add[1]] ~[<yyyy>] }}}> <$let next_tip={{{ [<next_month>addprefix[$:/language/Date/Long/Month/]get[text]addsuffix[ ]addsuffix<next_year>] }}}> <$button class="$class$" tooltip=<<next_tip>>> {{$:/core/images/chevron-right}} <$action-setfield $timestamp="no" month=<<next_month>> year=<<next_year>>/> </$button> \end \define controls_reset(type,class:"tc-button tt-button",label:"{{$:/core/images/refresh-button}}") <$button class="$class$" tooltip="view current month/year"> $label$ <$list filter="[[$type$]match[date]]" variable="date"><$action-deletefield $tiddler=<<calendar_state>> year month/></$list> <$list filter="[[$type$]match[all]]" variable="all" ><$action-deletetiddler $tiddler=<<calendar_state>>/></$list> </$button> \end \define controls_print(class:"tc-button tt-button",label:"{{$:/core/images/print-button}}") <$wikify name="siteTitle" text={{$:/SiteTitle}}> <$let printFrom={{{ [<here>prefix[TiddlyTools/Time/SidebarCalendar]then[ (Sidebar)]] [<here>removeprefix[$(calendar_popup)$/toolbar/]addprefix[ (Toolbar) - ]] }}}> <$let windowTitle={{{ [<siteTitle>addsuffix[ - Calendar Print Preview]addsuffix<printFrom>] }}}> <$list filter="[<preview>!match[yes]]" variable="preview"> <$button class="$class$" tooltip="print preview / open in new window"> $label$ <$action-sendmessage $message="tm-open-window" $param=<<windowTitle>> template="TiddlyTools/Time/Calendar" here=<<here>> preview="yes" width={{{ [{$:/info/browser/screen/width}divide[3]multiply[2]] }}} height={{{ [{$:/info/browser/screen/height}divide[3]multiply[2]] }}}/> </$button> </$list> <$list filter="[<preview>match[yes]]" variable="preview"> <$button class="$class$" style="fill:black" tooltip="print now" message="tm-print">$label$</$button> </$list> \end \define controls_print_now() <$list filter="[<preview>match[yes]]" variable="preview"> <span class="calendar_hideforprint" style="position:absolute;left:0.5em;top:0.5em;z-index:1;"> <div style="font-size:3em;"><<controls_print "tc-btn-invisible">></div> <div style="color:black;">''print now''</div> </span> \end \define controls_toggleyear(yyyy,mm,view) <$let tooltip={{{ [[$view$]match[month_only]then[view entire year]] ~[[$view$]match[3-month]then[view current month]] ~[{!!month}match[]then[view this month]else[view entire year]] }}}> <$button class="tc-btn-invisible" style="display:inline !important;" tooltip=<<tooltip>>> ''<$text text={{{ [[$mm$]addprefix[$:/language/Date/Long/Month/]get[text]] }}}/> $yyyy$'' <$list filter="[[$view$]match[month_only]]" variable="view"> <$action-setfield $timestamp="no" $tiddler="$(calendar_popup)$/TiddlyTools/Time/Calendar" month="" year="$yyyy$"/> <$action-navigate $to="TiddlyTools/Time/Calendar"/> </$list> <$list filter="[[$view$]match[3-month]]" variable="view"> <$action-setfield $timestamp="no" month="" year=""/> </$list> <$list filter="[[$view$]!match[month_only]then[$view$]!match[3-month]]" variable="view"> <$action-setfield $timestamp="no" month={{{ [{!!month}match[]then[$mm$]] }}} year="$yyyy$"/> </$list> </$button> \end \define controls_togglelist(class:"tc-button tt-button",view,mm) \whitespace trim <$let btnstyle="padding-left:0.25em !important;padding-right:0.25em !important;"> <$let iconstyle={{{ [[$view$]match[month_only]then[width:1.5em;font-size:80%;]else[width:1.5em;]] }}}> <$list filter="[<calendar_state>!has[showlist]]"> <$button class="$class$" style=<<btnstyle>> tooltip="switch to list view"> <div style=<<iconstyle>>>📄</div> <!-- PAGE EMOJI --> <$action-setfield $tiddler=<<calendar_state>> showlist="yes"/> </$button> </$list> <$list filter="[<calendar_state>has[showlist]]"> <$button class="$class$" style=<<btnstyle>> tooltip="switch to grid view"> <div style=<<iconstyle>>>📅</div> <!-- CALENDAR EMOJI --> <$action-setfield $tiddler=<<calendar_state>> $field="showlist"/> </$button> </$list> \end \define controls_togglemax(start,end,position) <$let tid=<<calendar_state>> btnclass="tc-button tt-button" btnstyle="padding:0 0.125em !important;"> <span style="$position$;font-size:80%;line-height:1em;"> <$let hlist="[range[$start$],[$end$]pad[2]addprefix[hmax-]]"> <$let vlist="[range[$start$],[$end$]pad[2]addprefix[vmax-]]"> <$let hmax={{{ [subfilter<hlist>] :filter[<tid>get<currentTiddler>match[yes]then<currentTiddler>] +[count[]] }}}> <$let vmax={{{ [subfilter<vlist>] :filter[<tid>get<currentTiddler>match[yes]then<currentTiddler>] +[count[]] }}}> <$list filter="[<hmax>!match[0]]" variable="_"> <$button class=<<btnclass>> style=<<btnstyle>> tooltip="collapse width"> {{$:/core/images/chevron-left}} <$list filter="[subfilter<hlist>]" variable="f"><$action-setfield $tiddler=<<tid>> $field=<<f>>/></$list> </$button> </$list> <$list filter="[<hmax>match[0]]" variable="_"> <$button class=<<btnclass>> style=<<btnstyle>> tooltip="expand width"> {{$:/core/images/chevron-right}} <$list filter="[subfilter<hlist>]" variable="f"><$action-setfield $tiddler=<<tid>> $field=<<f>> $value="yes"/></$list> </$button> </$list> <$list filter="[[$start$]match[$end$]]"><div style="height:0.125em;"/></$list> <$list filter="[<vmax>!match[0]]" variable="_"> <$button class=<<btnclass>> style=<<btnstyle>> tooltip="collapse height"> {{$:/core/images/chevron-up}} <$list filter="[subfilter<vlist>]" variable="f"><$action-setfield $tiddler=<<tid>> $field=<<f>>/></$list> </$button> </$list> <$list filter="[<vmax>match[0]]" variable="_"> <$button class=<<btnclass>> style=<<btnstyle>> tooltip="expand height">{{$:/core/images/chevron-down}} <$list filter="[subfilter<vlist>]" variable="f"><$action-setfield $tiddler=<<tid>> $field=<<f>> $value="yes"/></$list> </$button> </$list> \end \define controls_settings(class:"tc-button tt-button") <style> .controlPanel { min-width:auto;border:1px solid;padding:0.5em;border-radius:0.5em;text-align:left;font-size:10pt;line-height:140%; } </style> <$let popupid_settings=<<qualify "$(calendar_popup)$/settings">>> <$button class="$class$" popup=<<popupid_settings>> tooltip="calendar settings">{{$:/core/images/options-button}}</$button> <$reveal type="popup" state=<<popupid_settings>> class="tc-popup-keep"> <div class="tc-block-dropdown tt-shadowbox controlPanel" style="max-width:18em;"> <<controls_styles>> <<controls_events_admin>> ''Calendar settings'' <$button class="tc-btn-invisible" message="tm-edit-tiddler" param="$(tt_calendar_config)$" tooltip="edit Calendar settings">{{$:/core/images/edit-button}}</$button> <div class="tt-shadowbox inset" style="border-top:1px solid gray;margin-top:0.25em;padding-top:0.5em;clear:both;"> <<controls_events>> <<controls_timers>> <<controls_alarms>> <<controls_journals>> <<controls_tiddlers>> </div> </div> </$reveal> \end \define controls_timers() <$tiddler tiddler=<<tt_calendar_config>>> <$let defaultcolor={{{ [<tt_calendar_config>getindex[calendar_timers]!match[Default]] ~[[Orange]] }}}> @@float:right;<<controls_colors "timers" "calendar_timers">>@@ <$checkbox index="calendar_showtimers" default="yes" checked="yes" unchecked="no"> ''Timers:'' </$checkbox><br> \end \define controls_journals() <$tiddler tiddler=<<tt_calendar_config>>> <$let defaultcolor={{{ [<tt_calendar_config>getindex[calendar_journals]!match[Default]] ~[[OliveDrab]] }}}> @@float:right;<<controls_colors "journals" "calendar_journals">>@@ <$checkbox index="calendar_showjournals" default="yes" checked="yes" unchecked="no"> ''Journals:'' </$checkbox><br> \end \define controls_alarms() <$tiddler tiddler=<<tt_calendar_config>>> <$let defaultcolor={{{ [<tt_calendar_config>getindex[calendar_alarms]!match[Default]] ~[[Red]] }}}> @@float:right;<<controls_colors "alarms" "calendar_alarms">>@@ <$checkbox index="calendar_showalarms" default="yes" checked="yes" unchecked="no"> ''Alarms:'' </$checkbox><br> \end \define controls_alarms_new(id,class:"tc-btn-invisible",style:"",tooltip:"add an alarm") <$let popupid_new=<<qualify "$(calendar_alarms_add_popup)$$id$">>> <span style="display:inline-block;position:relative;"> <$button class="$class$" style="$style$" popup=<<popupid_new>> tooltip="$tooltip$">{{$:/core/images/timestamp-on}}</$button> <$reveal state=<<popupid_new>> type="nomatch" text="" style="position:absolute;top:100%;right:0;z-index:1;"> <div class="tc-drop-down" style="min-width:auto;max-width:15em;padding:0.5em;"> <$list filter="[all[tiddlers+shadows]has:field[alarms]] +[limit[1]]"> <div style="border:1px solid gray;padding:0 2px;margin-bottom:1px;min-width:100%;max-height:10em;text-align:left;overflow:hidden auto;"> ''add an alarm to: ''<br> <$list filter="[all[tiddlers+shadows]has:field[alarms]] +[!has[draft.of]]"> <$button class="tc-btn-invisible" style="display:block;width:100%;padding:0;" actions=<<controls_alarms_new_actions>>> <$view field="caption"><$view field="title"/></$view> </$button> </$list> </div> </$list> <$button class="tc-button tt-button" style="display:block;width:100%;padding:0 0.25em;text-align:center;margin-bottom:1px;"> new alarm list <$action-createtiddler $basetitle="Alarms" text="{{||TiddlyTools/Time/Alarms}}" alarms="" caption=""> <$tiddler tiddler=<<createTiddler-title>>><<controls_alarms_new_actions>></$tiddler> </$action-createtiddler> </$button> </div> </$reveal> \end \define controls_alarms_new_actions() <$tiddler tiddler={{{ [[$:/temp/time/alarms_input/]addsuffix<currentTiddler>] }}}> <$action-setfield year={{{ [<date>split[]first[4]join[]] }}}/> <$action-setfield month={{{ [<date>split[]rest[4]first[2]join[]] }}}/> <$action-setfield day={{{ [<date>split[]rest[6]first[2]join[]] }}}/> </$tiddler> <$action-navigate $to=<<currentTiddler>>/> \end \define controls_tiddlers() <$tiddler tiddler=<<tt_calendar_config>>> <$checkbox index="calendar_showchanges" default="yes" checked="yes" unchecked="no" checkactions="<<controls_tiddlers_toggleall yes>>" uncheckactions="<<controls_tiddlers_toggleall no>>"> ''Tiddlers:'' </$checkbox> <div style="margin-left:1em;"> <$let defaultcolor={{{ [<tt_calendar_config>getindex[calendar_created]!match[Default]] ~[[RoyalBlue]] }}}> @@float:right;<<controls_colors "created" "calendar_created" >>@@ <$checkbox index="calendar_showcreated" default="yes" checked="yes" unchecked="no"> show created </$checkbox><br> <$let defaultcolor={{{ [<tt_calendar_config>getindex[calendar_modified]!match[Default]] ~[[LightBlue]] }}}> @@float:right;<<controls_colors "modified" "calendar_modified">>@@ <$checkbox index="calendar_showmodified" default="yes" checked="yes" unchecked="no"> show modified </$checkbox><br> <$checkbox index="calendar_showtiddlers" default="yes" checked="yes" unchecked="no"> include tiddler changes </$checkbox><br> <$checkbox index="calendar_showsystem" default="no" checked="yes" unchecked="no"> include system changes </$checkbox><br> <$checkbox index="calendar_showcustom" default="no" checked="yes" unchecked="no"> include filtered changes </$checkbox><br> <$reveal default={{##calendar_showcustom}} type="match" text="yes"> <style> .calEditCustom { width:100%; } </style> <$edit-text tag="input" class="calEditCustom" index="calendar_customfilter" default="[prefix[$:/config]]" placeholder="[prefix[$:/config]]"/> </$reveal> \end \define controls_tiddlers_toggleall(yesno) <$action-setfield $index="calendar_showcreated" $value="$yesno$"/> <$action-setfield $index="calendar_showmodified" $value="$yesno$"/> <$action-setfield $index="calendar_showtiddlers" $value="$yesno$"/> <$action-setfield $index="calendar_showsystem" $value="no"/> <$action-setfield $index="calendar_showcustom" $value="no"/> \end \define controls_events() <<controls_events_toggleall label:"''Events and Timelines:''" id:"settings">> @@display:block;clear:both;margin-left:1em; <<controls_events_list>> \end \define controls_events_toggleall(label:"''Events and Timelines:''",id:"") <$tiddler tiddler=<<tt_calendar_config>>> <$let defaultcolor={{{ [<tt_calendar_config>getindex[calendar_events]!match[Default]] ~[[LightGreen]] }}}> <$set name=allevents filter="[all[tiddlers+shadows]tag[events]] [suffix[.ics]] [all[tiddlers+shadows]tag[timeline]] +[!has[draft.of]sort[]]"> @@float:right;<<controls_colors "all_events_$id$" "calendar_events">>@@ @@float:right;margin-right:0.5em;<<controls_events_new "$id$">>@@ @@display:block;margin-right:3em; <$checkbox tiddler=<<tt_calendar_config>> index="calendar_showevents" default="yes" checked="yes" unchecked="no" checkactions="""<$action-setfield $tiddler=<<tt_calendar_config>> $index="events" $value=<<allevents>>/>""" uncheckactions="""<$action-setfield $tiddler=<<tt_calendar_config>> $index="events"/>"""> $label$ </$checkbox> \end \define controls_events_list(id:"") <$tiddler tiddler=<<tt_calendar_config>>> <$let defaultcolor={{{ [<tt_calendar_config>getindex[calendar_events]] ~[[LightGreen]] }}}> <$set name=allevents filter="[all[tiddlers+shadows]tag[events]] [suffix[.ics]] [all[tiddlers+shadows]tag[timeline]] +[!has[draft.of]sort[caption]] [[TiddlyTools/Time/Events]is[tiddler]]"> @@display:block;max-height:30em;overflow:auto; <$list filter=<<allevents>>> @@float:right;<<controls_colors "$id$" "eventcolor">>@@ <<controls_events_list_menu "$id$">> <div style="max-width:calc(100% - 3em);overflow:hidden;"> <$list filter="[<tt_calendar_config>getindex[events]enlist-input[]match<currentTiddler>]" emptyMessage=""" <$button class="tc-btn-invisible"> <input type="checkbox"> <$view field="caption"><$text text=<<currentTiddler>>/></$view> <$action-listops $tiddler=<<tt_calendar_config>> $index="events" $subfilter="[<currentTiddler>] +[sort[]]"/> <$action-setfield $tiddler=<<tt_calendar_config>> $index="calendar_showevents" $value="yes"/> </$button> """> <$button class="tc-btn-invisible"> <input type="checkbox" checked="checked"> <$view field="caption"><$text text=<<currentTiddler>>/></$view> <$action-listops $tiddler=<<tt_calendar_config>> $index="events" $subfilter="-[<currentTiddler>]"/> </$button> </$list> </div> </$list> \end \define controls_events_list_menu(id:"") <$let tip={{{ [<currentTiddler>get[caption]else<currentTiddler>addprefix[edit, copy, or delete ]] }}}> <$let popupid_menu=<<qualify "$(calendar_events_menu_popup)$$id$">>> <$button class="tc-btn-invisible" style="float:right;margin-right:0.5em;" popup=<<popupid_menu>> tooltip=<<tip>>> <$list filter="[<popupid_menu>is[missing]]" emptyMessage="{{$:/core/images/chevron-left}}">{{$:/core/images/menu-button}}</$list> </$button> <$reveal type="popup" state=<<popupid_menu>> class="tc-popup-keep" position="left"> <div style="transform:translate(-0.25em,0);font-size:90%;"> <<controls_events_list_edit>> <<controls_events_list_copy>> <<controls_events_list_delete "$id$">> </div> </$reveal> \end \define controls_events_list_delete(id:"") <$let tip={{{ [<currentTiddler>get[caption]else<currentTiddler>] +[addprefix[delete ]] }}}> <$let msg={{{ [<currentTiddler>get[caption]else<currentTiddler>] +[addprefix[Are you sure you want to delete "]addsuffix["?]] }}}> <$button class="tc-button tt-button" style="display:inline !important;width:auto;padding:0 0.5em;" tooltip=<<tip>>> {{$:/core/images/delete-button}} <$action-confirm $message=<<msg>>> <$action-deletetiddler $tiddler=<<currentTiddler>>/> <$action-listops $tiddler=<<tt_calendar_config>> $index="events" $subfilter="-[<currentTiddler>]"/> <$action-deletetiddler $tiddler=<<popupid_menu>>/> </$action-confirm> </$button> \end \define controls_events_list_edit() <$let tip={{{ [<currentTiddler>get[caption]else<currentTiddler>addprefix[edit ]] }}}> <$button class="tc-button tt-button" style="display:inline !important;width:auto;padding:0 0.5em;" tooltip=<<tip>>> {{$:/core/images/edit-button}} <$action-sendmessage $message="tm-edit-tiddler"/> <$action-deletetiddler $tiddler=<<popupid_menu>>/> </$button> \end \define controls_events_list_copy() <$let caption={{{ [<currentTiddler>get[caption]else<currentTiddler>] }}}> <$let tip={{{ [[copy ]addsuffix<caption>addsuffix[ to an event list]] }}}> <$set name="tip" filter="[<currentTiddler>tag[events]]" value={{{ [[copy ]addsuffix<caption>] }}} emptyValue=<<tip>> > <$button class="tc-button tt-button" style="display:inline !important;width:auto;padding:0 0.5em;" actions=<<controls_events_list_copy_caption>> tooltip=<<tip>>> {{$:/core/images/clone-button}} <<controls_events_list_copy_tiddler>> <$action-deletetiddler $tiddler=<<popupid_menu>>/> </$button> \end \define controls_events_list_copy_tiddler() \whitespace trim <!-- get event list --> <$let source=<<currentTiddler>>> <$set name="get_by_type" filter="[<source>tag[events]]" value="getevents_listed" emptyValue=<<get_by_type>>> <$set name="get_by_type" filter="[<source>suffix[.ics]]" value="getevents_ics" emptyValue=<<get_by_type>>> <$set name="get_by_type" filter="[<source>tag[timeline]]" value="getevents_timeline" emptyValue=<<get_by_type>>> <$wikify name="eventlist" text="<$macrocall $name=<<get_by_type>> convert=yes/>"> <$let lf={{{ [charcode[10]] }}} eventlist={{{ [enlist<eventlist>sort[]join<lf>] }}}> <!-- strip tidnum and .ics from source tiddler name --> <$let tidnum={{{ [<currentTiddler>split[ ]last[]multiply[1]!match[0]addprefix[ ]] }}}> <$let basetid={{{ [<currentTiddler>removesuffix<tidnum>else<currentTiddler>] }}}> <$let basetid={{{ [<basetid>removesuffix[.ics]else<basetid>] }}}> <!-- make new caption text --> <$let calname={{{ [<currentTiddler>get[text]splitregexp[\nX-WR-CALNAME.*:]rest[]splitregexp[\n]first[]trim[]] }}}> <$let caption={{{ [<currentTiddler>get[caption]else<calname>] }}}> <!-- clone the tiddler --> <$action-createtiddler $basetitle=<<basetid>> $savetitle="$(calendar_popup)$/copytiddler" type="text/plain" tags="events" text=<<eventlist>> caption=<<caption>> eventcolor={{!!eventcolor}}/> <!-- select new eventlist --> <$action-listops $tiddler=<<tt_calendar_config>> $index="events" $subfilter="[{$(calendar_popup)$/copytiddler}] -[<currentTiddler>] +[sort[]]"/> <$action-setfield $tiddler=<<tt_calendar_config>> $index="calendar_showevents" $value="yes"/> \end \define controls_events_list_copy_caption() <$tiddler tiddler={{$(calendar_popup)$/copytiddler}}> <!-- strip number from old caption --> <$let capnum={{{ [{!!caption}split[ ]last[]multiply[1]!match[0]] }}}> <$let oldcap={{{ [{!!caption}removesuffix<capnum>else{!!caption}] }}}> <!-- get new caption number from tiddler title --> <$let newnum={{{ [<currentTiddler>split[ ]last[]multiply[1]!match[0]] }}}> <$let newcap={{{ [<oldcap>trim[]!match[]addsuffix[ ]addsuffix<newnum>] }}}> <$action-setfield caption=<<newcap>>/> <$action-deletetiddler $tiddler="$(calendar_popup)$/copytiddler"> \end \define controls_events_new(id,class:"tc-btn-invisible",style:"",tooltip:"add an event") <$let popupid_new=<<qualify "$(calendar_events_add_popup)$$id$">>> <span style="display:inline-block;position:relative;"> <$button class="$class$" style="$style$" popup=<<popupid_new>> tooltip="$tooltip$">{{$:/core/images/new-button}}</$button> <$reveal state=<<popupid_new>> type="nomatch" text="" style="position:absolute;top:100%;right:0;z-index:1;"> <div class="tc-drop-down" style="min-width:auto;max-width:15em;padding:0.5em;"> <$let date={{{ [<date>!match[]else<now YYYY0MM0DD>] }}}> <$list filter="[all[tiddlers+shadows]tag[events]] [all[tiddlers+shadows]tag[timeline]] +[limit[1]]"> <div style="border:1px solid gray;padding:0 2px;margin-bottom:1px;min-width:100%;max-height:10em;text-align:left;overflow:hidden auto;"> ''add an event to: ''<br> <$list filter="[all[tiddlers+shadows]tag[events]] [all[tiddlers+shadows]tag[timeline]] +[!has[draft.of]]"> <$button class="tc-btn-invisible" style="display:block;width:100%;padding:0;" actions=<<controls_events_new_actions>>> <$view field="caption"><$view field="title"/></$view> </$button> </$list> </div> </$list> <$button class="tc-button tt-button" style="display:block;width:100%;padding:0 0.25em;text-align:center;margin-bottom:1px;"> new eventlist <$action-sendmessage $message="tm-new-tiddler" $param="New Event List" type="text/plain" tags="events" text={{{ [<date>addsuffix[;]addsuffix[enter event description here]] }}} caption="" eventcolor=""/> </$button> <$button class="tc-button tt-button" style="display:block;width:100%;padding:0 0.25em;text-align:center;"> new timeline <$action-sendmessage $message="tm-new-tiddler" $param="New Timeline" text="" tags="timeline" caption="" eventcolor="" list="" filter=""/> </$button> </$let> </div> </$reveal> \end \define controls_events_new_actions() <$let lf={{{ [charcode[10]] }}}> <$list filter="[<currentTiddler>tag[events]]"> <$let old={{{ [<currentTiddler>get[text]addsuffix<lf>addsuffix<lf>else[]] }}} new={{{ [<date>addsuffix[;]addsuffix[enter event description here]] }}}> <$action-sendmessage $message="tm-new-tiddler" title=<<currentTiddler>> text={{{ [<old>addsuffix<new>] }}}/> </$let> </$list> <$list filter="[<currentTiddler>tag[timeline]]"> <$action-sendmessage $message="tm-new-tiddler" $param={{{ [<currentTiddler>addsuffix[ Event]] }}} text="" caption="" tags=<<controls_events_new_tag>> timeline.start=<<date>> timeline.end=<<date>> timeline.type="" timeline.days=""/> </$list> <$action-listops $tiddler=<<tt_calendar_config>> $index="events" $subfilter="[<currentTiddler>] +[sort[]]"/> <$action-setfield $tiddler=<<tt_calendar_config>> $index="calendar_showevents" $value="yes"/> <$action-deletetiddler $tiddler=<<popupid_new>>/> </$let> \end \define controls_events_new_tag() [[$(currentTiddler)$]] \define controls_events_admin() <$let showevents="yes" popid=<<qualify "$(calendar_popup)$/events">>> @@position:relative; <$button class="tc-btn-invisible" popup=<<popid>> style="float:right;margin-right:0.5em;" tooltip="list events and timelines">📄</$button> <$reveal state=<<popid>> type="nomatch" text="" style="position:absolute;top:1.25em;left:-4em;"> <div class="tc-block-dropdown tt-shadowbox tc-popup-handle controlPanel" style="position:relative;margin-bottom:2em;"><<controls_events_admin_panel>></div> </$reveal> \end \define controls_events_admin_panel() <style> .calEvents table, .calEvents tr, .calEvents td { vertical-align:baseline;border:0;margin:0;padding:1px;font-size:100%;line-height:1em; } .calEvents a { padding:1px;font-size:100%;line-height:1em;font-style:normal !important; } </style> <!-- set panel width to fit sidebar --> <$let sidebarwidth={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}!match[]else[25em]] }}}> <div class="calEvents" style=<<calendar_adminpanel>>> <<controls_events_toggleall "''Events and Timelines:''" "admin">> <div class="tt-shadowbox inset" style="clear:both;margin-bottom:0.25em;">@@display:block;margin-left:1em;<<controls_events_list "admin">>@@</div> <$let calendar_state=<<popid>>> @@float:right;font-size:80%;display:flex; Year: <<controls_getyear "all" "all">> <<controls_reset date>>@@ <$let yyyy={{{ [<calendar_state>get[year]multiply[1]!match[0]pad[4]] }}}> <$wikify name="all" text="<$macrocall $name=getevents yyyy=<<yyyy>>/>"> __''<$text text={{{ [enlist<all>count[]] }}}/> events<$text text={{{ [<yyyy>!match[]addprefix[ in ]] }}}/>''__ <<controls_events_admin_table_clipboard>>  <$reveal default={{{ [<all>trim[]] }}} type="nomatch" text=""><<controls_events_admin_table>></$reveal> \end \define controls_events_admin_table() <div class="tt-shadowbox inset" style="clear:both;margin-top:0.25em;position:relative;"> <<controls_togglemax "00" "00" "position:absolute;top:0em;right:-2.5em;padding-right:1em;">> <$let width={{{ [<popid>get[hmax-00]match[yes]then[max-content]else[100%]] }}} height={{{ [<popid>get[vmax-00]match[yes]then[50vh]else[15em]] }}}> <div style=<<calendar_admintable>>> <table><$list filter="[enlist<all>removeprefix[....]addprefix<yyyy>] [enlist<all>!prefix[....]] +[sort[]]"> <$let date={{{ [<currentTiddler>split[;]nth[1]] }}} text={{{ [<currentTiddler>split[;]nth[3]] }}} link={{{ [<text>split[|]rest[]else<text>] }}} text={{{ [<text>split[|]first[]] }}}> <tr> <td style="text-align:right;"><$text text=<<date>>/></td> <td style="text-align:left;"><$link to=<<link>>>''<$text text=<<text>>/>''</$link></td> \end \define controls_events_admin_table_clipboard() <$list filter="[<all>trim[]!match[]]"> <$wikify name="output" text="<$list filter='[enlist<all>sort[]]'>{{{ [<currentTiddler>split[;]nth[1]] }}};<$text text={{{ [<currentTiddler>split[;]nth[3]split[|]first[]] }}}/> </$list>"> <$button class="tc-btn-invisible" style="display:inline !important;" tooltip="copy event list to clipboard"> {{$:/core/images/copy-clipboard}}<$action-sendmessage $message="tm-copy-to-clipboard" $param=<<output>>/> </$button> \end \define controls_colors(id,colorfield) \whitespace trim \define close() <$action-deletetiddler $tiddler=<<popid>>/> \define save() <$action-setfield $timestamp="no" $field="$colorfield$" $value={{{ [<popid>get[input]else[Default]] }}}/><<close>> \define dark() Black Blue DarkBlue DarkGreen DarkOliveGreen DarkSlateBlue DarkSlateGray DimGray ForestGreen Gray Indigo Maroon MediumBlue MidnightBlue Navy Purple RebeccaPurple \define X11() AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue BlueViolet Brown Burlywood CadetBlue Chartreuse Chocolate Coral CornflowerBlue Cornsilk Crimson Cyan DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DodgerBlue Firebrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HotPink IndianRed Indigo Ivory Khaki Lavender LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGray LightGreen LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin NavajoWhite Navy OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum PowderBlue Purple RebeccaPurple Red RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen Seashell Sienna Silver SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Tan Teal Thistle Tomato Turquoise Violet Wheat White WhiteSmoke Yellow YellowGreen <$let currentcolor={{{ [{!!$colorfield$}!match[]else<defaultcolor>] }}} swatchcolor={{{ [<currentcolor>match[Default]then<defaultcolor>else<currentcolor>] }}} popid=<<qualify "$(calendar_colors_popup)$$id$">> popid_list=<<qualify "$(calendar_colors_popup)$/list$id$">>> <$button class="tc-btn-invisible" popup=<<popid>> tooltip={{{ [[change color: ]addsuffix<currentcolor>] }}} style={{{ [[display:inline-block;border:1px solid gray;width:1em;height:1em;background:]addsuffix<swatchcolor>] }}}> <$action-setfield $tiddler=<<popid>> input=<<currentcolor>>/> </$button> <$reveal type="popup" state=<<popid>> position="left" class="tc-popup-keep" style="left:auto;right:0;"> <style>.calColorEdit { outline:none; width:10em; } .calColorList { outline:none; width:13.5em; }</style> <div style="min-width:auto;padding:0;transform:translate(-0.25em,-0.15em);font-size:90%;position:relative;"> <$keyboard key="escape" actions="<<close>>"><$keyboard key="enter" actions="<<save>>"> <$edit-text tiddler=<<popid>> field="input" default=<<currentcolor>> placeholder="Default" class="calColorEdit tc-popup-handle" focus="yes" focusPopup=<<popid_list>>/> <$reveal type="popup" state=<<popid_list>>> <$select tiddler=<<popid>> field="input" size="10" class="calColorList"> <option style={{{ [<popid>get[input]match[Default]then[bold]else[normal]] +[addprefix[font-weight:]] }}}>Default </option> <option style={{{ [<popid>get[input]match[Transparent]then[bold]else[normal]] +[addprefix[font-weight:]] }}}>Transparent</option> <$list filter=<<X11>> variable="color"><<controls_colors_option>></$list> </$select> </$reveal> </$keyboard></$keyboard> <$button class="tc-button tt-button" style="display:inline !important;padding:0 0.25em !important;" tooltip="cancel">{{$:/core/images/close-button}} <<close>></$button> <$button class="tc-button tt-button" style="display:inline !important;padding:0 0.25em !important;" tooltip="save" >{{$:/core/images/done-button}} <<save>> </$button> </div> </$reveal> \end \define controls_colors_option() <$let fg={{{ [enlist<dark>match<color>then[LightGray]else[Black]] }}} sel={{{ [<popid>get[input]match<color>then[bold]else[normal]] }}}> <option style.color=<<fg>> style.background=<<color>> style.font-weight=<<sel>>><<color>></option> \end \define controls_styles() \define edit(index,default) <$edit-text tag="input" index="$index$" default="$default$" placeholder="$default$"/> \define list(index,default,list) <$select index="$index$" default="$default$"><$list filter="$list$"><option><<currentTiddler>></option></$list></$select> <style> .calStyles table, .calStyles tr, .calStyles td { border:0;margin:0;padding:1px;width:100%;white-space:nowrap; } .calStyles tr td:first-child { width:1%; } .calStyles tr td:last-child { width:100%; } .calStyles input, .calStyles select { width:15em; } </style> <$tiddler tiddler=<<tt_calendar_config>>> <$let popupid_styles=<<qualify "$(calendar_popup)$/styles">>> <$let sidebarwidth={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}!match[]else[25em]] }}}> <span style="position:relative;"> <$button class="tc-btn-invisible" popup=<<popupid_styles>> style="float:right;" tooltip="calendar styles">🎨</$button> <$reveal state=<<popupid_styles>> type="nomatch" text="" style="position:absolute;top:1.25em;left:-4em;"> <div class="tc-block-dropdown tt-shadowbox tc-popup-handle controlPanel"> ''Calendar styles'' <div class="tt-shadowbox inset calStyles" style=<<calendar_adminpanel>>> | numbers|<<edit calendar_numbers "Black;font-size:1.5em;font-weight:bold;">>| | dayformat|<<edit calendar_dayformat "ddd, MMM DDth YYYY">>| | yearsize|<<edit calendar_yearsize "70%">>| | monthsize|<<edit calendar_monthsize "150%">>| | textsize|<<edit calendar_textsize "100%">>| | background|<<edit calendar_background "LightGray">>| | foreground|<<edit calendar_foreground "White">>| | today|<<edit calendar_today "Gold">>| | timers|<<edit calendar_timers "Orange">>| | alarms|<<edit calendar_alarms "Red">>| | journals|<<edit calendar_journals "OliveDrab">>| | events|<<edit calendar_events "LightGreen">>| | created|<<edit calendar_created "RoyalBlue">>| | modified|<<edit calendar_modified "LightBlue">>| | day order|<<edit calendar_order "0 1 2 3 4 5 6">>| | popup maxw|<<edit calendar_popup_maxw "40vw">>| | popup maxh|<<edit calendar_popup_maxh "30vh">>| | popup pos|<<list calendar_popup_pos "below" "left right above below aboveleft aboveright belowleft belowright">>| \end <<calendar>>
\define tt_time_config() $:/config/TiddlyTools/Time \define clock_show(type:"analog",offset,format) \define UTC() [UTC] <$let clock_size={{{ [<tt_time_config>get[clock_size]] ~[[15em]] }}} clock_bg={{{ [<tt_time_config>get[clock_background]] ~[[LightGray]] }}} clock_border={{{ [<tt_time_config>get[clock_border]] ~[[2px solid gray;]] }}} clock_numbers={{{ [<tt_time_config>get[clock_numbers]] ~[[Black;font-size:1.5em;]] }}} clock_hands={{{ [<tt_time_config>get[clock_hands]] ~[[Black]] }}} clock_ticks={{{ [<tt_time_config>get[clock_ticks]] ~[[Black]] }}} format={{{ [<__format__>!match[]] ~[<tt_time_config>get[clock_format]] ~[[DDD, YYYY-0MM-0DD 0hh:0mm:0ss]] +[addprefix<UTC>] }}} offset={{{ [[$offset$]!match[localtime]] ~[<now TZD>] }}}> <<clock_adjust "$type$">> \end \define clock_adjust(type) <$let time=<<now "[UTC]YYYY0MM0DD0hh0mm0ss0XXX">>> <!-- get time parts and days/month (adjust for leap year) --> <$let yy={{{ [<time>split[]first[4]join[]] }}} mm={{{ [<time>split[]first[6]last[2]join[]] }}} dd={{{ [<time>split[]first[8]last[2]join[]] }}} hh={{{ [<time>split[]first[10]last[2]join[]] }}} min={{{ [<time>split[]first[12]last[2]join[]] }}} ssxxx={{{ [<time>split[]last[5]join[]] }}} dpm={{{ [<yy>remainder[4]match[0]then[31 29 31 30 31 30 31 31 30 31 30 31]] ~[[31 28 31 30 31 30 31 31 30 31 30 31]] }}} dm={{{ [<dpm>split[ ]nth<mm>] }}}> <!-- apply timezone offset "+hh:mm" or "-hh:mm" --> <$let sign={{{ [<offset>split[]first[]] }}} hh={{{ [<hh>] =[<offset>split[]first[3]join[]] +[sum[]] }}} min={{{ [<min>] =[<offset>split[]last[2]join[]addprefix<sign>] +[sum[]] }}}> <!-- minutes wraparound --> <$let hh={{{ [<min>compare::lt[00]then<hh>subtract[1]] ~[<min>compare::gt[59]then<hh>add[1]] ~[<hh>] }}} min={{{ [<min>compare::lt[00]then<min>add[60]] ~[<min>compare::gt[59]then<min>subtract[60]] ~[<min>] }}}> <!-- hours wraparound --> <$let dd={{{ [<hh>compare::lt[00]then<dd>subtract[1]] ~[<hh>compare::gt[23]then<dd>add[1]] ~[<dd>] }}} hh={{{ [<hh>compare::lt[00]then<hh>add[24]] ~[<hh>compare::gt[23]then<hh>subtract[24]] ~[<hh>] }}}> <!-- date wraparound --> <$let mm={{{ [<dd>compare::lt[01]then<mm>subtract[1]] ~[<dd>compare::gt<dm>then<mm>add[1]] ~[<mm>] }}} dd={{{ [<dd>compare::lt[01]then<dpm>split[ ]nth<mm>] ~[<dd>compare::gt<dm>then[01]] ~[<dd>] }}}> <!-- month wraparound --> <$let yy={{{ [<mm>compare::lt[01]then<yy>subtract[1]] ~[<mm>compare::gt[12]then<yy>add[1]] ~[<yy>] }}} dd={{{ [<mm>compare::lt[01]then[31]] ~[<mm>compare::gt[12]then[01]] ~[<dd>] }}} mm={{{ [<mm>compare::lt[01]then[12]] ~[<mm>compare::gt[12]then[01]] ~[<mm>] }}}> <!-- assemble new time --> <$let time={{{ =[<yy>pad[4]] =[<mm>pad[2]] =[<dd>pad[2]] =[<hh>pad[2]] =[<min>pad[2]] =[<ssxxx>] +[join[]] }}}> <$list filter="[[$type$]match[analog]]"> <<clock_show_analog>> </$list> <$list filter="[[$type$]match[digital]]"><<clock_show_digital>></$list> \end \define clock_show_digital() <$text text={{{ [<time>format:date<format>] }}}/> \end \define clock_show_analog() <$let sec={{{ [<time>split[]butlast[3]last[2]join[]] }}} min={{{ [<time>split[]butlast[5]last[2]join[]] }}} hour={{{ [<time>split[]butlast[7]last[2]join[]] }}}> <div style="position:relative;height:$(clock_size)$;width:$(clock_size)$;background:$(clock_bg)$;border-radius:50%;border:$(clock_border)$;"> <<clock_showhands>><<clock_shownumbers>><<clock_showticks>><<clock_showAMPM>> \end \define clock_showhands() <style> .analogClockHands { position:absolute;top:50%;left:50%;transform-origin:top;border-radius:50%;border:1px solid $(clock_hands)$;background:$(clock_hands)$; } </style> <div class="analogClockHands" style="height:calc(50% - 3em);width:5px;transform:rotate(calc(180deg + ($(hour)$deg * 30) + ($(min)$deg * 0.5)));"></div> <div class="analogClockHands" style="height:calc(50% - 1em);width:3px;transform:rotate(calc(180deg + $(min)$deg * 6));"></div> <div class="analogClockHands" style="height:calc(50% - 0em);width:0px;transform:rotate(calc(180deg + $(sec)$deg * 6));"></div> \end \define clock_shownumbers() <$list filter="[range[1,12]]" variable="number"><<clock_shownumber>></$list> \define clock_shownumber() <div style="position:absolute;top:50%;left:50%;transform-origin:top;transform:rotate(calc($(number)$deg * 30)) translateY(calc($(clock_size)$ * -0.5));"> <div style="transform:rotate(calc($(number)$deg * -30)) translateX(-0.5em);"><div style="color:$(clock_numbers)$;">$(number)$</div></div> \end \define clock_showticks() <$list filter="[range[1,60]]" variable="tick"><<clock_showtick>></$list> \define clock_showtick() <div style="position:absolute;top:50%;left:50%;transform-origin:top;transform:rotate(calc($(tick)$deg * 6));"> <div style="transform:translateY(calc($(clock_size)$ * -0.5 + 1px));"><div style="height:2px;width:1px;background:$(clock_ticks)$;"></div></div> \end \define clock_showAMPM() <div style="position:absolute;top:70%;left:calc(50% - 1em);"> <$list filter="[<hour>compare::lt[12]then[AM]else[PM]]"><div style="color:$(clock_numbers)$;"><<currentTiddler>></div></$list> \end \define clock(type:"analog",offset,format) <$let offset={{{ [[$offset$]!match[]] ~[<tt_time_config>get[clock_timezone]] ~[[localtime]] }}}> <$button class="tc-btn-invisible" style="outline:none;cursor:initial;"> <$macrocall $name="clock_show" type="$type$" offset=<<offset>> format="$format$"/> </$button> \end <div style="display:inline-block;text-align:center;"> <$macrocall $name="clock" type="analog"/><br> <$macrocall $name="clock" type="digital"/> </div>
\define temp() $:/temp/time/CountDown/$(here)$ \define msg() $(temp)$/msg \define default_done() <$macrocall $name="showMessage" msg={{!!msg}}/> \define countdown_tick() <!-- called from TiddlyTools/Time/Ticker --> <$list filter="[prefix[$:/temp/time/CountDown]]" variable="temp"> <$list filter="[<temp>get[go]match[go]then<temp>]"> <<showRemaining>> <$list filter="[<temp>get[text]match[1]then<temp>]"> <$action-setfield $tiddler=<<temp>> go='stop'/> <$let here={{{ [<temp>split[/]last[]] }}}> {{!!done}} </$let> </$list> <$list filter="[<temp>get[text]!match[1]then<temp>]"> <$action-setfield $tiddler=<<temp>> text={{{ [<temp>get[text]subtract[1]] }}}/> </$list> </$list> </$list> \end \define showRemaining() <$tiddler tiddler=<<temp>>> <$let R={{{ [<temp>get[text]subtract[1]] }}}> <$action-setfield hours={{{ [<R>divide[3600]trunc[]pad[2]] }}} mins={{{ [<R>remainder[3600]divide[60]trunc[]pad[2]] }}} secs={{{ [<R>remainder[60]trunc[]pad[2]] }}}/> \end \define showMessage(msg:"Countdown completed") <$action-setfield $tiddler=<<msg>> subtitle="""<$text text="$(here)$"/>""" text="""@@font-size:2em; $msg$@@""" footer="<$button class='tc-button tt-button' message='tm-close-tiddler'>close<$action-deletetiddler $tiddler=<<currentTiddler>>/></$button>"/> <$action-sendmessage $message="tm-modal" $param=<<msg>>/> \end \define setCountdown(H:"00",M:"00",S:"00") <$tiddler tiddler=<<temp>>> <$action-setfield text={{{ [[$H$]multiply[60]add[$M$]multiply[60]add[$S$]] }}} hours={{{ [[$H$]pad[2]] }}} mins={{{ [[$M$]pad[2]] }}} secs={{{ [[$S$]pad[2]] }}} done=<<done>>/> \end \define getCountdown() \define edit(f,p) <$edit-text tiddler=<<temp>> field=<<__f__>> tag="input" class="tt-countdown" placeholder=<<__p__>> disabled={{{ [<temp>go[go]then[yes]] }}}/> <style> .tt-countdown { width:2.5em; text-align:center; } </style> <span title="enter hours, minutes and seconds"> <<edit hours hh>> <<edit mins mm>> <<edit secs ss>> \end \define getMessage() <$edit-text tiddler=<<temp>> field="msg" tag="input" size="30" default="" placeholder="enter a message"/> \define start(class:"tc-button tt-button",label:"start") <$tiddler tiddler=<<temp>>> <$let H={{!!hours}} M={{!!mins}} S={{!!secs}}> <$button class=<<__class__>> tooltip="start countdown"> <$list filter="[<H>add<M>add<S>!match[0]then<temp>!go[go]]" emptyMessage="@@color:gray;start@@" variable=none> <<__label__>><$macrocall $name="setCountdown" H=<<H>> M=<<M>> S=<<S>>/><$action-setfield go="go"/> </$list> </$button> \end \define pause(class:"tc-button tt-button",label1:"pause",label2:"resume") <$tiddler tiddler=<<temp>>> <$let tip={{{ [{!!go}match[go]then[pause]] ~[{!!go}match[stop]then[resume]] +[!match[]addsuffix[ countdown]] }}}> <$button class=<<__class__>> tooltip=<<tip>>> <$list filter="[<temp>get[text]compare:integer:gt[1]]" variable="has-countdown" emptyMessage="@@color:gray;<<__label1__>>@@"> <$list filter="[{!!go}match[]then<temp>]">@@color:gray;<<__label1__>>@@</$list> <$list filter="[{!!go}match[go]then<temp>]"><<__label1__>><$action-setfield go="stop"/></$list> <$list filter="[{!!go}match[stop]then<temp>]"><<__label2__>><$action-setfield go="go"/></$list> </$list> </$button> \end \define reset(class:"tc-button tt-button",label:"stop") <$button class=<<__class__>> tooltip="stop/reset countdown"><<__label__>><$action-deletetiddler $tiddler=<<temp>>/></$button> \end <$let here=<<currentTiddler>>> <$set name="done" filter="[<done>!match[]]" value=<<done>> emptyValue=<<default_done>>> <<getCountdown>> <<getMessage>> <<start>> <<pause>> <<reset>>
\define tt_time_config() $:/config/TiddlyTools/Calendar \define tt_calendar() TiddlyTools/Time/Calendar \define edit-date-selectday() \whitespace trim \define actions() <$let actionValue=<<newvalue>>><<inputActions>></$let> <$let UTC="[UTC]" time={{{ [<includetime>match[yes]then<now "0hh0mm0ss0XXX">] }}} template={{{ [<inputid>get[format]else<format>addprefix<UTC>] }}} newvalue={{{ [<date>addsuffix<time>format:date<template>] }}}> <$list filter="[<datepopup>!match[yes]]" variable="set_date"> <!-- OVERRIDE CALENDAR SHOWDAY() WITH SIMPLE "SELECTDAY" BUTTON --> <$button class="tc-btn-invisible" style={{{ [[display:inline !important;width:2.5em;height:2.5em;border:1px solid;background:]addsuffix<foreground>addsuffix[;]] }}} actions=<<actions>>> <span style={{{ [[color:]addsuffix<numbers>addsuffix[;]] }}}><<dd>></span> <$action-setfield $tiddler=<<inputid>> $field="text" $value=<<newvalue>>/> <$list filter="[<confirm>match[no]]"><<save>></$list> </$button> </$list> <$list filter="[<datepopup>match[yes]]" variable="show_popup"> <!-- ADD SHOWDAY_POPUP_EXTRAS() WITH "SELECTDAY" BUTTON --> <$importvariables filter=<<tt_calendar>>> <$let showday_popup_extras=""" <$button class="tc-button tt-button" style="text-align:center;width:100%;margin:0.25em 0;" actions=<<actions>>> ''select this date'' <$action-setfield $tiddler=<<inputid>> $field="text" $value=<<newvalue>>/> <$action-deletetiddler $filter="[<calendar_popID>]"/> <$list filter="[<confirm>match[no]]"><<save>></$list> </$button> """> <<showday>> </$let> </$importvariables> </$list> \end \define edit-date(tiddler:"",field:"",index:"",format:"YYYY/0MM/0DD",timestamp:"yes",confirm:"",default:"",placeholder:"",inputActions:"" tabindex:"",tag:"input",type:"calendar",datepopup:"",includetime:"",size:"",autoHeight:"yes",minHeight:"",rows:"",focus:"",class:"",id:"") \whitespace trim \define focus() <$list filter="[<popupid>is[missing]]"><$action-popup $state=<<popupid>> $coords="(0,0,0,0)"/></$list> \define save() <$action-setfield $timestamp=<<__timestamp__>> $tiddler=<<tiddler>> $field=<<field>> $index=<<index>> $value={{{ [<inputid>get[text]] ~[<value>] }}}/><<close>> \define delete() <$action-setfield $timestamp=<<__timestamp__>> $tiddler=<<tiddler>> $field=<<field>> $index=<<index>>/><<close>> \define close() <$action-deletetiddler $filter="[<popupid>] [<inputid>]"/> <style> .tt-editdate-button { height:1.5em; width:1.5em; padding:0; } </style> <$let tiddler={{{ [<__tiddler__>!match[]else<currentTiddler>] }}} field=<<__field__>> index={{{ [<__field__>match[]then<__index__>] }}} field={{{ [<field>addsuffix<index>match[]then[date]else<field>] }}} target={{{ [<field>!match[]else<index>] }}} value={{{ [<tiddler>get<target>] ~[<tiddler>getindex<target>] ~[<__default__>] }}} inputid={{{ [[$:/temp/TiddlyTools/edit-date/]] [<tiddler>] [[/]] [<target>] +[join[]] }}} popupid={{{ [[$:/state/popup/TiddlyTools/edit-date/]] [<tiddler>] [[/]] [<target>] [<qualify>] [<__id__>] +[join[]] }}} confirm={{{ [<__type__>match[button]then[no]] ~[<__confirm__>] }}} format=<<__format__>> thisyear=<<now "[UTC]YYYY">> thismonth=<<now "[UTC]MM">> yyyy={{{ [<inputid>get[year]else<thisyear>] }}} mm={{{ [<inputid>get[month]else<thismonth>] }}} type=<<__type__>> type={{{ [<type>match:caseinsensitive[calendar]then<tt_calendar>is[missing]then[date]] ~[<type>] }}} inputActions=<<__inputActions__>>> <span style="display:inline-block;" title={{{ [<value>!match[]else[select a date]] }}}> <$keyboard key="enter" actions="<<save>><<close>>"> <$keyboard key="escape" actions="<<close>>"> <$eventcatcher $focusin="<<focus>>" $mouseup="<<focus>>" $change="<$list filter='[<confirm>match[no]]'><<save>></$list>" > <$list filter="[<type>!match[button]]"> <$edit-text tiddler=<<inputid>> field="text" default=<<value>> placeholder=<<__placeholder__>> class="tc-popup-handle $class$" inputActions=<<inputActions>> tabindex=<<__tabindex__>> tag=<<__tag__>> type=<<type>> size=<<__size__>> focus=<<__focus__>> autoHeight=<<__autoHeight__>> minHeight=<<__minHeight__>> rows=<<__rows__>>/> </$list> <$list filter="[<type>match[button]]"> <$list filter="[<tt_calendar>is[tiddler]]"> <$button class="tc-button tt-button tt-editdate-button" actions=<<focus>>>📅</$button> </$list> <$list filter="[<tt_calendar>is[missing]]"> <$edit-text tiddler=<<inputid>> field="text" default=<<value>> inputActions=<<inputActions>> class="tt-editdate-button" tag="input" type="date" tabindex=<<__tabindex__>> size="1" focus=<<__focus__>>/> </$list> </$list> </$eventcatcher> </$keyboard> </$keyboard> <$list filter="[<popupid>is[tiddler]] [<inputid>get[text]!match<value>]"> <span style="position:absolute;"> <$list filter="[<confirm>!match[no]]"> <$button class="tc-button tt-button tt-editdate-button" tooltip="save input ">{{$:/core/images/done-button}} <<save>> </$button> <$button class="tc-button tt-button tt-editdate-button" tooltip="cancel input">{{$:/core/images/cancel-button}}<<close>> </$button> </$list> <$list filter="[<tiddler>has:field<field>] ~[<tiddler>has:index<index>]"> <$button class="tc-button tt-button tt-editdate-button" tooltip="delete input">{{$:/core/images/delete-button}}<<delete>></$button> </$list> </span> </$list> <$list filter="[<type>match:caseinsensitive[calendar]] [<type>match:caseinsensitive[button]] +[limit[1]then<tt_calendar>is[tiddler]]"> <div style="position:relative;" title="select a date"> <$reveal state=<<popupid>> type="popup" class="tc-popup-keep tc-block-dropdown" style="font-size:80%;line-height:100%;padding:0.5em;min-width:auto;"> <$tiddler tiddler=<<inputid>>> <$importvariables filter=<<tt_calendar>>> <$let datepopup=<<__datepopup__>> includetime=<<__includetime__>> showday=<<edit-date-selectday>>> <$macrocall $name="showmonth" yyyy=<<yyyy>> mm=<<mm>> view="edit"/> </$let> </$importvariables> <div>format:</div> <style>.editdate_format { width:100%; }</style> <$edit-text tag="input" class="editdate_format" tiddler=<<inputid>> field="format" default=<<format>> placeholder=<<format>> inputActions=<<inputActions>>/> </$tiddler> </$reveal> \end | author|''[ext[Eric Shulman|mailto:elsdesign@gmail.com]]''| | source|''https://tiddlytools.com/#TiddlyTools%2FTime%2FEditDate''| | updated|''<$view field="modified" format="date" template="DDD, MMM DDth YYYY at 0hh12:0mm:0ssam"/>''| | optional|<$link to=<<tt_calendar>>/>, <$link to=<<tt_time_config>>/>| !Introduction <<< The edit-date macro provides a user interface that combines the features of the `<$edit-text>` widget with "edit-in-place" buttons (save/cancel/delete) and a popup monthly calendar. This allows you to enter custom text or select and format a date from the calendar. <<< !Attributes <<< The macro uses the same parameters that are allowed by the `<$edit-text>` widget (except for `focusPopup`): |Parameter | Default |Description|h |tiddler | `<<currentTiddler>>` |The tiddler in which to save the input| |field | `date` |The field in which to save the input. Takes precedence over the `index` attribute| |index | |The index in which to save the input| |default | |Text to use when the target tiddler doesn't exist| |class | |CSS class(es) to be assigned to the generated HTML editing element| |placeholder | |Text to display when the target field is empty| |focus | `no` |Set to "yes" to automatically focus the input after creation| |tabindex | |Set the tabindex attribute of the input or textarea to the given value| |tag | `input` |Set the HTML editing element tag. For a multi-line editor use `tag:textarea`.| |type | `calendar` |Set the HTML editing element type attribute. `type:text` omits the calendar display. See notes below and [[HTML Input Types|https://www.w3schools.com/html/html_form_input_types.asp]] for more values| |size | |The size of the input field (in characters)| |autoHeight | `yes` |Either "yes" or "no" to specify whether to automatically resize textarea editors to fit their content| |minHeight | |Minimum height for automatically resized textarea editors, specified in CSS length units such as "px", "em" or "%"| |rows | |Sets the rows attribute of a generated textarea| |inputActions| |Optional actions that are triggered every time an input event occurs within the input field or textarea.<br>The variable `actionValue` is available to the `inputActions` and contains the value of the input field.| Additional macro parameters include `format`, `confirm`, `datepopup`, `includetime`, `timestamp` and `id`: |Parameter | Default |Description|h |format | |The [[TiddlyWiki Date Format|https://tiddlywiki.com/#DateFormat]] used to store a date selected from the calendar (default is `format:YYYY/0MM/0DD`)| |confirm | `yes` |Set to "no" to make changes to the field/index value immediately upon selecting a date. If `type:button` is specified, `confirm:no` is always used| |datepopup | `no` |Set to "yes" to show <$link to=<<tt_calendar>>/> with date popups and "select this date" button; otherwise, clicking a calendar date sets the field value| |includetime | `no` |Set to "yes" to include the current time in the stored result; otherwise, the time value is "000000000"| |timestamp | `yes` |Set to "no" to suppress changes to the timestamp fields of the target tiddler (modified/modifier, plus created/creator for new tiddlers)| |id | |Set to any unique name to differentiate multiple `edit-date` instances within the same tiddler| <<< !Notes <<< * Use `<<edit-date tiddler:tiddlername field:fieldname type:calendar>>` to embed a date input control in tiddler content. * Unlike the `<$edit-text>` widget, the `<<edit-date>>` macro allows you to input a value that is stored in the current tiddler. * If `type:calendar` is used and <$link to=<<tt_calendar>>/> is installed, a popup monthly calendar is automatically displayed when the input control receives the focus. ** <$button>{{$:/core/images/chevron-left}}</$button> displays the previous month. <$button>{{$:/core/images/chevron-right}}</$button> displays the next month. ** Click a date to update the field/index value using the [[TiddlyWiki Date Format codes|https://tiddlywiki.com/#DateFormat]] specified in the calendar popup. ** Changes to the field/index value are not updated until one of the following buttons is pressed: *** <$button>{{$:/core/images/done-button}}</$button> saves changes to the field/index value. *** <$button>{{$:/core/images/cancel-button}}</$button> cancels changes to the field/index value. *** <$button>{{$:/core/images/delete-button}}</$button> removes the field/index from the target tiddler. * If `type:date` is used (or `type:calendar` is used and <$link to=<<tt_calendar>>/> is //NOT// installed), then a system-provided fallback `date` input control is displayed. ** Press the small "calendar" icon shown in the input control to display the system-provided popup calendar. ** The appearance and function of the popup calendar depends upon the system you are using. ** Changes to the field/index value are made immediately upon selecting a date from the calendar. ** The `date` text input control is typically restricted to a specific date input format (e.g., "mm/dd/yyyy"). ** The input format and the format used to save the date in the target tiddler field/index may vary depending upon your current locale and system date/time settings. * If `type:button` is used, a calendar button is shown instead of a text input control. ** Press the button to display the calendar popup. ** Changes to the field/index value are made immediately upon selecting a date from the calendar. ** <$button>{{$:/core/images/delete-button}}</$button> removes the field/index from the target tiddler. * If `inputActions` uses any `<<macroname ...>>` syntax, then you will need to use `<$macrocall $name="edit-date" .../>` to invoke the `edit-date` macro in order to avoid conflicts with the macros specified in the `inputActions`. ** When using `confirm:yes` (the default), any `inputActions` will be invoked whenever the input value changes, even if that input has not yet been confirmed. If the input is then cancelled, the `inputActions` are NOT invoked again. For this reason, it is strongly recommended to use `confirm:no` when using `inputActions`, so that the results of any "side-effect" actions will remain in sync with the saved date input. * If several `edit-date` instances occur within a single tiddler and refer to the same target tiddler and field/index name, you can use `id:xxx` to provide a unique identifier for each instance. This permits the popup for each `edit-date` instance to operate independently. <<< !Examples <<< <code><$text text={{!!example1}}/></code><br>{{!!example1}}<br>view [[EditDateExample1]] <code><$text text={{!!example2}}/></code><br>{{!!example2}}<br>view [[EditDateExample2]] <code><$text text={{!!example3}}/></code><br>{{!!example3}}<br>view [[EditDateExample3]] <code><$text text={{!!example4}}/></code><br>{{!!example4}}<br>view [[EditDateExample4]] <code><$text text={{!!example5}}/></code><br>{{!!example5}}<br>view [[EditDateExample5]] <code><$text text={{!!example6}}/></code><br>{{!!example6}}<br>view [[EditDateExample6]] <<<
....0202;Groundhog Day ....0401;April Fools Day ....0505;Cinco de Mayo ....0614;Flag Day (US) ....0619;Juneteenth ....0911;Patriot Day (9/11 Remembrance) ....1224;Christmas Eve ....1226;Kwanzaa (first day) ....1231;New Year's Eve 20200308;Daylight Saving Time starts 20201101;Daylight Saving Time ends 20201103;Election Day (US) 20201211;Hanukkah (first day) 20210120;Inauguration Day (US) 20210314;Daylight Saving Time starts 20211107;Daylight Saving Time ends 20211129;Hanukkah (first day)
/*\ title: action-timeout.js type: application/javascript module-type: widget author: Eric Shulman elsdesign@gmail.com revision: 1.6 $action-timeout invokes actions once after a specified delay, or repeatedly at a specified interval. The timeoutID can be saved to a tiddler and used later to cancel an active timeout or interval. \*/ (function(){ /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; var Widget = require("$:/core/modules/widgets/widget.js").widget; var TimeoutWidget= function(parseTreeNode,options) { this.initialise(parseTreeNode,options); }; TimeoutWidget.prototype = new Widget(); TimeoutWidget.prototype.render = function(parent,nextSibling) { this.computeAttributes(); this.execute(); }; TimeoutWidget.prototype.execute = function() { this.tid = this.getAttribute("tid", ""); this.field = this.getAttribute("field", "text"); this.clear = this.getAttribute("clear", ""); this.delay = this.getAttribute("delay", ""); this.interval = this.getAttribute("interval",""); this.actions = this.getAttribute("actions", ""); if (this.getAttribute("autostart")) this.invokeAction(); }; TimeoutWidget.prototype.refresh = function(changedTiddlers) { var changedAttributes = this.computeAttributes(); if(Object.keys(changedAttributes).length > 0) { this.refreshSelf(); return true; } return this.refreshChildren(changedTiddlers); }; TimeoutWidget.prototype.allowActionPropagation = function() { return false; }; TimeoutWidget.prototype.invokeAction = function(triggeringWidget,event) { var id; var self=this; if (self.clear) { self.invokeActionString(self.actions,self,event); return clearTimeout(self.clear); } if (self.delay) { id=setTimeout( function() { self.invokeActionString(self.actions,self,event); }, self.delay); } if (self.interval) { id=setInterval(function() { self.invokeActionString(self.actions,self,event); }, self.interval); } if (self.tid && id) { $tw.wiki.setText(self.tid,self.field,null,id.toString()); } return true; // Action was invoked }; exports["action-timeout"] = TimeoutWidget; })();
MmDd terms add Precision
.
!! [[TmD/w46]] * Smartmatic Visit arrangements * LessonsLearned considerations * Budgets & Resource reviews
!! [[TmD/w47]] * Smartmatic Visit arrangements * LessonsLearned considerations * Budgets & Resource reviews
* [[᙮]] * ( [[🔝]] [[🆔]] [[📓]] [[🐟]] [[🔣]] [[🎛]] [[🔍]] [[🔑]] ... [[𝕹/]] [[🌴]] )NotMapped (perhaps shown via last few ? ** [[💥]] * {{🌴}}
.
* TwAtScale ?
- <<tag ㊿>>
edit $:/tags/TopLeftBar, adding only tiddlers that have short links to others.
* consider MetaData {{CpH##Wp}} using CpH ---- * AlterTags0 * https://unicode-table.com/en/blocks/general-punctuation/ * https://unicode-table.com/en/blocks/control-pictures/ * https://unicode-table.com/en/sets/symbols-for-nickname/ ** https://unicode-table.com/en/sets/arrow-symbols/ ** https://unicode-table.com/en/search/?q=arrows * https://unicode-table.com/en/blocks/miscellaneous-symbols-and-pictographs/
‘ [[hanswobbe]] ‘ in this AWS place. !!! Also: * HwW $:/status/UserName * [[hanswobbe]] $:/state/xememex/username * ... !!!! Username may also be used as a target string ( selector) for PsH
https://tiddlywiki5-git-geospatial-plugin-jermolene.vercel.app/#Variables
! FAIL save(s) # https://xememex.com/ # https://xememex.com/hans/index.html # https://xememex.com/eric-test/ (verify these steps) # https://xememex.com/eric-test#HansW ## this may be a bad idea since the newer load could over-write the changes in the other system via a PolledSave. ! Hints * https://xememex.com/docs/index.html * https://mail.google.com/mail/u/0/?tab=rm&ogbl#label/_++++-/FMfcgzGqRGgWspPNxjXkmzlvcLmqXHpm
* encourage GeoSpatial ** explain the foundation idea to JrTt ** Tweet with #TiddlyWiki ---- * https://www.flickr.com/groups/14850276@N23/ ** should probably rename the group to increase TwRecognition * fLat=44.2349&fLon=-76.6168&zl=17 ---- * https://www.flickr.com/photos/hwo/50107305627/in/dateposted-friend/ * https://xememex.com/hans/index.html#: * https://www.flickr.com/groups//pool/map?&fLat=44.2349&fLon=-76.6168&zl=17 * St Andrews ( for EMM & WCH ) ** https://www.flickr.com/photos/hwo/20273787/
Xx XememexH(wW) ( 2022-11)-11. * XxH/... may work ---- One appeal is that work is saved automatically. Typing in public is awkward, so try cutAndPaste Consider other apps that are easier to type in.
YourData.ca YourData.net YourData.org
* tagging Search... * PsH0.(Saved) filters may need to be shared. ** these could be copied to a cloud (shared) folder * Without Login many of the tiddler viewTemplate controls are not visible (particularly edit, etc.)
* https://digital-photography-school.com/ * https://digital-photography-school.com/author/darlene-hildebrandt/ * https://talk.tiddlywiki.org/t/shiraz-dynamic-tables-image-transclusion/3089 ---- {{𝕬}} {{⒈𝕬}}
!! e. * {e.} [[e.]] ; [[e._]] [[e._N]] |[[e._]] !! .do |<<edit-date tiddler:e._ field:.do type:text size:99>>| |[[e.open]] !! .open |<<edit-date tiddler:e.open field:.open type:text size:99>>| |[[→]] !! .do |<<edit-date tiddler:→ field:.do type:text size:77>>| |[[→]] !! .say |<<edit-date tiddler:→ field:.say type:text size:77>>| * ... EditList [[hFs]] [[hFs01]] [[hFsDoOpSa]]
{{!!t.head}}
<$details summary="e._" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!._}} /> ._ </$button> <br> <<edit-date field:_ type:text size:87>> <br> !!_: {{!!_}} [[e._]] </$details>
<$details summary="e.code" open="no" > __ ^^ {{!!title}} ^^ __ <<edit-date field:.code type:text size:99>> <br> {{!!.code}} [[e.code]] </$details>
<$details summary="e.cols" open="no" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.cols}} /> .cols </$button> <br> <<edit-date field:.cols type:text size:27>> <br> {{!!.cols}} [[e.cols]] </$details>
__ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.do}} /> .do </$button> <br> <<edit-date field:.do type:text size:87>> <br> {{!!.do}} :[[e.do]] <hr> <$list filter="[search:.due:literal<currentTiddler>]"><$link /> <br> </$list> [[e.do]]
HwX <<tag _>> thisIs [[e.do]] {{e.do||$:/core/ui/Buttons/edit}} <hr> !!! 🎛🈁 {{🎛/🈁}} <hr> |[[兹]] |
<$details summary="e.do.2?" open="no" > * GetPut 'nN'. !!! LinkGraphSimplification * start by cloning a larger component of a graph that is TooBigToEdit * add an initial $details section * use <<tag NeedsExcision>> to reduce the 'Link plot' * ... * consider how to could LinksInPage to find best opportunities </$details> <$details summary="snippetH" open="no" > * $:/config/EmptyStoryMessage * Show/Hide is backward * LinkedIn * QrSt * FooterH is a subTiddler that is a TransClusion that toggles {{FooterH}} </$details> <<tag _>> [[日]] [[㍘]] DoH LzHints FiH {{e.do||$:/core/ui/Buttons/edit}} [[#↑]] | <$checkbox tiddler="🔍↑" tag="$:/tags/BelowStory"></$checkbox> |[[🔍↑]] |@ Below |[[🔍↑]] shown | | <$checkbox tiddler="tidTextN" tag="$:/tags/ViewTemplate"></$checkbox> |[[tidTextN]] |@ Below |[[tidTextN]] shown | <$details summary="e.do Notes" open="no" > * ~ToDo ChatH PsH * document the upload to gDrive reliably * replace edit-date... with edit-list... # {{e.do||$:/core/ui/Buttons/edit}} added editPencil # TzkDemo if the key-able version of this file's name. # this is a temporary HackH to exploit the belowStory Template * [[$:/sib/GettingStarted]] <hr> {{DoH || hAsDc}} <hr> {{ActiveFooter || hAsDc}} <hr> {{e.date!do || hAsDc}} <hr> !!! [[e.date!do]] __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.do}} /> .do </$button> <br> <<edit-date field:.do type:text size:87>> <br> {{!!.do}} :[[e.do]] <hr> <$list filter="[search:.due:literal<currentTiddler>]"><$link /> <br> </$list> [[e.do]] </$details>
<$details summary="e.do" open="no" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.do}} /> .do </$button> <br> <<edit-date field:.do type:text size:87>> <br> {{!!.do}} :[[e.do]] <hr> <$list filter="[search:.due:literal<currentTiddler>]"><$link /> <br> </$list> [[e.do]] </$details>
<$details summary="has.!!title.in!!_" open="no" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.do}} /> .do </$button> <br> <<edit-date field:.do type:text size:87>> <br> {{!!.do}} :[[e.do]] <hr> <$list filter="[search:._:literal<currentTiddler>]"><$link /> <br> </$list> {{||e.due}} </$details>
<$details summary="e.due" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.due}} /> .due </$button> <br> <<edit-date field:.due type:text size:87>> <br> {{!!.due}} [[e.due]] </$details>
{{||$:/core/ui/Buttons/edit}}
<$details summary="e.go" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.go}} /> .go </$button> <br> <<edit-date field:.go type:text size:87>> <br> !!.go: {{!!.go}} [[e.go]] </$details>
<$details summary="e.open" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.open}} /> .open </$button> <br> <<edit-date field:.open type:text size:75>> <br> !!e.open: {{!!.open}} :[[e.open]] </$details>
[[→]] ToDo035 DoN ShowMenu <br> {{||e.rows}}
<$details summary="e.rows" open="no" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.rows}} /> .rows </$button> <br> <<edit-date field:.rows type:text size:72>> <br> {{!!.rows}} [[e.rows]] </$details>
<$details summary="e.say" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.say}} /> .say </$button> <br> <<edit-date field:.say type:text size:87>> <br> !!.say: {{!!.say}} [[e.say]] </$details>
<$details summary="e.tabs" > __ ^^ {{!!title}} ^^ __ <$button> <$action-setfield $tiddler="$:/StoryList" $field="list" $value={{!!.tabs}} /> ._ </$button> <br> <<edit-date field:.tabs type:text size:87>> <br> !!_: {{!!_}} [[e.tabs]] </$details>
<$details summary={{{ [all[current]split[#️⃣]!is[blank]nth[]] }}} > <div style="height:1px;margin:0 0 -9px 0;"> <div style="float:right;margin:-15px -6px 0 0;text-align:center;border-style:solid;border-width:1px;width: 200px;background-color:white;height:20px;border-color:gray;"> ^^<$link to={{!!title}} {{...}} tooltip="Open Transcluded Source Tiddler">㠭</$link> ; [[⒈/a.m.]] [[p.m.]] ; [[hAsDc]] ; [[丌👁]] ; [[👁]] ; <$button message=tm-open-window param={{!!title}} class=tc-btn-invisible tooltip="Open Related Tiddler in New Window" >{{$:/core/images/open-window}}</$button>^^ </div> </div> {{!!text}} </$details>
Ideally, for TW + Cs @ scale i.e. ( 🐟 > 🐳 )
Try via Mario's plugin * establish efficient Username conventions ** Unconventional ones will need to be documented to avoid confusion and frustration. * confirm that this is the .../public/... site ** confirm the alternative too *** try via DiigoH HypothesisH / * autoSave is still working effectively * Test variations of Editor. # So far, so good.
* short signIn
!!! [[quiz2]]. * Settings could be incorporated, together with their acceptable values ** TransClusion could be used to good effect. * EditList may even be usful as would the ControlsH checkboxes I use. The effect is visible in [[quizCode]]
* separate ...Code tides could be use used, for each Tag that collects the participants ** this might be complicated by the need for separate Fields <$list filter="[tag[quiz]!enlist{!!remembered}]"> <details> <summary>{{!!title}}</summary><p> <<< <$transclude /> <$checkbox listField="remembered" checked={{!!title}} tiddler=<<storyTiddler>> > Done? </$checkbox> <<< </p></details> </$list> <$button setTitle=<<storyTiddler>> setField="remembered" >reset</$button>
Testing [[quizTid]] to determine the value of this technique to me. * order can be changed with DnDrop within the Tag ** a sort field may be useful since otherwise the order will seem to vary eratically besed on processing sequence. * It is a type of popUp. * The 'Ok' could become ... anything ( e.g. Done? ) * a nextTid could likely be incorporated ** ... * Can these be nested? possible as TransClusion(s), via hAsDc ? ---- * https://talk.tiddlywiki.org/t/notion-like-icon-and-pagecover/1741 * has the double SVG icon error find that has now been fixed
.
\define simple-pagination(scope:"[all[tiddlers]!is[system]]", stateTiddler:"") <$let state = "$:/temp/pagination/$(currentTiddler)$" tempTid = {{{ [<__stateTiddler__>!is[blank]then<state>addsuffix[/$stateTiddler$]else<state>] }}} titlePrefix = {{{ [<tempTid>get[text]] }}} listfilter = "[uppercase[]prefix<titlePrefix>]" > <!-- create header --> <$list filter="$scope$ :map[split[]first[]] +[uppercase[]unique[]sort[]]"> <$button><$text text=<<currentTiddler>> /> <$action-setfield $tiddler=<<tempTid>> text=<<currentTiddler>> /> </$button> </$list> <!-- generate outputs --> <$list filter="[subfilter<__scope__>filter<listfilter>sort[title]]" template="$:/core/ui/ListItemTemplate" /> </$let> \end <<simple-pagination scope:"[all[tiddlers+shadows]]" stateTiddler:3>> <$details summary="..." > See [[⟔📓⟓]]. ForestH stems from TreeTops [[🌴🔝]] . </$details>
_ : 'hi' startingPoints:( <<tag .da>> [[.f]] . [[㍘ 1]] . [[~#]] . [[:59]] [[/Tt]] ) _-: : _-: EditListH [[2023050.]] _. : ,,/$,, a DD is starting ,,/$/,, OR ,,/$,, ... ,,\$,, `,,<$...,, ... ,,</$...>,,` -: : {{ᢳ##ᢳ0}} . : ( " This is (from) [[ᢳ]]. " )`{{ᢳ##.}}` GeoSpatial .0 : `{{ᢳ##.}} {{ᢳ##0}} {{ᢳ##tagsh}} {{ᢳ##dotn}} {{ᢳ##.0}} {{ᢳ##.da}} {{ᢳ##.f}}` .da : [[ᢳ]]: [[.ho]] [[.da]] [[.we]] [[.fo]] [[.mo]] [[.qu]] [[.ye]] [[.de]] [[㊿\]] .do : AhH GoalsH ToDo WhyH 'hamburger' DynamicMenu .e : EditListH CamelCase .e.edd : <$edit-text tiddler="EdD" field="_" tag="input" size="91" /> <br> {{EdD!!list}} .e.list : edit-list ... .f : [[.f]]: get: ... .h : {{ᢳ##h.home}} .tn : TnT .tp : TpT .tt : ( [[ᢳ📓]] [[:59]] )TtT ; [[☽]] [[-08]] .say: SayH {{!!.say}} .we : {{ᢳ##週}} [[週+]] .ᢳ : ... longTagsString via (just) 'ᢳ' ᢳ : {{ᢳ##ᢳ0}} ᢳ⌂ : `{{ᢳ##ᢳ⌂}}` h.home ᢳ0 : ( [[🔣]] wip ... )ᢳ0 ᢳ1 : {{ᢳ##say}} 0 : `{{ᢳ##0}}` DoTt DoTn 06 : [[06:00]] [[㍞:59]] 1 : ... [[🔛]] "on" (see NotMapped) ; [[Ⴍ]] rather than current QrSt 59 : [[🆔/丌]] [[:59]] - during the next hour ahh : ( braaceClaim )AhH.[[ᢳ]] data: DataFix ; dataSquare ; d0 : [[.da]] <<tag a.m.>> DataFix <<tag p.m.>> <<tag 日>> do : do.T(ime)t(his) do0 : An EntryPoint:... <hr> do1 : {{ᢳ##HiFrom}} <br> {{ᢳ##usage}} <br> {{ᢳ##Use}} <br> {{ᢳ##Hints}} do2 : Clusters save verticalSpace & become DdId (dataDictionaries) do3 : reduce ᢳ.CpH.Data dotn : ( DoTda {{DoTn!!_}} ) dotp : ( [[CpH]] [[丌]] [[H丌]] ; StVar )DoTp ; [[卯㋁/⑧/今]] ; 卯㋁/⑦/-18 dott : ( [[汇]] [[卯🗣]]@16:40 [[今]]@17:09 兹次 <<tag ᢳ.>> )DoTt h.home : [[ᢳ⌂]] hi : "Hi!:" from ... [[ᢳ]].HwW howto : HowTo - enhance EditListN say : [[do:]] displays ... ; AlarmT wp : WikiPedia ㊿/ : ㊿\[[ᢳ/䷴]] acronyms: { ... )acronyms arguments: ᢳ##arguments: ... cph: CpH C(ontrol) p(oint) H(w...) IsA DataDictionary tiddler within a TiddlyWiki file. <br> dataDics: dateDictionaries to include codeStrings - [[ᢳ]] CpH done: Choose a Tab to separate the Display field from the DataDictionary MicroContent. <br> FiCoRe: Findings Conclusions Recommendations h0: [[ᢳ/⌘]] GoalsH headings: may be useful. hiFrom: hiFrom: Make this an Introduction/PreFix/Abstract/... for the [[ᢳ]].[[do:]] capability<br> hint: in - ᢳ##`key` - replace `key` with the rowValue ( e.g. `{{ᢳ##_}}` ). hints: This file strives for 'minimalist' presentation.<br> h: [[ᢳ]] [[ᢳℋ]] keyable: Characters can be used to craft a path through these messages.<br> lines: can be revealed in an incremental process via a simple Field edit.<br> linkedin: LinkedIn microStory: MicroStory is a small story crafted from various DataDictionary entries<br> now: [[今]] [[兹]] ... [[次]] ouim: OuIm (is) Ou(tput from and ) Im(port) . (to - 3charDestination - yielding:) phrases: PhraseStrings ; NotMapped print: should be easy - perhaps even deviceUse should be easy, as could ExportImport<br> q: (the NO character is intended - Queue) rootstrap: [[symbols]] . BootStrap symbols: [[🔣]] tagsh: <<tag _>> <<tag 🔝>> <<tag ㋄>> <<$:/tags/TiddlerInfo>> usage: Usage: ...<br> use: Use the [[./]].'[[do:]]' tab to display textStrings (messageStrings ? storyStrings ? ...).<br> way: WayH WayId WayT why: WhyH wip: ( TftDf AdManCa )workInProgress wipCtrl: [[🎛]] ; [[🎛/.open]] [[🎛/.open/N]] x: [[᙮]] is a character :map indeX zz: | ... | 週 : [[週.]] ; `{{ᢳ##週}}` [[週+]] ᢳ:.¡⑴☽♂☿♃♀♄☉⎔㊿z今兹次⁇ÿ� ᢳshow : `{{ᢳ##show}}`
- [[★]] HwW [[-]] [[ᢳ]] * start switching to the [[📓]] (book) DataDictionary symbols * different $:/status/UserName settings could distinguish dateOfActivities * start to distinguish the non MetaTid versions of tiddlers ** should the Menu symbol be over-loaded by using it for Meta too? *** this could be tested by trying to port this specific tiddler back into its parent Source *** can dataDictionaries be used to resolve possible conflicts? **** this would have the effect of making the NrH name ConText sensitive. ***** How does AcH fit into this nameSpace pattern? * import raised the question of whether Save & Re-load is needed in this cloudWay? ** skipping the explicit Save successfully suggests it is not needed !!! NewsH * https://www.cbc.ca/news/business/twitter-mastodon-faq-1.6642946? * ... <hr> `<<tree ᢳ>>` <<tree ᢳ>>
<$edit-text field="_" class="tc-edit-texteditor" minHeight="5em" autoHeight="yes" /> <br> {{!!_}} ; [[🔍]] <hr>
[[⒣]] [[ℋ]] [[🐳]] [[ℋ🐳]] * when should this be an Author name? *... !!! ⒈TwH SysFlowH * WayH WhyH * [[TiddlyTools/Catalog]]
[[ᢳ]]
* should ℋ㋄ be used as a !!modified value? ** in collaboration with [[:59]] PsH *** an extension to add the currentWeek symbol may be effective * GeoSpatial may have TestWidget
[[⮣]] |[[★]] | * Associative or Commutative ?? * this seems to apply only when the order of the Source and Destination are changed. ---- * list-dragable-table controls the columns by using a separate columStructure tiddler # Effective over-write warning exist
* an initial NrH ( repo ) N(ame) r(ules) H suggestion
{{∅}}
* this be a Home, not House (house with [[🏡]] Garden) symbol. ** Perhaps colors can effectively distinguish "synonym" meanings *** recover the color code from prior file(s)
! [[①♄]] * review ** the locally installed plugins ** the desire to also support a private version, with common code ** the MicroContent concepts of of portsbility amongst the largest practical set of files * start a TiddlyHostV530 file ** do not upgrade the XmmxH file until discussions with JrHw are done * consider this tids leading character in the QrSt contexts * it may be appropriate to have an AcH expansion of "tids" ** what should the twoChar trigger be? *** typ-able is advantageaous, so 'zz' ? **** check an Englist dictionary for 'zz'... ***** hz... , zx... , xz ... , ... TweT * [[㊻/♄]] [[e._]] * ( GitHubTt & GitHubTn )GitHub may be useful. ** .OR. today today+1 tags. * should there be a 46scriptH too? * PsH may not be needed given the topLeft control. ** how is that UlcPosition achieved? * DataDictionary use may help test the ability to pull MicroContent from other places. ** this might have Rename considerations *** ExportImport the Sota dictionaries from the WipH edition. *** especially if SymbolsH ideas are implemented * [[$:/config/ViewTemplateBodyFilters/default]] ---- <$details summary="BpH" > !! Productivity @ XememexH ( BpXeH ) * TabH Productivity seems very good, even on poor ViaCa service. ** pauses seem less likely to cause 'net issues. *** sync warning received **** review after arrival at a reliable location to see if it self-corrects. ** take care not to exit the browser since this might lose the in-flight edits. *** if( GoodOrBad ) will depend on ... * penAndPaper or TalkH capture may be needed when re-positioning email in time. ** links to Cascade repos would be useful. </$details> {{LaLo || hAsDc}} {{FairPay || hAsDc}}
! [[①♄]] !!! TweT * shouldthis be ... ---- * [[㊻/♄]] [[e._]] * ( GitHubTt & GitHubTn )GitHub may be useful. ** .OR. today today+1 tags. * should there be a 46scriptH too? * PsH may not be needed given the topLeft control. ** how is that UlcPosition achieved? * DataDictionary use may help test the ability to pull MicroContent from other places. ** this might have Rename considerations *** ExportImport the Sota dictionaries from the WipH edition. *** especially if SymbolsH ideas are implemented * [[$:/config/ViewTemplateBodyFilters/default]] ---- <$details summary="BpH" > !! Productivity @ XememexH ( BpXeH ) * TabH Productivity seems very good, even on poor ViaCa service. ** pauses seem less likely to cause 'net issues. *** sync warning received **** review after arrival at a reliable location to see if it self-corrects. ** take care not to exit the browser since this might lose the in-flight edits. *** if( GoodOrBad ) will depend on ... * penAndPaper or TalkH capture may be needed when re-positioning email in time. ** links to Cascade repos would be useful. </$details> {{LaLo || hAsDc}} {{FairPay || hAsDc}}
<<list-table-draggable 丌cols>> {{🔍}}
|DevTp | * https://giffmex.org/gifts/documenting.tw.html * https://giffmex.org/gifts/documenting.tw.html#Create%20tiddlers%20based%20on%20templates%20from%20missing%20links ---- * It should be possible to exploit a localStore plugin ** ... * I seem to be rejecting the idea of a leading sigil in the tiddlerName. ** does this include the use of !!icon ?? ** Should the leading character in title concepts be tested here? ---- !!! Clone command # It was an explicit CMD (which removes it from the dropDown selector) * There seemed to be a missing Clone option in the view template inspite of the Settings.
!! [[♄]] * note: DiigoH appears active ** ... * https://xememex.com/hans/index.html#HwwPubX:HwwPubX
TweTt 今兹次 ㍡ ☽♂☿♃♀♄☉日 ㊺ 且 [[㊿\]] ㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉ [[㋊]] ㋋ <br> <$details open="no" > [[⧗]] [[⎇🔍]] AlterTags0 CpH <br> [[㍨]] ☽♂☿♃♀♄☉ [[☉]] [[日]] <<tag ㏾>> [[㋊]] [[月]] [[子]] ; DynaList TimeTags [[∅]] <br> [[㍘]] [[㍙]] [[㍚]] [[㍛]] [[㍜]] [[㍝]] [[㍞]] [[㍟]] [[㍠]] [[㍡]] [[㍢]] [[㍣]] [[㍤]] [[㍥]] [[㍦]] [[㍧]] [[㍨]] [[㍩]] [[㍪]] [[㍫]] [[㍬]] [[㍭]] [[㍮]] [[㍯]] [[㍰]] <br> [[㏠]] [[㏡]] [[㏢]] [[㏣]] [[㏤]] [[㏥]] [[㏦]] [[㏧]] [[㏨]] [[㏩]] [[㏪]] [[㏫]] [[㏬]] [[㏭]] [[㏮]] [[㏯]] [[㏰]] [[㏱]] [[㏲]] [[㏳]] [[㏴]] [[㏵]] [[㏶]] [[㏷]] [[㏸]] [[㏹]] [[㏺]] [[㏻]] [[㏼]] [[㏽]] [[日/.]] [[㏾]] <br> [[今]] [[兹]] [[次]] <<tag 週>> [[𝘇]]52 <<tag 𝘇>> [[𝗘.]] 𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬 ㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋ [[㋉]] [[㋉]] [[㋊]] [[㋋]] [[丑]] [[⦑]] <<tag 月>> 𝗻𝗼𝗽 <br> [[⦒]] <<tag 丑>> [[∅]] [[⺞]] [[⧗]] DynaList DashboardTt {{DashboardTt}} <hr> <hr>FAIL: <$list filter="[all[current]tags[]]+[tag[A]]"> <div data-tags={{{ [all[current]get[tags]] }}} > <div class="alert-"> <$transclude/> </div></div> </$list> </$details>
<$let here=<<currentTiddler>>> <$macrocall $name="tabs" tabsList={{!!tabsList}} default="TabH1" state={{{ [[$:/state/tab/]addsuffix<here>addsuffix<qualify>] }}} actions="""<$action-listops $tiddler=<<here>> $tags="-[tags[]] +[<currentTab>]"/>""" />
!! ㉝/㊿ # 卯㋇/㉝/今 set as $:/status/UserName # resumed use to support Mukesh/Dev !! ⑳ * [[⑳/㊿]] couild be used as a !!modifier in $:/status/UserName ** note 2charLink support ---- !!! ⑲ * This tiddler is renamed as Weeks progress. ** would [[⑱/Tp]] or [[Tp/⑱]] be more clear *** all of the other ProNouns can also be considered. **** focus on Nouns( NounWord and NonWord ) first since these tokens can be effective as .f(ind) targets. ** consider how to exploit Cascades in these contexts. * whale(twFile)+globe(geoSpatial) ** consider SVG versions * Check DanGowans to see if SSM uses the GitHub wikis ** consider stating this as a requirement for the many tech. job seekers that approach
{{||e.say}} <ol> <$list filter={{!!_}}> <li><<currentTiddler>>, <<storyTiddler>></li> </$list> </ol> <<tree ㊻>>
* [[㊺]]/㋋ !! The CellH device works at Xememex. Test it with the CurbSide app If dictation is not available, use another App with a good viewPort that supports it.
... GitHub !! TweT contains the weekNo * https://talk.tiddlywiki.org/t/twexe-updates-the-hta-plugin-not-the-single-file-exe/5371 ---- It should be very easy and effective to import the objects produced by the countDownSaver. ---- Perhaps globe&hGrid OR ...vGrid lines !!! Some of the default Filters may be quite useful. e.g.: * [list[$:/StoryList]] -$:/AdvancedSearch ** this works well when combined with !!.open * !!from ( [[⇔]] ) ?? ** Version might be set via an exotic trailing sigil *** perhaps e.g. [[㊻]][[/]] [[㊻]]ᢳ **** via a tree OR [[㊻ᢳ]] which is then decremented to the next available tid ---- ! TweT * try showing a Stort with more than one tiddler via RemarkableH * link to HwPri * ( GitHubTt & GitHubTn )GitHub may be useful. ** .OR. today today+1 tags. * PsH may not be needed given the topLeft control. ** how is that UlcPosition achieved? * DataDictionary use may help test the ability to pull MicroContent from other places. ** this might have Rename considerations *** especially if SymbolsH ideas are implemented ---- !! Productivity [[Bp/]]/Xe IsOne @ [[⇔Xe]] XememexH * TabH Productivity seems very good, even on poor ViaCa service. ** pauses seem less likely to cause 'net issues. *** sync warning received **** review after arrival at a reliable location to see if it self-corrects. ** take care not to exit the browser since this might lose the in-flight edits. *** if( GoodOrBad ) will depend on ... * penAndPaper or TalkH capture may be needed when re-positioning email in time. ** links to Cascade repos would be useful. ---- !! Try outlining FairPay here and linking to DiigoH * alternatively, consider PDFs * how does convertIo co pare to the Adobe link Lz provided? * FairPay is giving rise to FairPlay under the influence of increasuing regulation and ESG concerns ** Governance is of primary importance to our CorporateTransition ** Environment - flooding, AirPolution, electrification, costalHabitatLoss, ... will be long-term challenges ** Social pressures are increasingly evident as major Political problems in growing Civil Disobediance ---- from LatLong: (to gMaps): * <a href="https://www.latlong.net/c/?lat=44.237250&long=-76.569680" target="_blank">(44.237250, -76.569680)</a> ---- |TiddlyHost LinkedIn |
*there can be a leading TopicsH *㊿ is the terminating MilestonesH **intermediate values can be used as MilestonesH markers **Week numbers are frequent since there are 52 values ( -ve0 & 0 ) [[⓪]] [[⒈/a.m.]] [[p.m.]] [[①]] ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ [[⑱]] ⑲ ⑳ ㉑ ㉒ ㉓ ㉔ ㉕ ㉖ ㉗ ㉘ ㉙ ㉚ ㉛ ㉜ ㉝ ㉞ ㉟ ㊱ ㊲ ㊳ ㊴ ㊴ [[月/]] ㊵ ㊶ ㊷ ㊸ ㊹ ㊺ ㊻ ㊼ ㊽ ㊾ [[㊿]] [[⦒]] !<<tag ㊼>> <<tag ㊿>> . [[㊿🔣]] !!! [[㉕]] . GraphicTechs [[㊴]] <<tag ㊴>> [[㋉]] !!! [[⑫]] <<tag ⑫>> . [[🔣⑫]] !!!! [[⑥]] <<tag ⑥>> . [[🔣⑥]] !!!!! [[③]] <<tag ③>> . [[🔣③]] !!!!!! [[①]] <<tag ①>> . [[🔣①]]
https://www.diigo.com/user/hanswobbe
| ㍩♀ [[☿]] ♃♀ - see editTemplate | * [[Tw/Notes]] AlterTags0 [[H/TagSteps]] ( try an enlist ) * TdaT1107 2022-11-02 2022-11-03 ** https://xememex.com/ * https://xememex.com/docs/index.html ---- !!! [[㏧]] <<tag ㏧>> * SideEditor ** does not have a visible control ** is there a keyboard shortcut that I can use to activate this? ---- ! Tp: !! problem was writeButNoRead permission * could this process toggle the Dirty bit? * Pause for Save polling? ** Jeremy's statement about CurbSide v. Xememex suggests that there may be a fault here *** If Saver(s) do not persist, then maintenance is different **** PsH exports could help
[[★]] [[ᢳ]] * should this be ** renamed? (as a <<tag >>) ? ... testing ... *** can it be part of a RootDay import of variables? *** if renamed; does 'modified' persist?
* use a more up-to-date version
* Can this tiddler also serve as a "mow" Tid? * this: ** is readily key-able ** can be searched as a [[.fo]] string *** test this using the Els Search pattern(s) ---- Update the Els TiddlyTools as needed.
* the tag <<-19>> is part of the ExportImport solution. * this value may also be of use
.
* updates are needed ** topLeftBar host tiddler needs to be identified ** ... * https://xememex.com/hans/index.html#%E5%AF%85%E3%8B%8B%2F%E3%8F%B9:%E5%AF%85%E3%8B%8B%2F%E3%8F%B9 * https://www.howtogeek.com/225487/what-is-the-difference-between-127.0.0.1-and-0.0.0.0/
.
* Try linking this into XememexH via DiigoH ** this might effectively make DiigoH like a DataDictionary *** check the DiigoApi * note the opportunities inherent in supporting YOTI as the first on many Verified Token Issuers. ** Preponderance of Evidence is a useful concept here
{ dd: [[📓]]
[[🔍_]] [[⮃⇄]] <<tag ⛏>> {{TiddlyTools/Buttons/SaveChanges}} [[🔍]]: <$select tiddler="$:/temp/searchfilter" default="_" > <option value="[has[_]search:_{$:/temp/search}]"> _ </option> <option value="[has[-]search:-{$:/temp/search}]"> - </option> <option value="[has[.]search:.{$:/temp/search}]"> . </option> <option value="[has[.do]search:.do{$:/temp/search}]"> .do </option> <option value="[has[.due]search:.due{$:/temp/search}]"> .due </option> <option value="[has[.n]search:.n{$:/temp/search}]"> .n </option> <option value="[has[.open]search:.open{$:/temp/search}]"> .open </option> <option value="[has[.rank]search:.rank{$:/temp/search}]"> .rank </option> <option value="[has[.re]search:.re{$:/temp/search}]"> .re </option> <option value="[has[.say]search:.say{$:/temp/search}]"> .say </option> <option value="[has[caption]search:caption{$:/temp/search}]"> caption </option> <option value="[has[list]search:list{$:/temp/search}]"> list </option> <option value="[has[notes]search:notes{$:/temp/search}]"> notes </option> <option value="[has[t.head]search:t.head{$:/temp/search}]"> t.head </option> <option value="[has[t.foot]search:t.foot{$:/temp/search}]"> t.foot </option> <option value="[has[tags]search:tags{$:/temp/search}]"> tags </option> <option value="[search:title{$:/temp/search}]"> title </option> <option value="[has[timeline.start]search:timeline.start{$:/temp/search}]"> timeline.start </option> </$select> <$edit-text tiddler="$:/temp/search" tag="input" /> <br> <$macrocall $name="list-links" filter={{$:/temp/searchfilter}} /> <$details summary="🔍.N" > * ... justSearchChars * <<tag $:/tags/ViewTemplate>> * within Tag/SORT : https://talk.tiddlywiki.org/t/tw5-how-to-sort-by-date/1321/2 ** should this be added if a larger timeperiod is used ? * use Buttons to (re)_set the value {{$:/temp/searchfilter}} * found an error in the Rank search selection. Fixed, but needs more tests. * http://wwwhww.news/u/cwSNkeLNXf local: <<edit-list tiddler:"$:/temp/hwInput" filter:" # FolkT LzH TwH HwX TtT #.+ ㊿ ᢳ ⌂ " find:and focusPopup:yes goto:yes stretch:yes>> <br> {{$:/temp/hwInput}} <hr> </$details> {{||⭾}}
\define config() $:/config/TiddlyTools/FindTitles <style> .tt-findTitles input[type=text] { min-width:30vw; } .tt-findTitles input[type=checkbox] { width:auto !important; } .tt-findTitles .columns3 { display:block; column-count:3; column-gap:1em; } .tt-findTitles .small { font-size:80%; line-height:1.3em; } .tt-findTitles .nowrap { white-space:nowrap; } </style> <span class="tt-findTitles"> find titles containing: <$edit-text tiddler=<<config>> index="text" tag="input" focus="yes"/><br> in <$checkbox tiddler=<<config>> index="tiddler" checked="is[tiddler]" unchecked=""> tiddlers </$checkbox> <$checkbox tiddler=<<config>> index="shadow" checked="is[shadow]" unchecked=""> shadows </$checkbox> <$checkbox tiddler=<<config>> index="system" checked="is[system]" unchecked=""> system </$checkbox> <$checkbox tiddler=<<config>> index="tag" checked="is[tag]" unchecked=""> tags </$checkbox> <$checkbox tiddler=<<config>> index="missing" checked="is[missing]" unchecked=""> missing </$checkbox> <$checkbox tiddler=<<config>> index="orphan" checked="is[orphan]" unchecked=""> orphans </$checkbox> <$checkbox tiddler=<<config>> index="image" checked="is[image]" unchecked=""> images </$checkbox> <$checkbox tiddler=<<config>> index="binary" checked="is[binary]" unchecked=""> binaries </$checkbox> <$tiddler tiddler=<<config>>> <$wikify name="is" text="{{##tiddler}}{{##shadow}}{{##system}}{{##tag}}{{##missing}}{{##orphan}}{{##image}}{{##binary}}"> <$wikify name="filter" text="[<<is>>search:title[{{##text}}]sort[]]"> <$reveal default=<<is>> type="nomatch" text=""> <p/> __There are <$count filter=<<filter>>/> tiddlers matching ''<$text text=<<filter>>/>''__ <blockquote class="columns3 small nowrap"> <$list filter=<<filter>>><$link/><br></$list> </blockquote> </$reveal>
[[᙮]] [[🔍]] SymbolsH & IconsH are BpH objectives * https://talk.tiddlywiki.org/t/using-unicode-as-icons-on-tiddlers/4698/19?u=hans_wobbe ** charsAsIcons # edit-... .!!tabsList * https://yqnn.github.io/svg-path-editor/ * https://www.svgrepo.com/svg/353655/discord-icon {{||#}}
FullSize character(s)
{"tiddlers":{"$:/Acknowledgements":{"title":"$:/Acknowledgements","text":"TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|https://jasmine.github.io/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"},"$:/core/copyright.txt":{"title":"$:/core/copyright.txt","type":"text/plain","text":"TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2024, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."},"$:/core/icon":{"title":"$:/core/icon","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"},"$:/core/images/add-comment":{"title":"$:/core/images/add-comment","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"},"$:/core/images/advanced-search-button":{"title":"$:/core/images/advanced-search-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"},"$:/core/images/auto-height":{"title":"$:/core/images/auto-height","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"},"$:/core/images/blank":{"title":"$:/core/images/blank","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"},"$:/core/images/bold":{"title":"$:/core/images/bold","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"},"$:/core/images/cancel-button":{"title":"$:/core/images/cancel-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"},"$:/core/images/chevron-down":{"title":"$:/core/images/chevron-down","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"},"$:/core/images/chevron-left":{"title":"$:/core/images/chevron-left","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"},"$:/core/images/chevron-right":{"title":"$:/core/images/chevron-right","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"},"$:/core/images/chevron-up":{"title":"$:/core/images/chevron-up","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"},"$:/core/images/clone-button":{"title":"$:/core/images/clone-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"},"$:/core/images/close-all-button":{"title":"$:/core/images/close-all-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"},"$:/core/images/close-button":{"title":"$:/core/images/close-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"},"$:/core/images/close-others-button":{"title":"$:/core/images/close-others-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"},"$:/core/images/copy-clipboard":{"title":"$:/core/images/copy-clipboard","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"},"$:/core/images/default-layout":{"title":"$:/core/images/default-layout","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-default-layout tc-image-button\" viewBox=\"0 0 128 128\">\n <path d=\"M71.93 72A8.07 8.07 0 0 1 80 80.07v7.86A8.071 8.071 0 0 1 71.93 96H8.07A8.067 8.067 0 0 1 0 87.93v-7.86A8.072 8.072 0 0 1 8.07 72h63.86Zm0 32a8.07 8.07 0 0 1 8.07 8.07v7.86a8.071 8.071 0 0 1-8.07 8.07H8.07A8.067 8.067 0 0 1 0 119.93v-7.86A8.072 8.072 0 0 1 8.07 104h63.86Zm0-104A8.068 8.068 0 0 1 80 8.07v47.86A8.073 8.073 0 0 1 71.93 64H8.07A8.07 8.07 0 0 1 0 55.93V8.07A8.072 8.072 0 0 1 8.07 0h63.86Zm48 0c2.14 0 4.193.85 5.706 2.364A8.067 8.067 0 0 1 128 8.07v111.86c0 2.14-.85 4.193-2.364 5.706A8.067 8.067 0 0 1 119.93 128H96.07c-2.14 0-4.193-.85-5.706-2.364A8.067 8.067 0 0 1 88 119.93V8.07c0-2.14.85-4.193 2.364-5.706A8.067 8.067 0 0 1 96.07 0h23.86ZM116 24h-16a3.995 3.995 0 0 0-2.828 1.172 3.995 3.995 0 0 0 0 5.656A3.995 3.995 0 0 0 100 32h16a3.995 3.995 0 0 0 2.828-1.172 3.995 3.995 0 0 0 0-5.656A3.995 3.995 0 0 0 116 24Z\"/>\n</svg>"},"$:/core/images/delete-button":{"title":"$:/core/images/delete-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"},"$:/core/images/done-button":{"title":"$:/core/images/done-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"},"$:/core/images/down-arrow":{"title":"$:/core/images/down-arrow","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"},"$:/core/images/download-button":{"title":"$:/core/images/download-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"},"$:/core/images/edit-button":{"title":"$:/core/images/edit-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"},"$:/core/images/erase":{"title":"$:/core/images/erase","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"},"$:/core/images/excise":{"title":"$:/core/images/excise","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"},"$:/core/images/export-button":{"title":"$:/core/images/export-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"},"$:/core/images/file":{"title":"$:/core/images/file","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"},"$:/core/images/fixed-height":{"title":"$:/core/images/fixed-height","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"},"$:/core/images/fold-all-button":{"title":"$:/core/images/fold-all-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"},"$:/core/images/fold-button":{"title":"$:/core/images/fold-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"},"$:/core/images/fold-others-button":{"title":"$:/core/images/fold-others-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"},"$:/core/images/folder":{"title":"$:/core/images/folder","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"},"$:/core/images/full-screen-button":{"title":"$:/core/images/full-screen-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"},"$:/core/images/github":{"title":"$:/core/images/github","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"},"$:/core/images/gitter":{"title":"$:/core/images/gitter","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"},"$:/core/images/globe":{"title":"$:/core/images/globe","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"},"$:/core/images/heading-1":{"title":"$:/core/images/heading-1","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"},"$:/core/images/heading-2":{"title":"$:/core/images/heading-2","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"},"$:/core/images/heading-3":{"title":"$:/core/images/heading-3","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"},"$:/core/images/heading-4":{"title":"$:/core/images/heading-4","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"},"$:/core/images/heading-5":{"title":"$:/core/images/heading-5","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"},"$:/core/images/heading-6":{"title":"$:/core/images/heading-6","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"},"$:/core/images/help":{"title":"$:/core/images/help","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"},"$:/core/images/home-button":{"title":"$:/core/images/home-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"},"$:/core/images/import-button":{"title":"$:/core/images/import-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"},"$:/core/images/info-button":{"title":"$:/core/images/info-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"},"$:/core/images/italic":{"title":"$:/core/images/italic","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"},"$:/core/images/layout-button":{"title":"$:/core/images/layout-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-layout-button tc-image-button\" viewBox=\"0 0 24 24\" stroke-width=\"1\" stroke=\"none\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><rect x=\"2\" y=\"2\" width=\"7\" height=\"7\" rx=\"2\"/><rect x=\"2\" y=\"13\" width=\"7\" height=\"9\" rx=\"2\"/><rect x=\"12\" y=\"2\" width=\"10\" height=\"20\" rx=\"2\"/></svg>"},"$:/core/images/left-arrow":{"title":"$:/core/images/left-arrow","created":"20150315234410875","modified":"20150315235324760","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"},"$:/core/images/line-width":{"title":"$:/core/images/line-width","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"},"$:/core/images/link":{"title":"$:/core/images/link","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"},"$:/core/images/linkify":{"title":"$:/core/images/linkify","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"},"$:/core/images/list-bullet":{"title":"$:/core/images/list-bullet","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"},"$:/core/images/list-number":{"title":"$:/core/images/list-number","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"},"$:/core/images/list":{"title":"$:/core/images/list","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"},"$:/core/images/locked-padlock":{"title":"$:/core/images/locked-padlock","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"},"$:/core/images/mail":{"title":"$:/core/images/mail","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"},"$:/core/images/mastodon":{"title":"$:/core/images/mastodon","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-mastodon tc-image-button\" viewBox=\"0 0 128 128\">\n <path d=\"M112.716,76.735C111.231,85.764 99.411,95.646 85.836,97.561C78.757,98.559 71.787,99.476 64.355,99.073C52.201,98.415 42.61,95.646 42.61,95.646C42.61,97.044 42.683,98.374 42.829,99.619C44.409,113.79 54.723,114.639 64.493,115.035C74.354,115.434 83.134,112.163 83.134,112.163L83.539,122.695C83.539,122.695 76.642,127.071 64.355,127.875C57.58,128.315 49.167,127.674 39.369,124.61C18.118,117.965 14.463,91.202 13.904,64.048C13.733,55.985 13.839,48.383 13.839,42.024C13.839,14.257 29.238,6.118 29.238,6.118C37.002,1.905 50.326,0.134 64.177,-0L64.517,-0C78.369,0.134 91.701,1.905 99.465,6.118C99.465,6.118 114.864,14.257 114.864,42.024C114.864,42.024 115.057,62.511 112.716,76.735ZM96.7,44.179C96.7,37.307 95.219,31.847 92.245,27.807C89.177,23.767 85.16,21.696 80.174,21.696C74.403,21.696 70.034,24.316 67.146,29.556L64.337,35.118L61.529,29.556C58.64,24.316 54.271,21.696 48.501,21.696C43.514,21.696 39.497,23.767 36.43,27.807C33.455,31.847 31.974,37.307 31.974,44.179L31.974,77.8L43.249,77.8L43.249,45.167C43.249,38.288 45.699,34.796 50.599,34.796C56.017,34.796 58.733,38.938 58.733,47.128L58.733,64.99L69.941,64.99L69.941,47.128C69.941,38.938 72.657,34.796 78.075,34.796C82.975,34.796 85.425,38.288 85.425,45.167L85.425,77.8L96.7,77.8L96.7,44.179Z\"/>\n</svg>\n"},"$:/core/images/menu-button":{"title":"$:/core/images/menu-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"},"$:/core/images/minus-button":{"title":"$:/core/images/minus-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-minus-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64 0c35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64C0 28.654 28.654 0 64 0zm.332 16c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"/><rect width=\"80\" height=\"16\" x=\"24\" y=\"56\" rx=\"8\"/></svg>"},"$:/core/images/mono-block":{"title":"$:/core/images/mono-block","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"},"$:/core/images/mono-line":{"title":"$:/core/images/mono-line","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"},"$:/core/images/network-activity":{"title":"$:/core/images/network-activity","tags":"$:/tags/Image","text":"<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-network-activity tc-image-button\" viewBox=\"0 0 128 128\"><g class={{{ [{$:/state/http-requests}match[0]then[]else[tc-network-activity-background]] }}}>\n<$list filter=\"[{$:/state/http-requests}match[0]]\" variable=\"ignore\">\n<path d=\"M64.043 45.153a4.002 4.002 0 0 1 4.367 2.21l.084.188 30.403 73.4a4 4 0 0 1-7.307 3.25l-.084-.188-3.103-7.49-8.898 8.899a3.985 3.985 0 0 1-2.624 1.166l-.205.005a3.987 3.987 0 0 1-2.828-1.171l-9.849-9.848-9.847 9.848a3.985 3.985 0 0 1-2.624 1.166l-.204.005a3.987 3.987 0 0 1-2.829-1.171l-8.899-8.9-3.102 7.491a4 4 0 1 1-7.391-3.062l30.403-73.4a4.001 4.001 0 0 1 4.495-2.39l.042-.008Zm13.636 56.74-8.023 8.024 7.02 7.019 8.023-8.022-7.02-7.02Zm-27.353.008-7.019 7.019 8.016 8.016 7.019-7.02-8.016-8.015Zm13.68-13.68-8.023 8.023 8.016 8.016 8.023-8.023-8.016-8.016Zm-8.971-8.971-4.687 11.315 8.001-8.001-3.314-3.314Zm17.933.009-3.305 3.305 7.979 7.979-4.674-11.284ZM64 57.607l-5.666 13.68c.096.072.188.15.278.232l.133.126 5.261 5.262 5.262-5.262c.128-.127.261-.244.4-.35L64 57.607Zm0-34.69a8 8 0 1 1 0 16 8 8 0 0 1 0-16Z\"/>\n</$list>\n<$list filter=\"[{$:/state/http-requests}!match[0]]\" variable=\"ignore\">\n<path d=\"M109.395.952a4.002 4.002 0 0 1 3.787 2.708C117.529 11.62 120 20.753 120 30.462c0 15.186-6.044 28.96-15.858 39.047a4 4 0 1 1-6.47-4.626l-.12-.094C106.466 56.074 112 43.914 112 30.462c0-8.492-2.205-16.469-6.074-23.39l.054-.036a4 4 0 0 1 3.415-6.084Zm-90.762 0a4 4 0 0 1 3.072 6.562l.093.06A47.786 47.786 0 0 0 16 30.463c0 13.315 5.42 25.363 14.176 34.058l-.01.007a4 4 0 1 1-6.312 4.863l-.063.05C14.017 59.359 8 45.613 8 30.462c0-9.77 2.502-18.956 6.9-26.952A4.002 4.002 0 0 1 18.634.952Z\"/><path d=\"M64.043 44.698a4.002 4.002 0 0 1 4.367 2.21l.084.188 30.403 73.4a4 4 0 0 1-7.307 3.25l-.084-.188-3.103-7.49-8.898 8.9a3.985 3.985 0 0 1-2.624 1.166l-.205.005a3.987 3.987 0 0 1-2.828-1.172l-9.849-9.848-9.847 9.848a3.985 3.985 0 0 1-2.624 1.167l-.204.005a3.987 3.987 0 0 1-2.829-1.172l-8.899-8.899-3.102 7.49a4 4 0 0 1-7.391-3.061l30.403-73.4a4.001 4.001 0 0 1 4.495-2.39l.042-.009ZM77.68 101.44l-8.023 8.023 7.02 7.019 8.023-8.022-7.02-7.02Zm-27.353.007-7.019 7.019 8.016 8.016 7.019-7.019-8.016-8.016Zm13.68-13.68-8.023 8.023 8.016 8.016 8.023-8.023-8.016-8.016Zm-8.971-8.971L50.348 90.11l8.001-8.001-3.314-3.314Zm17.933.009-3.305 3.305 7.979 7.979-4.674-11.284ZM64 57.152l-5.666 13.68c.096.073.188.15.278.232l.133.127 5.261 5.261 5.262-5.261c.128-.128.261-.244.4-.351L64 57.152ZM38.503 1.058a4 4 0 0 1 2.7 6.952l.17-.175C35.582 13.625 32 21.625 32 30.462c0 8.838 3.582 16.838 9.374 22.629a4 4 0 0 1-5.659 5.658l-.01.01C28.473 51.52 24 41.526 24 30.485 24 19.567 28.374 9.67 35.466 2.453a3.995 3.995 0 0 1 3.037-1.395ZM89.369.952c1.14 0 2.17.478 2.899 1.244l.005-.006C99.518 9.43 104 19.434 104 30.485c0 10.826-4.3 20.648-11.287 27.85a4 4 0 1 1-6.054-5.213l-.032-.032C92.418 47.299 96 39.299 96 30.462c0-8.73-3.496-16.643-9.164-22.416A4 4 0 0 1 89.368.952Zm-39.282 11.14a4 4 0 0 1 2.59 7.048l.01.009A15.95 15.95 0 0 0 48 30.462a15.95 15.95 0 0 0 4.687 11.315l-.01.01a4 4 0 1 1-5.82 5.47l.173.177A23.925 23.925 0 0 1 40 30.462a23.925 23.925 0 0 1 7.03-16.97l.01.01a3.991 3.991 0 0 1 3.047-1.41Zm27.895.07a3.99 3.99 0 0 1 2.984 1.336l.006-.005A23.925 23.925 0 0 1 88 30.463a23.92 23.92 0 0 1-6.707 16.642l-.3.305a4 4 0 1 1-5.679-5.632v-.002A15.95 15.95 0 0 0 80 30.462a15.95 15.95 0 0 0-4.685-11.312 4.012 4.012 0 0 1-1.333-2.987 4 4 0 0 1 4-4ZM64 22.463a8 8 0 1 1 0 16 8 8 0 0 1 0-16Z\"/>\n</$list>\n</g></svg>"},"$:/core/images/new-button":{"title":"$:/core/images/new-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"},"$:/core/images/new-here-button":{"title":"$:/core/images/new-here-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"},"$:/core/images/new-image-button":{"title":"$:/core/images/new-image-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"},"$:/core/images/new-journal-button":{"title":"$:/core/images/new-journal-button","tags":"$:/tags/Image","text":"<$parameters size=\"22pt\" day=<<now \"DD\">>><svg width=<<size>> height=<<size>> class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><$text text=<<day>>/></tspan></text></g></svg></$parameters>"},"$:/core/images/opacity":{"title":"$:/core/images/opacity","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"},"$:/core/images/open-window":{"title":"$:/core/images/open-window","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"},"$:/core/images/options-button":{"title":"$:/core/images/options-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"},"$:/core/images/paint":{"title":"$:/core/images/paint","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"},"$:/core/images/palette":{"title":"$:/core/images/palette","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"},"$:/core/images/permalink-button":{"title":"$:/core/images/permalink-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"},"$:/core/images/permaview-button":{"title":"$:/core/images/permaview-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"},"$:/core/images/picture":{"title":"$:/core/images/picture","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"},"$:/core/images/plugin-generic-language":{"title":"$:/core/images/plugin-generic-language","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-language tc-image-button\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"},"$:/core/images/plugin-generic-plugin":{"title":"$:/core/images/plugin-generic-plugin","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-plugin tc-image-button\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"},"$:/core/images/plugin-generic-theme":{"title":"$:/core/images/plugin-generic-theme","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> viewBox=\"0 0 128 128\" class=\"tc-image-plugin-generic-theme tc-image-button\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"},"$:/core/images/plus-button":{"title":"$:/core/images/plus-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-plus-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64-.333c35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64zM64 16c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"/><rect width=\"80\" height=\"16\" x=\"24\" y=\"56\" rx=\"8\"/><rect width=\"16\" height=\"80\" x=\"56\" y=\"24\" rx=\"8\"/></svg>"},"$:/core/images/preview-closed":{"title":"$:/core/images/preview-closed","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"},"$:/core/images/preview-open":{"title":"$:/core/images/preview-open","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"},"$:/core/images/print-button":{"title":"$:/core/images/print-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"},"$:/core/images/quote":{"title":"$:/core/images/quote","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"},"$:/core/images/refresh-button":{"title":"$:/core/images/refresh-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"},"$:/core/images/right-arrow":{"title":"$:/core/images/right-arrow","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"},"$:/core/images/rotate-left":{"title":"$:/core/images/rotate-left","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"},"$:/core/images/save-button-dynamic":{"title":"$:/core/images/save-button-dynamic","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-save-button-dynamic tc-image-button\" viewBox=\"0 0 128 128\">\n<g class=\"tc-image-save-button-dynamic-clean\">\n<path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/>\n</g>\n<g class=\"tc-image-save-button-dynamic-dirty\">\n<path d=\"M64.856912,0 C100.203136,0 128.856912,28.653776 128.856912,64 C128.856912,99.346224 100.203136,128 64.856912,128 C29.510688,128 0.856911958,99.346224 0.856911958,64 C0.856911958,28.653776 29.510688,0 64.856912,0 Z M64.856912,16 C38.347244,16 16.856912,37.490332 16.856912,64 C16.856912,90.509668 38.347244,112 64.856912,112 C91.3665799,112 112.856912,90.509668 112.856912,64 C112.856912,37.490332 91.3665799,16 64.856912,16 Z\"></path>\n<circle cx=\"65\" cy=\"64\" r=\"32\"></circle>\n</g>\n</svg>"},"$:/core/images/save-button":{"title":"$:/core/images/save-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"},"$:/core/images/size":{"title":"$:/core/images/size","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"},"$:/core/images/spiral":{"title":"$:/core/images/spiral","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"},"$:/core/images/stamp":{"title":"$:/core/images/stamp","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"},"$:/core/images/star-filled":{"title":"$:/core/images/star-filled","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"},"$:/core/images/storyview-classic":{"title":"$:/core/images/storyview-classic","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"},"$:/core/images/storyview-pop":{"title":"$:/core/images/storyview-pop","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"},"$:/core/images/storyview-zoomin":{"title":"$:/core/images/storyview-zoomin","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"},"$:/core/images/strikethrough":{"title":"$:/core/images/strikethrough","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"},"$:/core/images/subscript":{"title":"$:/core/images/subscript","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"},"$:/core/images/superscript":{"title":"$:/core/images/superscript","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"},"$:/core/images/tag-button":{"title":"$:/core/images/tag-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"},"$:/core/images/theme-button":{"title":"$:/core/images/theme-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"},"$:/core/images/timestamp-off":{"title":"$:/core/images/timestamp-off","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"},"$:/core/images/timestamp-on":{"title":"$:/core/images/timestamp-on","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"},"$:/core/images/tip":{"title":"$:/core/images/tip","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"},"$:/core/images/transcludify":{"title":"$:/core/images/transcludify","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"},"$:/core/images/twitter":{"title":"$:/core/images/twitter","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"},"$:/core/images/underline":{"title":"$:/core/images/underline","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"},"$:/core/images/unfold-all-button":{"title":"$:/core/images/unfold-all-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"},"$:/core/images/unfold-button":{"title":"$:/core/images/unfold-button","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"},"$:/core/images/unlocked-padlock":{"title":"$:/core/images/unlocked-padlock","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"},"$:/core/images/up-arrow":{"title":"$:/core/images/up-arrow","created":"20150316000544368","modified":"20150316000831867","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"},"$:/core/images/video":{"title":"$:/core/images/video","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"},"$:/core/images/warning":{"title":"$:/core/images/warning","tags":"$:/tags/Image","text":"\\parameters (size:\"22pt\")\n<svg width=<<size>> height=<<size>> class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"},"$:/language/Buttons/AdvancedSearch/Caption":{"title":"$:/language/Buttons/AdvancedSearch/Caption","text":"advanced search"},"$:/language/Buttons/AdvancedSearch/Hint":{"title":"$:/language/Buttons/AdvancedSearch/Hint","text":"Advanced search"},"$:/language/Buttons/Cancel/Caption":{"title":"$:/language/Buttons/Cancel/Caption","text":"cancel"},"$:/language/Buttons/Cancel/Hint":{"title":"$:/language/Buttons/Cancel/Hint","text":"Discard changes to this tiddler"},"$:/language/Buttons/Clone/Caption":{"title":"$:/language/Buttons/Clone/Caption","text":"clone"},"$:/language/Buttons/Clone/Hint":{"title":"$:/language/Buttons/Clone/Hint","text":"Clone this tiddler"},"$:/language/Buttons/Close/Caption":{"title":"$:/language/Buttons/Close/Caption","text":"close"},"$:/language/Buttons/Close/Hint":{"title":"$:/language/Buttons/Close/Hint","text":"Close this tiddler"},"$:/language/Buttons/CloseAll/Caption":{"title":"$:/language/Buttons/CloseAll/Caption","text":"close all"},"$:/language/Buttons/CloseAll/Hint":{"title":"$:/language/Buttons/CloseAll/Hint","text":"Close all tiddlers"},"$:/language/Buttons/CloseOthers/Caption":{"title":"$:/language/Buttons/CloseOthers/Caption","text":"close others"},"$:/language/Buttons/CloseOthers/Hint":{"title":"$:/language/Buttons/CloseOthers/Hint","text":"Close other tiddlers"},"$:/language/Buttons/ControlPanel/Caption":{"title":"$:/language/Buttons/ControlPanel/Caption","text":"control panel"},"$:/language/Buttons/ControlPanel/Hint":{"title":"$:/language/Buttons/ControlPanel/Hint","text":"Open control panel"},"$:/language/Buttons/CopyToClipboard/Caption":{"title":"$:/language/Buttons/CopyToClipboard/Caption","text":"copy to clipboard"},"$:/language/Buttons/CopyToClipboard/Hint":{"title":"$:/language/Buttons/CopyToClipboard/Hint","text":"Copy this text to the clipboard"},"$:/language/Buttons/Delete/Caption":{"title":"$:/language/Buttons/Delete/Caption","text":"delete"},"$:/language/Buttons/Delete/Hint":{"title":"$:/language/Buttons/Delete/Hint","text":"Delete this tiddler"},"$:/language/Buttons/DeleteTiddlers/Caption":{"title":"$:/language/Buttons/DeleteTiddlers/Caption","text":"delete tiddlers"},"$:/language/Buttons/DeleteTiddlers/Hint":{"title":"$:/language/Buttons/DeleteTiddlers/Hint","text":"Delete tiddlers"},"$:/language/Buttons/Edit/Caption":{"title":"$:/language/Buttons/Edit/Caption","text":"edit"},"$:/language/Buttons/Edit/Hint":{"title":"$:/language/Buttons/Edit/Hint","text":"Edit this tiddler"},"$:/language/Buttons/Encryption/Caption":{"title":"$:/language/Buttons/Encryption/Caption","text":"encryption"},"$:/language/Buttons/Encryption/Hint":{"title":"$:/language/Buttons/Encryption/Hint","text":"Set or clear a password for saving this wiki"},"$:/language/Buttons/Encryption/ClearPassword/Caption":{"title":"$:/language/Buttons/Encryption/ClearPassword/Caption","text":"clear password"},"$:/language/Buttons/Encryption/ClearPassword/Hint":{"title":"$:/language/Buttons/Encryption/ClearPassword/Hint","text":"Clear the password and save this wiki without encryption"},"$:/language/Buttons/Encryption/SetPassword/Caption":{"title":"$:/language/Buttons/Encryption/SetPassword/Caption","text":"set password"},"$:/language/Buttons/Encryption/SetPassword/Hint":{"title":"$:/language/Buttons/Encryption/SetPassword/Hint","text":"Set a password for saving this wiki with encryption"},"$:/language/Buttons/EmergencyDownload/Caption":{"title":"$:/language/Buttons/EmergencyDownload/Caption","text":"download tiddlers as json"},"$:/language/Buttons/ExportPage/Caption":{"title":"$:/language/Buttons/ExportPage/Caption","text":"export all"},"$:/language/Buttons/ExportPage/Hint":{"title":"$:/language/Buttons/ExportPage/Hint","text":"Export all tiddlers"},"$:/language/Buttons/ExportTiddler/Caption":{"title":"$:/language/Buttons/ExportTiddler/Caption","text":"export tiddler"},"$:/language/Buttons/ExportTiddler/Hint":{"title":"$:/language/Buttons/ExportTiddler/Hint","text":"Export tiddler"},"$:/language/Buttons/ExportTiddlers/Caption":{"title":"$:/language/Buttons/ExportTiddlers/Caption","text":"export tiddlers"},"$:/language/Buttons/ExportTiddlers/Hint":{"title":"$:/language/Buttons/ExportTiddlers/Hint","text":"Export tiddlers"},"$:/language/Buttons/SidebarSearch/Hint":{"title":"$:/language/Buttons/SidebarSearch/Hint","text":"Select the sidebar search field"},"$:/language/Buttons/Fold/Caption":{"title":"$:/language/Buttons/Fold/Caption","text":"fold tiddler"},"$:/language/Buttons/Fold/Hint":{"title":"$:/language/Buttons/Fold/Hint","text":"Fold the body of this tiddler"},"$:/language/Buttons/Fold/FoldBar/Caption":{"title":"$:/language/Buttons/Fold/FoldBar/Caption","text":"fold-bar"},"$:/language/Buttons/Fold/FoldBar/Hint":{"title":"$:/language/Buttons/Fold/FoldBar/Hint","text":"Optional bars to fold and unfold tiddlers"},"$:/language/Buttons/Unfold/Caption":{"title":"$:/language/Buttons/Unfold/Caption","text":"unfold tiddler"},"$:/language/Buttons/Unfold/Hint":{"title":"$:/language/Buttons/Unfold/Hint","text":"Unfold the body of this tiddler"},"$:/language/Buttons/FoldOthers/Caption":{"title":"$:/language/Buttons/FoldOthers/Caption","text":"fold other tiddlers"},"$:/language/Buttons/FoldOthers/Hint":{"title":"$:/language/Buttons/FoldOthers/Hint","text":"Fold the bodies of other opened tiddlers"},"$:/language/Buttons/FoldAll/Caption":{"title":"$:/language/Buttons/FoldAll/Caption","text":"fold all tiddlers"},"$:/language/Buttons/FoldAll/Hint":{"title":"$:/language/Buttons/FoldAll/Hint","text":"Fold the bodies of all opened tiddlers"},"$:/language/Buttons/UnfoldAll/Caption":{"title":"$:/language/Buttons/UnfoldAll/Caption","text":"unfold all tiddlers"},"$:/language/Buttons/UnfoldAll/Hint":{"title":"$:/language/Buttons/UnfoldAll/Hint","text":"Unfold the bodies of all opened tiddlers"},"$:/language/Buttons/FullScreen/Caption":{"title":"$:/language/Buttons/FullScreen/Caption","text":"full-screen"},"$:/language/Buttons/FullScreen/Hint":{"title":"$:/language/Buttons/FullScreen/Hint","text":"Enter or leave full-screen mode"},"$:/language/Buttons/Help/Caption":{"title":"$:/language/Buttons/Help/Caption","text":"help"},"$:/language/Buttons/Help/Hint":{"title":"$:/language/Buttons/Help/Hint","text":"Show help panel"},"$:/language/Buttons/Import/Caption":{"title":"$:/language/Buttons/Import/Caption","text":"import"},"$:/language/Buttons/Import/Hint":{"title":"$:/language/Buttons/Import/Hint","text":"Import many types of file including text, image, TiddlyWiki or JSON"},"$:/language/Buttons/Info/Caption":{"title":"$:/language/Buttons/Info/Caption","text":"info"},"$:/language/Buttons/Info/Hint":{"title":"$:/language/Buttons/Info/Hint","text":"Show information for this tiddler"},"$:/language/Buttons/Home/Caption":{"title":"$:/language/Buttons/Home/Caption","text":"home"},"$:/language/Buttons/Home/Hint":{"title":"$:/language/Buttons/Home/Hint","text":"Open the default tiddlers"},"$:/language/Buttons/Language/Caption":{"title":"$:/language/Buttons/Language/Caption","text":"language"},"$:/language/Buttons/Language/Hint":{"title":"$:/language/Buttons/Language/Hint","text":"Choose the user interface language"},"$:/language/Buttons/LayoutSwitcher/Hint":{"title":"$:/language/Buttons/LayoutSwitcher/Hint","text":"Open layout switcher"},"$:/language/Buttons/LayoutSwitcher/Caption":{"title":"$:/language/Buttons/LayoutSwitcher/Caption","text":"layout"},"$:/language/Buttons/Manager/Caption":{"title":"$:/language/Buttons/Manager/Caption","text":"tiddler manager"},"$:/language/Buttons/Manager/Hint":{"title":"$:/language/Buttons/Manager/Hint","text":"Open tiddler manager"},"$:/language/Buttons/More/Caption":{"title":"$:/language/Buttons/More/Caption","text":"more"},"$:/language/Buttons/More/Hint":{"title":"$:/language/Buttons/More/Hint","text":"More actions"},"$:/language/Buttons/NewHere/Caption":{"title":"$:/language/Buttons/NewHere/Caption","text":"new here"},"$:/language/Buttons/NewHere/Hint":{"title":"$:/language/Buttons/NewHere/Hint","text":"Create a new tiddler tagged with this one"},"$:/language/Buttons/NetworkActivity/Caption":{"title":"$:/language/Buttons/NetworkActivity/Caption","text":"network activity"},"$:/language/Buttons/NetworkActivity/Hint":{"title":"$:/language/Buttons/NetworkActivity/Hint","text":"Cancel all network activity"},"$:/language/Buttons/NewJournal/Caption":{"title":"$:/language/Buttons/NewJournal/Caption","text":"new journal"},"$:/language/Buttons/NewJournal/Hint":{"title":"$:/language/Buttons/NewJournal/Hint","text":"Create a new journal tiddler"},"$:/language/Buttons/NewJournalHere/Caption":{"title":"$:/language/Buttons/NewJournalHere/Caption","text":"new journal here"},"$:/language/Buttons/NewJournalHere/Hint":{"title":"$:/language/Buttons/NewJournalHere/Hint","text":"Create a new journal tiddler tagged with this one"},"$:/language/Buttons/NewImage/Caption":{"title":"$:/language/Buttons/NewImage/Caption","text":"new image"},"$:/language/Buttons/NewImage/Hint":{"title":"$:/language/Buttons/NewImage/Hint","text":"Create a new image tiddler"},"$:/language/Buttons/NewMarkdown/Caption":{"title":"$:/language/Buttons/NewMarkdown/Caption","text":"new Markdown tiddler"},"$:/language/Buttons/NewMarkdown/Hint":{"title":"$:/language/Buttons/NewMarkdown/Hint","text":"Create a new Markdown tiddler"},"$:/language/Buttons/NewTiddler/Caption":{"title":"$:/language/Buttons/NewTiddler/Caption","text":"new tiddler"},"$:/language/Buttons/NewTiddler/Hint":{"title":"$:/language/Buttons/NewTiddler/Hint","text":"Create a new tiddler"},"$:/language/Buttons/OpenWindow/Caption":{"title":"$:/language/Buttons/OpenWindow/Caption","text":"open in new window"},"$:/language/Buttons/OpenWindow/Hint":{"title":"$:/language/Buttons/OpenWindow/Hint","text":"Open tiddler in new window"},"$:/language/Buttons/Palette/Caption":{"title":"$:/language/Buttons/Palette/Caption","text":"palette"},"$:/language/Buttons/Palette/Hint":{"title":"$:/language/Buttons/Palette/Hint","text":"Choose the colour palette"},"$:/language/Buttons/Permalink/Caption":{"title":"$:/language/Buttons/Permalink/Caption","text":"permalink"},"$:/language/Buttons/Permalink/Hint":{"title":"$:/language/Buttons/Permalink/Hint","text":"Set browser address bar to a direct link to this tiddler"},"$:/language/Buttons/Permaview/Caption":{"title":"$:/language/Buttons/Permaview/Caption","text":"permaview"},"$:/language/Buttons/Permaview/Hint":{"title":"$:/language/Buttons/Permaview/Hint","text":"Set browser address bar to a direct link to all the tiddlers in this story"},"$:/language/Buttons/Print/Caption":{"title":"$:/language/Buttons/Print/Caption","text":"print page"},"$:/language/Buttons/Print/Hint":{"title":"$:/language/Buttons/Print/Hint","text":"Print the current page"},"$:/language/Buttons/Refresh/Caption":{"title":"$:/language/Buttons/Refresh/Caption","text":"refresh"},"$:/language/Buttons/Refresh/Hint":{"title":"$:/language/Buttons/Refresh/Hint","text":"Perform a full refresh of the wiki"},"$:/language/Buttons/Save/Caption":{"title":"$:/language/Buttons/Save/Caption","text":"ok"},"$:/language/Buttons/Save/Hint":{"title":"$:/language/Buttons/Save/Hint","text":"Confirm changes to this tiddler"},"$:/language/Buttons/SaveWiki/Caption":{"title":"$:/language/Buttons/SaveWiki/Caption","text":"save changes"},"$:/language/Buttons/SaveWiki/Hint":{"title":"$:/language/Buttons/SaveWiki/Hint","text":"Save changes"},"$:/language/Buttons/StoryView/Caption":{"title":"$:/language/Buttons/StoryView/Caption","text":"storyview"},"$:/language/Buttons/StoryView/Hint":{"title":"$:/language/Buttons/StoryView/Hint","text":"Choose the story visualisation"},"$:/language/Buttons/HideSideBar/Caption":{"title":"$:/language/Buttons/HideSideBar/Caption","text":"hide sidebar"},"$:/language/Buttons/HideSideBar/Hint":{"title":"$:/language/Buttons/HideSideBar/Hint","text":"Hide sidebar"},"$:/language/Buttons/ShowSideBar/Caption":{"title":"$:/language/Buttons/ShowSideBar/Caption","text":"show sidebar"},"$:/language/Buttons/ShowSideBar/Hint":{"title":"$:/language/Buttons/ShowSideBar/Hint","text":"Show sidebar"},"$:/language/Buttons/TagManager/Caption":{"title":"$:/language/Buttons/TagManager/Caption","text":"tag manager"},"$:/language/Buttons/TagManager/Hint":{"title":"$:/language/Buttons/TagManager/Hint","text":"Open tag manager"},"$:/language/Buttons/Timestamp/Caption":{"title":"$:/language/Buttons/Timestamp/Caption","text":"timestamps"},"$:/language/Buttons/Timestamp/Hint":{"title":"$:/language/Buttons/Timestamp/Hint","text":"Choose whether modifications update timestamps"},"$:/language/Buttons/Timestamp/On/Caption":{"title":"$:/language/Buttons/Timestamp/On/Caption","text":"timestamps are on"},"$:/language/Buttons/Timestamp/On/Hint":{"title":"$:/language/Buttons/Timestamp/On/Hint","text":"Update timestamps when tiddlers are modified"},"$:/language/Buttons/Timestamp/Off/Caption":{"title":"$:/language/Buttons/Timestamp/Off/Caption","text":"timestamps are off"},"$:/language/Buttons/Timestamp/Off/Hint":{"title":"$:/language/Buttons/Timestamp/Off/Hint","text":"Don't update timestamps when tiddlers are modified"},"$:/language/Buttons/Theme/Caption":{"title":"$:/language/Buttons/Theme/Caption","text":"theme"},"$:/language/Buttons/Theme/Hint":{"title":"$:/language/Buttons/Theme/Hint","text":"Choose the display theme"},"$:/language/Buttons/Bold/Caption":{"title":"$:/language/Buttons/Bold/Caption","text":"bold"},"$:/language/Buttons/Bold/Hint":{"title":"$:/language/Buttons/Bold/Hint","text":"Apply bold formatting to selection"},"$:/language/Buttons/Clear/Caption":{"title":"$:/language/Buttons/Clear/Caption","text":"clear"},"$:/language/Buttons/Clear/Hint":{"title":"$:/language/Buttons/Clear/Hint","text":"Clear image to solid colour"},"$:/language/Buttons/EditorHeight/Caption":{"title":"$:/language/Buttons/EditorHeight/Caption","text":"editor height"},"$:/language/Buttons/EditorHeight/Caption/Auto":{"title":"$:/language/Buttons/EditorHeight/Caption/Auto","text":"Automatically adjust height to fit content"},"$:/language/Buttons/EditorHeight/Caption/Fixed":{"title":"$:/language/Buttons/EditorHeight/Caption/Fixed","text":"Fixed height:"},"$:/language/Buttons/EditorHeight/Hint":{"title":"$:/language/Buttons/EditorHeight/Hint","text":"Choose the height of the text editor"},"$:/language/Buttons/Excise/Caption":{"title":"$:/language/Buttons/Excise/Caption","text":"excise"},"$:/language/Buttons/Excise/Caption/Excise":{"title":"$:/language/Buttons/Excise/Caption/Excise","text":"Perform excision"},"$:/language/Buttons/Excise/Caption/MacroName":{"title":"$:/language/Buttons/Excise/Caption/MacroName","text":"Macro name:"},"$:/language/Buttons/Excise/Caption/NewTitle":{"title":"$:/language/Buttons/Excise/Caption/NewTitle","text":"Title of new tiddler:"},"$:/language/Buttons/Excise/Caption/Replace":{"title":"$:/language/Buttons/Excise/Caption/Replace","text":"Replace excised text with:"},"$:/language/Buttons/Excise/Caption/Replace/Macro":{"title":"$:/language/Buttons/Excise/Caption/Replace/Macro","text":"macro"},"$:/language/Buttons/Excise/Caption/Replace/Link":{"title":"$:/language/Buttons/Excise/Caption/Replace/Link","text":"link"},"$:/language/Buttons/Excise/Caption/Replace/Transclusion":{"title":"$:/language/Buttons/Excise/Caption/Replace/Transclusion","text":"transclusion"},"$:/language/Buttons/Excise/Caption/Tag":{"title":"$:/language/Buttons/Excise/Caption/Tag","text":"Tag new tiddler with the title of this tiddler"},"$:/language/Buttons/Excise/Caption/TiddlerExists":{"title":"$:/language/Buttons/Excise/Caption/TiddlerExists","text":"Warning: tiddler already exists"},"$:/language/Buttons/Excise/Hint":{"title":"$:/language/Buttons/Excise/Hint","text":"Excise the selected text into a new tiddler"},"$:/language/Buttons/Heading1/Caption":{"title":"$:/language/Buttons/Heading1/Caption","text":"heading 1"},"$:/language/Buttons/Heading1/Hint":{"title":"$:/language/Buttons/Heading1/Hint","text":"Apply heading level 1 formatting to lines containing selection"},"$:/language/Buttons/Heading2/Caption":{"title":"$:/language/Buttons/Heading2/Caption","text":"heading 2"},"$:/language/Buttons/Heading2/Hint":{"title":"$:/language/Buttons/Heading2/Hint","text":"Apply heading level 2 formatting to lines containing selection"},"$:/language/Buttons/Heading3/Caption":{"title":"$:/language/Buttons/Heading3/Caption","text":"heading 3"},"$:/language/Buttons/Heading3/Hint":{"title":"$:/language/Buttons/Heading3/Hint","text":"Apply heading level 3 formatting to lines containing selection"},"$:/language/Buttons/Heading4/Caption":{"title":"$:/language/Buttons/Heading4/Caption","text":"heading 4"},"$:/language/Buttons/Heading4/Hint":{"title":"$:/language/Buttons/Heading4/Hint","text":"Apply heading level 4 formatting to lines containing selection"},"$:/language/Buttons/Heading5/Caption":{"title":"$:/language/Buttons/Heading5/Caption","text":"heading 5"},"$:/language/Buttons/Heading5/Hint":{"title":"$:/language/Buttons/Heading5/Hint","text":"Apply heading level 5 formatting to lines containing selection"},"$:/language/Buttons/Heading6/Caption":{"title":"$:/language/Buttons/Heading6/Caption","text":"heading 6"},"$:/language/Buttons/Heading6/Hint":{"title":"$:/language/Buttons/Heading6/Hint","text":"Apply heading level 6 formatting to lines containing selection"},"$:/language/Buttons/Italic/Caption":{"title":"$:/language/Buttons/Italic/Caption","text":"italic"},"$:/language/Buttons/Italic/Hint":{"title":"$:/language/Buttons/Italic/Hint","text":"Apply italic formatting to selection"},"$:/language/Buttons/LineWidth/Caption":{"title":"$:/language/Buttons/LineWidth/Caption","text":"line width"},"$:/language/Buttons/LineWidth/Hint":{"title":"$:/language/Buttons/LineWidth/Hint","text":"Set line width for painting"},"$:/language/Buttons/Link/Caption":{"title":"$:/language/Buttons/Link/Caption","text":"link"},"$:/language/Buttons/Link/Hint":{"title":"$:/language/Buttons/Link/Hint","text":"Create wikitext link"},"$:/language/Buttons/Linkify/Caption":{"title":"$:/language/Buttons/Linkify/Caption","text":"wikilink"},"$:/language/Buttons/Linkify/Hint":{"title":"$:/language/Buttons/Linkify/Hint","text":"Wrap selection in square brackets"},"$:/language/Buttons/ListBullet/Caption":{"title":"$:/language/Buttons/ListBullet/Caption","text":"bulleted list"},"$:/language/Buttons/ListBullet/Hint":{"title":"$:/language/Buttons/ListBullet/Hint","text":"Apply bulleted list formatting to lines containing selection"},"$:/language/Buttons/ListNumber/Caption":{"title":"$:/language/Buttons/ListNumber/Caption","text":"numbered list"},"$:/language/Buttons/ListNumber/Hint":{"title":"$:/language/Buttons/ListNumber/Hint","text":"Apply numbered list formatting to lines containing selection"},"$:/language/Buttons/MonoBlock/Caption":{"title":"$:/language/Buttons/MonoBlock/Caption","text":"monospaced block"},"$:/language/Buttons/MonoBlock/Hint":{"title":"$:/language/Buttons/MonoBlock/Hint","text":"Apply monospaced block formatting to lines containing selection"},"$:/language/Buttons/MonoLine/Caption":{"title":"$:/language/Buttons/MonoLine/Caption","text":"monospaced"},"$:/language/Buttons/MonoLine/Hint":{"title":"$:/language/Buttons/MonoLine/Hint","text":"Apply monospaced character formatting to selection"},"$:/language/Buttons/Opacity/Caption":{"title":"$:/language/Buttons/Opacity/Caption","text":"opacity"},"$:/language/Buttons/Opacity/Hint":{"title":"$:/language/Buttons/Opacity/Hint","text":"Set painting opacity"},"$:/language/Buttons/Paint/Caption":{"title":"$:/language/Buttons/Paint/Caption","text":"paint colour"},"$:/language/Buttons/Paint/Hint":{"title":"$:/language/Buttons/Paint/Hint","text":"Set painting colour"},"$:/language/Buttons/Picture/Caption":{"title":"$:/language/Buttons/Picture/Caption","text":"picture"},"$:/language/Buttons/Picture/Hint":{"title":"$:/language/Buttons/Picture/Hint","text":"Insert picture"},"$:/language/Buttons/Preview/Caption":{"title":"$:/language/Buttons/Preview/Caption","text":"preview"},"$:/language/Buttons/Preview/Hint":{"title":"$:/language/Buttons/Preview/Hint","text":"Show preview pane"},"$:/language/Buttons/PreviewType/Caption":{"title":"$:/language/Buttons/PreviewType/Caption","text":"preview type"},"$:/language/Buttons/PreviewType/Hint":{"title":"$:/language/Buttons/PreviewType/Hint","text":"Choose preview type"},"$:/language/Buttons/Quote/Caption":{"title":"$:/language/Buttons/Quote/Caption","text":"quote"},"$:/language/Buttons/Quote/Hint":{"title":"$:/language/Buttons/Quote/Hint","text":"Apply quoted text formatting to lines containing selection"},"$:/language/Buttons/RotateLeft/Caption":{"title":"$:/language/Buttons/RotateLeft/Caption","text":"rotate left"},"$:/language/Buttons/RotateLeft/Hint":{"title":"$:/language/Buttons/RotateLeft/Hint","text":"Rotate image left by 90 degrees"},"$:/language/Buttons/Size/Caption":{"title":"$:/language/Buttons/Size/Caption","text":"image size"},"$:/language/Buttons/Size/Caption/Height":{"title":"$:/language/Buttons/Size/Caption/Height","text":"Height:"},"$:/language/Buttons/Size/Caption/Resize":{"title":"$:/language/Buttons/Size/Caption/Resize","text":"Resize image"},"$:/language/Buttons/Size/Caption/Width":{"title":"$:/language/Buttons/Size/Caption/Width","text":"Width:"},"$:/language/Buttons/Size/Hint":{"title":"$:/language/Buttons/Size/Hint","text":"Set image size"},"$:/language/Buttons/Stamp/Caption":{"title":"$:/language/Buttons/Stamp/Caption","text":"stamp"},"$:/language/Buttons/Stamp/Caption/New":{"title":"$:/language/Buttons/Stamp/Caption/New","text":"Add your own"},"$:/language/Buttons/Stamp/Hint":{"title":"$:/language/Buttons/Stamp/Hint","text":"Insert a preconfigured snippet of text"},"$:/language/Buttons/Stamp/New/Title":{"title":"$:/language/Buttons/Stamp/New/Title","text":"Name as shown in menu"},"$:/language/Buttons/Stamp/New/Text":{"title":"$:/language/Buttons/Stamp/New/Text","text":"Text of snippet. (Remember to add a descriptive title in the caption field)."},"$:/language/Buttons/Strikethrough/Caption":{"title":"$:/language/Buttons/Strikethrough/Caption","text":"strikethrough"},"$:/language/Buttons/Strikethrough/Hint":{"title":"$:/language/Buttons/Strikethrough/Hint","text":"Apply strikethrough formatting to selection"},"$:/language/Buttons/Subscript/Caption":{"title":"$:/language/Buttons/Subscript/Caption","text":"subscript"},"$:/language/Buttons/Subscript/Hint":{"title":"$:/language/Buttons/Subscript/Hint","text":"Apply subscript formatting to selection"},"$:/language/Buttons/Superscript/Caption":{"title":"$:/language/Buttons/Superscript/Caption","text":"superscript"},"$:/language/Buttons/Superscript/Hint":{"title":"$:/language/Buttons/Superscript/Hint","text":"Apply superscript formatting to selection"},"$:/language/Buttons/ToggleSidebar/Hint":{"title":"$:/language/Buttons/ToggleSidebar/Hint","text":"Toggle the sidebar visibility"},"$:/language/Buttons/Transcludify/Caption":{"title":"$:/language/Buttons/Transcludify/Caption","text":"transclusion"},"$:/language/Buttons/Transcludify/Hint":{"title":"$:/language/Buttons/Transcludify/Hint","text":"Wrap selection in curly brackets"},"$:/language/Buttons/Underline/Caption":{"title":"$:/language/Buttons/Underline/Caption","text":"underline"},"$:/language/Buttons/Underline/Hint":{"title":"$:/language/Buttons/Underline/Hint","text":"Apply underline formatting to selection"},"$:/language/ControlPanel/Advanced/Caption":{"title":"$:/language/ControlPanel/Advanced/Caption","text":"Advanced"},"$:/language/ControlPanel/Advanced/Hint":{"title":"$:/language/ControlPanel/Advanced/Hint","text":"Internal information about this TiddlyWiki"},"$:/language/ControlPanel/Appearance/Caption":{"title":"$:/language/ControlPanel/Appearance/Caption","text":"Appearance"},"$:/language/ControlPanel/Appearance/Hint":{"title":"$:/language/ControlPanel/Appearance/Hint","text":"Ways to customise the appearance of your TiddlyWiki."},"$:/language/ControlPanel/Basics/AnimDuration/Prompt":{"title":"$:/language/ControlPanel/Basics/AnimDuration/Prompt","text":"Animation duration"},"$:/language/ControlPanel/Basics/AutoFocus/Prompt":{"title":"$:/language/ControlPanel/Basics/AutoFocus/Prompt","text":"Default focus field for new tiddlers"},"$:/language/ControlPanel/Basics/Caption":{"title":"$:/language/ControlPanel/Basics/Caption","text":"Basics"},"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint":{"title":"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint","text":"Use [[double square brackets]] for titles with spaces. Or you can choose to {{retain story ordering||$:/snippets/retain-story-ordering-button}}"},"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt":{"title":"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt","text":"Default tiddlers"},"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint":{"title":"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint","text":"Choose which tiddlers are displayed at startup"},"$:/language/ControlPanel/Basics/Language/Prompt":{"title":"$:/language/ControlPanel/Basics/Language/Prompt","text":"Hello! Current language:"},"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt":{"title":"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt","text":"Title of new journal tiddlers"},"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt":{"title":"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt","text":"Text for new journal tiddlers"},"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt":{"title":"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt","text":"Tags for new journal tiddlers"},"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt":{"title":"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt","text":"Title of new tiddlers"},"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt":{"title":"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt","text":"Tags for new tiddlers"},"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt":{"title":"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt","text":"Number of overridden shadow tiddlers"},"$:/language/ControlPanel/Basics/RemoveTags":{"title":"$:/language/ControlPanel/Basics/RemoveTags","text":"Update to current format"},"$:/language/ControlPanel/Basics/RemoveTags/Hint":{"title":"$:/language/ControlPanel/Basics/RemoveTags/Hint","text":"Update the tags configuration to the latest format"},"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt":{"title":"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt","text":"Number of shadow tiddlers"},"$:/language/ControlPanel/Basics/Subtitle/Prompt":{"title":"$:/language/ControlPanel/Basics/Subtitle/Prompt","text":"Subtitle"},"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt":{"title":"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt","text":"Number of system tiddlers"},"$:/language/ControlPanel/Basics/Tags/Prompt":{"title":"$:/language/ControlPanel/Basics/Tags/Prompt","text":"Number of tags"},"$:/language/ControlPanel/Basics/Tiddlers/Prompt":{"title":"$:/language/ControlPanel/Basics/Tiddlers/Prompt","text":"Number of tiddlers"},"$:/language/ControlPanel/Basics/Title/Prompt":{"title":"$:/language/ControlPanel/Basics/Title/Prompt","text":"Title of this ~TiddlyWiki"},"$:/language/ControlPanel/Basics/Username/Prompt":{"title":"$:/language/ControlPanel/Basics/Username/Prompt","text":"Username for signing edits"},"$:/language/ControlPanel/Basics/Version/Prompt":{"title":"$:/language/ControlPanel/Basics/Version/Prompt","text":"~TiddlyWiki version"},"$:/language/ControlPanel/Cascades/Caption":{"title":"$:/language/ControlPanel/Cascades/Caption","text":"Cascades"},"$:/language/ControlPanel/Cascades/Hint":{"title":"$:/language/ControlPanel/Cascades/Hint","text":"These global rules are used to dynamically choose certain templates. The result of the cascade is the result of the first filter in the sequence that returns a result"},"$:/language/ControlPanel/Cascades/TagPrompt":{"title":"$:/language/ControlPanel/Cascades/TagPrompt","text":"Filters tagged <$macrocall $name=\"tag\" tag=<<currentTiddler>>/>"},"$:/language/ControlPanel/EditorTypes/Caption":{"title":"$:/language/ControlPanel/EditorTypes/Caption","text":"Editor Types"},"$:/language/ControlPanel/EditorTypes/Editor/Caption":{"title":"$:/language/ControlPanel/EditorTypes/Editor/Caption","text":"Editor"},"$:/language/ControlPanel/EditorTypes/Hint":{"title":"$:/language/ControlPanel/EditorTypes/Hint","text":"These tiddlers determine which editor is used to edit specific tiddler types."},"$:/language/ControlPanel/EditorTypes/Type/Caption":{"title":"$:/language/ControlPanel/EditorTypes/Type/Caption","text":"Type"},"$:/language/ControlPanel/EditTemplateBody/Caption":{"title":"$:/language/ControlPanel/EditTemplateBody/Caption","text":"Edit Template Body"},"$:/language/ControlPanel/EditTemplateBody/Hint":{"title":"$:/language/ControlPanel/EditTemplateBody/Hint","text":"This rule cascade is used by the default edit template to dynamically choose the template for editing the body of a tiddler."},"$:/language/ControlPanel/FieldEditor/Caption":{"title":"$:/language/ControlPanel/FieldEditor/Caption","text":"Field Editor"},"$:/language/ControlPanel/FieldEditor/Hint":{"title":"$:/language/ControlPanel/FieldEditor/Hint","text":"This rules cascade is used to dynamically choose the template for rendering a tiddler field based on its name. It is used within the Edit Template."},"$:/language/ControlPanel/Info/Caption":{"title":"$:/language/ControlPanel/Info/Caption","text":"Info"},"$:/language/ControlPanel/Info/Hint":{"title":"$:/language/ControlPanel/Info/Hint","text":"Information about this TiddlyWiki"},"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt","text":"Type shortcut here"},"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption","text":"add shortcut"},"$:/language/ControlPanel/KeyboardShortcuts/Caption":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Caption","text":"Keyboard Shortcuts"},"$:/language/ControlPanel/KeyboardShortcuts/Hint":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Hint","text":"Manage keyboard shortcut assignments"},"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption":{"title":"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption","text":"No keyboard shortcuts assigned"},"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint","text":"remove keyboard shortcut"},"$:/language/ControlPanel/KeyboardShortcuts/Platform/All":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Platform/All","text":"All platforms"},"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac","text":"Macintosh platform only"},"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac","text":"Non-Macintosh platforms only"},"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux","text":"Linux platform only"},"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux","text":"Non-Linux platforms only"},"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows","text":"Windows platform only"},"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows":{"title":"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows","text":"Non-Windows platforms only"},"$:/language/ControlPanel/LayoutSwitcher/Caption":{"title":"$:/language/ControlPanel/LayoutSwitcher/Caption","text":"Layout"},"$:/language/ControlPanel/LoadedModules/Caption":{"title":"$:/language/ControlPanel/LoadedModules/Caption","text":"Loaded Modules"},"$:/language/ControlPanel/LoadedModules/Hint":{"title":"$:/language/ControlPanel/LoadedModules/Hint","text":"These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."},"$:/language/ControlPanel/Palette/Caption":{"title":"$:/language/ControlPanel/Palette/Caption","text":"Palette"},"$:/language/ControlPanel/Palette/Editor/Clone/Caption":{"title":"$:/language/ControlPanel/Palette/Editor/Clone/Caption","text":"clone"},"$:/language/ControlPanel/Palette/Editor/Clone/Prompt":{"title":"$:/language/ControlPanel/Palette/Editor/Clone/Prompt","text":"It is recommended that you clone this shadow palette before editing it"},"$:/language/ControlPanel/Palette/Editor/Delete/Hint":{"title":"$:/language/ControlPanel/Palette/Editor/Delete/Hint","text":"delete this entry from the current palette"},"$:/language/ControlPanel/Palette/Editor/Names/External/Show":{"title":"$:/language/ControlPanel/Palette/Editor/Names/External/Show","text":"Show color names that are not part of the current palette"},"$:/language/ControlPanel/Palette/Editor/Prompt/Modified":{"title":"$:/language/ControlPanel/Palette/Editor/Prompt/Modified","text":"This shadow palette has been modified"},"$:/language/ControlPanel/Palette/Editor/Prompt":{"title":"$:/language/ControlPanel/Palette/Editor/Prompt","text":"Editing"},"$:/language/ControlPanel/Palette/Editor/Reset/Caption":{"title":"$:/language/ControlPanel/Palette/Editor/Reset/Caption","text":"reset"},"$:/language/ControlPanel/Palette/HideEditor/Caption":{"title":"$:/language/ControlPanel/Palette/HideEditor/Caption","text":"hide editor"},"$:/language/ControlPanel/Palette/Prompt":{"title":"$:/language/ControlPanel/Palette/Prompt","text":"Current palette:"},"$:/language/ControlPanel/Palette/ShowEditor/Caption":{"title":"$:/language/ControlPanel/Palette/ShowEditor/Caption","text":"show editor"},"$:/language/ControlPanel/Parsing/Caption":{"title":"$:/language/ControlPanel/Parsing/Caption","text":"Parsing"},"$:/language/ControlPanel/Parsing/Hint":{"title":"$:/language/ControlPanel/Parsing/Hint","text":"Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."},"$:/language/ControlPanel/Parsing/Block/Caption":{"title":"$:/language/ControlPanel/Parsing/Block/Caption","text":"Block Parse Rules"},"$:/language/ControlPanel/Parsing/Inline/Caption":{"title":"$:/language/ControlPanel/Parsing/Inline/Caption","text":"Inline Parse Rules"},"$:/language/ControlPanel/Parsing/Pragma/Caption":{"title":"$:/language/ControlPanel/Parsing/Pragma/Caption","text":"Pragma Parse Rules"},"$:/language/ControlPanel/Plugins/Add/Caption":{"title":"$:/language/ControlPanel/Plugins/Add/Caption","text":"Get more plugins"},"$:/language/ControlPanel/Plugins/Add/Hint":{"title":"$:/language/ControlPanel/Plugins/Add/Hint","text":"Install plugins from the official library"},"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint":{"title":"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint","text":"This plugin is already installed at version <$text text=<<installedVersion>>/>"},"$:/language/ControlPanel/Plugins/AlsoRequires":{"title":"$:/language/ControlPanel/Plugins/AlsoRequires","text":"Also requires:"},"$:/language/ControlPanel/Plugins/Caption":{"title":"$:/language/ControlPanel/Plugins/Caption","text":"Plugins"},"$:/language/ControlPanel/Plugins/Disable/Caption":{"title":"$:/language/ControlPanel/Plugins/Disable/Caption","text":"disable"},"$:/language/ControlPanel/Plugins/Disable/Hint":{"title":"$:/language/ControlPanel/Plugins/Disable/Hint","text":"Disable this plugin when reloading page"},"$:/language/ControlPanel/Plugins/Disabled/Status":{"title":"$:/language/ControlPanel/Plugins/Disabled/Status","text":"(disabled)"},"$:/language/ControlPanel/Plugins/Downgrade/Caption":{"title":"$:/language/ControlPanel/Plugins/Downgrade/Caption","text":"downgrade"},"$:/language/ControlPanel/Plugins/Empty/Hint":{"title":"$:/language/ControlPanel/Plugins/Empty/Hint","text":"None"},"$:/language/ControlPanel/Plugins/Enable/Caption":{"title":"$:/language/ControlPanel/Plugins/Enable/Caption","text":"enable"},"$:/language/ControlPanel/Plugins/Enable/Hint":{"title":"$:/language/ControlPanel/Plugins/Enable/Hint","text":"Enable this plugin when reloading page"},"$:/language/ControlPanel/Plugins/Install/Caption":{"title":"$:/language/ControlPanel/Plugins/Install/Caption","text":"install"},"$:/language/ControlPanel/Plugins/Installed/Hint":{"title":"$:/language/ControlPanel/Plugins/Installed/Hint","text":"Currently installed plugins:"},"$:/language/ControlPanel/Plugins/Languages/Caption":{"title":"$:/language/ControlPanel/Plugins/Languages/Caption","text":"Languages"},"$:/language/ControlPanel/Plugins/Languages/Hint":{"title":"$:/language/ControlPanel/Plugins/Languages/Hint","text":"Language pack plugins"},"$:/language/ControlPanel/Plugins/NoInfoFound/Hint":{"title":"$:/language/ControlPanel/Plugins/NoInfoFound/Hint","text":"No ''\"<$text text=<<currentTab>>/>\"'' found"},"$:/language/ControlPanel/Plugins/NotInstalled/Hint":{"title":"$:/language/ControlPanel/Plugins/NotInstalled/Hint","text":"This plugin is not currently installed"},"$:/language/ControlPanel/Plugins/OpenPluginLibrary":{"title":"$:/language/ControlPanel/Plugins/OpenPluginLibrary","text":"Open plugin library"},"$:/language/ControlPanel/Plugins/ClosePluginLibrary":{"title":"$:/language/ControlPanel/Plugins/ClosePluginLibrary","text":"Close plugin library"},"$:/language/ControlPanel/Plugins/PluginWillRequireReload":{"title":"$:/language/ControlPanel/Plugins/PluginWillRequireReload","text":"(requires reload)"},"$:/language/ControlPanel/Plugins/Plugins/Caption":{"title":"$:/language/ControlPanel/Plugins/Plugins/Caption","text":"Plugins"},"$:/language/ControlPanel/Plugins/Plugins/Hint":{"title":"$:/language/ControlPanel/Plugins/Plugins/Hint","text":"Plugins"},"$:/language/ControlPanel/Plugins/Reinstall/Caption":{"title":"$:/language/ControlPanel/Plugins/Reinstall/Caption","text":"reinstall"},"$:/language/ControlPanel/Plugins/Themes/Caption":{"title":"$:/language/ControlPanel/Plugins/Themes/Caption","text":"Themes"},"$:/language/ControlPanel/Plugins/Themes/Hint":{"title":"$:/language/ControlPanel/Plugins/Themes/Hint","text":"Theme plugins"},"$:/language/ControlPanel/Plugins/Update/Caption":{"title":"$:/language/ControlPanel/Plugins/Update/Caption","text":"update"},"$:/language/ControlPanel/Plugins/Updates/Caption":{"title":"$:/language/ControlPanel/Plugins/Updates/Caption","text":"Updates"},"$:/language/ControlPanel/Plugins/Updates/Hint":{"title":"$:/language/ControlPanel/Plugins/Updates/Hint","text":"Available updates to installed plugins"},"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption":{"title":"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption","text":"Update <<update-count>> plugins"},"$:/language/ControlPanel/Plugins/SubPluginPrompt":{"title":"$:/language/ControlPanel/Plugins/SubPluginPrompt","text":"With <<count>> sub-plugins available"},"$:/language/ControlPanel/Saving/Caption":{"title":"$:/language/ControlPanel/Saving/Caption","text":"Saving"},"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description":{"title":"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description","text":"Permit automatic saving for the download saver"},"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint":{"title":"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint","text":"Enable Autosave for Download Saver"},"$:/language/ControlPanel/Saving/DownloadSaver/Caption":{"title":"$:/language/ControlPanel/Saving/DownloadSaver/Caption","text":"Download Saver"},"$:/language/ControlPanel/Saving/DownloadSaver/Hint":{"title":"$:/language/ControlPanel/Saving/DownloadSaver/Hint","text":"These settings apply to the HTML5-compatible download saver"},"$:/language/ControlPanel/Saving/General/Caption":{"title":"$:/language/ControlPanel/Saving/General/Caption","text":"General"},"$:/language/ControlPanel/Saving/General/Hint":{"title":"$:/language/ControlPanel/Saving/General/Hint","text":"These settings apply to all the loaded savers"},"$:/language/ControlPanel/Saving/Hint":{"title":"$:/language/ControlPanel/Saving/Hint","text":"Settings used for saving the entire TiddlyWiki as a single file via a saver module"},"$:/language/ControlPanel/Saving/GitService/Branch":{"title":"$:/language/ControlPanel/Saving/GitService/Branch","text":"Target branch for saving"},"$:/language/ControlPanel/Saving/GitService/CommitMessage":{"title":"$:/language/ControlPanel/Saving/GitService/CommitMessage","text":"Saved by TiddlyWiki"},"$:/language/ControlPanel/Saving/GitService/Description":{"title":"$:/language/ControlPanel/Saving/GitService/Description","text":"These settings are only used when saving to <<service-name>>"},"$:/language/ControlPanel/Saving/GitService/Filename":{"title":"$:/language/ControlPanel/Saving/GitService/Filename","text":"Filename of target file (e.g. `index.html`)"},"$:/language/ControlPanel/Saving/GitService/Path":{"title":"$:/language/ControlPanel/Saving/GitService/Path","text":"Path to target file (e.g. `/wiki/`)"},"$:/language/ControlPanel/Saving/GitService/Repo":{"title":"$:/language/ControlPanel/Saving/GitService/Repo","text":"Target repository (e.g. `Jermolene/TiddlyWiki5`)"},"$:/language/ControlPanel/Saving/GitService/ServerURL":{"title":"$:/language/ControlPanel/Saving/GitService/ServerURL","text":"Server API URL"},"$:/language/ControlPanel/Saving/GitService/UserName":{"title":"$:/language/ControlPanel/Saving/GitService/UserName","text":"Username"},"$:/language/ControlPanel/Saving/GitService/GitHub/Caption":{"title":"$:/language/ControlPanel/Saving/GitService/GitHub/Caption","text":"~GitHub Saver"},"$:/language/ControlPanel/Saving/GitService/GitHub/Password":{"title":"$:/language/ControlPanel/Saving/GitService/GitHub/Password","text":"Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"},"$:/language/ControlPanel/Saving/GitService/GitLab/Caption":{"title":"$:/language/ControlPanel/Saving/GitService/GitLab/Caption","text":"~GitLab Saver"},"$:/language/ControlPanel/Saving/GitService/GitLab/Password":{"title":"$:/language/ControlPanel/Saving/GitService/GitLab/Password","text":"Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"},"$:/language/ControlPanel/Saving/GitService/Gitea/Caption":{"title":"$:/language/ControlPanel/Saving/GitService/Gitea/Caption","text":"Gitea Saver"},"$:/language/ControlPanel/Saving/GitService/Gitea/Password":{"title":"$:/language/ControlPanel/Saving/GitService/Gitea/Password","text":"Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"},"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading","text":"Advanced Settings"},"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir","text":"Backup Directory"},"$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel","text":"~TiddlySpot Control Panel"},"$:/language/ControlPanel/Saving/TiddlySpot/Backups":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Backups","text":"Backups"},"$:/language/ControlPanel/Saving/TiddlySpot/Caption":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Caption","text":"~TiddlySpot Saver"},"$:/language/ControlPanel/Saving/TiddlySpot/Description":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Description","text":"These settings are only used when saving to [[TiddlySpot|http://tiddlyspot.com]], [[TiddlyHost|https://tiddlyhost.com]], or a compatible remote server. See [[here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]] for information on ~TiddlySpot and ~TiddlyHost saving configuration."},"$:/language/ControlPanel/Saving/TiddlySpot/Filename":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Filename","text":"Upload Filename"},"$:/language/ControlPanel/Saving/TiddlySpot/Heading":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Heading","text":"~TiddlySpot"},"$:/language/ControlPanel/Saving/TiddlySpot/Hint":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Hint","text":"//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"},"$:/language/ControlPanel/Saving/TiddlySpot/Password":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/Password","text":"Password"},"$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly","text":"Note that [[TiddlySpot|http://tiddlyspot.com]] no longer allows the creation of new sites. For new sites, you can use [[TiddlyHost|https://tiddlyhost.com]], a new hosting service that replaces ~TiddlySpot."},"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL","text":"Server URL"},"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir","text":"Upload Directory"},"$:/language/ControlPanel/Saving/TiddlySpot/UserName":{"title":"$:/language/ControlPanel/Saving/TiddlySpot/UserName","text":"Wiki Name"},"$:/language/ControlPanel/Settings/AutoSave/Caption":{"title":"$:/language/ControlPanel/Settings/AutoSave/Caption","text":"Autosave"},"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description":{"title":"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description","text":"Do not save changes automatically"},"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description":{"title":"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description","text":"Save changes automatically"},"$:/language/ControlPanel/Settings/AutoSave/Hint":{"title":"$:/language/ControlPanel/Settings/AutoSave/Hint","text":"Attempt to automatically save changes during editing when using a supporting saver"},"$:/language/ControlPanel/Settings/CamelCase/Caption":{"title":"$:/language/ControlPanel/Settings/CamelCase/Caption","text":"Camel Case Wiki Links"},"$:/language/ControlPanel/Settings/CamelCase/Hint":{"title":"$:/language/ControlPanel/Settings/CamelCase/Hint","text":"You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"},"$:/language/ControlPanel/Settings/CamelCase/Description":{"title":"$:/language/ControlPanel/Settings/CamelCase/Description","text":"Enable automatic ~CamelCase linking"},"$:/language/ControlPanel/Settings/Caption":{"title":"$:/language/ControlPanel/Settings/Caption","text":"Settings"},"$:/language/ControlPanel/Settings/EditorToolbar/Caption":{"title":"$:/language/ControlPanel/Settings/EditorToolbar/Caption","text":"Editor Toolbar"},"$:/language/ControlPanel/Settings/EditorToolbar/Hint":{"title":"$:/language/ControlPanel/Settings/EditorToolbar/Hint","text":"Enable or disable the editor toolbar:"},"$:/language/ControlPanel/Settings/EditorToolbar/Description":{"title":"$:/language/ControlPanel/Settings/EditorToolbar/Description","text":"Show editor toolbar"},"$:/language/ControlPanel/Settings/InfoPanelMode/Caption":{"title":"$:/language/ControlPanel/Settings/InfoPanelMode/Caption","text":"Tiddler Info Panel Mode"},"$:/language/ControlPanel/Settings/InfoPanelMode/Hint":{"title":"$:/language/ControlPanel/Settings/InfoPanelMode/Hint","text":"Control when the tiddler info panel closes:"},"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description":{"title":"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description","text":"Tiddler info panel closes automatically"},"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description":{"title":"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description","text":"Tiddler info panel stays open until explicitly closed"},"$:/language/ControlPanel/Settings/Hint":{"title":"$:/language/ControlPanel/Settings/Hint","text":"These settings let you customise the behaviour of TiddlyWiki."},"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption":{"title":"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption","text":"Navigation Address Bar"},"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint":{"title":"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint","text":"Behaviour of the browser address bar when navigating to a tiddler:"},"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description":{"title":"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description","text":"Do not update the address bar"},"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description":{"title":"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description","text":"Include the target tiddler"},"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description":{"title":"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description","text":"Include the target tiddler and the current story sequence"},"$:/language/ControlPanel/Settings/NavigationHistory/Caption":{"title":"$:/language/ControlPanel/Settings/NavigationHistory/Caption","text":"Navigation History"},"$:/language/ControlPanel/Settings/NavigationHistory/Hint":{"title":"$:/language/ControlPanel/Settings/NavigationHistory/Hint","text":"Update browser history when navigating to a tiddler:"},"$:/language/ControlPanel/Settings/NavigationHistory/No/Description":{"title":"$:/language/ControlPanel/Settings/NavigationHistory/No/Description","text":"Do not update history"},"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description":{"title":"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description","text":"Update history"},"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption":{"title":"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption","text":"Permalink/permaview Mode"},"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint":{"title":"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint","text":"Choose how permalink/permaview is handled:"},"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description":{"title":"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description","text":"Copy permalink/permaview URL to clipboard"},"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description":{"title":"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description","text":"Update address bar with permalink/permaview URL"},"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption":{"title":"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption","text":"Performance Instrumentation"},"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint":{"title":"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint","text":"Displays performance statistics in the browser developer console. Requires reload to take effect"},"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description":{"title":"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description","text":"Enable performance instrumentation"},"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption":{"title":"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption","text":"Toolbar Button Style"},"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint":{"title":"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint","text":"Choose the style for toolbar buttons:"},"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless":{"title":"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless","text":"Borderless"},"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed":{"title":"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed","text":"Boxed"},"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded":{"title":"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded","text":"Rounded"},"$:/language/ControlPanel/Settings/ToolbarButtons/Caption":{"title":"$:/language/ControlPanel/Settings/ToolbarButtons/Caption","text":"Toolbar Buttons"},"$:/language/ControlPanel/Settings/ToolbarButtons/Hint":{"title":"$:/language/ControlPanel/Settings/ToolbarButtons/Hint","text":"Default toolbar button appearance:"},"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description":{"title":"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description","text":"Include icon"},"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description":{"title":"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description","text":"Include text"},"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption":{"title":"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption","text":"Default Sidebar Tab"},"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint":{"title":"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint","text":"Specify which sidebar tab is displayed by default"},"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption":{"title":"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption","text":"Default More Sidebar Tab"},"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint":{"title":"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint","text":"Specify which More sidebar tab is displayed by default"},"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption":{"title":"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption","text":"Tiddler Opening Behaviour"},"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint":{"title":"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint","text":"Navigation from //within// the story river"},"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint":{"title":"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint","text":"Navigation from //outside// the story river"},"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove":{"title":"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove","text":"Open above the current tiddler"},"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow":{"title":"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow","text":"Open below the current tiddler"},"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop":{"title":"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop","text":"Open at the top of the story river"},"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom":{"title":"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom","text":"Open at the bottom of the story river"},"$:/language/ControlPanel/Settings/TitleLinks/Caption":{"title":"$:/language/ControlPanel/Settings/TitleLinks/Caption","text":"Tiddler Titles"},"$:/language/ControlPanel/Settings/TitleLinks/Hint":{"title":"$:/language/ControlPanel/Settings/TitleLinks/Hint","text":"Optionally display tiddler titles as links"},"$:/language/ControlPanel/Settings/TitleLinks/No/Description":{"title":"$:/language/ControlPanel/Settings/TitleLinks/No/Description","text":"Do not display tiddler titles as links"},"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description":{"title":"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description","text":"Display tiddler titles as links"},"$:/language/ControlPanel/Settings/MissingLinks/Caption":{"title":"$:/language/ControlPanel/Settings/MissingLinks/Caption","text":"Wiki Links"},"$:/language/ControlPanel/Settings/MissingLinks/Hint":{"title":"$:/language/ControlPanel/Settings/MissingLinks/Hint","text":"Choose whether to link to tiddlers that do not exist yet"},"$:/language/ControlPanel/Settings/MissingLinks/Description":{"title":"$:/language/ControlPanel/Settings/MissingLinks/Description","text":"Enable links to missing tiddlers"},"$:/language/ControlPanel/StoryTiddler/Caption":{"title":"$:/language/ControlPanel/StoryTiddler/Caption","text":"Story Tiddler"},"$:/language/ControlPanel/StoryTiddler/Hint":{"title":"$:/language/ControlPanel/StoryTiddler/Hint","text":"This rule cascade is used to dynamically choose the template for displaying a tiddler in the story river."},"$:/language/ControlPanel/StoryView/Caption":{"title":"$:/language/ControlPanel/StoryView/Caption","text":"Story View"},"$:/language/ControlPanel/StoryView/Prompt":{"title":"$:/language/ControlPanel/StoryView/Prompt","text":"Current view:"},"$:/language/ControlPanel/Stylesheets/Caption":{"title":"$:/language/ControlPanel/Stylesheets/Caption","text":"Stylesheets"},"$:/language/ControlPanel/Stylesheets/Expand/Caption":{"title":"$:/language/ControlPanel/Stylesheets/Expand/Caption","text":"Expand All"},"$:/language/ControlPanel/Stylesheets/Hint":{"title":"$:/language/ControlPanel/Stylesheets/Hint","text":"This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"},"$:/language/ControlPanel/Stylesheets/Restore/Caption":{"title":"$:/language/ControlPanel/Stylesheets/Restore/Caption","text":"Restore"},"$:/language/ControlPanel/Theme/Caption":{"title":"$:/language/ControlPanel/Theme/Caption","text":"Theme"},"$:/language/ControlPanel/Theme/Prompt":{"title":"$:/language/ControlPanel/Theme/Prompt","text":"Current theme:"},"$:/language/ControlPanel/TiddlerFields/Caption":{"title":"$:/language/ControlPanel/TiddlerFields/Caption","text":"Tiddler Fields"},"$:/language/ControlPanel/TiddlerFields/Hint":{"title":"$:/language/ControlPanel/TiddlerFields/Hint","text":"This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."},"$:/language/ControlPanel/TiddlerColour/Caption":{"title":"$:/language/ControlPanel/TiddlerColour/Caption","text":"Tiddler Colour"},"$:/language/ControlPanel/TiddlerColour/Hint":{"title":"$:/language/ControlPanel/TiddlerColour/Hint","text":"This rules cascade is used to dynamically choose the colour for a tiddler (used for the icon and the associated tag pill)."},"$:/language/ControlPanel/TiddlerIcon/Caption":{"title":"$:/language/ControlPanel/TiddlerIcon/Caption","text":"Tiddler Icon"},"$:/language/ControlPanel/TiddlerIcon/Hint":{"title":"$:/language/ControlPanel/TiddlerIcon/Hint","text":"This rules cascade is used to dynamically choose the icon for a tiddler."},"$:/language/ControlPanel/Toolbars/Caption":{"title":"$:/language/ControlPanel/Toolbars/Caption","text":"Toolbars"},"$:/language/ControlPanel/Toolbars/EditToolbar/Caption":{"title":"$:/language/ControlPanel/Toolbars/EditToolbar/Caption","text":"Edit Toolbar"},"$:/language/ControlPanel/Toolbars/EditToolbar/Hint":{"title":"$:/language/ControlPanel/Toolbars/EditToolbar/Hint","text":"Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"},"$:/language/ControlPanel/Toolbars/Hint":{"title":"$:/language/ControlPanel/Toolbars/Hint","text":"Select which toolbar buttons are displayed"},"$:/language/ControlPanel/Toolbars/PageControls/Caption":{"title":"$:/language/ControlPanel/Toolbars/PageControls/Caption","text":"Page Toolbar"},"$:/language/ControlPanel/Toolbars/PageControls/Hint":{"title":"$:/language/ControlPanel/Toolbars/PageControls/Hint","text":"Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"},"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption":{"title":"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption","text":"Editor Toolbar"},"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint":{"title":"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint","text":"Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"},"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption":{"title":"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption","text":"View Toolbar"},"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint":{"title":"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint","text":"Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"},"$:/language/ControlPanel/Tools/Download/Full/Caption":{"title":"$:/language/ControlPanel/Tools/Download/Full/Caption","text":"Download full wiki"},"$:/language/ControlPanel/ViewTemplateBody/Caption":{"title":"$:/language/ControlPanel/ViewTemplateBody/Caption","text":"View Template Body"},"$:/language/ControlPanel/ViewTemplateBody/Hint":{"title":"$:/language/ControlPanel/ViewTemplateBody/Hint","text":"This rule cascade is used by the default view template to dynamically choose the template for displaying the body of a tiddler."},"$:/language/ControlPanel/ViewTemplateTitle/Caption":{"title":"$:/language/ControlPanel/ViewTemplateTitle/Caption","text":"View Template Title"},"$:/language/ControlPanel/ViewTemplateTitle/Hint":{"title":"$:/language/ControlPanel/ViewTemplateTitle/Hint","text":"This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler."},"$:/language/Date/DaySuffix/1":{"title":"$:/language/Date/DaySuffix/1","text":"st"},"$:/language/Date/DaySuffix/2":{"title":"$:/language/Date/DaySuffix/2","text":"nd"},"$:/language/Date/DaySuffix/3":{"title":"$:/language/Date/DaySuffix/3","text":"rd"},"$:/language/Date/DaySuffix/4":{"title":"$:/language/Date/DaySuffix/4","text":"th"},"$:/language/Date/DaySuffix/5":{"title":"$:/language/Date/DaySuffix/5","text":"th"},"$:/language/Date/DaySuffix/6":{"title":"$:/language/Date/DaySuffix/6","text":"th"},"$:/language/Date/DaySuffix/7":{"title":"$:/language/Date/DaySuffix/7","text":"th"},"$:/language/Date/DaySuffix/8":{"title":"$:/language/Date/DaySuffix/8","text":"th"},"$:/language/Date/DaySuffix/9":{"title":"$:/language/Date/DaySuffix/9","text":"th"},"$:/language/Date/DaySuffix/10":{"title":"$:/language/Date/DaySuffix/10","text":"th"},"$:/language/Date/DaySuffix/11":{"title":"$:/language/Date/DaySuffix/11","text":"th"},"$:/language/Date/DaySuffix/12":{"title":"$:/language/Date/DaySuffix/12","text":"th"},"$:/language/Date/DaySuffix/13":{"title":"$:/language/Date/DaySuffix/13","text":"th"},"$:/language/Date/DaySuffix/14":{"title":"$:/language/Date/DaySuffix/14","text":"th"},"$:/language/Date/DaySuffix/15":{"title":"$:/language/Date/DaySuffix/15","text":"th"},"$:/language/Date/DaySuffix/16":{"title":"$:/language/Date/DaySuffix/16","text":"th"},"$:/language/Date/DaySuffix/17":{"title":"$:/language/Date/DaySuffix/17","text":"th"},"$:/language/Date/DaySuffix/18":{"title":"$:/language/Date/DaySuffix/18","text":"th"},"$:/language/Date/DaySuffix/19":{"title":"$:/language/Date/DaySuffix/19","text":"th"},"$:/language/Date/DaySuffix/20":{"title":"$:/language/Date/DaySuffix/20","text":"th"},"$:/language/Date/DaySuffix/21":{"title":"$:/language/Date/DaySuffix/21","text":"st"},"$:/language/Date/DaySuffix/22":{"title":"$:/language/Date/DaySuffix/22","text":"nd"},"$:/language/Date/DaySuffix/23":{"title":"$:/language/Date/DaySuffix/23","text":"rd"},"$:/language/Date/DaySuffix/24":{"title":"$:/language/Date/DaySuffix/24","text":"th"},"$:/language/Date/DaySuffix/25":{"title":"$:/language/Date/DaySuffix/25","text":"th"},"$:/language/Date/DaySuffix/26":{"title":"$:/language/Date/DaySuffix/26","text":"th"},"$:/language/Date/DaySuffix/27":{"title":"$:/language/Date/DaySuffix/27","text":"th"},"$:/language/Date/DaySuffix/28":{"title":"$:/language/Date/DaySuffix/28","text":"th"},"$:/language/Date/DaySuffix/29":{"title":"$:/language/Date/DaySuffix/29","text":"th"},"$:/language/Date/DaySuffix/30":{"title":"$:/language/Date/DaySuffix/30","text":"th"},"$:/language/Date/DaySuffix/31":{"title":"$:/language/Date/DaySuffix/31","text":"st"},"$:/language/Date/Long/Day/0":{"title":"$:/language/Date/Long/Day/0","text":"Sunday"},"$:/language/Date/Long/Day/1":{"title":"$:/language/Date/Long/Day/1","text":"Monday"},"$:/language/Date/Long/Day/2":{"title":"$:/language/Date/Long/Day/2","text":"Tuesday"},"$:/language/Date/Long/Day/3":{"title":"$:/language/Date/Long/Day/3","text":"Wednesday"},"$:/language/Date/Long/Day/4":{"title":"$:/language/Date/Long/Day/4","text":"Thursday"},"$:/language/Date/Long/Day/5":{"title":"$:/language/Date/Long/Day/5","text":"Friday"},"$:/language/Date/Long/Day/6":{"title":"$:/language/Date/Long/Day/6","text":"Saturday"},"$:/language/Date/Long/Month/1":{"title":"$:/language/Date/Long/Month/1","text":"January"},"$:/language/Date/Long/Month/2":{"title":"$:/language/Date/Long/Month/2","text":"February"},"$:/language/Date/Long/Month/3":{"title":"$:/language/Date/Long/Month/3","text":"March"},"$:/language/Date/Long/Month/4":{"title":"$:/language/Date/Long/Month/4","text":"April"},"$:/language/Date/Long/Month/5":{"title":"$:/language/Date/Long/Month/5","text":"May"},"$:/language/Date/Long/Month/6":{"title":"$:/language/Date/Long/Month/6","text":"June"},"$:/language/Date/Long/Month/7":{"title":"$:/language/Date/Long/Month/7","text":"July"},"$:/language/Date/Long/Month/8":{"title":"$:/language/Date/Long/Month/8","text":"August"},"$:/language/Date/Long/Month/9":{"title":"$:/language/Date/Long/Month/9","text":"September"},"$:/language/Date/Long/Month/10":{"title":"$:/language/Date/Long/Month/10","text":"October"},"$:/language/Date/Long/Month/11":{"title":"$:/language/Date/Long/Month/11","text":"November"},"$:/language/Date/Long/Month/12":{"title":"$:/language/Date/Long/Month/12","text":"December"},"$:/language/Date/Period/am":{"title":"$:/language/Date/Period/am","text":"am"},"$:/language/Date/Period/pm":{"title":"$:/language/Date/Period/pm","text":"pm"},"$:/language/Date/Short/Day/0":{"title":"$:/language/Date/Short/Day/0","text":"Sun"},"$:/language/Date/Short/Day/1":{"title":"$:/language/Date/Short/Day/1","text":"Mon"},"$:/language/Date/Short/Day/2":{"title":"$:/language/Date/Short/Day/2","text":"Tue"},"$:/language/Date/Short/Day/3":{"title":"$:/language/Date/Short/Day/3","text":"Wed"},"$:/language/Date/Short/Day/4":{"title":"$:/language/Date/Short/Day/4","text":"Thu"},"$:/language/Date/Short/Day/5":{"title":"$:/language/Date/Short/Day/5","text":"Fri"},"$:/language/Date/Short/Day/6":{"title":"$:/language/Date/Short/Day/6","text":"Sat"},"$:/language/Date/Short/Month/1":{"title":"$:/language/Date/Short/Month/1","text":"Jan"},"$:/language/Date/Short/Month/2":{"title":"$:/language/Date/Short/Month/2","text":"Feb"},"$:/language/Date/Short/Month/3":{"title":"$:/language/Date/Short/Month/3","text":"Mar"},"$:/language/Date/Short/Month/4":{"title":"$:/language/Date/Short/Month/4","text":"Apr"},"$:/language/Date/Short/Month/5":{"title":"$:/language/Date/Short/Month/5","text":"May"},"$:/language/Date/Short/Month/6":{"title":"$:/language/Date/Short/Month/6","text":"Jun"},"$:/language/Date/Short/Month/7":{"title":"$:/language/Date/Short/Month/7","text":"Jul"},"$:/language/Date/Short/Month/8":{"title":"$:/language/Date/Short/Month/8","text":"Aug"},"$:/language/Date/Short/Month/9":{"title":"$:/language/Date/Short/Month/9","text":"Sep"},"$:/language/Date/Short/Month/10":{"title":"$:/language/Date/Short/Month/10","text":"Oct"},"$:/language/Date/Short/Month/11":{"title":"$:/language/Date/Short/Month/11","text":"Nov"},"$:/language/Date/Short/Month/12":{"title":"$:/language/Date/Short/Month/12","text":"Dec"},"$:/language/RelativeDate/Future/Days":{"title":"$:/language/RelativeDate/Future/Days","text":"<<period>> days from now"},"$:/language/RelativeDate/Future/Hours":{"title":"$:/language/RelativeDate/Future/Hours","text":"<<period>> hours from now"},"$:/language/RelativeDate/Future/Minutes":{"title":"$:/language/RelativeDate/Future/Minutes","text":"<<period>> minutes from now"},"$:/language/RelativeDate/Future/Months":{"title":"$:/language/RelativeDate/Future/Months","text":"<<period>> months from now"},"$:/language/RelativeDate/Future/Second":{"title":"$:/language/RelativeDate/Future/Second","text":"1 second from now"},"$:/language/RelativeDate/Future/Seconds":{"title":"$:/language/RelativeDate/Future/Seconds","text":"<<period>> seconds from now"},"$:/language/RelativeDate/Future/Years":{"title":"$:/language/RelativeDate/Future/Years","text":"<<period>> years from now"},"$:/language/RelativeDate/Past/Days":{"title":"$:/language/RelativeDate/Past/Days","text":"<<period>> days ago"},"$:/language/RelativeDate/Past/Hours":{"title":"$:/language/RelativeDate/Past/Hours","text":"<<period>> hours ago"},"$:/language/RelativeDate/Past/Minutes":{"title":"$:/language/RelativeDate/Past/Minutes","text":"<<period>> minutes ago"},"$:/language/RelativeDate/Past/Months":{"title":"$:/language/RelativeDate/Past/Months","text":"<<period>> months ago"},"$:/language/RelativeDate/Past/Second":{"title":"$:/language/RelativeDate/Past/Second","text":"1 second ago"},"$:/language/RelativeDate/Past/Seconds":{"title":"$:/language/RelativeDate/Past/Seconds","text":"<<period>> seconds ago"},"$:/language/RelativeDate/Past/Years":{"title":"$:/language/RelativeDate/Past/Years","text":"<<period>> years ago"},"$:/language/Docs/ModuleTypes/allfilteroperator":{"title":"$:/language/Docs/ModuleTypes/allfilteroperator","text":"A sub-operator for the ''all'' filter operator."},"$:/language/Docs/ModuleTypes/animation":{"title":"$:/language/Docs/ModuleTypes/animation","text":"Animations that may be used with the RevealWidget."},"$:/language/Docs/ModuleTypes/authenticator":{"title":"$:/language/Docs/ModuleTypes/authenticator","text":"Defines how requests are authenticated by the built-in HTTP server."},"$:/language/Docs/ModuleTypes/bitmapeditoroperation":{"title":"$:/language/Docs/ModuleTypes/bitmapeditoroperation","text":"A bitmap editor toolbar operation."},"$:/language/Docs/ModuleTypes/command":{"title":"$:/language/Docs/ModuleTypes/command","text":"Commands that can be executed under Node.js."},"$:/language/Docs/ModuleTypes/config":{"title":"$:/language/Docs/ModuleTypes/config","text":"Data to be inserted into `$tw.config`."},"$:/language/Docs/ModuleTypes/filteroperator":{"title":"$:/language/Docs/ModuleTypes/filteroperator","text":"Individual filter operator methods."},"$:/language/Docs/ModuleTypes/global":{"title":"$:/language/Docs/ModuleTypes/global","text":"Global data to be inserted into `$tw`."},"$:/language/Docs/ModuleTypes/info":{"title":"$:/language/Docs/ModuleTypes/info","text":"Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."},"$:/language/Docs/ModuleTypes/isfilteroperator":{"title":"$:/language/Docs/ModuleTypes/isfilteroperator","text":"Parameters for the ''is'' filter operator."},"$:/language/Docs/ModuleTypes/library":{"title":"$:/language/Docs/ModuleTypes/library","text":"Generic module type for general purpose JavaScript modules."},"$:/language/Docs/ModuleTypes/macro":{"title":"$:/language/Docs/ModuleTypes/macro","text":"JavaScript macro definitions."},"$:/language/Docs/ModuleTypes/parser":{"title":"$:/language/Docs/ModuleTypes/parser","text":"Parsers for different content types."},"$:/language/Docs/ModuleTypes/route":{"title":"$:/language/Docs/ModuleTypes/route","text":"Defines how individual URL patterns are handled by the built-in HTTP server."},"$:/language/Docs/ModuleTypes/saver":{"title":"$:/language/Docs/ModuleTypes/saver","text":"Savers handle different methods for saving files from the browser."},"$:/language/Docs/ModuleTypes/startup":{"title":"$:/language/Docs/ModuleTypes/startup","text":"Startup functions."},"$:/language/Docs/ModuleTypes/storyview":{"title":"$:/language/Docs/ModuleTypes/storyview","text":"Story views customise the animation and behaviour of list widgets."},"$:/language/Docs/ModuleTypes/texteditoroperation":{"title":"$:/language/Docs/ModuleTypes/texteditoroperation","text":"A text editor toolbar operation."},"$:/language/Docs/ModuleTypes/tiddlerdeserializer":{"title":"$:/language/Docs/ModuleTypes/tiddlerdeserializer","text":"Converts different content types into tiddlers."},"$:/language/Docs/ModuleTypes/tiddlerfield":{"title":"$:/language/Docs/ModuleTypes/tiddlerfield","text":"Defines the behaviour of an individual tiddler field."},"$:/language/Docs/ModuleTypes/tiddlermethod":{"title":"$:/language/Docs/ModuleTypes/tiddlermethod","text":"Adds methods to the `$tw.Tiddler` prototype."},"$:/language/Docs/ModuleTypes/upgrader":{"title":"$:/language/Docs/ModuleTypes/upgrader","text":"Applies upgrade processing to tiddlers during an upgrade/import."},"$:/language/Docs/ModuleTypes/utils":{"title":"$:/language/Docs/ModuleTypes/utils","text":"Adds methods to `$tw.utils`."},"$:/language/Docs/ModuleTypes/utils-browser":{"title":"$:/language/Docs/ModuleTypes/utils-browser","text":"Adds browser-specific methods to `$tw.utils`."},"$:/language/Docs/ModuleTypes/utils-node":{"title":"$:/language/Docs/ModuleTypes/utils-node","text":"Adds Node.js-specific methods to `$tw.utils`."},"$:/language/Docs/ModuleTypes/widget":{"title":"$:/language/Docs/ModuleTypes/widget","text":"Widgets encapsulate DOM rendering and refreshing."},"$:/language/Docs/ModuleTypes/wikimethod":{"title":"$:/language/Docs/ModuleTypes/wikimethod","text":"Adds methods to `$tw.Wiki`."},"$:/language/Docs/ModuleTypes/wikirule":{"title":"$:/language/Docs/ModuleTypes/wikirule","text":"Individual parser rules for the main WikiText parser."},"$:/language/Docs/PaletteColours/alert-background":{"title":"$:/language/Docs/PaletteColours/alert-background","text":"Alert background"},"$:/language/Docs/PaletteColours/alert-border":{"title":"$:/language/Docs/PaletteColours/alert-border","text":"Alert border"},"$:/language/Docs/PaletteColours/alert-highlight":{"title":"$:/language/Docs/PaletteColours/alert-highlight","text":"Alert highlight"},"$:/language/Docs/PaletteColours/alert-muted-foreground":{"title":"$:/language/Docs/PaletteColours/alert-muted-foreground","text":"Alert muted foreground"},"$:/language/Docs/PaletteColours/background":{"title":"$:/language/Docs/PaletteColours/background","text":"General background"},"$:/language/Docs/PaletteColours/blockquote-bar":{"title":"$:/language/Docs/PaletteColours/blockquote-bar","text":"Blockquote bar"},"$:/language/Docs/PaletteColours/button-background":{"title":"$:/language/Docs/PaletteColours/button-background","text":"Default button background"},"$:/language/Docs/PaletteColours/button-border":{"title":"$:/language/Docs/PaletteColours/button-border","text":"Default button border"},"$:/language/Docs/PaletteColours/button-foreground":{"title":"$:/language/Docs/PaletteColours/button-foreground","text":"Default button foreground"},"$:/language/Docs/PaletteColours/dirty-indicator":{"title":"$:/language/Docs/PaletteColours/dirty-indicator","text":"Unsaved changes indicator"},"$:/language/Docs/PaletteColours/code-background":{"title":"$:/language/Docs/PaletteColours/code-background","text":"Code background"},"$:/language/Docs/PaletteColours/code-border":{"title":"$:/language/Docs/PaletteColours/code-border","text":"Code border"},"$:/language/Docs/PaletteColours/code-foreground":{"title":"$:/language/Docs/PaletteColours/code-foreground","text":"Code foreground"},"$:/language/Docs/PaletteColours/download-background":{"title":"$:/language/Docs/PaletteColours/download-background","text":"Download button background"},"$:/language/Docs/PaletteColours/download-foreground":{"title":"$:/language/Docs/PaletteColours/download-foreground","text":"Download button foreground"},"$:/language/Docs/PaletteColours/dragger-background":{"title":"$:/language/Docs/PaletteColours/dragger-background","text":"Dragger background"},"$:/language/Docs/PaletteColours/dragger-foreground":{"title":"$:/language/Docs/PaletteColours/dragger-foreground","text":"Dragger foreground"},"$:/language/Docs/PaletteColours/dropdown-background":{"title":"$:/language/Docs/PaletteColours/dropdown-background","text":"Dropdown background"},"$:/language/Docs/PaletteColours/dropdown-border":{"title":"$:/language/Docs/PaletteColours/dropdown-border","text":"Dropdown border"},"$:/language/Docs/PaletteColours/dropdown-tab-background-selected":{"title":"$:/language/Docs/PaletteColours/dropdown-tab-background-selected","text":"Dropdown tab background for selected tabs"},"$:/language/Docs/PaletteColours/dropdown-tab-background":{"title":"$:/language/Docs/PaletteColours/dropdown-tab-background","text":"Dropdown tab background"},"$:/language/Docs/PaletteColours/dropzone-background":{"title":"$:/language/Docs/PaletteColours/dropzone-background","text":"Dropzone background"},"$:/language/Docs/PaletteColours/external-link-background-hover":{"title":"$:/language/Docs/PaletteColours/external-link-background-hover","text":"External link background hover"},"$:/language/Docs/PaletteColours/external-link-background-visited":{"title":"$:/language/Docs/PaletteColours/external-link-background-visited","text":"External link background visited"},"$:/language/Docs/PaletteColours/external-link-background":{"title":"$:/language/Docs/PaletteColours/external-link-background","text":"External link background"},"$:/language/Docs/PaletteColours/external-link-foreground-hover":{"title":"$:/language/Docs/PaletteColours/external-link-foreground-hover","text":"External link foreground hover"},"$:/language/Docs/PaletteColours/external-link-foreground-visited":{"title":"$:/language/Docs/PaletteColours/external-link-foreground-visited","text":"External link foreground visited"},"$:/language/Docs/PaletteColours/external-link-foreground":{"title":"$:/language/Docs/PaletteColours/external-link-foreground","text":"External link foreground"},"$:/language/Docs/PaletteColours/foreground":{"title":"$:/language/Docs/PaletteColours/foreground","text":"General foreground"},"$:/language/Docs/PaletteColours/menubar-background":{"title":"$:/language/Docs/PaletteColours/menubar-background","text":"Menu bar background"},"$:/language/Docs/PaletteColours/menubar-foreground":{"title":"$:/language/Docs/PaletteColours/menubar-foreground","text":"Menu bar foreground"},"$:/language/Docs/PaletteColours/message-background":{"title":"$:/language/Docs/PaletteColours/message-background","text":"Message box background"},"$:/language/Docs/PaletteColours/message-border":{"title":"$:/language/Docs/PaletteColours/message-border","text":"Message box border"},"$:/language/Docs/PaletteColours/message-foreground":{"title":"$:/language/Docs/PaletteColours/message-foreground","text":"Message box foreground"},"$:/language/Docs/PaletteColours/modal-backdrop":{"title":"$:/language/Docs/PaletteColours/modal-backdrop","text":"Modal backdrop"},"$:/language/Docs/PaletteColours/modal-background":{"title":"$:/language/Docs/PaletteColours/modal-background","text":"Modal background"},"$:/language/Docs/PaletteColours/modal-border":{"title":"$:/language/Docs/PaletteColours/modal-border","text":"Modal border"},"$:/language/Docs/PaletteColours/modal-footer-background":{"title":"$:/language/Docs/PaletteColours/modal-footer-background","text":"Modal footer background"},"$:/language/Docs/PaletteColours/modal-footer-border":{"title":"$:/language/Docs/PaletteColours/modal-footer-border","text":"Modal footer border"},"$:/language/Docs/PaletteColours/modal-header-border":{"title":"$:/language/Docs/PaletteColours/modal-header-border","text":"Modal header border"},"$:/language/Docs/PaletteColours/muted-foreground":{"title":"$:/language/Docs/PaletteColours/muted-foreground","text":"General muted foreground"},"$:/language/Docs/PaletteColours/notification-background":{"title":"$:/language/Docs/PaletteColours/notification-background","text":"Notification background"},"$:/language/Docs/PaletteColours/notification-border":{"title":"$:/language/Docs/PaletteColours/notification-border","text":"Notification border"},"$:/language/Docs/PaletteColours/page-background":{"title":"$:/language/Docs/PaletteColours/page-background","text":"Page background"},"$:/language/Docs/PaletteColours/pre-background":{"title":"$:/language/Docs/PaletteColours/pre-background","text":"Preformatted code background"},"$:/language/Docs/PaletteColours/pre-border":{"title":"$:/language/Docs/PaletteColours/pre-border","text":"Preformatted code border"},"$:/language/Docs/PaletteColours/primary":{"title":"$:/language/Docs/PaletteColours/primary","text":"General primary"},"$:/language/Docs/PaletteColours/select-tag-background":{"title":"$:/language/Docs/PaletteColours/select-tag-background","text":"`<select>` element background"},"$:/language/Docs/PaletteColours/select-tag-foreground":{"title":"$:/language/Docs/PaletteColours/select-tag-foreground","text":"`<select>` element text"},"$:/language/Docs/PaletteColours/sidebar-button-foreground":{"title":"$:/language/Docs/PaletteColours/sidebar-button-foreground","text":"Sidebar button foreground"},"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover":{"title":"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover","text":"Sidebar controls foreground hover"},"$:/language/Docs/PaletteColours/sidebar-controls-foreground":{"title":"$:/language/Docs/PaletteColours/sidebar-controls-foreground","text":"Sidebar controls foreground"},"$:/language/Docs/PaletteColours/sidebar-foreground-shadow":{"title":"$:/language/Docs/PaletteColours/sidebar-foreground-shadow","text":"Sidebar foreground shadow"},"$:/language/Docs/PaletteColours/sidebar-foreground":{"title":"$:/language/Docs/PaletteColours/sidebar-foreground","text":"Sidebar foreground"},"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover":{"title":"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover","text":"Sidebar muted foreground hover"},"$:/language/Docs/PaletteColours/sidebar-muted-foreground":{"title":"$:/language/Docs/PaletteColours/sidebar-muted-foreground","text":"Sidebar muted foreground"},"$:/language/Docs/PaletteColours/sidebar-tab-background-selected":{"title":"$:/language/Docs/PaletteColours/sidebar-tab-background-selected","text":"Sidebar tab background for selected tabs"},"$:/language/Docs/PaletteColours/sidebar-tab-background":{"title":"$:/language/Docs/PaletteColours/sidebar-tab-background","text":"Sidebar tab background"},"$:/language/Docs/PaletteColours/sidebar-tab-border-selected":{"title":"$:/language/Docs/PaletteColours/sidebar-tab-border-selected","text":"Sidebar tab border for selected tabs"},"$:/language/Docs/PaletteColours/sidebar-tab-border":{"title":"$:/language/Docs/PaletteColours/sidebar-tab-border","text":"Sidebar tab border"},"$:/language/Docs/PaletteColours/sidebar-tab-divider":{"title":"$:/language/Docs/PaletteColours/sidebar-tab-divider","text":"Sidebar tab divider"},"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected":{"title":"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected","text":"Sidebar tab foreground for selected tabs"},"$:/language/Docs/PaletteColours/sidebar-tab-foreground":{"title":"$:/language/Docs/PaletteColours/sidebar-tab-foreground","text":"Sidebar tab foreground"},"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover":{"title":"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover","text":"Sidebar tiddler link foreground hover"},"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground":{"title":"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground","text":"Sidebar tiddler link foreground"},"$:/language/Docs/PaletteColours/site-title-foreground":{"title":"$:/language/Docs/PaletteColours/site-title-foreground","text":"Site title foreground"},"$:/language/Docs/PaletteColours/static-alert-foreground":{"title":"$:/language/Docs/PaletteColours/static-alert-foreground","text":"Static alert foreground"},"$:/language/Docs/PaletteColours/tab-background-selected":{"title":"$:/language/Docs/PaletteColours/tab-background-selected","text":"Tab background for selected tabs"},"$:/language/Docs/PaletteColours/tab-background":{"title":"$:/language/Docs/PaletteColours/tab-background","text":"Tab background"},"$:/language/Docs/PaletteColours/tab-border-selected":{"title":"$:/language/Docs/PaletteColours/tab-border-selected","text":"Tab border for selected tabs"},"$:/language/Docs/PaletteColours/tab-border":{"title":"$:/language/Docs/PaletteColours/tab-border","text":"Tab border"},"$:/language/Docs/PaletteColours/tab-divider":{"title":"$:/language/Docs/PaletteColours/tab-divider","text":"Tab divider"},"$:/language/Docs/PaletteColours/tab-foreground-selected":{"title":"$:/language/Docs/PaletteColours/tab-foreground-selected","text":"Tab foreground for selected tabs"},"$:/language/Docs/PaletteColours/tab-foreground":{"title":"$:/language/Docs/PaletteColours/tab-foreground","text":"Tab foreground"},"$:/language/Docs/PaletteColours/table-border":{"title":"$:/language/Docs/PaletteColours/table-border","text":"Table border"},"$:/language/Docs/PaletteColours/table-footer-background":{"title":"$:/language/Docs/PaletteColours/table-footer-background","text":"Table footer background"},"$:/language/Docs/PaletteColours/table-header-background":{"title":"$:/language/Docs/PaletteColours/table-header-background","text":"Table header background"},"$:/language/Docs/PaletteColours/tag-background":{"title":"$:/language/Docs/PaletteColours/tag-background","text":"Tag background"},"$:/language/Docs/PaletteColours/tag-foreground":{"title":"$:/language/Docs/PaletteColours/tag-foreground","text":"Tag foreground"},"$:/language/Docs/PaletteColours/tiddler-background":{"title":"$:/language/Docs/PaletteColours/tiddler-background","text":"Tiddler background"},"$:/language/Docs/PaletteColours/tiddler-border":{"title":"$:/language/Docs/PaletteColours/tiddler-border","text":"Tiddler border"},"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover":{"title":"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover","text":"Tiddler controls foreground hover"},"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected":{"title":"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected","text":"Tiddler controls foreground for selected controls"},"$:/language/Docs/PaletteColours/tiddler-controls-foreground":{"title":"$:/language/Docs/PaletteColours/tiddler-controls-foreground","text":"Tiddler controls foreground"},"$:/language/Docs/PaletteColours/tiddler-editor-background":{"title":"$:/language/Docs/PaletteColours/tiddler-editor-background","text":"Tiddler editor background"},"$:/language/Docs/PaletteColours/tiddler-editor-border-image":{"title":"$:/language/Docs/PaletteColours/tiddler-editor-border-image","text":"Tiddler editor border image"},"$:/language/Docs/PaletteColours/tiddler-editor-border":{"title":"$:/language/Docs/PaletteColours/tiddler-editor-border","text":"Tiddler editor border"},"$:/language/Docs/PaletteColours/tiddler-editor-fields-even":{"title":"$:/language/Docs/PaletteColours/tiddler-editor-fields-even","text":"Tiddler editor background for even fields"},"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd":{"title":"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd","text":"Tiddler editor background for odd fields"},"$:/language/Docs/PaletteColours/tiddler-info-background":{"title":"$:/language/Docs/PaletteColours/tiddler-info-background","text":"Tiddler info panel background"},"$:/language/Docs/PaletteColours/tiddler-info-border":{"title":"$:/language/Docs/PaletteColours/tiddler-info-border","text":"Tiddler info panel border"},"$:/language/Docs/PaletteColours/tiddler-info-tab-background":{"title":"$:/language/Docs/PaletteColours/tiddler-info-tab-background","text":"Tiddler info panel tab background"},"$:/language/Docs/PaletteColours/tiddler-link-background":{"title":"$:/language/Docs/PaletteColours/tiddler-link-background","text":"Tiddler link background"},"$:/language/Docs/PaletteColours/tiddler-link-foreground":{"title":"$:/language/Docs/PaletteColours/tiddler-link-foreground","text":"Tiddler link foreground"},"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground":{"title":"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground","text":"Tiddler subtitle foreground"},"$:/language/Docs/PaletteColours/tiddler-title-foreground":{"title":"$:/language/Docs/PaletteColours/tiddler-title-foreground","text":"Tiddler title foreground"},"$:/language/Docs/PaletteColours/toolbar-new-button":{"title":"$:/language/Docs/PaletteColours/toolbar-new-button","text":"Toolbar 'new tiddler' button foreground"},"$:/language/Docs/PaletteColours/toolbar-options-button":{"title":"$:/language/Docs/PaletteColours/toolbar-options-button","text":"Toolbar 'options' button foreground"},"$:/language/Docs/PaletteColours/toolbar-save-button":{"title":"$:/language/Docs/PaletteColours/toolbar-save-button","text":"Toolbar 'save' button foreground"},"$:/language/Docs/PaletteColours/toolbar-info-button":{"title":"$:/language/Docs/PaletteColours/toolbar-info-button","text":"Toolbar 'info' button foreground"},"$:/language/Docs/PaletteColours/toolbar-edit-button":{"title":"$:/language/Docs/PaletteColours/toolbar-edit-button","text":"Toolbar 'edit' button foreground"},"$:/language/Docs/PaletteColours/toolbar-close-button":{"title":"$:/language/Docs/PaletteColours/toolbar-close-button","text":"Toolbar 'close' button foreground"},"$:/language/Docs/PaletteColours/toolbar-delete-button":{"title":"$:/language/Docs/PaletteColours/toolbar-delete-button","text":"Toolbar 'delete' button foreground"},"$:/language/Docs/PaletteColours/toolbar-cancel-button":{"title":"$:/language/Docs/PaletteColours/toolbar-cancel-button","text":"Toolbar 'cancel' button foreground"},"$:/language/Docs/PaletteColours/toolbar-done-button":{"title":"$:/language/Docs/PaletteColours/toolbar-done-button","text":"Toolbar 'done' button foreground"},"$:/language/Docs/PaletteColours/untagged-background":{"title":"$:/language/Docs/PaletteColours/untagged-background","text":"Untagged pill background"},"$:/language/Docs/PaletteColours/very-muted-foreground":{"title":"$:/language/Docs/PaletteColours/very-muted-foreground","text":"Very muted foreground"},"$:/language/EditTemplate/Caption":{"title":"$:/language/EditTemplate/Caption","text":"Editor"},"$:/language/EditTemplate/Body/External/Hint":{"title":"$:/language/EditTemplate/Body/External/Hint","text":"This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"},"$:/language/EditTemplate/Body/Placeholder":{"title":"$:/language/EditTemplate/Body/Placeholder","text":"Type the text for this tiddler"},"$:/language/EditTemplate/Body/Preview/Type/Output":{"title":"$:/language/EditTemplate/Body/Preview/Type/Output","text":"output"},"$:/language/EditTemplate/Body/Preview/Type/DiffShadow":{"title":"$:/language/EditTemplate/Body/Preview/Type/DiffShadow","text":"differences from shadow (if any)"},"$:/language/EditTemplate/Body/Preview/Type/DiffCurrent":{"title":"$:/language/EditTemplate/Body/Preview/Type/DiffCurrent","text":"differences from current"},"$:/language/EditTemplate/Field/Remove/Caption":{"title":"$:/language/EditTemplate/Field/Remove/Caption","text":"remove field"},"$:/language/EditTemplate/Field/Remove/Hint":{"title":"$:/language/EditTemplate/Field/Remove/Hint","text":"Remove field"},"$:/language/EditTemplate/Field/Dropdown/Caption":{"title":"$:/language/EditTemplate/Field/Dropdown/Caption","text":"field list"},"$:/language/EditTemplate/Field/Dropdown/Hint":{"title":"$:/language/EditTemplate/Field/Dropdown/Hint","text":"Show field list"},"$:/language/EditTemplate/Fields/Add/Button":{"title":"$:/language/EditTemplate/Fields/Add/Button","text":"add"},"$:/language/EditTemplate/Fields/Add/Button/Hint":{"title":"$:/language/EditTemplate/Fields/Add/Button/Hint","text":"Add the new field to the tiddler"},"$:/language/EditTemplate/Fields/Add/Name/Placeholder":{"title":"$:/language/EditTemplate/Fields/Add/Name/Placeholder","text":"field name"},"$:/language/EditTemplate/Fields/Add/Prompt":{"title":"$:/language/EditTemplate/Fields/Add/Prompt","text":"Add a new field:"},"$:/language/EditTemplate/Fields/Add/Value/Placeholder":{"title":"$:/language/EditTemplate/Fields/Add/Value/Placeholder","text":"field value"},"$:/language/EditTemplate/Fields/Add/Dropdown/System":{"title":"$:/language/EditTemplate/Fields/Add/Dropdown/System","text":"System fields"},"$:/language/EditTemplate/Fields/Add/Dropdown/User":{"title":"$:/language/EditTemplate/Fields/Add/Dropdown/User","text":"User fields"},"$:/language/EditTemplate/Shadow/Warning":{"title":"$:/language/EditTemplate/Shadow/Warning","text":"This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"},"$:/language/EditTemplate/Shadow/OverriddenWarning":{"title":"$:/language/EditTemplate/Shadow/OverriddenWarning","text":"This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"},"$:/language/EditTemplate/Tags/Add/Button":{"title":"$:/language/EditTemplate/Tags/Add/Button","text":"add"},"$:/language/EditTemplate/Tags/Add/Button/Hint":{"title":"$:/language/EditTemplate/Tags/Add/Button/Hint","text":"add tag"},"$:/language/EditTemplate/Tags/Add/Placeholder":{"title":"$:/language/EditTemplate/Tags/Add/Placeholder","text":"tag name"},"$:/language/EditTemplate/Tags/ClearInput/Caption":{"title":"$:/language/EditTemplate/Tags/ClearInput/Caption","text":"clear input"},"$:/language/EditTemplate/Tags/ClearInput/Hint":{"title":"$:/language/EditTemplate/Tags/ClearInput/Hint","text":"Clear tag input"},"$:/language/EditTemplate/Tags/Dropdown/Caption":{"title":"$:/language/EditTemplate/Tags/Dropdown/Caption","text":"tag list"},"$:/language/EditTemplate/Tags/Dropdown/Hint":{"title":"$:/language/EditTemplate/Tags/Dropdown/Hint","text":"Show tag list"},"$:/language/EditTemplate/Title/BadCharacterWarning":{"title":"$:/language/EditTemplate/Title/BadCharacterWarning","text":"Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"},"$:/language/EditTemplate/Title/Exists/Prompt":{"title":"$:/language/EditTemplate/Title/Exists/Prompt","text":"Target tiddler already exists"},"$:/language/EditTemplate/Title/Relink/Prompt":{"title":"$:/language/EditTemplate/Title/Relink/Prompt","text":"Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"},"$:/language/EditTemplate/Title/References/Prompt":{"title":"$:/language/EditTemplate/Title/References/Prompt","text":"The following references to this tiddler will not be automatically updated:"},"$:/language/EditTemplate/Type/Dropdown/Caption":{"title":"$:/language/EditTemplate/Type/Dropdown/Caption","text":"content type list"},"$:/language/EditTemplate/Type/Dropdown/Hint":{"title":"$:/language/EditTemplate/Type/Dropdown/Hint","text":"Show content type list"},"$:/language/EditTemplate/Type/Delete/Caption":{"title":"$:/language/EditTemplate/Type/Delete/Caption","text":"delete content type"},"$:/language/EditTemplate/Type/Delete/Hint":{"title":"$:/language/EditTemplate/Type/Delete/Hint","text":"Delete content type"},"$:/language/EditTemplate/Type/Placeholder":{"title":"$:/language/EditTemplate/Type/Placeholder","text":"content type"},"$:/language/EditTemplate/Type/Prompt":{"title":"$:/language/EditTemplate/Type/Prompt","text":"Type:"},"$:/language/Exporters/StaticRiver":{"title":"$:/language/Exporters/StaticRiver","text":"Static HTML"},"$:/language/Exporters/JsonFile":{"title":"$:/language/Exporters/JsonFile","text":"JSON file"},"$:/language/Exporters/CsvFile":{"title":"$:/language/Exporters/CsvFile","text":"CSV file"},"$:/language/Exporters/TidFile":{"title":"$:/language/Exporters/TidFile","text":"TID text file"},"$:/language/Docs/Fields/_canonical_uri":{"title":"$:/language/Docs/Fields/_canonical_uri","text":"The full URI of an external image tiddler"},"$:/language/Docs/Fields/author":{"title":"$:/language/Docs/Fields/author","text":"Name of the author of a plugin"},"$:/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/class":{"title":"$:/language/Docs/Fields/class","text":"The CSS class applied to a tiddler when rendering it - see [[Custom styles by user-class]]. Also used for [[Modals]]"},"$:/language/Docs/Fields/code-body":{"title":"$:/language/Docs/Fields/code-body","text":"The view template will display the tiddler as code if set to ''yes''"},"$:/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/core-version":{"title":"$:/language/Docs/Fields/core-version","text":"For a plugin, indicates what version of TiddlyWiki with which it is compatible"},"$:/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 modal"},"$:/language/Docs/Fields/hide-body":{"title":"$:/language/Docs/Fields/hide-body","text":"The view template will hide bodies of tiddlers if set to ''yes''"},"$:/language/Docs/Fields/icon":{"title":"$:/language/Docs/Fields/icon","text":"The title of the tiddler containing the icon associated with a tiddler"},"$:/language/Docs/Fields/library":{"title":"$:/language/Docs/Fields/library","text":"Indicates that a tiddler should be saved as a JavaScript library if set to ''yes''"},"$:/language/Docs/Fields/list":{"title":"$:/language/Docs/Fields/list","text":"An ordered list of tiddler titles associated with a tiddler"},"$:/language/Docs/Fields/list-before":{"title":"$:/language/Docs/Fields/list-before","text":"If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"},"$:/language/Docs/Fields/list-after":{"title":"$:/language/Docs/Fields/list-after","text":"If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"},"$:/language/Docs/Fields/modified":{"title":"$:/language/Docs/Fields/modified","text":"The date and time at which a tiddler was last modified"},"$:/language/Docs/Fields/modifier":{"title":"$:/language/Docs/Fields/modifier","text":"The tiddler title associated with the person who last modified a tiddler"},"$:/language/Docs/Fields/module-type":{"title":"$:/language/Docs/Fields/module-type","text":"For javascript tiddlers, specifies what kind of module it is"},"$:/language/Docs/Fields/name":{"title":"$:/language/Docs/Fields/name","text":"The human readable name associated with a plugin tiddler"},"$:/language/Docs/Fields/parent-plugin":{"title":"$:/language/Docs/Fields/parent-plugin","text":"For a plugin, specifies which plugin of which it is a sub-plugin"},"$:/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 modal"},"$:/language/Docs/Fields/tags":{"title":"$:/language/Docs/Fields/tags","text":"A list of tags associated with a tiddler"},"$:/language/Docs/Fields/text":{"title":"$:/language/Docs/Fields/text","text":"The body text of a tiddler"},"$:/language/Docs/Fields/throttle.refresh":{"title":"$:/language/Docs/Fields/throttle.refresh","text":"If present, throttles refreshes of this tiddler"},"$:/language/Docs/Fields/title":{"title":"$:/language/Docs/Fields/title","text":"The unique name of a tiddler"},"$:/language/Docs/Fields/toc-link":{"title":"$:/language/Docs/Fields/toc-link","text":"Suppresses the tiddler's link in a Table of Contents tree if set to ''no''"},"$:/language/Docs/Fields/type":{"title":"$:/language/Docs/Fields/type","text":"The content type of a tiddler"},"$:/language/Docs/Fields/version":{"title":"$:/language/Docs/Fields/version","text":"Version information for a plugin"},"$:/language/Docs/Fields/_is_skinny":{"title":"$:/language/Docs/Fields/_is_skinny","text":"If present, indicates that the tiddler text field must be loaded from the server"},"$:/language/Filters/AllTiddlers":{"title":"$:/language/Filters/AllTiddlers","text":"All tiddlers except system tiddlers"},"$:/language/Filters/RecentSystemTiddlers":{"title":"$:/language/Filters/RecentSystemTiddlers","text":"Recently modified tiddlers, including system tiddlers"},"$:/language/Filters/RecentTiddlers":{"title":"$:/language/Filters/RecentTiddlers","text":"Recently modified tiddlers"},"$:/language/Filters/AllTags":{"title":"$:/language/Filters/AllTags","text":"All tags except system tags"},"$:/language/Filters/Missing":{"title":"$:/language/Filters/Missing","text":"Missing tiddlers"},"$:/language/Filters/Drafts":{"title":"$:/language/Filters/Drafts","text":"Draft tiddlers"},"$:/language/Filters/Orphans":{"title":"$:/language/Filters/Orphans","text":"Orphan tiddlers"},"$:/language/Filters/SystemTiddlers":{"title":"$:/language/Filters/SystemTiddlers","text":"System tiddlers"},"$:/language/Filters/ShadowTiddlers":{"title":"$:/language/Filters/ShadowTiddlers","text":"Shadow tiddlers"},"$:/language/Filters/OverriddenShadowTiddlers":{"title":"$:/language/Filters/OverriddenShadowTiddlers","text":"Overridden shadow tiddlers"},"$:/language/Filters/SessionTiddlers":{"title":"$:/language/Filters/SessionTiddlers","text":"Tiddlers modified since the wiki was loaded"},"$:/language/Filters/SystemTags":{"title":"$:/language/Filters/SystemTags","text":"System tags"},"$:/language/Filters/StoryList":{"title":"$:/language/Filters/StoryList","text":"Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"},"$:/language/Filters/TypedTiddlers":{"title":"$:/language/Filters/TypedTiddlers","text":"Non wiki-text tiddlers"},"GettingStarted":{"title":"GettingStarted","text":"\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|tc-table-no-border tc-first-col-min-width tc-first-link-nowrap|k\n| <$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link>|<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n| <$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link>|<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|^ <$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link><br><<lingo DefaultTiddlers/TopHint>>|<$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"},"$:/language/Help/build":{"title":"$:/language/Help/build","description":"Automatically run configured commands","text":"Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"},"$:/language/Help/clearpassword":{"title":"$:/language/Help/clearpassword","description":"Clear a password for subsequent crypto operations","text":"Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"},"$:/language/Help/commands":{"title":"$:/language/Help/commands","description":"Run commands returned from a filter","text":"Sequentially run the command tokens returned from a filter\n\n```\n--commands <filter>\n```\n\nExamples\n\n```\n--commands \"[enlist:raw{$:/build-commands-as-text}]\"\n```\n\n```\n--commands \"[{$:/build-commands-as-json}jsonindexes[]] :map[{$:/build-commands-as-json}jsonget<currentTiddler>]\"\n```\n"},"$:/language/Help/default":{"title":"$:/language/Help/default","text":"\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n\\whitespace trim\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>:\n \n<$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"},"$:/language/Help/deletetiddlers":{"title":"$:/language/Help/deletetiddlers","description":"Deletes a group of tiddlers","text":"<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"},"$:/language/Help/editions":{"title":"$:/language/Help/editions","description":"Lists the available editions of TiddlyWiki","text":"Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"},"$:/language/Help/fetch":{"title":"$:/language/Help/fetch","description":"Fetch tiddlers from wiki by URL","text":"Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"},"$:/language/Help/help":{"title":"$:/language/Help/help","description":"Display help for TiddlyWiki commands","text":"Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"},"$:/language/Help/import":{"title":"$:/language/Help/import","description":"Import tiddlers from a file","text":"Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"},"$:/language/Help/init":{"title":"$:/language/Help/init","description":"Initialise a new wiki folder","text":"Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"},"$:/language/Help/listen":{"title":"$:/language/Help/listen","description":"Provides an HTTP server interface to TiddlyWiki","text":"Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of request header to be used for trusted authentication.\n* ''readers'' - comma-separated list of principals allowed to read from this wiki\n* ''writers'' - comma-separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n* ''use-browser-cache'' - set to \"yes\" to allow the browser to cache responses to save bandwidth (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"},"$:/language/Help/load":{"title":"$:/language/Help/load","description":"Load tiddlers from a file","text":"Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"},"$:/language/Help/makelibrary":{"title":"$:/language/Help/makelibrary","description":"Construct library plugin required by upgrade process","text":"Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"},"$:/language/Help/notfound":{"title":"$:/language/Help/notfound","text":"No such help item"},"$:/language/Help/output":{"title":"$:/language/Help/output","description":"Set the base output directory for subsequent commands","text":"Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"},"$:/language/Help/password":{"title":"$:/language/Help/password","description":"Set a password for subsequent crypto operations","text":"Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"},"$:/language/Help/render":{"title":"$:/language/Help/render","description":"Renders individual tiddlers to files","text":"Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [ [<name>] [<value>] ]*\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variables\n* ''value'': Value of optional variables\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets: `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* Multiple ''name''/''value'' pairs can be used to pass more than one variable\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render '[!is[system]]' '[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]'` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n* `--render '.' 'tiddlers.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[HelloThere]]'` -- renders the tiddlers tagged \"HelloThere\" to a JSON file named \"tiddlers.json\"\n"},"$:/language/Help/rendertiddler":{"title":"$:/language/Help/rendertiddler","description":"Render an individual tiddler as a specified ContentType","text":"(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"},"$:/language/Help/rendertiddlers":{"title":"$:/language/Help/rendertiddlers","description":"Render tiddlers matching a filter to a specified ContentType","text":"(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers '<filter>' <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"},"$:/language/Help/save":{"title":"$:/language/Help/save","description":"Saves individual raw tiddlers to files","text":"Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets: `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"},"$:/language/Help/savetiddler":{"title":"$:/language/Help/savetiddler","description":"Saves a raw tiddler to a file","text":"(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"},"$:/language/Help/savetiddlers":{"title":"$:/language/Help/savetiddlers","description":"Saves a group of raw tiddlers to a directory","text":"(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"},"$:/language/Help/savewikifolder":{"title":"$:/language/Help/savewikifolder","description":"Saves a wiki to a new wiki folder","text":"<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>] [ [<name>=<value>] ]*\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nThe following options are supported:\n\n* ''filter'': a filter expression that defines the tiddlers to include in the output.\n* ''explodePlugins'': defaults to \"yes\"\n** ''yes'' will \"explode\" plugins into separate tiddler files and save them to the plugin directory within the wiki folder\n** ''no'' will suppress exploding plugins into their constituent tiddler files. It will save the plugin as a single JSON tiddler in the tiddlers folder\n\nNote that both ''explodePlugins'' options will produce wiki folders that build the exact same original wiki. The difference lies in how plugins are represented in the wiki folder.\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n\nSave the plugin to the tiddlers directory of the target wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder explodePlugins=no\n```\n"},"$:/language/Help/server":{"title":"$:/language/Help/server","description":"(deprecated: see 'listen' command) Provides an HTTP server interface to TiddlyWiki","text":"Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"},"$:/language/Help/setfield":{"title":"$:/language/Help/setfield","description":"Prepares external tiddlers for use","text":"//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"},"$:/language/Help/unpackplugin":{"title":"$:/language/Help/unpackplugin","description":"Unpack the payload tiddlers from a plugin","text":"Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"},"$:/language/Help/verbose":{"title":"$:/language/Help/verbose","description":"Triggers verbose output mode","text":"Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"},"$:/language/Help/version":{"title":"$:/language/Help/version","description":"Displays the version number of TiddlyWiki","text":"Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"},"$:/language/Import/Editor/Import/Heading":{"title":"$:/language/Import/Editor/Import/Heading","text":"Import images and insert them into the editor."},"$:/language/Import/Imported/Hint":{"title":"$:/language/Import/Imported/Hint","text":"The following tiddlers were imported:"},"$:/language/Import/Listing/Cancel/Caption":{"title":"$:/language/Import/Listing/Cancel/Caption","text":"Cancel"},"$:/language/Import/Listing/Cancel/Warning":{"title":"$:/language/Import/Listing/Cancel/Warning","text":"Do you wish to cancel the import?"},"$:/language/Import/Listing/Hint":{"title":"$:/language/Import/Listing/Hint","text":"These tiddlers are ready to import:"},"$:/language/Import/Listing/Import/Caption":{"title":"$:/language/Import/Listing/Import/Caption","text":"Import"},"$:/language/Import/Listing/Select/Caption":{"title":"$:/language/Import/Listing/Select/Caption","text":"Select"},"$:/language/Import/Listing/Status/Caption":{"title":"$:/language/Import/Listing/Status/Caption","text":"Status"},"$:/language/Import/Listing/Title/Caption":{"title":"$:/language/Import/Listing/Title/Caption","text":"Title"},"$:/language/Import/Listing/Preview":{"title":"$:/language/Import/Listing/Preview","text":"Preview:"},"$:/language/Import/Listing/Preview/Text":{"title":"$:/language/Import/Listing/Preview/Text","text":"Text"},"$:/language/Import/Listing/Preview/TextRaw":{"title":"$:/language/Import/Listing/Preview/TextRaw","text":"Text (Raw)"},"$:/language/Import/Listing/Preview/Fields":{"title":"$:/language/Import/Listing/Preview/Fields","text":"Fields"},"$:/language/Import/Listing/Preview/Diff":{"title":"$:/language/Import/Listing/Preview/Diff","text":"Diff"},"$:/language/Import/Listing/Preview/DiffFields":{"title":"$:/language/Import/Listing/Preview/DiffFields","text":"Diff (Fields)"},"$:/language/Import/Listing/Rename/Tooltip":{"title":"$:/language/Import/Listing/Rename/Tooltip","text":"Rename tiddler before importing"},"$:/language/Import/Listing/Rename/Prompt":{"title":"$:/language/Import/Listing/Rename/Prompt","text":"Rename to:"},"$:/language/Import/Listing/Rename/ConfirmRename":{"title":"$:/language/Import/Listing/Rename/ConfirmRename","text":"Rename tiddler"},"$:/language/Import/Listing/Rename/CancelRename":{"title":"$:/language/Import/Listing/Rename/CancelRename","text":"Cancel"},"$:/language/Import/Listing/Rename/OverwriteWarning":{"title":"$:/language/Import/Listing/Rename/OverwriteWarning","text":"A tiddler with this title already exists."},"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible":{"title":"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible","text":"Blocked incompatible or obsolete plugin."},"$:/language/Import/Upgrader/Plugins/Suppressed/Version":{"title":"$:/language/Import/Upgrader/Plugins/Suppressed/Version","text":"Blocked plugin (due to incoming <<incoming>> not being newer than existing <<existing>>)."},"$:/language/Import/Upgrader/Plugins/Upgraded":{"title":"$:/language/Import/Upgrader/Plugins/Upgraded","text":"Upgraded plugin from <<incoming>> to <<upgraded>>."},"$:/language/Import/Upgrader/State/Suppressed":{"title":"$:/language/Import/Upgrader/State/Suppressed","text":"Blocked temporary state tiddler."},"$:/language/Import/Upgrader/System/Disabled":{"title":"$:/language/Import/Upgrader/System/Disabled","text":"Disabled system tiddler."},"$:/language/Import/Upgrader/System/Suppressed":{"title":"$:/language/Import/Upgrader/System/Suppressed","text":"Blocked system tiddler."},"$:/language/Import/Upgrader/System/Warning":{"title":"$:/language/Import/Upgrader/System/Warning","text":"Core module tiddler."},"$:/language/Import/Upgrader/System/Alert":{"title":"$:/language/Import/Upgrader/System/Alert","text":"You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable."},"$:/language/Import/Upgrader/ThemeTweaks/Created":{"title":"$:/language/Import/Upgrader/ThemeTweaks/Created","text":"Migrated theme tweak from <$text text=<<from>>/>."},"$:/language/Import/Upgrader/Tiddler/Disabled":{"title":"$:/language/Import/Upgrader/Tiddler/Disabled","text":"Disabled tiddler."},"$:/language/Import/Upgrader/Tiddler/Selected":{"title":"$:/language/Import/Upgrader/Tiddler/Selected","text":"Selected tiddler."},"$:/language/Import/Upgrader/Tiddler/Unselected":{"title":"$:/language/Import/Upgrader/Tiddler/Unselected","text":"Unselected tiddler."},"$:/language/AboveStory/ClassicPlugin/Warning":{"title":"$:/language/AboveStory/ClassicPlugin/Warning","text":"It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"},"$:/language/BinaryWarning/Prompt":{"title":"$:/language/BinaryWarning/Prompt","text":"This tiddler contains binary data"},"$:/language/ClassicWarning/Hint":{"title":"$:/language/ClassicWarning/Hint","text":"This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."},"$:/language/ClassicWarning/Upgrade/Caption":{"title":"$:/language/ClassicWarning/Upgrade/Caption","text":"upgrade"},"$:/language/CloseAll/Button":{"title":"$:/language/CloseAll/Button","text":"close all"},"$:/language/ColourPicker/Recent":{"title":"$:/language/ColourPicker/Recent","text":"Recent:"},"$:/language/ConfirmCancelTiddler":{"title":"$:/language/ConfirmCancelTiddler","text":"Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"},"$:/language/ConfirmDeleteTiddler":{"title":"$:/language/ConfirmDeleteTiddler","text":"Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"},"$:/language/ConfirmDeleteTiddlers":{"title":"$:/language/ConfirmDeleteTiddlers","text":"Are you sure you wish to delete <<resultCount>> tiddler(s)?"},"$:/language/ConfirmOverwriteTiddler":{"title":"$:/language/ConfirmOverwriteTiddler","text":"Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"},"$:/language/ConfirmEditShadowTiddler":{"title":"$:/language/ConfirmEditShadowTiddler","text":"You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"},"$:/language/ConfirmAction":{"title":"$:/language/ConfirmAction","text":"Do you wish to proceed?"},"$:/language/Count":{"title":"$:/language/Count","text":"count"},"$:/language/DefaultNewTiddlerTitle":{"title":"$:/language/DefaultNewTiddlerTitle","text":"New Tiddler"},"$:/language/Diffs/CountMessage":{"title":"$:/language/Diffs/CountMessage","text":"<<diff-count>> differences"},"$:/language/DropMessage":{"title":"$:/language/DropMessage","text":"Drop now (or use the 'Escape' key to cancel)"},"$:/language/Encryption/Cancel":{"title":"$:/language/Encryption/Cancel","text":"Cancel"},"$:/language/Encryption/ConfirmClearPassword":{"title":"$:/language/Encryption/ConfirmClearPassword","text":"Do you wish to clear the password? This will remove the encryption applied when saving this wiki"},"$:/language/Encryption/PromptSetPassword":{"title":"$:/language/Encryption/PromptSetPassword","text":"Set a new password for this TiddlyWiki"},"$:/language/Encryption/Username":{"title":"$:/language/Encryption/Username","text":"Username"},"$:/language/Encryption/Password":{"title":"$:/language/Encryption/Password","text":"Password"},"$:/language/Encryption/RepeatPassword":{"title":"$:/language/Encryption/RepeatPassword","text":"Repeat password"},"$:/language/Encryption/PasswordNoMatch":{"title":"$:/language/Encryption/PasswordNoMatch","text":"Passwords do not match"},"$:/language/Encryption/SetPassword":{"title":"$:/language/Encryption/SetPassword","text":"Set password"},"$:/language/Error/Caption":{"title":"$:/language/Error/Caption","text":"Error"},"$:/language/Error/DeserializeOperator/MissingOperand":{"title":"$:/language/Error/DeserializeOperator/MissingOperand","text":"Filter Error: Missing operand for 'deserialize' operator"},"$:/language/Error/DeserializeOperator/UnknownDeserializer":{"title":"$:/language/Error/DeserializeOperator/UnknownDeserializer","text":"Filter Error: Unknown deserializer provided as operand for the 'deserialize' operator"},"$:/language/Error/Filter":{"title":"$:/language/Error/Filter","text":"Filter error"},"$:/language/Error/FilterSyntax":{"title":"$:/language/Error/FilterSyntax","text":"Syntax error in filter expression"},"$:/language/Error/FilterRunPrefix":{"title":"$:/language/Error/FilterRunPrefix","text":"Filter Error: Unknown prefix for filter run"},"$:/language/Error/IsFilterOperator":{"title":"$:/language/Error/IsFilterOperator","text":"Filter Error: Unknown parameter for the 'is' filter operator"},"$:/language/Error/FormatFilterOperator":{"title":"$:/language/Error/FormatFilterOperator","text":"Filter Error: Unknown suffix for the 'format' filter operator"},"$:/language/Error/LoadingPluginLibrary":{"title":"$:/language/Error/LoadingPluginLibrary","text":"Error loading plugin library"},"$:/language/Error/NetworkErrorAlert":{"title":"$:/language/Error/NetworkErrorAlert","text":"`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"},"$:/language/Error/PutEditConflict":{"title":"$:/language/Error/PutEditConflict","text":"File changed on server"},"$:/language/Error/PutForbidden":{"title":"$:/language/Error/PutForbidden","text":"Permission denied"},"$:/language/Error/PutUnauthorized":{"title":"$:/language/Error/PutUnauthorized","text":"Authentication required"},"$:/language/Error/RecursiveTransclusion":{"title":"$:/language/Error/RecursiveTransclusion","text":"Recursive transclusion error in transclude widget"},"$:/language/Error/RetrievingSkinny":{"title":"$:/language/Error/RetrievingSkinny","text":"Error retrieving skinny tiddler list"},"$:/language/Error/SavingToTWEdit":{"title":"$:/language/Error/SavingToTWEdit","text":"Error saving to TWEdit"},"$:/language/Error/WhileSaving":{"title":"$:/language/Error/WhileSaving","text":"Error while saving"},"$:/language/Error/XMLHttpRequest":{"title":"$:/language/Error/XMLHttpRequest","text":"XMLHttpRequest error code"},"$:/language/Error/ZoominTextNode":{"title":"$:/language/Error/ZoominTextNode","text":"Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue:"},"$:/language/InternalJavaScriptError/Title":{"title":"$:/language/InternalJavaScriptError/Title","text":"Internal JavaScript Error"},"$:/language/InternalJavaScriptError/Hint":{"title":"$:/language/InternalJavaScriptError/Hint","text":"Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"},"$:/language/LayoutSwitcher/Description":{"title":"$:/language/LayoutSwitcher/Description","text":"Open the layout switcher"},"$:/language/LazyLoadingWarning":{"title":"$:/language/LazyLoadingWarning","text":"<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"},"$:/language/LoginToTiddlySpace":{"title":"$:/language/LoginToTiddlySpace","text":"Login to TiddlySpace"},"$:/language/Manager/Controls/FilterByTag/None":{"title":"$:/language/Manager/Controls/FilterByTag/None","text":"(none)"},"$:/language/Manager/Controls/FilterByTag/Prompt":{"title":"$:/language/Manager/Controls/FilterByTag/Prompt","text":"Filter by tag:"},"$:/language/Manager/Controls/Order/Prompt":{"title":"$:/language/Manager/Controls/Order/Prompt","text":"Reverse order"},"$:/language/Manager/Controls/Search/Placeholder":{"title":"$:/language/Manager/Controls/Search/Placeholder","text":"Search"},"$:/language/Manager/Controls/Search/Prompt":{"title":"$:/language/Manager/Controls/Search/Prompt","text":"Search:"},"$:/language/Manager/Controls/Show/Option/Tags":{"title":"$:/language/Manager/Controls/Show/Option/Tags","text":"tags"},"$:/language/Manager/Controls/Show/Option/Tiddlers":{"title":"$:/language/Manager/Controls/Show/Option/Tiddlers","text":"tiddlers"},"$:/language/Manager/Controls/Show/Prompt":{"title":"$:/language/Manager/Controls/Show/Prompt","text":"Show:"},"$:/language/Manager/Controls/Sort/Prompt":{"title":"$:/language/Manager/Controls/Sort/Prompt","text":"Sort by:"},"$:/language/Manager/Item/Colour":{"title":"$:/language/Manager/Item/Colour","text":"Colour"},"$:/language/Manager/Item/Fields":{"title":"$:/language/Manager/Item/Fields","text":"Fields"},"$:/language/Manager/Item/Icon/None":{"title":"$:/language/Manager/Item/Icon/None","text":"(none)"},"$:/language/Manager/Item/Icon":{"title":"$:/language/Manager/Item/Icon","text":"Icon"},"$:/language/Manager/Item/RawText":{"title":"$:/language/Manager/Item/RawText","text":"Raw text"},"$:/language/Manager/Item/Tags":{"title":"$:/language/Manager/Item/Tags","text":"Tags"},"$:/language/Manager/Item/Tools":{"title":"$:/language/Manager/Item/Tools","text":"Tools"},"$:/language/Manager/Item/WikifiedText":{"title":"$:/language/Manager/Item/WikifiedText","text":"Wikified text"},"$:/language/MissingTiddler/Hint":{"title":"$:/language/MissingTiddler/Hint","text":"Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"},"$:/language/No":{"title":"$:/language/No","text":"No"},"$:/language/OfficialPluginLibrary":{"title":"$:/language/OfficialPluginLibrary","text":"Official ~TiddlyWiki Plugin Library"},"$:/language/OfficialPluginLibrary/Hint":{"title":"$:/language/OfficialPluginLibrary/Hint","text":"The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."},"$:/language/PageTemplate/Description":{"title":"$:/language/PageTemplate/Description","text":"the default ~TiddlyWiki layout"},"$:/language/PageTemplate/Name":{"title":"$:/language/PageTemplate/Name","text":"Default ~PageTemplate"},"$:/language/PluginReloadWarning":{"title":"$:/language/PluginReloadWarning","text":"Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"},"$:/language/RecentChanges/DateFormat":{"title":"$:/language/RecentChanges/DateFormat","text":"DDth MMM YYYY"},"$:/language/Shortcuts/Input/AdvancedSearch/Hint":{"title":"$:/language/Shortcuts/Input/AdvancedSearch/Hint","text":"Open the ~AdvancedSearch panel from within the sidebar search field"},"$:/language/Shortcuts/Input/Accept/Hint":{"title":"$:/language/Shortcuts/Input/Accept/Hint","text":"Accept the selected item"},"$:/language/Shortcuts/Input/AcceptVariant/Hint":{"title":"$:/language/Shortcuts/Input/AcceptVariant/Hint","text":"Accept the selected item (variant)"},"$:/language/Shortcuts/Input/Cancel/Hint":{"title":"$:/language/Shortcuts/Input/Cancel/Hint","text":"Clear the input field"},"$:/language/Shortcuts/Input/Down/Hint":{"title":"$:/language/Shortcuts/Input/Down/Hint","text":"Select the next item"},"$:/language/Shortcuts/Input/Tab-Left/Hint":{"title":"$:/language/Shortcuts/Input/Tab-Left/Hint","text":"Select the previous Tab"},"$:/language/Shortcuts/Input/Tab-Right/Hint":{"title":"$:/language/Shortcuts/Input/Tab-Right/Hint","text":"Select the next Tab"},"$:/language/Shortcuts/Input/Up/Hint":{"title":"$:/language/Shortcuts/Input/Up/Hint","text":"Select the previous item"},"$:/language/Shortcuts/SidebarLayout/Hint":{"title":"$:/language/Shortcuts/SidebarLayout/Hint","text":"Change the sidebar layout"},"$:/language/Switcher/Subtitle/theme":{"title":"$:/language/Switcher/Subtitle/theme","text":"Switch Theme"},"$:/language/Switcher/Subtitle/layout":{"title":"$:/language/Switcher/Subtitle/layout","text":"Switch Layout"},"$:/language/Switcher/Subtitle/language":{"title":"$:/language/Switcher/Subtitle/language","text":"Switch Language"},"$:/language/Switcher/Subtitle/palette":{"title":"$:/language/Switcher/Subtitle/palette","text":"Switch Palette"},"$:/language/SystemTiddler/Tooltip":{"title":"$:/language/SystemTiddler/Tooltip","text":"This is a system tiddler"},"$:/language/SystemTiddlers/Include/Prompt":{"title":"$:/language/SystemTiddlers/Include/Prompt","text":"Include system tiddlers"},"$:/language/TagManager/Colour/Heading":{"title":"$:/language/TagManager/Colour/Heading","text":"Colour"},"$:/language/TagManager/Count/Heading":{"title":"$:/language/TagManager/Count/Heading","text":"Count"},"$:/language/TagManager/Icon/Heading":{"title":"$:/language/TagManager/Icon/Heading","text":"Icon"},"$:/language/TagManager/Icons/None":{"title":"$:/language/TagManager/Icons/None","text":"None"},"$:/language/TagManager/Info/Heading":{"title":"$:/language/TagManager/Info/Heading","text":"Info"},"$:/language/TagManager/Tag/Heading":{"title":"$:/language/TagManager/Tag/Heading","text":"Tag"},"$:/language/Tiddler/DateFormat":{"title":"$:/language/Tiddler/DateFormat","text":"DDth MMM YYYY at hh12:0mmam"},"$:/language/UnsavedChangesWarning":{"title":"$:/language/UnsavedChangesWarning","text":"You have unsaved changes in TiddlyWiki"},"$:/language/Yes":{"title":"$:/language/Yes","text":"Yes"},"$:/language/Modals/Download":{"title":"$:/language/Modals/Download","subtitle":"Download changes","footer":"<$button message=\"tm-close-tiddler\">Close</$button>","help":"https://tiddlywiki.com/static/DownloadingChanges.html","text":"Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"},"$:/config/NewJournal/Title":{"title":"$:/config/NewJournal/Title","text":"DDth MMM YYYY"},"$:/config/NewJournal/Text":{"title":"$:/config/NewJournal/Text","text":""},"$:/config/NewJournal/Tags":{"title":"$:/config/NewJournal/Tags","text":"Journal\n"},"$:/language/Notifications/Save/Done":{"title":"$:/language/Notifications/Save/Done","text":"Saved wiki"},"$:/language/Notifications/Save/Starting":{"title":"$:/language/Notifications/Save/Starting","text":"Starting to save wiki"},"$:/language/Notifications/CopiedToClipboard/Succeeded":{"title":"$:/language/Notifications/CopiedToClipboard/Succeeded","text":"Copied to clipboard!"},"$:/language/Notifications/CopiedToClipboard/Failed":{"title":"$:/language/Notifications/CopiedToClipboard/Failed","text":"Failed to copy to clipboard!"},"$:/language/Search/DefaultResults/Caption":{"title":"$:/language/Search/DefaultResults/Caption","text":"List"},"$:/language/Search/Filter/Caption":{"title":"$:/language/Search/Filter/Caption","text":"Filter"},"$:/language/Search/Filter/Hint":{"title":"$:/language/Search/Filter/Hint","text":"Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"},"$:/language/Search/Filter/Matches":{"title":"$:/language/Search/Filter/Matches","text":"//<small><<resultCount>> matches</small>//"},"$:/language/Search/Matches":{"title":"$:/language/Search/Matches","text":"//<small><<resultCount>> matches</small>//"},"$:/language/Search/Matches/All":{"title":"$:/language/Search/Matches/All","text":"All matches:"},"$:/language/Search/Matches/Title":{"title":"$:/language/Search/Matches/Title","text":"Title matches:"},"$:/language/Search/Search":{"title":"$:/language/Search/Search","text":"Search"},"$:/language/Search/Search/TooShort":{"title":"$:/language/Search/Search/TooShort","text":"Search text too short"},"$:/language/Search/Shadows/Caption":{"title":"$:/language/Search/Shadows/Caption","text":"Shadows"},"$:/language/Search/Shadows/Hint":{"title":"$:/language/Search/Shadows/Hint","text":"Search for shadow tiddlers"},"$:/language/Search/Shadows/Matches":{"title":"$:/language/Search/Shadows/Matches","text":"//<small><<resultCount>> matches</small>//"},"$:/language/Search/Standard/Caption":{"title":"$:/language/Search/Standard/Caption","text":"Standard"},"$:/language/Search/Standard/Hint":{"title":"$:/language/Search/Standard/Hint","text":"Search for standard tiddlers"},"$:/language/Search/Standard/Matches":{"title":"$:/language/Search/Standard/Matches","text":"//<small><<resultCount>> matches</small>//"},"$:/language/Search/System/Caption":{"title":"$:/language/Search/System/Caption","text":"System"},"$:/language/Search/System/Hint":{"title":"$:/language/Search/System/Hint","text":"Search for system tiddlers"},"$:/language/Search/System/Matches":{"title":"$:/language/Search/System/Matches","text":"//<small><<resultCount>> matches</small>//"},"$:/language/SideBar/Caption":{"title":"$:/language/SideBar/Caption","text":"Sidebar"},"$:/language/SideBar/All/Caption":{"title":"$:/language/SideBar/All/Caption","text":"All"},"$:/language/SideBar/Contents/Caption":{"title":"$:/language/SideBar/Contents/Caption","text":"Contents"},"$:/language/SideBar/Drafts/Caption":{"title":"$:/language/SideBar/Drafts/Caption","text":"Drafts"},"$:/language/SideBar/Explorer/Caption":{"title":"$:/language/SideBar/Explorer/Caption","text":"Explorer"},"$:/language/SideBar/Missing/Caption":{"title":"$:/language/SideBar/Missing/Caption","text":"Missing"},"$:/language/SideBar/More/Caption":{"title":"$:/language/SideBar/More/Caption","text":"More"},"$:/language/SideBar/Open/Caption":{"title":"$:/language/SideBar/Open/Caption","text":"Open"},"$:/language/SideBar/Orphans/Caption":{"title":"$:/language/SideBar/Orphans/Caption","text":"Orphans"},"$:/language/SideBar/Recent/Caption":{"title":"$:/language/SideBar/Recent/Caption","text":"Recent"},"$:/language/SideBar/Shadows/Caption":{"title":"$:/language/SideBar/Shadows/Caption","text":"Shadows"},"$:/language/SideBar/System/Caption":{"title":"$:/language/SideBar/System/Caption","text":"System"},"$:/language/SideBar/Tags/Caption":{"title":"$:/language/SideBar/Tags/Caption","text":"Tags"},"$:/language/SideBar/Tags/Untagged/Caption":{"title":"$:/language/SideBar/Tags/Untagged/Caption","text":"untagged"},"$:/language/SideBar/Tools/Caption":{"title":"$:/language/SideBar/Tools/Caption","text":"Tools"},"$:/language/SideBar/Types/Caption":{"title":"$:/language/SideBar/Types/Caption","text":"Types"},"$:/SiteSubtitle":{"title":"$:/SiteSubtitle","text":"a non-linear personal web notebook"},"$:/SiteTitle":{"title":"$:/SiteTitle","text":"My TiddlyWiki"},"$:/language/Snippets/ListByTag":{"title":"$:/language/Snippets/ListByTag","tags":"$:/tags/TextEditor/Snippet","caption":"List of tiddlers by tag","text":"<<list-links \"[tag[task]sort[title]]\">>\n"},"$:/language/Snippets/MacroDefinition":{"title":"$:/language/Snippets/MacroDefinition","tags":"$:/tags/TextEditor/Snippet","caption":"Macro definition","text":"\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"},"$:/language/Snippets/Table4x3":{"title":"$:/language/Snippets/Table4x3","tags":"$:/tags/TextEditor/Snippet","caption":"Table with 4 columns by 3 rows","text":"|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"},"$:/language/Snippets/TableOfContents":{"title":"$:/language/Snippets/TableOfContents","tags":"$:/tags/TextEditor/Snippet","caption":"Table of Contents","text":"<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"},"$:/language/ThemeTweaks/ThemeTweaks":{"title":"$:/language/ThemeTweaks/ThemeTweaks","text":"Theme Tweaks"},"$:/language/ThemeTweaks/ThemeTweaks/Hint":{"title":"$:/language/ThemeTweaks/ThemeTweaks/Hint","text":"You can tweak certain aspects of the ''Vanilla'' theme."},"$:/language/ThemeTweaks/Options":{"title":"$:/language/ThemeTweaks/Options","text":"Options"},"$:/language/ThemeTweaks/Options/SidebarLayout":{"title":"$:/language/ThemeTweaks/Options/SidebarLayout","text":"Sidebar layout"},"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid":{"title":"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid","text":"Fixed story, fluid sidebar"},"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed":{"title":"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed","text":"Fluid story, fixed sidebar"},"$:/language/ThemeTweaks/Options/StickyTitles":{"title":"$:/language/ThemeTweaks/Options/StickyTitles","text":"Sticky titles"},"$:/language/ThemeTweaks/Options/StickyTitles/Hint":{"title":"$:/language/ThemeTweaks/Options/StickyTitles/Hint","text":"Causes tiddler titles to \"stick\" to the top of the browser window"},"$:/language/ThemeTweaks/Options/CodeWrapping":{"title":"$:/language/ThemeTweaks/Options/CodeWrapping","text":"Wrap long lines in code blocks"},"$:/language/ThemeTweaks/Settings":{"title":"$:/language/ThemeTweaks/Settings","text":"Settings"},"$:/language/ThemeTweaks/Settings/FontFamily":{"title":"$:/language/ThemeTweaks/Settings/FontFamily","text":"Font family"},"$:/language/ThemeTweaks/Settings/CodeFontFamily":{"title":"$:/language/ThemeTweaks/Settings/CodeFontFamily","text":"Code font family"},"$:/language/ThemeTweaks/Settings/EditorFontFamily":{"title":"$:/language/ThemeTweaks/Settings/EditorFontFamily","text":"Editor font family"},"$:/language/ThemeTweaks/Settings/BackgroundImage":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImage","text":"Page background image"},"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment","text":"Page background image attachment"},"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll","text":"Scroll with tiddlers"},"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed","text":"Fixed to window"},"$:/language/ThemeTweaks/Settings/BackgroundImageSize":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImageSize","text":"Page background image size"},"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto","text":"Auto"},"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover","text":"Cover"},"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain":{"title":"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain","text":"Contain"},"$:/language/ThemeTweaks/Metrics":{"title":"$:/language/ThemeTweaks/Metrics","text":"Sizes"},"$:/language/ThemeTweaks/Metrics/FontSize":{"title":"$:/language/ThemeTweaks/Metrics/FontSize","text":"Font size"},"$:/language/ThemeTweaks/Metrics/LineHeight":{"title":"$:/language/ThemeTweaks/Metrics/LineHeight","text":"Line height"},"$:/language/ThemeTweaks/Metrics/BodyFontSize":{"title":"$:/language/ThemeTweaks/Metrics/BodyFontSize","text":"Font size for tiddler body"},"$:/language/ThemeTweaks/Metrics/BodyLineHeight":{"title":"$:/language/ThemeTweaks/Metrics/BodyLineHeight","text":"Line height for tiddler body"},"$:/language/ThemeTweaks/Metrics/StoryLeft":{"title":"$:/language/ThemeTweaks/Metrics/StoryLeft","text":"Story left position"},"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint":{"title":"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint","text":"how far the left margin of the story river<br>(tiddler area) is from the left of the page"},"$:/language/ThemeTweaks/Metrics/StoryTop":{"title":"$:/language/ThemeTweaks/Metrics/StoryTop","text":"Story top position"},"$:/language/ThemeTweaks/Metrics/StoryTop/Hint":{"title":"$:/language/ThemeTweaks/Metrics/StoryTop/Hint","text":"how far the top margin of the story river<br>is from the top of the page"},"$:/language/ThemeTweaks/Metrics/StoryRight":{"title":"$:/language/ThemeTweaks/Metrics/StoryRight","text":"Story right"},"$:/language/ThemeTweaks/Metrics/StoryRight/Hint":{"title":"$:/language/ThemeTweaks/Metrics/StoryRight/Hint","text":"how far the left margin of the sidebar <br>is from the left of the page"},"$:/language/ThemeTweaks/Metrics/StoryWidth":{"title":"$:/language/ThemeTweaks/Metrics/StoryWidth","text":"Story width"},"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint":{"title":"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint","text":"the overall width of the story river"},"$:/language/ThemeTweaks/Metrics/TiddlerWidth":{"title":"$:/language/ThemeTweaks/Metrics/TiddlerWidth","text":"Tiddler width"},"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint":{"title":"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint","text":"within the story river"},"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint":{"title":"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint","text":"Sidebar breakpoint"},"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint":{"title":"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint","text":"the minimum page width at which the story<br>river and sidebar will appear side by side"},"$:/language/ThemeTweaks/Metrics/SidebarWidth":{"title":"$:/language/ThemeTweaks/Metrics/SidebarWidth","text":"Sidebar width"},"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint":{"title":"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint","text":"the width of the sidebar in fluid-fixed layout"},"$:/language/TiddlerInfo/Advanced/Caption":{"title":"$:/language/TiddlerInfo/Advanced/Caption","text":"Advanced"},"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint":{"title":"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint","text":"none"},"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading":{"title":"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading","text":"Plugin Details"},"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint":{"title":"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint","text":"This plugin contains the following shadow tiddlers:"},"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading":{"title":"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading","text":"Shadow Status"},"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint":{"title":"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint","text":"The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"},"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint":{"title":"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint","text":"The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"},"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source":{"title":"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source","text":"It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"},"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint":{"title":"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint","text":"It is overridden by an ordinary tiddler"},"$:/language/TiddlerInfo/Fields/Caption":{"title":"$:/language/TiddlerInfo/Fields/Caption","text":"Fields"},"$:/language/TiddlerInfo/List/Caption":{"title":"$:/language/TiddlerInfo/List/Caption","text":"List"},"$:/language/TiddlerInfo/List/Empty":{"title":"$:/language/TiddlerInfo/List/Empty","text":"This tiddler does not have a list"},"$:/language/TiddlerInfo/Listed/Caption":{"title":"$:/language/TiddlerInfo/Listed/Caption","text":"Listed"},"$:/language/TiddlerInfo/Listed/Empty":{"title":"$:/language/TiddlerInfo/Listed/Empty","text":"This tiddler is not listed by any others"},"$:/language/TiddlerInfo/References/Caption":{"title":"$:/language/TiddlerInfo/References/Caption","text":"Backlinks"},"$:/language/TiddlerInfo/References/Empty":{"title":"$:/language/TiddlerInfo/References/Empty","text":"No tiddlers link to this one"},"$:/language/TiddlerInfo/Tagging/Caption":{"title":"$:/language/TiddlerInfo/Tagging/Caption","text":"Tagging"},"$:/language/TiddlerInfo/Tagging/Empty":{"title":"$:/language/TiddlerInfo/Tagging/Empty","text":"No tiddlers are tagged with this one"},"$:/language/TiddlerInfo/Tools/Caption":{"title":"$:/language/TiddlerInfo/Tools/Caption","text":"Tools"},"$:/language/Docs/Types/application/javascript":{"title":"$:/language/Docs/Types/application/javascript","description":"JavaScript code","name":"application/javascript","group":"Developer","group-sort":"2"},"$:/language/Docs/Types/application/json":{"title":"$:/language/Docs/Types/application/json","description":"JSON data","name":"application/json","group":"Developer","group-sort":"2"},"$:/language/Docs/Types/application/x-tiddler-dictionary":{"title":"$:/language/Docs/Types/application/x-tiddler-dictionary","description":"Data dictionary","name":"application/x-tiddler-dictionary","group":"Developer","group-sort":"2"},"$:/language/Docs/Types/image/gif":{"title":"$:/language/Docs/Types/image/gif","description":"GIF image","name":"image/gif","group":"Image","group-sort":"1"},"$:/language/Docs/Types/image/jpeg":{"title":"$:/language/Docs/Types/image/jpeg","description":"JPEG image","name":"image/jpeg","group":"Image","group-sort":"1"},"$:/language/Docs/Types/image/png":{"title":"$:/language/Docs/Types/image/png","description":"PNG image","name":"image/png","group":"Image","group-sort":"1"},"$:/language/Docs/Types/image/svg+xml":{"title":"$:/language/Docs/Types/image/svg+xml","description":"SVG image","name":"image/svg+xml","group":"Image","group-sort":"1"},"$:/language/Docs/Types/image/x-icon":{"title":"$:/language/Docs/Types/image/x-icon","description":"ICO icon","name":"image/x-icon","group":"Image","group-sort":"1"},"$:/language/Docs/Types/text/css":{"title":"$:/language/Docs/Types/text/css","description":"Static stylesheet","name":"text/css","group":"Developer","group-sort":"2"},"$:/language/Docs/Types/text/html":{"title":"$:/language/Docs/Types/text/html","description":"HTML markup","name":"text/html","group":"Text","group-sort":"0"},"$:/language/Docs/Types/text/plain":{"title":"$:/language/Docs/Types/text/plain","description":"Plain text","name":"text/plain","group":"Text","group-sort":"0"},"$:/language/Docs/Types/text/vnd.tiddlywiki":{"title":"$:/language/Docs/Types/text/vnd.tiddlywiki","description":"TiddlyWiki 5","name":"text/vnd.tiddlywiki","group":"Text","group-sort":"0"},"$:/language/Docs/Types/text/x-tiddlywiki":{"title":"$:/language/Docs/Types/text/x-tiddlywiki","description":"TiddlyWiki Classic","name":"text/x-tiddlywiki","group":"Text","group-sort":"0"},"$:/languages/en-GB/icon":{"title":"$:/languages/en-GB/icon","type":"image/svg+xml","text":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"},"$:/languages/en-GB":{"title":"$:/languages/en-GB","name":"en-GB","description":"English (British)","author":"JeremyRuston","core-version":">=5.0.0\"","text":"Stub pseudo-plugin for the default language"},"$:/core/modules/commander.js":{"title":"$:/core/modules/commander.js","text":"/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n","type":"application/javascript","module-type":"global"},"$:/core/modules/commands/build.js":{"title":"$:/core/modules/commands/build.js","text":"/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/clearpassword.js":{"title":"$:/core/modules/commands/clearpassword.js","text":"/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/commands.js":{"title":"$:/core/modules/commands/commands.js","text":"/*\\\ntitle: $:/core/modules/commands/commands.js\ntype: application/javascript\nmodule-type: command\n\nRuns the commands returned from a filter\n\n\\*/\n\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"commands\",\n\tsynchronous: true\n};\n\nvar Command = function(params, commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Parse the filter\n\tvar filter = this.params[0];\n\tif(!filter) {\n\t\treturn \"No filter specified\";\n\t}\n\tvar commands = this.commander.wiki.filterTiddlers(filter)\n\tif(commands.length === 0) {\n\t\treturn \"No tiddlers found for filter '\" + filter + \"'\";\n\t}\n\tthis.commander.addCommandTokens(commands);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/deletetiddlers.js":{"title":"$:/core/modules/commands/deletetiddlers.js","text":"/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/editions.js":{"title":"$:/core/modules/commands/editions.js","text":"/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/fetch.js":{"title":"$:/core/modules/commands/fetch.js","text":"/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = this.commander.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/help.js":{"title":"$:/core/modules/commands/help.js","text":"/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/import.js":{"title":"$:/core/modules/commands/import.js","text":"/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/init.js":{"title":"$:/core/modules/commands/init.js","text":"/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = $tw.utils.parseJSONSafe(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/listen.js":{"title":"$:/core/modules/commands/listen.js","text":"/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: []\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/load.js":{"title":"$:/core/modules/commands/load.js","text":"/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/makelibrary.js":{"title":"$:/core/modules/commands/makelibrary.js","text":"/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/output.js":{"title":"$:/core/modules/commands/output.js","text":"/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/password.js":{"title":"$:/core/modules/commands/password.js","text":"/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/render.js":{"title":"$:/core/modules/commands/render.js","text":"/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\t\n\tvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\t\n\texports.info = {\n\t\tname: \"render\",\n\t\tsynchronous: true\n\t};\n\t\n\tvar Command = function(params,commander,callback) {\n\t\tthis.params = params;\n\t\tthis.commander = commander;\n\t\tthis.callback = callback;\n\t};\n\t\n\tCommand.prototype.execute = function() {\n\t\tif(this.params.length < 1) {\n\t\t\treturn \"Missing tiddler filter\";\n\t\t}\n\t\tvar self = this,\n\t\t\tfs = require(\"fs\"),\n\t\t\tpath = require(\"path\"),\n\t\t\twiki = this.commander.wiki,\n\t\t\ttiddlerFilter = this.params[0],\n\t\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\t\ttype = this.params[2] || \"text/html\",\n\t\t\ttemplate = this.params[3],\n\t\t\tvariableList = this.params.slice(4),\n\t\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter),\n\t\t\tvariables = Object.create(null);\n\t\t\twhile(variableList.length >= 2) {\n\t\t\t\tvariables[variableList[0]] = variableList[1];\n\t\t\t\tvariableList = variableList.slice(2);\n\t\t\t}\n\t\t$tw.utils.each(tiddlers,function(title) {\n\t\t\tvar filepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\t\tif(self.commander.verbose) {\n\t\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t\t}\n\t\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\t\twidgetNode = wiki.makeWidget(parser,{variables: $tw.utils.extend({},variables,{currentTiddler: title,storyTiddler: title})}),\n\t\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t\t$tw.utils.createFileDirectories(filepath);\n\t\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t\t});\n\t\treturn null;\n\t};\n\t\n\texports.Command = Command;\n\t\n\t})();\n\t","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/rendertiddler.js":{"title":"$:/core/modules/commands/rendertiddler.js","text":"/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\tvariables.storyTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/rendertiddlers.js":{"title":"$:/core/modules/commands/rendertiddlers.js","text":"/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title, storyTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,$tw.utils.encodeURIComponentExtended(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/save.js":{"title":"$:/core/modules/commands/save.js","text":"/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\t\n\texports.info = {\n\t\tname: \"save\",\n\t\tsynchronous: true\n\t};\n\t\n\tvar Command = function(params,commander,callback) {\n\t\tthis.params = params;\n\t\tthis.commander = commander;\n\t\tthis.callback = callback;\n\t};\n\t\n\tCommand.prototype.execute = function() {\n\t\tif(this.params.length < 1) {\n\t\t\treturn \"Missing filename filter\";\n\t\t}\n\t\tvar self = this,\n\t\t\tfs = require(\"fs\"),\n\t\t\tpath = require(\"path\"),\n\t\t\tresult = null,\n\t\t\twiki = this.commander.wiki,\n\t\t\ttiddlerFilter = this.params[0],\n\t\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t\t$tw.utils.each(tiddlers,function(title) {\n\t\t\tif(!result) {\n\t\t\t\tvar tiddler = self.commander.wiki.getTiddler(title);\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\t\t\t\t\tdirectory: path.resolve(self.commander.outputPath),\n\t\t\t\t\t\tpathFilters: [filenameFilter],\n\t\t\t\t\t\twiki: wiki,\n\t\t\t\t\t\tfileInfo: {\n\t\t\t\t\t\t\toverwrite: true\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif(self.commander.verbose) {\n\t\t\t\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + fileInfo.filepath + \"\\\"\");\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tresult = \"Error saving tiddler \\\"\" + title + \"\\\", to file: \\\"\" + fileInfo.filepath + \"\\\"\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult = \"Tiddler '\" + title + \"' not found\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn result;\n\t};\n\t\n\texports.Command = Command;\n\t\n\t})();\n\t","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/savelibrarytiddlers.js":{"title":"$:/core/modules/commands/savelibrarytiddlers.js","text":"/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <tiddler-filter> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe tiddler filter specifies the plugins to be included.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + $tw.utils.encodeURIComponentExtended(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = $tw.utils.parseJSONSafe(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!self.commander.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/savetiddler.js":{"title":"$:/core/modules/commands/savetiddler.js","text":"/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/savetiddlers.js":{"title":"$:/core/modules/commands/savetiddlers.js","text":"/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,$tw.utils.encodeURIComponentExtended(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text || \"\",contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n","type":"application/javascript","module-type":"command"},"$:/core/modules/commands/savewikifolder.js":{"title":"$:/core/modules/commands/savewikifolder.js","text":"/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [ [<name>=<value>] ]*\n\nThe following options are supported:\n\n* ''filter'': a filter expression defining the tiddlers to be included in the output\n* ''explodePlugins'': set to \"no\" to suppress exploding plugins into their constituent shadow tiddlers (defaults to \"yes\")\n\nSupports backward compatibility with --savewikifolder <wikifolderpath> [<filter>] [ [<name>=<value>] ]*\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar regFilter = /^[a-zA-Z0-9\\.\\-_]+=/g, // dynamic parameters\n\t\tnamedParames,\n\t\ttiddlerFilter,\n\t\toptions = {};\n\tif (regFilter.test(this.params[1])) { \n\t\tnamedParames = this.commander.extractNamedParameters(this.params.slice(1));\n\t\ttiddlerFilter = namedParames.filter || \"[all[tiddlers]]\";\n\t} else {\n\t\tnamedParames = this.commander.extractNamedParameters(this.params.slice(2));\n\t\ttiddlerFilter = this.params[1];\n\t}\n\ttiddlerFilter = tiddlerFilter || \"[all[tiddlers]]\";\n\toptions.explodePlugins = namedParames.explodePlugins || \"yes\";\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],tiddlerFilter,this.commander,options);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander,options) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter;\n\tthis.commander = commander;\n\tthis.explodePlugins = options.explodePlugins;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type] || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else if(self.explodePlugins !== \"no\") {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t} else if(self.explodePlugins === \"no\") {\n\t\t\t\t\t\tself.log(\"Processing custom plugin to tiddlders folder: \" + title);\n\t\t\t\t\t\tself.saveTiddler(\"tiddlers\", tiddler);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = $tw.utils.parseJSONSafe(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler,title) {\n\t\tif(!tiddler.title) {\n\t\t\ttiddler.title = title;\n\t\t }\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar title = tiddler.fields.title, fileInfo, pathFilters, extFilters;\n\tif(this.wiki.tiddlerExists(\"$:/config/FileSystemPaths\")) {\n\t\tpathFilters = this.wiki.getTiddlerText(\"$:/config/FileSystemPaths\",\"\").split(\"\\n\");\n\t}\n\tif(this.wiki.tiddlerExists(\"$:/config/FileSystemExtensions\")) {\n\t\textFilters = this.wiki.getTiddlerText(\"$:/config/FileSystemExtensions\",\"\").split(\"\\n\");\n\t}\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\tpathFilters: pathFilters,\n\t\textFilters: extFilters,\n\t\twiki: this.wiki,\n\t\tfileInfo: {}\n\t});\n\ttry {\n\t\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n\t} catch (err) {\n\