{" Screencast Chunk: Hypertext: Hypertext in the 2020s: Opportunities 3":"designwritestudio","#JKIII on Google News":"designwritestudio","$:/.tb/modules/startup/hide-sidebar.js":"designwritestudio","$:/1":"designwritestudio","$:/2":"designwritestudio","$:/3":"designwritestudio","$:/375":"designwritestudio","$:/575":"designwritestudio","$:/About Designing & Writing Interactive Texts":"designwritestudio","$:/Comments on 1.01 Hello World! (Alicia Bower (Flinn), 18Jan 8:35 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Amber Goodfriend, 17Jan 3:39 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Andrew Houde, 17Jan 4:49 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Benjamin Furbeck, 17Jan 7:24 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Brandon Helsing, 17Jan 9:50 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Carson Palmer, 17Jan 6:45 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Chris Copeland, 17Jan 7:13 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Derek Smith, 17Jan 10:51 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Dylan Pagillo, 16Jan 11:30 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Elizabeth Simonelli, 16Jan 9:55 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Eric Brown, 18Jan 10:22 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Gladson Natarajan, 17Jan 2:26 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Gladson Natarajan, 17Jan 2:29 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (James Ward, 18Jan 9:24 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Jared Duquette, 17Jan 12:03 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Jillian Christiano, 17Jan 4:27 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Justin Cushing, 17Jan 6:34 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (MS, 18Jan 11:28 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Malyka, 17Jan 6:39 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Malyka, 17Jan 7:20 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Marcus Spratley, 17Jan 11:35 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Marvin Pierre, 18Jan 2:16 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Megan, 17Jan 12:45 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Michael, 18Jan 10:21 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Mickey, 17Jan 8:33 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Nell Evangeline, 18Jan 10:03 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Orinthea Sommersell, 17Jan 5:58 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Ray Buckley, 18Jan 10:10 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Ryan Maher, 17Jan 11:18 AM)":"designwritestudio","$:/Comments on 1.01 Hello World! (SeanH, 16Jan 11:00 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Shannon MacColl, 18Jan 8:37 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Sharon Healy, 17Jan 5:54 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Steve, 17Jan 4:57 PM)":"designwritestudio","$:/Comments on 1.01 Hello World! (Tristan Retzke, 18Jan 10:53 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Alicia Bower (Flinn), 18Jan 8:29 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Amber Goodfriend, 21Jan 5:22 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Andrew Houde, 21Jan 11:14 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Benjamin Furbeck, 18Jan 11:43 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Brandon Helsing, 20Jan 3:46 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Carson Palmer, 22Jan 12:57 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Chris Copeland, 18Jan 2:41 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Derek Smith, 21Jan 3:14 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Dylan Neil, 21Jan 11:32 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Elizabeth Simonelli, 18Jan 12:11 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Eric Brown, 20Jan 6:55 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Gladson Natarajan, 20Jan 2:06 PM)":"designwritestudio","$:/Comments on 1.02 About Me (James Ward, 22Jan 2:46 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Jared Duquette, 21Jan 10:04 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Jillian Christiano, 18Jan 12:05 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Justin Cushing, 20Jan 11:39 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Karina, 19Jan 8:27 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Malyka, 21Jan 10:32 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Marcus Spratley, 21Jan 7:08 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Marvin Pierre, 22Jan 2:55 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Marvin Pierre, 22Jan 4:10 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Max Nadel, 22Jan 7:23 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Megan, 18Jan 11:42 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Michael, 18Jan 11:51 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Mickey, 18Jan 11:43 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Orinthea Sommersell, 20Jan 12:10 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Ray Buckley, 18Jan 11:52 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Ryan Maher, 18Jan 1:32 PM)":"designwritestudio","$:/Comments on 1.02 About Me (SHallenbeck, 22Jan 9:41 PM)":"designwritestudio","$:/Comments on 1.02 About Me (Shannon MacColl, 22Jan 8:01 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Sharon Healy, 22Jan 11:12 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Sharon Healy, 22Jan 6:25 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Steve Beckwith, 18Jan 11:42 AM)":"designwritestudio","$:/Comments on 1.02 About Me (Tristan Retzke, 20Jan 11:04 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Alicia Bower (Flinn), 28Jan 11:23 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Andrew Houde, 28Jan 6:41 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Benjamin Furbeck, 25Jan 7:50 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Brandon Helsing, 28Jan 10:33 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Chris Copeland, 25Jan 5:22 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Derek Smith, 28Jan 10:31 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Dylan Pagillo, 29Jan 12:38 AM)":"designwritestudio","$:/Comments on 2.02 Objects (Justin Cushing, 29Jan 12:05 AM)":"designwritestudio","$:/Comments on 2.02 Objects (Karina, 29Jan 8:36 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Marvin Pierre, 28Jan 5:25 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Orinthea, 28Jan 3:51 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Ryan Maher, 28Jan 10:28 PM)":"designwritestudio","$:/Comments on 2.02 Objects (SHallenbeck, 27Jan 10:13 PM)":"designwritestudio","$:/Comments on 2.02 Objects (Shannon MacColl, 28Jan 1:21 AM)":"designwritestudio","$:/Comments on 2.02 Objects (Steve B, 25Jan 11:48 AM)":"designwritestudio","$:/Comments on 2.02 Objects (Tristan Retzke, 28Jan 8:30 AM)":"designwritestudio","$:/Comments on 4.01 Annotations (Andrew Houde, 11Feb 9:55 PM)":"designwritestudio","$:/Comments on 4.01 Annotations (SHallenbeck, 10Feb 12:40 PM)":"designwritestudio","$:/Comments on 4.03 Writing a Narrative Essay (Alicia Bower (Flinn), 22Feb 10:51 AM)":"designwritestudio","$:/Comments on 4.03 Writing a Narrative Essay (Brandon Helsing, 26Feb 1:03 AM)":"designwritestudio","$:/Comments on 4.03 Writing a Narrative Essay (Gladson Natarajan, 21Feb 3:13 PM)":"designwritestudio","$:/Comments on 4.03 Writing a Narrative Essay (Marcus Spratley, 26Feb 1:32 AM)":"designwritestudio","$:/Comments on 4.03 Writing a Narrative Essay (Shannon MacColl, 25Feb 6:04 AM)":"designwritestudio","$:/Comments on 4.03 Writing a Narrative Essay (Steve B, 20Feb 10:49 AM)":"designwritestudio","$:/Comments on 4.04 Hypertext in the 21st Century (Megan, 26Feb 1:38 PM)":"designwritestudio","$:/DefaultTiddlers":"designwritestudio","$:/SharedWikisImporter":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Field 18":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Field 19":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Field 20":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Field 21":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Field 22":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Field 23":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Row 3":"designwritestudio","$:/SharedWikisImporter/ImportSpecifiers/Sheet 2":"designwritestudio","$:/SiteSubtitle":"designwritestudio","$:/SiteTitle":"designwritestudio","$:/UploadName":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 1":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 10":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 11":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 12":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 13":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 14":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 15":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 16":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 17":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 18":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 19":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 2":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 20":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 21":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 22":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 23":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 24":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 25":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 26":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 27":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 28":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 29":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 3":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 30":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 31":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 32":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 33":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 34":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 35":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 36":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 37":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 38":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 39":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 4":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 40":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 41":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 5":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 6":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 7":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 8":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Field 9":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Row":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Row 1":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Row 2":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Row 3":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Row 4":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Row 5":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Sheet":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Sheet 1":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Sheet 2":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Sheet 3":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Sheet 4":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Workbook":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Workbook 1":"designwritestudio","$:/_ExcelImporter/ImportSpecifiers/Workbook 2":"designwritestudio","$:/_Menu/Home/Configuration/Options":"designwritestudio","$:/_TWaddle/Stretch/CSS":"designwritestudio","$:/_TWaddle/Stretch/Macro":"designwritestudio","$:/_telmiger/ref":"designwritestudio","$:/_telmiger/strex":"designwritestudio","$:/_telmiger/strex.css":"designwritestudio","$:/_telmiger/utils/HashStr.js":"designwritestudio","$:/about":"designwritestudio","$:/com":"designwritestudio","$:/components":"designwritestudio","$:/config/AnimationDuration":"designwritestudio","$:/config/Comments/EnableFilter":"designwritestudio","$:/config/DefaultSidebarTab":"designwritestudio","$:/config/HideSidebarOnStartup":"designwritestudio","$:/config/Manager/Filter":"designwritestudio","$:/config/Manager/Show":"designwritestudio","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home":"designwritestudio","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import":"designwritestudio","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal":"designwritestudio","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh":"designwritestudio","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview":"designwritestudio","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme":"designwritestudio","$:/config/Plugins/Disabled/$:/plugins/DesignWriteStudio/Annotator":"designwritestudio","$:/config/RelinkOnRename":"designwritestudio","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/edit":"designwritestudio","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here":"designwritestudio","$:/config/ViewToolbarButtons/Visibility/$:/plugins/TWaddle/SideEditor/Button":"designwritestudio","$:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec":"designwritestudio","$:/core/ui/Buttons/export-tiddler":"designwritestudio","$:/core/ui/Buttons/more-tiddler-actions":"designwritestudio","$:/core/ui/LinkTemplate":"designwritestudio","$:/core/ui/MoreSideBar/Missing":"designwritestudio","$:/core/ui/SideBar/More":"designwritestudio","$:/core/ui/SideBar/Open":"designwritestudio","$:/core/ui/SideBar/Recent":"designwritestudio","$:/core/ui/SideBar/Tools":"designwritestudio","$:/core/ui/TopBar/menu":"designwritestudio","$:/core/ui/ViewTemplate":"designwritestudio","$:/core/ui/ViewTemplate/endslideshow":"designwritestudio","$:/core/ui/ViewTemplate/next":"designwritestudio","$:/core/ui/ViewTemplate/prev":"designwritestudio","$:/creating":"designwritestudio","$:/currentIllustration":"designwritestudio","$:/demo":"designwritestudio","$:/desc":"designwritestudio","$:/design":"designwritestudio","$:/designing":"designwritestudio","$:/designx":"designwritestudio","$:/dictionary":"designwritestudio","$:/directions":"designwritestudio","$:/dws/images/google-group-button":"designwritestudio","$:/dws/images/share-button":"designwritestudio","$:/excise":"designwritestudio","$:/favicon.ico":"designwritestudio","$:/fromTiddler":"designwritestudio","$:/ideas":"designwritestudio","$:/idt":"designwritestudio","$:/interactive":"designwritestudio","$:/links":"designwritestudio","$:/list":"designwritestudio","$:/nav":"designwritestudio","$:/newTiddler":"designwritestudio","$:/newhere":"designwritestudio","$:/open":"designwritestudio","$:/palette":"designwritestudio","$:/palettes/DWS":"designwritestudio","$:/palettes/DesignWriteStudio":"designwritestudio","$:/permaview":"designwritestudio","$:/plugins/DesignWriteStudio/Annotator":"designwritestudio","$:/plugins/DesignWriteStudio/showNotes":"designwritestudio","$:/plugins/DesignWriteStudio/showNotes/read.me":"designwritestudio","$:/plugins/TWaddle/TabLinks":"designwritestudio","$:/plugins/TWaddle/TabLinks/Toggle":"designwritestudio","$:/plugins/ahahn/tinka":"designwritestudio","$:/plugins/ebalster/formula":"designwritestudio","$:/plugins/tiddlywiki/bibtex":"designwritestudio","$:/plugins/tiddlywiki/comments":"designwritestudio","$:/plugins/tiddlywiki/highlight":"designwritestudio","$:/plugins/tiddlywiki/jszip":"designwritestudio","$:/plugins/tiddlywiki/xlsx-utils":"designwritestudio","$:/plugins/tobibeer/appear":"designwritestudio","$:/plugins/tobibeer/random":"designwritestudio","$:/plugins/tobibeer/split":"designwritestudio","$:/practices":"designwritestudio","$:/punctuation":"designwritestudio","$:/tabs":"designwritestudio","$:/tabs/practices--237466675":"designwritestudio","$:/tags/SideBar":"designwritestudio","$:/techniques":"designwritestudio","$:/texts":"designwritestudio","$:/theme":"designwritestudio","$:/themes/tiddlywiki/heavier":"designwritestudio","$:/themes/tiddlywiki/punch":"designwritestudio","$:/themes/tiddlywiki/vanilla/options/sidebarlayout":"designwritestudio","$:/thisObject":"designwritestudio","$:/topics":"designwritestudio","$:/transclusion":"designwritestudio","$:/view":"designwritestudio","$:/what":"designwritestudio","$:/who":"designwritestudio","$:/wikipedia":"designwritestudio","$:/writing":"designwritestudio","*":"designwritestudio","03-01":"designwritestudio","1.01 Hello World! (Alicia Bower (Flinn), 09Feb 10:45 AM)":"designwritestudio","1.01 Hello World! (Alicia Bower (Flinn), 18Jan 8:35 PM)":"designwritestudio","1.01 Hello World! (Amber Goodfriend, 17Jan 3:39 PM)":"designwritestudio","1.01 Hello World! (Andrew Houde, 17Jan 4:49 PM)":"designwritestudio","1.01 Hello World! (Andrew Houde, 17Jan 4:49 PM) 1":"designwritestudio","1.01 Hello World! (Benjamin Furbeck, 17Jan 7:24 AM)":"designwritestudio","1.01 Hello World! (Biaggio Mantella, 26Jan 11:44 AM)":"designwritestudio","1.01 Hello World! (Brandon Helsing, 17Jan 9:50 AM)":"designwritestudio","1.01 Hello World! (Carson Palmer, 17Jan 6:45 PM)":"designwritestudio","1.01 Hello World! (Chris Copeland, 17Jan 7:13 AM)":"designwritestudio","1.01 Hello World! (Derek Smith, 17Jan 10:51 AM)":"designwritestudio","1.01 Hello World! (Dylan Pagillo, 16Jan 11:30 PM)":"designwritestudio","1.01 Hello World! (Elizabeth Simonelli, 16Jan 9:55 PM)":"designwritestudio","1.01 Hello World! (Eric Brown, 18Jan 10:22 AM)":"designwritestudio","1.01 Hello World! (Gladson Natarajan, 17Jan 2:26 PM)":"designwritestudio","1.01 Hello World! (Gladson Natarajan, 17Jan 2:29 PM)":"designwritestudio","1.01 Hello World! (James Ward, 18Jan 9:24 AM)":"designwritestudio","1.01 Hello World! (Jared Duquette, 17Jan 12:03 PM)":"designwritestudio","1.01 Hello World! (Jared Duquette, 21Jan 9:48 PM)":"designwritestudio","1.01 Hello World! (Jillian Christiano, 17Jan 4:27 PM)":"designwritestudio","1.01 Hello World! (Justin Cushing, 17Jan 6:34 PM)":"designwritestudio","1.01 Hello World! (Karina, 19Jan 7:16 PM)":"designwritestudio","1.01 Hello World! (MS, 18Jan 11:28 AM)":"designwritestudio","1.01 Hello World! (Malyka, 17Jan 6:39 PM)":"designwritestudio","1.01 Hello World! (Malyka, 17Jan 7:20 PM)":"designwritestudio","1.01 Hello World! (Marcus Spratley, 17Jan 11:35 PM)":"designwritestudio","1.01 Hello World! (Marguerite Fraine, 25Jan 11:38 AM)":"designwritestudio","1.01 Hello World! (Marvin Pierre, 18Jan 2:16 PM)":"designwritestudio","1.01 Hello World! (Max Nadel, 19Jan 6:15 PM)":"designwritestudio","1.01 Hello World! (Megan, 09Feb 9:37 AM)":"designwritestudio","1.01 Hello World! (Megan, 17Jan 12:45 PM)":"designwritestudio","1.01 Hello World! (Michael, 18Jan 10:21 AM)":"designwritestudio","1.01 Hello World! (Mickey, 17Jan 8:33 PM)":"designwritestudio","1.01 Hello World! (Nell Evangeline, 18Jan 10:03 AM)":"designwritestudio","1.01 Hello World! (Orinthea Sommersell, 17Jan 5:58 PM)":"designwritestudio","1.01 Hello World! (PattyV, 27Jan 10:27 AM)":"designwritestudio","1.01 Hello World! (Ray Buckley, 18Jan 10:10 AM)":"designwritestudio","1.01 Hello World! (Ryan Maher, 17Jan 11:18 AM)":"designwritestudio","1.01 Hello World! (SeanH, 16Jan 11:00 PM)":"designwritestudio","1.01 Hello World! (Shannon MacColl, 18Jan 8:37 PM)":"designwritestudio","1.01 Hello World! (Sharon Healy, 17Jan 5:54 PM)":"designwritestudio","1.01 Hello World! (Steve, 17Jan 4:57 PM)":"designwritestudio","1.01 Hello World! (Tristan Retzke, 18Jan 10:53 AM)":"designwritestudio","1.02 About Me (Alicia Bower (Flinn), 18Jan 8:29 PM)":"designwritestudio","1.02 About Me (Amber Goodfriend, 21Jan 5:22 PM)":"designwritestudio","1.02 About Me (Andrew Houde, 21Jan 11:14 PM)":"designwritestudio","1.02 About Me (Benjamin Furbeck, 18Jan 11:43 AM)":"designwritestudio","1.02 About Me (Biaggio Mantella, 26Jan 11:46 AM)":"designwritestudio","1.02 About Me (Brandon Helsing, 20Jan 3:46 PM)":"designwritestudio","1.02 About Me (Carson Palmer, 22Jan 12:56 AM)":"designwritestudio","1.02 About Me (Carson Palmer, 22Jan 12:57 AM)":"designwritestudio","1.02 About Me (Chris Copeland, 18Jan 2:41 PM)":"designwritestudio","1.02 About Me (Derek Smith, 21Jan 3:14 PM)":"designwritestudio","1.02 About Me (Dylan Neil, 21Jan 11:32 PM)":"designwritestudio","1.02 About Me (Elizabeth Simonelli, 18Jan 12:11 PM)":"designwritestudio","1.02 About Me (Eric Brown, 20Jan 6:55 PM)":"designwritestudio","1.02 About Me (Gladson Natarajan, 20Jan 2:06 PM)":"designwritestudio","1.02 About Me (Gladson Natarajan, 20Jan 2:47 PM)":"designwritestudio","1.02 About Me (James Ward, 22Jan 2:46 PM)":"designwritestudio","1.02 About Me (Jared Duquette, 21Jan 10:04 PM)":"designwritestudio","1.02 About Me (Jillian Christiano, 18Jan 12:05 PM)":"designwritestudio","1.02 About Me (Justin Cushing, 20Jan 11:39 AM)":"designwritestudio","1.02 About Me (Karina, 19Jan 8:27 PM)":"designwritestudio","1.02 About Me (Malyka, 21Jan 10:32 PM)":"designwritestudio","1.02 About Me (Marcus Spratley, 21Jan 7:08 AM)":"designwritestudio","1.02 About Me (Marguerite Fraine, 26Jan 4:51 PM)":"designwritestudio","1.02 About Me (Marvin Pierre, 22Jan 2:55 AM)":"designwritestudio","1.02 About Me (Marvin Pierre, 22Jan 4:10 PM)":"designwritestudio","1.02 About Me (Max Nadel, 22Jan 7:23 PM)":"designwritestudio","1.02 About Me (Megan, 18Jan 11:42 AM)":"designwritestudio","1.02 About Me (Michael, 18Jan 11:51 AM)":"designwritestudio","1.02 About Me (Mickey, 18Jan 11:43 AM)":"designwritestudio","1.02 About Me (Nell Evangeline, 28Jan 7:10 PM)":"designwritestudio","1.02 About Me (Orinthea Sommersell, 20Jan 12:10 PM)":"designwritestudio","1.02 About Me (PattyV, 31Jan 6:51 PM)":"designwritestudio","1.02 About Me (Ray Buckley, 18Jan 11:52 AM)":"designwritestudio","1.02 About Me (Ryan Maher, 18Jan 1:32 PM)":"designwritestudio","1.02 About Me (SHallenbeck, 22Jan 9:41 PM)":"designwritestudio","1.02 About Me (Shannon MacColl, 19Jan 5:43 PM)":"designwritestudio","1.02 About Me (Shannon MacColl, 22Jan 8:01 AM)":"designwritestudio","1.02 About Me (Sharon Healy, 22Jan 11:12 AM)":"designwritestudio","1.02 About Me (Sharon Healy, 22Jan 6:25 AM)":"designwritestudio","1.02 About Me (Steve Beckwith, 18Jan 11:42 AM)":"designwritestudio","1.02 About Me (Tristan Retzke, 20Jan 11:04 PM)":"designwritestudio","1.02 About Me (Tristan Retzke, 21Jan 6:05 PM)":"designwritestudio","1.02 About Me (Tristan Retzke, 21Jan 6:11 PM)":"designwritestudio","1.02 About Me (Tristan Retzke, 21Jan 6:29 PM)":"designwritestudio","1.02 About Me (Tristan Retzke, 21Jan 6:33 PM)":"designwritestudio","1.02 About Me (Tristan Retzke, 21Jan 9:21 PM)":"designwritestudio","1.02 About Me (Tristan Retzke, 23Jan 2:21 PM)":"designwritestudio","11th January 2018":"designwritestudio","13th December 2017":"designwritestudio","14th January 2018":"designwritestudio","15.1":"designwritestudio","15.10":"designwritestudio","15.11":"designwritestudio","15.12":"designwritestudio","15.13":"designwritestudio","15.14":"designwritestudio","15.15":"designwritestudio","15.16":"designwritestudio","15.17":"designwritestudio","15.18":"designwritestudio","15.19":"designwritestudio","15.2":"designwritestudio","15.3":"designwritestudio","15.4":"designwritestudio","15.5":"designwritestudio","15.6":"designwritestudio","15.7":"designwritestudio","15.8":"designwritestudio","15.9":"designwritestudio","18th December 2017":"designwritestudio","19th December 2017":"designwritestudio","2.01 Shapes (Alicia Bower (Flinn, 25Jan 4:03 PM)":"designwritestudio","2.01 Shapes (Amber Goodfriend, 24Jan 1:36 PM)":"designwritestudio","2.01 Shapes (Andrew Houde, 28Jan 2:55 PM)":"designwritestudio","2.01 Shapes (Benjamin Furbeck, 23Jan 12:49 PM)":"designwritestudio","2.01 Shapes (Brandon Helsing, 27Jan 5:35 PM)":"designwritestudio","2.01 Shapes (Carson Palmer, 23Jan 11:20 AM)":"designwritestudio","2.01 Shapes (Chris Copeland, 23Jan 2:13 PM)":"designwritestudio","2.01 Shapes (Derek Smith, 28Jan 2:51 PM)":"designwritestudio","2.01 Shapes (Dylan Pagillo, 28Jan 7:38 PM)":"designwritestudio","2.01 Shapes (Elizabeth Simonelli, 23Jan 11:40 AM)":"designwritestudio","2.01 Shapes (Eric Brown, 23Jan 11:49 AM)":"designwritestudio","2.01 Shapes (Gladson natarajan, 24Jan 2:40 PM)":"designwritestudio","2.01 Shapes (Jared Duquette, 28Jan 10:36 PM)":"designwritestudio","2.01 Shapes (Jillian Christiano, 23Jan 11:44 AM)":"designwritestudio","2.01 Shapes (Justin Cushing, 28Jan 8:38 PM)":"designwritestudio","2.01 Shapes (Karina, 25Jan 11:07 PM)":"designwritestudio","2.01 Shapes (Malyka, 28Jan 4:39 PM)":"designwritestudio","2.01 Shapes (Marcus Spratley, 24Jan 11:03 PM)":"designwritestudio","2.01 Shapes (Marguerite Fraine, 29Jan 10:49 PM)":"designwritestudio","2.01 Shapes (Marvin Pierre, 28Jan 4:24 AM)":"designwritestudio","2.01 Shapes (Max Nadel, 28Jan 8:55 PM)":"designwritestudio","2.01 Shapes (Megan, 23Jan 11:35 AM)":"designwritestudio","2.01 Shapes (Michael, 23Jan 11:20 AM)":"designwritestudio","2.01 Shapes (Mickey, 23Jan 11:25 AM)":"designwritestudio","2.01 Shapes (Nell Evangeline Morrissey, 07Feb 10:53 PM)":"designwritestudio","2.01 Shapes (Orinthea, 28Jan 3:49 PM)":"designwritestudio","2.01 Shapes (PattyV, 11Feb 12:37 PM)":"designwritestudio","2.01 Shapes (Ray Buckley, 30Jan 10:01 AM)":"designwritestudio","2.01 Shapes (Ryan Maher, 23Jan 6:06 PM)":"designwritestudio","2.01 Shapes (SHallenbeck, 27Jan 10:55 AM)":"designwritestudio","2.01 Shapes (Shannon MacColl, 24Jan 9:49 PM)":"designwritestudio","2.01 Shapes (Steve B, 23Jan 11:20 AM)":"designwritestudio","2.01 Shapes (Tristan Retzke, 23Jan 2:22 PM)":"designwritestudio","2.02 Objects (Alicia Bower (Flinn), 28Jan 11:23 PM)":"designwritestudio","2.02 Objects (Andrew Houde, 28Jan 6:41 PM)":"designwritestudio","2.02 Objects (Benjamin Furbeck, 25Jan 7:50 PM)":"designwritestudio","2.02 Objects (Brandon Helsing, 28Jan 10:33 PM)":"designwritestudio","2.02 Objects (Chris Copeland, 25Jan 5:22 PM)":"designwritestudio","2.02 Objects (Derek Smith, 28Jan 10:31 PM)":"designwritestudio","2.02 Objects (Dylan Pagillo, 29Jan 12:38 AM)":"designwritestudio","2.02 Objects (Eric Brown, 30Jan 10:11 AM)":"designwritestudio","2.02 Objects (Gladson natarajan, 28Jan 7:59 AM)":"designwritestudio","2.02 Objects (Jillian Christiano, 27Jan 11:20 AM)":"designwritestudio","2.02 Objects (Justin Cushing, 29Jan 12:05 AM)":"designwritestudio","2.02 Objects (Karina, 29Jan 8:36 PM)":"designwritestudio","2.02 Objects (Malyka, 28Jan 4:03 PM)":"designwritestudio","2.02 Objects (Marcus Spratley, 29Jan 12:15 AM)":"designwritestudio","2.02 Objects (Marvin Pierre, 28Jan 5:25 PM)":"designwritestudio","2.02 Objects (Max Nadel, 30Jan 5:25 PM)":"designwritestudio","2.02 Objects (Megan, 25Jan 5:03 PM)":"designwritestudio","2.02 Objects (Michael C. Miller, 29Jan 4:16 PM)":"designwritestudio","2.02 Objects (Mickey, 05Feb 7:39 PM)":"designwritestudio","2.02 Objects (Orinthea, 28Jan 3:51 PM)":"designwritestudio","2.02 Objects (PattyV, 17Feb 7:17 PM)":"designwritestudio","2.02 Objects (PattyV, 19Feb 10:10 AM)":"designwritestudio","2.02 Objects (Ryan Maher, 28Jan 10:28 PM)":"designwritestudio","2.02 Objects (SHallenbeck, 27Jan 10:13 PM)":"designwritestudio","2.02 Objects (Shannon MacColl, 28Jan 1:21 AM)":"designwritestudio","2.02 Objects (Steve B, 25Jan 11:48 AM)":"designwritestudio","2.02 Objects (Tristan Retzke, 28Jan 8:30 AM)":"designwritestudio","20171128180633154":"designwritestudio","20171128191203385":"designwritestudio","3.01 Reverse Engineering Google News (Alicia Bower (Flinn), 02Feb 4:37 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Andrew Houde, 04Feb 4:41 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Benjamin Furbeck, 31Jan 7:43 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Brandon Helsing, 05Feb 12:09 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Carson Palmer, 05Feb 4:09 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Chris Copeland, 30Jan 2:57 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Derek Smith, 04Feb 4:29 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Dylan Pagillo, 07Feb 3:40 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Eric Brown, 01Feb 9:59 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Gladson Natarajan, 04Feb 9:20 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Jared Duquette, 23Feb 10:17 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Jillian Christiano, 01Feb 11:34 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Jillian Christiano, 06Feb 10:14 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Justin Cushing, 04Feb 3:15 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Malyka, 04Feb 7:11 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Malyka, 17Feb 2:16 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Marcus Spratley, 04Feb 11:55 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Marcus Spratley, 05Feb 1:13 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Marguerite Fraine, 06Feb 10:34 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Marvin Pierre, 04Feb 5:27 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Max Nadel, 04Feb 4:27 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Megan, 01Feb 9:24 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Michael C. Miller, 05Feb 2:19 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Mickey, 07Feb 8:02 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Orinthea Sommersell, 04Feb 6:17 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Orinthea, 04Feb 6:12 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Ryan Maher, 04Feb 4:26 PM)":"designwritestudio","3.01 Reverse Engineering Google News (SHallenbeck, 03Feb 8:55 PM)":"designwritestudio","3.01 Reverse Engineering Google News (Shannon MacColl, 04Feb 1:09 AM)":"designwritestudio","3.01 Reverse Engineering Google News (Steve B, 31Jan 4:34 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia (Eric Brown, 13Mar 1:17 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia (Jared Duquette, 04Mar 10:31 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia (Jillian Christiano, 20Feb 10:02 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia (Justin Cushing, 16Feb 9:40 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia (Justin Cushing, 19Feb 8:01 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia (Malyka, 17Feb 2:17 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Alicia Bower, 02Feb 5:29 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Andrew Houde, 05Feb 12:03 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Benjamin Furbeck, 04Feb 11:03 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Brandon Helsing, 05Feb 12:26 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Chris Copeland, 01Feb 2:51 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Derek Smith, 05Feb 1:43 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Dylan Pagillo, 08Feb 12:00 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Eric Brown, 06Feb 9:55 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Gladson Natarajan, 04Feb 10:35 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Gladson Natarajan, 04Feb 11:01 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Jillian Christiano, 03Feb 1:55 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Justin Cushing, 04Feb 6:46 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Malyka, 04Feb 7:43 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Marcus, 05Feb 1:25 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Marguerite Fraine, 06Feb 11:27 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Marvin Pierre, 04Feb 5:23 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Max Nadel, 06Feb 3:21 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Megan, 01Feb 4:28 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Michael C. Miller, 05Feb 3:48 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Mickey, 12Feb 9:20 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Orinthea Sommersell, 04Feb 6:15 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Orinthea Sommersell, 04Feb 7:12 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (SHallenbeck, 05Feb 11:11 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Shannon MacColl, 04Feb 2:33 AM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Steve B, 04Feb 8:51 PM)":"designwritestudio","3.02 Reverse Engineering Wikipedia Tables (Tristan Retzke, 10Feb 8:02 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Alicia Bower (Flinn), 14Feb 6:24 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Andrew Houde, 18Feb 1:56 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Benjamin Furbeck, 15Feb 12:28 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Brandon Helsing, 18Feb 11:20 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Derek Smith, 18Feb 8:15 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Gladson Natarajan, 18Feb 11:00 AM)":"designwritestudio","3.03 Importing Wikipedia Tables (Gladson Natarajan, 18Feb 11:32 AM)":"designwritestudio","3.03 Importing Wikipedia Tables (Jillian Christiano, 20Feb 10:11 AM)":"designwritestudio","3.03 Importing Wikipedia Tables (Justin Cushing, 19Feb 7:04 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Malyka, 19Feb 12:14 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Marcus Spratley, 19Feb 3:46 AM)":"designwritestudio","3.03 Importing Wikipedia Tables (Marguerite Fraine, 14Feb 1:41 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Marvin Pierre, 10Mar 6:04 AM)":"designwritestudio","3.03 Importing Wikipedia Tables (Max Nadel, 19Feb 9:33 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Megan, 14Feb 8:39 AM)":"designwritestudio","3.03 Importing Wikipedia Tables (Michael C. Miller, 18Feb 10:56 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Mickey, 14Feb 11:41 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Orinthea Sommersell, 18Feb 12:36 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (SHallenbeck, 18Feb 12:43 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Shannon MacColl, 16Feb 7:54 PM)":"designwritestudio","3.03 Importing Wikipedia Tables (Steve B, 20Feb 10:07 AM)":"designwritestudio","3.03 Importing Wikipedia Tables (Tristan Retzke, 21Feb 2:41 AM)":"designwritestudio","3/1/2018 10:35:16":"designwritestudio","3/1/2018 10:35:46":"designwritestudio","3/1/2018 10:36:31":"designwritestudio","3/1/2018 10:36:44":"designwritestudio","3/1/2018 10:37:23":"designwritestudio","3/1/2018 10:37:55":"designwritestudio","3/1/2018 10:38:00":"designwritestudio","3/1/2018 10:38:09":"designwritestudio","3/1/2018 10:39:01":"designwritestudio","3/1/2018 10:39:45":"designwritestudio","3/1/2018 10:40:02":"designwritestudio","3/1/2018 10:40:04":"designwritestudio","3/1/2018 10:40:19":"designwritestudio","3/1/2018 10:40:26":"designwritestudio","30th November 2017":"designwritestudio","3rd January 2018":"designwritestudio","4.01 Annotations (Andrew Houde, 11Feb 9:55 PM)":"designwritestudio","4.01 Annotations (Brandon Helsing, 12Feb 1:30 AM)":"designwritestudio","4.01 Annotations (Chris Copeland, 12Feb 1:20 PM)":"designwritestudio","4.01 Annotations (Derek Smith, 12Feb 2:55 AM)":"designwritestudio","4.01 Annotations (Gladson Natarajan, 11Feb 1:44 PM)":"designwritestudio","4.01 Annotations (Gladson Natarajan, 11Feb 3:07 PM)":"designwritestudio","4.01 Annotations (Jillian Christiano, 20Feb 10:09 AM)":"designwritestudio","4.01 Annotations (Jillian Christiano, 20Feb 11:20 AM)":"designwritestudio","4.01 Annotations (Justin Cushing, 10Feb 6:55 PM)":"designwritestudio","4.01 Annotations (Karina, 12Feb 7:17 PM)":"designwritestudio","4.01 Annotations (Malyka, 11Feb 11:08 PM)":"designwritestudio","4.01 Annotations (Malyka, 17Feb 4:22 PM)":"designwritestudio","4.01 Annotations (Marcus Spratley, 12Feb 12:47 AM)":"designwritestudio","4.01 Annotations (Marguerite Fraine, 19Feb 11:28 PM)":"designwritestudio","4.01 Annotations (Marvin Pierre, 12Feb 5:54 PM)":"designwritestudio","4.01 Annotations (Max Nadel, 12Feb 8:48 PM)":"designwritestudio","4.01 Annotations (Michael C. Miller, 11Feb 10:13 PM)":"designwritestudio","4.01 Annotations (Michael C. Miller, 20Feb 8:40 AM)":"designwritestudio","4.01 Annotations (Mickey, 22Feb 1:12 PM)":"designwritestudio","4.01 Annotations (Orinthea Sommersell, 11Feb 10:19 AM)":"designwritestudio","4.01 Annotations (Orinthea Sommersell, 11Feb 10:21 AM)":"designwritestudio","4.01 Annotations (Ryan Maher, 20Feb 10:11 AM)":"designwritestudio","4.01 Annotations (SHallenbeck, 10Feb 12:40 PM)":"designwritestudio","4.01 Annotations (Shannon MacColl, 11Feb 7:16 PM)":"designwritestudio","4.01 Annotations (Steve B, 12Feb 8:25 AM)":"designwritestudio","4.01 Annotations (Tristan Retzke, 16Feb 1:08 AM)":"designwritestudio","4.02 Bibliographic Exploration (Alicia Bower (Flinn), 21Feb 3:50 PM)":"designwritestudio","4.02 Bibliographic Exploration (Andrew Houde, 20Feb 4:04 AM)":"designwritestudio","4.02 Bibliographic Exploration (Benjamin Furbeck, 17Feb 6:56 PM)":"designwritestudio","4.02 Bibliographic Exploration (Brandon Helsing, 20Feb 10:40 PM)":"designwritestudio","4.02 Bibliographic Exploration (Chris Copeland, 18Feb 7:40 PM)":"designwritestudio","4.02 Bibliographic Exploration (Chris Copeland, 27Feb 10:40 AM)":"designwritestudio","4.02 Bibliographic Exploration (Gladson Natarajan, 20Feb 7:53 PM)":"designwritestudio","4.02 Bibliographic Exploration (Jillian Christiano, 22Feb 11:41 AM)":"designwritestudio","4.02 Bibliographic Exploration (Justin Cushing, 20Feb 10:15 PM)":"designwritestudio","4.02 Bibliographic Exploration (Malyka, 20Feb 9:27 PM)":"designwritestudio","4.02 Bibliographic Exploration (Marcus Spratley, 21Feb 3:19 AM)":"designwritestudio","4.02 Bibliographic Exploration (Marguerite Fraine, 27Feb 12:02 PM)":"designwritestudio","4.02 Bibliographic Exploration (Marvin Pierre, 20Feb 5:23 AM)":"designwritestudio","4.02 Bibliographic Exploration (Megan, 22Feb 10:18 AM)":"designwritestudio","4.02 Bibliographic Exploration (Michael C. Miller, 20Feb 8:40 AM)":"designwritestudio","4.02 Bibliographic Exploration (Mickey, 25Feb 5:13 PM)":"designwritestudio","4.02 Bibliographic Exploration (Orinthea Sommersell, 20Feb 8:17 PM)":"designwritestudio","4.02 Bibliographic Exploration (Scharem , 19Feb 9:40 PM)":"designwritestudio","4.02 Bibliographic Exploration (Shannon MacColl, 20Feb 4:04 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Alicia Bower (Flinn), 22Feb 10:51 AM)":"designwritestudio","4.03 Writing a Narrative Essay (Benjamin Furbeck, 13Mar 7:40 AM)":"designwritestudio","4.03 Writing a Narrative Essay (Brandon Helsing, 26Feb 1:03 AM)":"designwritestudio","4.03 Writing a Narrative Essay (Chris Copeland, 27Feb 10:40 AM)":"designwritestudio","4.03 Writing a Narrative Essay (Gladson Natarajan, 21Feb 3:13 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Jillian Christiano, 07Mar 1:32 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Justin Cushing, 25Feb 3:16 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Malyka, 09Mar 10:05 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Marcus Spratley, 26Feb 1:32 AM)":"designwritestudio","4.03 Writing a Narrative Essay (Megan, 25Feb 12:59 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Orinthea Sommersell, 04Mar 2:21 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Orinthea Sommersell, 25Feb 8:31 PM)":"designwritestudio","4.03 Writing a Narrative Essay (SHallenbeck, 25Feb 4:42 PM)":"designwritestudio","4.03 Writing a Narrative Essay (Shannon MacColl, 25Feb 6:04 AM)":"designwritestudio","4.03 Writing a Narrative Essay (Steve B, 20Feb 10:49 AM)":"designwritestudio","4.04 Hypertext in the 21st Century (Andrew Houde, 04Mar 11:49 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Brandon Helsing, 04Mar 11:13 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Chris Copeland, 03Mar 1:03 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Eric Brown, 13Mar 1:14 AM)":"designwritestudio","4.04 Hypertext in the 21st Century (Eric Brown, 13Mar 1:16 AM)":"designwritestudio","4.04 Hypertext in the 21st Century (Gladson Natarajan, 07Mar 5:36 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Jillian Christiano, 07Mar 3:18 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Justin Cushing, 04Mar 7:44 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Malyka, 04Mar 2:45 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Marcus Spratley, 05Mar 9:04 AM)":"designwritestudio","4.04 Hypertext in the 21st Century (Megan, 26Feb 1:38 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Mickey, 12Mar 9:11 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Orinthea Sommersell, 04Mar 2:22 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Scharem, 04Mar 7:24 PM)":"designwritestudio","4.04 Hypertext in the 21st Century (Shannon MacColl, 05Mar 8:30 PM)":"designwritestudio","4MoreWords-Designing, Writing, Interactivity, Texts: The Idea of Hypertext: Screencast Chunk":"designwritestudio","4Words-Text, Hyper, Wiki, Tiddly: The Idea of Hypertext: Screencast Chunk":"designwritestudio","4th December 2017":"designwritestudio","5.0X Self-designed Exercises (Andrew Houde, 01Apr 6:20 PM)":"designwritestudio","5.0X Self-designed Exercises (Benjamin Furbeck, 13Mar 10:41 AM)":"designwritestudio","5.0X Self-designed Exercises (Benjamin Furbeck, 18Mar 6:58 PM)":"designwritestudio","5.0X Self-designed Exercises (Benjamin Furbeck, 22Apr 2:48 PM)":"designwritestudio","5.0X Self-designed Exercises (Brandon Helsing, 19Mar 2:30 AM)":"designwritestudio","5.0X Self-designed Exercises (Derek Smith, 05Apr 10:41 AM)":"designwritestudio","5.0X Self-designed Exercises (Derek Smith, 14Mar 11:17 PM)":"designwritestudio","5.0X Self-designed Exercises (Derek Smith, 20Mar 10:16 AM)":"designwritestudio","5.0X Self-designed Exercises (Derek Smith, 25Mar 10:43 PM)":"designwritestudio","5.0X Self-designed Exercises (Gladson Natarajan, 22Mar 3:07 PM)":"designwritestudio","5.0X Self-designed Exercises (Gladson Natarajan, 25Apr 3:54 AM)":"designwritestudio","5.0X Self-designed Exercises (James Ward, 05Apr 10:15 PM)":"designwritestudio","5.0X Self-designed Exercises (James Ward, 29Mar 9:53 AM)":"designwritestudio","5.0X Self-designed Exercises (Jillian Christiano, 10Apr 10:53 AM)":"designwritestudio","5.0X Self-designed Exercises (Jillian Christiano, 10Apr 11:52 AM)":"designwritestudio","5.0X Self-designed Exercises (Jillian Christiano, 26Apr 11:20 AM)":"designwritestudio","5.0X Self-designed Exercises (Jillian Christiano, 27Mar 9:59 AM)":"designwritestudio","5.0X Self-designed Exercises (Jillian Christiano, 29Mar 3:05 PM)":"designwritestudio","5.0X Self-designed Exercises (Justin Cushing, 18Mar 10:13 PM)":"designwritestudio","5.0X Self-designed Exercises (Karina, 16Apr 4:40 PM)":"designwritestudio","5.0X Self-designed Exercises (Malyka, 13Mar 10:30 PM)":"designwritestudio","5.0X Self-designed Exercises (Malyka, 29Apr 11:20 PM)":"designwritestudio","5.0X Self-designed Exercises (Marcus Spratley, 01Apr 11:52 PM)":"designwritestudio","5.0X Self-designed Exercises (Marcus Spratley, 14Mar 11:22 PM)":"designwritestudio","5.0X Self-designed Exercises (Marcus Spratley, 19Mar 10:18 PM)":"designwritestudio","5.0X Self-designed Exercises (Marcus, 15Apr 10:25 PM)":"designwritestudio","5.0X Self-designed Exercises (Marcus, 24Apr 1:32 AM)":"designwritestudio","5.0X Self-designed Exercises (Marvin Pierre, 11Apr 7:48 PM)":"designwritestudio","5.0X Self-designed Exercises (Marvin Pierre, 11Apr 7:55 PM)":"designwritestudio","5.0X Self-designed Exercises (Marvin Pierre, 26Mar 10:25 PM)":"designwritestudio","5.0X Self-designed Exercises (Megan, 13Mar 10:39 AM)":"designwritestudio","5.0X Self-designed Exercises (Megan, 25Apr 9:04 PM)":"designwritestudio","5.0X Self-designed Exercises (Megan, 31Mar 5:28 PM)":"designwritestudio","5.0X Self-designed Exercises (Michael C. Miller, 20Mar 9:48 AM)":"designwritestudio","5.0X Self-designed Exercises (Mickey, 18Mar 7:29 PM)":"designwritestudio","5.0X Self-designed Exercises (Orinthea Sommersell, 01Apr 10:09 PM)":"designwritestudio","5.0X Self-designed Exercises (Orinthea Sommersell, 16Apr 12:46 AM)":"designwritestudio","5.0X Self-designed Exercises (Orinthea Sommersell, 18Mar 4:58 PM)":"designwritestudio","5.0X Self-designed Exercises (SHallenbeck, 19Mar 10:16 PM)":"designwritestudio","5.0X Self-designed Exercises (SHallenbeck, 29Apr 4:15 PM)":"designwritestudio","5.0X Self-designed Exercises (Scharem, 18Mar 7:23 PM)":"designwritestudio","5.0X Self-designed Exercises (Shannon MacColl, 01Apr 5:50 PM)":"designwritestudio","5.0X Self-designed Exercises (Shannon MacColl, 15Apr 11:32 AM)":"designwritestudio","5.0X Self-designed Exercises (Shannon MacColl, 18Mar 6:14 PM)":"designwritestudio","5.0X Self-designed Exercises (Steve B, 29Mar 11:21 AM)":"designwritestudio","5.0X Self-designed Exercises (megan, 11Apr 12:01 PM)":"designwritestudio","5.0X Self-designed Exercises (megan, 19Mar 5:24 PM)":"designwritestudio","53436320100101":"designwritestudio","6th December 2017":"designwritestudio","8.1":"designwritestudio","8.10":"designwritestudio","8.11":"designwritestudio","8.12":"designwritestudio","8.13":"designwritestudio","8.14":"designwritestudio","8.15":"designwritestudio","8.16":"designwritestudio","8.17":"designwritestudio","8.18":"designwritestudio","8.19":"designwritestudio","8.2":"designwritestudio","8.20":"designwritestudio","8.21":"designwritestudio","8.22":"designwritestudio","8.23":"designwritestudio","8.24":"designwritestudio","8.25":"designwritestudio","8.3":"designwritestudio","8.4":"designwritestudio","8.5":"designwritestudio","8.6":"designwritestudio","8.7":"designwritestudio","8.8":"designwritestudio","8.9":"designwritestudio","80/20 Rule":"designwritestudio","911 Report Wikification":"designwritestudio","@TiddlyCast: Hypertext in Google Apps":"designwritestudio","@TiddlyCast: Hypertext in Office365":"designwritestudio","@TiddlyCast: Roam":"designwritestudio","A Google News Reverse Engineered TiddlyWiki":"designwritestudio","A Learning Community":"designwritestudio","A Transactional Theory of Hypertext (McEneaney)":"designwritestudio","A Web page that anyone can write":"designwritestudio","A hypertextual bibliography":"designwritestudio","A new plugin...":"designwritestudio","A platform for writing, reading, thinking, teaching, learning":"designwritestudio","A stroll through Stroll":"designwritestudio","A-B Testing Environment":"designwritestudio","About Designing & Writing Interactive Texts":"designwritestudio","About Me":"designwritestudio","About Me in Tags":"designwritestudio","About My Shapes":"designwritestudio","About the Course":"designwritestudio","About the TiddlyCast":"designwritestudio","AboutStretchText":"designwritestudio","Accessibility":"designwritestudio","Add BibTex functionality for bibliographic resources":"designwritestudio","Advance Organizer":"designwritestudio","Advanced Interactive Texts":"designwritestudio","AdventureGame":"designwritestudio","Aesthetic-Usability Effect":"designwritestudio","Affordance":"designwritestudio","Alicia Bower Final Presentation":"designwritestudio","Alignment":"designwritestudio","Alternative To? Replacement for?":"designwritestudio","An Edit Text box for Derick":"designwritestudio","Andrew Houde Final Presentation":"designwritestudio","Annotate-button":"designwritestudio","Annotated Bibliography":"designwritestudio","Annotation":"designwritestudio","Annotator":"designwritestudio","Annotator Macros":"designwritestudio","Anthropomorphic Form":"designwritestudio","Appears and tabs for each primary section":"designwritestudio","Archetypes":"designwritestudio","Archived Object Interface":"designwritestudio","Area Alignment":"designwritestudio","As We May Think (Bush)":"designwritestudio","As We May Think (Wikipedia)":"designwritestudio","Assignment 01":"designwritestudio","Assignment 01: Assignment Overview":"designwritestudio","Assignment 01: Due Date":"designwritestudio","Assignment 01: Introduction to Class, Hypertext, and TiddlyWiki":"designwritestudio","Assignment 01: Objectives":"designwritestudio","Assignment 01: Required Readings":"designwritestudio","Assignment 02":"designwritestudio","Assignment 02: Assignment Overview":"designwritestudio","Assignment 02: Due Date":"designwritestudio","Assignment 02: Introduction to Hypertextualization":"designwritestudio","Assignment 02: Objectives":"designwritestudio","Assignment 02: Required Readings":"designwritestudio","Assignment 02: Submission Details":"designwritestudio","Assignment 03":"designwritestudio","Assignment 03: Assignment Overview":"designwritestudio","Assignment 03: Due Date":"designwritestudio","Assignment 03: Hypertextualization of Existing Text":"designwritestudio","Assignment 03: Objectives":"designwritestudio","Assignment 03: Required Readings":"designwritestudio","Assignment 03: Submission Details":"designwritestudio","Assignment 04":"designwritestudio","Assignment 04: Assignment Overview":"designwritestudio","Assignment 04: Due Date":"designwritestudio","Assignment 04: Objectives":"designwritestudio","Assignment 04: Organizing Your TiddlyWiki as a Class Portfolio":"designwritestudio","Assignment 04: Required Readings":"designwritestudio","Assignment 04: Submission Details":"designwritestudio","Assignment 05":"designwritestudio","Assignment 05: Assignment Overview":"designwritestudio","Assignment 05: Due Date":"designwritestudio","Assignment 05: Exploring Two-Dimensional and Multi-Dimensional Hypertext":"designwritestudio","Assignment 05: Objectives":"designwritestudio","Assignment 05: Required Readings":"designwritestudio","Assignment 05: Submission Details":"designwritestudio","Assignment 06":"designwritestudio","Assignment 06: Assignment Overview":"designwritestudio","Assignment 06: Due Date":"designwritestudio","Assignment 06: Filtering and Sorting as a Display Mechanism":"designwritestudio","Assignment 06: Objectives":"designwritestudio","Assignment 06: Required Readings":"designwritestudio","Assignment 06: Submission Details":"designwritestudio","Assignment 07":"designwritestudio","Assignment 07: Assignment Overview":"designwritestudio","Assignment 07: Culminating Activity":"designwritestudio","Assignment 07: Due Date":"designwritestudio","Assignment 07: Objectives":"designwritestudio","Assignment 07: Required Readings":"designwritestudio","Assignment 07: Submission Details":"designwritestudio","Assignment Submission Details":"designwritestudio","Assignments":"designwritestudio","Attractiveness Bias":"designwritestudio","Audio/VideoPlayer":"designwritestudio","Baby-Face Bias":"designwritestudio","Basic Shapes":"designwritestudio","Ben Furbeck Final Presentation":"designwritestudio","Biophilia Effect":"designwritestudio","Blue":"designwritestudio","Bob Cardelli":"designwritestudio","Bookmarks":"designwritestudio","Brandon Helsing Final Presentation":"designwritestudio","Building a Rhizome":"designwritestudio","Bush-As We May Think":"designwritestudio","Buttons to navigate among tiddlers using a macro":"designwritestudio","COM 106 Course Design Project":"designwritestudio","COM 106 Course Resources":"designwritestudio","COM 375 / IDT 575":"designwritestudio","COM 375 Assignments":"designwritestudio","Catalog Description":"designwritestudio","Cathedral Effect":"designwritestudio","Checkbox tag macro":"designwritestudio","Chris Copeland Final Presentation":"designwritestudio","Chunking":"designwritestudio","Circle":"designwritestudio","Class Lectures / Presentations":"designwritestudio","Class: Tuesday, January 16":"designwritestudio","Class: Tuesday, January 23":"designwritestudio","Classes":"designwritestudio","Classical Conditioning":"designwritestudio","Classroom Workshops":"designwritestudio","Closure":"designwritestudio","Cognitive Dissonance":"designwritestudio","CollaborateUltra":"designwritestudio","Color":"designwritestudio","Comment by 'steve' on 'Summer 2018'":"designwritestudio","Comment by 'steve' on 'Thinking out loud'":"designwritestudio","Common Fate":"designwritestudio","Comparison":"designwritestudio","Confirmation":"designwritestudio","Consistency":"designwritestudio","Constancy":"designwritestudio","Constraint":"designwritestudio","Contents":"designwritestudio","Contour Bias":"designwritestudio","Control":"designwritestudio","Convergence":"designwritestudio","Conversations":"designwritestudio","Core features of hypertext":"designwritestudio","CoreComponents":"designwritestudio","CoreSynonym":"designwritestudio","CoreTerm":"designwritestudio","Cost-Benefit":"designwritestudio","Course Resources":"designwritestudio","Course Syllabus":"designwritestudio","Courses":"designwritestudio","Create a new tiddler":"designwritestudio","Creating a self-designed exercise":"designwritestudio","Creating interactive texts based on self-designed exercises":"designwritestudio","Creative Commons Attribution-ShareAlike 4.0 International License":"designwritestudio","D&D Campaign":"designwritestudio","DWS Strex Logo":"designwritestudio","DWS Style Sheet":"designwritestudio","DWS ToDo":"designwritestudio","Database Reporters":"designwritestudio","Dattolo Luccio 2009 Formal description of zz-structures":"designwritestudio","Dattolo Luccio 2009 State of art survey on zz-structures":"designwritestudio","Dave Gifford Bio":"designwritestudio","DaveGifford.png":"designwritestudio","Defensible Space":"designwritestudio","Definition of Politics":"designwritestudio","Definition of xanalogical structure":"designwritestudio","Definition of zz-structures":"designwritestudio","Demo of multi-reveal of annotations using appear plugin":"designwritestudio","Demonstrate":"designwritestudio","Demonstrations: Alternatives To TiddlyWiki":"designwritestudio","Demonstrations: TiddlyWiki as a Tool for Hypertextual Thinking and Writing":"designwritestudio","Depth of Processing":"designwritestudio","Derek Smith Final Presentation":"designwritestudio","Design":"designwritestudio","Design Write Studio Definition":"designwritestudio","Design by Commitee":"designwritestudio","DesignWrite: The Screencast, Summer 2021":"designwritestudio","DesignWriteStudio":"designwritestudio","DesignWriteStudio - Summer 2021":"designwritestudio","DesignWriteStudio Contact":"designwritestudio","DesignWriteStudio Customizations":"designwritestudio","DesignWriteStudio Definition":"designwritestudio","DesignWriteStudio GitHub Repository":"designwritestudio","DesignWriteStudio Priority Development Projects: Summer 2021":"designwritestudio","DesignWriteStudio TiddlyWiki":"designwritestudio","DesignWriteStudio is Open Source":"designwritestudio","DesignWriteStudio: The Resource":"designwritestudio","DesignWriteStudio@SUNYPoly":"designwritestudio","Designing":"designwritestudio","Designing & Writing Interactive Texts: Part II":"designwritestudio","Designing and Writing Interactive Texts":"designwritestudio","Desire Line":"designwritestudio","Development Cycle":"designwritestudio","Digitization as a form of Interactivity":"designwritestudio","Dim Template":"designwritestudio","Discography":"designwritestudio","Display":"designwritestudio","Documenting Design Write Studio":"designwritestudio","Dogs in My Life -- Narrative":"designwritestudio","Dogs in My Life -- Objects":"designwritestudio","Download TiddlyWiki":"designwritestudio","Draft 2 of 'TiddlyWeb: Tiddlywiki Demo: Screencast Chunk' by steve":"designwritestudio","Draft of '3/1/2018 10:35:16'":"designwritestudio","Draft of '5.0X Self-designed Exercises (Derek Smith, 20Mar 10:16 AM)'":"designwritestudio","Draft of '5.0X Self-designed Exercises (Marcus Spratley, 14Mar 11:22 PM)'":"designwritestudio","Draft of '911 Report Wikification'":"designwritestudio","Draft of 'Class: Tuesday, January 16'":"designwritestudio","Draft of 'Class: Tuesday, January 23'":"designwritestudio","Draft of 'Design Write Studio Definition' by steve":"designwritestudio","Draft of 'DesignWriteStudio: Summer 2021' by steve":"designwritestudio","Draft of 'Exercise 4.04 Directions'":"designwritestudio","Draft of 'New Tiddler 10'":"designwritestudio","Draft of 'New Tiddler 9'":"designwritestudio","Draft of 'New Tiddler'":"designwritestudio","Draft of 'Paragraph Template'":"designwritestudio","Draft of 'Presentation: What is Hypertext?'":"designwritestudio","Draft of 'RN23'":"designwritestudio","Draft of 'Testing Bibtex References from Web Of Science' by steve":"designwritestudio","Draft of 'TiddlyWeb: Tiddlywiki Demo: Screencast Chunk' by steve":"designwritestudio","Draft of 'games? from the folks...'":"designwritestudio","Draft of 'shared-exercises template'":"designwritestudio","Due dates and submissions":"designwritestudio","Dylan Pagillo Final Presentation":"designwritestudio","DynacastthumbNail.png":"designwritestudio","Dynamic Photo Album":"designwritestudio","ElectionResultsProcessor":"designwritestudio","Elise Springer Bio":"designwritestudio","Embeds the grammar of hypertext in the punctuation of writing":"designwritestudio","Entry Point":"designwritestudio","Eric Brown Final Presentation":"designwritestudio","Errors":"designwritestudio","Essay 15: Varieties of Hypertext":"designwritestudio","Essay 8: Toward the Tabular Text":"designwritestudio","Essay Template":"designwritestudio","Essayists":"designwritestudio","Essayists 1":"designwritestudio","Essays: Applied Hypertext":"designwritestudio","Excise":"designwritestudio","Exercise":"designwritestudio","Exercise 1 Directions":"designwritestudio","Exercise 1.01":"designwritestudio","Exercise 1.01 Directions":"designwritestudio","Exercise 1.02":"designwritestudio","Exercise 1.02 Directions":"designwritestudio","Exercise 2.01":"designwritestudio","Exercise 2.01 Directions":"designwritestudio","Exercise 2.02":"designwritestudio","Exercise 2.02 Directions":"designwritestudio","Exercise 2.02 Generated Story 1: Dogs by my feelings":"designwritestudio","Exercise 2.02 Generated Story 2: Dogs in order of longevity":"designwritestudio","Exercise 2.02 Generated Story 3: Dogs by who owned them":"designwritestudio","Exercise 2.02 Template":"designwritestudio","Exercise 3.01":"designwritestudio","Exercise 3.01 Directions":"designwritestudio","Exercise 3.02":"designwritestudio","Exercise 3.02 Directions":"designwritestudio","Exercise 3.02b":"designwritestudio","Exercise 3.03":"designwritestudio","Exercise 3.03 Directions":"designwritestudio","Exercise 3.04":"designwritestudio","Exercise 4.01":"designwritestudio","Exercise 4.01 Directions":"designwritestudio","Exercise 4.02":"designwritestudio","Exercise 4.02 Directions":"designwritestudio","Exercise 4.03":"designwritestudio","Exercise 4.03 Directions":"designwritestudio","Exercise 4.04":"designwritestudio","Exercise 4.04 - Not Active":"designwritestudio","Exercise 4.04 Directions":"designwritestudio","Exercise 4.05 - Not Active":"designwritestudio","Exercise 5.01":"designwritestudio","Exercise 5.02":"designwritestudio","Exercise 5.03":"designwritestudio","Exercise 5.04":"designwritestudio","Exercise 5.0X Self-designed Exercises":"designwritestudio","Exercise 6.01":"designwritestudio","Exercise 6.02":"designwritestudio","Exercise 6.03":"designwritestudio","Exercise 6.04":"designwritestudio","Exercise 7.01":"designwritestudio","Exercise 7.02":"designwritestudio","Exercise 7.03":"designwritestudio","Exercise 7.04":"designwritestudio","Exercise 7.05":"designwritestudio","Exercise 7.06":"designwritestudio","Exercise Groups":"designwritestudio","Exercises":"designwritestudio","Exercises for writing hypertextually":"designwritestudio","Expectation Effect":"designwritestudio","Explicate":"designwritestudio","Explicatex":"designwritestudio","Exposure Effect":"designwritestudio","Extended Hypertext Bibliography":"designwritestudio","Face-ism Ratio":"designwritestudio","Factor of Safety":"designwritestudio","Feedback Loop":"designwritestudio","Fibonacci Sequence":"designwritestudio","Figure-Ground Relationship":"designwritestudio","File I/O":"designwritestudio","Final Project":"designwritestudio","First exploration with story list":"designwritestudio","Fitts’ Law":"designwritestudio","Five Hat Racks":"designwritestudio","Five Practices":"designwritestudio","Flexibility-Usability Tradeoff":"designwritestudio","Forgiveness":"designwritestudio","Form Follows Function":"designwritestudio","Four words":"designwritestudio","Framing":"designwritestudio","Freeze-Flight-Fight-Forfeit":"designwritestudio","Garbage In–Garbage Out":"designwritestudio","Gathering data for IDT thesis/project":"designwritestudio","Generic Slide Show":"designwritestudio","Generic Slide Show 1":"designwritestudio","Generic Slide Show 2":"designwritestudio","Generic Slide Show 3":"designwritestudio","Generic Slide Show 4":"designwritestudio","Generic Slide Show 5":"designwritestudio","Generic Slide Show 6":"designwritestudio","Generic Slide Show 7":"designwritestudio","Getting Started 0: Check out TiddlyWiki!":"designwritestudio","Getting Started 1: Hello World!":"designwritestudio","Getting Started 2: About Me":"designwritestudio","Gladson Natarajan":"designwritestudio","Gladson Natarajan Final Presentation":"designwritestudio","Goals":"designwritestudio","Golden Ratio":"designwritestudio","Good Continuation":"designwritestudio","Google Macros":"designwritestudio","Google Query on Nelson Transclusion":"designwritestudio","Google form to share links":"designwritestudio","GoogleForm for SharedWiki Submissions":"designwritestudio","GoogleGroup":"designwritestudio","Green Eggs and Ham":"designwritestudio","Grok TiddlyWiki":"designwritestudio","Guide for TiddlyWiki New Users":"designwritestudio","Gutenberg Diagram":"designwritestudio","Hello There":"designwritestudio","Hello World":"designwritestudio","Hick’s Law":"designwritestudio","Hierarchy":"designwritestudio","Hierarchy of Needs":"designwritestudio","Highlighting":"designwritestudio","Horror Vacui":"designwritestudio","How to save bookmarks as a project":"designwritestudio","How's it going?":"designwritestudio","Hunter-Nurturer Fixations":"designwritestudio","Hyper":"designwritestudio","Hypermedia":"designwritestudio","Hypertext":"designwritestudio","Hypertext (Wikipedia)":"designwritestudio","Hypertext / Hypermedia (McKnight, Dillon, Richardson)":"designwritestudio","Hypertext Teaching (Braisier)":"designwritestudio","Hypertext Teaching (Miles)":"designwritestudio","Hypertext Theory and WebDev in the Composition Classroom (Cripps)":"designwritestudio","Hypertext TiddlyWiki (from IDT507)":"designwritestudio","Hypertext in Theory and Practice":"designwritestudio","Hypertext(ual) Bibliography":"designwritestudio","Hypertext, Before Today: The Idea of Hypertext: Screencast Chunk":"designwritestudio","Hypertext/Hypermedia Handbook":"designwritestudio","Hypertextual Practices":"designwritestudio","Hypertextual readings about hypertext":"designwritestudio","Hypertextuality: The Podcast":"designwritestudio","IDT 553 Module":"designwritestudio","IDT 575 Assignments":"designwritestudio","Iconic Representation":"designwritestudio","Ideas for exercises":"designwritestudio","Illustration 1":"designwritestudio","Illustration 10":"designwritestudio","Illustration 11":"designwritestudio","Illustration 12":"designwritestudio","Illustration 13a":"designwritestudio","Illustration 13b":"designwritestudio","Illustration 13c":"designwritestudio","Illustration 13d":"designwritestudio","Illustration 14":"designwritestudio","Illustration 16":"designwritestudio","Illustration 18":"designwritestudio","Illustration 19":"designwritestudio","Illustration 2":"designwritestudio","Illustration 20":"designwritestudio","Illustration 21":"designwritestudio","Illustration 22":"designwritestudio","Illustration 23":"designwritestudio","Illustration 25":"designwritestudio","Illustration 25c":"designwritestudio","Illustration 25d":"designwritestudio","Illustration 27":"designwritestudio","Illustration 27a":"designwritestudio","Illustration 28":"designwritestudio","Illustration 3":"designwritestudio","Illustration 30":"designwritestudio","Illustration 33":"designwritestudio","Illustration 33a":"designwritestudio","Illustration 4":"designwritestudio","Illustration 5":"designwritestudio","Illustration 6":"designwritestudio","Illustration 8":"designwritestudio","Immersion":"designwritestudio","Importing XLSX files":"designwritestudio","Inattentional Blindness":"designwritestudio","Instruct":"designwritestudio","Interactive":"designwritestudio","Interactive Literature / Poetry":"designwritestudio","Interactive Texts in the Wild":"designwritestudio","Interactivity":"designwritestudio","Interesting use of svg in a slider":"designwritestudio","Interference Effects":"designwritestudio","Intermediate Interactive Texts":"designwritestudio","Introduction to Computer Lib / Dream Machines (Nelson)":"designwritestudio","Introductory Interactive Texts":"designwritestudio","Inverted Pyramid":"designwritestudio","Is this a General Purpose YouTube Clipper?":"designwritestudio","Iteration":"designwritestudio","James Ward Final Presentation":"designwritestudio","Jan-May 2018 Calendar":"designwritestudio","Jeremy Ruston Bio":"designwritestudio","Jillian Christiano Final Presentation":"designwritestudio","Journal":"designwritestudio","Justin Cushing":"designwritestudio","Justin Cushing Final Presentation":"designwritestudio","Karina Benninger Final Presentation":"designwritestudio","Key concepts related to interactive texts":"designwritestudio","LastSlide":"designwritestudio","LastSlide 1":"designwritestudio","LastSlide 2":"designwritestudio","LastSlide 3":"designwritestudio","LastSlide 4":"designwritestudio","Law of Prägnanz":"designwritestudio","Layering":"designwritestudio","LearningCommunities":"designwritestudio","Legibility":"designwritestudio","Life Cycle":"designwritestudio","Linear Text":"designwritestudio","Linking":"designwritestudio","Linking in TiddlyWiki":"designwritestudio","Listing":"designwritestudio","Listing in TiddlyWiki":"designwritestudio","Literary Machines (Nelson)":"designwritestudio","Mac OS X Chrome Workflow: Saving using TiddlyDrive":"designwritestudio","Mac OS X Chrome Workflow: Saving using saveTiddlers":"designwritestudio","Mac OS X Workflow: Serving via ftp.sunyit.edu":"designwritestudio","Mac OS X and Windows Chrome Saving & Serving Workflow: Tiddlyspot TW Creator":"designwritestudio","Madlibs (or other word games)":"designwritestudio","Maintaining Contemporary Citations":"designwritestudio","Making a crit":"designwritestudio","Malyka Hamilton Final Presentation":"designwritestudio","Mapping":"designwritestudio","Marcus Spratley":"designwritestudio","Marcus Spratley Final Presentation":"designwritestudio","Marguerite Final Presentation":"designwritestudio","Marvin Pierre Final Presentation":"designwritestudio","McGuffin 2004 Comparison of hyperstructures":"designwritestudio","Medium":"designwritestudio","Medium Blue Circle":"designwritestudio","Medium Blue Square":"designwritestudio","Megan Final Presentation":"designwritestudio","Mental Model":"designwritestudio","Michael C. Miller Final Presentation":"designwritestudio","Michael s. Final Presentation":"designwritestudio","Mickey Heljic Final Presentation":"designwritestudio","Mimicry":"designwritestudio","Mini-projects for Summer":"designwritestudio","Mnemonic Device":"designwritestudio","Modularity":"designwritestudio","More Topics to Come":"designwritestudio","Most Advanced Yet Acceptable":"designwritestudio","Most Average Facial Appearance Effect":"designwritestudio","Multi-dimensional Slide Show":"designwritestudio","MultiDim Slides: Multi-dimensional Slide Show":"designwritestudio","MultiNav: Multidimensional navigation among tiddlers":"designwritestudio","Multimedia":"designwritestudio","MyTextTiddler":"designwritestudio","Naming the Unnameable: An Approach to Poetry for New Generations":"designwritestudio","Navigating Through A Set of Images":"designwritestudio","Navigating Through A Set of Tiddlers":"designwritestudio","Navigation among tiddlers with buttons":"designwritestudio","Navigation-Help":"designwritestudio","Nelson 1999 Xanalogical Structure":"designwritestudio","Nelson File Structure for the Complex, the Changing and the Indeterminate":"designwritestudio","Nelson on Transclusion":"designwritestudio","Nelson-Computer Lib/Dream Machines":"designwritestudio","Nelson: Discrete or Chunk Style Hypertexts":"designwritestudio","New Here":"designwritestudio","New Tiddler 1":"designwritestudio","New Tiddler 10":"designwritestudio","New Tiddler 11":"designwritestudio","New Tiddler 12":"designwritestudio","New Tiddler 2":"designwritestudio","New Tiddler 3":"designwritestudio","New Tiddler 4":"designwritestudio","New Tiddler 5":"designwritestudio","New Tiddler 6":"designwritestudio","New Tiddler 7":"designwritestudio","New Tiddler 8":"designwritestudio","New Tiddler 9":"designwritestudio","New workflow for setting up tiddlywiki files for critique":"designwritestudio","NewAtDesignWriteStudio":"designwritestudio","Next In Hypertext: The Idea of Hypertext: Screencast Chunk":"designwritestudio","Noon Wednesdays Utica Time":"designwritestudio","Normal Distribution":"designwritestudio","Not Invented Here":"designwritestudio","Note to IDT 575 Students":"designwritestudio","Notes from OER Conference":"designwritestudio","Nudge":"designwritestudio","Objectives":"designwritestudio","Ockham’s Razor":"designwritestudio","Online Synchronous Workshops":"designwritestudio","Open Class: Summer 2021":"designwritestudio","Open Course":"designwritestudio","Open Course Spring 2018":"designwritestudio","Open Education Research Lab":"designwritestudio","Open Source":"designwritestudio","Open Students":"designwritestudio","Operant Conditioning":"designwritestudio","Orientation Sensitivity":"designwritestudio","Origins of the word":"designwritestudio","Orinthea Sommersell Final Presentation":"designwritestudio","Outcomes":"designwritestudio","Paragraph Template":"designwritestudio","Performance Load":"designwritestudio","Performance Versus Preference":"designwritestudio","Personas":"designwritestudio","Picture Superiority Effect":"designwritestudio","Plugin for bookmarks in tiddlywiki":"designwritestudio","Portraits of Hope: Refugees Starting Over":"designwritestudio","Practices and Techniques":"designwritestudio","Presentation:":"designwritestudio","Presentation: Annotation":"designwritestudio","Presentation: Annotation & References":"designwritestudio","Presentation: Designing Interactive Texts I":"designwritestudio","Presentation: Filtering":"designwritestudio","Presentation: Hypertextual Practices: Reading I":"designwritestudio","Presentation: Hypertextual Practices: Reading II":"designwritestudio","Presentation: Hypertextual Practices: Writing I":"designwritestudio","Presentation: Hypertextual Practices: Writing II":"designwritestudio","Presentation: Hypertextual Techniques (Reprise)":"designwritestudio","Presentation: Linking":"designwritestudio","Presentation: Tagging":"designwritestudio","Presentation: Techniques for Hypertextual Writing in TiddlyWiki":"designwritestudio","Presentation: Templating":"designwritestudio","Presentation: Text, Hyper, Wiki, Tiddly":"designwritestudio","Presentation: Text, Interactivity, Writing and Designing":"designwritestudio","Presentation: To Be Determined (Apr03)":"designwritestudio","Presentation: To Be Determined (Apr05)":"designwritestudio","Presentation: To Be Determined (Apr10)":"designwritestudio","Presentation: To Be Determined (Apr12)":"designwritestudio","Presentation: To Be Determined (Apr17)":"designwritestudio","Presentation: To Be Determined (Apr19)":"designwritestudio","Presentation: To Be Determined (Apr24)":"designwritestudio","Presentation: To Be Determined (Apr26)":"designwritestudio","Presentation: To Be Determined (Mar13)":"designwritestudio","Presentation: To Be Determined (Mar15)":"designwritestudio","Presentation: To Be Determined (Mar20)":"designwritestudio","Presentation: To Be Determined (Mar22)":"designwritestudio","Presentation: To Be Determined (Mar27)":"designwritestudio","Presentation: To Be Determined (Mar29)":"designwritestudio","Presentation: Transcluding":"designwritestudio","Presentation: Welcome to Designing & Writing Interactive Texts":"designwritestudio","Presentation: What is Hypertext?":"designwritestudio","Presentations":"designwritestudio","Priming":"designwritestudio","Priority Development Projects: Summer 2021":"designwritestudio","Process API results into a TW":"designwritestudio","Processes involved in creating Interactive Texts":"designwritestudio","Progressive Disclosure":"designwritestudio","Propositional Density":"designwritestudio","Prospect-Refuge":"designwritestudio","Prototyping":"designwritestudio","Proximity":"designwritestudio","PunchShow Macro":"designwritestudio","PunchShow Macro 1":"designwritestudio","Purposes":"designwritestudio","RN1":"designwritestudio","RN10":"designwritestudio","RN11":"designwritestudio","RN12":"designwritestudio","RN13":"designwritestudio","RN14":"designwritestudio","RN15":"designwritestudio","RN16":"designwritestudio","RN17":"designwritestudio","RN18":"designwritestudio","RN19":"designwritestudio","RN2":"designwritestudio","RN20":"designwritestudio","RN21":"designwritestudio","RN22":"designwritestudio","RN23":"designwritestudio","RN24":"designwritestudio","RN25":"designwritestudio","RN26":"designwritestudio","RN27":"designwritestudio","RN28":"designwritestudio","RN29":"designwritestudio","RN3":"designwritestudio","RN30":"designwritestudio","RN31":"designwritestudio","RN32":"designwritestudio","RN33":"designwritestudio","RN34":"designwritestudio","RN35":"designwritestudio","RN36":"designwritestudio","RN37":"designwritestudio","RN38":"designwritestudio","RN39":"designwritestudio","RN4":"designwritestudio","RN40":"designwritestudio","RN41":"designwritestudio","RN42":"designwritestudio","RN43":"designwritestudio","RN44":"designwritestudio","RN45":"designwritestudio","RN46":"designwritestudio","RN47":"designwritestudio","RN48":"designwritestudio","RN49":"designwritestudio","RN5":"designwritestudio","RN50":"designwritestudio","RN51":"designwritestudio","RN52":"designwritestudio","RN53":"designwritestudio","RN54":"designwritestudio","RN55":"designwritestudio","RN56":"designwritestudio","RN57":"designwritestudio","RN58":"designwritestudio","RN59":"designwritestudio","RN6":"designwritestudio","RN60":"designwritestudio","RN61":"designwritestudio","RN62":"designwritestudio","RN63":"designwritestudio","RN64":"designwritestudio","RN65":"designwritestudio","RN66":"designwritestudio","RN67":"designwritestudio","RN68":"designwritestudio","RN69":"designwritestudio","RN7":"designwritestudio","RN70":"designwritestudio","RN71":"designwritestudio","RN72":"designwritestudio","RN73":"designwritestudio","RN74":"designwritestudio","RN75":"designwritestudio","RN76":"designwritestudio","RN77":"designwritestudio","RN78":"designwritestudio","RN79":"designwritestudio","RN8":"designwritestudio","RN80":"designwritestudio","RN81":"designwritestudio","RN82":"designwritestudio","RN83":"designwritestudio","RN84":"designwritestudio","RN85":"designwritestudio","RN9":"designwritestudio","Readability":"designwritestudio","Reading":"designwritestudio","Reading Filters":"designwritestudio","Reading Links":"designwritestudio","Reading Sorts":"designwritestudio","Reading Tags":"designwritestudio","Reading Transclusions":"designwritestudio","Reading and Writing \"Hypertextually\": Children's Literature, Technology and Early Writing Instruction (Hammerberg)":"designwritestudio","Readings":"designwritestudio","Readings: Tue Jan23":"designwritestudio","Readings: Tue Jan23-description":"designwritestudio","Recent Critiques":"designwritestudio","Recognition Over Recall":"designwritestudio","Red Effect":"designwritestudio","Redundancy":"designwritestudio","References":"designwritestudio","References on zzstructure":"designwritestudio","RenameTags":"designwritestudio","Revealing Text":"designwritestudio","Review":"designwritestudio","Review Exercise 1.02":"designwritestudio","Rhizome":"designwritestudio","Roam Alt Demo":"designwritestudio","Rosetta Stone":"designwritestudio","Rule of Thirds":"designwritestudio","Ryan Maher Final Presentation":"designwritestudio","SUNY Poly COM 375 Spring 2018":"designwritestudio","SUNY Poly COM 375 Summer 2021":"designwritestudio","SUNY Poly Classes: Summer 2021":"designwritestudio","SUNY Poly IDT 575 Spring 2018":"designwritestudio","SUNY Poly IDT 575 Summer 2021":"designwritestudio","SUNYChain":"designwritestudio","Satisficing":"designwritestudio","Savanna Preference":"designwritestudio","Saving in TiddlyWiki":"designwritestudio","Scaling Fallacy":"designwritestudio","Scarcity":"designwritestudio","Schedule for Presentations":"designwritestudio","Screencast Chunk: Hypertext":"designwritestudio","Screencast Chunk: Hypertext Demo":"designwritestudio","Screencast Chunk: Hypertext: Four More Words: Designing, Writing, Interactivity, Texts ":"designwritestudio","Screencast Chunk: Hypertext: Four Words: Text, Hyper, Wiki, Tiddly":"designwritestudio","Screencast Chunk: Hypertext: Hypertext in the 2020s: Opportunities 1":"designwritestudio","Screencast Chunk: Hypertext: Hypertext in the 2020s: Opportunities 2":"designwritestudio","Screencast Chunk: Hypertext: Hypertext, Historically Viewed":"designwritestudio","Screencast Chunk: TiddlyWiki Demo":"designwritestudio","Screencast Chunk: Tiddlywiki Demo: Stroll":"designwritestudio","Screencast Chunk: Tiddlywiki Demo: TiddlyRoam":"designwritestudio","Screencast Chunk: Tiddlywiki Demo: XLSX Utilities":"designwritestudio","Screencast Concept":"designwritestudio","Screencast Production Team":"designwritestudio","Selected Wikipedia Articles":"designwritestudio","Self-Similarity":"designwritestudio","Self-designed Exercises":"designwritestudio","Serial Position Effects":"designwritestudio","Shannon MacColl Final Presentation":"designwritestudio","Shaping":"designwritestudio","Share":"designwritestudio","Shared Wikis":"designwritestudio","Shared Wikis by Author":"designwritestudio","Shared Wikis by Author - using Appear":"designwritestudio","Shared Wikis by Authors":"designwritestudio","Shared Wikis by Exercise":"designwritestudio","Show some random illustrations":"designwritestudio","ShowNotesMacro":"designwritestudio","Showing \"What's New\"":"designwritestudio","Signal-to-Noise Ratio":"designwritestudio","Similarity":"designwritestudio","Single Page Application":"designwritestudio","SlideShowMacros":"designwritestudio","Some notes on Tagging":"designwritestudio","Some notes on Transclusion":"designwritestudio","Soren Bjornstad Bio":"designwritestudio","Spring 2018 Final Project Ideas":"designwritestudio","Spring 2018 Studio Presentations":"designwritestudio","Spring 2018: Outcomes - using <<strex>>":"designwritestudio","Spring2018Courses":"designwritestudio","Square":"designwritestudio","Steve Schneider Bio":"designwritestudio","Steven Beckwith Final Presentation":"designwritestudio","Stickiness":"designwritestudio","Storytelling":"designwritestudio","StretchText":"designwritestudio","StretchText Demo":"designwritestudio","Stroll: Tiddlywiki Demo":"designwritestudio","Structural Forms":"designwritestudio","Summer 2018":"designwritestudio","Summer 2018 People":"designwritestudio","Summer 2018 Projects":"designwritestudio","Summer 2018: Getting Started":"designwritestudio","Summer 2021":"designwritestudio","Summer 2021 @DesignWriteStudio":"designwritestudio","Summer 2021-1":"designwritestudio","Syllabus":"designwritestudio","Symmetry":"designwritestudio","TW Design":"designwritestudio","Tabs for each primary section":"designwritestudio","Tagging":"designwritestudio","Tagging in TiddlyWiki":"designwritestudio","Teaching Autoethnography: Personal Writing in the Classroom":"designwritestudio","Technique for Creating Tiddlers in TiddlyWiki":"designwritestudio","Techniques":"designwritestudio","Techniques for Hypertextual Writing in TiddlyWiki":"designwritestudio","Templating":"designwritestudio","Templating in TiddlyWiki":"designwritestudio","Testing Bibtex References from Web Of Science":"designwritestudio","Testing embed for ensemble video":"designwritestudio","Testing the new formula's plugin":"designwritestudio","Testing the workflows: tiddlydesktop to github via node.js & githubdesktop":"designwritestudio","Text":"designwritestudio","Text, Interactivity, Writing and Designing slide show":"designwritestudio","TextSlicer: TiddlyWeb Demo: Screencast Chunk":"designwritestudio","TextSlicer: TiddlyWiki Demo: Screencast Chunk":"designwritestudio","TextStretch":"designwritestudio","Texts":"designwritestudio","The Machine is Us/ing Us":"designwritestudio","The Missing Link: An Introduction to Web Development and Programming":"designwritestudio","The Past Through the Future: A Hypermedia Model for Handling the Information Stored in the Audio Documents":"designwritestudio","The Second Half":"designwritestudio","The Structure of Hypertext Activity (Rosenberg)":"designwritestudio","The Studio for Designing and Writing Interactive Texts @ SUNY Poly":"designwritestudio","The class is an open source class":"designwritestudio","Thinking out loud":"designwritestudio","This is a link":"designwritestudio","Threat Detection":"designwritestudio","Three-Dimensional Projection":"designwritestudio","Thu Apr05":"designwritestudio","Thu Apr12":"designwritestudio","Thu Apr19":"designwritestudio","Thu Apr26":"designwritestudio","Thu Feb01":"designwritestudio","Thu Feb08":"designwritestudio","Thu Feb15":"designwritestudio","Thu Feb22":"designwritestudio","Thu Jan18":"designwritestudio","Thu Jan25":"designwritestudio","Thu Mar01":"designwritestudio","Thu Mar08":"designwritestudio","Thu Mar15":"designwritestudio","Thu Mar22":"designwritestudio","Thu Mar29":"designwritestudio","Tiddler Name":"designwritestudio","TiddlerToBeCreated":"designwritestudio","Tiddlers":"designwritestudio","Tiddly":"designwritestudio","TiddlyAPI":"designwritestudio","TiddlyCast":"designwritestudio","TiddlyCast Episode 1":"designwritestudio","TiddlyCast Episode 2":"designwritestudio","TiddlyCast Episode 3":"designwritestudio","TiddlyCast Episode 4":"designwritestudio","TiddlyCast Episode 5":"designwritestudio","TiddlyCast Episode Guide":"designwritestudio","TiddlyCast Episodes":"designwritestudio","TiddlyCast Episodes Segment Template 1":"designwritestudio","TiddlyCast Episodes Template":"designwritestudio","TiddlyCast Format":"designwritestudio","TiddlyCast Production":"designwritestudio","TiddlyCast01-01":"designwritestudio","TiddlyCast01-02":"designwritestudio","TiddlyCast01-03":"designwritestudio","TiddlyCast01-04":"designwritestudio","TiddlyCast02-01":"designwritestudio","TiddlyCast02-02":"designwritestudio","TiddlyCast: The Idea of Hypertext":"designwritestudio","TiddlyCastBite: The Idea of Hypertext":"designwritestudio","TiddlyCastNavigator":"designwritestudio","TiddlyDemo":"designwritestudio","TiddlyFilm":"designwritestudio","TiddlyMap: Tiddlywiki Demo: Screencast Chunk":"designwritestudio","TiddlyRoam: TiddlyWiki Demo: Screencast Chunk":"designwritestudio","TiddlyStory":"designwritestudio","TiddlySyllabusCreator":"designwritestudio","TiddlyTalk":"designwritestudio","TiddlyWeb: TiddlyWiki Demo: Screencast Chunkc":"designwritestudio","TiddlyWeb: Tiddlywiki Demo: Screencast Chunk":"designwritestudio","TiddlyWiki":"designwritestudio","TiddlyWiki Authors":"designwritestudio","TiddlyWiki Configuration":"designwritestudio","TiddlyWiki Exercises":"designwritestudio","TiddlyWiki Skills":"designwritestudio","TiddlyWiki Stories":"designwritestudio","TiddlyWikiPedia":"designwritestudio","TiddlyWikify SUNY OER Textbooks":"designwritestudio","Tiddlywiki as xanalogical structure":"designwritestudio","Title Slide:":"designwritestudio","Title Slide: 1":"designwritestudio","Toolkit":"designwritestudio","Top-down Lighting Bias":"designwritestudio","Transcluding":"designwritestudio","Transcluding in TiddlyWiki":"designwritestudio","Tue Apr03":"designwritestudio","Tue Apr10":"designwritestudio","Tue Apr17":"designwritestudio","Tue Apr24":"designwritestudio","Tue Feb06":"designwritestudio","Tue Feb13":"designwritestudio","Tue Feb20":"designwritestudio","Tue Feb27":"designwritestudio","Tue Jan16":"designwritestudio","Tue Jan23":"designwritestudio","Tue Jan30":"designwritestudio","Tue Mar06":"designwritestudio","Tue Mar13":"designwritestudio","Tue Mar20":"designwritestudio","Tue Mar27":"designwritestudio","Tue May01":"designwritestudio","Uncanny Valley":"designwritestudio","Uncertainty Principle":"designwritestudio","Understanding Hypertext from Grok TiddlyWiki":"designwritestudio","Uniform Connectedness":"designwritestudio","Universal Principles of Design":"designwritestudio","Untitled":"designwritestudio","Untitled 1":"designwritestudio","Untitled 2":"designwritestudio","Vandendorpe From Papyrus to Hypertext":"designwritestudio","Veblen Effect":"designwritestudio","Video: Exercise 4.04 Directions":"designwritestudio","Videos":"designwritestudio","Visibility":"designwritestudio","Visuospacial Resonance":"designwritestudio","Von Restorff Effect":"designwritestudio","Wabi-sabi":"designwritestudio","Waist-to-Hip Ratio":"designwritestudio","Wayfinding":"designwritestudio","Weakest Link":"designwritestudio","Welcome to TiddlyWiki":"designwritestudio","WelcomeToStrollPartTwoThumbNail.png":"designwritestudio","WelcomeToStrollThumbNail.png":"designwritestudio","What is Designing?":"designwritestudio","What is Hypertext?":"designwritestudio","What is Interactivity?":"designwritestudio","What is Writing?":"designwritestudio","What is a text?":"designwritestudio","WhatWasNew":"designwritestudio","Who does politics?":"designwritestudio","Wiki":"designwritestudio","Wikification of Existing Texts":"designwritestudio","Wikipedia Table into Navigable Wiki":"designwritestudio","Wikipedia Transclusion Definition":"designwritestudio","Workflow for submitted exercises":"designwritestudio","Workshop 1.1":"designwritestudio","Workshop 1.2":"designwritestudio","Workshop 1.3":"designwritestudio","Workshop:":"designwritestudio","Workshop: A TiddlyWiki Essay":"designwritestudio","Workshop: Annotating":"designwritestudio","Workshop: Annotating An Essay":"designwritestudio","Workshop: Annotating a Wikified Essay":"designwritestudio","Workshop: CSS I":"designwritestudio","Workshop: CSS II":"designwritestudio","Workshop: Creating narratives, objects, fields, templates":"designwritestudio","Workshop: Critique Self-Designed Exercises":"designwritestudio","Workshop: Engaging in Hypertextual Practices":"designwritestudio","Workshop: Intro SVG & Images":"designwritestudio","Workshop: Lists & Filters":"designwritestudio","Workshop: New Tiddlers, Tagging, Linking":"designwritestudio","Workshop: Open Topics (Jan 17)":"designwritestudio","Workshop: Plugins":"designwritestudio","Workshop: Reference Tiddlers. Essay Tiddlers.":"designwritestudio","Workshop: Saving, Serving, New Tiddlers":"designwritestudio","Workshop: Saving, Serving, New Tiddlers Text":"designwritestudio","Workshop: Student Review (Monday)":"designwritestudio","Workshop: Table of Contents, Journals, New Here, Excising Text":"designwritestudio","Workshop: Table of Contents, Sidebars":"designwritestudio","Workshop: To Be Determined (Apr03)":"designwritestudio","Workshop: To Be Determined (Apr05)":"designwritestudio","Workshop: To Be Determined (Apr10)":"designwritestudio","Workshop: To Be Determined (Apr12)":"designwritestudio","Workshop: To Be Determined (Apr17)":"designwritestudio","Workshop: To Be Determined (Apr19)":"designwritestudio","Workshop: To Be Determined (Apr24)":"designwritestudio","Workshop: To Be Determined (Apr26)":"designwritestudio","Workshop: To Be Determined (Mar13)":"designwritestudio","Workshop: To Be Determined (Mar15)":"designwritestudio","Workshop: To Be Determined (Mar20)":"designwritestudio","Workshop: To Be Determined (Mar22)":"designwritestudio","Workshop: To Be Determined (Mar27)":"designwritestudio","Workshop: To Be Determined (Mar29)":"designwritestudio","Workshop: XLSX import":"designwritestudio","Workshops":"designwritestudio","Write in-depth read.me and explanation of DesignWrite Github Repository":"designwritestudio","Writing":"designwritestudio","Writing (Term)":"designwritestudio","Writing Filters":"designwritestudio","Writing Links":"designwritestudio","Writing Sorts":"designwritestudio","Writing Tags":"designwritestudio","Writing Templates":"designwritestudio","Writing Transclusions":"designwritestudio","Writing in College: From Competence to Excellence":"designwritestudio","Writing in TiddlyWiki":"designwritestudio","XLSX Utilities: TiddlyWiki Demo: Screencast Chunk":"designwritestudio","YouTubeMacro":"designwritestudio","Zoom Room":"designwritestudio","ZoomRoom":"designwritestudio","annotation 8.1":"designwritestudio","annotator-readme":"designwritestudio","artifact":"designwritestudio","biblio explorations":"designwritestudio","building word games with tiddlywiki":"designwritestudio","chrome-settings.png":"designwritestudio","class template":"designwritestudio","class-days-rows":"designwritestudio","class-days-rows-class-notes":"designwritestudio","class-days-rows-date":"designwritestudio","class-days-rows-exercise":"designwritestudio","class-days-rows-exercise-number":"designwritestudio","class-days-rows-presentation-topic":"designwritestudio","class-days-rows-title":"designwritestudio","class-days-rows-week-number":"designwritestudio","class-exercises":"designwritestudio","close-control-panel.png":"designwritestudio","close-sideeditor-tiddler.png":"designwritestudio","colors":"designwritestudio","concepts":"designwritestudio","control-panel-info.png":"designwritestudio","control-panel.png":"designwritestudio","crit-link":"designwritestudio","crituqe macro":"designwritestudio","crituqe urls":"designwritestudio","define":"designwritestudio","designwriteyoutubelogo.png":"designwritestudio","dictionary":"designwritestudio","directions":"designwritestudio","download-for-critique":"designwritestudio","dws-class-days":"designwritestudio","dws-class-days-sheet1":"designwritestudio","eTexts: Summer 2018 Project":"designwritestudio","ebooks on Hypertext":"designwritestudio","ebrary records":"designwritestudio","ebrary-highlighted-text.png":"designwritestudio","ebrary-record.png":"designwritestudio","enclosing a word or phrase in a set of double brackets":"designwritestudio","exercise template":"designwritestudio","exercise template 2":"designwritestudio","exercise-directions template":"designwritestudio","exercise-group":"designwritestudio","exercise-group template":"designwritestudio","fabric":"designwritestudio","final presentation template":"designwritestudio","formal definition of dws":"designwritestudio","fpnl by single tag Macro sorted":"designwritestudio","games? from the folks...":"designwritestudio","google query for delicious tiddlywiki":"designwritestudio","hello-world.png":"designwritestudio","hide sidebar":"designwritestudio","hilite macros":"designwritestudio","howMany macro":"designwritestudio","interactive":"designwritestudio","jkIII-on-google-news-expanded.png":"designwritestudio","jkIII-on-google-news-more-button.png":"designwritestudio","jkIII-on-google-news.png":"designwritestudio","justin-cushing-suggestion":"designwritestudio","links":"designwritestudio","list draggable":"designwritestudio","look at these!":"designwritestudio","maher":"designwritestudio","more":"designwritestudio","motivations":"designwritestudio","mouse-locator.png":"designwritestudio","myfirstwiki-tiddler.png":"designwritestudio","nelson-discrete-hypertexts-dm19.png":"designwritestudio","new slide macro":"designwritestudio","new-tiddler.png":"designwritestudio","new-tiddler2.png":"designwritestudio","newhere":"designwritestudio","nextButton.jpeg":"designwritestudio","number":"designwritestudio","object":"designwritestudio","objectives":"designwritestudio","original":"designwritestudio","presentation template":"designwritestudio","punchshow macro tiddlers":"designwritestudio","quick build of a collaborative (kind of) wiki":"designwritestudio","readings template":"designwritestudio","reload-wiki.png":"designwritestudio","reviews":"designwritestudio","save-tidders.png":"designwritestudio","screenshot of studio definition":"designwritestudio","self-designed exercise template":"designwritestudio","setup":"designwritestudio","shared-exercises template":"designwritestudio","sharing":"designwritestudio","show-in-finder.png":"designwritestudio","showdox":"designwritestudio","side-editor.png":"designwritestudio","signs":"designwritestudio","sings":"designwritestudio","slidedev - making slides from code":"designwritestudio","speech":"designwritestudio","steve annotation 8.1":"designwritestudio","sunyit-ftp-connection.png":"designwritestudio","sunyit-ftp-directory.png":"designwritestudio","sunyit-ftp-upload.png":"designwritestudio","synonym template":"designwritestudio","term template":"designwritestudio","testing-the-save.png":"designwritestudio","text.hyper.wiki.tiddly":"designwritestudio","texts":"designwritestudio","this is a new tiddler":"designwritestudio","this is a new tiddler, testing the workflos":"designwritestudio","this is an image":"designwritestudio","tiddlycast-01-01.png":"designwritestudio","tiddlycast-01-02.png":"designwritestudio","tiddlycast-guest-bio":"designwritestudio","tiddlycast01-01.png":"designwritestudio","tiddlycast02-02.png":"designwritestudio","tiddlywiki":"designwritestudio","tw5-tiddlyspot.png":"designwritestudio","twyt":"designwritestudio","use":"designwritestudio","wikipedia":"designwritestudio","wikipedia macro":"designwritestudio","workshop template":"designwritestudio","workshops described":"designwritestudio","xlsx utilities":"designwritestudio","zoom_0.mp4 1":"designwritestudio","zoom_0.mp4 2":"designwritestudio"}
{" Screencast Chunk: Hypertext: Hypertext in the 2020s: Opportunities 3":"\"18c8b0baaf9eccc8c9332c7bee7e671f\"","#JKIII on Google News":"\"2f8e445a2c7ef17be8b256d21ea37834\"","$:/.tb/modules/startup/hide-sidebar.js":"\"cfad4920f74c29f857c4877473a34623\"","$:/1":"\"37c5f943be7b5f84360cb743e4541ed3\"","$:/2":"\"e0483c330a1b36fb61f20f3e25834b15\"","$:/3":"\"f89496c3a2535d6838e5ed414c19f15d\"","$:/375":"\"b3028e1b8c82ffd3a759abfb50dbade6\"","$:/575":"\"f164af6f4ef7b52f7381645181fb5860\"","$:/About Designing & Writing Interactive Texts":"\"4e3e7285f560e5dc72698a25bad9d3e8\"","$:/Comments on 1.01 Hello World! (Alicia Bower (Flinn), 18Jan 8:35 PM)":"\"46d448240d603e7278a97d00e49281d1\"","$:/Comments on 1.01 Hello World! (Amber Goodfriend, 17Jan 3:39 PM)":"\"b8a17c1428008e72cd74958c324314ab\"","$:/Comments on 1.01 Hello World! (Andrew Houde, 17Jan 4:49 PM)":"\"dcfb1bbd9f419184240c294b2eaaa7ca\"","$:/Comments on 1.01 Hello World! (Benjamin Furbeck, 17Jan 7:24 AM)":"\"eeafaa13c28cd97b10e286d925a0c1d2\"","$:/Comments on 1.01 Hello World! (Brandon Helsing, 17Jan 9:50 AM)":"\"a7ba8d2e8682be2c026cab34969f82a4\"","$:/Comments on 1.01 Hello World! (Carson Palmer, 17Jan 6:45 PM)":"\"93180c9668b3f6d3247244c2f44eb5a1\"","$:/Comments on 1.01 Hello World! (Chris Copeland, 17Jan 7:13 AM)":"\"f344c3c386859648ae1015d2a060a104\"","$:/Comments on 1.01 Hello World! (Derek Smith, 17Jan 10:51 AM)":"\"589a6e0429c9cb3af317d1e18b5694d7\"","$:/Comments on 1.01 Hello World! (Dylan Pagillo, 16Jan 11:30 PM)":"\"ffc569a8c294530701916013ad2fe248\"","$:/Comments on 1.01 Hello World! (Elizabeth Simonelli, 16Jan 9:55 PM)":"\"dc47c546b7739309f5fe735489bbba6b\"","$:/Comments on 1.01 Hello World! (Eric Brown, 18Jan 10:22 AM)":"\"ad83a7250fbe32d63868fd5e794327dc\"","$:/Comments on 1.01 Hello World! (Gladson Natarajan, 17Jan 2:26 PM)":"\"ce4447b283aa57cc4052b2f5de2d0068\"","$:/Comments on 1.01 Hello World! (Gladson Natarajan, 17Jan 2:29 PM)":"\"9ea94ab4d05f5c9521d9871f176122c9\"","$:/Comments on 1.01 Hello World! (James Ward, 18Jan 9:24 AM)":"\"ee67f4df84d2424fcea1697ec0e2005e\"","$:/Comments on 1.01 Hello World! (Jared Duquette, 17Jan 12:03 PM)":"\"835b8d60b3ab57255884983c6f4c6b00\"","$:/Comments on 1.01 Hello World! (Jillian Christiano, 17Jan 4:27 PM)":"\"1b65d588188b81420a8126ef530ada4a\"","$:/Comments on 1.01 Hello World! (Justin Cushing, 17Jan 6:34 PM)":"\"4ec0751a11f2ce2a7344a1c288474c8d\"","$:/Comments on 1.01 Hello World! (MS, 18Jan 11:28 AM)":"\"4af2d10d76149953eed2bf1ce89bf40d\"","$:/Comments on 1.01 Hello World! (Malyka, 17Jan 6:39 PM)":"\"f80c06bc89d828607e67bd3f5950012a\"","$:/Comments on 1.01 Hello World! (Malyka, 17Jan 7:20 PM)":"\"217eb119b54a4cd0faef461e58e53097\"","$:/Comments on 1.01 Hello World! (Marcus Spratley, 17Jan 11:35 PM)":"\"6124adc1224efa36c64813ad31664526\"","$:/Comments on 1.01 Hello World! (Marvin Pierre, 18Jan 2:16 PM)":"\"5771c323c5042c8ed096fc71ed0c2352\"","$:/Comments on 1.01 Hello World! (Megan, 17Jan 12:45 PM)":"\"68d228082aac78fc1c6982b7ca44d8b8\"","$:/Comments on 1.01 Hello World! (Michael, 18Jan 10:21 AM)":"\"ee21638719daf430b1523ffa37c02f17\"","$:/Comments on 1.01 Hello World! (Mickey, 17Jan 8:33 PM)":"\"59e4d603f597c6c5af8e2065f5064966\"","$:/Comments on 1.01 Hello World! (Nell Evangeline, 18Jan 10:03 AM)":"\"199153d8aaaebd458ceed052e694818f\"","$:/Comments on 1.01 Hello World! (Orinthea Sommersell, 17Jan 5:58 PM)":"\"01a1bbe635f479cf6922032d6b64d715\"","$:/Comments on 1.01 Hello World! (Ray Buckley, 18Jan 10:10 AM)":"\"daca9a2d851f5416c3fe36126ddded27\"","$:/Comments on 1.01 Hello World! (Ryan Maher, 17Jan 11:18 AM)":"\"30fca77debe7e4d206636217a440e597\"","$:/Comments on 1.01 Hello World! (SeanH, 16Jan 11:00 PM)":"\"2bc9e77af4baf236f72565840353be94\"","$:/Comments on 1.01 Hello World! (Shannon MacColl, 18Jan 8:37 PM)":"\"3fc1164b2946228885e2b8f2d4ae8bf1\"","$:/Comments on 1.01 Hello World! (Sharon Healy, 17Jan 5:54 PM)":"\"6ab409ba096601ecdf562d2cc031b327\"","$:/Comments on 1.01 Hello World! (Steve, 17Jan 4:57 PM)":"\"57314cfbee7deafad618856aad19d802\"","$:/Comments on 1.01 Hello World! (Tristan Retzke, 18Jan 10:53 AM)":"\"dd3186054d2645f6ca91c2aa823fae2d\"","$:/Comments on 1.02 About Me (Alicia Bower (Flinn), 18Jan 8:29 PM)":"\"c8b586f5fe84efcfd0f0bc2e54ffa487\"","$:/Comments on 1.02 About Me (Amber Goodfriend, 21Jan 5:22 PM)":"\"829674b4c06ee6cc1a9c7f8979470d5d\"","$:/Comments on 1.02 About Me (Andrew Houde, 21Jan 11:14 PM)":"\"2763fff945cb63fc24280c79df0b9de8\"","$:/Comments on 1.02 About Me (Benjamin Furbeck, 18Jan 11:43 AM)":"\"804f14218e83f4e639f485f9c0057671\"","$:/Comments on 1.02 About Me (Brandon Helsing, 20Jan 3:46 PM)":"\"015d39f9d7f37ba6e7343c89c82843ae\"","$:/Comments on 1.02 About Me (Carson Palmer, 22Jan 12:57 AM)":"\"b7b7e89f66f7b1031a7851a3cf320c7c\"","$:/Comments on 1.02 About Me (Chris Copeland, 18Jan 2:41 PM)":"\"70ff429309b6cd45474536fe4e6b28a0\"","$:/Comments on 1.02 About Me (Derek Smith, 21Jan 3:14 PM)":"\"f2491c4640132dbc289f733ce98b313b\"","$:/Comments on 1.02 About Me (Dylan Neil, 21Jan 11:32 PM)":"\"23bc9667d684645d79a74fe73e434b0d\"","$:/Comments on 1.02 About Me (Elizabeth Simonelli, 18Jan 12:11 PM)":"\"ea9a1fa0e3ee0805be4b1f7424c89dd3\"","$:/Comments on 1.02 About Me (Eric Brown, 20Jan 6:55 PM)":"\"eb1a8f72955b4233bd913ca735f61815\"","$:/Comments on 1.02 About Me (Gladson Natarajan, 20Jan 2:06 PM)":"\"648e003fb7fee648ffa8614d48cd610a\"","$:/Comments on 1.02 About Me (James Ward, 22Jan 2:46 PM)":"\"4d5ce853ff890f1aacd5e312b9763a6d\"","$:/Comments on 1.02 About Me (Jared Duquette, 21Jan 10:04 PM)":"\"eb5dfeb1c9bb2217264eb958ff4040e7\"","$:/Comments on 1.02 About Me (Jillian Christiano, 18Jan 12:05 PM)":"\"426cc5276f16436dc1622fb096a05337\"","$:/Comments on 1.02 About Me (Justin Cushing, 20Jan 11:39 AM)":"\"e8b2874c36592da1dc4a5752c01a50ed\"","$:/Comments on 1.02 About Me (Karina, 19Jan 8:27 PM)":"\"eb8cfb01f8069048ccde742ab38e0efb\"","$:/Comments on 1.02 About Me (Malyka, 21Jan 10:32 PM)":"\"e47c08f7e94d873495fd221c40a266a8\"","$:/Comments on 1.02 About Me (Marcus Spratley, 21Jan 7:08 AM)":"\"db70b9091e1c208bb655ffb4a11eae1f\"","$:/Comments on 1.02 About Me (Marvin Pierre, 22Jan 2:55 AM)":"\"e590ce713891cd52b830883e1bb72fa7\"","$:/Comments on 1.02 About Me (Marvin Pierre, 22Jan 4:10 PM)":"\"9f90a3486fad6ff1a15355ce44e183bd\"","$:/Comments on 1.02 About Me (Max Nadel, 22Jan 7:23 PM)":"\"1f80115765125cdf9edfe5adbf17b443\"","$:/Comments on 1.02 About Me (Megan, 18Jan 11:42 AM)":"\"74f99bef4048460f2220a08045784590\"","$:/Comments on 1.02 About Me (Michael, 18Jan 11:51 AM)":"\"5d76639676e17c76becf7c6433409b31\"","$:/Comments on 1.02 About Me (Mickey, 18Jan 11:43 AM)":"\"f68de910f8fb6a77bcdaaed1bcfdb33e\"","$:/Comments on 1.02 About Me (Orinthea Sommersell, 20Jan 12:10 PM)":"\"559f9494eb7ba163fef564caac3cf858\"","$:/Comments on 1.02 About Me (Ray Buckley, 18Jan 11:52 AM)":"\"3c2bc14052d2aba1945933b5425258ae\"","$:/Comments on 1.02 About Me (Ryan Maher, 18Jan 1:32 PM)":"\"09deb6cbf455f8d8710f4fab3d955e80\"","$:/Comments on 1.02 About Me (SHallenbeck, 22Jan 9:41 PM)":"\"a4916bec139af16c38a9592ab6907e33\"","$:/Comments on 1.02 About Me (Shannon MacColl, 22Jan 8:01 AM)":"\"66a36c6aa92931d58329828fcf80821b\"","$:/Comments on 1.02 About Me (Sharon Healy, 22Jan 11:12 AM)":"\"9d9905e008dd373f1f98322dd3141156\"","$:/Comments on 1.02 About Me (Sharon Healy, 22Jan 6:25 AM)":"\"db7dcc190e96ca79440df2e81bf9d783\"","$:/Comments on 1.02 About Me (Steve Beckwith, 18Jan 11:42 AM)":"\"1e699873e1006118081be801b0c0c84c\"","$:/Comments on 1.02 About Me (Tristan Retzke, 20Jan 11:04 PM)":"\"87cbc31d268c57755ae91952311bf480\"","$:/Comments on 2.02 Objects (Alicia Bower (Flinn), 28Jan 11:23 PM)":"\"ca0d9899cf904b1c530b867c7b570563\"","$:/Comments on 2.02 Objects (Andrew Houde, 28Jan 6:41 PM)":"\"8fb0c493455cfb1829e46f433610c3fc\"","$:/Comments on 2.02 Objects (Benjamin Furbeck, 25Jan 7:50 PM)":"\"d0d1b28dbde681afbcb45e7036dc5623\"","$:/Comments on 2.02 Objects (Brandon Helsing, 28Jan 10:33 PM)":"\"741d572bfdbef074db9d939f1baad640\"","$:/Comments on 2.02 Objects (Chris Copeland, 25Jan 5:22 PM)":"\"9a7ce0022629fb4e3022a852dce032b5\"","$:/Comments on 2.02 Objects (Derek Smith, 28Jan 10:31 PM)":"\"6a057d02bf0a03c6efbb42377454fb4f\"","$:/Comments on 2.02 Objects (Dylan Pagillo, 29Jan 12:38 AM)":"\"32f6116ccbad459368c244435c123596\"","$:/Comments on 2.02 Objects (Justin Cushing, 29Jan 12:05 AM)":"\"fae0d74e6c6a206ebb571ddbf6b43ee1\"","$:/Comments on 2.02 Objects (Karina, 29Jan 8:36 PM)":"\"8220a275e0427cd7a477873fee77f2de\"","$:/Comments on 2.02 Objects (Marvin Pierre, 28Jan 5:25 PM)":"\"c58fda804f9612d505b499004667da5d\"","$:/Comments on 2.02 Objects (Orinthea, 28Jan 3:51 PM)":"\"83bca8a23398a6e27358dd334ea20b5f\"","$:/Comments on 2.02 Objects (Ryan Maher, 28Jan 10:28 PM)":"\"32f5e9f765d75faded1f88491053c9bf\"","$:/Comments on 2.02 Objects (SHallenbeck, 27Jan 10:13 PM)":"\"aa289ecda4957dd8b285eace341d1905\"","$:/Comments on 2.02 Objects (Shannon MacColl, 28Jan 1:21 AM)":"\"2dc289f58926cd5fb03187dead4a2a18\"","$:/Comments on 2.02 Objects (Steve B, 25Jan 11:48 AM)":"\"c3355487501477d1e31e6b96f3d061bc\"","$:/Comments on 2.02 Objects (Tristan Retzke, 28Jan 8:30 AM)":"\"d6c342fd20a61bbc033d4cd8a955d604\"","$:/Comments on 4.01 Annotations (Andrew Houde, 11Feb 9:55 PM)":"\"9c34fa60b1b05bc10d5a11a6832b02cc\"","$:/Comments on 4.01 Annotations (SHallenbeck, 10Feb 12:40 PM)":"\"5e2f9ed4f0ac7aa7244fe718e17679aa\"","$:/Comments on 4.03 Writing a Narrative Essay (Alicia Bower (Flinn), 22Feb 10:51 AM)":"\"30942e116638e170c8ff649bba957a9c\"","$:/Comments on 4.03 Writing a Narrative Essay (Brandon Helsing, 26Feb 1:03 AM)":"\"72be85327acebe6b915d9c8436957221\"","$:/Comments on 4.03 Writing a Narrative Essay (Gladson Natarajan, 21Feb 3:13 PM)":"\"f8abbb1aef3f76cb54248f400c868824\"","$:/Comments on 4.03 Writing a Narrative Essay (Marcus Spratley, 26Feb 1:32 AM)":"\"8064d99673657d30f076f26791e3f561\"","$:/Comments on 4.03 Writing a Narrative Essay (Shannon MacColl, 25Feb 6:04 AM)":"\"a2d00811487e56b9bbab0df585d80c95\"","$:/Comments on 4.03 Writing a Narrative Essay (Steve B, 20Feb 10:49 AM)":"\"bd8f1e51d4e64da8eeb08af5216c1a98\"","$:/Comments on 4.04 Hypertext in the 21st Century (Megan, 26Feb 1:38 PM)":"\"8d2d204c4e1cb53058a4ef07ed97d189\"","$:/DefaultTiddlers":"\"34015562c58aa94d5b1754d7a9044bad\"","$:/SharedWikisImporter":"\"ab5d00659e55ee46547150fbc62ec868\"","$:/SharedWikisImporter/ImportSpecifiers/Field 18":"\"93b7d3dd0f7677b29e042416331b5f93\"","$:/SharedWikisImporter/ImportSpecifiers/Field 19":"\"03185df8f34f5746365c4375dff87d39\"","$:/SharedWikisImporter/ImportSpecifiers/Field 20":"\"3f72a3ec11d4a82b829e9f8f8c8f1fc1\"","$:/SharedWikisImporter/ImportSpecifiers/Field 21":"\"8a3f561a23875b04296e170c4f27cc34\"","$:/SharedWikisImporter/ImportSpecifiers/Field 22":"\"bfa18278954dd30799e930db8c6b9080\"","$:/SharedWikisImporter/ImportSpecifiers/Field 23":"\"f734554b73d99e88357a5d04b3b0be0d\"","$:/SharedWikisImporter/ImportSpecifiers/Row 3":"\"ec875742291aba5d381768b7da09861a\"","$:/SharedWikisImporter/ImportSpecifiers/Sheet 2":"\"0da80c12f4d05fc057508b561a7022df\"","$:/SiteSubtitle":"\"66ac8ecabafd4d15b4d5eafcdf5f231a\"","$:/SiteTitle":"\"ef2d08bb11cdac0bcae54683d6171ed2\"","$:/UploadName":"\"014cccbbf06ad4ec3fad0de45d86840b\"","$:/_ExcelImporter/ImportSpecifiers/Field":"\"9703d6fe8269eb9c7b34ee218c0e0d0d\"","$:/_ExcelImporter/ImportSpecifiers/Field 1":"\"b5a19df2955d931bc42962d75fc4482d\"","$:/_ExcelImporter/ImportSpecifiers/Field 10":"\"d0b48d83d36fbf47477aba5beb928443\"","$:/_ExcelImporter/ImportSpecifiers/Field 11":"\"c4402b535c1813598b5c9e102cf4e6f1\"","$:/_ExcelImporter/ImportSpecifiers/Field 12":"\"f3fed3ed583f48695ec8c2d5685fcb0d\"","$:/_ExcelImporter/ImportSpecifiers/Field 13":"\"d78988b76c51756b913396ad0867e41f\"","$:/_ExcelImporter/ImportSpecifiers/Field 14":"\"a3066c7674e37320f699d21db0ecb0df\"","$:/_ExcelImporter/ImportSpecifiers/Field 15":"\"82528610eb3ce0b9d7f2b82b53c0f0cf\"","$:/_ExcelImporter/ImportSpecifiers/Field 16":"\"33e38d0811ca286d5defd2c3cc7b7b0d\"","$:/_ExcelImporter/ImportSpecifiers/Field 17":"\"cf8dcf8e61f8a27a5b097137952c4fca\"","$:/_ExcelImporter/ImportSpecifiers/Field 18":"\"2bc33a9d5f9e0514d9911b167258bd9d\"","$:/_ExcelImporter/ImportSpecifiers/Field 19":"\"0b95daadbd01f96ed3d8273e4becfaea\"","$:/_ExcelImporter/ImportSpecifiers/Field 2":"\"040b279d361d3e68acbadfff8c45e7ab\"","$:/_ExcelImporter/ImportSpecifiers/Field 20":"\"f8efd4fdd71cd03e6fb72620a48f59c3\"","$:/_ExcelImporter/ImportSpecifiers/Field 21":"\"275e2e8d4cd94395f474353cd37a73f5\"","$:/_ExcelImporter/ImportSpecifiers/Field 22":"\"377d0e1c0abeb37cc2180825b04c78cf\"","$:/_ExcelImporter/ImportSpecifiers/Field 23":"\"174ed4583b0b6b9c49d878714586b23c\"","$:/_ExcelImporter/ImportSpecifiers/Field 24":"\"9e7d186fb09032d74b4530eb09fd4027\"","$:/_ExcelImporter/ImportSpecifiers/Field 25":"\"54358ae2aebf29bb51bbec5c328da978\"","$:/_ExcelImporter/ImportSpecifiers/Field 26":"\"c3679a6cee744d22dd6581304853c387\"","$:/_ExcelImporter/ImportSpecifiers/Field 27":"\"4727aba86343daccc166a08e5729940c\"","$:/_ExcelImporter/ImportSpecifiers/Field 28":"\"f576c8352d3a9a95aeec45a9b06b3aa4\"","$:/_ExcelImporter/ImportSpecifiers/Field 29":"\"aa8bc2c04511f66604175e3ac4fb9c8f\"","$:/_ExcelImporter/ImportSpecifiers/Field 3":"\"c7d1a68be36ad67d01377fa51266850e\"","$:/_ExcelImporter/ImportSpecifiers/Field 30":"\"e8940f191eb3973e0377573cb830e9e0\"","$:/_ExcelImporter/ImportSpecifiers/Field 31":"\"fdc11a78906f1e14bde958a21e9e6c02\"","$:/_ExcelImporter/ImportSpecifiers/Field 32":"\"f87492365375f8737210c13329b836aa\"","$:/_ExcelImporter/ImportSpecifiers/Field 33":"\"2c3fab3eea108c0a040c487954cd6e9b\"","$:/_ExcelImporter/ImportSpecifiers/Field 34":"\"3e0b0bb772cb3e70d3b72bdff62018c9\"","$:/_ExcelImporter/ImportSpecifiers/Field 35":"\"4a33a2fc7d0ed2426b655a9ecbcb7b30\"","$:/_ExcelImporter/ImportSpecifiers/Field 36":"\"3e52844edb784441bd5c621fb568725b\"","$:/_ExcelImporter/ImportSpecifiers/Field 37":"\"0dcfe0be4a49ede99be94d07857aaa90\"","$:/_ExcelImporter/ImportSpecifiers/Field 38":"\"2115b06e58aa044241b705391ae8724e\"","$:/_ExcelImporter/ImportSpecifiers/Field 39":"\"26d73001f1c278133e9c0b95e4bb3d18\"","$:/_ExcelImporter/ImportSpecifiers/Field 4":"\"f030a070ae7bc4ca17e77e3399a20239\"","$:/_ExcelImporter/ImportSpecifiers/Field 40":"\"f7e0a3f4ddd32b65dd91007cff898194\"","$:/_ExcelImporter/ImportSpecifiers/Field 41":"\"068e52e143cc056ad1ae86bb4f6cacb7\"","$:/_ExcelImporter/ImportSpecifiers/Field 5":"\"1af237e202927580c11dcecc2da4762e\"","$:/_ExcelImporter/ImportSpecifiers/Field 6":"\"2c513940153b9a56e26317911105416b\"","$:/_ExcelImporter/ImportSpecifiers/Field 7":"\"3bbce9e990a3ad0edbba2a54438b9467\"","$:/_ExcelImporter/ImportSpecifiers/Field 8":"\"6c263df5e25068454e045c87d4976cd2\"","$:/_ExcelImporter/ImportSpecifiers/Field 9":"\"3fca672b5217d12dc3dd984f6632fc77\"","$:/_ExcelImporter/ImportSpecifiers/Row":"\"c6d6f43b383e52e907a04652bb146ebd\"","$:/_ExcelImporter/ImportSpecifiers/Row 1":"\"37e52e71ff3ea68be2b159e98df56af2\"","$:/_ExcelImporter/ImportSpecifiers/Row 2":"\"a00e9e7319c81e741b57b20b7d047e3f\"","$:/_ExcelImporter/ImportSpecifiers/Row 3":"\"fcfc7b848d6d3d71f31eda95498b1c5b\"","$:/_ExcelImporter/ImportSpecifiers/Row 4":"\"133d23cc63f15b0d7fab443f7a441cd2\"","$:/_ExcelImporter/ImportSpecifiers/Row 5":"\"e34c1cf25cba41c7a4898dd7dd8c553e\"","$:/_ExcelImporter/ImportSpecifiers/Sheet":"\"0b6029690a654e8449113986e03f7955\"","$:/_ExcelImporter/ImportSpecifiers/Sheet 1":"\"47ca30c03c4bd91bcce75000cdf8734f\"","$:/_ExcelImporter/ImportSpecifiers/Sheet 2":"\"c8991e109c1ef73131b65f490cb49265\"","$:/_ExcelImporter/ImportSpecifiers/Sheet 3":"\"caf6f1edd2d8cf1fba4878f7cde9d4cf\"","$:/_ExcelImporter/ImportSpecifiers/Sheet 4":"\"6c6d61238e55055b6ceca79083541bbd\"","$:/_ExcelImporter/ImportSpecifiers/Workbook":"\"325d4c5645ed9174ef8dafb382b20b41\"","$:/_ExcelImporter/ImportSpecifiers/Workbook 1":"\"51b35d3fc7b8f53c7e2d3c445599bdea\"","$:/_ExcelImporter/ImportSpecifiers/Workbook 2":"\"cf3d3478cfdce656bcdda648da3966eb\"","$:/_Menu/Home/Configuration/Options":"\"68636a449d9388910cb610b5010ec1a8\"","$:/_TWaddle/Stretch/CSS":"\"910b33c75fc1d6d279dd9dd789affce4\"","$:/_TWaddle/Stretch/Macro":"\"64f77569d85831aabb2e9c2cefb6ac6b\"","$:/_telmiger/ref":"\"13877fa9b71345bb5f4f4c5d2df398dd\"","$:/_telmiger/strex":"\"6a28f27baac0a0ed265a6dd7ec972399\"","$:/_telmiger/strex.css":"\"f7ee23441d01071f6d740b7d261b0785\"","$:/_telmiger/utils/HashStr.js":"\"c4f147be412515b66c4054902248491d\"","$:/about":"\"1a05677c1234bfc9601dcdd4ab39fc5f\"","$:/com":"\"d3ccfe8311eb0bee2816a0865ada98ed\"","$:/components":"\"d01021f3a452bb5d33975815f9119d82\"","$:/config/AnimationDuration":"\"cebdc72131d560af14887c6b2b92d988\"","$:/config/Comments/EnableFilter":"\"6f74eb2ced59d4ae09b005579fcf1cfc\"","$:/config/DefaultSidebarTab":"\"6d37b93e9083c43eabc7bcca39d79b6a\"","$:/config/HideSidebarOnStartup":"\"86ae186e04fbe49f2fac8250871b838d\"","$:/config/Manager/Filter":"\"50d05461e802726461c0b1852867d49c\"","$:/config/Manager/Show":"\"10c03a6b3340f50cd52236a097003643\"","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home":"\"fda4536ba27d47346fd97578a3f08631\"","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import":"\"0645278ff704c7192783ab85d43f86c7\"","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal":"\"1cf175976df0017ccecb8ed226485056\"","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh":"\"0b737164d022d936d1cde775de0e7baa\"","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview":"\"01d03f73c5bfbec8e707d417c67f32b4\"","$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme":"\"45e0b97627540be2bdeaffdf0affbe14\"","$:/config/Plugins/Disabled/$:/plugins/DesignWriteStudio/Annotator":"\"9f0e6027e1b06d9a745bd7309bed09e2\"","$:/config/RelinkOnRename":"\"582a3e129632affdb0259448a8ffd8b6\"","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/edit":"\"cafcc0ca4e68d4f34d257991728eff51\"","$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here":"\"dd5da2dd783a31bf7c649c0d8dfd7417\"","$:/config/ViewToolbarButtons/Visibility/$:/plugins/TWaddle/SideEditor/Button":"\"43949027c3cd0066d11f320a87dd0425\"","$:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec":"\"aa4e267b56e9cb4c43b87b2c0b87b5d0\"","$:/core/ui/Buttons/export-tiddler":"\"f627a6acbcf15d102ab8ce813bbfeb3d\"","$:/core/ui/Buttons/more-tiddler-actions":"\"25f28bd21051358afab357c6126b5fc5\"","$:/core/ui/LinkTemplate":"\"df6aaa48f5b44dc7dcbd5bf926fea30a\"","$:/core/ui/MoreSideBar/Missing":"\"0daf82f4257c3c90593988b618e730a4\"","$:/core/ui/SideBar/More":"\"f3bef52b5958a33674b012485b5a1585\"","$:/core/ui/SideBar/Open":"\"2fe43e9fd5d835c22beebaa83c5fcf6f\"","$:/core/ui/SideBar/Recent":"\"8cff0cd48e1ab95143625fb52ee13bec\"","$:/core/ui/SideBar/Tools":"\"cf0f2e204c89a63e4d824e03f3ecd222\"","$:/core/ui/TopBar/menu":"\"546c3d0b9ac7b41bdb023e0d5bd4dae5\"","$:/core/ui/ViewTemplate":"\"42b5a0cfeac5bbf14591ede866fefefb\"","$:/core/ui/ViewTemplate/endslideshow":"\"01c529b83d13ae9ffec3753b79967a17\"","$:/core/ui/ViewTemplate/next":"\"9e5a4cbd3f7a791f8cf861955db3f5f2\"","$:/core/ui/ViewTemplate/prev":"\"094983504727c4056087aa6577f04b22\"","$:/creating":"\"22409d40703e7ef6554a838b57a3cf58\"","$:/currentIllustration":"\"415b882852ec82408d1de36b935d2e7b\"","$:/demo":"\"d8c2c2c28ced5a4f7a4d143e39dc3c79\"","$:/desc":"\"9dabc3ee9e65cbde83886d403af6d8a5\"","$:/design":"\"cded592643e95f2b7d272843cb339548\"","$:/designing":"\"8ba8ecbba5a690f46f80091d315e9133\"","$:/designx":"\"524adde9ba5ed558daf32d2d649536f8\"","$:/dictionary":"\"804cdbe6cca6fd14dcc751cd7f0af26b\"","$:/directions":"\"432d49dff3754c8cab828d0e53860d24\"","$:/dws/images/google-group-button":"\"44c0e659726dc1860e036183f68fed6f\"","$:/dws/images/share-button":"\"23c045650ccd34937bd955285182813f\"","$:/excise":"\"e1e00c3868469a730e45a85969e45eb7\"","$:/favicon.ico":"\"c3d2135c2821a306e2176e48f3f6e445\"","$:/fromTiddler":"\"94af1dc1916885ac183927434c40a90b\"","$:/ideas":"\"d70eea89bf089f5cd1e1486a0cbcf976\"","$:/idt":"\"801a1b0bb0d2356e98f2aa2d0fdf040a\"","$:/interactive":"\"7f199a5ce77dbf761beaeace653fa24b\"","$:/links":"\"9d8fe6ea67c8024681d3602016edf38e\"","$:/list":"\"38dde6615539a803016a9c72ad206496\"","$:/nav":"\"f15add486c946fe96dc43b6af65a907e\"","$:/newTiddler":"\"b21abd478b32e1ca8a54ea98585661ca\"","$:/newhere":"\"d07e14315653e0a4d1deae82d780c2f9\"","$:/open":"\"41140e40f9087cd3d12c37a0951f8b71\"","$:/palette":"\"31b360118ff1ce29bf2e4cb3dc830fd1\"","$:/palettes/DWS":"\"94dff25ba4e91a4e719e6f7d2afd35e3\"","$:/palettes/DesignWriteStudio":"\"80884b9d870fa4c87f57c398d65f7e92\"","$:/permaview":"\"2b7f2ae36a75b61cf432173a4f8b0505\"","$:/plugins/DesignWriteStudio/Annotator":"\"58f21906caca199d2bcb0cc6f64a0b3a\"","$:/plugins/DesignWriteStudio/showNotes":"\"ab745b95dff841faee79915cdf50c2a3\"","$:/plugins/DesignWriteStudio/showNotes/read.me":"\"d85ca825b5a373a0906e193903eb46c8\"","$:/plugins/TWaddle/TabLinks":"\"932a7fac4c20c1f2adebcead9e0035a4\"","$:/plugins/TWaddle/TabLinks/Toggle":"\"cb96631cb34bcfcb4c4ba775f9a2f05e\"","$:/plugins/ahahn/tinka":"\"e3aa2cef5af4957379b1b12052ca684d\"","$:/plugins/ebalster/formula":"\"80711ce257eca63952942d1b2fffc948\"","$:/plugins/tiddlywiki/bibtex":"\"a2f4c13e608b683617b4b062d25d40c7\"","$:/plugins/tiddlywiki/comments":"\"66a4c8a4a66f3a5ecacf6fc191e99b17\"","$:/plugins/tiddlywiki/highlight":"\"4a75ca54c1182161c95bba1ff2138e88\"","$:/plugins/tiddlywiki/jszip":"\"4655f6b49e294f068327dd1f015babeb\"","$:/plugins/tiddlywiki/xlsx-utils":"\"a38dca50bee15d97ccd9a68936088b18\"","$:/plugins/tobibeer/appear":"\"b686dda9aa06874acc347b8ccaa3846e\"","$:/plugins/tobibeer/random":"\"48f83b83f25597dd1060aadd0dbfdab8\"","$:/plugins/tobibeer/split":"\"7d8ad93f04aa5ae137ad9357fbc328fc\"","$:/practices":"\"083d0c0a6d4cbdc4c5ac049e955e0484\"","$:/punctuation":"\"9de04c10caac6ec06d0be541b0a377fe\"","$:/tabs":"\"efc3841a04f1438b932683bd0785f215\"","$:/tabs/practices--237466675":"\"d1f3d44b042e9c34965b81e166f43474\"","$:/tags/SideBar":"\"07b3f93990def1cff5cd633ec6c8c6cc\"","$:/techniques":"\"f5f6d2bc9cb948759fdbab78a0264881\"","$:/texts":"\"5adeecbd6a27cbfbec634765a3f4e187\"","$:/theme":"\"f2431ebd9208c0407799677e1fab2076\"","$:/themes/tiddlywiki/heavier":"\"257601e0468b8f1168a0cc2c46f506b3\"","$:/themes/tiddlywiki/punch":"\"40f0023002c84f17fe6a7836274ad9ec\"","$:/themes/tiddlywiki/vanilla/options/sidebarlayout":"\"18641a812eebbc2bcfed47a983b3882a\"","$:/thisObject":"\"8a6adcf8463c84545421ead90912b2b6\"","$:/topics":"\"38de6405de80c72f7532efd18f908b24\"","$:/transclusion":"\"0edae4e4f651d7c2d5f06af65c69794c\"","$:/view":"\"ba2cdaccd7807ce13bd21f6d3a27cf42\"","$:/what":"\"dd49ff11a2647b37a0b4b86c77581074\"","$:/who":"\"7c901964435649bce4277b60f325dbd0\"","$:/wikipedia":"\"7b720723e64e7553893d6c6e08df12dc\"","$:/writing":"\"600a7922af98222bd4362dfd13c2d2b7\"","*":"\"0348b22062b0f21271a336a8708abc58\"","03-01":"\"65862b07a81d1c51dbb6d15fbc886e30\"","1.01 Hello World! (Alicia Bower (Flinn), 09Feb 10:45 AM)":"\"2c19bf91830b7b99dded2dabe8505cc5\"","1.01 Hello World! (Alicia Bower (Flinn), 18Jan 8:35 PM)":"\"b20c92c5755104c541a62166daf66326\"","1.01 Hello World! (Amber Goodfriend, 17Jan 3:39 PM)":"\"4a1efef1d9acef7edfaac3735e0979c4\"","1.01 Hello World! (Andrew Houde, 17Jan 4:49 PM)":"\"d25121d72f41ffb463564625d3ceeba2\"","1.01 Hello World! (Andrew Houde, 17Jan 4:49 PM) 1":"\"1a55a0d125d5b8e632d81e852fa558b4\"","1.01 Hello World! (Benjamin Furbeck, 17Jan 7:24 AM)":"\"6feec0002f6691c4cf7c734d8cfb1a4a\"","1.01 Hello World! (Biaggio Mantella, 26Jan 11:44 AM)":"\"9cad0b327ec0919cf18f59b0b4c13fee\"","1.01 Hello World! (Brandon Helsing, 17Jan 9:50 AM)":"\"1193aac99a0ff8989f7fd3193bb4ea35\"","1.01 Hello World! (Carson Palmer, 17Jan 6:45 PM)":"\"387037066cb5017744868ce5a71a8c05\"","1.01 Hello World! (Chris Copeland, 17Jan 7:13 AM)":"\"9d41dde0925cd28176fc2c28b23e0837\"","1.01 Hello World! (Derek Smith, 17Jan 10:51 AM)":"\"be5314b7cb886378ca61152127667433\"","1.01 Hello World! (Dylan Pagillo, 16Jan 11:30 PM)":"\"00f8f5673ceb6ef1f39d32e244d306ed\"","1.01 Hello World! (Elizabeth Simonelli, 16Jan 9:55 PM)":"\"9e813dd45f3a95b8a84ebd9b26c84553\"","1.01 Hello World! (Eric Brown, 18Jan 10:22 AM)":"\"09cec77c14297b0944f7ddca3cf3dd5c\"","1.01 Hello World! (Gladson Natarajan, 17Jan 2:26 PM)":"\"e46bd62b7df7f62aaa3cbe948c0c1a10\"","1.01 Hello World! (Gladson Natarajan, 17Jan 2:29 PM)":"\"0e6863c806c5f50a96650ead40a3b737\"","1.01 Hello World! (James Ward, 18Jan 9:24 AM)":"\"6e99e363cc28c78084b590d25a97188c\"","1.01 Hello World! (Jared Duquette, 17Jan 12:03 PM)":"\"aa12a306200cf8b2cc1eee8a9f5ece02\"","1.01 Hello World! (Jared Duquette, 21Jan 9:48 PM)":"\"f1b2e4adc86a033c9afc71589a8c20ab\"","1.01 Hello World! (Jillian Christiano, 17Jan 4:27 PM)":"\"be375740a4625e94d25c03087c3aacca\"","1.01 Hello World! (Justin Cushing, 17Jan 6:34 PM)":"\"9f2d22108284d2b3c2a05d9527309c30\"","1.01 Hello World! (Karina, 19Jan 7:16 PM)":"\"a4c598eba1f2088ff77033bc0646b3e8\"","1.01 Hello World! (MS, 18Jan 11:28 AM)":"\"29c11f8cad555cc4aa169c67c0542661\"","1.01 Hello World! (Malyka, 17Jan 6:39 PM)":"\"7f774bb92556b611e244073e85c2b32d\"","1.01 Hello World! (Malyka, 17Jan 7:20 PM)":"\"7cb308da8fad6c6d760849a644cf7c6c\"","1.01 Hello World! (Marcus Spratley, 17Jan 11:35 PM)":"\"b6813b0eb8c8f1307bc7b3a16c2ecc1e\"","1.01 Hello World! (Marguerite Fraine, 25Jan 11:38 AM)":"\"586a13d624a880c4586852be4ef36180\"","1.01 Hello World! (Marvin Pierre, 18Jan 2:16 PM)":"\"68a6fcba8f3d318908d25abff852edcf\"","1.01 Hello World! (Max Nadel, 19Jan 6:15 PM)":"\"83678cd25e94c0e40889d2f73e30847a\"","1.01 Hello World! (Megan, 09Feb 9:37 AM)":"\"de2e0fbf358721e98c505813d35a0c55\"","1.01 Hello World! (Megan, 17Jan 12:45 PM)":"\"70baea67fb9dc7d96c18519b8a1dac7d\"","1.01 Hello World! (Michael, 18Jan 10:21 AM)":"\"7d3600c1666668c20a4236f02b1edd50\"","1.01 Hello World! (Mickey, 17Jan 8:33 PM)":"\"9a00fb6053ccc6bb2945de95513cccba\"","1.01 Hello World! (Nell Evangeline, 18Jan 10:03 AM)":"\"7a38d35e7b04c88321b076af9db187c0\"","1.01 Hello World! (Orinthea Sommersell, 17Jan 5:58 PM)":"\"d29424ac310728c3339173e779200875\"","1.01 Hello World! (PattyV, 27Jan 10:27 AM)":"\"0bc3875c2b1c18785b5c380d600d0223\"","1.01 Hello World! (Ray Buckley, 18Jan 10:10 AM)":"\"6aa3f67d32ac13e081de769f55e89b43\"","1.01 Hello World! (Ryan Maher, 17Jan 11:18 AM)":"\"b498a8d567aad4209adec39864f6a024\"","1.01 Hello World! (SeanH, 16Jan 11:00 PM)":"\"04320bc63c9adcde24b454929b576bfc\"","1.01 Hello World! (Shannon MacColl, 18Jan 8:37 PM)":"\"9987341a2f1367561d74df31202e969b\"","1.01 Hello World! (Sharon Healy, 17Jan 5:54 PM)":"\"649073ca13b0ef20a78797cfc7481cfb\"","1.01 Hello World! (Steve, 17Jan 4:57 PM)":"\"1cba6275f1ba043eba44fc4dc65ab83f\"","1.01 Hello World! (Tristan Retzke, 18Jan 10:53 AM)":"\"50e518d71e6bac8ccb7fb0785865f023\"","1.02 About Me (Alicia Bower (Flinn), 18Jan 8:29 PM)":"\"1b997a68220b0d8299faee3971eb3157\"","1.02 About Me (Amber Goodfriend, 21Jan 5:22 PM)":"\"abb92a20acd25c1bec63d750305fbc84\"","1.02 About Me (Andrew Houde, 21Jan 11:14 PM)":"\"993f336905268689c44ec796d808147a\"","1.02 About Me (Benjamin Furbeck, 18Jan 11:43 AM)":"\"7dea91d582dda63608c23efdaf924081\"","1.02 About Me (Biaggio Mantella, 26Jan 11:46 AM)":"\"37d8fa4c22956378e3b50ac915079571\"","1.02 About Me (Brandon Helsing, 20Jan 3:46 PM)":"\"2b0fc42ebc39785fae8e7ae6fb09c39d\"","1.02 About Me (Carson Palmer, 22Jan 12:56 AM)":"\"cb6d05c8a5202040daf03e5973501602\"","1.02 About Me (Carson Palmer, 22Jan 12:57 AM)":"\"a96a16a546a41cd98ff6ccd5e6502f28\"","1.02 About Me (Chris Copeland, 18Jan 2:41 PM)":"\"3bd2363d5365d26313a9f438f6ba59fe\"","1.02 About Me (Derek Smith, 21Jan 3:14 PM)":"\"ab7a1e2a9e7f57d22fe8ae72ef13334f\"","1.02 About Me (Dylan Neil, 21Jan 11:32 PM)":"\"a3c65256af54e63b98f21cf158a89375\"","1.02 About Me (Elizabeth Simonelli, 18Jan 12:11 PM)":"\"be2f635186fc8ab7de9523833fad6c33\"","1.02 About Me (Eric Brown, 20Jan 6:55 PM)":"\"bc2ac32645c8d3813f6b05b6caa5b4f6\"","1.02 About Me (Gladson Natarajan, 20Jan 2:06 PM)":"\"f69bdc0d8130a9ad3d058cf4634c6260\"","1.02 About Me (Gladson Natarajan, 20Jan 2:47 PM)":"\"bf01b6ba6402cdb155d0eb524832dd2f\"","1.02 About Me (James Ward, 22Jan 2:46 PM)":"\"21a835aeeeb50f6940938e3788a84753\"","1.02 About Me (Jared Duquette, 21Jan 10:04 PM)":"\"3059ee2b64ef3d6a00c6e23e5edf813b\"","1.02 About Me (Jillian Christiano, 18Jan 12:05 PM)":"\"72523aa5d83b38d96938cde3fb744841\"","1.02 About Me (Justin Cushing, 20Jan 11:39 AM)":"\"e82702c3a09ce45be13cdaa1eb63c699\"","1.02 About Me (Karina, 19Jan 8:27 PM)":"\"563c55e76c2cd03b4d1c9e181a909e0a\"","1.02 About Me (Malyka, 21Jan 10:32 PM)":"\"f274757b07913b7c24436e8ddb6a9d4a\"","1.02 About Me (Marcus Spratley, 21Jan 7:08 AM)":"\"d9d1faea84f16b5a5291e8d3e268846d\"","1.02 About Me (Marguerite Fraine, 26Jan 4:51 PM)":"\"e909dbe0378a110ef35485af251ab551\"","1.02 About Me (Marvin Pierre, 22Jan 2:55 AM)":"\"bfb8db18d8991a20c2bedb54b9394d09\"","1.02 About Me (Marvin Pierre, 22Jan 4:10 PM)":"\"5ada6be2d41a5ad907ac0adf4ef80654\"","1.02 About Me (Max Nadel, 22Jan 7:23 PM)":"\"272b720688673b161192072e15605b5b\"","1.02 About Me (Megan, 18Jan 11:42 AM)":"\"46c3c08f5e4749295f81b806945f3149\"","1.02 About Me (Michael, 18Jan 11:51 AM)":"\"bea47b28c0eb0a4dac02901b6137d242\"","1.02 About Me (Mickey, 18Jan 11:43 AM)":"\"3f26bb0a53bef5dd5ea862f6273ad39a\"","1.02 About Me (Nell Evangeline, 28Jan 7:10 PM)":"\"6770b6f4ecddc5f23456891ed8e423bb\"","1.02 About Me (Orinthea Sommersell, 20Jan 12:10 PM)":"\"7d86723fcbdd5bd5de45f10a73b2ee7f\"","1.02 About Me (PattyV, 31Jan 6:51 PM)":"\"0fb68d51c8fe2197de8cd7a133f8d4a6\"","1.02 About Me (Ray Buckley, 18Jan 11:52 AM)":"\"10e843f54767ee8d3d01554ab81c122d\"","1.02 About Me (Ryan Maher, 18Jan 1:32 PM)":"\"b5f2da46ab29765a3240b968cca6cfa1\"","1.02 About Me (SHallenbeck, 22Jan 9:41 PM)":"\"6675b760db7b396b4901cbd5e5ccf5e9\"","1.02 About Me (Shannon MacColl, 19Jan 5:43 PM)":"\"935f9ec999ea2cea874a95087c4e94d1\"","1.02 About Me (Shannon MacColl, 22Jan 8:01 AM)":"\"47d2090e34e6b4d3009f2950fd4a3452\"","1.02 About Me (Sharon Healy, 22Jan 11:12 AM)":"\"86e2bd456d78d01895649b3a6578ad05\"","1.02 About Me (Sharon Healy, 22Jan 6:25 AM)":"\"9c4a969acf9da4b749083a13cb28bf01\"","1.02 About Me (Steve Beckwith, 18Jan 11:42 AM)":"\"c4bca37b83c2dd3a572a6ac4d2339b5d\"","1.02 About Me (Tristan Retzke, 20Jan 11:04 PM)":"\"2c0175cb49f7c0109df27631bb2f2d4d\"","1.02 About Me (Tristan Retzke, 21Jan 6:05 PM)":"\"4ae46e72a0020f920d5ef7b11ed0a751\"","1.02 About Me (Tristan Retzke, 21Jan 6:11 PM)":"\"df8eea1889ea0888f83e259aab3349f6\"","1.02 About Me (Tristan Retzke, 21Jan 6:29 PM)":"\"7c129a4acdf5bc445c21788d2ae045dc\"","1.02 About Me (Tristan Retzke, 21Jan 6:33 PM)":"\"a76ab54aa93a1e2b7d1192afc6a53351\"","1.02 About Me (Tristan Retzke, 21Jan 9:21 PM)":"\"be5e0da99c15732213eb2a26ed22ad6e\"","1.02 About Me (Tristan Retzke, 23Jan 2:21 PM)":"\"8f848a4587a817607189bff41f0c2f3c\"","11th January 2018":"\"a096529b16b4b91bac96058b48b01d5d\"","13th December 2017":"\"a9323198b8e43bd41b39cb19e8042096\"","14th January 2018":"\"8368ae6876bc7b1e32d428b3eecaf6ec\"","15.1":"\"40fa12c4755c7f4fe77ad5a745763aeb\"","15.10":"\"e8f7e004fc8a2722158dc99de0efdfe0\"","15.11":"\"a11df7a2ad7e3d87eb253962f275c0be\"","15.12":"\"24c2c298d98a1f20b3a36ade6106185e\"","15.13":"\"4351cba055f849a9c5409d8ccd84d3d9\"","15.14":"\"9335de8fb204b3d05805ca5ef71409f3\"","15.15":"\"f45ad90f130c8e7c206a2b3c55708026\"","15.16":"\"9dbe082f72d2187e7c167444dbec2139\"","15.17":"\"fc5866676a2bbcdb2f53952ec7d591f9\"","15.18":"\"5edefd87e97b0c6c80208cc70c75ea02\"","15.19":"\"9a50bbbe2d91c1252ea34eb812713c3f\"","15.2":"\"079adc531d76ba1171e6fdf7c53dd83b\"","15.3":"\"7fdd440f8c019288af4ab332d2523ac8\"","15.4":"\"05a536f9b7725f2fbdefd61dfd1fff41\"","15.5":"\"bf7b434776455b2842bc2495c6513e81\"","15.6":"\"11a238a45019e0eaed663eb2b6f65309\"","15.7":"\"3e10960ee32385ba3303faeb6d09e995\"","15.8":"\"110aa5cf2dac95367367e7422bd18b4c\"","15.9":"\"93fda404880825243e0652c49a195a9c\"","18th December 2017":"\"9a2e716a2f24ded878512421e419957e\"","19th December 2017":"\"863c8b5e5a5524fe8849883caa242505\"","2.01 Shapes (Alicia Bower (Flinn, 25Jan 4:03 PM)":"\"66e445a133f81e37ac50fc2d343719d9\"","2.01 Shapes (Amber Goodfriend, 24Jan 1:36 PM)":"\"3026fa9d5f0172890e28d0c03b710d57\"","2.01 Shapes (Andrew Houde, 28Jan 2:55 PM)":"\"ebb2224532e2e48c58bd79d640720762\"","2.01 Shapes (Benjamin Furbeck, 23Jan 12:49 PM)":"\"b727c69abe4b861a15019e437820630e\"","2.01 Shapes (Brandon Helsing, 27Jan 5:35 PM)":"\"6f46af91a1628bc3ab6263da1afbe70d\"","2.01 Shapes (Carson Palmer, 23Jan 11:20 AM)":"\"2f01d73ee9b04696ccaf06c2668005e4\"","2.01 Shapes (Chris Copeland, 23Jan 2:13 PM)":"\"638fe53f7cc75cc72e468c7a569ca80a\"","2.01 Shapes (Derek Smith, 28Jan 2:51 PM)":"\"381d4c36c8edb0ce7c5efa2e29d55242\"","2.01 Shapes (Dylan Pagillo, 28Jan 7:38 PM)":"\"017813120cf56ea0770b354ee0c0a0c1\"","2.01 Shapes (Elizabeth Simonelli, 23Jan 11:40 AM)":"\"272cc2e49d26360f0b7e40b7caeb84cc\"","2.01 Shapes (Eric Brown, 23Jan 11:49 AM)":"\"2ded25e8eafff284226099cd496d4235\"","2.01 Shapes (Gladson natarajan, 24Jan 2:40 PM)":"\"37f8b5f0170f0f9ffddab1fc800e780e\"","2.01 Shapes (Jared Duquette, 28Jan 10:36 PM)":"\"115f722974addb4a42f33c20bc360ba8\"","2.01 Shapes (Jillian Christiano, 23Jan 11:44 AM)":"\"3348a66dbe0f213e13991f6328ffb467\"","2.01 Shapes (Justin Cushing, 28Jan 8:38 PM)":"\"55830a68531300b870020d11b2b5d9b4\"","2.01 Shapes (Karina, 25Jan 11:07 PM)":"\"90e8fddf6056d77d38a4290a00559ec0\"","2.01 Shapes (Malyka, 28Jan 4:39 PM)":"\"fbdf834b98646ea1bac77c0ee69fc28f\"","2.01 Shapes (Marcus Spratley, 24Jan 11:03 PM)":"\"2695865f9110dc905bb8e47b0c818f4b\"","2.01 Shapes (Marguerite Fraine, 29Jan 10:49 PM)":"\"467403385fcd08816bab19ccd535f7d2\"","2.01 Shapes (Marvin Pierre, 28Jan 4:24 AM)":"\"d67fc09b375fb94757316a8febc89667\"","2.01 Shapes (Max Nadel, 28Jan 8:55 PM)":"\"7e94505746a6e65e27078962b47fabdc\"","2.01 Shapes (Megan, 23Jan 11:35 AM)":"\"e1be1c748847cdc67f5cbe744c033156\"","2.01 Shapes (Michael, 23Jan 11:20 AM)":"\"e02ac15a54bb88f85377da3520010dbd\"","2.01 Shapes (Mickey, 23Jan 11:25 AM)":"\"9678bd2ead1beff607b7dd492743ea0c\"","2.01 Shapes (Nell Evangeline Morrissey, 07Feb 10:53 PM)":"\"4d043646d7ac28cffb1dae36dd9511d7\"","2.01 Shapes (Orinthea, 28Jan 3:49 PM)":"\"342289024dd002554635d08ec76adbea\"","2.01 Shapes (PattyV, 11Feb 12:37 PM)":"\"016d5a89deb27cd82bbd6b9bf31cad1f\"","2.01 Shapes (Ray Buckley, 30Jan 10:01 AM)":"\"9bf773fff21dd61df1a61e7c94dc4ae0\"","2.01 Shapes (Ryan Maher, 23Jan 6:06 PM)":"\"f3883a7b725744e66494f2e92db30e33\"","2.01 Shapes (SHallenbeck, 27Jan 10:55 AM)":"\"7732621e73151b1826dffd8e5cfd22cf\"","2.01 Shapes (Shannon MacColl, 24Jan 9:49 PM)":"\"21969603a4578d9bbdcfa4266d2fb794\"","2.01 Shapes (Steve B, 23Jan 11:20 AM)":"\"00342deb7ec73dbd8f945eabff7f2922\"","2.01 Shapes (Tristan Retzke, 23Jan 2:22 PM)":"\"0dc748c8c73739fb47417325158c63dd\"","2.02 Objects (Alicia Bower (Flinn), 28Jan 11:23 PM)":"\"847a61705e2ea1c1a79f0bac9be7ce4d\"","2.02 Objects (Andrew Houde, 28Jan 6:41 PM)":"\"2c4b426958feb5e73f7cda8f949ef769\"","2.02 Objects (Benjamin Furbeck, 25Jan 7:50 PM)":"\"642fe88fecd57627148d5b7a0938f39a\"","2.02 Objects (Brandon Helsing, 28Jan 10:33 PM)":"\"00c447c5fc84c38df84f817827665833\"","2.02 Objects (Chris Copeland, 25Jan 5:22 PM)":"\"b443e63a89ca62d85bdcc4de9a819cec\"","2.02 Objects (Derek Smith, 28Jan 10:31 PM)":"\"57d45359e6a6707b5238392addb8a02d\"","2.02 Objects (Dylan Pagillo, 29Jan 12:38 AM)":"\"6d9ad53879b2a4ca3b59c6a95b549086\"","2.02 Objects (Eric Brown, 30Jan 10:11 AM)":"\"4f16e347a807bd4b2fdc907f3a5f8b80\"","2.02 Objects (Gladson natarajan, 28Jan 7:59 AM)":"\"644a042d3582d202c51200b4c511b672\"","2.02 Objects (Jillian Christiano, 27Jan 11:20 AM)":"\"4829137bc7eceb83585c9bf09634755f\"","2.02 Objects (Justin Cushing, 29Jan 12:05 AM)":"\"abd525fa80e6ad4acfffe07660a9cce1\"","2.02 Objects (Karina, 29Jan 8:36 PM)":"\"9894029aacb9b28da3526c6c6fb2093e\"","2.02 Objects (Malyka, 28Jan 4:03 PM)":"\"3f913d1f7d2ecb910dccd7d787e1d759\"","2.02 Objects (Marcus Spratley, 29Jan 12:15 AM)":"\"3aa0d4d541078bd8e70214a1d0ede01b\"","2.02 Objects (Marvin Pierre, 28Jan 5:25 PM)":"\"6f7fec0b7f570c28fa987372fc19f3ff\"","2.02 Objects (Max Nadel, 30Jan 5:25 PM)":"\"75362a75c834576a0f6044d73af4397e\"","2.02 Objects (Megan, 25Jan 5:03 PM)":"\"c7fc9d6c47612385aacb9b5df6685ed0\"","2.02 Objects (Michael C. Miller, 29Jan 4:16 PM)":"\"49bd12c86a94f30100e6a06b11003982\"","2.02 Objects (Mickey, 05Feb 7:39 PM)":"\"3188d3b4712067d09a121a7dc4159f7b\"","2.02 Objects (Orinthea, 28Jan 3:51 PM)":"\"bbbf087fa447ae6d273cca258fd5ef23\"","2.02 Objects (PattyV, 17Feb 7:17 PM)":"\"d8d957c82592f277fc1c2b02d0d42675\"","2.02 Objects (PattyV, 19Feb 10:10 AM)":"\"2f05fd890bf3a98fa972c361bde610b3\"","2.02 Objects (Ryan Maher, 28Jan 10:28 PM)":"\"9e080f39ff0b762b18fe456c33e67ac1\"","2.02 Objects (SHallenbeck, 27Jan 10:13 PM)":"\"7265b0a39194cc1e02e8f6248cb0de04\"","2.02 Objects (Shannon MacColl, 28Jan 1:21 AM)":"\"5fe9866d3c0ab1973d3c6371ffced0e7\"","2.02 Objects (Steve B, 25Jan 11:48 AM)":"\"a1e780ec513ab1673f1d2f48cdc8bcca\"","2.02 Objects (Tristan Retzke, 28Jan 8:30 AM)":"\"7573262e47802ec94db81a3b02c8c800\"","20171128180633154":"\"0d8c8a30f696d2ed1283c45785505c5c\"","20171128191203385":"\"b33e6f4ad54fc6af9d19e8e7c1e63eb7\"","3.01 Reverse Engineering Google News (Alicia Bower (Flinn), 02Feb 4:37 PM)":"\"f48059df83fde9df5ba522149bb06db0\"","3.01 Reverse Engineering Google News (Andrew Houde, 04Feb 4:41 PM)":"\"465c4241099ddaa4dc8fc5fefdd38609\"","3.01 Reverse Engineering Google News (Benjamin Furbeck, 31Jan 7:43 AM)":"\"ffbadb3ebe8377c8bd725cae23a74156\"","3.01 Reverse Engineering Google News (Brandon Helsing, 05Feb 12:09 AM)":"\"6ab6f1f597c8fba661f2224f6f80b701\"","3.01 Reverse Engineering Google News (Carson Palmer, 05Feb 4:09 AM)":"\"5530cc521fcfd9a176ad3e832fb1e58d\"","3.01 Reverse Engineering Google News (Chris Copeland, 30Jan 2:57 PM)":"\"08ea9dd547db0067aa840ce8127026fe\"","3.01 Reverse Engineering Google News (Derek Smith, 04Feb 4:29 PM)":"\"12c3fdd0505c47aa5c372ef720890f40\"","3.01 Reverse Engineering Google News (Dylan Pagillo, 07Feb 3:40 PM)":"\"5d29df37d8fb8a42c7243c46d41c2ae5\"","3.01 Reverse Engineering Google News (Eric Brown, 01Feb 9:59 AM)":"\"1e22d90a1b9c39b2868151a0f6b7123f\"","3.01 Reverse Engineering Google News (Gladson Natarajan, 04Feb 9:20 AM)":"\"915cc4a68159239da8a445df066f62d9\"","3.01 Reverse Engineering Google News (Jared Duquette, 23Feb 10:17 PM)":"\"d8739b02cdbbe9951c9a6f9581e9d1f4\"","3.01 Reverse Engineering Google News (Jillian Christiano, 01Feb 11:34 AM)":"\"ce5868d676e34fc6ae21863c0b6ebf85\"","3.01 Reverse Engineering Google News (Jillian Christiano, 06Feb 10:14 AM)":"\"7f1251d00d9d7e52d21a55b54b6b735d\"","3.01 Reverse Engineering Google News (Justin Cushing, 04Feb 3:15 PM)":"\"b81646268714a716d650edb6324e8ee2\"","3.01 Reverse Engineering Google News (Malyka, 04Feb 7:11 PM)":"\"d41138aea98ae6b940674b2b1cba6198\"","3.01 Reverse Engineering Google News (Malyka, 17Feb 2:16 PM)":"\"454bce59326ad93e8712fbb0e4d8776a\"","3.01 Reverse Engineering Google News (Marcus Spratley, 04Feb 11:55 PM)":"\"a8b18f2678ad5cd40ab1a9b4aa572fa7\"","3.01 Reverse Engineering Google News (Marcus Spratley, 05Feb 1:13 AM)":"\"482176fe4d312f7cf8e107a790f4aa68\"","3.01 Reverse Engineering Google News (Marguerite Fraine, 06Feb 10:34 PM)":"\"b61da0b858b370495d8a63e5561f05cd\"","3.01 Reverse Engineering Google News (Marvin Pierre, 04Feb 5:27 AM)":"\"1d36b6056ceb2c93df75def9f3ac67c8\"","3.01 Reverse Engineering Google News (Max Nadel, 04Feb 4:27 PM)":"\"d58e4c01d8e9d7a4c4d75dcbe6fd161b\"","3.01 Reverse Engineering Google News (Megan, 01Feb 9:24 AM)":"\"2f0ec8d2aa77c48765d3f86c15c3ad73\"","3.01 Reverse Engineering Google News (Michael C. Miller, 05Feb 2:19 PM)":"\"e7e1a8aa5af768c77eca2e2db0c9eefb\"","3.01 Reverse Engineering Google News (Mickey, 07Feb 8:02 PM)":"\"a0e5ab84119bc61c412a5a60f9eded79\"","3.01 Reverse Engineering Google News (Orinthea Sommersell, 04Feb 6:17 PM)":"\"3739f1f937a2049433466c348028979d\"","3.01 Reverse Engineering Google News (Orinthea, 04Feb 6:12 PM)":"\"0d968fab5c8870a37c1ee0cea011b669\"","3.01 Reverse Engineering Google News (Ryan Maher, 04Feb 4:26 PM)":"\"112a64688d24ca3902acb9d7f50365e0\"","3.01 Reverse Engineering Google News (SHallenbeck, 03Feb 8:55 PM)":"\"f26263d010d3a88199d00c352892d21c\"","3.01 Reverse Engineering Google News (Shannon MacColl, 04Feb 1:09 AM)":"\"d91adb00dc2f05f85c63d7834feaa896\"","3.01 Reverse Engineering Google News (Steve B, 31Jan 4:34 PM)":"\"001ee8053c37deb48529c6c1d956c401\"","3.02 Reverse Engineering Wikipedia (Eric Brown, 13Mar 1:17 AM)":"\"03e446c95f2d84e198dadbd194400c32\"","3.02 Reverse Engineering Wikipedia (Jared Duquette, 04Mar 10:31 PM)":"\"95c0406859deaee5f74cc37d8dbf8930\"","3.02 Reverse Engineering Wikipedia (Jillian Christiano, 20Feb 10:02 AM)":"\"b68aeb476815bb7b54430f4c91efd7a9\"","3.02 Reverse Engineering Wikipedia (Justin Cushing, 16Feb 9:40 PM)":"\"8ddd1f536387e2d270028e50881dc734\"","3.02 Reverse Engineering Wikipedia (Justin Cushing, 19Feb 8:01 PM)":"\"017b1c237a72d9ce50c7b2cfbe0efc0e\"","3.02 Reverse Engineering Wikipedia (Malyka, 17Feb 2:17 PM)":"\"fe46725b0c2fb577cdebd8d8f180fd1c\"","3.02 Reverse Engineering Wikipedia Tables (Alicia Bower, 02Feb 5:29 PM)":"\"8fc1a1b0bf07a34327f20edb2000e4ed\"","3.02 Reverse Engineering Wikipedia Tables (Andrew Houde, 05Feb 12:03 AM)":"\"50785d88b6b6a9faebf7a5136d695edb\"","3.02 Reverse Engineering Wikipedia Tables (Benjamin Furbeck, 04Feb 11:03 AM)":"\"bc9f858b7c9a6f9c112ed9ad9378480e\"","3.02 Reverse Engineering Wikipedia Tables (Brandon Helsing, 05Feb 12:26 AM)":"\"d5f089c16d3d0e96867f0f23e5ca6d3c\"","3.02 Reverse Engineering Wikipedia Tables (Chris Copeland, 01Feb 2:51 PM)":"\"f30b340b9862ec6011a1043da722695f\"","3.02 Reverse Engineering Wikipedia Tables (Derek Smith, 05Feb 1:43 AM)":"\"1a80f71ee3fdc55761b81de9a99742d1\"","3.02 Reverse Engineering Wikipedia Tables (Dylan Pagillo, 08Feb 12:00 PM)":"\"67d860a3560a4836d079bb09ef0005f9\"","3.02 Reverse Engineering Wikipedia Tables (Eric Brown, 06Feb 9:55 AM)":"\"998f01697362f2f752c489994eabdbd9\"","3.02 Reverse Engineering Wikipedia Tables (Gladson Natarajan, 04Feb 10:35 AM)":"\"8409216bc4740e4362aedaddc70f0a3f\"","3.02 Reverse Engineering Wikipedia Tables (Gladson Natarajan, 04Feb 11:01 AM)":"\"7adb1379aea6a66401beb870e21706ef\"","3.02 Reverse Engineering Wikipedia Tables (Jillian Christiano, 03Feb 1:55 PM)":"\"e5d059ed72505d71a12d0dec5c9986c9\"","3.02 Reverse Engineering Wikipedia Tables (Justin Cushing, 04Feb 6:46 PM)":"\"8a92d94912e30159acf40cf64b6f3808\"","3.02 Reverse Engineering Wikipedia Tables (Malyka, 04Feb 7:43 PM)":"\"c1f3bab44b650c9cfd255fb8f279fb61\"","3.02 Reverse Engineering Wikipedia Tables (Marcus, 05Feb 1:25 AM)":"\"06cbae8585f31427f4166709efc3baa4\"","3.02 Reverse Engineering Wikipedia Tables (Marguerite Fraine, 06Feb 11:27 PM)":"\"a5f1b1e7413df478ab32e4d669ee4041\"","3.02 Reverse Engineering Wikipedia Tables (Marvin Pierre, 04Feb 5:23 AM)":"\"1d34727b2fa58e77a8220e56b67f0791\"","3.02 Reverse Engineering Wikipedia Tables (Max Nadel, 06Feb 3:21 PM)":"\"fcadbfdd2f51baa0ff5cf74d0bcb04bf\"","3.02 Reverse Engineering Wikipedia Tables (Megan, 01Feb 4:28 PM)":"\"f73212685f2aa4c7aeb5ef74a805e2b2\"","3.02 Reverse Engineering Wikipedia Tables (Michael C. Miller, 05Feb 3:48 PM)":"\"84306fa6035d780b2a7f287de314e241\"","3.02 Reverse Engineering Wikipedia Tables (Mickey, 12Feb 9:20 PM)":"\"45460339962fafcfb5dae49fbbbfe9ab\"","3.02 Reverse Engineering Wikipedia Tables (Orinthea Sommersell, 04Feb 6:15 PM)":"\"d387fc3e84a67e8d9bdbd1b5cfaa5c99\"","3.02 Reverse Engineering Wikipedia Tables (Orinthea Sommersell, 04Feb 7:12 PM)":"\"92f9c65bd85424f4dee2b2a5e8d3cc70\"","3.02 Reverse Engineering Wikipedia Tables (SHallenbeck, 05Feb 11:11 AM)":"\"9642bb7b9a4e4f3852f6a55f842fa8a8\"","3.02 Reverse Engineering Wikipedia Tables (Shannon MacColl, 04Feb 2:33 AM)":"\"8f65617956308fb34cac285c6d148048\"","3.02 Reverse Engineering Wikipedia Tables (Steve B, 04Feb 8:51 PM)":"\"4f8c92e5da26aa5afe4d63bc2336ee1e\"","3.02 Reverse Engineering Wikipedia Tables (Tristan Retzke, 10Feb 8:02 PM)":"\"43a4b3c7799738342b86ea3158371738\"","3.03 Importing Wikipedia Tables (Alicia Bower (Flinn), 14Feb 6:24 PM)":"\"72efa177386e49c25c017519608a78e0\"","3.03 Importing Wikipedia Tables (Andrew Houde, 18Feb 1:56 PM)":"\"c57e0261ed824a75e6b99ca273ef798b\"","3.03 Importing Wikipedia Tables (Benjamin Furbeck, 15Feb 12:28 PM)":"\"ee12296ebb5c0cb77e18302951556cca\"","3.03 Importing Wikipedia Tables (Brandon Helsing, 18Feb 11:20 PM)":"\"212e6881a43b8fdc8bef63c149e73b6c\"","3.03 Importing Wikipedia Tables (Derek Smith, 18Feb 8:15 PM)":"\"30d003ac11585232a5b8ab26afd6aaea\"","3.03 Importing Wikipedia Tables (Gladson Natarajan, 18Feb 11:00 AM)":"\"3834df90d57ecbafaa85b89353569457\"","3.03 Importing Wikipedia Tables (Gladson Natarajan, 18Feb 11:32 AM)":"\"2d4ba3961d0dd4b5e997e91296cc2778\"","3.03 Importing Wikipedia Tables (Jillian Christiano, 20Feb 10:11 AM)":"\"1484a15f04da5a6f2178a7bf91770b42\"","3.03 Importing Wikipedia Tables (Justin Cushing, 19Feb 7:04 PM)":"\"89a00e149845c52a362d34fe019ea9dd\"","3.03 Importing Wikipedia Tables (Malyka, 19Feb 12:14 PM)":"\"c385ba6f989727198cb6a59928bc3ebd\"","3.03 Importing Wikipedia Tables (Marcus Spratley, 19Feb 3:46 AM)":"\"6dd1a03525c09b261a856be2e15ad6eb\"","3.03 Importing Wikipedia Tables (Marguerite Fraine, 14Feb 1:41 PM)":"\"fb0fd222eb7a3eaf21962912ca207c94\"","3.03 Importing Wikipedia Tables (Marvin Pierre, 10Mar 6:04 AM)":"\"5b6b518ddf17524e9778c034dbd32db6\"","3.03 Importing Wikipedia Tables (Max Nadel, 19Feb 9:33 PM)":"\"cb7d56f957ba5123cb907ce8b351ff1b\"","3.03 Importing Wikipedia Tables (Megan, 14Feb 8:39 AM)":"\"f208729a71196afb0c362e79eb249f12\"","3.03 Importing Wikipedia Tables (Michael C. Miller, 18Feb 10:56 PM)":"\"e62ced2d5721111cff0d38bcc693b7f1\"","3.03 Importing Wikipedia Tables (Mickey, 14Feb 11:41 PM)":"\"81efb05dea838d1b60bb32837bc5a014\"","3.03 Importing Wikipedia Tables (Orinthea Sommersell, 18Feb 12:36 PM)":"\"9afca01f4f665375818a895ed73c48b9\"","3.03 Importing Wikipedia Tables (SHallenbeck, 18Feb 12:43 PM)":"\"62006cb21599304aaca6fd8eae3a526c\"","3.03 Importing Wikipedia Tables (Shannon MacColl, 16Feb 7:54 PM)":"\"dc3340e1d980963cc22db39b4b784afc\"","3.03 Importing Wikipedia Tables (Steve B, 20Feb 10:07 AM)":"\"05e3c08af176ff8768a0c13337444811\"","3.03 Importing Wikipedia Tables (Tristan Retzke, 21Feb 2:41 AM)":"\"bf2163c4972eade7ee8ee6ca81ba4028\"","3/1/2018 10:35:16":"\"3118215e4e30e68bcc66ed07c8421985\"","3/1/2018 10:35:46":"\"85a552734cfc50625334aa7f47005fab\"","3/1/2018 10:36:31":"\"e9df3866fd0b2b286a0fd634ef2d8a6f\"","3/1/2018 10:36:44":"\"4ce98c90e881976d15027d1d09f44fca\"","3/1/2018 10:37:23":"\"9e856462bf77b0b89f78a3c02c2d43bc\"","3/1/2018 10:37:55":"\"6b54ba85ef43a603a08b970e25f4175e\"","3/1/2018 10:38:00":"\"dc4f5fa4658ac2353187023f374ea8fe\"","3/1/2018 10:38:09":"\"11261427e115dc9eba915eba633658fe\"","3/1/2018 10:39:01":"\"3e772888ee8105e5f084c420e8885024\"","3/1/2018 10:39:45":"\"961bc48e7a50a1c074c98ba758b000b5\"","3/1/2018 10:40:02":"\"dc78948153e5835c3711bfa8441aa70c\"","3/1/2018 10:40:04":"\"34499742d6f43807f3d328498c6ba59a\"","3/1/2018 10:40:19":"\"44c0d186908cc1ec3179aba6efad9662\"","3/1/2018 10:40:26":"\"789b99623d051738836b6c6fdf320ca4\"","30th November 2017":"\"23bf8e87b4ec4ae385bb318dd0f7991d\"","3rd January 2018":"\"5bc003f4266a2d875639c366299bc9f7\"","4.01 Annotations (Andrew Houde, 11Feb 9:55 PM)":"\"2553ec894e313e9273d8dfdc5d79250b\"","4.01 Annotations (Brandon Helsing, 12Feb 1:30 AM)":"\"2a9ff10d9b67a186c8d2c68a47a6e844\"","4.01 Annotations (Chris Copeland, 12Feb 1:20 PM)":"\"86fafc7e98bbf857f3617f5ac088a0ba\"","4.01 Annotations (Derek Smith, 12Feb 2:55 AM)":"\"c0b830f9852ad00632f0a195e217007d\"","4.01 Annotations (Gladson Natarajan, 11Feb 1:44 PM)":"\"fda49b13ee11198c1e6e13f9ba7c3de6\"","4.01 Annotations (Gladson Natarajan, 11Feb 3:07 PM)":"\"777bc601e7c5193b9c8c2b65fc6d18a6\"","4.01 Annotations (Jillian Christiano, 20Feb 10:09 AM)":"\"510857a402f60f3af7256d19d6250d91\"","4.01 Annotations (Jillian Christiano, 20Feb 11:20 AM)":"\"c9b048166da5c20e1f4d276cc85d0fc0\"","4.01 Annotations (Justin Cushing, 10Feb 6:55 PM)":"\"2a8775be902093c998f0dcf8c0958e26\"","4.01 Annotations (Karina, 12Feb 7:17 PM)":"\"c3117a6f63a8624847ec28d02750eaba\"","4.01 Annotations (Malyka, 11Feb 11:08 PM)":"\"268c5b65fdee4f2d3bd35fd60d6b929f\"","4.01 Annotations (Malyka, 17Feb 4:22 PM)":"\"69b9fa468b721a79436a13c9b0c025d8\"","4.01 Annotations (Marcus Spratley, 12Feb 12:47 AM)":"\"544b1b85b40e0d7de76a480a8049c33d\"","4.01 Annotations (Marguerite Fraine, 19Feb 11:28 PM)":"\"8c0fd40e940ea689888ed2e31dee4950\"","4.01 Annotations (Marvin Pierre, 12Feb 5:54 PM)":"\"57a2cf5e6fd51515f6204e1fada4cfb5\"","4.01 Annotations (Max Nadel, 12Feb 8:48 PM)":"\"a0f447690f01642f2b2131472d02c0ac\"","4.01 Annotations (Michael C. Miller, 11Feb 10:13 PM)":"\"0d85debb673380fb5c38cb168e1302a8\"","4.01 Annotations (Michael C. Miller, 20Feb 8:40 AM)":"\"bcd45a5ebcfcf1d4380172ba72cf2d52\"","4.01 Annotations (Mickey, 22Feb 1:12 PM)":"\"3ed7927bb4a9263b41d7164958eced67\"","4.01 Annotations (Orinthea Sommersell, 11Feb 10:19 AM)":"\"4f5d4ff6b53e1226aa23f8aa02180fd9\"","4.01 Annotations (Orinthea Sommersell, 11Feb 10:21 AM)":"\"94bff43c73675a5b38b28aa640adbe67\"","4.01 Annotations (Ryan Maher, 20Feb 10:11 AM)":"\"85e9fafa2352307a13888dfff88cbbe7\"","4.01 Annotations (SHallenbeck, 10Feb 12:40 PM)":"\"0fe22a3960fbc217b66171695ec66e71\"","4.01 Annotations (Shannon MacColl, 11Feb 7:16 PM)":"\"9cfac886325ff35af14361b22175f129\"","4.01 Annotations (Steve B, 12Feb 8:25 AM)":"\"b6fd2f8fab2c417c6a92e67f593601f0\"","4.01 Annotations (Tristan Retzke, 16Feb 1:08 AM)":"\"9cb1b1d47e3c1e0e9a40e4e4c50dd5e0\"","4.02 Bibliographic Exploration (Alicia Bower (Flinn), 21Feb 3:50 PM)":"\"bc76ba2adb7e7d0fcdc81cb1a42b72c3\"","4.02 Bibliographic Exploration (Andrew Houde, 20Feb 4:04 AM)":"\"65612439a51d1ca165d596902996e1f1\"","4.02 Bibliographic Exploration (Benjamin Furbeck, 17Feb 6:56 PM)":"\"308a783723706e2f49d79cd09aa1a47f\"","4.02 Bibliographic Exploration (Brandon Helsing, 20Feb 10:40 PM)":"\"7e8810035c584639278d73618cec8a29\"","4.02 Bibliographic Exploration (Chris Copeland, 18Feb 7:40 PM)":"\"349a772796c29b88f2276131a4f2a8fb\"","4.02 Bibliographic Exploration (Chris Copeland, 27Feb 10:40 AM)":"\"0e8aeec132bcf5f3b66059e392d45cb6\"","4.02 Bibliographic Exploration (Gladson Natarajan, 20Feb 7:53 PM)":"\"c3277f00fe3043fbc2ecf5ff09572a18\"","4.02 Bibliographic Exploration (Jillian Christiano, 22Feb 11:41 AM)":"\"9cdfab925748d76ecb017f0e5948346f\"","4.02 Bibliographic Exploration (Justin Cushing, 20Feb 10:15 PM)":"\"f19131abb927eb9d400fd8be521cc36c\"","4.02 Bibliographic Exploration (Malyka, 20Feb 9:27 PM)":"\"80b44e9e58e4f69941e71c5883f564ee\"","4.02 Bibliographic Exploration (Marcus Spratley, 21Feb 3:19 AM)":"\"5052d465052e63d04458838001193b22\"","4.02 Bibliographic Exploration (Marguerite Fraine, 27Feb 12:02 PM)":"\"fb9f89f7778c1283537b77d6ad73b79a\"","4.02 Bibliographic Exploration (Marvin Pierre, 20Feb 5:23 AM)":"\"5b17c6c920f8b742ae7e45464e56e2a9\"","4.02 Bibliographic Exploration (Megan, 22Feb 10:18 AM)":"\"70cb64fb9db4a3b826fca167bf5cb14d\"","4.02 Bibliographic Exploration (Michael C. Miller, 20Feb 8:40 AM)":"\"14999f458b63ba58f82900a02e2e43b9\"","4.02 Bibliographic Exploration (Mickey, 25Feb 5:13 PM)":"\"8069498cf24cb865184b521487bd8388\"","4.02 Bibliographic Exploration (Orinthea Sommersell, 20Feb 8:17 PM)":"\"3e20a09cf0ab099c595d8403310bf035\"","4.02 Bibliographic Exploration (Scharem , 19Feb 9:40 PM)":"\"ef8a68fdf7c8167618c2e70090883e8f\"","4.02 Bibliographic Exploration (Shannon MacColl, 20Feb 4:04 PM)":"\"6c1e6c16f05c68d48b7e90299a3af525\"","4.03 Writing a Narrative Essay (Alicia Bower (Flinn), 22Feb 10:51 AM)":"\"97fa9ffe4597fcc7d922ad5d429dfeb4\"","4.03 Writing a Narrative Essay (Benjamin Furbeck, 13Mar 7:40 AM)":"\"0d1b48dacef968430038dca5e23cdc00\"","4.03 Writing a Narrative Essay (Brandon Helsing, 26Feb 1:03 AM)":"\"8f730f0b1c05fe6427f6be73f041411d\"","4.03 Writing a Narrative Essay (Chris Copeland, 27Feb 10:40 AM)":"\"dbcde9345b9e43209834c94fc25d05bf\"","4.03 Writing a Narrative Essay (Gladson Natarajan, 21Feb 3:13 PM)":"\"b9a61e1a956518429017c300d8223ca2\"","4.03 Writing a Narrative Essay (Jillian Christiano, 07Mar 1:32 PM)":"\"27c3f242c0dee1cf71e2b4726fca62c5\"","4.03 Writing a Narrative Essay (Justin Cushing, 25Feb 3:16 PM)":"\"5e175555aed4103c4a78ea441c2f51a5\"","4.03 Writing a Narrative Essay (Malyka, 09Mar 10:05 PM)":"\"b1828caa0490499bbb426e30314dba2b\"","4.03 Writing a Narrative Essay (Marcus Spratley, 26Feb 1:32 AM)":"\"21243fb5276bf582d44efa2cb07e4136\"","4.03 Writing a Narrative Essay (Megan, 25Feb 12:59 PM)":"\"a2b6a3751d6c16699287f2dbeec76e8f\"","4.03 Writing a Narrative Essay (Orinthea Sommersell, 04Mar 2:21 PM)":"\"1e3011e7c7c0d217515d03cc26409fa9\"","4.03 Writing a Narrative Essay (Orinthea Sommersell, 25Feb 8:31 PM)":"\"79198784876c057cc01d297e0871ec70\"","4.03 Writing a Narrative Essay (SHallenbeck, 25Feb 4:42 PM)":"\"bd45725e1c2fc6eab1848770b18685cb\"","4.03 Writing a Narrative Essay (Shannon MacColl, 25Feb 6:04 AM)":"\"d6863fd2011ca5063d78ca1c6d25b3e4\"","4.03 Writing a Narrative Essay (Steve B, 20Feb 10:49 AM)":"\"93cdeefad81545e94791cea28fc694f3\"","4.04 Hypertext in the 21st Century (Andrew Houde, 04Mar 11:49 PM)":"\"a660c1f5cba7db7dc90301dd6e55e70e\"","4.04 Hypertext in the 21st Century (Brandon Helsing, 04Mar 11:13 PM)":"\"09a7a1837e75af5693668fc80f8a9e95\"","4.04 Hypertext in the 21st Century (Chris Copeland, 03Mar 1:03 PM)":"\"070b8194cad9ed34833e0f6b393e2359\"","4.04 Hypertext in the 21st Century (Eric Brown, 13Mar 1:14 AM)":"\"ecd71eec0ed2c9744c50da913de0988d\"","4.04 Hypertext in the 21st Century (Eric Brown, 13Mar 1:16 AM)":"\"a121f68942c2a2c7719bdc24cb836a76\"","4.04 Hypertext in the 21st Century (Gladson Natarajan, 07Mar 5:36 PM)":"\"58ba4f1a221834e237f4b61da7337c31\"","4.04 Hypertext in the 21st Century (Jillian Christiano, 07Mar 3:18 PM)":"\"37a1625bb28dbb434e4dc48ae6633123\"","4.04 Hypertext in the 21st Century (Justin Cushing, 04Mar 7:44 PM)":"\"35f4c2d830b97850b6e7989dcaeef37a\"","4.04 Hypertext in the 21st Century (Malyka, 04Mar 2:45 PM)":"\"0805165fc02a3db8e935def988861d5b\"","4.04 Hypertext in the 21st Century (Marcus Spratley, 05Mar 9:04 AM)":"\"503f14060fc7808bdcdeccb34fc0a478\"","4.04 Hypertext in the 21st Century (Megan, 26Feb 1:38 PM)":"\"34b22a52d49d68eb94de405ebe8776db\"","4.04 Hypertext in the 21st Century (Mickey, 12Mar 9:11 PM)":"\"b624c472b6dc5b6f8cd5cc9235e56ba7\"","4.04 Hypertext in the 21st Century (Orinthea Sommersell, 04Mar 2:22 PM)":"\"6a6f659ddd45d65b6a923f53fe817420\"","4.04 Hypertext in the 21st Century (Scharem, 04Mar 7:24 PM)":"\"2813955fe4813842e378bc90a6601ba2\"","4.04 Hypertext in the 21st Century (Shannon MacColl, 05Mar 8:30 PM)":"\"78050c923b931637fdf60ce5aa78d6ba\"","4MoreWords-Designing, Writing, Interactivity, Texts: The Idea of Hypertext: Screencast Chunk":"\"1313a4b1644f3859e12df1547525e735\"","4Words-Text, Hyper, Wiki, Tiddly: The Idea of Hypertext: Screencast Chunk":"\"d9752b434f388efef58dacbb9f02f8aa\"","4th December 2017":"\"6c795e71fc4b9fe52d69fefe914f31a7\"","5.0X Self-designed Exercises (Andrew Houde, 01Apr 6:20 PM)":"\"237076dc290effd92dd7540175fcc114\"","5.0X Self-designed Exercises (Benjamin Furbeck, 13Mar 10:41 AM)":"\"9ded9d90c30cd926f55ecbe266429c15\"","5.0X Self-designed Exercises (Benjamin Furbeck, 18Mar 6:58 PM)":"\"23509e4e904464390d3c0d3409e0438a\"","5.0X Self-designed Exercises (Benjamin Furbeck, 22Apr 2:48 PM)":"\"bcb2b3b100216c37c27a80ab2d87e944\"","5.0X Self-designed Exercises (Brandon Helsing, 19Mar 2:30 AM)":"\"389fe15953d5a91c8ff211a597b0a027\"","5.0X Self-designed Exercises (Derek Smith, 05Apr 10:41 AM)":"\"aa94b30509ac40851c15ec17980f8b0f\"","5.0X Self-designed Exercises (Derek Smith, 14Mar 11:17 PM)":"\"cc509807bac3471857838e6e20283295\"","5.0X Self-designed Exercises (Derek Smith, 20Mar 10:16 AM)":"\"5a5a66921a2206d11eb0b673a72139f6\"","5.0X Self-designed Exercises (Derek Smith, 25Mar 10:43 PM)":"\"6d21e6ac0c3794f2e30d57705c29b4b0\"","5.0X Self-designed Exercises (Gladson Natarajan, 22Mar 3:07 PM)":"\"34f1e40e894bce353020989565685401\"","5.0X Self-designed Exercises (Gladson Natarajan, 25Apr 3:54 AM)":"\"49e106537d7d234f34ae34fe08d7d783\"","5.0X Self-designed Exercises (James Ward, 05Apr 10:15 PM)":"\"954188b3b3e656e0408d9059a9399a18\"","5.0X Self-designed Exercises (James Ward, 29Mar 9:53 AM)":"\"97368d54559e66755a7ff81d5d5cc90c\"","5.0X Self-designed Exercises (Jillian Christiano, 10Apr 10:53 AM)":"\"2600c8ed49fd7868816e01a140a99770\"","5.0X Self-designed Exercises (Jillian Christiano, 10Apr 11:52 AM)":"\"4d22eb2a2b2983178b55ac4a05e3f7d0\"","5.0X Self-designed Exercises (Jillian Christiano, 26Apr 11:20 AM)":"\"02d50b448e5d0fc17d6837a397dc82fb\"","5.0X Self-designed Exercises (Jillian Christiano, 27Mar 9:59 AM)":"\"6649ce6545f64092a7afa75b14ba6dcc\"","5.0X Self-designed Exercises (Jillian Christiano, 29Mar 3:05 PM)":"\"d51df84b9ffe926e324ada116e5399c2\"","5.0X Self-designed Exercises (Justin Cushing, 18Mar 10:13 PM)":"\"76a4eab6e63b2fa8304b1c475a489c8f\"","5.0X Self-designed Exercises (Karina, 16Apr 4:40 PM)":"\"94a9358720f8ae788abc92dabf2e4a39\"","5.0X Self-designed Exercises (Malyka, 13Mar 10:30 PM)":"\"d2e95f2eda5816cbd6d865da54131ce4\"","5.0X Self-designed Exercises (Malyka, 29Apr 11:20 PM)":"\"57bc4fad31859c857d3652cf17663cde\"","5.0X Self-designed Exercises (Marcus Spratley, 01Apr 11:52 PM)":"\"27b58a7a7a579a2f735aaddacf4f871c\"","5.0X Self-designed Exercises (Marcus Spratley, 14Mar 11:22 PM)":"\"11e4c487d65bb362ca7034c9d72ef89d\"","5.0X Self-designed Exercises (Marcus Spratley, 19Mar 10:18 PM)":"\"8c3ce061ae769641cc8fee6a8963d4d1\"","5.0X Self-designed Exercises (Marcus, 15Apr 10:25 PM)":"\"df3605cca1ef176efd52facd2beb0cfd\"","5.0X Self-designed Exercises (Marcus, 24Apr 1:32 AM)":"\"6955b880e91f645a64e1696d2db4b56f\"","5.0X Self-designed Exercises (Marvin Pierre, 11Apr 7:48 PM)":"\"2a9690fc0e48eb1d9ba34d9ca563665c\"","5.0X Self-designed Exercises (Marvin Pierre, 11Apr 7:55 PM)":"\"33a9d0f413741d1e4e10df63f8ebb88c\"","5.0X Self-designed Exercises (Marvin Pierre, 26Mar 10:25 PM)":"\"76f28ad63e2744b0dee3ef226291b158\"","5.0X Self-designed Exercises (Megan, 13Mar 10:39 AM)":"\"aa2040966ff6669ec3b5e7b5beb689e3\"","5.0X Self-designed Exercises (Megan, 25Apr 9:04 PM)":"\"fb3a93e4702a68a87b9d2f65a710189f\"","5.0X Self-designed Exercises (Megan, 31Mar 5:28 PM)":"\"deddbaa79479b974f2a6f550f23460b0\"","5.0X Self-designed Exercises (Michael C. Miller, 20Mar 9:48 AM)":"\"52b88818a9f502fa6663011c7b6fa076\"","5.0X Self-designed Exercises (Mickey, 18Mar 7:29 PM)":"\"31ad0720ca6fcb447120aab797f6f733\"","5.0X Self-designed Exercises (Orinthea Sommersell, 01Apr 10:09 PM)":"\"8eb759e41fbb36f639bb29eea790acf9\"","5.0X Self-designed Exercises (Orinthea Sommersell, 16Apr 12:46 AM)":"\"a6e91a4916248651ccd68d444b4b063c\"","5.0X Self-designed Exercises (Orinthea Sommersell, 18Mar 4:58 PM)":"\"d89c3583e72c47f8e047db117fb3cdcd\"","5.0X Self-designed Exercises (SHallenbeck, 19Mar 10:16 PM)":"\"9e09b1b79eb0410166f0d3ef9a7b5a1b\"","5.0X Self-designed Exercises (SHallenbeck, 29Apr 4:15 PM)":"\"cb6168e62d6c494faec25d90440ed6bc\"","5.0X Self-designed Exercises (Scharem, 18Mar 7:23 PM)":"\"95d6b8ff98ef642d12dda62f943c5179\"","5.0X Self-designed Exercises (Shannon MacColl, 01Apr 5:50 PM)":"\"00a7780b3d61844ce7b0a904553f58c3\"","5.0X Self-designed Exercises (Shannon MacColl, 15Apr 11:32 AM)":"\"6b3cd05c9025a8dd478237906d96251e\"","5.0X Self-designed Exercises (Shannon MacColl, 18Mar 6:14 PM)":"\"88ee5fb3c7e5949f5de30dc44bc62cb6\"","5.0X Self-designed Exercises (Steve B, 29Mar 11:21 AM)":"\"5b43be62cba8d82aab4992de6563a31d\"","5.0X Self-designed Exercises (megan, 11Apr 12:01 PM)":"\"178e7d0c9307e5df24cea29262a2823e\"","5.0X Self-designed Exercises (megan, 19Mar 5:24 PM)":"\"faefc32d4e5f91e2ca86c2c127bb8b93\"","53436320100101":"\"7251fa3b72890e83f9a293dc91618699\"","6th December 2017":"\"dc69b3f6f9d0f0cd275acca33596d2a6\"","8.1":"\"12e988574336c51c92ea15826e628b65\"","8.10":"\"8a4837101cc96e391e5ccf69599bd8a8\"","8.11":"\"2360070165d9d781b68d7fce13b548c0\"","8.12":"\"7277f1439c2c5e03f7f62aae0002f37c\"","8.13":"\"ff1194a7d22f1f7e73fdb2c498a5b580\"","8.14":"\"058190f04ac9446257e3f2e858684a34\"","8.15":"\"c1560b503559ef68fdcdea76af0263cc\"","8.16":"\"8b00cdd18a0d2b671d6263ce1bfba7c9\"","8.17":"\"b41463b6775007c03ff50f1bd8b84326\"","8.18":"\"2987ded7b72b9049f57ce33c5a3ec218\"","8.19":"\"46e370ab2d127d5b9aea8de5232e6e7f\"","8.2":"\"0b08c56680ba69719d2a05d4e33eefd8\"","8.20":"\"8e334151f55c9e5e518ded6fa0213ba8\"","8.21":"\"8818fb854c0cc668807838f3341c1e33\"","8.22":"\"fe56357b1c09faa1aa3d36e7cd047d25\"","8.23":"\"9e87292d064007267c9e7c7f6ceab416\"","8.24":"\"cb46b65f12912e8b888c548c6b93e9dc\"","8.25":"\"8362bc70b86e22f5fd8383b64e9c4edd\"","8.3":"\"83d5822536b9855d309f1e942af9af37\"","8.4":"\"b4ed17559b78b598ac5ba1aada3b81da\"","8.5":"\"389e7e8ae82c4a16bf54c4fa316f6b47\"","8.6":"\"7ed19d97b3103c658366439706713036\"","8.7":"\"5f1aa771ccfb5212af5d318df021c746\"","8.8":"\"e42a76fc9071f16cc6472d03efb8d1a0\"","8.9":"\"fe42577f5ff4160160855049d4365890\"","80/20 Rule":"\"52d25542eb6e7e1ae3de73eaf4db81d2\"","911 Report Wikification":"\"c1f5c2cd9dd3e2d62cb4cc486283e33d\"","@TiddlyCast: Hypertext in Google Apps":"\"6e117ce8854d9369afd1e783fff74942\"","@TiddlyCast: Hypertext in Office365":"\"2a8bab2831e4b410f6921b3451c1f1ec\"","@TiddlyCast: Roam":"\"a29ec0ca22d870d3feb5af89a0aa8c9f\"","A Google News Reverse Engineered TiddlyWiki":"\"8a118c3047540224a017bf80fcd32d5b\"","A Learning Community":"\"4eb80d8be44ca5615b829e52dac5ffbd\"","A Transactional Theory of Hypertext (McEneaney)":"\"80f6b79d16eec584a8ebbe3384238e87\"","A Web page that anyone can write":"\"b42da7742025c6766928f94400ed7fa3\"","A hypertextual bibliography":"\"20d35ee35e84b8f9a9290cde89f26c0f\"","A new plugin...":"\"ef1944e11e1d7de20ca9faa5f480f19a\"","A platform for writing, reading, thinking, teaching, learning":"\"bb5a5a0533d3cbcc3941f9e5589a13ef\"","A stroll through Stroll":"\"022f35961ad146634f4339a2047af391\"","A-B Testing Environment":"\"0d79b695549f2c074a19b610168f4968\"","About Designing & Writing Interactive Texts":"\"5438502552ff74bc5f2cea8b56ae9813\"","About Me":"\"176557999a1f907666f4e5557f790054\"","About Me in Tags":"\"53acd37bfedc5a79bf792317d5371fe0\"","About My Shapes":"\"ae9ba2477301c778a97344430dc22946\"","About the Course":"\"657ef5a886da4140816eb03a7870a524\"","About the TiddlyCast":"\"396c5640bf2b19c5cfb205b7b20eaa00\"","AboutStretchText":"\"21d6e7f08ca5d26247b9ba021e64648e\"","Accessibility":"\"e50901beaff04f59a3eea785327efa1f\"","Add BibTex functionality for bibliographic resources":"\"3a3a18ba06cd6efd72e36476e1269b79\"","Advance Organizer":"\"ca860842c107f8b07f0907aab5571dfb\"","Advanced Interactive Texts":"\"ebd40865a933fba0a9b7729c42655ffb\"","AdventureGame":"\"2a8dc2abfc00987c0452f8ffeb96478a\"","Aesthetic-Usability Effect":"\"eb8a7ca3f7851e5efa647ec92eb41ac6\"","Affordance":"\"9972e6946a17af114972ce52bc9487ec\"","Alicia Bower Final Presentation":"\"79e270ef9355d4568a308327dd0cc2a5\"","Alignment":"\"7f7175d4727d70b65b0c995474c4d30d\"","Alternative To? Replacement for?":"\"fb39d1274b60995f7c83f03729f4615a\"","An Edit Text box for Derick":"\"acda335b9cca8c22d24f729660111a12\"","Andrew Houde Final Presentation":"\"bade7c0ace913470e4b31e6d04cd5462\"","Annotate-button":"\"beeb30826cff1d9795927b40d2646341\"","Annotated Bibliography":"\"54f76c878375db35a6ed4ce4975c567b\"","Annotation":"\"e719c2063de06a618f45aed528c5fb7b\"","Annotator":"\"f1f223eaf8b5a8b6fb2ba1c7de74355a\"","Annotator Macros":"\"900740e105dab53cdb892751cfcfd5f5\"","Anthropomorphic Form":"\"0fc0a0b3d09c77449b8e6d20356f7001\"","Appears and tabs for each primary section":"\"37392f490cd22868a5efb5c2e90bdb24\"","Archetypes":"\"00e72e3c24dca985471be0818e9b8124\"","Archived Object Interface":"\"476a7b5bbb8aa28cbceb917cf35302b0\"","Area Alignment":"\"3b5029ee98f915449f88d0905cd04f31\"","As We May Think (Bush)":"\"5a570387bf974f18dab4376fd11a9417\"","As We May Think (Wikipedia)":"\"21328be18ae0a8289cf816c45f7c12da\"","Assignment 01":"\"075f47cb82a3837d7fd5786a109e1c63\"","Assignment 01: Assignment Overview":"\"08955b75dab4cf55c234ef5a16e7c6df\"","Assignment 01: Due Date":"\"e160d1f96d73a2a992398a63e620c63c\"","Assignment 01: Introduction to Class, Hypertext, and TiddlyWiki":"\"8c4b2cb29aa91ed654f7b0ba7b6b3a11\"","Assignment 01: Objectives":"\"d44822dbb36b23ad42360e9dd3bd543a\"","Assignment 01: Required Readings":"\"dd5d6e4a00a65218e443ad8a8260b108\"","Assignment 02":"\"8a18bd9cf6bd54ef1848cbfe9aea3620\"","Assignment 02: Assignment Overview":"\"eb2d747c9fe8bbda1185d72a889e300e\"","Assignment 02: Due Date":"\"bd2a227d0fde88e7022d4e396c7cb5d8\"","Assignment 02: Introduction to Hypertextualization":"\"ada00efb665cd2594a223a857c48bf76\"","Assignment 02: Objectives":"\"d0f120601572e24ef451a9510f8f7c75\"","Assignment 02: Required Readings":"\"7a6d64bfda1b3e461c39921ffcc39762\"","Assignment 02: Submission Details":"\"947c47a153b60de9939616467c74fa36\"","Assignment 03":"\"1d693775e51877e94a470657c6ede597\"","Assignment 03: Assignment Overview":"\"57f97a3164199c620a4568afc9a04e61\"","Assignment 03: Due Date":"\"be435de5a18e5a69546c5c4b8d0bd599\"","Assignment 03: Hypertextualization of Existing Text":"\"93b6a29451db372201ef5338805c2713\"","Assignment 03: Objectives":"\"dab69adc1fc5a5333755a95c052cf5c0\"","Assignment 03: Required Readings":"\"e7733bf198bfed10e4e05027e31cb7d8\"","Assignment 03: Submission Details":"\"aceaf682cd31bab2cf8b70af4ebf6667\"","Assignment 04":"\"4c71f1c20ddd380d4ace1c3da07d148b\"","Assignment 04: Assignment Overview":"\"99114d736c7a0c40121415738901dfd0\"","Assignment 04: Due Date":"\"dccb30877401cc7ce954ae1bef62c984\"","Assignment 04: Objectives":"\"57248e701b72624cbade5b08c2f70b53\"","Assignment 04: Organizing Your TiddlyWiki as a Class Portfolio":"\"0066f34e0e3a23aba43ea26d3f627793\"","Assignment 04: Required Readings":"\"7fc4d0c578614ff5f1e6cce17b6c1394\"","Assignment 04: Submission Details":"\"11cfdb6ae4852c69029d69c610d4d89c\"","Assignment 05":"\"6919072f8d8eedc70ccb1ad525714828\"","Assignment 05: Assignment Overview":"\"e2ee44932ae4286b6f86a2a7a016d5ba\"","Assignment 05: Due Date":"\"58142e7ab51bd35cc95141d4d8937b0a\"","Assignment 05: Exploring Two-Dimensional and Multi-Dimensional Hypertext":"\"c8d07bf328d8aaedeae592be6187e40a\"","Assignment 05: Objectives":"\"b6a6384ac652a70468cc6e9b818d9792\"","Assignment 05: Required Readings":"\"37fefd335a8505fe0d4b90aa9d347565\"","Assignment 05: Submission Details":"\"99b328cc83e6df088fe77d893d94218f\"","Assignment 06":"\"c8d9e7ad241567f0149028c5b0a6c534\"","Assignment 06: Assignment Overview":"\"4fd1eec4a8cb0c3bd93c022a77166a29\"","Assignment 06: Due Date":"\"e84e42897fefcd069a93e2f37e913680\"","Assignment 06: Filtering and Sorting as a Display Mechanism":"\"dde8d3adc820d8b0cb025c9073e66bed\"","Assignment 06: Objectives":"\"6c94b4b338360577261b3cd0de84f31c\"","Assignment 06: Required Readings":"\"364037e0f110896de021779a7242ecb8\"","Assignment 06: Submission Details":"\"04fdb939d79bfa9a56adb40fecd44cc0\"","Assignment 07":"\"c3c8c71ebdc8d9a116b070fccb6d29d7\"","Assignment 07: Assignment Overview":"\"861606a2e975f6ad7dd9302d0cdfdcfe\"","Assignment 07: Culminating Activity":"\"f776d541960dd760298459e3e33948e3\"","Assignment 07: Due Date":"\"af3285a7702c8351287f97b84149603e\"","Assignment 07: Objectives":"\"ecdf116f44a3016dec2678504b0ad201\"","Assignment 07: Required Readings":"\"a68eba3ba8c9dc0253e3fde59f6ecaec\"","Assignment 07: Submission Details":"\"b570e0347697f95e707277865acf10f4\"","Assignment Submission Details":"\"c26e0a3a72b69e7c071a4a713d21b148\"","Assignments":"\"135659a9fd961f311fee36cec96228ff\"","Attractiveness Bias":"\"88a0e7d844f6493cf94d1940626f3626\"","Audio/VideoPlayer":"\"65d15dccb8813002fdac977e7f7ee0d3\"","Baby-Face Bias":"\"d1db4b1ad1f4bde3743aba9e7a8185d8\"","Basic Shapes":"\"971648e7a956476106333be064b576ba\"","Ben Furbeck Final Presentation":"\"aa2898b2ab4b2145e918a0682275f6bb\"","Biophilia Effect":"\"e1d5922a77942df3d988bff3a04949d0\"","Blue":"\"ca27bc77cf108676c28ccfe8fdfed0d7\"","Bob Cardelli":"\"77a61901863aec47db7cc6a92d547aa8\"","Bookmarks":"\"f54d570702c39d10819ad2153a827045\"","Brandon Helsing Final Presentation":"\"890ba9b5a5b78d9a653cace2d6f118c5\"","Building a Rhizome":"\"e867a8d7830e9ceb490655ee73439639\"","Bush-As We May Think":"\"5536a62ada561763ba899361e09312d3\"","Buttons to navigate among tiddlers using a macro":"\"a436dbf09e4c8c3b8211fafea46a072d\"","COM 106 Course Design Project":"\"b317ee069f15e95c4f63daa224cd74dc\"","COM 106 Course Resources":"\"ead3d7538721ed06e904a31bf6be2e0d\"","COM 375 / IDT 575":"\"5a19545e1e38e8c4363662c5b2dee0d1\"","COM 375 Assignments":"\"1983e39218f94277a732a9507cd4f22f\"","Catalog Description":"\"6a84731d082849e06067d9c29cf9e8ce\"","Cathedral Effect":"\"3867efa0df0a2fc78077a389035d1774\"","Checkbox tag macro":"\"2a7054fadbc5d0e5860e2d2e7fff601f\"","Chris Copeland Final Presentation":"\"e0cd66b0cbaa5257079dd46a1702c33d\"","Chunking":"\"ad07ab4fc2b8be5b855481a5f2a5f0bd\"","Circle":"\"bf360a92d95743f715589f8909e9429b\"","Class Lectures / Presentations":"\"6489d55d5413194c066568f2a1e58f24\"","Class: Tuesday, January 16":"\"2a7d0e6a542fda11604c69c04c6c6ed4\"","Class: Tuesday, January 23":"\"0fab98719e89a96fb520f6a90bc2dc84\"","Classes":"\"03efbf1ead5164e1357e09f2a9832143\"","Classical Conditioning":"\"bf2ab20fd5eda5e1a4b5f6e7d66a904b\"","Classroom Workshops":"\"893d9b91a2ef7850516bb651e16f01f9\"","Closure":"\"7bc65e2ed51016d6178abfbdbd31472a\"","Cognitive Dissonance":"\"2e594553f8714e3e17fe62ac1e9cd564\"","CollaborateUltra":"\"3ac8034104b05cbf526b001758a3b8ca\"","Color":"\"3587b64dc98248d123c25377cc291829\"","Comment by 'steve' on 'Summer 2018'":"\"3a66d6c4138efa98e92092e2eecb93c4\"","Comment by 'steve' on 'Thinking out loud'":"\"be593d3507fdc200b75c9b6d7b9b93ce\"","Common Fate":"\"e81a3cbefb7265675848fad25030b8b6\"","Comparison":"\"4f683450be04d9e5e7e86d8b4cb9f948\"","Confirmation":"\"3a6896059e3fec9139efc9bfdbf987f4\"","Consistency":"\"cbbcff072b75df522eeac8dd10e29eda\"","Constancy":"\"423847dea28f53f38752a9c4d1b03fcf\"","Constraint":"\"fefb53cffe24b2af3338475b59d69eea\"","Contents":"\"df87c319f5260960f03fb7c2b8ce6ebf\"","Contour Bias":"\"9aad0dfa400e39c2d021fd5361082f15\"","Control":"\"28a1713406d3766c5426a624e103b2ed\"","Convergence":"\"a2cd8432d56d2cffad0afeeb4a9092eb\"","Conversations":"\"7ddc2357282daedd1cac54a4dd2acab2\"","Core features of hypertext":"\"963d809fad2c0a2946c91a1a272695e5\"","CoreComponents":"\"2eeac338d1a0d63c817104413c268c68\"","CoreSynonym":"\"ce0e6cc1eb8a409390b8d5b05f3da398\"","CoreTerm":"\"f8ebdc9c20aeb6f21bb82deb189a3ca6\"","Cost-Benefit":"\"dedcfcccc0e162adf90d4417ced88679\"","Course Resources":"\"65d90f7d3b42c930a67ca1bacac450e5\"","Course Syllabus":"\"e13a5e1072c831166a59f83732f09ed1\"","Courses":"\"240258d39c04e836bbab8f415c645915\"","Create a new tiddler":"\"25dadea13b5914932f2e7f4f589821b7\"","Creating a self-designed exercise":"\"1d4924342eb8950e9e0343f2e1c1b5f6\"","Creating interactive texts based on self-designed exercises":"\"29863eb508272f23a90509b93aa81058\"","Creative Commons Attribution-ShareAlike 4.0 International License":"\"c7c9f00aadd81ccbdbb1b1afc70188e8\"","D&D Campaign":"\"e527dc9db842657b8e7452dcdb75a5ea\"","DWS Strex Logo":"\"5319d376fd56e01853842f9ff1ec8c39\"","DWS Style Sheet":"\"5cd42f692473f800954a0cc91943c80b\"","DWS ToDo":"\"5735e662e7b252c8d627f783a8028f85\"","Database Reporters":"\"fe8f41ec945b811752da0e69292043c2\"","Dattolo Luccio 2009 Formal description of zz-structures":"\"e6e3fc5ed4449c269bc0d32d867cf5d0\"","Dattolo Luccio 2009 State of art survey on zz-structures":"\"1c66a486eb5503269bbf50dcd1c35be5\"","Dave Gifford Bio":"\"02f8b8f4e1e0e9f89f457d0c121884ca\"","DaveGifford.png":"\"13156abc1e524f221213f3d743062228\"","Defensible Space":"\"4f2210fcce8de15fb01a6a20c23d121e\"","Definition of Politics":"\"dbf83c8b2e939ca1ee0f2df40f8d8cef\"","Definition of xanalogical structure":"\"0d288a146e14bc172b36a975666893f7\"","Definition of zz-structures":"\"15338ccd9f6ef3461e1ae83884990455\"","Demo of multi-reveal of annotations using appear plugin":"\"8632e6bf5ffaefcf3b0b29e6c68f70c7\"","Demonstrate":"\"216e1760dcf1a06b923e317974a1798a\"","Demonstrations: Alternatives To TiddlyWiki":"\"b65a7de5af4d8830d48f1db89ce33454\"","Demonstrations: TiddlyWiki as a Tool for Hypertextual Thinking and Writing":"\"4f5fd35799cb3de7e0c7b1b69a628960\"","Depth of Processing":"\"8845cab6f3411b3480ef7a8db3516cec\"","Derek Smith Final Presentation":"\"52ad2f99b2a343b70f9ffe846cb6b196\"","Design":"\"7f157aa7566be9624268bb41aa7f0b68\"","Design Write Studio Definition":"\"8c455651483d8b71513adec44efd71c3\"","Design by Commitee":"\"96040999539f89e40dd2ae74e987dc93\"","DesignWrite: The Screencast, Summer 2021":"\"e334357aa0fb54aa1ce7a928a8df8b75\"","DesignWriteStudio":"\"16d4c60d2bf95faabc057ff439cf675d\"","DesignWriteStudio - Summer 2021":"\"30574ec07d86c261961a8a8f72638252\"","DesignWriteStudio Contact":"\"bcb4018c84f3ff395840f3b28339749f\"","DesignWriteStudio Customizations":"\"3f392cebbf06713f8713c139ae0a0163\"","DesignWriteStudio Definition":"\"7c71ef5cf3b2e54ccfa2caf84a3ebf9d\"","DesignWriteStudio GitHub Repository":"\"99c53aa4849ce2d68bf6068a76fd8609\"","DesignWriteStudio Priority Development Projects: Summer 2021":"\"5c5c9cb685229a3ace3498e79e4a744a\"","DesignWriteStudio TiddlyWiki":"\"c088724e408ece7623d2d3d4f573ef3b\"","DesignWriteStudio is Open Source":"\"14d4b0e6934ca96acc270c2dda97d743\"","DesignWriteStudio: The Resource":"\"55cf43005e0b5b160b606cfc1d82ada6\"","DesignWriteStudio@SUNYPoly":"\"a3bc8537c3fbb2bc1269ccac1449d0a2\"","Designing":"\"d126e4a002879296b9bc998dfd8c2894\"","Designing & Writing Interactive Texts: Part II":"\"c0e596c34dfd85a80cee9f4f5d34a1d8\"","Designing and Writing Interactive Texts":"\"5f12c7a513523e2b6da19d4c7d946c4c\"","Desire Line":"\"cf266f45870a3c3fa438e7ccef806f21\"","Development Cycle":"\"2dd4f50ffb28b4d7c1dcc080f3af5f06\"","Digitization as a form of Interactivity":"\"f264c3d7def703f63ed3790df629c577\"","Dim Template":"\"3f1ad44ce8f0f7a89a4319b3a511bed5\"","Discography":"\"110120293558a30b3b2f027b8c22fc63\"","Display":"\"0fa6fea3ad15ef56412d52e8daa07d06\"","Documenting Design Write Studio":"\"2d52b7e2e301faabc5f95aa0b433f726\"","Dogs in My Life -- Narrative":"\"5a776582b97c7c3c0305bd697b3970a5\"","Dogs in My Life -- Objects":"\"562fcd2d053bc1f5d902cf2dfa81060e\"","Download TiddlyWiki":"\"6cbfb6b10156999208cb2dfa63901739\"","Draft 2 of 'TiddlyWeb: Tiddlywiki Demo: Screencast Chunk' by steve":"\"587cb5fead9152211694cc89d9e503eb\"","Draft of '3/1/2018 10:35:16'":"\"615713b641d94bbb9713d54d08ec6e64\"","Draft of '5.0X Self-designed Exercises (Derek Smith, 20Mar 10:16 AM)'":"\"b69ac0acc1920fcb7c1fa4bd5633bbce\"","Draft of '5.0X Self-designed Exercises (Marcus Spratley, 14Mar 11:22 PM)'":"\"b115e07da979f727525590c15139ac88\"","Draft of '911 Report Wikification'":"\"58d6a9b6dfc7347fd53f283fd6262c2a\"","Draft of 'Class: Tuesday, January 16'":"\"01d18c1d9c692a8eba4b55c23249c0cc\"","Draft of 'Class: Tuesday, January 23'":"\"4dacc7f120401df0969ee13e03a65a05\"","Draft of 'Design Write Studio Definition' by steve":"\"6be1afb10623ddde582ace1da7a19d71\"","Draft of 'DesignWriteStudio: Summer 2021' by steve":"\"96ff9ef7209c7c402191cc60b7e1618a\"","Draft of 'Exercise 4.04 Directions'":"\"1ca1e502f6f1d0567ceb9d2bda094e22\"","Draft of 'New Tiddler 10'":"\"6f9637cbbdf6f161c824fac1345def9d\"","Draft of 'New Tiddler 9'":"\"87a886b609441eeb51ac0baf13dcdd3e\"","Draft of 'New Tiddler'":"\"88fb04ca755cb918f7fb493b80990b8b\"","Draft of 'Paragraph Template'":"\"792d572643180bdee63a9cdd6f968116\"","Draft of 'Presentation: What is Hypertext?'":"\"4446309cd65222fbf6cb6652a698e000\"","Draft of 'RN23'":"\"53117329138503b9f34f00c29e1ca18a\"","Draft of 'Testing Bibtex References from Web Of Science' by steve":"\"84f7fe8299c2487698ec4dd7974feaef\"","Draft of 'TiddlyWeb: Tiddlywiki Demo: Screencast Chunk' by steve":"\"364dbc4ce0553c304481dbab0af490e1\"","Draft of 'games? from the folks...'":"\"230c5f1f01b2f3b1634691df40d718a7\"","Draft of 'shared-exercises template'":"\"712e5a65f9e686d102afb369328fba2f\"","Due dates and submissions":"\"9f09594839217314227e1213f5fc08d5\"","Dylan Pagillo Final Presentation":"\"dfcc1f1e385d92e862eb1621b5945560\"","DynacastthumbNail.png":"\"cee8aad6f57ef51d65efb0877066ed1e\"","Dynamic Photo Album":"\"0be0ff52fb3184ea67831ac3aeb7d817\"","ElectionResultsProcessor":"\"eafd615001da4991cb116952d5cc60ed\"","Elise Springer Bio":"\"e5c54be7ecd9236dac1f6b67c951c09c\"","Embeds the grammar of hypertext in the punctuation of writing":"\"67e750e8b97226071d50f6644efb3ab3\"","Entry Point":"\"3dff3b7456b9e64bb2fb5967edc0eed9\"","Eric Brown Final Presentation":"\"3fc74e444dc4fd1b4aff55e6ebe12183\"","Errors":"\"adf5d8743928ef4162848d39a010ea49\"","Essay 15: Varieties of Hypertext":"\"4d5cdc3c26c56b2d30d10a4fcf45a915\"","Essay 8: Toward the Tabular Text":"\"8dd534165b022faf2c76ed61f971880f\"","Essay Template":"\"ad91b1db3d754df10b6b4d1afa5c777d\"","Essayists":"\"c944328f245f2ccd40c13b03600467ba\"","Essayists 1":"\"05b9b349b3e32538467347037f9950bd\"","Essays: Applied Hypertext":"\"542e540e1083bb3d560eb76f087c0022\"","Excise":"\"c432bb7b81324046695bb2f8ba18496e\"","Exercise":"\"3a4aa83fd6163ff290068d1201008535\"","Exercise 1 Directions":"\"8a0a5ee74bc21ca5c7d4fd29eeb84ae9\"","Exercise 1.01":"\"a524e3776d490a339ff5ee85bcc3b06f\"","Exercise 1.01 Directions":"\"cbd78188e5b6a23c9a3b2c6373a7a961\"","Exercise 1.02":"\"5a5689525965911240e82f2f4830aa0b\"","Exercise 1.02 Directions":"\"efc97257d325ac171dc6a99aa1bcc53d\"","Exercise 2.01":"\"e19f6fee2fe4a863f4aaef8eb6abe658\"","Exercise 2.01 Directions":"\"8fb8e27c290a3b1c93423e1b2c73d953\"","Exercise 2.02":"\"dd162f6177a055b67bfd271b54f4e8f2\"","Exercise 2.02 Directions":"\"1b7f813120ba4c8c9805d772b6d4969a\"","Exercise 2.02 Generated Story 1: Dogs by my feelings":"\"c9495e189aebd5e58f4bff5098d7eb32\"","Exercise 2.02 Generated Story 2: Dogs in order of longevity":"\"61e028f47629eb73e969e9590b7b7269\"","Exercise 2.02 Generated Story 3: Dogs by who owned them":"\"8e7b9a877abf94a4772c3fdfc6febedb\"","Exercise 2.02 Template":"\"775dede37913ddd264c6f7689f15d9d1\"","Exercise 3.01":"\"fb1805a89dc40850d92d44e41b0ec692\"","Exercise 3.01 Directions":"\"eb77fbe509b9e4028a26a66341a3f7c7\"","Exercise 3.02":"\"1a94469708924f73319e42e0dd684160\"","Exercise 3.02 Directions":"\"7f8a5d32bb3d83cbd80ffc448909f899\"","Exercise 3.02b":"\"a63d246d4cd6d1e6097a890e1a77ceef\"","Exercise 3.03":"\"ac5f95cb1f382ed30d0fe75dd55703f9\"","Exercise 3.03 Directions":"\"bf852cd236db6b7c4b6b719c7ddf3392\"","Exercise 3.04":"\"a1146843994f3afc21fa90994853d5b7\"","Exercise 4.01":"\"83a123fec2b8ec3c1cee8aeef90ffd95\"","Exercise 4.01 Directions":"\"addac5aed0f46d42eab93b207d6c6c03\"","Exercise 4.02":"\"247e95b4fd70b1d41a397049b8317d00\"","Exercise 4.02 Directions":"\"9f26341423a3acc05df464fe1af29d16\"","Exercise 4.03":"\"65dca7ccb53396cbb1c1d80a65287a17\"","Exercise 4.03 Directions":"\"d7cc6bc568c9a8f686034d3451fd5176\"","Exercise 4.04":"\"820d2cf3397777ea94abe20221116f78\"","Exercise 4.04 - Not Active":"\"8d5123649b5237bc72fa2e412be09ca1\"","Exercise 4.04 Directions":"\"4724a4fa74fde80a45f29cebe2af6a57\"","Exercise 4.05 - Not Active":"\"8316d7ef1a0e4c6c32557bf6338f3a2d\"","Exercise 5.01":"\"d038591ed5c49e9392048f90db2efe88\"","Exercise 5.02":"\"6063074b7290d6a4c19e3f2d8f5e078e\"","Exercise 5.03":"\"53e1e1367b74f44264cc0ec10a0943bb\"","Exercise 5.04":"\"41f0f84fef900f3f768e57af106d0f60\"","Exercise 5.0X Self-designed Exercises":"\"9cad9203c940e767bf6e298f326b38f9\"","Exercise 6.01":"\"c19e1e67ee7919a3bb1fc53559a61f98\"","Exercise 6.02":"\"6c6df51b1141a7e8331785da88156f70\"","Exercise 6.03":"\"35e3ef36af81b8d050995a9328deb8a2\"","Exercise 6.04":"\"3a3d04180c6121f378c457849d46c359\"","Exercise 7.01":"\"f7d15a5e3490bd303083270413455599\"","Exercise 7.02":"\"fb64e2459fc92cd55f4c45531ade31ad\"","Exercise 7.03":"\"e17d5db0217110d601d859d3f7110825\"","Exercise 7.04":"\"d541755db7b3c0ae8532ad131ef034df\"","Exercise 7.05":"\"7335a94e099b18426280d6dd8822e577\"","Exercise 7.06":"\"69244088462cf78c550fcfeeecfc25df\"","Exercise Groups":"\"0b90f1f07523e0e613216844909aba5e\"","Exercises":"\"c0a6108822990fa2297d8e21bb27c47a\"","Exercises for writing hypertextually":"\"9574d7fb927cacb076e63bf9b3771ee9\"","Expectation Effect":"\"bd177177de2abf77095a069f926aecd2\"","Explicate":"\"e1fa96f5621609ffa38e6a6764ad35ef\"","Explicatex":"\"35555b712479de4c05a0301572e127bf\"","Exposure Effect":"\"fe37637bb6d096099c086b6f4d277c14\"","Extended Hypertext Bibliography":"\"193a8a289f8230d968741d14fda14b36\"","Face-ism Ratio":"\"24728a8e5648f92add30cb21a50dd29a\"","Factor of Safety":"\"cc73f52fbe13aa9dc1bb9b84a236a79b\"","Feedback Loop":"\"d07f8bf2ae364dff9880fa1f73378a24\"","Fibonacci Sequence":"\"17f5e50fd8d6265b8d90353063fc9970\"","Figure-Ground Relationship":"\"cef687e8b30b2cdea83f9d8e3e7142e3\"","File I/O":"\"8f0dc68a622050110fb150e1e009e576\"","Final Project":"\"ee5b109dcc9681f9a7a3c2567ca2f933\"","First exploration with story list":"\"7c459b1d05f2a3409070d8840ee39aa4\"","Fitts’ Law":"\"1eff6b4f82c8a024ea87a02df340b543\"","Five Hat Racks":"\"ec7a5c818c299d1882b34d81d9be74b9\"","Five Practices":"\"5a401723adad0c326934b9db8c160cb7\"","Flexibility-Usability Tradeoff":"\"2f3ed40f9950c51222367323e993f01e\"","Forgiveness":"\"c16039ec4f31b386d3d4dcbb0501ac23\"","Form Follows Function":"\"5b8ea0e38480d6330d244183da31a5aa\"","Four words":"\"1f0f1cdf797e54bd7ae572fbe7dd1f53\"","Framing":"\"cf364b15d1b7043d56a6c31a28342023\"","Freeze-Flight-Fight-Forfeit":"\"0fcdd6c55f2c3380c305ff702c751166\"","Garbage In–Garbage Out":"\"b913a295473767ab8e8d0969586d6c55\"","Gathering data for IDT thesis/project":"\"1fc20a8e2d033c9634774a390f77ff31\"","Generic Slide Show":"\"9a9f0c501bbc7fac09d04f6892969feb\"","Generic Slide Show 1":"\"fd297e4eb4f7426c1181d32c2f7d1e3f\"","Generic Slide Show 2":"\"ded63ab260bc2b38be7967e7b6d328bb\"","Generic Slide Show 3":"\"9c1fcab1e08c601be14cda08e00a5bce\"","Generic Slide Show 4":"\"94e92d4160e751c949fbed5005b0ce90\"","Generic Slide Show 5":"\"66a9fd67b6879417a9cce71877ba0dcb\"","Generic Slide Show 6":"\"dfd28070b81a000984a139296a0dca0b\"","Generic Slide Show 7":"\"9a1702ae70e9f7e596a158074ce6bbfb\"","Getting Started 0: Check out TiddlyWiki!":"\"281fb1d9821b9af0049e4890b0496ccb\"","Getting Started 1: Hello World!":"\"c506ac796fea6393b6c6d64c576ef579\"","Getting Started 2: About Me":"\"b2abbc342474f33a03d49d0e051863ce\"","Gladson Natarajan":"\"9627351626fdaf83a3f2ab074bbcf1c7\"","Gladson Natarajan Final Presentation":"\"d21dc89ccafcdbdf4023df50de044759\"","Goals":"\"7446730dec5ca99135e4e193c8d19b0f\"","Golden Ratio":"\"c61322d3e1a07c3729ba542ec3ba1992\"","Good Continuation":"\"67274fb76c05a1b1f966f166e4353e85\"","Google Macros":"\"b74df8ef68e1b1083ea0eaceedbe44cc\"","Google Query on Nelson Transclusion":"\"b436468f64b497220bfb6958f775af5f\"","Google form to share links":"\"3f2a4a50fa9a83eeadcfcb71b9ce1c22\"","GoogleForm for SharedWiki Submissions":"\"36f4a2d752ec9101da9f14aad32f08d2\"","GoogleGroup":"\"2bb387e07839e4741c6b6bd427a4ccf4\"","Green Eggs and Ham":"\"943ea46f5673a558cd35952ff598adf5\"","Grok TiddlyWiki":"\"595ea5ccfc501c19d6dd7017a13baeb3\"","Guide for TiddlyWiki New Users":"\"b992b0775cab5b551c3c10ec844c8349\"","Gutenberg Diagram":"\"372ffb5949a1aed2e76276cd6ac312a8\"","Hello There":"\"7a9a1a7e314f938feeff997c4a67fce8\"","Hello World":"\"380c47f4b1b2209e87593e7e4a636aa2\"","Hick’s Law":"\"c26da0ecf7f78cf5561e2ca8bf6ba26d\"","Hierarchy":"\"f78d5485f829297147b87df9254978a0\"","Hierarchy of Needs":"\"8864be278e5999fe0d2a5679c2543516\"","Highlighting":"\"0eb425750f8a4f70513d65afff55ed8b\"","Horror Vacui":"\"6de1eeb01a42eda1aa88bbc5f35fc2b3\"","How to save bookmarks as a project":"\"a192b7f8ec2591b66a8257177a3ec81b\"","How's it going?":"\"5108acfbc69fb7490b456db2215ea842\"","Hunter-Nurturer Fixations":"\"227ec8c92b4ddab925880da2fdd8be0f\"","Hyper":"\"9a2a2029e945fa99d486a95b8a2e758d\"","Hypermedia":"\"e401ffaf8de8e70b3a51f66e129d9cff\"","Hypertext":"\"a5aeb2cc7d1e27e13e879573ae243039\"","Hypertext (Wikipedia)":"\"f39b9006c73f6f40ad6f8d3b43c117a2\"","Hypertext / Hypermedia (McKnight, Dillon, Richardson)":"\"ace335b01df2094193c8e3733e786d76\"","Hypertext Teaching (Braisier)":"\"aceee81ca470a05af87f882648c480b5\"","Hypertext Teaching (Miles)":"\"d23caf5ad9e178da62d8a24ec4cb791b\"","Hypertext Theory and WebDev in the Composition Classroom (Cripps)":"\"4fa442c1ec80f6dea81bd9680ee29536\"","Hypertext TiddlyWiki (from IDT507)":"\"840a3609f671a2c799ac1fcd54048319\"","Hypertext in Theory and Practice":"\"3ae0a31df1d3bd2ba51d25db61582fbf\"","Hypertext(ual) Bibliography":"\"95fcfd444f71aa9b6d900e671f24175f\"","Hypertext, Before Today: The Idea of Hypertext: Screencast Chunk":"\"5e2d763a9d34610740c67d3e957d32df\"","Hypertext/Hypermedia Handbook":"\"5fe2b154f8627a2e53ad1a844f4a504d\"","Hypertextual Practices":"\"11465308840567161cc8687de024d90c\"","Hypertextual readings about hypertext":"\"681b0a50642e7f3f9c5fe2ec2f766864\"","Hypertextuality: The Podcast":"\"d238c72dd179b76c18160e923b4f911a\"","IDT 553 Module":"\"a292375ab5d85e4f4114cf6bf83953ac\"","IDT 575 Assignments":"\"365bf2c4ed7644b686d4524929952426\"","Iconic Representation":"\"dd714311d26fdad66414210aecebedae\"","Ideas for exercises":"\"8acd9d61df0091c9d5e3ce6ad33f2303\"","Illustration 1":"\"d2a62ba6814860662a98a57d52cc3b10\"","Illustration 10":"\"d16328fc1d2bcf2ef8b89a827d2d1a94\"","Illustration 11":"\"fe7fba172e9a3a8dd1c654e7def0ebe8\"","Illustration 12":"\"14014fb3eee04657baeab8d0804293cc\"","Illustration 13a":"\"96f369936028ca0b329542e69176571e\"","Illustration 13b":"\"f739179ee3ec0399acb5a92417ccbfd5\"","Illustration 13c":"\"68be9d195d7984a2e87145e857a248f9\"","Illustration 13d":"\"3092d1187623b715f606cd5cacf32d5b\"","Illustration 14":"\"e29ae9e24be1e0397a74484cbe631c93\"","Illustration 16":"\"0b225148ed67c9ccec88f87b24d29332\"","Illustration 18":"\"99dc2e0a29fd28c4a61b11fbb6a1898e\"","Illustration 19":"\"fae73f22ca8226f029e66aeb0d18d749\"","Illustration 2":"\"f3813abfe8c484a7186e229fcf30174d\"","Illustration 20":"\"9022ec2bfd947b688eafadd3b44b7708\"","Illustration 21":"\"0a88061d0e1131dc500aa915d1b23351\"","Illustration 22":"\"f345e9b698ec7cb16b3f9f71088e7709\"","Illustration 23":"\"8d0003be9cfdca13537779be269de9ca\"","Illustration 25":"\"58b3fc3a0d414973ebde4fe649e2ebe0\"","Illustration 25c":"\"e1a009d3a44677271c64b5e582b73294\"","Illustration 25d":"\"bb823fa99a62be6695c87ca4e2e15d74\"","Illustration 27":"\"ebbe062f25a0d5b95cb403113215f7a2\"","Illustration 27a":"\"06a1c0ca42b35821b023c04c18127f31\"","Illustration 28":"\"b3b64c04ffbac679ef1ff635d1916ea3\"","Illustration 3":"\"87426d2a1859fbf1ff57995ad2dd21aa\"","Illustration 30":"\"d13b8dfc99ee74a1d4ef58938174f1de\"","Illustration 33":"\"04be40635bfd22ee32658a499f0e0f1a\"","Illustration 33a":"\"bd542924d1f54cf39f0709ba59d150dc\"","Illustration 4":"\"245370ff9c0941241c5ebb675cd4611a\"","Illustration 5":"\"9fbe8071a9d3555d0ad5b16dfbefec44\"","Illustration 6":"\"f3368ed10973c1c9833a90da36c4eee2\"","Illustration 8":"\"39827ef0fc1dcc6a41c32da02acd39a7\"","Immersion":"\"5ecf92f71a316e33c0ab5c1a7dd5eae6\"","Importing XLSX files":"\"a80548b59c7c7025ed845403756bd000\"","Inattentional Blindness":"\"2f7643d3243b290ddd94b7f4e960ddec\"","Instruct":"\"e3345a3c2290d4fef06ba1fefbc7420d\"","Interactive":"\"bb4c7fc1375bc0feb1109b76ea1cf87a\"","Interactive Literature / Poetry":"\"c6045887fc21c4eba931dfe708150a61\"","Interactive Texts in the Wild":"\"ab982df6b43a376ce369e1d9446f653e\"","Interactivity":"\"2dba2418654f45cbf5f00eaa7ffb4fa0\"","Interesting use of svg in a slider":"\"f2542e7ae78a54f49648e889848d18d3\"","Interference Effects":"\"52fbb31bd869e3873067d7e6c276ab50\"","Intermediate Interactive Texts":"\"ab2cfdf7b076e9079500c2850eba9b41\"","Introduction to Computer Lib / Dream Machines (Nelson)":"\"44b13acf412e3903aefa57bce781339f\"","Introductory Interactive Texts":"\"248a6e5c29c43fce745bbd384a4a4411\"","Inverted Pyramid":"\"ac3bed22fed5b6a78cae8c23e63dc9ca\"","Is this a General Purpose YouTube Clipper?":"\"b1a653c7127433a45aca07b25e08be9f\"","Iteration":"\"7dfe23346f833ef3e0cf7e6ff70b40af\"","James Ward Final Presentation":"\"a2828f95a1c55d676b87f10afb5988b8\"","Jan-May 2018 Calendar":"\"1551f869def3f19817c71f0a5d978e80\"","Jeremy Ruston Bio":"\"f0f01373d53367bbf9df13287479b1ff\"","Jillian Christiano Final Presentation":"\"dfb3482b8ea392a5efbb3e5667d434ed\"","Journal":"\"ebba5328cb531a7e88d019a04182b75b\"","Justin Cushing":"\"abcbdea952da7cd959ac63b7aa26c01a\"","Justin Cushing Final Presentation":"\"cb28ce2dcac523aa6147a83d95de8e99\"","Karina Benninger Final Presentation":"\"1fa004f6d41c518cd06a7638d11b86d1\"","Key concepts related to interactive texts":"\"0604a2ba2aba709e1a8fd1aefa4a0274\"","LastSlide":"\"dd2ec44611d74194ee42300e4e3dd714\"","LastSlide 1":"\"cc6bbe268d968f56f56dd746e2235f77\"","LastSlide 2":"\"61a8c420a12fea9c1514528b5fb287f8\"","LastSlide 3":"\"d55c1f6ad1f1b32a736d7aa626ef5254\"","LastSlide 4":"\"1cca85e355b3fe73a654144369e34ba0\"","Law of Prägnanz":"\"0dc5c3447122f8946a4c2c1c1fe5a8bc\"","Layering":"\"c4df2f4d966a2780dcdc5dd371a818ad\"","LearningCommunities":"\"d913ad8a96aa6534d5a8df5c9f5d852a\"","Legibility":"\"759a59327b40698e337c95addc571fab\"","Life Cycle":"\"3173d1fd104a4ca9918cba7de3ce8b79\"","Linear Text":"\"b6264efe693b08be26edfd72f174a243\"","Linking":"\"0e699f6f95a3331df8dc8b656e5b2657\"","Linking in TiddlyWiki":"\"c1591dd585913a60780739445fa03237\"","Listing":"\"0b36b02d93b1e34120c33be961e9d70c\"","Listing in TiddlyWiki":"\"c9787fa93228d9ca120a6ca6a6903202\"","Literary Machines (Nelson)":"\"241e6c1f8b7fb7763ba5e3fc149b2e1c\"","Mac OS X Chrome Workflow: Saving using TiddlyDrive":"\"960edf76343d5236f6bedb0cd260b26f\"","Mac OS X Chrome Workflow: Saving using saveTiddlers":"\"e1bce4a2d2291590eef04a3c71f517bc\"","Mac OS X Workflow: Serving via ftp.sunyit.edu":"\"b85c726ce1387eb2cdf7553066f4383f\"","Mac OS X and Windows Chrome Saving & Serving Workflow: Tiddlyspot TW Creator":"\"3a9661ad802a18b03c4e85e7fd074cd1\"","Madlibs (or other word games)":"\"ac5c484c88824af17b7f835b5266179f\"","Maintaining Contemporary Citations":"\"225a92435609e196d186c3874bfcfc81\"","Making a crit":"\"3d1be185986d953ecf32a4b7f7062525\"","Malyka Hamilton Final Presentation":"\"a9dc2f29467dc176950db04522afa6c9\"","Mapping":"\"4fb99c7610bbf6824eff9cb463498836\"","Marcus Spratley":"\"81962ff7917b94778798063f1d11bcaa\"","Marcus Spratley Final Presentation":"\"d33acec26b9da295c4973b555352bda8\"","Marguerite Final Presentation":"\"6a4cf3fd2d96d9ee035ff09cd78c93e8\"","Marvin Pierre Final Presentation":"\"df900913d1ce54b66e52b75579583c00\"","McGuffin 2004 Comparison of hyperstructures":"\"fa94f9a0e01009eb23b8af74737f3879\"","Medium":"\"ff50623a0b964c995cd3334756825be9\"","Medium Blue Circle":"\"68b4f89277336e2988c945b455a228e0\"","Medium Blue Square":"\"23d7be6d7adb21fb1ba7c5f56bee237e\"","Megan Final Presentation":"\"0112209a22f0fad088005b7e78533f1d\"","Mental Model":"\"59fea20f995153597bc7da235bdf0fec\"","Michael C. Miller Final Presentation":"\"43ea803d883285fa6e8d4a02f0d4d53b\"","Michael s. Final Presentation":"\"1d24096ef4ceff61b53f3fde10168171\"","Mickey Heljic Final Presentation":"\"2bf5095ee4f809958a9dc3e4fa61271c\"","Mimicry":"\"117c4eb83c8e9907c58f5d36b7968be5\"","Mini-projects for Summer":"\"cd528f925680bcbea8fbae01dbdd991f\"","Mnemonic Device":"\"c004eb9f0d21d0bb9eb5605fcd9f0451\"","Modularity":"\"ea21450dab920bb7b8c9ffe893eef4e1\"","More Topics to Come":"\"a8dccaa76f2be08f8160908e8cbabd64\"","Most Advanced Yet Acceptable":"\"05eeb9a34f29b1fb3e0c55afff16ca5a\"","Most Average Facial Appearance Effect":"\"cec508b0d76ae8f75e4975d33533e878\"","Multi-dimensional Slide Show":"\"d5157197819075f16ec4f25cd1631aee\"","MultiDim Slides: Multi-dimensional Slide Show":"\"014f2a26cac5d6c15b62614300f48866\"","MultiNav: Multidimensional navigation among tiddlers":"\"9da33afabc34f8d2731c751c3cfa3783\"","Multimedia":"\"02d0ddf5cb67afe76b39034da3bb0498\"","MyTextTiddler":"\"1ed9c07bee05241aea63156b20a306da\"","Naming the Unnameable: An Approach to Poetry for New Generations":"\"7db73120b6c6cfef5b5b42fc7024a289\"","Navigating Through A Set of Images":"\"cffa5e195f438a3608fdfbea05e4540d\"","Navigating Through A Set of Tiddlers":"\"ace3e468ede74b102d591b0ad8a1e754\"","Navigation among tiddlers with buttons":"\"7c3698fbdfd1d5e9842e674b804cf7f9\"","Navigation-Help":"\"0d1f6f5f26fb045b52a0bc9a5a785f52\"","Nelson 1999 Xanalogical Structure":"\"2ea6a1d4406c3f9c2d27bf97668b0cec\"","Nelson File Structure for the Complex, the Changing and the Indeterminate":"\"f8905217b3fd06b66ca99aa963302e02\"","Nelson on Transclusion":"\"359df6714498328ee915e4748460e104\"","Nelson-Computer Lib/Dream Machines":"\"36f155171d8f0724d1eabd6a412e8706\"","Nelson: Discrete or Chunk Style Hypertexts":"\"4020db2da5c43bb8c92ea672fc49c485\"","New Here":"\"96327443c98cf5aaff058dd076bd9439\"","New Tiddler 1":"\"773a537bb4a1c035d22140f861bf4d93\"","New Tiddler 10":"\"8fc1594ddcfaebc11efa104345772558\"","New Tiddler 11":"\"8a5d9608ddb5bcff027f1e0b3dec29c4\"","New Tiddler 12":"\"7e1adb28913be230399afacd503a4f97\"","New Tiddler 2":"\"c4f152bea803225536f92d8ffd438791\"","New Tiddler 3":"\"ed2e8ba6c90747a2dd5b334c5ed0d0b4\"","New Tiddler 4":"\"f067b3fd2a172205a5cdf8564754a872\"","New Tiddler 5":"\"6e1c2fe0c13f002cc7a07e6ad30574ad\"","New Tiddler 6":"\"675372d5832bf9dc9eaaa3f3f4fc3577\"","New Tiddler 7":"\"d0d4caf604061bfe182e32e1e031a00b\"","New Tiddler 8":"\"4b4c64868ea5ab2df09d47628811cf30\"","New Tiddler 9":"\"5132c66fff33c79aff2065ddccf26865\"","New workflow for setting up tiddlywiki files for critique":"\"a1f9397673a8682cdecd72e0e0b5c85c\"","NewAtDesignWriteStudio":"\"b26f83cce6bfda518515736ff03b1999\"","Next In Hypertext: The Idea of Hypertext: Screencast Chunk":"\"cb86486e66f46871a62beb1e037242b2\"","Noon Wednesdays Utica Time":"\"28dcf4ea76e10ddeeee846e277fb2841\"","Normal Distribution":"\"af8304e712b3840d9f49f2364e07d5de\"","Not Invented Here":"\"c9504e310f8497e936c2e35e7f5c1e2d\"","Note to IDT 575 Students":"\"4e3f78b21e35f22246f7378d6b5a67f0\"","Notes from OER Conference":"\"abaa9433173a4e17e18af3c50e047795\"","Nudge":"\"610f7bbf545c3dcbd573fc4763ec66a9\"","Objectives":"\"794ee068dd71886c83c0445bcb8c4f39\"","Ockham’s Razor":"\"f71b2883f9fe3caa953054bce2bd55b8\"","Online Synchronous Workshops":"\"f8f71ab9bd8c4c045970742c6baa5ab2\"","Open Class: Summer 2021":"\"682712917df38b6131762dd2b9aa6a13\"","Open Course":"\"3d51c78ee6f75e02a0f0e24e9c5dd57e\"","Open Course Spring 2018":"\"322c5144dd48bf8dbb3b53fca0350c10\"","Open Education Research Lab":"\"5a6e6a2ee755260323519a9edb8e316c\"","Open Source":"\"2774319d29c2486e5d5b7fb91514c196\"","Open Students":"\"7bec2ecff1497c01b00fe01c840c4a1b\"","Operant Conditioning":"\"b2076e0ac3acc2bbd753d0b0b276c299\"","Orientation Sensitivity":"\"8a7fd1b9b3c04456ab23a2114a1a7386\"","Origins of the word":"\"d7830a94890dc14d8bd95850b50fd2b6\"","Orinthea Sommersell Final Presentation":"\"37b21dc35d79d6e1b76080d63ce8791c\"","Outcomes":"\"2ee92c694f2f13d2fa0f250582959f46\"","Paragraph Template":"\"67829e2fc2153d0d02c62cf888655847\"","Performance Load":"\"392feb49dcde7252242d11a7af99cf52\"","Performance Versus Preference":"\"c0fda9547616340b3bc1fdebe116a687\"","Personas":"\"0eab31316fed071b8e216a96e815c67c\"","Picture Superiority Effect":"\"b22246430295bd944886312f0fd990f0\"","Plugin for bookmarks in tiddlywiki":"\"26a32c7f92a7a4299e620ba69dc8301b\"","Portraits of Hope: Refugees Starting Over":"\"1af7d5528eca205d87c47beb62a2db6f\"","Practices and Techniques":"\"30dbf1f64b345e141f1033b17b94a28d\"","Presentation:":"\"c4d9d2e543d18b8c52d8cba147b5c78f\"","Presentation: Annotation":"\"e65e4a11d0e7119f4e1c9c6d40458545\"","Presentation: Annotation & References":"\"0c276b8a6eb3d1a367bee36caa57741f\"","Presentation: Designing Interactive Texts I":"\"06b1180d516995fefe116cceb5d778fd\"","Presentation: Filtering":"\"444c6ca43cb26b8b89e8be56f9a4d494\"","Presentation: Hypertextual Practices: Reading I":"\"9bf5eeef9b854a59ae615ad40c1abc0d\"","Presentation: Hypertextual Practices: Reading II":"\"66d5a19abffbac1c047bac2a364fb602\"","Presentation: Hypertextual Practices: Writing I":"\"c398ae269f76cd8d74241b2e299cc3f4\"","Presentation: Hypertextual Practices: Writing II":"\"ff6b5b5af62c43dfb5c9fabacecdd63b\"","Presentation: Hypertextual Techniques (Reprise)":"\"e817eb3dcea7cf769c0720d8227a72d1\"","Presentation: Linking":"\"a09191c3a2f80ac2c0b6c5ee6530a977\"","Presentation: Tagging":"\"0bc45775ab0577e683e0cc0b97dfa8bf\"","Presentation: Techniques for Hypertextual Writing in TiddlyWiki":"\"7a7b31356001a9ad17bd0de7265d102d\"","Presentation: Templating":"\"1ddbd3499e2e8544894e3f0fd26e997d\"","Presentation: Text, Hyper, Wiki, Tiddly":"\"7c2ab38aac10ceff169a0900710ced72\"","Presentation: Text, Interactivity, Writing and Designing":"\"934d6e1182560dad5c91e00e05f52189\"","Presentation: To Be Determined (Apr03)":"\"39c5b39282583761e5c4b2ff7f5dd13e\"","Presentation: To Be Determined (Apr05)":"\"b38268d57b26f209af27bc7621cc76c3\"","Presentation: To Be Determined (Apr10)":"\"82338781b9b0bb8b2758921af8e3c418\"","Presentation: To Be Determined (Apr12)":"\"baa06624c014beff65f0df6ad5e051ec\"","Presentation: To Be Determined (Apr17)":"\"f96ad8a5f7120a752e25906a9b179e2d\"","Presentation: To Be Determined (Apr19)":"\"3f57f831190db5476aba3506624d18d0\"","Presentation: To Be Determined (Apr24)":"\"d8950111e14d6309ed4f806c9477c034\"","Presentation: To Be Determined (Apr26)":"\"011dad5ce095ed35b8e467429b58222c\"","Presentation: To Be Determined (Mar13)":"\"219acdcf3b4afe4f3d6ebb2f5a71ef35\"","Presentation: To Be Determined (Mar15)":"\"ecdea901ced25a1be5ac95c291bbb2d6\"","Presentation: To Be Determined (Mar20)":"\"47a12f1730b1bb1db2f5ff2b0b33c17c\"","Presentation: To Be Determined (Mar22)":"\"e4fa0c763d539301f1fa80ab1e73d228\"","Presentation: To Be Determined (Mar27)":"\"42aa0ee1e061b5ad12148595d623d38f\"","Presentation: To Be Determined (Mar29)":"\"2cfce3c29a88ad578030f67e320e0fd4\"","Presentation: Transcluding":"\"09d86057f2766d7e84859b2832b8e2ef\"","Presentation: Welcome to Designing & Writing Interactive Texts":"\"13e30ddf6e02864f100db2fc7dae4064\"","Presentation: What is Hypertext?":"\"e60b30acc06f6ede56cc43ed0a7a0c65\"","Presentations":"\"d1405440d2d26cad7d0bbb7a96b9f715\"","Priming":"\"6454da3d652d99b91876bbadd939954f\"","Priority Development Projects: Summer 2021":"\"0dba1c2d36d76b60f78848a10f7031b3\"","Process API results into a TW":"\"5dcdc5245206a22f59f151719b92b22d\"","Processes involved in creating Interactive Texts":"\"c41b55a4bc1245f3d0fca209bce6b025\"","Progressive Disclosure":"\"772937a2b4dc8d69af21b57e245f163b\"","Propositional Density":"\"d4601c31175c30fe6354802dc568e636\"","Prospect-Refuge":"\"51f92baf074495c4514a175f19886e72\"","Prototyping":"\"ad92588c25ef8d22a9cb3499698c8413\"","Proximity":"\"1f4a258934a92a3360d52cf7adcd8333\"","PunchShow Macro":"\"7cefd32b9f35dd5df8d03251bf68ef3d\"","PunchShow Macro 1":"\"aa1a2d08542a6045792cb6754c3ac93e\"","Purposes":"\"e3a653f6015538cf83e643366a4aff6b\"","RN1":"\"44d1171610afd084de9255ca223a2b30\"","RN10":"\"ff779ad07d5e9a9cedcef8b4631638c0\"","RN11":"\"90eb6810626c0dbf3ab5ab176d9e6983\"","RN12":"\"806128d38ae6be463bedc73a959d91db\"","RN13":"\"fbc794a2323edbf81758540329bd3c97\"","RN14":"\"421a9a6a67a42936bf14275a80827fb7\"","RN15":"\"085be99291486a8c3ce38b170ee861ab\"","RN16":"\"d20b48d78583c2436655bb96e29544d9\"","RN17":"\"5725e4cd5c5b5d4d27d40b1e5d12b212\"","RN18":"\"abca2a95c76c65141a5e691471af1606\"","RN19":"\"68afd54523ba7c88726c96ee74092d29\"","RN2":"\"8eb0695268eeb295d035a4c261c50e1e\"","RN20":"\"e020c302ac1b70412c87f980a0304898\"","RN21":"\"c2ece98369747c6a6181cedf716537db\"","RN22":"\"e1a78b79d09713a7e43cb8152cd89f93\"","RN23":"\"5f65046b3eb0d244fc65a7d5726d225a\"","RN24":"\"a940a6c84ad42b3e23174ae8b584b314\"","RN25":"\"0e67269143748dddaa8e380bd6f026f5\"","RN26":"\"09af4eceda667a555177ffa65434c631\"","RN27":"\"6d296139eb46e094081ff144d41aa9ed\"","RN28":"\"36bd3d7aed5887161276be8f869a373b\"","RN29":"\"56aadb0280ad460bfee492194c302b81\"","RN3":"\"32936789b616b8498b40fc200ba2cef8\"","RN30":"\"d63dfd267f59381b768395302c6345bb\"","RN31":"\"48a32db2af8b12dcfa5d37d28d88deed\"","RN32":"\"6a5e0abd20306b828972cf53364459bf\"","RN33":"\"ed9c145892b054d8f99721a8bfdaedd3\"","RN34":"\"b00f5128125c4a60fb589f822d1d261c\"","RN35":"\"b2dd00af60d0936aa3fce06230315dab\"","RN36":"\"6e7aaebe55cdd10edefd89bed0e2f596\"","RN37":"\"47e597c8a063bd8edd808ecdeeff1734\"","RN38":"\"c7c63ada86a09bedf6de856bb37c4011\"","RN39":"\"90f5d2e640339a7732e1ee6ff82abbf2\"","RN4":"\"8ca81ae8c78bd66a92b0a4e67be5179e\"","RN40":"\"96d102188e940b707db0eebae9a3322c\"","RN41":"\"4048f4ff9790426f0a603483923e7501\"","RN42":"\"96e8e207f20b39f51656002e517bb26e\"","RN43":"\"be9da7bfba27b7b0a5b6ded81383726e\"","RN44":"\"b824c151bafb0fa6a1aece1a5e4b4888\"","RN45":"\"a1f9f3a7373634c0974d31fbecb51569\"","RN46":"\"4e88c7c048d0834bd1e1074d47d485b6\"","RN47":"\"ecacdfef245f94cecce799834ad6c77d\"","RN48":"\"f8d143ec93f8ae8692f44b33a5df82e2\"","RN49":"\"5b3ceca2b2479e376231d1503c88f2d6\"","RN5":"\"50e1f9acfbb0d246ebd6ae266aa9b956\"","RN50":"\"01c40a72e847cd061b937a1284dc1b8a\"","RN51":"\"0987549ed30ffceea772d1092a2d3af2\"","RN52":"\"d7091f9de5ea4463852ef20a600ea4c5\"","RN53":"\"7e59750ef3031f7dfdba658463c955fa\"","RN54":"\"6e64fd50e492555256814b10ea13b7f2\"","RN55":"\"dd8834014d2a1a560bff00c3f37be7cb\"","RN56":"\"733dcfafdbd9949d8832daaf9effffdf\"","RN57":"\"27dfff28e39e2ddf779e8f9b2e87893f\"","RN58":"\"45f07ef6b277fbb330131f49e222d23b\"","RN59":"\"065a2760ee2ee184e85613bdd6a70ead\"","RN6":"\"33c10a673af5e8a6867c9f58a0c470e5\"","RN60":"\"121adb2a006accc17931d8a630093577\"","RN61":"\"324b5b17809ce57ea4854df91cd63802\"","RN62":"\"5b689d4987f68b0502963a638f43820c\"","RN63":"\"9bb156dbf25bf9e6408f7850429f1571\"","RN64":"\"5a87a531926173ab8f9129bec2ab8ee7\"","RN65":"\"b654726eac3aca445faa0bc5d96dd330\"","RN66":"\"060f0ff91d85319c2d3d9ad9a3f1d81c\"","RN67":"\"6805e9e6af8159b1e1b9efa51ca0dce8\"","RN68":"\"81b364b885b509eab349b698ec4d2b4e\"","RN69":"\"9d055abc8e70d3b08e5fe0af4ac5e273\"","RN7":"\"5353160a7175d5376b1269b0dc3210f9\"","RN70":"\"3e2a1e5a0721c16769e1aa7aaf468540\"","RN71":"\"aa20ff2053a5133b3a56a05eec921153\"","RN72":"\"ea76a89ffc5ead3c9311a946a1e29731\"","RN73":"\"518df6e7d6c5f00cd1244b4888beb0c5\"","RN74":"\"87c7a08f4e3664d0d61740db186dc042\"","RN75":"\"2cd4eca5077bbcf4fc193333f2aef15b\"","RN76":"\"4a1a3668ed429d19587e387f61b139ea\"","RN77":"\"5316cbb6ecffb199ce7fba4806a93bd6\"","RN78":"\"316eef0e5d290b3a6116c51c9f27683a\"","RN79":"\"b4b2dd950a0ccaac07d3b447b776e31b\"","RN8":"\"28dd63e0852879f8c415df3df2b68112\"","RN80":"\"d4dede906fec9f72eae80cc392d9bb10\"","RN81":"\"b93444fbe897187f0760b31b62623bca\"","RN82":"\"4cd74e1819bdbdb35a52582c6cdf1604\"","RN83":"\"c6e8e4b134791b586f5e51de026bd9a5\"","RN84":"\"ee3e9a8e493e977e7052b67794bceaf5\"","RN85":"\"82d7e9c91bcc92793f8b49bd35988003\"","RN9":"\"76b1f8b3bb735b0f19a8f4d409c903e6\"","Readability":"\"1113caf0c30ce3a66a714bd7fd844c20\"","Reading":"\"3a620b3732912bf0d2ae09ab260736a1\"","Reading Filters":"\"ff307b3324de9477b3900182f9f7e689\"","Reading Links":"\"db1d755e7ce2d6e8de64322e3eddfb8a\"","Reading Sorts":"\"b2e0abfaec506b6882d5ac38c9f8887f\"","Reading Tags":"\"fa56837cfd3aa3fe9765c5b849fe5529\"","Reading Transclusions":"\"f806c10840ad8be877affd2a7d39c8cd\"","Reading and Writing \"Hypertextually\": Children's Literature, Technology and Early Writing Instruction (Hammerberg)":"\"2f57e3d1ba732f594aeb808e27aec324\"","Readings":"\"7508808940f05875473c5e8310885e15\"","Readings: Tue Jan23":"\"bca8c2054fb0ad270cc199466d3193e1\"","Readings: Tue Jan23-description":"\"e1c466b927356a400ec76076d9592e39\"","Recent Critiques":"\"9dfd56ed879d69cd7bfdbd27523ba481\"","Recognition Over Recall":"\"fbfcb8b2abf2c07f9324d632c258bda4\"","Red Effect":"\"5dbe7768a9939fb98df6faf485790962\"","Redundancy":"\"fe0cb702bbcab64b4490e11fb3ce8d1a\"","References":"\"f40438313d2a75287af4d527b1e4d1c6\"","References on zzstructure":"\"6604cb84ff95ac75d4af33f2bb36aa7a\"","RenameTags":"\"f2aa40a1c9bea4bfc48c9dfaf2459a4a\"","Revealing Text":"\"bdbbd83a8d1a8164cc4b341167920b71\"","Review":"\"8dfaf2e1d640f9982c960d620d5405d8\"","Review Exercise 1.02":"\"8ed5c0ce314a20d95047231c4d43cd8c\"","Rhizome":"\"fc3bf82b9491aa9910ec32a1a448ee8d\"","Roam Alt Demo":"\"9972f3a7f41511ab23ad8ad1833c3ce7\"","Rosetta Stone":"\"f255a484b331d51004ef78c50813bfa6\"","Rule of Thirds":"\"3b3d05226e36b7e4c888aa91852a49bc\"","Ryan Maher Final Presentation":"\"65ecc0146ea5c3c0ad976a9b9cc11020\"","SUNY Poly COM 375 Spring 2018":"\"5275d2c40d221332f4dff4e19633e0be\"","SUNY Poly COM 375 Summer 2021":"\"2de89933878fac141d3dbbcfa7f2f140\"","SUNY Poly Classes: Summer 2021":"\"4643305e2bb99d40b486639b466e99bc\"","SUNY Poly IDT 575 Spring 2018":"\"5903d26b00e686f21e466b8fc77e62f1\"","SUNY Poly IDT 575 Summer 2021":"\"7810d94e7fae7ee167ac48d1999d0938\"","SUNYChain":"\"f9e90221ee16e1b5b0868d68643de61a\"","Satisficing":"\"99be2988398c605525889c0add4640be\"","Savanna Preference":"\"43192542d74cb102d6203fea351f4a13\"","Saving in TiddlyWiki":"\"4556590b21428e0e0dc1b79700cb7bfe\"","Scaling Fallacy":"\"be2acce3275de74d67af2462d2437818\"","Scarcity":"\"1be3c5a4b46d3cdd1ef24314b423b335\"","Schedule for Presentations":"\"ffbcce3d2a41d9e60b8774fc10cfcb9a\"","Screencast Chunk: Hypertext":"\"16bdd79fa315ae497aa2d9bcf6a54967\"","Screencast Chunk: Hypertext Demo":"\"1cedfd1e3fe68d07e22e9a9cb19e4fa1\"","Screencast Chunk: Hypertext: Four More Words: Designing, Writing, Interactivity, Texts ":"\"d7da69f0643b819ed79eec918e833bbd\"","Screencast Chunk: Hypertext: Four Words: Text, Hyper, Wiki, Tiddly":"\"86729796d19d5aea65472889ec52b1de\"","Screencast Chunk: Hypertext: Hypertext in the 2020s: Opportunities 1":"\"e595ae3f4ee0758f0932606a8de78fd0\"","Screencast Chunk: Hypertext: Hypertext in the 2020s: Opportunities 2":"\"e02d340e6f651058bdd6f1e6294bb586\"","Screencast Chunk: Hypertext: Hypertext, Historically Viewed":"\"6223895a1586a723e2786dd28d4a2bcf\"","Screencast Chunk: TiddlyWiki Demo":"\"f868d6089d9f5798134cd89294ddbff8\"","Screencast Chunk: Tiddlywiki Demo: Stroll":"\"23bb75145bf113f9235852018945357f\"","Screencast Chunk: Tiddlywiki Demo: TiddlyRoam":"\"256581b5e98ea20b597eeb3e789ab6b6\"","Screencast Chunk: Tiddlywiki Demo: XLSX Utilities":"\"a600d32da1ce98e153fd4cbc6e063156\"","Screencast Concept":"\"267e78722b3af86885025b8d2fc67e84\"","Screencast Production Team":"\"113598c444c6e5f21b7ec8864573755a\"","Selected Wikipedia Articles":"\"9742a88c11d7d037071833f3f0522e55\"","Self-Similarity":"\"d8c7d1f2fed69de5efaa6a57267192c7\"","Self-designed Exercises":"\"eb61e295f2f8bb4ba6d35ac3977a098c\"","Serial Position Effects":"\"3f701923d80d02b8cd2abfcb748ee229\"","Shannon MacColl Final Presentation":"\"99adf23315fcf4997da94f48dd3c0a03\"","Shaping":"\"1885afd14a5199b37e3436807a8a7121\"","Share":"\"3a38f02c509f23ac09a3e261e1de96a9\"","Shared Wikis":"\"30468d60a357bf3f1b8a6e707892b1ec\"","Shared Wikis by Author":"\"e6d725b3fa794d96d27cb850c02e5af7\"","Shared Wikis by Author - using Appear":"\"ea638160798bcc8445d1f2996e0333cb\"","Shared Wikis by Authors":"\"b09a7d5ac0931386f79d125fb7fe0834\"","Shared Wikis by Exercise":"\"a9ba261b01de26459fad2470d26392e6\"","Show some random illustrations":"\"4f18d6c8765aac9c18306b300c914881\"","ShowNotesMacro":"\"8dbd646d49dd7d33bc4f97d887cde497\"","Showing \"What's New\"":"\"d100752ea400d8f0efdc33732b91ffef\"","Signal-to-Noise Ratio":"\"ab3100c950fbf0b23b73d67283e61c38\"","Similarity":"\"5855d49d1c27740c3938400b6e4c7e9b\"","Single Page Application":"\"327466f9087845587e582942120bbb23\"","SlideShowMacros":"\"27a2eb332f599fc0e950b47ecbcff5e5\"","Some notes on Tagging":"\"4742a36a11a7690c07073f0bc157c68f\"","Some notes on Transclusion":"\"454027e2cbf050c6bd9d6da9cde8480b\"","Soren Bjornstad Bio":"\"36226ad5d0094f18468c4c41b30c16e3\"","Spring 2018 Final Project Ideas":"\"e6a0f2d14f5220a0200cab571ae69e69\"","Spring 2018 Studio Presentations":"\"4423651793ac0c1ba542279b139cd37b\"","Spring 2018: Outcomes - using <<strex>>":"\"8ab3f95e7c7ba19083baca5d71ce4913\"","Spring2018Courses":"\"c81e84b96864fb774644a9a3484fd62f\"","Square":"\"d8bebc4bf0263d977864db405cee6835\"","Steve Schneider Bio":"\"252f47eec36e92664a5aa726e26fd998\"","Steven Beckwith Final Presentation":"\"50255428a62e4fbaa341bd0db236f05e\"","Stickiness":"\"346fb5f15ecb6465e670bad3386aaedd\"","Storytelling":"\"26b43af729514c77642f731af0062366\"","StretchText":"\"cbcd3a5647c6ff54ff9c83d16385b249\"","StretchText Demo":"\"c68c91b9f93ab545d8309d3046ec76e2\"","Stroll: Tiddlywiki Demo":"\"9ddf7c8c4017d82dfb64a7ab5e37bd89\"","Structural Forms":"\"e388969b1d483ac02497bf36f2ad9fc9\"","Summer 2018":"\"963ca1d574e8e780c0693c852842a164\"","Summer 2018 People":"\"3ef9142e5d43861b91ade376a77f21ec\"","Summer 2018 Projects":"\"d8f940c5c877529c9971dde965866455\"","Summer 2018: Getting Started":"\"58214e9bd0aea9050ff1cd49b5308503\"","Summer 2021":"\"223f913161cc45d1bbb0fbd7600da1df\"","Summer 2021 @DesignWriteStudio":"\"b4a49326c9696c116c312e53a0708a29\"","Summer 2021-1":"\"ebe4990326b6f71173d20c37d064a24c\"","Syllabus":"\"b20c127f041afd4a23c74723d6108466\"","Symmetry":"\"dbcd452974134e6b013e81b6a7b76cc1\"","TW Design":"\"2a7d24f15b554dd1bcf52bd8d20ee8d0\"","Tabs for each primary section":"\"9f3522e90ad61d7556530af799bcfeb4\"","Tagging":"\"9626bfb3e7aabb95cad3688967f05e1c\"","Tagging in TiddlyWiki":"\"8b4d034eee9025151ff91d1762f48685\"","Teaching Autoethnography: Personal Writing in the Classroom":"\"4bd1e1d426ae7b922bc5faa3086933ad\"","Technique for Creating Tiddlers in TiddlyWiki":"\"0bc53a93cea46db8a35ff176a807095b\"","Techniques":"\"a80d3ded1f2bcf9261630d0e13d18479\"","Techniques for Hypertextual Writing in TiddlyWiki":"\"5708c7e7d7eaf33a5ec3cf1591bae877\"","Templating":"\"db65e36ad5da4ebd3a1ce823dbfc97a7\"","Templating in TiddlyWiki":"\"3ed43c90cacb15c1e9de9629d93737fb\"","Testing Bibtex References from Web Of Science":"\"1fabf52b86e39a6d17c1e3c5229c2876\"","Testing embed for ensemble video":"\"47f4ed94e8b8801a938768bdb74c9861\"","Testing the new formula's plugin":"\"e0c43ef4c9a5cb2fc50305784f0d4aab\"","Testing the workflows: tiddlydesktop to github via node.js & githubdesktop":"\"ea311f11e94cf56762fa0130bbab6e59\"","Text":"\"4ae1fbeb1868647b32e25ab81082fd2e\"","Text, Interactivity, Writing and Designing slide show":"\"76137985960a60ec5070a9129a41d7c4\"","TextSlicer: TiddlyWeb Demo: Screencast Chunk":"\"0b68229d646775d3f92f2bf1153fe849\"","TextSlicer: TiddlyWiki Demo: Screencast Chunk":"\"c574b2a0549933f1520b0dbd49ca251d\"","TextStretch":"\"c7308d46d9d897f012e9a968b25a4f67\"","Texts":"\"8f17a4a89249ab962326cee7278e5378\"","The Machine is Us/ing Us":"\"547fb8b6332760cd9b4f631e24e6a448\"","The Missing Link: An Introduction to Web Development and Programming":"\"3bcb5738ee2c3aad952286408dbd04bd\"","The Past Through the Future: A Hypermedia Model for Handling the Information Stored in the Audio Documents":"\"dfea5ef439307c09861c444e0eb0c534\"","The Second Half":"\"f0ec7ddd14bd627f2fc1ef08e2521d26\"","The Structure of Hypertext Activity (Rosenberg)":"\"ee2ff0515d7c7fa110ba0a070a6d0482\"","The Studio for Designing and Writing Interactive Texts @ SUNY Poly":"\"472cc92047639ddc9687bed0593022be\"","The class is an open source class":"\"a25dbba6324484bb8502bbb53c65ddee\"","Thinking out loud":"\"c8bf1810b3f0463296b9dca9dea5c035\"","This is a link":"\"d5f6539cabd47d88e76ccb4a72dcd183\"","Threat Detection":"\"b90881bc0866e37be73d35bd15da300d\"","Three-Dimensional Projection":"\"272103e8f74229e71cf377abf7d89018\"","Thu Apr05":"\"54084fb196c797f977946f19ebdbcd7c\"","Thu Apr12":"\"f04411fb3b58710a4b44840226e28a73\"","Thu Apr19":"\"65d7c56fb1ebdaaa3d5391fad2ab982f\"","Thu Apr26":"\"4a8e6d20a6d51ec9077084458693bd86\"","Thu Feb01":"\"02781fdd181f28d705e49410973f60ac\"","Thu Feb08":"\"f90eeff48f8105d6d7919894beaaffe9\"","Thu Feb15":"\"1bcba097ffc0e319dc2bc83013416eab\"","Thu Feb22":"\"4d716a439c84864da421332b6e32b31b\"","Thu Jan18":"\"7d9ff6106ba22309c7d4a9b1263162a6\"","Thu Jan25":"\"f5b04c8532a5ce4bd37953f8def49325\"","Thu Mar01":"\"c4944dff863cb9716fe263158edc3f46\"","Thu Mar08":"\"277ee80f5d87b2e86648afd6b003eebe\"","Thu Mar15":"\"9408789e7587197faf6fc7299ef4316b\"","Thu Mar22":"\"54bc23ef691b9725880eedf9cf3f7ef6\"","Thu Mar29":"\"61f871667a37b8cfdcbd66ec5e5635b6\"","Tiddler Name":"\"b22de54f6d6babd5a27ff2cf5e3de683\"","TiddlerToBeCreated":"\"3180f67e4da57cec3f0818db133e7621\"","Tiddlers":"\"7c14172d79ab3b4ac94ba4a613b4418d\"","Tiddly":"\"e98a8210c5aa521b767c08d7fe9d2b42\"","TiddlyAPI":"\"763454f687cd8eb79861f0868c4c1fac\"","TiddlyCast":"\"fcb86e78b24a812ef4131278f70029fd\"","TiddlyCast Episode 1":"\"7e41aac06e377a96250c9f6703d886f0\"","TiddlyCast Episode 2":"\"16bbdeb476f13d68b48804295b1e2485\"","TiddlyCast Episode 3":"\"a24b586c4fb763bf84bd897fc24b7927\"","TiddlyCast Episode 4":"\"ec170b233c54fb94f21fedde02d0ba49\"","TiddlyCast Episode 5":"\"541f5cf825c99934677194ce6557438d\"","TiddlyCast Episode Guide":"\"eddbd873407901832a06f5e15f29688e\"","TiddlyCast Episodes":"\"11ad73b233a460045405c5ea497f5858\"","TiddlyCast Episodes Segment Template 1":"\"92a053616b144dc7e0f50077b815c842\"","TiddlyCast Episodes Template":"\"ca05901bb8eb46af9c72186f909fb548\"","TiddlyCast Format":"\"125941c23b612ff06e98f456b91fa3ee\"","TiddlyCast Production":"\"8c6173dfc001b9ef463fc679541ed2cd\"","TiddlyCast01-01":"\"bdaa79845db7bda03cd6cf37433ffd97\"","TiddlyCast01-02":"\"aa68c4dbd3adef11f5e64af6c4070d4a\"","TiddlyCast01-03":"\"9bb355a125fd662cf8ab6ff054a42772\"","TiddlyCast01-04":"\"4600ea00e9c26b38a500052cf08664e3\"","TiddlyCast02-01":"\"ec70aed2f25fb9960c306068dcfec867\"","TiddlyCast02-02":"\"bdffe26cc8c90b514c92230b52a8a0e2\"","TiddlyCast: The Idea of Hypertext":"\"5d92d2ec7f2045cd82af767925b0985f\"","TiddlyCastBite: The Idea of Hypertext":"\"f6afa6aa87975bf2e082e48e8a0f0799\"","TiddlyCastNavigator":"\"80c2d2d0697c6b2728171aacc206734a\"","TiddlyDemo":"\"0ee356916fa690b0e9506f9df987723c\"","TiddlyFilm":"\"d4cae2212fa1fe818666b742263f3fd0\"","TiddlyMap: Tiddlywiki Demo: Screencast Chunk":"\"ed5675d1375ab2d5fd3fa267a435b3c0\"","TiddlyRoam: TiddlyWiki Demo: Screencast Chunk":"\"eecb9f303b73c53f34eb726f4f9b2cba\"","TiddlyStory":"\"f6929feae1601031d2abd31e835e512b\"","TiddlySyllabusCreator":"\"66efad92ace5547cc837b0e0b819a70a\"","TiddlyTalk":"\"cd649ed5610dc9a816bcd274fc729492\"","TiddlyWeb: TiddlyWiki Demo: Screencast Chunkc":"\"7549d29cea2f3ffefb68aca5040e83d0\"","TiddlyWeb: Tiddlywiki Demo: Screencast Chunk":"\"7f7f432a5ac7a293573b4e29c23d0be6\"","TiddlyWiki":"\"e0e390fc73a13b082fbfe0f1d7c2c365\"","TiddlyWiki Authors":"\"be1d98f5da8ccb422b2e9d97d8c5e86f\"","TiddlyWiki Configuration":"\"1c3ad932cb99b154a09237e39a104b23\"","TiddlyWiki Exercises":"\"f14bbfeaae24193cd91b5479da6cf228\"","TiddlyWiki Skills":"\"bde5db99033779e7847fdf8a59ad919f\"","TiddlyWiki Stories":"\"5a3da28d157b7c59a774d34d4a4da4d3\"","TiddlyWikiPedia":"\"bd3a7df7b783df48175468431bf5c646\"","TiddlyWikify SUNY OER Textbooks":"\"74edad6c400e98fb88606e351875f117\"","Tiddlywiki as xanalogical structure":"\"abeb8da6592854a5610bd282ffc19420\"","Title Slide:":"\"25b85858b1e8cc37863b89f37ed78193\"","Title Slide: 1":"\"87b5687a9922dc93007f09bc417c8c5e\"","Toolkit":"\"6db083d94f6664a82a73d0b5b1740fd2\"","Top-down Lighting Bias":"\"7a98994e25876ba1277953a170d1d136\"","Transcluding":"\"419c667588111daa7b3521eb8246fc10\"","Transcluding in TiddlyWiki":"\"015bdd777025a59f62e818b4e0ed16bc\"","Tue Apr03":"\"503c7d5d31a5f283870b7b3286917bcb\"","Tue Apr10":"\"00f417b3e02722d8f0d56b95e92c02e6\"","Tue Apr17":"\"5089896909c21cb3e55adb9e42c48c8c\"","Tue Apr24":"\"b8101282f7490f350064830a29c9f422\"","Tue Feb06":"\"36d0339cc23ccbdaf90026ddc92e6434\"","Tue Feb13":"\"56af6cd8bf50874339117926dff01e56\"","Tue Feb20":"\"a563b93084d1e80b0a0eb371476a4aaf\"","Tue Feb27":"\"b3bcd65dc195494fb1e2e6c32520fcd0\"","Tue Jan16":"\"c70642af99d8584ffb5990994c41f66c\"","Tue Jan23":"\"3c5477407267321be830b63303f9294b\"","Tue Jan30":"\"1347c9ec19e48b7cc68c6e7a0ce99890\"","Tue Mar06":"\"f03413f91e3fd5102191c7bae48aebd5\"","Tue Mar13":"\"28e903c2ea79a635d063f43b2239c03c\"","Tue Mar20":"\"37fabedf4e6a8a33de905c2f66801364\"","Tue Mar27":"\"d5bdeac7013c7f134f528582e718d9b2\"","Tue May01":"\"7c4b291f054a8aa588d0402208db1ce1\"","Uncanny Valley":"\"26b7ee8185ab9f2db815bd8f7a3e9d22\"","Uncertainty Principle":"\"e025b5338442366d3476c5aefc4560a9\"","Understanding Hypertext from Grok TiddlyWiki":"\"ed1d337a13f6b398f1d34a0685ef0f7c\"","Uniform Connectedness":"\"16054878b7616cbbbf1c2c818d23d2f6\"","Universal Principles of Design":"\"18f2eb42d47425499c4a9e3352107db0\"","Untitled":"\"3e5d3c0f64a7e31c0b2bb65feddc5771\"","Untitled 1":"\"9e3c0e39cd0e2b8db676c940d21dd261\"","Untitled 2":"\"10171709c75e06330729da070560402f\"","Vandendorpe From Papyrus to Hypertext":"\"79cd54beae23bda1159b5bf1b72c9848\"","Veblen Effect":"\"85e7149f3ee5b7d6f7f271021aa1bfa4\"","Video: Exercise 4.04 Directions":"\"9ae0ed1038b6417c611e71553010c9c8\"","Videos":"\"a868817a77778c510488c7372658264c\"","Visibility":"\"d5b096d14d10bbe1c93e7b77910e2409\"","Visuospacial Resonance":"\"77a42a2bbc38090b16ac21535280e4e5\"","Von Restorff Effect":"\"3841abba37dbefc6d78990bef6681ce9\"","Wabi-sabi":"\"16038b50e6e50ecc039a4059a937d076\"","Waist-to-Hip Ratio":"\"8cd33588be174ea5b80211d65c2101fd\"","Wayfinding":"\"73afe196218e6f8fa1e6df7830ecd12b\"","Weakest Link":"\"9c80c67fd1ca81d6bc69f97aac80ec02\"","Welcome to TiddlyWiki":"\"4300d850cba2751db8fcc4bc477520dd\"","WelcomeToStrollPartTwoThumbNail.png":"\"629b7efbc1d50b60d5dfe9ae3892b079\"","WelcomeToStrollThumbNail.png":"\"844f8b8df4429243768b91623375d1f5\"","What is Designing?":"\"16fcc7b87587cc71e7ecdc965531909d\"","What is Hypertext?":"\"a1801b622f80d4bbb8a35935a90dc56a\"","What is Interactivity?":"\"eacd6bbda1062a2692f74825df243f42\"","What is Writing?":"\"07530870679f569cde9bd17185fd5085\"","What is a text?":"\"dc30f4b974100cda37f0f36618061506\"","WhatWasNew":"\"7361ae5cfa6a59f90d9f19448443ec8a\"","Who does politics?":"\"a7da65435ec69580e215ba34afeb56a7\"","Wiki":"\"075c8598d6a94e9d599a36dbb4e2efd5\"","Wikification of Existing Texts":"\"f379f8da2b9fed13daed46c3b2f73c97\"","Wikipedia Table into Navigable Wiki":"\"2defd5adc6431ba17f33f0246c197ee5\"","Wikipedia Transclusion Definition":"\"f6479c1c85135f5a3728b375b686c64f\"","Workflow for submitted exercises":"\"541fca4d9a4bd3e989b50df694f1bc3f\"","Workshop 1.1":"\"79fceaa275ba1b707a7143824f32ae36\"","Workshop 1.2":"\"a2a0847130bd6914097c4ace8002190c\"","Workshop 1.3":"\"7902ad6de5568382051ba60af7cfae03\"","Workshop:":"\"9744a561dc82a72843f8e1ce53ad6d98\"","Workshop: A TiddlyWiki Essay":"\"b76901bab3c10b8a8c7bf7c66d06e881\"","Workshop: Annotating":"\"242142d6fe71d885b6913b9c06f9f72a\"","Workshop: Annotating An Essay":"\"90527abdcf9a1dacc6af73922ec5f7b1\"","Workshop: Annotating a Wikified Essay":"\"b6449314a6d8cd7d64823693dad864ab\"","Workshop: CSS I":"\"501b064e774dc3c8296cbc80ba45412c\"","Workshop: CSS II":"\"d8e4c0f5cfbe4a7868c0698626b1387d\"","Workshop: Creating narratives, objects, fields, templates":"\"db10c0f9d416f475408501c987e575bc\"","Workshop: Critique Self-Designed Exercises":"\"6b2bd893f03aa503a656bc7f6fca4cd7\"","Workshop: Engaging in Hypertextual Practices":"\"d09fd982d11381eed7503b0871645c5e\"","Workshop: Intro SVG & Images":"\"94d0bfc3c171b801748c96728345df0d\"","Workshop: Lists & Filters":"\"215974271a7bc4ff0039b4fcb554c744\"","Workshop: New Tiddlers, Tagging, Linking":"\"44036e01b2ce21be7e50255d7378a09d\"","Workshop: Open Topics (Jan 17)":"\"70c95e4a70a51ac746f49ecfc473e5e3\"","Workshop: Plugins":"\"40809f91e7dd71152707baa3167f5bca\"","Workshop: Reference Tiddlers. Essay Tiddlers.":"\"f9c37f68a872acaa7fa70a374cdba500\"","Workshop: Saving, Serving, New Tiddlers":"\"3b1ce6a4c5dc4bd6e8a8b3b98c1dcbcd\"","Workshop: Saving, Serving, New Tiddlers Text":"\"49a6a221a8fc4fbf470c9633dd00d9b7\"","Workshop: Student Review (Monday)":"\"a11e269a99cf81365fe989807a50cdbd\"","Workshop: Table of Contents, Journals, New Here, Excising Text":"\"d309a9406c014e75510f0bcc5c15e8e4\"","Workshop: Table of Contents, Sidebars":"\"51224e54caebc0ec63897ef18b48c978\"","Workshop: To Be Determined (Apr03)":"\"39b56896aa7af1be09d74c4df3469b6b\"","Workshop: To Be Determined (Apr05)":"\"4cb91658cae5464c2a90f22182599c9d\"","Workshop: To Be Determined (Apr10)":"\"0326da65e4c016f55b833ae2373020a4\"","Workshop: To Be Determined (Apr12)":"\"addc1b1321ea21da36b08b691ab7da19\"","Workshop: To Be Determined (Apr17)":"\"e9758dfb67ee7d70241d7f02f8a02ed7\"","Workshop: To Be Determined (Apr19)":"\"d915df3160903a384b02d325a9eeb9ca\"","Workshop: To Be Determined (Apr24)":"\"d3a32620251b6164e303b2a71666a578\"","Workshop: To Be Determined (Apr26)":"\"930849334c01b888fbdf6e34f12d3f4c\"","Workshop: To Be Determined (Mar13)":"\"e56b3f10bf68699e3d5fdf3c5f1b0878\"","Workshop: To Be Determined (Mar15)":"\"9dc10aa18fc10c1ab8ae4d162aa6df2b\"","Workshop: To Be Determined (Mar20)":"\"ef668e99cf276494c808f68ae91e3737\"","Workshop: To Be Determined (Mar22)":"\"829e93d9a85d566cb281e7af0332edf9\"","Workshop: To Be Determined (Mar27)":"\"9e7045369dc810d0db7a7f029a05173d\"","Workshop: To Be Determined (Mar29)":"\"545bf7169778992cedac65d0bfe4f085\"","Workshop: XLSX import":"\"f932d31e3f991d79933e3f515ae796f8\"","Workshops":"\"8a889bfee8475e2a23e70cbe3d948a10\"","Write in-depth read.me and explanation of DesignWrite Github Repository":"\"9af0586135257d66ef18b57bbba6f46a\"","Writing":"\"728a4b6e68047f2f9cd3ddecd478afbe\"","Writing (Term)":"\"61cea0073dcfa611cf5501a77f056b4b\"","Writing Filters":"\"ab45b4d321cc89469499e163bf1918fc\"","Writing Links":"\"3f7d945e2279a3632f7628939b63405f\"","Writing Sorts":"\"1fdbc451125ebc2108aa162ffbd0f913\"","Writing Tags":"\"34651262416ea66e8dee5bfe4f821c61\"","Writing Templates":"\"6390afb3918f23c9dc0faebc0efadad9\"","Writing Transclusions":"\"f5ab853417ed35304ec8db0b9cd0082e\"","Writing in College: From Competence to Excellence":"\"b124b0b2c38dc672761d573c8c269dd0\"","Writing in TiddlyWiki":"\"7fc3a600226d68cf6214f106aa5c4122\"","XLSX Utilities: TiddlyWiki Demo: Screencast Chunk":"\"32f05fb0fafe460f3e4d1ab5c74a81a3\"","YouTubeMacro":"\"abec06f43f8a3c3aab80e3f95a497698\"","Zoom Room":"\"96aba98cc169740e910c0cd0b558a703\"","ZoomRoom":"\"7b960d680f1e2850c3fd824655fd4c47\"","annotation 8.1":"\"21f8adf7d5024aac2483a26a5f9c8972\"","annotator-readme":"\"cd4522d33b8c48e93b709e725ca4dc09\"","artifact":"\"d87fd0cdc643bb45d3cb3a505f1bc29f\"","biblio explorations":"\"1e116d90a6086e04962623c8c38e0584\"","building word games with tiddlywiki":"\"96738d01a2d1a59fc4d81eb29935d1da\"","chrome-settings.png":"\"50b70650e8a229ed47603afa0f414219\"","class template":"\"b2525b8c879120e0ad1d1276f307bb09\"","class-days-rows":"\"0e44c120bf704c134977cc80f510a45b\"","class-days-rows-class-notes":"\"2f126067b2ed11c77c3f6a5c257a2615\"","class-days-rows-date":"\"fe245da45e5ccdd036df09177ccc5d58\"","class-days-rows-exercise":"\"3d79a76d04d4abe3ae503352cda1660c\"","class-days-rows-exercise-number":"\"212537e717b749747ab784079e4cf1e1\"","class-days-rows-presentation-topic":"\"0085249afb85450644e8e5a6c88fa260\"","class-days-rows-title":"\"3d52bfc424cd834b7772e054d0213f2a\"","class-days-rows-week-number":"\"cc7f02d631936e64128244b54cd5b448\"","class-exercises":"\"64418172814a1f9c457444a7f0853aca\"","close-control-panel.png":"\"15279661a67f35b47a6c6f62f1462330\"","close-sideeditor-tiddler.png":"\"b042b73200a8eeac45da42fab4755eb8\"","colors":"\"83f26956bb41591d2eaf9a3fb5a6ea7f\"","concepts":"\"fc6a77d4e3784ad1d9516913e12a0dce\"","control-panel-info.png":"\"979d2093441ded969e9d758435f66a3c\"","control-panel.png":"\"fb5e7c202cbc030accc714c2cdb5c73a\"","crit-link":"\"97b50bc62b991b4a7c2d9b39c9515d6a\"","crituqe macro":"\"1bd4cf075577be80485f37cd2486b83e\"","crituqe urls":"\"82666eb6cd9ed042a8d77e6d5f2bd6fb\"","define":"\"e25133153ae257fdae51162cfaadcba3\"","designwriteyoutubelogo.png":"\"8a2f34b79503c8529505a781701bdc2d\"","dictionary":"\"3691ff80f56410725602426f7340ec23\"","directions":"\"c15da635edf7883a7789c8721a269618\"","download-for-critique":"\"bb17440e1055d5b0ead39598ba270353\"","dws-class-days":"\"a1a72fcd7fb5c40dbeac97d2e3656903\"","dws-class-days-sheet1":"\"f4e75e0a574ee264540b844c1027d22c\"","eTexts: Summer 2018 Project":"\"4bb47bb43221324e466527d09e37d074\"","ebooks on Hypertext":"\"d48766bd84bb65c4aec99ea793d1d071\"","ebrary records":"\"f6c0531ccdfcbbdd64a44bf9c23ae42f\"","ebrary-highlighted-text.png":"\"8d7510ed281bc0ec2da1bc9abe8e267d\"","ebrary-record.png":"\"460eb84de0874604af896e93c9c2fbb4\"","enclosing a word or phrase in a set of double brackets":"\"182abc0881acbc4bea1271e26b72536a\"","exercise template":"\"bb22196ad832f4d3345c99b293d166b0\"","exercise template 2":"\"119b41e6301bcc1b046bc34bef53bfae\"","exercise-directions template":"\"d362f166df3f69cbc99576fc5240441e\"","exercise-group":"\"6a3bd625a77d3dab6a5f629ddb2cf5a3\"","exercise-group template":"\"d78360e7c8f22fe1b12c5124aeb8c0e2\"","fabric":"\"b7ea370f3c076699ea3149fade0c13f4\"","final presentation template":"\"8b91b5255cd8165c111710e1727e51a4\"","formal definition of dws":"\"8ed5d705c0a8b0f86be8b7179b0b99a3\"","fpnl by single tag Macro sorted":"\"3d0e09bc5444c611a21170c9ea872178\"","games? from the folks...":"\"4d4502ab2197e8239914714ed31c6267\"","google query for delicious tiddlywiki":"\"3e9b64f7fcd7a127226393f8dc9c6ec9\"","hello-world.png":"\"bfb4ce489dd58b16ca65db4114a80627\"","hide sidebar":"\"8d32cf011fd362c8c8ec23a8a4881947\"","hilite macros":"\"cf196aa44888d446a6692aa85cfc701a\"","howMany macro":"\"ef8b05e513ad486eaaf3c9f72446424f\"","interactive":"\"10b1eadfbb660c1bd50ce0cca455fee0\"","jkIII-on-google-news-expanded.png":"\"813038be9208bf4499e2375814c902d2\"","jkIII-on-google-news-more-button.png":"\"915fa16b5fb1ec4997efc572a3286ced\"","jkIII-on-google-news.png":"\"9a0f3e2f6827dd273fab5c64d9c65e0f\"","justin-cushing-suggestion":"\"d145ee4848e1f062c78e422a97bde808\"","links":"\"71eb98018f4cc688538e69a36c55bb09\"","list draggable":"\"c66daada449b11fc0b3153c9bd2d71b1\"","look at these!":"\"69ba410b8684788c62eb5d00e6165484\"","maher":"\"cf11f8daff6d8e09025e00d07bc6cdc7\"","more":"\"1ded57d0f221acf2654e50e87965e533\"","motivations":"\"906f2d8b88267d5b9de7edf2e4bb90d9\"","mouse-locator.png":"\"737f4a1dddcf39b6a67640e369ae7ee7\"","myfirstwiki-tiddler.png":"\"77638256c9833e764d6f19cfcfe3f76d\"","nelson-discrete-hypertexts-dm19.png":"\"56b6e01f7a36cb5908966737c673685c\"","new slide macro":"\"b4a2d026ed4669060ffaecb8117739ec\"","new-tiddler.png":"\"febd8b24ef083a6ec0df8ce56633ca53\"","new-tiddler2.png":"\"5c02e8bbdeffcd55a05effe25a451859\"","newhere":"\"2e48736dae671c0bf1f2eec4a88b07bb\"","nextButton.jpeg":"\"731e01b47cfafe499ff64e14155d70b2\"","number":"\"d476b883dfdcf7ca423f605855b0a468\"","object":"\"2fc73baf1ec48946851a7dc2b6ec36c5\"","objectives":"\"8dbc85fa9c8e3b27d32f713a012414ee\"","original":"\"295bcee79419e77eae4a00a8ef4041ed\"","presentation template":"\"3fd1d29079a04450c56111a8102a119a\"","punchshow macro tiddlers":"\"243f5023fd3b3422d2d2c1a70289b769\"","quick build of a collaborative (kind of) wiki":"\"567921e0c1ce79ef1bc9288e8ce27906\"","readings template":"\"020a67e26d2a603e3849090e3e20cf77\"","reload-wiki.png":"\"fc38956b8c1dfdfc680c699db04c29f4\"","reviews":"\"6f99295f9a1d892ba114a13dbf4e4643\"","save-tidders.png":"\"9a98186761c8b1c94a5410b0324d4fb5\"","screenshot of studio definition":"\"c2f9756a266b0da78b2423094fb44112\"","self-designed exercise template":"\"5a15f6725468e49c093c7e30a95a490d\"","setup":"\"e655d9558e5460589f94227bebbbd465\"","shared-exercises template":"\"67f8f0eb9ae9ff588f30faa5a0d996c3\"","sharing":"\"cef99456b8dd2d5b9c6b4b0b2a3cbfcc\"","show-in-finder.png":"\"f5ea33c93f236679758501ace0993a2b\"","showdox":"\"071be10340768043a4b9a3aac099b368\"","side-editor.png":"\"7764424924125d76f361532a645ea399\"","signs":"\"04b9829ad0c6d55540d3be3829f51c6e\"","sings":"\"436de258ef8a1d658b5c59d594887b40\"","slidedev - making slides from code":"\"f7723bd8ec0b332b5c760602dcee7050\"","speech":"\"fba6ad5fce7d483c2579638c3064f2f3\"","steve annotation 8.1":"\"22cdc3d2969cb3e359d5106051758ebc\"","sunyit-ftp-connection.png":"\"00c7b545fdf4184aa41dfe989fe88dab\"","sunyit-ftp-directory.png":"\"75fd7ef20a856fdac0c2312cdc827888\"","sunyit-ftp-upload.png":"\"7133c06b483291e519f29276660a8da0\"","synonym template":"\"cf6f98637d58c2f82a2cda392ce054e8\"","term template":"\"718b34bdc6ee4f23bf853db770239c8f\"","testing-the-save.png":"\"0116b94042ed85f08d6f87eff71b9884\"","text.hyper.wiki.tiddly":"\"f5779f691d72016850331c8a7f7e98ad\"","texts":"\"251fe21896cae8cb189fbfbe5cf162a9\"","this is a new tiddler":"\"33cd100d654877cb624222f5157b463a\"","this is a new tiddler, testing the workflos":"\"a3f0164b129360383f0d9b06fe0fbec2\"","this is an image":"\"f28454842198156c5c3e36fdf7e2e013\"","tiddlycast-01-01.png":"\"66be42b589093650bcdcc769e7504d91\"","tiddlycast-01-02.png":"\"da40627b9688103eb074dc6b994ea9a5\"","tiddlycast-guest-bio":"\"569db08bd530b4eaa6228bcddc5a4f79\"","tiddlycast01-01.png":"\"b15f777c462fd4338f9aff95ba029399\"","tiddlycast02-02.png":"\"54032a00bfc8e94d010271b3ea68abaf\"","tiddlywiki":"\"758ed4f810706932f939df61bfbd61da\"","tw5-tiddlyspot.png":"\"0238f512ba1af4090d8be37611fb339a\"","twyt":"\"3f77c9f533fbc2a74525d0cb36cee5db\"","use":"\"7280f59896076de3b9a4745badb603a7\"","wikipedia":"\"4432b85d852541fc0ea0b4c2367ef7ba\"","wikipedia macro":"\"37e81bf8b1a39c0a1ff3ff2f743c122f\"","workshop template":"\"fae7c8e894e49ac261ad021dc84eb29e\"","workshops described":"\"00749bc625774a777d6aace0d599fa8e\"","xlsx utilities":"\"a8921750ee31d6d46f13c8d074e75310\"","zoom_0.mp4 1":"\"bd6c70639bb30d40b722d5ebd555c3b3\"","zoom_0.mp4 2":"\"3dd3fd7fe6498563e6b9e28d4ed09fc7\""}
https://3ra8f69t8l.execute-api.eu-west-2.amazonaws.com/prod/
7dt020qa8e7mu1oqeqqc0sdss4
eu-west-2:a8912c43-2425-4dc8-b508-26f00b4c2342
Screencast Chunk: Hypertext: Hypertext in the 2020s: Opportunities 3
<$list filter="[prefix[jkIII]]">
<$transclude/>
<hr>
</$list>
# [[jkIII-on-google-news.png]]
# [[jkIII-on-google-news-more-button.png]]
# [[jkIII-on-google-news-expanded.png]]
/*\
title: $:/.tb/modules/startup/hide-sidebar.js
type: application/javascript
module-type: startup
created: 20151010151732122
creator: Tobias Beer
modified: 20151010151750739
Hides the sidebar on startup when the config tiddler [[$:/config/hide-sidebar-on-startup]] contains "yes"
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
// Export name and synchronous status
exports.name = "hide-sidebar-on-startup";
exports.platforms = ["browser"];
exports.after = ["startup"];
exports.synchronous = true;
exports.startup = function() {
var conf = $tw.wiki.getTiddler("$:/config/HideSidebarOnStartup"),
value = (conf ? conf.getFieldString("text") : "").toLowerCase(),
state = value == "yes" ? "no" : "yes";
$tw.wiki.setText("$:/state/sidebar", "text", undefined, state);
};
})();
The DesignWriteStudio is a participatory, collaborative and open learning space focused on designing and writing interactive texts. We use the TiddlyWiki platform to explore the practices and techniques of hypertext and hypertextuality.
The [[DesignWriteStudio TiddlyWiki]] (which you are likely viewing now, and is available on the Web at http://designwritestudio.com) serves as the web presence of the Studio, and as a demonstration of TiddlyWiki.
[[About January-May 2018]]
Steven M. Schneider<br>
Director, Principal Investigator<br>
Contact: steve@sunyit.edu<br>
Try setting your default tiddler to ``[[My First Wiki]]`` that should render properly.
Very nice! Looks like you played a bit with fonts and palettes! Enjoy
Very Nice! Looks like you played a bit with palettes and fonts. Have fun!
Nice. Looks like you are moving this into the About Me exercise, which is fine. But note this in the group, and I'll write some suggestions about how to handle things like default tiddlers.
Looks like you morphed this into [[About Me]] which is fine, but let's discuss this in the group. Start a new thread on "Using the Same TiddlySpot for Multiple Exercises" and we can discuss there.
Didn't see any tiddlers in your wiki...
I don't see any tiddlers in your wiki. Doesn't look like you de-activated sideeditor plugin.
Very nice! Looks like you've played around quite a bit. Good to see! Enjoy!
Didn't change the title of the wiki, but otherwise, Nice!
Nice. Maybe you could write a short tiddler here that explains how you are serving this in bigfishmedia.com...pretty cool!
Need to finish through on demo. Not exactly sure where you are here. But something isn't right.
Great! Love to see the exploration. We'll learn it, but if you'd like to go faster, go to [[tiddlywiki.com|http://tiddlywiki.com]] and work through the "Learning" section. How did you change the default font?
set default tiddler to ``Hello there, world.`` in $:/ControlPanel
See your default tiddler to ``[[MyFirstWiki]]`` in $:/ControlPanel
Nice! Glad to see you ''not'' following silly instructions for things like $:/SiteSubtitle and names of tiddlers. And you are right: the first tiddlers should be called ``MyFirstTiddler!``
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Nicely done. A few errors that you could correct someday, mostly in syntax. For example in ``About Me in Tags`` you have ``<< tag "Weedsport School District>>`` which fails to render as desired; try ``<<tag "Weedsport School District">>`` instead.
√ ``About Me`` X ``About Me in Tags`` X ``<<list-links>>`` macro • Need to complete next steps as outlined in [[Exercise 1.02 Directions]]
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Good to see palette work and customization of tools menu • Hey, and thannks for finding the refresh button {{$:/core/ui/Buttons/refresh}}
√ ``About Me`` X ``About Me in Tags`` √ ``<<list-links>>`` macro • Create an [[About Me in Tags]] tiddler - you're all ready to go!
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Nice work on palette • Excellent work in ``About Me`` to render narrative with links such as `` [[college experience|Education]]``
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro -- -- implement in tiddlers such as ``parents`` like this: ``<<list-links "[tag[parents]]">>`` • Nice use of longish links like ``[[Mom, my sister Cory, my brother Nolan, my other brother Davis, and our pet dog Karma|family]]`` to link to ``family`` • In future, check [[GoogleForm for SharedWiki Submissions]] to see if your response has been received; no need to submit multiple entries)
√ ``About Me`` X ``About Me in Tags`` √ ``<<list-links>>`` macro • I didn't find the [[About Me in Tags]] tiddler • Very interesting use of tags, including of ``all`` and the intersection between tags
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro -- -- implement in tiddlers such as ``extra curricular activities`` like this: ``<<list-links "[tag[extra curricular activities]]">>`` • Make an appointment with James or with me via the group to work on your saving issues
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro -- implement in tiddlers such as ``Occupations/Trades`` like this: ``<<list-links "[tag[Occupations/Trades]]">>`` • Check default tiddler; you call for ``[[about me]]`` not ``[[About Me]]`` • Similar issues with respect to ``Hobbies`` versus ``hobbies``
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro. Nice job!
X ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro implement in tiddlers such as ``Chapter`` like this: <<list-links "[tag[Chapter]]">> -- basically, just like you used ``<<tabs>>`` • Interesting color palette choices • Keep on exploring!
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Not sure why ``working`` is tagged with ``occupations`` • In future, check [[GoogleForm for SharedWiki Submissions]] to see if your response has been received; no need to submit multiple entries)
Interesting way to use iframe to show other web pages • NIce use of HTML5 code to format images in [[Main|http://thebigfishmedia.com/tiddler/index.html#Main]] • Not really an [[About Me]] demonstrating tags and tagging...but that's ok...especially for "open" and advanced students, do as you please and I'll respond...
√ ``About Me`` X ``About Me in Tags`` X ``<<list-links>>`` macro • Also didn't follow through on creating tiddlers referenced in [[About Me]]
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro - -- implement in tiddlers such as ``occupations`` like this: ``<<list-links "[tag[occupations]]">>`` - you started this in ``Occupation`` but, due to case-sensitivity, it didn't render as you intended.
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Interesting use of tags, especially on ``further information`` which is kind of a jumping off point for a future narrative
√ ``About Me`` X ``About Me in Tags`` X ``<<list-links>>`` macro • In your tag tiddlers (such as ``personal life``) you hard-coded the links; instead, use the ``<<list-links>>`` as requested in [[Exercise 1.02 Directions]] • Also, when you referenced ``personal life`` in ``About Me in Tags`` you put ``<<tag "Personal Life">>`` rather than ``<<tag "personal life">>`` (everything is case sensitive).
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Very different use of tags than proposed in exercise instructions - much more open-ended than instrumental • Very intriguing use of multiple tags as in ``binge-watcher`` which will be helpful in spinning narratives moving forward
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro - -- implement in tiddlers such as ``locations`` like this: ``<<list-links "[tag[locations]]">>`` • You might find it helpful to disable the sideeditor plugin, and so set a default tiddler, as shown in the demo
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro -- implement in tiddlers such as ``unhealthy snacks`` like this: ``<<list-links "[tag[unhealthy snacks]]">>`` • Interesting question if "order matters" - it doesn't from a technical perspective, but it might from a cognitive perspective • you tagged places such s ``Latin America`` as ``travelling`` not ``Travelling`` as you referenced in ``[[About Me in Tags]]`` • Lots of countries! Perfect source material for projects.
But, you still haven't demonstrated use of ``<<list-links>>`` macro that I could find...
√ ``About Me`` X ``About Me in Tags`` X ``<<list-links>>`` macro -- implement in tiddlers such as ``Work`` like this: ``<<list-links "[tag[Work]]">>`` • Max, you didn't use the ``<<list-links>>`` macro in your tags. None of your tags gather multiple tiddlers under s common tag; there seems to be a disconnect in understanding what tags do.
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Might have tagged ``dad`` to ``Air National Guard``. Not sure why ``dan`` is tagged ``volleyball`` • Nice palette work.
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • An interesting and somewhat different use of tags, but you get the concept. For example, not sure why you've got things tagged to ``Michael`` --
√ ``About Me`` X ``About Me in Tags`` √ ``<<list-links>>`` macro • Create an [[About Me in Tags]] tiddler and populate it with references to your tags such as ``Occupations`` • Interesting to see you using two tags for objects such as ``Blue Honda Civic`` - we'll be using that technique in [[Exercise 2.01]]
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro • Love to see colored tags. And the change in the way tag displays (how did you do that?). You have a space after ``About Me`` in your default; that's why that didn't work. The value of tags for concepts like ``born`` is not clear. But you are ready for stretch text - start a new thread in the group ``How do I use stretch text?`` and I'll write a brief set of instructions!
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro -- implement in tiddlers such as ``Work`` like this: ``<<list-links "[tag[Work]]">>`` • Why not use the tag ``Video games`` instead of ``recreation``? • Interesting use of ``Work`` tag to tag both places of employment (``Hannaford``), jobs (``front end associate``) as well as other aspects of working: ``number of years``, ``part time jobs`` etc. If we get to in class, we'll work with [[RenameTags]] as a demo...
You did a nice job building tiddlers. Love to see some images. Pay attention to the default tiddler; as you've got it set, the wiki reopens where you left off (which is a choice...). Most importantly, let's look at your tagging strategy. For example, you tag ``[[Grey Nisan Altima]]`` to ``[[Driving]]`` but then list it on ``[[Cars I have owned]]``. This works sort of for now, but will fail you in the next exercise. Similarly, the code for ``[[Jobs]]`` is ``<<list-links filter:"[tag[Job]]">>
`` which means that when you type ``<<tag Jobs>>`` in ''[[About Me in Tags]]`` it doesn't populate the tag pill.
√ ``About Me`` √ ``About Me in Tags``√ ``<<list-links>>`` macro. You got it! Nice colors :)
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro -- implement in tiddlers such as ``activities`` like this: ``<<list-links "[tag[activities]]">>`` • I was hoping to see at least two (better, three) things associated (tagged) to each of your dimensions (tags); probably should have specified in instructions • (check [[GoogleForm for SharedWiki Submissions]] to see if your response has been received; no need to submit multiple entries)
It worked! • In future, check [[GoogleForm for SharedWiki Submissions]] to see if your response has been received; no need to submit multiple entries)
√ ``About Me`` √ ``About Me in Tags`` √ ``<<list-links>>`` macro. • (Sharon - nice to see you!)
√ ``About Me`` X ``About Me in Tags`` √ ``<<list-links>>`` macro • Add [[About Me in Tags]] to complete assignments • Naming wikis up to you - as you see, I just ingest from google form what you submit.
√ ``About Me`` √ ``About Me in Tags`` X ``<<list-links>>`` macro -
implement in tiddlers such as ``cars`` like this: ``<<list-links "[tag[cars]]">>`` • In future, check [[GoogleForm for SharedWiki Submissions]] to see if your response has been received; no need to submit multiple entries)
See [[critique|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-flinna-objects.html]] where I do some work with Aiicia's objects and weave them into a story.
[[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-houdea-objects.html]] extends your work a bit. Nice job.
Nice! See [[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-furbecb-objects.html]] for ways to use your games template
Nice job. You wrote on dogs (which is fine) so all of the provided templates and lists worked flawlessly! No external crit wiki.
Nice job. See [[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-copelac-objects.html]] that discusses the implications of the 1:1 relationship you build between ``Meme`` and ``source``
excellent. see other critiques for demo of 2-stage listing process using ``[[each]]`` which could be applied to yours, like [[this one|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/smaccoll-objects.tiddlyspot.com]]
Very interesting. I'll be sure to review this in class. See the [[critique|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-dylan-objects1.tiddlyspot.com.html]] for some detail.
This looks pretty good, actually. A bit more work needed on the 2nd order filter, which is complicated. See [[Crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-cushinj-objects-critique.htm]]
see [[critique|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-bennink-objects.tiddlyspot.com.html]] to hopefully get you unlost
You noted that "length of tenure" was not an acceptable field name - but length-of-tenure would have worked fine • Because your field "years" was text instead of numeric, it sorts alpha not numerically • Template looks good! • Use the google group https://groups.google.com/forum/#!forum/designwrite for issues like not being able to save in TiddlySpot!
Good start. I did some work in [[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-sommero-objects.html]] to illustrate what we could do with these fields.
See [[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-maherr-narratives.tiddlyspot.com.html]] for suggestions
Works! (short step to more complexity, as shown in [[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-hallensp-objects.html]].
Nice job! good reflection. see [[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/smaccoll-objects.tiddlyspot.com.html]] for a demo...
See [[crit|http://people.sunyit.edu/~steve/dwit/tiddlywiki/critiques/sunypoly-retzket-objects.tiddlyspot.com.htm]] for some ideas; nicely done.
<<crit-link>> has some comments. Not 100% sure what you did; I should have asked for a journal.
See https://designwritestudio.updog.co/crits/shallenbeck-401.html
for a crit of this exercise. I demo use of tabs, and ways to integrate annotations into an article that you just annotated using ``<$list>`` commands.
See <<crit-link>> for extensive comments, including ways of bibliographic entrys into multiple tiddlers, and ways of approaching an essay. Lots of good literature here, by the way.
See <<crit-link>> for some modifications. Like the way you are marking text with ``@@`` though this has its problems. Overall nice work.
<<crit-link>> shows some additional development, including a way to have two-way links between the text and the footnotes. Note new macro for handling footnotes.
https://designwritestudio.updog.co/crits/sunypoly-natarag-essay-myfirstwiki.tiddlyspot.com.html#crit
<<crit-link>> demos how to do a regexp search, and how to begin to gather text from annotations into a presentation.
See [[crit|http://sunypoly-critiques.updog.co/smacoll11.tiddlyspot.html]] for ideas of how to use code to illustrate annotations and to display references
Nice work. See my [[critique|https://sunypoly-critiques.updog.co/stachebrown.home.tiddlyspot.com.html]] where I demo some additional code to begin to make an essay...
See <<crit-link>> for some comments - nice job using two-level tabs.
[[DesignWriteStudio:Summer 2021]]
\define makeExportFilter2()
[prefix[$:/SharedWikisImporter]]
\end
! Doesn't quite work yet (19 Jan):
# To download tiddlers needed to import shared responses, ''choose one'' of the following:
#* click this button <$macrocall $name="exportButton" exportFilter=<<makeExportFilter2>> lingoBase="$:/language/Buttons/ExportTiddler/" baseFilename=<<currentTiddler>>/>
#** or
#* Go to $:/AdvancedSearch and paste ``[prefix[$:/SharedWikisImporter]]`` in the filter tab
# Choose json and save the file.
# Go to your wiki
## Click on import in the Tools menu.
## Import the tiddlers.
<hr>
These are the tiddlers involved:
<$list filter="[prefix[$:/SharedWikisImporter]]">
<$link><<currentTiddler>></$link><br>
</$list>
steve@sunyit.edu || http://designwritestudio.com
* ''Tiddler titles:'' <$radio tiddler="$:/core/ui/ViewTemplate/title" field="tags" value="">Hide</$radio> <$radio tiddler="$:/core/ui/ViewTemplate/title" field="tags" value="$:/tags/ViewTemplate">Show</$radio>
* ''Tiddler subtitles:'' <$radio tiddler="$:/core/ui/ViewTemplate/subtitle" field="tags" value="">Hide</$radio> <$radio tiddler="$:/core/ui/ViewTemplate/subtitle" field="tags" value="$:/tags/ViewTemplate">Show</$radio>
* ''Tiddler tags:'' <$radio tiddler="$:/core/ui/ViewTemplate/tags" field="tags" value="">Hide</$radio> <$radio tiddler="$:/core/ui/ViewTemplate/tags" field="tags" value="$:/tags/ViewTemplate">Show</$radio>
<hr>
[img width="10px"[$:/_Icon/code-elements]] <small>''Tab source:'' [[$:/_Menu/Home/Configuration/Options]]</small>
<pre>
.stretch-closed {
display:inline-block;
padding: 0 3px 0 2px;
margin:0px -2px 0 -1px;
line-height:96%;
background: none;
border: 1px solid lightgray;
/* box-shadow: inset 0 0 5px #b3b3b3; */
margin-right:2px;
}
.stretch-open {
display:inline-block;
padding: 0px 3px; /*0 3*/
margin:0 -2px;
background:#f4f4f4;
border: 1px solid transparent; border-bottom:1px solid silver;
}
.stretch-outline {
display:inline-block;
/* box-shadow: inset 0 0 2px gray; */
padding-right:2px; padding-left:0px; /*2*/
-webkit-animation: revealoutline 3.5s ease 1 running;
animation: revealoutline 3.5s ease 1 running;
outline: solid 0px red;
outline-offset:1px;
/* margin-right:0px; */
}
@-webkit-keyframes revealoutline {
0% { outline: transparent solid 1px; }
25.0% { outline: silver solid 1px; }
50.0% { outline: silver solid 1px; }
100.0% { outline: transparent solid 1px; }
}
@keyframes revealoutline {
0% {outline: transparent solid 1px; }
25.0% { outline: silver solid 1px; }
50.0% { outline: silver solid 1px; }
100.0% { outline: transparent solid 1px; }
}
.stretch-open:hover + .stretch-outline { outline:silver solid 1px; }
.stretch-content {
padding: 0 0px; /*0 3 */
white-space: pre-wrap;
/* margin-right:-6px; -6 */
-webkit-animation: revealcontent .4s ease 1 running;
animation: revealcontent .4s ease 1 running;
opacity:1;
}
@-webkit-keyframes revealcontent {
0% {opacity:0;} 100.0% {opacity:1;}
}
@keyframes revealcontent {
0% {opacity:0;} 100.0% {opacity:1;}
}
</pre>
\define cont() $(content)$
\define stretch(label, restornothing, content)
<$vars restornothing="""$restornothing$""" content="""$content$""">
<$set name="contentToReveal" filter="[<content>regexp[^$]]"
value=<<restornothing>> emptyValue=<<content>>>
<$set name="rest" filter="[<content>regexp[^$]]"
value="" emptyValue=<<restornothing>>>
<$set name="qualstate" value=<<qualify "$:/state/$label$">> >
<$reveal type="nomatch" state=<<qualstate>> text="show" animate="yes">
<$button set=<<qualstate>> setTo="show" class="stretch-closed" >
<$list filter="[[$label$]splitbefore[_]removesuffix[_]] [[$label$]splitbefore[_]] +[first[]]" variable="lab"><<lab>></$list>
</$button>"""<<rest>>"""
</$reveal><$reveal type="match" state=<<qualstate>> text="show" animate="yes">
<$button set=<<qualstate>> setTo="hide" class="stretch-open" >
<$action-setfield $tiddler=<<qualstate>>/>
<$list filter="[[$label$]splitbefore[_]removesuffix[_]] [[$label$]splitbefore[_]] +[first[]]" variable="lab"><<lab>></$list>
</$button> """<<rest>>"""<span class="stretch-outline">
<span class="stretch-content"><<contentToReveal>></span>
</span></$reveal>
</$set>
</$set>
</$set>
</$vars>
\end
\define ref(content:"empty")
<$macrocall $name="strex" content="""$content$""" label="​" start="start" end="​" class="hint numbers"/>
\end
\define strex(content:"TextStretch", label:"…", start:"[", end:"]", class:"", id:"_false_")
<$vars content="""$content$""" id="""$id$""">
<$set name="uid" filter="[<id>!prefix[_false_]]" value=<<id>> emptyValue=<<content>> >
<span class="strex-container $class$"><$macrocall $name="strexx" content=<<content>> label="""$label$""" start="""$start$""" end="""$end$""" class="""$class$""" uid=<<uid>>/></span>
</$set>
</$vars>
\end
\define strexx(content, label, start, end, class, uid)
<$set name="xuid" filter="[<uid>prefix[_false_]]" value="error: xuid hashing" emptyValue=<<HashStr """$uid$""">> >
<$macrocall $name="strexxx" content="""$content$""" label="""$label$""" start="""$start$""" end="""$end$""" class="""$class$""" xuid=<<xuid>>/>
</$set>
\end
\define strexxx(content, label, start, end, class, xuid)
<$vars content="""$content$""" label="""$label$""" start="""$start$""" end="""$end$""" class="""$class$""" xuid="""$xuid$""">
<$set name="qualstate" value=<<qualify "$:/state/strex_$xuid$_">> >
<$vars openclass="strex-open $class$" contentclass="strex-content $class$" startclass="strex-close strex-start $class$" endclass="strex-close strex-end $class$">
<$reveal type="nomatch" state=<<qualstate>> text="visible" animate="yes"><$button set=<<qualstate>> setTo="visible" class=<<openclass>> tooltip="show text part"><<label>></$button></$reveal><$reveal type="match" state=<<qualstate>> text="visible" animate="yes">
<span class="strex-all $class$"><span class="strex-inner $class$"><$button class=<<startclass>> tooltip="hide text part">$start$<$action-deletetiddler $tiddler=<<qualstate>>/></$button><span class=<<contentclass>> > <<content>> </span></span><$button class=<<endclass>> tooltip="hide text part">$end$<$action-deletetiddler $tiddler=<<qualstate>>/></$button></span></$reveal>
</$vars>
</$set>
</$vars>
\end
<!-- step 1 (x): check for id, replace with content if param is empty -->
<!-- step 2 (xx): hash id -->
<!-- step 3 (xxx): generate output, use state with hashed id -->
/* strex standard styling */
.strex-container, .strex-container .tc-reveal, .strex-all {
position:relative;
}
.strex-open, .strex-start, .strex-end {
color: <<colour tiddler-link-foreground>>;
padding: 0 6px 3px 6px;
line-height: 96%;
background-color: #f0f0f0;
border: 1px solid lightgray;
}
.strex-open:hover, .strex-start:hover, .strex-end:hover {
border: 1px solid black;
}
.strex-open:active, .strex-start:active, .strex-end:active,
.strex-open:focus, .strex-start:focus, .strex-end:focus {
border: 1px solid lightgray;
}
.strex-content .tc-reveal .strex-close {
color: <<colour foreground>>;
}
.strex-content {
color: #c44;
display:inline;
-webkit-animation: expandtext 1s ease 0s running;
animation-name: expandtext;
animation-duration: 1s;
animation-timing-function: ease;
animation-delay: 0s;
animation-iteration-count: 1;
animation-direction: normal;
}
.strex-content .tc-reveal .strex-content {
color: #766;
}
/* * * * * * * * * * * *
** Footnotes with Numbers
* * * * * * * * * * * * */
body {
counter-reset: notenr; /* set counter to 0 */
}
div .tc-tiddler-frame {
counter-reset: tidnotenr;
}
.strex-container.storynumbers {
counter-increment: notenr; /* counter +1 */
}
.strex-container.numbers {
counter-increment: tidnotenr;
}
button.strex-open.storynumbers::before,
button.strex-start.storynumbers::before {
content: counter(notenr); /* Display the counter */
font-size: xx-small;
vertical-align: top;
}
button.strex-end.storynumbers::after {
content: counter(notenr);
font-size: xx-small;
vertical-align: top;
}
button.strex-open.numbers::before,
button.strex-start.numbers::before {
content: counter(tidnotenr);
}
button.strex-end.numbers::after {
content: counter(tidnotenr);
}
/* Footer Collection as Numbered List `<ol>` */
.footnotes p ol {
list-style-type: none;
margin: 0;
padding: 0;
counter-reset: li-counter;
}
.footnotes p ol span > li {
position: relative;
margin-bottom: 0.6em;
margin-left: 2.25rem;
padding: 0.2em;
background-color: <<colour sidebar-tab-background-selected>>;
min-height: 2.1em;
}
.footnotes p ol span > li:before {
position: absolute;
top: 0;
width: 1.75rem;
height: 1.75rem;
font-size: 0.75rem;
line-height: 1;
text-align: right;
color: <<colour sidebar-tab-foreground>>;
background-color: <<colour sidebar-tab-background>>;
content: counter(li-counter);
counter-increment: li-counter;
padding: 0.1em 0.2em 0.2em 0.1em;
margin-left: -2.5rem;
}
/* * * * * * * * * * * *
** Special Styles
* * * * * * * * * * * * */
/* hidden parts */
.strex-content.nocontent, .strex-start.nostart, .strex-end.noend, .strex-close.noclose {
display: none;
}
/* standard text color */
.strex-content.standardcolor {
color: <<colour foreground>>;
}
/* block */
.strex-content.block, .strex-inner.blockinner,
.strex-container.blockcontainer {
display: block;
}
/* hint */
.strex-inner.hint {
position: absolute;
min-width: 220px;
background-color: rgb(252, 254, 211);
border: 1px solid black;
box-shadow: 5px 5px 10px #aaa;
padding: 15px 13px 12px 15px;
margin: 24px 0 0 -5px;
z-index: 998;
}
.strexXX-inner.hint {
display: block;
}
.strex-start.hint {
letter-spacing: -0.5em;
color: rgba(1,1,1,0) !important;
background-color: transparent;
border: 0;
position: absolute;
padding: 0 6px 3px;
right: 10px;
top: 5px;
}
.strex-inner.hint button::before {
content: " ×";
font-size: 1.2em;
color: <<colour tiddler-link-foreground>>;
}
.strex-content.hint {
padding-right: 10px;
}
/* note top right */
.strex-inner.note {
background-color: rgb(252, 254, 211);
border: 1px solid black;
box-shadow: 5px 5px 10px #aaa;
display: block;
min-width: 220px;
padding: 26px 10px 15px 15px;
position: fixed;
right: 5%;
top: 5%;
z-index: 998;
}
.strex-start.note {
position: absolute;
padding: 0 6px 3px;
right: 5px;
top: 5px;
}
.strex-content.note {
padding-right: 10px;
}
/* note flex */
.strex-inner.noteflex {
background-color: rgb(252, 254, 211);
border: 1px solid black;
box-shadow: 5px 5px 10px #aaa;
display: flex;
flex-flow: column wrap;
min-width: 220px;
padding: 10px 15px 15px 15px;
position: fixed;
right: 5%;
top: 5%;
z-index: 999;
justify-content: center;
}
.strex-start.noteflex {
display: flex;
order: 2;
margin: 10px auto 1px;
order: 2;
padding: 3px 10px 5px;
}
.strex-content.noteflex {
display: flex;
order: 1;
margin-top: 8px;
width: 100%;
}
/* * * * * * * * * * * *
** stretch animation
* * * * * * * * * * * * */
@keyframes expandtext {
0% {
letter-spacing: -0.48em;
rotateY(88deg);
opacity: 0;
}
70.0% {
opacity: 0.35;
}
100.0% {
letter-spacing: 0;
rotateY(0deg);
opacity: 1;
}
}
@-webkit-keyframes expandtext {
0% {
letter-spacing: -0.48em;
rotateY(88deg);
opacity: 0;
}
100.0% {
letter-spacing: 0;
rotateY(0deg);
opacity: 1;
}
}
/*\
title: $:/core/modules/macros/HashStr.js
type: application/javascript
module-type: macro
Generate a numeric hash from a string
uses $:/core/modules/utils/utils.js
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Information about this macro
*/
exports.name = "HashStr";
exports.params = [
{name: "str"}
];
/*
Run the macro
*/
exports.run = function(str) {
var hash = $tw.utils.hashString(str);
return hash;
};
})();
Tabs for each primary section
$:/_ExcelImporter/ImportSpecifiers/Workbook 2
\define makeExportFilter()
[[$(currentTiddler)$]]
\end
<$macrocall $name="exportButton" exportFilter=<<makeExportFilter>> lingoBase="$:/language/Buttons/ExportTiddler/" baseFilename=<<currentTiddler>>/>
\define config-title()
$:/config/ViewToolbarButtons/Visibility/$(listItem)$
\end
<$button popup=<<qualify "$:/state/popup/more">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/down-arrow}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/More/Caption}}/></span>
</$list>
</$button><$reveal state=<<qualify "$:/state/popup/more">> type="popup" position="below" animate="yes">
<div class="tc-drop-down">
<$set name="tv-config-toolbar-icons" value="yes">
<$set name="tv-config-toolbar-text" value="yes">
<$set name="tv-config-toolbar-class" value="tc-btn-invisible">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]" variable="listItem">
<$reveal type="match" state=<<config-title>> text="hide">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$reveal>
</$list>
</$set>
</$set>
</$set>
</div>
</$reveal>
<span class="tc-tag-list-item">
<$set name="transclusion" value=<<currentTiddler>>>
<!--
<$macrocall $name="tag-pill-body" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag="""$button""" element-attributes="""popup=<<qualify "$:/state/popup/tag">>
dragFilter='[all[current]tagging[]]' tag='span'"""/>
-->
<$link to=<<currentTiddler>>><<currentTiddler>></$link>
<$reveal state=<<qualify "$:/state/popup/tag">> type="popup" position="below" animate="yes" class="tc-drop-down">
<$transclude tiddler="$:/core/ui/ListItemTemplate"/>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]" variable="listItem">
<$transclude tiddler=<<listItem>>/>
</$list>
<hr>
<$macrocall $name="list-tagged-draggable" tag=<<currentTiddler>>/>
</$reveal>
</$set>
</span>
<$list filter={{$:/core/Filters/Missing!!filter}} template="$:/core/ui/MissingTemplate"/>
<div class="tc-more-sidebar">
<<tabs "[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]" "$:/core/ui/MoreSideBar/Tags" "$:/state/tab/moresidebar" "tc-vertical">>
</div>
\define lingo-base() $:/language/CloseAll/
\define drop-actions()
<$action-listops $tiddler="$:/StoryList" $subfilter="+[insertbefore:currentTiddler<actionTiddler>]"/>
\end
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" storyview="pop">
<div style="position: relative;">
<$droppable actions=<<drop-actions>>>
<div class="tc-droppable-placeholder">
</div>
<div>
<$button message="tm-close-tiddler" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class="tc-btn-invisible tc-btn-mini">×</$button> <$link to={{!!title}}><$view field="title"/></$link>
</div>
</$droppable>
</div>
</$list>
<$tiddler tiddler="">
<$droppable actions=<<drop-actions>>>
<div class="tc-droppable-placeholder">
</div>
<$button message="tm-close-all-tiddlers" class="tc-btn-invisible tc-btn-mini"><<lingo Button>></$button>
</$droppable>
</$tiddler>
<$macrocall $name="timeline" format={{$:/language/RecentChanges/DateFormat}}/>
\define lingo-base() $:/language/ControlPanel/
\define config-title()
$:/config/PageControlButtons/Visibility/$(listItem)$
\end
<<lingo Basics/Version/Prompt>> <<version>>
<$set name="tv-config-toolbar-icons" value="yes">
<$set name="tv-config-toolbar-text" value="yes">
<$set name="tv-config-toolbar-class" value="">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
<div style="position:relative;">
<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i>
</div>
</$list>
</$set>
</$set>
</$set>
{{GoogleGroup}} {{Share}}{{ZoomRoom}} <!--<<tag "Days">><<tag "Projects">><<tag More>>-->{{$:/core/ui/Buttons/home}}
<$reveal state="$:/state/sidebar" type="nomatch" text="no">
<$button set="$:/state/sidebar" setTo="no" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class="tc-btn-invisible">{{$:/core/images/chevron-right}}</$button>
</$reveal>
<$reveal state="$:/state/sidebar" type="match" text="no">
<$button set="$:/state/sidebar" setTo="yes" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class="tc-btn-invisible">{{$:/core/images/chevron-left}}</$button>
</$reveal>
\define frame-classes()
tc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$
\end
\define frame-styles()
background-color: $(backgroundColour)$;
border-color: $(backgroundColour)$;
\end
<$set name="storyTiddler" value=<<currentTiddler>>><$set name="tiddlerInfoState" value=<<qualify "$:/state/popup/tiddler-info">>><$set name="backgroundColour" value={{!!background-color}}><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>> style=<<frame-styles>>><$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
</div>
</$tiddler></$set></$set></$set>
<div class="tc-next" style="margin-left:-30px;margin-top:-20px;">
<<endslideshow>>
</div>
<div class="tc-next" style="margin-left:-30px;margin-top:-30px;">
<$list filter="[all[current]next[$:/StoryList]]">
<$link to={{!!title}}>
{{$:/core/images/down-arrow}}
</$link>
</$list>
</div>
<div class="tc-next" style="margin-left:-30px;margin-top:-30px;">
<$list filter="[all[current]previous[$:/StoryList]]">
<$link to={{!!title}}>
{{$:/core/images/up-arrow}}
</$link>
</$list>
</div>
Appears and tabs for each primary section
Vmxkd1NrNVhVbk5pTTJ4c1VqTm9WRlJVUW5kTmJIQkhZVVZLVVZWVU1Eaz0=
<svg class="tc-image-fold tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
<!--source view-source of https://upload.wikimedia.org/wikipedia/commons/d/d4/Share_font_awesome.svg-->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 -256 1792 1792"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
width="100%"
height="100%"
sodipodi:docname="share_font_awesome.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="640"
inkscape:window-height="480"
id="namedview8"
showgrid="false"
inkscape:zoom="0.13169643"
inkscape:cx="896"
inkscape:cy="896"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<g
transform="matrix(1,0,0,-1,75.932203,1391.7288)"
id="g4">
<path
d="M 1408,547 V 288 Q 1408,169 1323.5,84.5 1239,0 1120,0 H 288 Q 169,0 84.5,84.5 0,169 0,288 v 832 Q 0,1239 84.5,1323.5 169,1408 288,1408 h 255 v 0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 0,-27 -26,-32 -77,-26 -133,-60 -10,-4 -16,-4 H 288 q -66,0 -113,-47 -47,-47 -47,-113 V 288 q 0,-66 47,-113 47,-47 113,-47 h 832 q 66,0 113,47 47,47 47,113 v 214 q 0,19 18,29 28,13 54,37 16,16 35,8 21,-9 21,-29 z m 237,496 -384,-384 q -18,-19 -45,-19 -12,0 -25,5 -39,17 -39,59 V 896 H 992 Q 669,896 554,765 435,628 480,292 q 3,-23 -20,-34 -8,-2 -12,-2 -16,0 -26,13 -10,14 -21,31 -11,17 -39.5,68.5 Q 333,420 312,468 291,516 273.5,582 256,648 256,704 q 0,49 3.5,91 3.5,42 14,90 10.5,48 28,88 17.5,40 47,81.5 29.5,41.5 68.5,74 39,32.5 94.5,61.5 55.5,29 124.5,48.5 69,19.5 159.5,30.5 90.5,11 196.5,11 h 160 v 192 q 0,42 39,59 13,5 25,5 26,0 45,-19 l 384,-384 q 19,-19 19,-45 0,-26 -19,-45 z"
id="path6"
inkscape:connector-curvature="0"
style="fill:currentColor" />
</g>
</svg>
iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAo+klEQVR42u2dCYBUxZnHv6rXPScDGoy6CoJcMesZ3U3iCQKCR0yC4i0zAypeiHHRiIAixqgRYzQqHigih5pVYzxwERgU0GjUxHs9AAHjDRsFZoY5+lXtv+p1DzPDzHS/vmfe99OmX/d0v6pXXd+/vqpX9ZUghmECi8h1BhiGyR0sAAwTYFgAGCbAsAAwTIBhAWCYAMMCwDABhgWAYQIMCwDDBBgWAIYJMCwADBNgWAAYJsCwADBMgGEBYJgAwwLAMAGGBYBhAgwLAMMEGBYAhgkwLAAME2BYABgmwLAAMEyAYQFgmADDAsAwAYYFgGECDAsAwwQYFgCGCTAsAAwTYFgAGCbAsAAwTIBhAWCYAMMCwDABhgWAYQIMCwDDBBgWAIYJMCwADBNgWAAYJsCwADBMgGEBYJgAwwLAMAGGBYBhAgwLAMMEGBYAhgkwLAAME2BYABgmwKRFAIr3HrqrI3U3cyyl1Lm+KIbJFEop0ajDDfUN2zbSZ6vqc52fVElJALrvfWyZ6zSM0FqeJkkPyvXFMEzm0YKE3ISmbklD/bY/Nfxz1fpc5ygVkhaAsr7DuuuQvBpnuNyeRnPDzwQIIUhpd1FI0CVbVlety3V2kr6M5L42SnYbWH0ujP5eUxBs/EwgEfB7lXtbTTgyjT5cUZPr7CR1Ccl8qVufX/SgcE0Vvn4IrD/X18AwOQJeAKlq13WG1q9b8nquc5PcFSRByQ+GDZQReoekLOLWnwk0wopARe3qqnm5zkpS2U/mS6V7DzsJ3s8jEIACFgAm0NgusLqwek33+4ieVLnOju/sJ/Ol0n7H/FII9SgEoJAFgAk03hjYBdVrymazADBM0GABYAFgAgwLAAsAE2BYAFgAmADDApAOARBeQTIdY8s6jwXX/oZ+fkedhklkydSddKTb7JpZAJJNXSADEqdwTcFtwaPOzrVmWiEUCqhIkthZSFNeKr9mX0rHy49ya/CDViO/uuPfUWiltZSCSkmESu1b2vVbJmblmVmdQ0qrzThXXWLpkoPPdiPhFHtCkKLNsgAkWRFNwSldj9/kPfwor+FH+Ril9w0LQBsoJ4J/dsXRf0ghBilBBzqowNq30aSbWOurN8AI3xKK3tBCbSAh3XiGqEkVSJK9NElckz4Y7/X2nJsE6lN0+rkS4mNy9Ss43dson02JpCtIFyHNvvjQT/HiQIjqrgmn235eWAB8J6tVNb55v3Ait1V/vGJDrguis1D6wxE760Y12RFyLMrv+ym3YKlgRVy9Bf9t6rZ1Vc8le5qi/sN+HhI0A63yQQl2cyJo+Jc6jpy+dXWSU3BHjZLF79ZUCHInSyEHpdSQsQD4TFLrRkHqvq1rl19Ced2pzVtESf9h10jpXAUBKMxJDuD2a+W+JyN67Nb1VW+kerri/sMGo2bMwjX9e4eiZtJ1I883RkLnN2x4PuWGo7T/iF9ocpFuaA//3RBiAfAtAHYFlVrraDlyyydL1ua6ADorxQOP3V9Q472SnENz4QUI6bhId/LW1UtvSdc5IWrTpRST4cUXtdsuCGebVo1n1Kxd/lTa0h04bIHU8jSkGfJfECwAPlO0BfZc9ZplJ+T64jsz++wzOvxpw7e/dUIFV8Agsps4RFwpdwMpOqd2XVVVuk7bbcDQn+Hkt8PI+7UpambhjVKv40/j0OV4L23pDhp2gXLpengfPX2LKQuAHwGwA0YK4r6weu2y8lxffGenZODRExxZfId2G7KbsHBI6chK7cqLtq1b+n66TlvUf/gIKfQdUoQGtemOG+HR+ikp5aXVH6fu/scoGTTiVOG6t8Kr2ZMFIAHSIAAPQwDG5PriOzslA4ZOdJyi23MkAC9pV0MAlr+btuvpN2wkSfpjhwKg1DNhKSZuXr10fdrSHTj8dKn070k6e7AAJAB7APlBV/MAEhSAp6XjTEyrBzDwmNOkUreyACRI6gKgH6leW3V2ri++s4OWa5IjC27JjQA0vqY0XVC3dvmbabuevYcNI4fuhADs034XQD0XEnpCOuPwsQfgk9QEwAZSqtq6pmp4ri++U/OjHxWXbO75BycUOl+rSHbTtgEx9UYIwDl1a5c9k67TlvQffgoqx61SOL3aFgBrbB9FtHtm3doX/pGudLv1H/5fsNxrpBQ9khzUZgFIPEXrxm0skM5J361+/qVcF0BnxbtvLu9Cpd03J5OBpEOu6966rb5+Slri4+81sqC0wL1XSKfSTO9t/zaghDaoK2sOLLuFnkzd4Ex0axWm/xbkjEyqHFkAkpgIRGYWsFopKTy2eu3iT3JdCJ2N7v0G9484BTdJEqNzNhPQW4Dzldbqup3rGuZ8looI9DqysFtRYSWqxlQhZG+tOrgmCACueZ0S6qra1T0eS8Xouu/9n2URWXY56vGlKEv/rX+sHFgAkk1WV0Htb1FKrHWdxtpcF0Y+I5wCFW5wy3RYDiAtLkYLfDypHK8F8OYDfCOEuMt1aVGRcjduKxARUpHE6pUuwlcbd3VE6HhN+lK4/rskNBvPE4H1KIc/uoqWqJD7bcJpguKI47gFYjfXFadIQRehLEuTFlIWgFRWA5rVXG4djl7VQn6jNS8Eag84vqjhYk8t9GEkQ6GcG38TIjomoNYLMotyqA4/o4z7LSHwc6sQjg50pOyvfS91Nhv0IEXXfRO1ZrUtoQTqj0kXla5QmJD2QvZKeYk1C0Au1nMHmHyNCeA7FkDTBaW2tDnZdNNVjiwAeVgZGSZbsACwADABhgWABYAJMCwALABMgGEBYAFgAgwLAAsAE2BYAFgAmADDApCiAAhpJmckmxWGSQo78SgdUZVZAJKPpipsfED3S/wYn2khshzXigkuWkmi3Ug4A6Mvkz8VC0CSCyggv5r0Mq3EAmpsfN11wrUQA3YDmIwjCkSkoFHvqx1RDhE4CfWxhNcC+CANqwEbNakn3XBkYt0HK77OdSEwAeXII52SLwp+I4VzCQndjVcDJkjq8QDcT0I6MmLLJys4LDiTW/YZHe7W+N0TqMsneD0Dn7AA+FbNCGl6rHrtsjNzffEMYyjpP/xieADwBOTOHBEoAZIWAG8rqa2K9LW1a5ffmuuLZxhD4d7DDw87eg4JZxDHBEyAVARAKWV2AZ5au7bqzlxfPMMYTIQlJcNPCOkcqP3GWWABSEIANE2r/aTqjlxfPMMYyvoePUiH5GNChg5gAUgAFgCmK8EC4BMWAKYrwQLgExYApivBAuATFgCmK8EC4BMWAKYrwQLgExYApivBAuATFgCmK8EC4BMWgPxGjaQC2oVCciHxbksJwALgExaA/EaNoUPwy56Bw89I0hv0Jb0mn6cs7yHeeWAB8AkLQH6jKuhSUUS32U13GmgNOfQkKXodr1+RcyEKTAtYAHzCApC/6AraDT/J3RCAUbbNNwtcC/F+LdWg3MfKefRYrvOYb7AA+IQFIH9R5XQKjP5uIaknxapj2HoCr+P1eDmf3sp1HvMNFgCfsADkJ+oSKqDN9Fu0/pe36PEbAWikm+H+X5nrPOYjLAA+YQHIT+zgn6QHRJgOpEj0TQf1M0Kfo/U/H63/olznMR9hAfAJC0B+oipponDodmpehwus+/+IqKeLxCP0Xa7zmI+wAPiEBSD/UOfR7tRIs0RBdPDPYOqmoK3wBq6S8+iuXOcxX2EB8AkLQP5hB/8cugdF/L2mwT/T+tfTciHpXPEgrct1HvMVFgCfsADkF3bwbwtdLwrpihatv0NKNNJ14iGakes85jMsAD5hAcgv1Fj6MVr9OSJE+zb1/73Bv/Uo6/Fw/5fmOo/5DAuAT1gAUkePpb11I22WC+hfqZ5LVdJkEaYbqfnmambyTx3NFw00sb3BP3UyFVEZ7SJepa/FhxTYrdlYAHzCApA8qoIOw9OxKPm90Go/gNZ5VSrn0+OpN/r5d4sCOqHJhKODf8KlSXD/Z7f73TOopy6ii0jSzvAcluP7y4O4gIgFwCcsAP6Ai94Nxn4UrvsoGNsJooj2Q+v8GUr/PPkgLU7p3BV0GoXpLhh7T4r9FLHBv0Y6Vzzc/uCfLqceEIoHRHc6WW+hjRSixylCL+FhhOCrXJdbtmAB8AkLQGKos2hP9MV/CsM6Bi3siaKQ9rB9dGH75x/haKKcS0tSOH8Jzn2zKKaLqS76ZnTwD0Z8Pc49vaPvRwVgFvJ1pp04VGC7DY04xxP4jV7Aey+ji/J+rssx07AA+IQFoGPQ4h8AEzwUrf0xQtEwKqad7Oh8rHqE0iQAlXQEyvJBEaIBLQb/XLT6ZuZfnMG/FgLQ7O6BmTpszofzrMDR83jvZXgqK3NdrpmCBcAnLABtY/v3ggbj8Hg8fop+eci2rK2rRZoEQFfQlWi1b9ph8K+eFkB4Joh5tLnD77clADGEl0/rUdTThxCzP5vlxGITVYlnaVuuyzqdsAD4hAVgO039e2P4mo4TYdrf/sHUo/aKxludtx6t9cVyDj2XVLrjaC+IizHeloN/krbg9RVo/e+Ldw59Bu2kwzRblNDopi5EW8CrsKJVR1/b2AKaXoLALBMPUZfY2p0FwCcsAHbm3R4whkNxOAICcAJa+z1tS99R/Ym1qmaNfj29CGO9DAKQ1PJcuP+n2mW/mr7XYvCvDn33Ahon74fAxDuHGUNwaAbyfrk1cuMFdPRzyqY06nEtJsjIi/j8KojN/2b/F0gfLAA+CbIANO/f4zqGogXe2bbAHf30ppRhOOZzKK6/QST+KhxaRFtppXjc//13fRGV6lq6SRTRhBaDfxK5cOMP/jWdZxoJ/Sn9EIc/gzAZIRvcbrel9fWYcQLvcy/impbirZfhEazIwU+SMiwAPgmiALTq3/8EhhKOayimxQzZPnQDWtgX8dlXYaBPy/n091TyosfS4VrRQxCR/i0GFhvsLb+4g39tXl8lDTBdGFzjEDwPwfV5nkWkgy81HydooA9w9Bfk5xWqoaXyiQ47FXkFC4BPgiIA1kWWdDQexvCPtf17U2LGKDq6bMd7wPA347sv4LPL8J1FckF8tzwe2vxmFfTrVAb/Ojz/eOqJ8xyHQzOucYwIUd+Er9kbJ/gKx0+ZW4gQg8W45o3p+0UyAwuAT7q6AJj+vZB0mBbWLT4Obn4v27dPpH+vbfSdT3H0Eo6Xwk94Tj5A36Qrb3oM9dayjZl/ZvDPpSvg/scd/EsonfMohOs4FtdwNH42M4HpP+z1NVJi4wTb4AFIO2C4Cvl7UT5oPYS8hAXAJ11VAGz/PkKHowUbjjwORh+7Z0L9+9h9cw3XXtmWz7T4L8qH0ctPdx7N4J8DAVCtBv8a6AWhaSz64RvSnmY5/SeMeTiudRiubQgE0UlonCA27qGsF7Qc51iZj/MJWAB80tUEIDo/fwhK4zjk7Seo4H769wp98ZUQgBdREotFb3pNXE8+CiVx9Ggq1SV0kyjZYfCvAfn9jXyIrs9oOZ1Fg+xgoSkr0yUqolJbTol4Rt58gvdRMiYs2UtiHS0Rq6g+k/lNFBYAn3QVAVBn0/fRll2AUjgZRnygNerE+/db8L0qfHYFvrNELsy8iwv3/3AY+zzktV+Lwb9G+l/k5Vy4/69kpdzG0i647hPxONyIZtMU50icL24fJ/gC3oGZTnSXXEDvZCPPHcEC4JMuIwBj6CBUysUiTLvFNXzpPcGd3YDPvYyCW6Ij9Hw2F83AU7kCff+bWwz+ha0Y3Q8DvDTbK/nsOEED/ZyEXeh0tAihC2WIZ0OmLLvh+9/RhXIe3ZPNPLcFC4BPuowAVNJ+yMsTQsK17egy7G9MNWh1n0Trew8q+BtiXnbdV3Um7QVjN4N/xzcJgLSC9H/I+6/g/i/IXUnacYL9kZ/R5h4FfuY+FM8UCu1AodmoZG4u821gAfBJFxOAP0MABiYgANU4ehqPP8EAX8v2clkb8y9M9wpFOzfl1Qv6sQReTKWcQ1/mqhz1NRTWn9IRKCczeHomyrNvXAEowvdqaJycTw/mKt8xWAB80mUEwGu1FqFV7R339pYpKS/MVrVdKku0FJ7Aimz0YaPrDW4QxXRJq8G/euT7BrSi1+Wi/GxAkRCdgH696QKMsOWYyN0BMxZg7lxU54cHUNLnqH0oHH46FCocqFyfAiBNnY5MqF1ddjcLQNzU8ksAbAUuQIsl6CRcxpEJ3d4y/VdTgSM26s4qiMAStMoviPn0csbyaWb+uTQffey9dxj8c+lciFBWBv9iQDj7oRyOw+MIpG8CnJQlfDdA2WXG76IOVOH4XngAH2Yz722xU5/j94qE628i4fxAa78KYF2AG2vWHPok0fUZufuTSQItADFQof/dzvjzbm8Ns/P7E6nQ29fNv228Arz1IjyEpekcjDMz/3QFTUKeZrax3df9IkwTxezsLM9VFfQTXOMQeB6D8Xyc6YK0iHPQFjKa1zp8Stjp0CvMtOi8mg/Qq7ywOPzlACVUWYGjExcArYRuCAnXEZ9sW7c072c8tgULQDPsbUFJI9BSDUVFPRourdfixpsP73jPMMgvyATQcFHRC6lK3k+fp5yntpb9SjsmsQl5uyzTg392wdBndCLSOhLpDoUXcrA16nhdpu23S2vw+cW2xXfphXxo8ZntsAC0QTRarvEIhuMxxFZ6f2sAtqLSL8dnjRgsQ6VfnWxedCWNRj/7PuG2Gvyrp6VURxXy0cwM/qnRSK8UoiPpcLvcuRD9+9hy5/bKoLkYNljxex6HK7N9u5RJHBaAOBi3F08jkPWhuNSj0N+VcacHb58l6OL5hWjEXdM1eMNX2mbwT9vdfie2ivlXDzG6Qc5N/+CfDVeu6Gcw5MOQ7+ORdndf/fsIvY/Xz5olz2ZKdBCjDHcmWAASBN2DfWHYQ+yD6Bi0iD0SMozmcQAUvWRnDzbSikQMw05R1rSgzcG/NM/8U5X0I6Q1zLr5ifbvW873f8ms/rMBQubnUf+e6RAWAJ+o02hXdBCGo4U8GsY/HELQN6FxgthKwQitMyG1yKydj9Di9oQgOsvu16KAftvWzD+km5bBPxi+iWp0Eh5HCGkjGPtZ8deA42fswJ6mF+U8eje7vwaTKiwASQIDLYYxD0blH24jAxWgBU1knCBEsfnwb+JoPFrxNrsFahwNwrlm47xHNYmLN/NvE86flsG/6FjHbaKYzrdpJL7m3+wh8DQE8GV0TRZnahyCyTwsAGlAjUHLKeENmOWy5laicZ87GifwogKvRTlMhCG3GRQULXM5DG6WUFTaYvBvGy2D4Y1Jx6CaCQpqZhdSMZ3a7sTmlqv5PsbRMyZMOK7vee7fd35YANKIHSdw4BV4YbVGomXtboWg9ThBnLDg6hy7VdctcPPHNRlmbNlvI90IV/vadOQ3bljwaNw/278nqhIurRLzqSrX5cykDxaADKAraDeUyjCIwRB4AWaKbJ8WEYXiCcAYG47rYRGKRho2eKHE38YPNk48RP9ISz7bEoDtkX8jyMNfbP/epZX5sGyXST8sABnExhQM23GCoWahDITgoNjfdGPbAqBHU1iX0CR89sYWA4te1J/7xFq6SKyKu+A2IVoIgDmjd+tyE/L6FF6bVn8JvI0vcl2OTOZgAcgSdpzAzDA0i2ZCNBgewNco/crWm4O2O/in6cvozL8/pStPUQGYK8rol7qa1thY/2b3n2paIh6nmlyXGZN5WACyTHQJsgmrtYfZhLP1vXxVTmPsuv/Wg3/19AwEoRKu+L/SlRd9HnWHVzEWwrQH0lsiHuT+fdBgAcgRcPW7o4MgmofwbnfwT9hgJNdBLG5Ocx7CyENJKmHEmc4NC0Aegdb/SPwijwin1eBfvY02PI4H4lJDnU3fg7dzmND0bxBVAbFdj+5VNZ6r0Q36VNxN3+UkX2bKdyP1g6dnnnsiZ9+HYTpa0j9FMa0SszLXHWMByBOiE4umoe8/pcUefQVWAGaLvnShmJGewb+ggu7XDBh8BcS0J8rX1H2zYKkWR2Y+w1d4/hx/+5Ac+puck9ruTfGw+zsIO3/kELzsh8eeeJTi0YPMfo9m2pWw+0lckMoO0vFgAcgTbMjvUjrf7Bhso/6aX8ZbXPNldOZf2gb/goqqoDtFmC72XpBX+5s/pL39uQ3lbaY0m1uui2gLPSOejBvgLGGihn+WnS+i6QAI/h6x39qKfuwh7V0f16w9gQC8lKkyYQHII6Lbch2IX2U//DAmBPhJFKHlaJ9Ol4/Tt7nOX2dHnUP94WLfJEI02nujjQ/J6MNb0vwpnpbj1W3iIXo75fTH2OXVF0LgT7CzK9vbbcqb8m3c/qtFNUQriQ1kE4UFIE9R4+jfYPxDUWSfddZdd/MRGOFA1PrfQQRGeW908OHoVu66kV6BoU5PZtPVpnTLqRLnmgYPpL81+vbSjRm/pmvEFghPGr2PtmABYAJHdCfk3wnjYcXc744osF2xD/C5s+COv+k7PW/nqYVw9/t2uOBK2vByNcjT1WIt/TFdE746ggWACSRWBBTdDHd8VMIiUEf/A6/gHD8h2O2t3Yi9szOyqX/fFjHjJ7T8n9Dt2TB+AwsAE1iaPAHHxkOILwJeWPir0ZL/PtFYDLqCpmtBU5FGuF2T9vadMBvJThd90PJn8W4PCwATaKIiMBOWcCKqpxMvEAqq+xdC4bMJLMiKbqa6CP3+Ae0GjIndgXDpWnQQrs/2rV4WACbwGBEQmmZHV292jLcq81Z4ATPgBWzp8LzlNAkWNgOtf2m75/Va/zXCpaFiPv0z29fOAsAwZEXgQojADRCBneLFQdSKvjL7I8AL+KjDc1bQYngAxwg3trVsO+eDAFA1/TgXt3pZABiGrLGeiyczR6Bn3ECvngicJOfSk+2er9xO8FkF979fvG3TtekAKLpczqPbfOf7EiqAH2I2ZS1EWo/6jRPJAsB0WuysOknHwHzWyQV2v8aksHEbQrQQrf+J8AI6HgcweGMBM8VWuPftLJuGR2H2lZgH979X3F695wV8jaMZEJW7feW9nKYixxOM14LTHASv5Gs/32cBYDotaLXPx9N1aAM3Ub3dJHWh33PoUSR1GU2HAPwXjKFbQtNuPA9gCVr2cXJh27s/IW9n43N/EJJ2Seicjr0NuBG2ca18iGYleP1XkLnDUEA9dANyo6iP3wAuLABMpwUGYDZGmSqKYcQNtAEt7RQYz8OJfj9q/FfB+K6EoZYlPP7uCcDbEI2T5QO0tp28nY/P3Yjz7pzwXD4vVNw3sI8Z8UQA57/cThhyqLsNN2/mEDg00O828SwATKcFRnA1nqbACIpsC6ogAo00NRFPwBp/d5pijV+g5fdz880TgPfwPAou+5o281ZJF+Lpt74EwOCJQIeegG35iaaJEIzf5NubRFSLaxnAAsAEBjvJhugqCEChNbKwNYQNcIY7FIGmlj9Ek30bv8ETgHfxfFK7AlBBI/H3B2xsB7/n93Z/MkuBW3gCejo5egNNgv1MbTJ+gycAm9EV2kfO9hcuPhcCsBnZnVK7dnlC/RyGaQ81hi5D5b+2hTHERMClaW1tnpK0298cYdP4AAb3C3l/2xu/Rgcoq0SYBsa7C9AmMjomQDQTx8/iuQwiNxZpn2XzrXb47DuigYaKR+j/fF6Kf5IWAG+4c5siNRMCMD2ZtBkmhiqn01H5Z+4w0t6OJ6DL4SkImgzDnJS08Rs8g1uElnh8R4NuyN9fRQEdmpQAxNJRNlzb+3gUo/380Q7rFrw7CAp5eVDU0KV+g7lmWQBskibMxau9QjsN+fDDxzO2zpnp+qhx9FNU/dnwAPbbwcjCti+9AYZxDx5voqaXCE0/h/GfCuMvSWnCrScAv6dGuOgP2zn8O+atnI5BmrMhTn1SWtBrphCZLdmMmbW1NbvXHTF/mST60p1+pxJnXwBQ+qTcenQHplevWfa7FIqGCTjRlXZ/EYV01A47Gxm8AbVqGI1ppQutMXrz7pMnFjmokcai9Z/bZr5M/5/oZlT1A+wbfttIP8RWESo6Qs6nt5K5HN+k5gF4yaIb8K3UdLNy6L7aj6vSFuqaCRYwtoXoZ5/Zrpsdi/Bjqmks7FaqeEb3GJ4vkg/Splb5McY/E17J/mlLrz2i1gsPwOzVeFx73kgCp/BH6gJAMU+gGp7AStLiHVcrX4MXTBdA6LAguUY2Fi6t/nRRUhF57YIbSdegOnXPbOyclmiy/e6F8CYmyQV2sC67xm/Lzxp/Pa7/HLEXPZrMSsLcCYBNXeB/B6dw7eBghouLyTskfnx3iVbispp1y9YkcwY9lvZGDXwMXsAhbXYDMsX21ne+aKCJuoAOJhM7MIvGH/VEnhX1NEY8klxI89wKQPNsJJUTplMD8Se3sUq46qKt61/4ONnTqEq6Fx7A+A4j7mQk/156MIG/4HgA8rBfVvIQM/4I+vwROk8upDdSOZVv0i8ATCAx3p+KLEErNqF2fdXqZE+DbsD+qMmPiUL6QVa9AHsN1HKUPhvphbydopHmJXIerUr1dL5hAWDSQpoEwKDG0iXoUV6HlnGnpO+75zsmSrGybv8ciM29cgG9luopWQCY3JFOAZhAZbSFrkFrfClc8XCn2UPJeA/NJ/fEuhCtNiyJGv4y/O0RvH669d2HZElOAPYedhIK+WEWACYl0igABnUO7UqNVAmjmiLC1CPr3QFf106xfvxiHG+CYe+Hd3rCrnpHt4Mz8xe+xWMDrse4+yvx+bfkHEp6rKS9bPimuP/IwQ5FnmcBYFIizQJgMDse62IaBR9gAroER9oanm9dglg/vpH+jONpEKpvYdy74+1S7dDOeC4yU4CFplot6Fu8/jxTOzgnJQDdBo3sQ677DknRnQWASZoMCEAMNZZ+CLd5OGr4GUjmUOtqx6bStnazqdmxovjhwVO6Ztpu/ERXtreaMFskJQBlfYd1d0PiGSnEUSwATNJkUABiqLNpX7SuB8PoDoAncAhq/F54dEPSu9l+tbbr580S9Y/w/sd4Pl2EEgjjldT1Ul4ZfyxL/hk1SnZ7b+tIpfRcKZ1dzWwIhvFNFgQghr6ISqmGeqG5MlF/C02gDi0hCa4N7V2H9zai27AJr43XcLsIQyjS2XWI3i6Muv15YfyxbCX93e79h52iBM0UMryX1tmehcF0eiAAym140XHV+alMBEo3qpJ+jqp8BzyBvdLiCcRmDWq7xfu0fDH+ZllLnpJ+Qw4jxzlYarm/IrVbri+I6UyYqcDq78oR99Z9vMxXKKtMY+f1S5oFT6FfukQAjvIieCFj8mmr97RNwC0Z+LOekYaaUhQdzinZFWDiUxCRTiRcu22nb/9Fb76ZV2P10fX8c9I5HgCjqCezbqGAfiXu8xe5J1PwDHyGaQWM/1gT0RcewP52n4B0EesKuLRAFOWHCLAAMEwz1FgYv9k2PFOr+raPByzIB0+ABYBhokRb/t8Jc8swk0t680gEWACYwKDOoj3h0JvQYNa04YrXx4J6Ro0/cy1/a7bHE1goGuhSv9F805wNhul66HLqATsegVp+DF72JRNae/viXYH/Inh8h1fr8TgcwnBAVmMKNPcE6uEJ5EAEWACYLoc+j7rrRjodhjyaJP1QCOpll9K2ZdhmpV3zRUPZvn+1fWBwoSiCJ5Dl7gALANOlsKHCXboS7fwRdmNOQ1vhtJsjKLdz2GKx/RU9nO27AywATJdBVdIZMOTJIhwNx52NmQWxiMOpCsj28GJZHRNgAWC6BGoMnYpW3wzi9Ynb4qcLx67nr8LRfrHFRSmxfZefR7IlAiwATKfHrvgL0Wy0/N42XNkwfm9V3xPwAK5Gev3xmIX0e6fsdWT57gALANPpURX0B7TGFwtN4awZvwvjR3cjtrDHLiASdJeQaZg6LKL7DqjMewIsAEynBoZnQnEvFAXo92djp0lvu7HHcXRV61V9VgSI7kQ3JC2eQEwEICgT5QLKyO5ZLABMp0aV02TU4unogxdlfGegmPG7NEXOb3tb8KgI3LXDjsXJsP3uwCOiMTOeAAsA06mBwZldgUa32/rHangaRulhjE/BqCfD+D/sME9jIAIOPAEHnkCqIuBtEW4HBjPhCbAAMJ0WPYZ6a0n/LQrppztEAG4WTrvF5qDJYs4B44dJ3yyujy8nURHw5wnE8tzcKqO3GDMlAiwATKcFrf8IItvSDmxhZF7wjVo83wKzWSYESS1oPP5yupAwsWSEwNuH7w6h6epEI/SqcXQi0rorIU8gts030cN4PAHxqIfBl+LxSzzOECEqxd+9W4SF6ZsxyALAdFrQyo6Fodxo78HHDMxz1WtxNA1dg3vEbLKbzqqzaHf04afh7+dCBAp9i4B33r9RmM6Us+mThPOYyJiAd26zKOlyUU9Lmvf11VjaBXk91t5hCFN33YBXgm5Hl2eaXGivMyVYAJhOiyqnq0xcfRhXiTVoz5C24XmKcOlutNT1zT+vz6CeuoCm4/B8fKfAlwh45/4AHsAo8RB95DOfJ6KFb9sT2H7ff6p8iG5o9xyVdBs+Ox7iVQxPYDOE6AgI0XupliELANNpgVFcA5d4CgyrMDqN1mv5Fc1qbfwx9HiIQB1dC4M8z5cn4AnAe/jeycnszmPHBEJtzBPwzmuiER/Z0eCiOpsOgLfzPLyA3c0tRgjGpegKzIKHk9INRxYAptOClvUa29qHqVBH0PIrHNOOLf8O3zubvgdjnA7RuCBhT8Az1PchACcluz2X9QQcKwK9W3RZFP0dTyfAs/i6ve/q8ygE9381rrUvrtUMCd4KAbgm1sVJFhYAptNiuwCSriMzTm4WAWkYVxzjj9HUHfDGBIrjioA3SLcKhlsuF9D6pPNsPAETbThEe1oR8IRlNfr0R6NP/3m73/PGAv5hphtbAdB0myiAt8MCwAQVXUE/0JLKYQxrhFlKm6Dxx7CegKSFMKpj40YB8gRgjmigX6c6ISd6d2CWHRhU1gNogCX+Us6l/2n3O2PpLFzjnfBcdrJ3A4guQ765C8AEG3UmlYl+VJ3Ivfk2v19B55oIwDDGXToapbcC0EgTxFZ0MZ5Mfc5hdPMRzxPwRGApOiPlcjZ9tcNnTSizMD2KfBwqBDkQgG/wncHxJiQlAgsAE2hsDAFCf9qh3Tu8TUdwtSM0FEb3atrS9u4OWE8ARm1SfwH/zkQaS5p95lg8TSKHhsD4TVwjMx15hlhHvxGrUt+xgAWACSx6OlrT9TQPxnVKhysJvem4j0EALkb/f2M682BFQMCrCDd5Ahvw9ufIS7XZxBTPvYS0G5p6MwJdulM00rXpWhfAAsAEEhs3sI4uh3H/Ci1wWbtOfaz1d+k0sRc9m2xXoyOaPAGzC5EhNoU5FqosmjdtxgAidF06RYgFgAkcZtwAzvRMPM5Cy9+tQ5P2VgCaFnqymG13Es5MnjwRuA6t/UEtYhQKm36jnda8lW6VT9CmdKbLAsAEiqjx3wK3vxLGVtBhL9qxre7LODpPPkgfZDxvlTQAFnkcWvyD8HIAROBz5GEdzH8lOigvIw/V6U6TBYAJDE0tv0NjhehgAlBs1N+lt2CEF8uH6K/ZyqOZ8AMz74HcddMh2iYKqUbMsouEMgILABMIonsFzIRhV6LSt238MWvwgn0uQ397Kvrbr+U675mEBYAJBKqCpqC2zxAOWtjoDLwWbL/X/5aZrguBWCzn0me5znemYQFgAoEqp4fhTp/RYsafsG7+Rrz+AI83IQDL8ff3xDxaJ3K7VUjWYAFgAoGdNqzpx6jxZfYNc789TF+RWUSEXjc8g+8yOcqfr7AAMIFCj7J32Skd03m7AiwADBNgWAAYJsCwADBMgGEBYJgAwwLAMAGGBYBhAgwLAMMEGBYAhgkwLAAME2BYABgmwLAAMEyAYQFgmADDAsAwAYYFgGECDAsAwwQYFgCGCTAsAAwTYFgAGCbAsAAwTIBhAWCYAMMCwDABhgWAYQIMCwDDBBgWAIYJMCwADBNgWAAYJsCwADBMgGEBYJgAwwLAMAGGBYBhAgwLAMMEGBYAhgkwLAAME2BYABgmwLAAMEyAYQFgmADDAsAwAYYFgGECDAsAwwQYFgCGCTAsAAwTYFgAGCbAsAAwTIBhAWCYAPP/gA43S5Djn2MAAAAASUVORK5CYII=
Designing and Writing Interactive Texts
Draft of 'Creating a self-designed exercise'
alert-background: #ffe476
alert-border: #b99e2f
alert-highlight: #881122
alert-muted-foreground: #b99e2f
background: #ffffff
blockquote-bar: <<colour muted-foreground>>
button-background:
button-foreground:
button-border:
code-background: #f7f7f9
code-border: #e1e1e8
code-foreground: #dd1144
dirty-indicator: #ff0000
download-background: #66cccc
download-foreground: <<colour background>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #fff
dropdown-tab-background: #ececec
dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee
foreground: #333333
message-background: #ecf2ff
message-border: #cfd6e6
message-foreground: #547599
modal-backdrop: <<colour foreground>>
modal-background: <<colour background>>
modal-border: #999999
modal-footer-background: #f5f5f5
modal-footer-border: #dddddd
modal-header-border: #eeeeee
muted-foreground: #999999
notification-background: #ffffdd
notification-border: #999999
page-background: #ffffff
pre-background: #f5f5f5
pre-border: #cccccc
primary: #7897f3
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #ccc
sidebar-foreground-shadow: rgba(255,255,255, 0.8)
sidebar-foreground: #acacac
sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #c0c0c0
sidebar-tab-background-selected: #fec26e
sidebar-tab-background: <<colour tab-background>>
sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: <<colour tab-divider>>
sidebar-tab-foreground-selected:
sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #444444
sidebar-tiddler-link-foreground: #7897f3
site-title-foreground: <<colour tiddler-title-foreground>>
static-alert-foreground: #aaaaaa
tab-background-selected: #ecb535
tab-background: #f2e7c9
tab-border-selected: #e6a82a
tab-border: #7d95f2
tab-divider: #d8d8d8
tab-foreground-selected: #000
tab-foreground: #000
table-border: #dddddd
table-footer-background: #a8a8a8
table-header-background: #f0f0f0
tag-background: #ffeedd
tag-foreground: #000
tiddler-background: <<colour background>>
tiddler-border: #eee
tiddler-controls-foreground-hover: #888888
tiddler-controls-foreground-selected: #444444
tiddler-controls-foreground: #cccccc
tiddler-editor-background: #f8f8f8
tiddler-editor-border-image: #ffffff
tiddler-editor-border: #cccccc
tiddler-editor-fields-even: #e0e8e0
tiddler-editor-fields-odd: #f0f4f0
tiddler-info-background: #f8f8f8
tiddler-info-border: #dddddd
tiddler-info-tab-background: #f8f8f8
tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: #c0c0c0
tiddler-title-foreground: #ff9900
toolbar-new-button:
toolbar-options-button:
toolbar-save-button:
toolbar-info-button:
toolbar-edit-button:
toolbar-close-button:
toolbar-delete-button:
toolbar-cancel-button:
toolbar-done-button:
untagged-background: #999999
very-muted-foreground: #888888
1: #DEFF65
2: #FF62f9
3: #FF7575
4: #5AD3FF
5: #A7FF7B
6: #DEFF65
7: #FF62f9
8: #FF7575
9: #5AD3FF
10: #A7FF7B
11: #FF62f9
12: #FF9563
13: #FF7575
14: #5AD3FF
15: #A7FF7B
alert-background: #ffe476
alert-border: #b99e2f
alert-highlight: #881122
alert-muted-foreground: #b99e2f
background: #ffffff
blockquote-bar: <<colour muted-foreground>>
button-background:
button-foreground:
button-border:
code-background: #f7f7f9
code-border: #e1e1e8
code-foreground: #dd1144
dirty-indicator: #ff0000
download-background: #34c734
download-foreground: <<colour background>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #fff
dropdown-tab-background: #ececec
dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee
foreground: #333333
message-background: #ecf2ff
message-border: #cfd6e6
message-foreground: #547599
modal-backdrop: <<colour foreground>>
modal-background: <<colour background>>
modal-border: #999999
modal-footer-background: #f5f5f5
modal-footer-border: #dddddd
modal-header-border: #eeeeee
muted-foreground: #ddd
notification-background: #ffffdd
notification-border: #999999
page-background: #644e62
pre-background: #f5f5f5
pre-border: #cccccc
primary: #5778d8
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #ccf
sidebar-controls-foreground: #fff
sidebar-foreground-shadow: rgba(0,0,0, 0.5)
sidebar-foreground: #fff
sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #eee
sidebar-tab-background-selected: rgba(255,255,255, 0.8)
sidebar-tab-background: rgba(255,255,255, 0.4)
sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: rgba(255,255,255, 0.2)
sidebar-tab-foreground-selected:
sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #aaf
sidebar-tiddler-link-foreground: #ddf
site-title-foreground: #fff
static-alert-foreground: #aaaaaa
tab-background-selected: #ffffff
tab-background: #d8d8d8
tab-border-selected: #d8d8d8
tab-border: #cccccc
tab-divider: #d8d8d8
tab-foreground-selected: <<colour tab-foreground>>
tab-foreground: #666666
table-border: #dddddd
table-footer-background: #a8a8a8
table-header-background: #f0f0f0
tag-background: #ec6
tag-foreground: #ffffff
tiddler-background: <<colour background>>
tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: #888888
tiddler-controls-foreground-selected: #444444
tiddler-controls-foreground: #cccccc
tiddler-editor-background: #f8f8f8
tiddler-editor-border-image: #ffffff
tiddler-editor-border: #cccccc
tiddler-editor-fields-even: #e0e8e0
tiddler-editor-fields-odd: #f0f4f0
tiddler-info-background: #f8f8f8
tiddler-info-border: #dddddd
tiddler-info-tab-background: #f8f8f8
tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: #c0c0c0
tiddler-title-foreground: #182955
toolbar-new-button:
toolbar-options-button:
toolbar-save-button:
toolbar-info-button:
toolbar-edit-button:
toolbar-close-button:
toolbar-delete-button:
toolbar-cancel-button:
toolbar-done-button:
untagged-background: #999999
very-muted-foreground: #888888
Creating a self-designed exercise
{
"tiddlers": {
"Paragraph Template": {
"text": "\\define annotate($from-tiddler$)\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=\"Annotation $from-tiddler$\" from-tiddler=\"$from-tiddler$\"/>\n\\end\n\n\n\\define annotation-nav(essay paragraph)\n<$set name=essay value=<<essay>>>\n<$set name=paragraph value=<<paragraph>>>\n<$button>\n<<essay>>\n<$action-navigate $to=<<essay>>/>\n</$button>\nParagraph <$count filter=\"[list<essay>allbefore:include<paragraph>]\"/> of <$count filter=\"[list<essay>]\"/> ||\n<$list filter=\"[list<currentTiddler>first[]]\">\n<$link to=<<currentTiddler>>>First</$link> ||\n</$list>\n<$list filter=\"[list<essay>before<paragraph>]\">\n<$link to=<<currentTiddler>>>Previous</$link> ||\n</$list>\n<$list filter=\"[list<essay>after<paragraph>]\">\n<$link to=<<currentTiddler>>>Next</$link> ||\n</$list>\n<$list filter=\"[list<currentTiddler>last[]]\">\n<$link to=<<currentTiddler>>>Last</$link> \n</$list>\n</$set>\n</$set>\n\\end\n\n\n\n<$list filter=\"[is[current]field:toc-type[paragraph]]\">\n<!--show the annotator-nav bar-->\n<$set name=\"paragraph\" value=<<currentTiddler>> >\n<!--fetch the name of the essay to which this paragraph belongs-->\n<$list filter=\"[<currentTiddler>listed[]field:toc-type[heading]]\">\n<$set name=\"essay\" value=<<currentTiddler>> >\n<$macrocall $name=\"annotation-nav\" essay=<<essay>> paragraph=<<paragraph>>/>\n<br>\n<$button>\n<$macrocall $name=\"annotate\" from-tiddler=<<paragraph>>/>\nNew Annotation of <<paragraph>>\n</$button>\n<ul>\n<$list filter=\"[tag<paragraph>]\">\n<li>Annotation: <$link><<currentTiddler>></$link></li>\n</$list>\n</ul>\n</$set>\n</$list>\n</$set>\n</$list>\n\n\n\n\n",
"type": "text/vnd.tiddlywiki",
"title": "Paragraph Template",
"tags": "Annotator $:/tags/ViewTemplate",
"revision": "0",
"modifier": "steve",
"modified": "20180228203021832",
"list-before": "$:/core/ui/ViewTemplate/title",
"creator": "steve",
"created": "20170420174459648",
"bag": "default"
},
"Essay Template": {
"text": "<$list filter=\"[is[current]field:toc-type[heading]]\">\n<$macrocall $name=\"essay-nav-first\" essay=<<currentTiddler>>/><br>\n\n<$list filter=\"[list<currentTiddler>]\">\n<$set name=\"paragraph\" value=<<currentTiddler>> >\n<!--generate an annotate button-->\n<$macrocall $name=\"newhere-annotate\" from-tiddler=<<paragraph>>/>\n<$link><<currentTiddler>></$link>\n<$transclude/>\n<!--show the annotation-->\n<$macrocall $name=\"show-annotation\" of-tiddler=<<paragraph>>/>\n<hr>\n\n",
"type": "text/vnd.tiddlywiki",
"title": "Essay Template",
"tags": "Annotator $:/tags/ViewTemplate",
"revision": "0",
"modifier": "steve",
"modified": "20180215142637656",
"creator": "steve",
"created": "20170420154130558",
"bag": "default"
},
"8.1": {
"text": "Unlike hieroglyphic writing, whose pictographic component gives it a visual,\nspectacular aspect, alphabetic writing was conceived as a transcription of\nspeech and was from its inception associated with the linearity of orality. This\nlinearity is aptly symbolized in the arrangement used in early Greek writing, in\nwhich the characters in the first line were aligned from left to right, and those\nin the next line, from right to left, with the characters sometimes inverted,\nimitating the path of a plow working a field, a metaphor that gave this type of\nwriting its name: houstrophedon.1 Readers were supposed to follow with their\neyes the uninterrupted movement the hand of the scribe had traced.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.1",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145326998",
"created": "20170420145051618",
"bag": "default"
},
"8.10": {
"text": "This incunabulum from Thomas Aquinas’s Summa Theologica, printed in 1477 in Venice,\nfollows the manuscript tradition. The decorated initials and paragraph marks are hand—\ndrawn. The first lines are in larger letters. There is no pagination. The layout of the text in\ntwo columns and its organization in the form of questions and answers, however, make\nit very readable. The illuminations are intensely symbolic. The first page (bottom left) is\nillustrated with an image that depicts the teaching of Thomas Aquinas. At the base of the\ncolumn, an image depicts the reception of the work by angels (bottom right).",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.10",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145601215",
"created": "20170420145051619",
"bag": "default"
},
"8.11": {
"text": "In the fifteenth century, the printing revolution was another time of in-\ntense reflection on the organization of the book. Febvre and Martin8 note\nthat the title page made its appearance—finally!——around 1480. After the\ninfancy of the modern book, the period of incunahula—books that imitated\nmanuscripts as faithfully as possible—printers quickly saw the full potential\nof the page as a discrete semiotic space.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.11",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145608307",
"created": "20170420145051619",
"bag": "default"
},
"8.12": {
"text": "Page numbering, which became common in the mid-sixteenth century,\nenabled readers to better control the duration and pace of their reading and\nfacilitated the discussion of texts by making it possible for readers of the same\nedition to refer to the same passage. Once this step was taken, the move-\nment toward tabularization intensified, and sophisticated techniques allowing\nmultiple points of entry into the text became widely used, such as paragraph\nsummaries in the margin and the running head. It was now possible for\nreaders to precisely locate the point they had reached in their reading and to\ncompare the relative size of different sections—in short, to control their read-\ning progress. They could also forget the details of what they had read earlier,\nsince they could quickly find them again by referring to a table of contents\nor index. They could read only the parts of a book that interested them.\nEspecially if a book is long, readers often construct the meaning on the\nbasis of clues of various types. Typographical markers such as bold, capitals,\nitalics, or color allow them to quickly classify the elements they read and to\navoid ambiguity; for example, the italicization of foreign words prevents con-\nfusion with homonyms. When justified by the material, an index of proper\nnames, a detailed index, or a bibliography permits readers to choose the way\nof accessing the text that best suits their information needs of the moment.\nThese reading aids did not come into use all at once but were slowly refined,\nin a process that culminated in the golden age of print in the nineteenth cen-\ntury, when the progress of mechanization heralded the triumph of the printed\npage. The table of contents, for example, appeared in the twelfth century. The\nparagraph break, the concept of which had been expressed through the use\nof the pilcrow in manuscripts of the eleventh century, was finally indicated\nby a line break, as seen in an edition of Gargantua printed in Lyon in 1537.\nThus shaped by the ergonomics of the codex, the text was no longer a linear\nthread that was unreeled, but a surface whose content could be perceived from\nvarious perspectives. These reading aids, which allow readers to consider the\ntext the same way they look at a painting or tableau, are here called tabular.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.12",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145616134",
"created": "20170420145051619",
"bag": "default"
},
"8.13": {
"text": "With the introduction of printing, the art of publishing fluctuated between\nthe temptations of textual continuity and those of pictorial page layout. On\nthe one hand, an austere layout in which the text was rigidly aligned within\nthe frame of the page was best for emphasizing the mechanical perfection of\nprinting and the linear aspect of language and reading; on the other hand,\npublishers could also be tempted by a complex layout in which the text was\npresented in different visual blocks among which readers could pick and\nchoose as they wished, exploring their relationships in nonsequential order.\nThese fluctuations in the ideal of the book can be observed across different\nperiods. In this regard, it is informative to compare some of the printing\nmanuals studied by the typography expert Fernand Baudin. A manual pub-\nlished by the printer Fertel in 1723, entitled La science pratique de l’imprimerie,\nis a model of complex layout in which marginal glosses sometimes spill over\ninto the space of the main text. In contrast, a manual published forty years\nlater, written by Fournier, presents the text in a single, rather narrow column\nand seems to have gone back to the linear order. As for the book by Baudin,\nwho was himself a typ ographer and wished to give an account of an art that\nwas the passion of his life, it is in large format, with a column of glosses and\ncross-references systematically running down one side of the main column\nand sometimes even framing it, as Fertel’s glosses do.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.13",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145623367",
"created": "20170420145051619",
"bag": "default"
},
"8.15": {
"text": "For Walter Ong, this segmentation shows that reading did not focus on\nthe visual aspect of the words grasped globally, but was still based on oral\npractices; the presentation of the text was independent of its semantic aspect.\nIt is also likely that such practices involved a kind of playful allusion to a way\nof reading that was already seen as outmoded.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.15",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145639921",
"created": "20170420145051620",
"bag": "default"
},
"8.14": {
"text": "The challenge of printed text, in short, is to strike a balance between se-\nmantic and visual demands, the ideal obviously being a combination of these\ntwo modes of access to the text around a coherent focus. We can still ob—\nserve the naive triumph of the visual over the semantic in even the titles of\nsixteenth-century books, in which printers did not hesitate to cut out words\nin order to create a symmetrical effect.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.14",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145631402",
"created": "20170420145051619",
"bag": "default"
},
"8.16": {
"text": "Today, publishers make such effort to enable the reader to perceive com~\nplete words that they sometimes hesitate to break a word at the end of a line,\nand thus to use justified text, although that was the typographical ideal for\ncenturies, beginning in the time of the volumen. This concern with match\ning the semantic unit with the unit of visual perception is also evident in\nmagazines, which tend increasingly to make the text of articles fit into the\nspace of the page or double page.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.16",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145648917",
"created": "20170420145051620",
"bag": "default"
},
"8.17": {
"text": "It is now commonly acknowledged that the revolution of the codex was\nnot limited to ergonomics, but that it also had an impact on the nature of\ncontent and the evolution of mentalities in general. Indeed, once a text is\nperceived as a visual entity, and no longer as primarily oral, it lends itself\nmuch more readily to criticism. The eye, given the richness of optic nerve\nendings in the cortex, can mobilize the analytical faculties more easily and\nmore precisely than the ear. As historian Henri-Jean Martin notes on the\nrevolution of printing in the sixteenth century: “By the same token, any\nreasoned argument was as if detached from the realms of God and men and\ntook on an objective existence. The written text became amoral because it\ndetached from the writing process and no longer demanded that the reader\ntake on responsibility for it by reading it aloud. This may have facilitated\nheretical propositions.”",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.17",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145657081",
"created": "20170420145051620",
"bag": "default"
},
"8.18": {
"text": "The process by which the text became an autonomous object crossed a new\nthreshold during the Enlightenment, when the last barriers to its generali-\nzed objectification collapsed. That era coincided precisely with spectacular\ngrowth in reading in Europe. We will come back to this question.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.18",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145704994",
"created": "20170420145051620",
"bag": "default"
},
"8.19": {
"text": "With the advent of newspapers and the mass-circulation press, which\nunderwent rapid expansion in the nineteenth century, the formatting of\ntext became even more tabular. In a radical departure from the original\nlinearity of speech, text was now presented in the form of visual blocks that\ncomplemented and responded to each other on the eye-catching surface of\nthe page. McLuhan gave a name to the metaphor implicit in this arrange—\nment: the “mosaic” text. Indeed, newspapers provide a textual mosaic, in\nwhich the reading of various types of information is subtly influenced by the\nsurrounding news, as has been pointed out by analysts of newspaper layout:\n“For about a century, newspapers have been laid out in such a way that each\nitem of information, though flat on the page, stands out by virtue of the mere\nfact of its coexistence with other items of information on the page, which\nin turn acquire their value from this competition? ’1” The same authors note\nthat until the end of the nineteenth century, newspapers consisted simply\nof vertically aligned columns, each of which theoretically constituted a page\nthat went on without interruption. “This type of layout naturally favored a\ntemporal sequence of discourse: there were no interruptions for turning\npages, no illustrations to create a break or suspension of reading, and no\nlead or subheading introducing secondary material. This form corresponds\nexactly to the temporal logic of discourse: It is the presentation of logos in\nmovement, and not the staging of an event.”11",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.19",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145714420",
"created": "20170420145051620",
"bag": "default"
},
"8.2": {
"text": "Orality thus extended its influence over the medium of text. The scribe\nlined up columns of text on sheets of papyrus—which had been in use since\n3000 BCE—until he came to the end of the scroll. Despite the characteristics\nthat made the papyrus scroll the quintessential book for three millennia, the\nfact that it was rolled up into a volumen placed serious limitations on the\nexpansion of writing and helped maintain the book’s dependence on oral\nlanguage. It was taken for granted that readers would read from the first line\nto the last and that they had no choice but to immerse themselves in the text,\nunrolling the volumen as a storyteller recounts a story in a strictly linear con—\ntinuous order. In addition, readers needed both hands to unroll the papyrus,\nwhich made it impossible to take notes or annotate the text. Worse still, as\nMartial observed, readers would often have to use their chin when rerolling\nthe volumen, leaving marks on the edge that were rather off-putting to other\nlibrary users (“Sic noua nec mento sordida charta iuuat” [“How pleasant is\na new exemplar unsoiled by chins”] .2",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.2",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145435762",
"created": "20170420145051618",
"bag": "default"
},
"8.20": {
"text": "The sudden appearance of banner headlines was the beginning of a new\nkind of layout, one'no longer guided by the logic of discourse, but by a spa-\ntial logic. “The number of columns, the use of rules, the weight of the type,\nthe font, the position of illustrations, and the use of color make it possible\nto bring together or move apart, to select, and to separate the units that, in\nthe newspaper, are units of information. Layout then emerges as a rheto-\nric of space that destructures the order of discourse (its temporal logic) to\nreconstitute an original discourse, which is precisely the discourse of the\nnewspaper.”12",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.20",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145722830",
"created": "20170420145051620",
"bag": "default"
},
"8.21": {
"text": "Today, there is no doubt that tabularity meets the formatting requirements\nof information texts in that it allows the reader to apprehend them most\neffectively. This is especially apparent in magazines, where the dominant\nmodel involves framing textual material by means of a hierarchy of titles:\nsection heading, main heading and subheadings. A more substantial article\nwill often be presented in the form of a feature story that, in addition to the\nmain text, includes one or more sidebars elaborating on points raised in the\nmain text. Such fragmented layouts are sometimes criticized. Their primary\nfunction is clearly to hold on to readers whose attention span is unsteady or\nshort, unlike a linear format, which is intended for the “serious reader.” This\nway of breaking up text into different elements is also very well suited for\ncommunicating a variety of information that readers can select according\nto their interests. On the other hand, popular magazines may diverge a bit\nfrom this ideal and give predominance to glossy ads and photographs in or—\nder to entice the reader to leaf through their pages and absorb the discourse\nof advertising.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.21",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145729589",
"created": "20170420145051620",
"bag": "default"
},
"8.22": {
"text": "When tabularity is taken into account, then, printed text is not exclusively\nlinear and tends to incorporate characteristics of the visual realm. Readers\nare thus able to free themselves from the thread of the text and go directly\nto relevant elements. A book may thus be said to be tabular when it involves\nthe simultaneous spatial presentation and highlighting of various elements\nthat may help readers identify the connections and find information that\ninterests them as quickly as possible.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.22",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145737474",
"created": "20170420145051620",
"bag": "default"
},
"8.23": {
"text": "The concept of tabularity thus covers at least two distinct phenomena—4n\naddition to designating an internal arrangement of data. On the one hand,\nit refers to the various organizational means that facilitate access to the con—\ntent of the text: This is functional tabularity, as shown in tables of contents,\nindexes, and division into chapters and paragraphs. On the other hand,\ntabularity also suggests that the page may be viewed in the same way as a\npainting and may include data from various hierarchical levels: This is visual\ntabularity, which enables readers to switch from reading the main text to\nreading notes, glosses, figures, or illustrations, all of which are present within\nthe space of the double page. This visual tabularity, which is seen primarily\nin newspapers and magazines, is also found in varying degrees in scholarly\nbooks, which may present various types of text juxtaposed on a single page.\nIt is obviously highly developed in electronic publishing, as seen on the\nWeb pages of major newspapers, magazines, and encyclopedias. In addi-\ntion, through a hybridization of publishing techniques, the layout of books\nor magazines increasingly borrows from the methods of electronic publish—\ning, such as the use of color, underlining, and marking of text elements, with\ncross-references to thumbnails or sidebars. In this type of tabularity, the text\nis shaped like visual material, with blocks referring to each other on the page\nsurface and sometimes incorporating illustrations.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.23",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145745438",
"created": "20170420145051620",
"bag": "default"
},
"8.24": {
"text": "The spatial projection of the thread of the text obviously depends on the\nformat of the book. The smaller the book, the less manipulation of the visual\nblocks is possible; readers are confined to a continuous movement through a\nsingle column of text with no interruption. This format, which was adopted,\nfor example, by the famous French collection Bibliotheque de la Pléiade, tends\nto reinforce the ideal of a linear typography with nothing to break its regular-\nity. It is especially well suited to novels, which are read for content. National\ntraditions prevent French publishers from placing the table of contents at\nthe front of the book as it is in the English-speaking world, a position better\nsuited to the tabular ideal and to readers’ needs.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.24",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145758051",
"created": "20170420145051620",
"bag": "default"
},
"8.25": {
"text": "It should be added, however, that the degree of tabularity of a book will\nalso depend on its content and intended use. Thus, children’s books often do\nnot have page numbers: young readers have no need for them, since these\nbooks are designed to be read or looked at from cover to cover and there is\nno expectation of a reflective reading with note taking or references. Schol-\narly books, which are intended for readers for whom time is valuable, have\nmany tabular guideposts: volumes, chapters, sections, paragraphs, headers,\nnotes, introductory summaries, detailed index, index of proper names, and\nbibliography. But the linear thread may still be a justifiable choice for devel-\noping an argument, insofar as the author wishes to ensure that the reader\nfollows the entire proof. On the other hand, the novel, which is derived from\nthe ancient art of the storyteller, generally demands sustained reading and\ndoes not require elaborate tabular clues. The large number of chapters and\nthe hierarchy of sections in Victor Hugo’s novels, which often have a very\nlinear narrative thread, may be explained by the fact that these novels were\ninitially published in serial form in newspapers. Today, some writers, anxious\nto make their readers read continuously and to have their work seen as high\nliterature, as different as possible from the tabular format of the magazine,\ndispense altogether with chapters, and even paragraphs and punctuation.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.25",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145805616",
"created": "20170420145051620",
"bag": "default"
},
"8.3": {
"text": "The advent of the codex was a radical break with this old order, and it\nbrought about a revolution in the reader’s relationship to the text. A codex\nconsists of pages folded and bound to form what we today call a book. These\npages were made of papyrus or parchmentmpaper having appeared in Eu-\nrope only in the 11005. The codex emerged in classical Rome, several decades\nbefore the Common Era, at the time of Horace, who used one himself as a\nnotebook. Smaller and easier to handle than a scroll, the codex was also more\neconomical, because it allowed scribes to write on both sides and even to\nscrape off the surface and write on it again. But because of its antiquity, the\nscroll was still considered to have greater dignity and was preferred by the\ncultured elite, a status the codex did not acquire for several centuries. The\ntransition really took place only in the fourth century in the Roman Empire.\nAnd it took even longer for the new medium to free itself from the model of\nthe volumenfljust as it took the automobile several decades to completely\nrid itself of the model of the horse-drawn carriage. Such is the inertia of\ndominant cultural representations.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.3",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145444057",
"created": "20170420145051618",
"bag": "default"
},
"8.4": {
"text": "Christians were the first to adopt the codex, which they used to spread the\nGospels. The new format, which was smaller, more compact, and easier to\nhide and to handle than the scroll, also had the advantage of representing a\nsharp break with the tradition of the Jewish Bible. Historians find more and\nmore evidence that the latter reason was in part responsible for the choice\nof the codex format by the Christians, but the wide adoption of the codex\nover the following centuries was essentially due to “the twin advantages of\ncomprehensiveness and convenience.”",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.4",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145454927",
"created": "20170420145051618",
"bag": "default"
},
"8.5": {
"text": "The new element the codex introduced into the economy of the book was\nthe page. I will look at the problem of the integration of this important in-\nnovation into the digital order in the section “The End of the Page? [chapter\n34]” It was the page that made it possible for text to break away from the\ncontinuity and linearity of the scroll and allowed it to be much more easily\nmanipulated. Over the course of a slow but irreversible evolution, the page\nmade text part of the tabular order.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.5",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145503381",
"created": "20170420145051619",
"bag": "default"
},
"8.6": {
"text": "The codex is the quintessential book, without which the pursuit and dis-\nsemination of knowledge in our civilization could not have developed as fully\nas they have. The codex gave rise to a new relationship between reader and\ntext. As one historian of the book writes, “This was a crucial development\nin the history of the book, perhaps even more important than that brought\nabout by Gutenberg, because it modified the form of the book and required '\nreaders to completely change their physical position.”4 The codex left one\nof the reader’s hands free, allowing him or her to take part in the cycle of\nwriting by making annotations, thus becoming more than a mere recipient\nof the text. Readers could also now access the text directly at any point. A\nbookmark let them take up reading where they left off, further altering their\nrelationship to the text. As another historian notes, it took “twenty centuries\nfor us to realize that the fundamental importance of the codex for our civili-\nzation was to enable selective, noncontinuous reading, thus contributing to\nthe development of mental structures in which the text is dissociated from\nspeech and its rhythms.”5",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.6",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145517200",
"created": "20170420145051619",
"bag": "default"
},
"8.7": {
"text": "When the potential of this union of form and content in the page became\napparent, various types of visual markers were gradually added to the organi-\nzation of the book to help readers find their bearings more easily in the mass\nof text and make reading easier and more efficient. Since the page constitutes\na visual unit of information related to the preceding and the following pages,\nallowing it to be numbered and given a header, it has an autonomy that the\ncolumn of text in the volumen did not. Thanks to the page, it is possible to leaf\nthrough a book and quickly know its contents, or at least the essentials.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.7",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145535927",
"created": "20170420145051619",
"bag": "default"
},
"8.8": {
"text": "The page can be displayed for all to see, inviting monks in scriptoria to\ncombine text and images. While the papyrus was rolled up again after read-\ning, the codex can remain open to a double page, as demonstrated by the big\npsalters of the Middle Ages that were displayed on their lecterns in churches.\nThe page was thus the place where the text, which was previously seen as a\nmere transcription of the voice, entered the visual order. From then on, it\nwould increasingly be handled like a painting and enriched with illumina-\ntions, something that was profoundly foreign to the papyrus scroll. One can-\nnot see these illuminated manuscripts without being struck by their fusion of\nletter and image. Reading becomes a polysemiotic experience in which the\nperception of the image, which is far from a mere illustration, enables readers\nto recreate in their own mental space the tensions and emotions experienced\nby the artist. The readable gradually moves into the realm of the visible.6",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.8",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145541799",
"created": "20170420145051619",
"bag": "default"
},
"8.9": {
"text": "The sight of the codex open on its lectern is emblematic of a religion whose\nideal was that all people should be able to read the sacred texts and share the\nRevelation. Various other innovations gave rise to a change in the reader’s\nrelationship to the text and to reading. They include the insertion of spaces\nbetween the words in Latin texts, which began about 700 CE in Irish scripto-\nria (Book of Kells) and led to decisive changes in the formatting of text.7 The\nperiod from the eleventh to the thirteenth century saw the consolidation of\nmany features that allowed readers to escape the original linearity of speech,\nsuch as the table of contents, the index, and the header. Paragraph breaks\nindicated in the text by a pilcrow (9) made it easier for readers to deal with\nunits of meaning and helped them to follow the main divisions in the text.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "8.9",
"tags": "Annotator",
"revision": "0",
"modified": "20180215145552871",
"created": "20170420145051619",
"bag": "default"
},
"15.1": {
"text": "In computer science, the concept of hypertext designates a way of making\ndirect connections among various pieces of information, textual or nontex-\ntual, that may or may not be located in the same file (or on the same “page”\nby means of embedded links. Using an interface based primarily on visual\nand intuitive elements such as color and icons, hypertext users can identify\nthe places in a document where additional information is attached and ac-\ncess them directly with a mouse click.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.1",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155440805",
"created": "20170420145051623",
"bag": "default"
},
"15.10": {
"text": "Selection, association, and contiguity. In addition to the above-men-\ntioned modes of navigation, the blocks of information are here ac-\ncessible sequentially, like the pages of a book. This model is suitable\nfor an essay or a scientific article and would be used, for example, for\nadaptations of printed books. It corresponds to a simple transposi-\ntion of codex format to electronic format. For example, in a hyper-\ntext adaptation of an essay such as Marvin Minsky’s Society of Mind,\nreaders can choose to select a title in the table of contents, search\nfor a word in the index, or move from section to section by scroll-\ning. The contiguity mode is useful only if a document is divided into\npages and sections that are supposed to be read in a specific order—\nas is usually the case with a book.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.10",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155801568",
"created": "20170420145051623",
"bag": "default"
},
"15.11": {
"text": "Selection, association, contiguity, and stratification. In addition to being\naccessible by the above-mentioned modes, the elements of informa-\ntion can be distributed in two or three hierarchical levels accord-\ning to their degree of complexity. This makes it possible to meet the\nneeds of various categories of readers or to satisfy different informa-\ntion needs for a single reader. This hypertext model best combines\nthe advantages of the codex with the possibilities opened up by the\ncomputer by taking into account a new dimension of the text, that of\ndepth. By superimposing different layers of text on a single subject,\nor to use another metaphor, by encircling a central nucleus with vari-\nous supplementary documents, the uses of which are well defined, a\nstratified hypertext provides several books in one.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.11",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155814498",
"created": "20170420145051623",
"bag": "default"
},
"15.12": {
"text": "Users of such a hypertext could scroll through pages in a main\nwindow, while at the same time being able to open one or more\nsecondary windows, providing more theoretical or more popular-\nized discourse. There are many fields in which this type of structure\nwith two or three layers, offering a basic discourse and additional\nwindows accessible on demand, is desirable. This is the case for self—\nteaching textbooks and learning situations, for example, in which the\nlearner is confronted with a mass of interrelated concepts that may\nnot all be familiar. It is also the case for technical manuals in which\nthe user may at any time want to consult supplementary information\non a specific element.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.12",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155826939",
"created": "20170420145051623",
"bag": "default"
},
"15.13": {
"text": "These four modes of navigation may also be combined in the electronic edi-\ntion of a work, opening up new perspectives for critical editions of works on\npap er. The main thread of reading would thus be the final version of the text,\ndominating the layers of the previous versions, which the reader could also\nchoose to display in parallel windows. The different pages of the text would\nbe accessed by contiguity or by selection in a table of contents. Finally, com-\nments, notes, and illustrations would be accessible through connections or\nassociative links. Because of the richness and diversity of the links provided,\nI will call this ideal type of hypertext a “stratified” or “tabular” hypertext.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.13",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155837967",
"created": "20170420145051623",
"bag": "default"
},
"15.15": {
"text": "In creating an arrangement capable of working in depth and not only on\nthe surface of the thread of discourse, the author of a tabular hypertext must\ntake the utmost care in establishing the different layers and distributing the\ninformation between the base level and the other layers. These choices will\nvary with the type of text and target audience. The levels of information may\nbe distributed on the axis of concrete/ abstract or divided between narrative\nand documents or between scholarly text, experimental data, and reference\nworks, or between didactic text, examples, and exercises, and so on.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.15",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155905077",
"created": "20170420145051623",
"bag": "default"
},
"15.14": {
"text": "The success of a tool of this kind obviously depends on the consistency\nand interest of the base layer. While this is relatively easy to determine in\nthe case of a critical edition, the same is not true for other documents. In a\ntextbook aimed at a diverse readership, the various strata of information it\nshould contain would have to be established. The base layer would contain\nthe main thread of the text, consisting of the minimum information at a\nmedium level of difficulty. On every page where needed, hyperlinks would\nopen one or two supplementary windows, such as a “novice” window for\nusers whose knowledge is insufficient for them to grasp the main ideas and\nan “expert” window for those who already possess the basic knowledge and\nwant to know more.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.14",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155850956",
"created": "20170420145051623",
"bag": "default"
},
"15.16": {
"text": "Generally speaking, it does not seem desirable to create more than two\nlayers in addition to the base level. Increasing the number of layers will result\nin a proliferation of cross—references, and reading would quickly become dif-\nficult. It is important to remember that in a reader-based textual economy,\nreference markers should be provided that allow readers to predict the re—\nsults of their actions when moving the mouse pointer over the surface of the\nscreen. The presence of a “novice” or an “expert” layer linked to a particular\nword or page should thus always be indicated in the same way, by an icon\nor the use of a color. Novice readers who click on an icon hoping to find an\nexplanation at their level would quickly become discouraged if, instead of\ngetting what they wanted, they encountered material intended for experts.\nTo be effective, reading must be based on stable conventions that enable\nmaximum concentration on the content.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.16",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155918752",
"created": "20170420145051623",
"bag": "default"
},
"15.17": {
"text": "Stratified hypertext will undoubtedly develop its own conventions just as\nthe print media did, and these will become part of readers’ culture. In spite\nof the problems, this is where the most promising future for hypertext lies\nif it is to move beyond the stage of utopian dreams of liberation to become\na productive working tool. However, these modes of organization of hyper—\ntext may lead to methods of navigation that are very different depending on\nthe degree of opacity or tabularity of the presentation of data. A literary or\ngame hypertext may opt for greater opacity in navigation and allow users to\nproduce events on the screen without knowing where they are or where they\nare going. In this case, there are no obvious “movements,” since everything\noccurs within the same visual framework. This form of opaque hypertext\nmay be suited to an experimental narrative such as Stuart Moulthrop’s He-\ngirascope3 or to an adventure game such as Myst, in which the players have\nno idea of their position in relation to the puzzles to be solved. For an infor-\nmational document, however, the most satisfying option for readers is one\nthat gives them a clear view of the distribution of information and enables\nthem to directly access all the blocks, with full control of their movement.\nIn this regard, it is significant that some games allow players to choose the\nepisode they want and allow them to display the percentage of the episode\ncompleted at any time.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.17",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155936863",
"created": "20170420145051623",
"bag": "default"
},
"15.18": {
"text": "One area where the user’s route cannot be left to chance is learning. In-\nstructional programs and textbooks are based precisely on the principle that\nthe acquisition of knowledge cannot take place in random order guided only\nby the learner’s associations. The first computer-assisted learning (CAL) pro-\ngrams took this principle of the sequential path to the limit, locking students\ninto programmed paths in which access to each exercise was conditional on\nsuccess in the previous one. Students were expected to move forward blindly,\nwithout knowing how many steps they would have to go through or even,\nsometimes, what they would actually learn from the program. Hypertext,\ntoo, can be used in an opaque manner, to totally control users’ progress,\nallowing them to follow only branchings accepted by the logic of the pro-\ngram, thus reinforcing traditional practices of computer- assisted learning. I\nbelieve, however, that hypertext should adopt some of the characteristics of\nthe age—old technology of the book to create a new product that will satisfy\nthe needs of demanding readers who use it as a tool for informational or\neducational purposes.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.18",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155949106",
"created": "20170420145051623",
"bag": "default"
},
"15.19": {
"text": "As we can see, the production of a hypertext requires constant strategic\nchoices by the author. The distribution of elements of information also poses\nthe problem of identifying every primary textual unit with a title. If these\ntitles are meaningful to the users, it will be easier for them not only to find\nthe information they want, but also to keep track of which pages they have\nread when they exit from the hypertext. In this way, readers will be able to\nhave real control over the text instead of being controlled by it or groping\ntheir way through it.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.19",
"tags": "Annotator",
"revision": "0",
"modified": "20180215160002303",
"created": "20170420145051623",
"bag": "default"
},
"15.2": {
"text": "Literary theory also uses the term hypertext, but in a very different sense.\nFor Gérard Genette, for example, hypertext is “any text derived from a previ—\nous text either through simple transformation . . . or through indirect trans-\nformation.”1 In this sense, James Joyce’s Ulysses is a hypertext of Homer’s\nOdyssey. The current concept of hypertext, as it comes to us from computer\nscience and the Web, is closer to that of intertext as first proposed by Julia\nKristeva and redefined by Michael Riffaterre: “the perception, by the reader,\nof a relationship between a work and others that have either preceded or fol-\nlowed it.” But the two concepts do not coincide completely, since the intertext,\nin this meaning, results from the act of reading, while the hypertext we are\ntalking about is a computer construct of links and data corresponding to files\nor parts of files that can be displayed in windows of various dimensions.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.2",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155454381",
"created": "20170420145051623",
"bag": "default"
},
"15.3": {
"text": "There are many hypertext software programs. Among the pioneers are\nHypercard, Hyperties, KMS, Intermedia, and Notecards. Since the advent\nof the Web, hypertext has been based mainly on HTML (HyperText Markup\nLanguage), XML (Extensible Markup Language), and XHTML.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.3",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155506922",
"created": "20170420145051623",
"bag": "default"
},
"15.4": {
"text": "Historically, the term hypertext was created in 1965 by Ted Nelson, who\nused it to designate a new way of writing on the computer, in which the\nunits of text could be accessed nonsequentially. The text thus created would\nreproduce the nonlinear structure of ideas as opposed to the “linear” format\nof books, films, or speech. Nelson himself was indebted to a Visionary article\nby Vannevar Bush, who in 1945 already envisaged a huge storage system for\nhuman knowledge that anyone would be able to connect to and that would\nallow them to annotate documents of interest. Even before the introduction\nof the personal computer, Nelson had attempted to realize Bush’s dream us-\ning a computer system called Xanadu—the name of Mongol emperor Kublai\nKhan’s palace, immortalized in a poem by Coleridge as a symbol of memory\nand its accumulated treasures. Nelson’s Xanadu was supposed to lead to a\nhuge universal library system (docuverse), which could be consulted on\nworkstations by making “micropayments” for each information node ac-\ncessed. Despite its commercial implications, Nelson’s model had a profound\ninfluence on the evolution of hypertext, and the World Wide Web may be\nseen as its culmination in an unrestricted form.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.4",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155522381",
"created": "20170420145051623",
"bag": "default"
},
"15.5": {
"text": "Hypertext can be used to manipulate data of all kinds, not only linguistic\ndata but also images, sound, video, and animation. It makes it possible to\nregulate a reader’s interaction with a document by programming various\nbehavior into objects on the screen in relation to the reader’s movements\nof the mouse: the author of a computer program can stipulate, for example,\nthat touching a certain word with the mouse pointer will change its form\nor color or trigger a process that will lead to a new text. Through these fea-\ntures, hypertext creates a radically new form of electronic dialogue in written\nlanguage. Even more numerous than the many forms of books, hypertext\nproducts vary substantially in appearance and internal organization. Indeed,\ncomputer technology can give digitized text any form imaginable.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.5",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155700747",
"created": "20170420145051623",
"bag": "default"
},
"15.6": {
"text": "In a text on paper, the paragraphs or blocks of information are arranged\nin sequence, and the reader can access them essentially through contiguity,\nrelying on a number of tabular elements. In a hypertext, the various blocks\nof information may be distinct and autonomous and may be located on a\nsingle “page” or on separate “pages.” In accordance with the nature of the\ndocument and the target readers, the author of a hypertext can provide ac—\ncess by means of selection, association, contiguity, or stratification, and these\nmodes can exist alone or in different combinations.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.6",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155712367",
"created": "20170420145051623",
"bag": "default"
},
"15.7": {
"text": "Selection. In the simplest case, selection, readers select the block of\ninformation they want to read from a list or enter a letter on the\nkeyboard. The various blocks of information are distinct units with\nno essential links among them. Readers are guided by a specific need\nfor information, which exists only until it is satisfied. This model is\ntypical of the catalogue, the entire organization of which is based on\nthe principle of expansion, with each word of the index leading to\na detailed description. Dictionaries also work on this principle, but\neach of their entries can also contain references to other entries such\nas synonyms, antonyms, and so on. The user may also select from the\nlist of pages already consulted in the document during the work ses-\nsion or may choose from a table of contents or from a tree diagram\nin which the various branchings are accessible at different hierarchi-\ncal levels. Finally, the most frequent mode of selection is by means of\nhyperlinks indicated by a particular color, on which the user clicks in\norder to explore the content behind them.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.7",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155722395",
"created": "20170420145051623",
"bag": "default"
},
"15.8": {
"text": "Applied to a text of a certain scope, the principle of selection is\nalso characteristic of hypertext fiction in which each screen page\nincludes several links to other pages, making Jorge Luis Borges’s\nideal of forking paths a reality. Similarly, in the case of a philosophi-\ncal essay, every block of text could be followed by a number of icons,\neach one corresponding to a possible continuation of the text accor—\nding to the anticipated reactions of the reader insofar as the author\ncould predict them. After reading a segment of text, the reader could\nselect the most relevant continuation. In so doing, he or she would\nbecome actively involved in reading, making choices, and expressing\nopinions at every step through each section read. But the number\nof combinations can easily skyrocket. If a block of text gives rise to\nthree choices, and each of these gives rise to another three, there\nwould be nine possible continuations of the initial text at the third\nlevel, twenty—seven at the fourth level, and eighty—one at the fifth. As\na result, 121 texts would have to be written for a sequence of five pa—\nragraphs to be accessible in perfectly “free” hypertext mode. Thus the\nidea of providing choices at every level has to be abandoned, or their\nproliferation would lead the reader into endless movement and force\nthe author to rigorously explore every logical alternative at each\npoint in the argument. Moreover, the freedom given the reader is pu-\nrely artificial; it only reinforces the dominant position of the author,\nwho is the master of all possible outcomes.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.8",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155733082",
"created": "20170420145051623",
"bag": "default"
},
"15.9": {
"text": "Selection and association. In this mode, readers choose the element they\nwish to consult but can also navigate among the blocks of informa-\ntion, letting themselves be guided by the associations of ideas that\narise as they navigate and by the links offered them. This model is\ntypical of encyclopedias.",
"type": "text/vnd.tiddlywiki",
"toc-type": "paragraph",
"title": "15.9",
"tags": "Annotator",
"revision": "0",
"modified": "20180215155749950",
"created": "20170420145051623",
"bag": "default"
},
"Essay 15: Varieties of Hypertext": {
"text": "",
"type": "text/vnd.tiddlywiki",
"toc-type": "heading",
"toc-heading-level": "h1",
"title": "Essay 15: Varieties of Hypertext",
"tags": "Annotator [[Vandendorpe Essays]]",
"revision": "0",
"modified": "20180215160134832",
"list": "15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9 15.10 15.11 15.12 15.13 15.14 15.15 15.16 15.17 15.18 15.19 paragraph-essay-16-context-hypertext",
"created": "20170420145051623",
"bag": "default"
},
"Essay 8: Toward the Tabular Text": {
"text": "",
"type": "text/vnd.tiddlywiki",
"toc-type": "heading",
"toc-heading-level": "h1",
"title": "Essay 8: Toward the Tabular Text",
"tags": "[[Vandendorpe Essays]] Annotator",
"revision": "0",
"modified": "20180215160124214",
"list": "8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8.11 8.12 8.13 8.14 8.15 8.16 8.17 8.18 8.19 8.20 8.21 8.22 8.23 8.24 8.25",
"created": "20170420145051618",
"bag": "default"
},
"Annotator": {
"text": "# Use advanced search {{$:/core/ui/Buttons/advanced-search}} to filter all tiddlers associated with the Annotator.\n# Paste ``[tag[Annotator]]`` into the <$button class=\"tc-btn-invisible tc-tiddlylink\"><$action-setfield $tiddler=\"$:/state/tab-1749438305\" text=\" $:/AdvancedSearch/Filter\"/><$action-navigate $to=\"$:/AdvancedSearch\"/>Advanced Search - filter </$button> tab\n# Export as .tid file\n# Import into your Annotator wiki. You should see these tiddlers imported into your wiki<br><$list filter=\"[tag[Annotator]]\">\n<$link><<currentTiddler>></$link><br>\n</$list>",
"whats-new": "This tiddler functions as a set of directions that will allow you to import a set of tools that you can use to annotate a set of readings, in order to do [[Exercise 4.02]]",
"type": "text/vnd.tiddlywiki",
"title": "Annotator",
"tags": "NewAtDesignWriteStudio",
"revision": "0",
"modified": "20180228155633637",
"created": "20180213143747399",
"bag": "default"
},
"Annotation": {
"text": "These are my annotations so far<br>\n<$list filter=\"[tag[Annotation]]\">\n<$link><<currentTiddler>></$link><br>\n</$list>\n",
"type": "text/vnd.tiddlywiki",
"title": "Annotation",
"tags": "Annotator",
"revision": "0",
"modified": "20180217164535837",
"created": "20180217164414951",
"bag": "default"
},
"Hypertextual Practices": {
"text": "<<tag \"Hypertextual Practices\">>\n<<tabs \"[tag{!!title}]\">>",
"type": "text/vnd.tiddlywiki",
"title": "Hypertextual Practices",
"tags": "Annotator",
"revision": "0",
"modified": "20180226194357334",
"created": "20180217162522116",
"bag": "default"
},
"Linking": {
"text": "Engaging in the practice of linking involves creating an opportunity to move, either within a text or to another text.",
"type": "text/vnd.tiddlywiki",
"title": "Linking",
"tags": "[[Hypertextual Practices]]",
"revision": "0",
"modifier": "steve",
"modified": "20180217162407124",
"definition": "Creating an opportunity for a reader (or the author) to move either within a text or to another text.",
"creator": "stevesunypoly",
"created": "20150721195646236",
"bag": "default"
},
"Listing": {
"text": "Engaging in the practice of listing involves manipulating the range of nodes to present them as possible choices that can be selected in a given context.",
"type": "application/x-tiddler",
"title": "Listing",
"tags": "[[Hypertextual Practices]]",
"revision": "0",
"modifier": "steve",
"modified": "20180217162407122",
"definition": "Manipulating the range of nodes (tiddlers) presented as possible choices that can be selected in a given context",
"creator": "stevesunypoly",
"created": "20150721195608432",
"bag": "default"
},
"Tagging": {
"text": "Engaging in the practice of tagging involves adding a label with semantic meaning to an object",
"type": "text/vnd.tiddlywiki",
"title": "Tagging",
"tags": "[[Hypertextual Practices]]",
"revision": "0",
"modifier": "steve",
"modified": "20180217162407119",
"definition": "Adding a tag to a tiddler",
"creator": "stevesunypoly",
"created": "20170104213659532",
"bag": "default"
},
"Templating": {
"text": "Engaging in the practice of templating involves creating a frameworks or set of instructions governing the presentation of an object",
"type": "text/vnd.tiddlywiki",
"title": "Templating",
"tags": "[[Hypertextual Practices]]",
"revision": "0",
"modifier": "steve",
"modified": "20180217162407116",
"definition": "Creating a frameworks or set of instructions governing the display of information for a set of filtered tiddlers.",
"creator": "stevesunypoly",
"created": "20151115060703454",
"bag": "default"
},
"Transcluding": {
"text": "Engaging in the practice of transcluding involves referencing one object (\"A\") in another (\"B\") such that the content of \"A\" appears to be a part of \"B\".",
"type": "text/vnd.tiddlywiki",
"title": "Transcluding",
"tags": "[[Hypertextual Practices]]",
"revision": "0",
"modifier": "steve",
"modified": "20180217162407111",
"definition": "Referencing contents in one tiddler to be presented in another",
"creator": "stevesunypoly",
"created": "20150721195705760",
"bag": "default"
}
}
}
{
"tiddlers": {
"$:/plugins/designwritestudio/showNotes": {
"text": "{\n \"tiddlers\": {\n \"$:/plugins/DesignWriteStudio/showNotes/read.me\": {\n \"created\": \"20180228150618937\",\n \"creator\": \"steve\",\n \"text\": \"This plugin includes a macro and a stylesheet to support the use of overlayed documentation within tiddlers.\\n\\n\\nThis plugin originates from the [[DesignWriteStudio|http://designwritestudio.com]] community.\",\n \"title\": \"$:/plugins/DesignWriteStudio/showNotes/read.me\",\n \"tags\": \"showNotes\",\n \"modified\": \"20180228151046505\",\n \"modifier\": \"steve\"\n },\n \"$:/plugins/DesignWriteStudio/showNotes/showNotesMacro\": {\n \"created\": \"20180220144143011\",\n \"creator\": \"steve\",\n \"text\": \"\\\\define show(text)\\n<$list filter=\\\"[title[ShowNotesMacro]field:dox[yes]]\\\">\\n<span class=\\\"yellow-hilite\\\">\\n$text$\\n</span><br>\\n</$list>\\n\\\\end\\n\\n<$checkbox tiddler=\\\"ShowNotesMacro\\\" field=\\\"dox\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"yes\\\"> show dox?</$checkbox><br>''status:'' {{!!dox}}\\n\\n<<show \\\"this is what it is about\\\">>\\n\\nThis macro requires:\\n\\n<<list-links \\\"[tag[ShowNotes]]\\\">>\",\n \"whats-new\": \"Use this macro to add documentation to your wiki\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"title\": \"$:/plugins/DesignWriteStudio/showNotes/showNotesMacro\",\n \"tags\": \"showNotes $:/tags/Macro\",\n \"revision\": \"0\",\n \"modifier\": \"steve\",\n \"modified\": \"20180228150602083\",\n \"dox\": \"no\",\n \"bag\": \"default\"\n },\n \"$:/plugins/DesignWriteStudio/showNotes/showNotesStyleSheet\": {\n \"created\": \"20170727202737911\",\n \"creator\": \"steve\",\n \"text\": \".orange-hilite {\\n background-color: orange;\\n}\\n\\n.yellow-hilite {\\n background-color: yellow;\\n}\\n\\n\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"title\": \"$:/plugins/DesignWriteStudio/showNotes/showNotesStyleSheet\",\n \"tags\": \"showNotes $:/tags/Stylesheet\",\n \"revision\": \"0\",\n \"modifier\": \"steve\",\n \"modified\": \"20180228150536399\",\n \"bag\": \"default\"\n },\n \"$:/plugins/DesignWriteStudio/showNotes/TopLeftBar\": {\n \"created\": \"20180228150843748\",\n \"creator\": \"steve\",\n \"text\": \"<$checkbox tiddler=\\\"ShowNotesMacro\\\" field=\\\"dox\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"yes\\\"> show dox?</$checkbox> \\n\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"title\": \"$:/plugins/DesignWriteStudio/showNotes/TopLeftBar\",\n \"tags\": \"showNotes $:/tags/TopLeftBar\",\n \"revision\": \"0\",\n \"modifier\": \"steve\",\n \"modified\": \"20180228151007122\",\n \"bag\": \"default\"\n }\n }\n}",
"version": "0.5.1",
"type": "application/json",
"title": "$:/plugins/designwritestudio/showNotes",
"plugin-type": "DesignWriteStudio",
"name": "showNotes",
"list": "$:/plugins/DesignWriteStudio/showNotes/read.me",
"description": "Supports use of <<show>> macro and a top left menu bar to make comments and documentation visible at the tiddler level",
"author": "Steve Schneider"
},
"$:/plugins/DesignWriteStudio/showNotes/read.me": {
"created": "20180228152134603",
"creator": "steve",
"title": "$:/plugins/DesignWriteStudio/showNotes/read.me",
"modified": "20180228152237430",
"modifier": "steve",
"text": "This plugin supports the use of the <<show>> macro to share notes or comments. Visibility of the notes is controlled by the show dox checkbox in the top left menu.\n\nThis plugin is from the [[DesignWriteStudio|http://designwritestudio.com]] community."
},
"$:/plugins/DesignWriteStudio/showNotes/showNotesMacro": {
"created": "20180228151922069",
"creator": "steve",
"text": "\\define show(text)\n<$list filter=\"[title[ShowNotesMacro]field:dox[yes]]\">\n<span class=\"yellow-hilite\">\n$text$\n</span><br>\n</$list>\n\\end\n\n<$checkbox tiddler=\"ShowNotesMacro\" field=\"dox\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> show dox?</$checkbox><br>''status:'' {{!!dox}}\n\n<<show \"this is what it is about\">>\n\nThis macro requires:\n\n<<list-links \"[tag[ShowNotes]]\">>",
"whats-new": "Use this macro to add documentation to your wiki",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/DesignWriteStudio/showNotes/showNotesMacro",
"tags": "showNotes $:/tags/Macro",
"revision": "0",
"modifier": "steve",
"modified": "20180228151935973",
"dox": "yes",
"bag": "default"
},
"$:/plugins/DesignWriteStudio/showNotes/showNotesStyleSheet": {
"created": "20180228151954351",
"creator": "steve",
"text": ".orange-hilite {\n background-color: orange;\n}\n\n.yellow-hilite {\n background-color: yellow;\n}\n\n",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/DesignWriteStudio/showNotes/showNotesStyleSheet",
"tags": "showNotes $:/tags/Stylesheet",
"revision": "0",
"modifier": "steve",
"modified": "20180228152016214",
"bag": "default"
},
"$:/plugins/DesignWriteStudio/showNotes/TopLeftBar": {
"created": "20180228151818119",
"creator": "steve",
"text": "<$checkbox tiddler=\"ShowNotesMacro\" field=\"dox\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> show dox?</$checkbox> ",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/DesignWriteStudio/showNotes/TopLeftBar",
"tags": "$:/tags/TopLeftBar showNotes",
"revision": "0",
"modifier": "steve",
"modified": "20180228152115140",
"bag": "default"
}
}
}
This plugin supports the use of the ``<<show>>`` macro to share notes or comments. Visibility of the notes is controlled by the show dox checkbox in the top left menu.
This plugin is from the [[DesignWriteStudio|http://designwritestudio.com]] community.
{
"tiddlers": {
"$:/core/macros/tabs": {
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>><<tablink>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n",
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"modifier": "twMat",
"modified": "20170304123501677",
"creator": "twMat",
"created": "20170303214346165"
},
"$:/plugins/TWaddle/TabLinks/macro": {
"created": "20160806203109547",
"creator": "twMat",
"text": "\\define tablink()\n<div class=\"tablink\">\n<$tiddler tiddler=<<currentTab>>>\n<$link to=<<currentTab>> tooltip=\"go to tab\" >\n <span class=\"tablink-btn\">{{$:/core/images/preview-open}}</span>\n</$link>\n<$button message=\"tm-edit-tiddler\" param=<<currentTab>> tooltip=\"edit tab\">\n <span class=\"tablink-btn\">{{$:/core/images/edit-button}}</span>\n</$button>\n</$tiddler>\n</div>\n\\end",
"title": "$:/plugins/TWaddle/TabLinks/macro",
"tags": "$:/tags/Macro",
"modifier": "twMat",
"modified": "20170304132153989"
},
"$:/plugins/TWaddle/TabLinks/Stylesheet": {
"created": "20170304101100313",
"creator": "twMat",
"text": "<pre>\n.tablink {display:none;}\n\n.tc-tab-selected .tablink {\n display:{{$:/plugins/TWaddle/TabLinks/Stylesheet!!display}};\n position:absolute;\n margin:-1.5rem 0 0 -7px;\n font-size:1rem;\n background:white;\n padding:0 5px;\n border:1px solid silver;\n border-radius:2px;\n visibility:hidden;\n opacity:0;\n}\n.tc-tab-selected:hover .tablink {\n visibility:visible;\n opacity:1;\n -webkit-transition:opacity 0.9s;\n -moz-transition:opacity 0.9s;\n -ms-transition:opacity 0.9s; \n -o-transition:opacity 0.9s;\n transition:opacity 0.9s;\n -webkit-transition-timing-function: ease-in; /* Safari and Chrome */\n transition-timing-function: ease-in;\n}\n.tc-tab-buttons .tablink button, .tablink-btn {\n border:0;\n background:transparent;\n padding: 2px 1px;\n margin:0;\n}\n\n.tablink-btn { opacity:.4; }\n\n.tablink-btn:hover { opacity:1; } \n\n.tablink a:hover { text-decoration:none; }\n</pre>",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/TWaddle/TabLinks/Stylesheet",
"tags": "$:/tags/Stylesheet",
"modifier": "twMat",
"modified": "20170304153832912",
"display": "inline-block",
"list-after": "$:/themes/tiddlywiki/vanilla/base"
},
"$:/plugins/TWaddle/TabLinks/Toggle": {
"created": "20170115223014606",
"creator": "twMat",
"text": "<<toggle \"$:/plugins/TWaddle/TabLinks/Stylesheet!!display\" inline-block none>>In tabs, display shortcut links to the content tiddler, //when hovering// on the active tab.\n\n",
"title": "$:/plugins/TWaddle/TabLinks/Toggle",
"tags": "$:/tags/ControlPanel/Settings",
"modifier": "twMat",
"modified": "20170304132100553",
"list-before": "",
"caption": "TabLinks"
}
}
}
<<toggle "$:/plugins/TWaddle/TabLinks/Stylesheet!!display" inline-block none>>In tabs, display shortcut links to the content tiddler, //when hovering// on the active tab.
{
"tiddlers": {
"$:/plugins/ahahn/tinka/docs/Help Tab": {
"title": "$:/plugins/ahahn/tinka/docs/Help Tab",
"type": "text/vnd.tiddlywiki",
"text": "!!Using the Help Tab\n\nWhen working on a plugin, it is often handy to be able to navigate quickly between the plugin tiddlers. That is what the Help Tab is for.\nAfter enabling it in the \"Tinka Plugin Management\" tab for a specific plugin in the Control Panel, it gives you an additional sidebar tab, that contains a list of all the tiddlers that are contained in the plugin in question. Furthermore, it also shows you tiddlers that live in the same \"directory\" which are likely tiddlers that you want to add to the plugin eventually.\n\nIf you have tiddlers whose names aren't prefixed by the plugin path, you can use the Filter search included in the help tab to select those. For example, if the rest of your tiddlers is scattered somewhere in the wiki, but tagged with <span class=\"tc-tag-label\">myPlugin</span>, you could use the filter: `[tag[myPlugin]]` to select them.\n\nAlso included in the Help Tab is a button to quickly add a new tiddler to a plugin without having to type out the whole `$:/plugins.../...` path and an option to disable the Help Tab again. Lastly, the \"Quick Package\" button gives you the option of quickly integrating changes you made to individual tiddlers into the plugin. Note that the \"Quick Package\" Button will only integrate the changes you made to tiddlers already contained in the plugin into the plugin tiddler itself, you can't add new tiddlers to a plugin this way. For those tasks, you will still have to use the control panel menu.\n"
},
"$:/plugins/ahahn/tinka/docs/How to create a new plugin": {
"title": "$:/plugins/ahahn/tinka/docs/How to create a new plugin",
"type": "text/vnd.tiddlywiki",
"text": "!! How to create a new plugin\n\nTo create a completely new plugin, first go to the Control Panel extension Tinka provides and click on the \"Create new Plugin\" button. Next enter the ''plugin type'' of the plugin you want to create or choose a type from the dropdown menu. Usually you will want to use either the value \"''plugin''\" or \"''theme''\", as this covers most cases of plugins.\n\nNext is the ''plugin path'': This is the name of the tiddler where the finished plugin is going to be stored in. TiddlyWiki uses a special naming theme for these, so you will mostly find that the actual tiddlers that contain a plugin are named in this scheme:\n\n`$:/plugins/myOrganisation/pluginName`. \n\nThis ensures that plugins can be not only immideately recognized, but are also separate from other tiddlers in the wiki.\n\nAfter also entering a title for your new plugin or theme, you are basically good to go. These three fields: ''plugin type'', ''plugin path'' and the ''plugin title'' are all the fields that are required for a functioning plugin. In theory, you could now go ahead and press the \"''Package Plugin''\" button, which will give you an empty plugin shell to which you can add tiddlers later.\n\nIn most cases however it is desired to also fill out the rest of the metadata fields. In detail, these are:\n\n* ''Author:'' Name of the plugin author.\n* ''Source:'' Website or URL of the plugin, also the place where updates are found.\n* ''Dependents:'' List of plugins this plugin depends on (usually empty, but e.g. `$:/core`)\n* ''List'': List of tiddlers contained in the plugin, that will serve as readme tiddlers, when inspecting a plugin via the control panel. (e.g. `$:/plugins/ahahn/tinka/readme`)\n* ''Version:'' Version of your plugin in the format: X.X.X\n* ''Core-Version:'' Usually the minimal TiddlyWiki version your plugin requires in order for it to work (e.g //>=5.1.8//)\n\nDepending on the plugin type you chose, you might also come across the following metadata fields:\n\n* ''Description:'' For plugins, this contains the plugin title that is shown in the control panel.\n* ''Name:'' For themes, this contains the theme title that is shown in the control panel.\n\nAfter entering the metadata, all that is left is to select the tiddlers you want to include in the plugin. You can search for these via the default search field, but you can also use a filter to find them (e.g. based on a tag). In most cases it is sufficient to enter the name of the plugin into the default search in order to find the tiddlers that belong to the plugin. Lastly, just click the \"''Package Plugin''\" button and you're done, you have now created your first plugin. A save&refresh will be required for it to be loaded into TiddlyWiki.\n"
},
"$:/plugins/ahahn/tinka/icon": {
"title": "$:/plugins/ahahn/tinka/icon",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!-- Created with Inkscape (http://www.inkscape.org/) -->\n\n<svg\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:cc=\"http://creativecommons.org/ns#\"\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n width=\"28\"\n height=\"28\"\n id=\"svg2\"\n version=\"1.1\"\n inkscape:version=\"0.48.4 r9939\"\n sodipodi:docname=\"tinka_logo.svg\">\n <defs\n id=\"defs4\" />\n <sodipodi:namedview\n id=\"base\"\n pagecolor=\"#ffffff\"\n bordercolor=\"#666666\"\n borderopacity=\"1.0\"\n inkscape:pageopacity=\"0.0\"\n inkscape:pageshadow=\"2\"\n inkscape:zoom=\"22.627417\"\n inkscape:cx=\"12.192879\"\n inkscape:cy=\"16.062665\"\n inkscape:document-units=\"px\"\n inkscape:current-layer=\"layer1\"\n showgrid=\"false\"\n inkscape:window-width=\"1920\"\n inkscape:window-height=\"1137\"\n inkscape:window-x=\"-8\"\n inkscape:window-y=\"-8\"\n inkscape:window-maximized=\"1\" />\n <metadata\n id=\"metadata7\">\n <rdf:RDF>\n <cc:Work\n rdf:about=\"\">\n <dc:format>image/svg+xml</dc:format>\n <dc:type\n rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n <dc:title></dc:title>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <g\n inkscape:label=\"Ebene 1\"\n inkscape:groupmode=\"layer\"\n id=\"layer1\"\n transform=\"translate(0,-1024.3622)\">\n <g\n id=\"g2987\"\n transform=\"matrix(0.21875,0,0,0.21875,-0.03334395,1024.3224)\"\n style=\"fill-rule:evenodd\">\n <path\n id=\"path2989\"\n d=\"m 40.397288,76.445699 0,18.894708 14.119729,0 0,0 c -4.64e-4,-0.0019 -9.28e-4,-0.0038 -0.0014,-0.0057 0.09369,0.0038 0.187859,0.0057 0.282472,0.0057 3.817607,0 6.912389,-3.094782 6.912389,-6.912389 0,-1.808236 -0.694317,-3.454305 -1.830894,-4.686151 l 0,0 c 0.0154,-0.0077 0.03082,-0.01536 0.04626,-0.02299 -1.041794,-1.210214 -1.671559,-2.785252 -1.671559,-4.50738 0,-3.817607 3.094781,-6.912389 6.912388,-6.912389 3.817607,0 6.912389,3.094782 6.912389,6.912389 0,1.983922 -0.835789,3.772635 -2.174474,5.033245 l 0,0 c 0.02875,0.01818 0.05739,0.0365 0.08594,0.05496 l 0,0 c -0.859106,1.151989 -1.367662,2.580762 -1.367662,4.128315 0,3.430479 2.498947,6.277297 5.775777,6.81939 -0.0073,0.03105 -0.01478,0.06205 -0.02239,0.093 l 21.320134,0 0,-19.772549 0,0 c -0.04975,0.013 -0.09964,0.02563 -0.149675,0.0379 0.0038,-0.09369 0.0057,-0.187859 0.0057,-0.282472 0,-3.817607 -3.094782,-6.912389 -6.912389,-6.912389 -1.808236,0 -3.454305,0.694317 -4.686152,1.830894 l 0,0 c -0.0077,-0.0154 -0.01536,-0.03082 -0.02299,-0.04626 -1.210214,1.041794 -2.785253,1.671559 -4.507381,1.671559 -3.817607,0 -6.912388,-3.094781 -6.912388,-6.912388 0,-3.817607 3.094781,-6.912389 6.912388,-6.912389 1.983923,0 3.772636,0.835789 5.033245,2.174474 l 0,0 c 0.01818,-0.02875 0.0365,-0.05739 0.05496,-0.08594 l 0,0 c 1.151989,0.859106 2.580762,1.367662 4.128315,1.367662 3.430479,0 6.277297,-2.498947 6.81939,-5.775777 0.07936,0.01871 0.158369,0.03834 0.237007,0.05889 l 0,-15.740322 -21.320134,0 0,0 c 0.0076,-0.03094 0.01507,-0.06194 0.02239,-0.093 l 0,0 c -3.27683,-0.542092 -5.775777,-3.388911 -5.775777,-6.81939 0,-1.547552 0.508556,-2.976326 1.367662,-4.128315 -0.02855,-0.01846 -0.0572,-0.03678 -0.08594,-0.05496 1.338685,-1.260609 2.174474,-3.049323 2.174474,-5.033245 C 72.07907,20.094782 68.984288,17 65.166681,17 c -3.817607,0 -6.912388,3.094782 -6.912388,6.912389 0,1.722128 0.629765,3.297167 1.671559,4.50738 l 0,0 c -0.01544,0.0076 -0.03086,0.01529 -0.04626,0.02299 1.136577,1.231846 1.830894,2.877915 1.830894,4.686151 0,3.817607 -3.094782,6.912389 -6.912389,6.912389 -0.09461,0 -0.188783,-0.0019 -0.282472,-0.0057 l 0,0 c 4.63e-4,0.0019 9.27e-4,0.0038 0.0014,0.0057 l -14.119729,0 0,12.846368 0,0 c 0.0944,0.455349 0.144008,0.927098 0.144008,1.410434 0,3.817607 -3.094782,6.912389 -6.912389,6.912389 -1.547552,0 -2.976326,-0.508556 -4.128315,-1.367663 -0.01846,0.02855 -0.03678,0.0572 -0.05496,0.08594 -1.260609,-1.338685 -3.049323,-2.174474 -5.033245,-2.174474 -3.817607,0 -6.912389,3.094781 -6.912389,6.912388 0,3.817607 3.094782,6.912389 6.912389,6.912389 1.722128,0 3.297167,-0.629765 4.50738,-1.671559 l 0,0 c 0.0076,0.01544 0.01529,0.03086 0.02299,0.04626 1.231846,-1.136577 2.877915,-1.830894 4.686151,-1.830894 3.817607,0 6.912389,3.094782 6.912389,6.912389 0,0.483335 -0.04961,0.955085 -0.144008,1.410434 z M 64,0 l 54.5596,32 0,64 L 64,128 9.4403996,96 l 0,-64 L 64,0 z\"\n inkscape:connector-curvature=\"0\" />\n </g>\n <path\n sodipodi:type=\"arc\"\n style=\"fill:#630fb2;fill-opacity:1;fill-rule:nonzero;stroke:none\"\n id=\"path2999\"\n sodipodi:cx=\"456.42856\"\n sodipodi:cy=\"165.93361\"\n sodipodi:rx=\"162.14285\"\n sodipodi:ry=\"162.14285\"\n d=\"m 618.57141,165.93361 a 162.14285,162.14285 0 1 1 -0.002,-0.80734\"\n sodipodi:start=\"0\"\n sodipodi:end=\"6.2782061\"\n sodipodi:open=\"true\"\n transform=\"matrix(0.06593776,0,0,0.06593776,-16.215024,1027.2261)\" />\n <path\n style=\"fill:#3cff80;fill-opacity:1;fill-rule:nonzero;stroke:none\"\n d=\"m 14.745406,1034.4667 -1.99638,3.2989 0,0.1196 0,7.1336 0,3.4185 1.99638,-3.299 0,-0.1195 0,-7.1336 0,-3.4185 z\"\n id=\"rect3769\"\n inkscape:connector-curvature=\"0\" />\n <path\n style=\"fill:#ffa600;fill-opacity:1;fill-rule:nonzero;stroke:none\"\n d=\"m 7.3063061,1034.2471 3.2989499,-3.1032 0.11951,0 7.13365,0 3.41846,0 -3.29895,3.1032 -0.11951,0 -7.13365,0 -3.4184599,0 z\"\n id=\"rect3769-0\"\n inkscape:connector-curvature=\"0\" />\n </g>\n</svg>\n"
},
"$:/plugins/ahahn/tinka/tinka-backupPlugin.js": {
"text": "/*\\\r\ntitle: $:/plugins/ahahn/tinka/tinka-backupPlugin.js\r\ntype: application/javascript\r\nmodule-type: widget\r\n\r\nTinka's backup action widget to backup a plugin.\r\n \r\nBacks up the specified plugin tiddler and modifies the \r\n'plugin-type' and 'title' field accordingly.\r\n\r\n\\*/\r\n(function(){\r\n\r\n/*jslint node: true, browser: true */\r\n/*global $tw: false */\r\n\"use strict\";\r\n\r\nvar CommonAction = require(\"$:/plugins/ahahn/tinka/tinkaCommonAction.js\").tinkaCommonAction;\r\n\r\nvar BackupPluginWidget = function(parseTreeNode,options) {\r\n\tthis.initialise(parseTreeNode,options);\r\n this.setup(false,false,{\r\n \"$plugin\": \"\",\r\n \"$restore\": \"no\"\r\n },false);\r\n};\r\n\r\n/*\r\nInherit from the base widget class\r\n*/\r\nBackupPluginWidget.prototype = new CommonAction();\r\n\r\n/*\r\nSmall string table\r\n*/\r\nBackupPluginWidget.prototype.CONFIRM_OVERRIDE = \"You are about to restore a backup, but another version of this plugin is already active. Do you want to backup the current version (if not already existing) and restore this backup anyway ?\"; \r\n\r\n/*\r\nInvoke the action associated with this widget\r\n*/\r\nBackupPluginWidget.prototype.invokeAction = function(triggeringWidget,event) {\r\n this.actionPlugin = this.param[\"$plugin\"];\r\n this.actionRestore = this.param[\"$restore\"];\r\n\r\n\tif(this.actionPlugin) {\r\n \tif(this.actionRestore == \"yes\") {\r\n \tvar backupTiddler = this.wiki.getTiddler(this.actionPlugin);\r\n \tvar operationConfirmed = true;\r\n \tif(backupTiddler instanceof $tw.Tiddler) { \r\n \t\t\tif(this.checkIfExists(backupTiddler.fields[\"original-title\"])) {\r\n \toperationConfirmed = confirm(this.CONFIRM_OVERRIDE);\r\n \tif(operationConfirmed) {\r\n // after backing up, delete current $original-title Tiddler\r\n this.backupPlugin(backupTiddler.fields[\"original-title\"]);\r\n this.wiki.deleteTiddler(backupTiddler.fields[\"original-title\"]); \t\r\n }\r\n }\r\n \r\n \tif(operationConfirmed) {\r\n var pluginType = this.determinePluginType(backupTiddler.fields[\"plugin-type\"]);\r\n this.wiki.addTiddler(new $tw.Tiddler(backupTiddler,{\r\n \"title\": backupTiddler.fields[\"original-title\"],\r\n \"original-title\": undefined,\r\n \"plugin-type\": pluginType\r\n }));\r\n \t}\r\n }\r\n }\r\n \telse {\r\n \t\tthis.backupPlugin(this.actionPlugin);\r\n \t}\r\n }\r\n \treturn true; // Action was invoked\r\n};\r\n\r\nBackupPluginWidget.prototype.determinePluginType = function(name) {\r\n\tvar reg = /(.*)-backup/;\r\n \tvar matches = name.match(reg);\r\n \t\r\n \tif(matches != null) {\r\n \t\treturn matches[1]; \r\n }\r\n \r\n \treturn \"plugin\";\r\n}\r\n\r\n\r\nBackupPluginWidget.prototype.backupPlugin = function(plugin) {\r\n\tvar pluginTiddler = this.wiki.getTiddler(plugin);\r\n var didBackup = false;\r\n \tif(pluginTiddler instanceof $tw.Tiddler) {\r\n var backupTitle = this.getBackupTitle(pluginTiddler.fields.title,pluginTiddler.fields.version);\r\n didBackup = true;\r\n \r\n \t//Don't make a backup if a backup already exists\r\n \tif(!this.checkIfExists(backupTitle)) {\r\n var backupTiddler = new $tw.Tiddler(pluginTiddler,{\r\n \"title\": backupTitle,\r\n \"original-title\": pluginTiddler.fields.title,\r\n \"plugin-type\": \"\" + pluginTiddler.fields[\"plugin-type\"] + \"-backup\"\r\n });\r\n\r\n this.wiki.addTiddler(backupTiddler); \r\n \t}\r\n }\r\n \treturn didBackup;\r\n}\r\n\r\nBackupPluginWidget.prototype.getBackupTitle = function(title,version) {\r\n \treturn \"\" + title + \"-\" + version + \"-backup\";\r\n};\r\n \r\nBackupPluginWidget.prototype.checkIfExists = function(tiddler) {\r\n\treturn this.wiki.getTiddler(tiddler) != undefined;\r\n}\r\n\r\nexports[\"tinka-backupPlugin\"] = BackupPluginWidget;\r\n\r\n})();\r\n",
"title": "$:/plugins/ahahn/tinka/tinka-backupPlugin.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ahahn/tinka/tinka-check.js": {
"text": "/*\\\ntitle: $:/plugins/ahahn/tinka/tinka-check.js\ntype: application/javascript\nmodule-type: widget\n\nChecks param \"text\" for match with \"pattern\".\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TinkaCommonActionWidget = require(\"$:/plugins/ahahn/tinka/tinkaCommonAction.js\").tinkaCommonAction;\n\nvar CheckAction = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.setup(false,true,[\"text\", \"pattern\"],true);\n};\n\nCheckAction.prototype = new TinkaCommonActionWidget();\n/*\nInvoke the action associated with this widget\n*/\nCheckAction.prototype.invokeAction = function(triggeringWidget,event) {\n\t//important: recompute Attributes\n\tthis.processAttributes();\n\tvar regexp = new RegExp(this.param[\"pattern\"]);\n\t\n\tif(regexp.test(this.param[\"text\"])) {\n\t\tvar ev = {};\n\t\tev.verb = \"pass\";\n\t\tev.data = event;\n\t\tthis.invokeActions(triggeringWidget,ev); \n\t}\n\telse {\n\t\tvar ev = {};\n\t\tev.verb = \"fail\";\n\t\tev.data = event;\n\t\tthis.invokeActions(triggeringWidget,ev);\n\t}\n\t\n\treturn true; // Action was invoked\n};\n\nexports[\"tinka-check\"] = CheckAction;\n\n})();\n",
"title": "$:/plugins/ahahn/tinka/tinka-check.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ahahn/tinka/tinka-filter.js": {
"text": "/*\\\ntitle: $:/plugins/ahahn/tinka/tinka-filter.js\ntype: application/javascript\nmodule-type: widget\n\nWidgets to filters actions according to their verb.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TinkaCommonActionWidget = require(\"$:/plugins/ahahn/tinka/tinkaCommonAction.js\").tinkaCommonAction;\n\nvar FilterAction = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.setup(false, true, [\"verb\"], true);\n};\n\nFilterAction.prototype = new TinkaCommonActionWidget();\n/*\nInvoke the action associated with this widget\n*/\nFilterAction.prototype.invokeAction = function(triggeringWidget,event) {\n\tif (event.verb === this.param[\"verb\"]) {\n\t\tthis.invokeActions(triggeringWidget, event);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"tinka-filter\"] = FilterAction;\n\n})();\n",
"title": "$:/plugins/ahahn/tinka/tinka-filter.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ahahn/tinka/tinka-repackagePlugin.js": {
"text": "/*\\\r\ntitle: $:/plugins/ahahn/tinka/tinka-repackagePlugin.js\r\ntype: application/javascript\r\nmodule-type: widget\r\n\r\nrepackagePlugin action widget\r\n\r\n<$repackagePlugin $plugin=<<target>> $repackage=\"yes\" $diff=<<qualified-modify-diff>> />\r\n\r\n\\*/\r\n(function(){\r\n\r\n/*jslint node: true, browser: true */\r\n/*global $tw: false */\r\n\"use strict\";\r\n\r\nvar CommonAction = require(\"$:/plugins/ahahn/tinka/tinkaCommonAction.js\").tinkaCommonAction;\r\n\r\n \r\nvar repackagePluginWidget = function(parseTreeNode,options) {\r\n\tthis.initialise(parseTreeNode,options);\r\n this.setup(false,false,[\"$plugin\",\"$create\",\"$diff\"],false);\r\n};\r\n\r\n/*\r\nInherit from the base widget class\r\n*/\r\nrepackagePluginWidget.prototype = new CommonAction();\r\n\r\n/*\r\nInvoke the action associated with this widget\r\n*/\r\nrepackagePluginWidget.prototype.invokeAction = function(triggeringWidget,event) {\r\n \tvar diff = {};\r\n \tvar title = \"\";\r\n\tthis.actionPlugin = this.param[\"$plugin\"];\r\n\tthis.actionCreate = this.param[\"$create\"];\r\n \tthis.actionDiff = this.param[\"$diff\"];\r\n\r\n \tif(this.actionPlugin) {\r\n title = this.actionPlugin;\r\n if(this.actionDiff) {\r\n \tvar tid = this.wiki.getTiddler(this.actionDiff);\r\n diff = tid || {};\r\n }\r\n \r\n if(this.actionCreate == \"yes\") {\r\n //create new plugin Tiddler with the data from the diff tiddler\r\n var pluginTid = {};\r\n \r\n title = diff.fields[\"create-title\"] || this.actionPlugin;\r\n pluginTid.title = title;\r\n pluginTid[\"text\"] =\t\"{\\\"tiddlers\\\": {}}\";\r\n pluginTid[\"type\"] = \"application/json\";\r\n pluginTid[\"author\"] = diff.fields[\"create-author\"];\r\n pluginTid[\"description\"] = diff.fields[\"create-description\"];\r\n\t\tpluginTid[\"name\"] = diff.fields[\"create-name\"];\r\n pluginTid[\"list\"] = diff.fields[\"create-list\"];\r\n pluginTid[\"plugin-type\"] = diff.fields[\"create-plugin-type\"];\r\n pluginTid[\"dependents\"] = diff.fields[\"create-dependents\"];\r\n pluginTid[\"version\"] = diff.fields[\"create-version\"];\r\n pluginTid[\"core-version\"] = diff.fields[\"create-core-version\"];\r\n this.wiki.addTiddler(new $tw.Tiddler(pluginTid));\r\n }\r\n \r\n //execute repackaging\r\n $tw.utils.repackPlugin(title,diff.fields.addTiddlers,diff.fields.removeTiddlers);\r\n \t}\r\n};\r\n\r\nexports[\"tinka-repackagePlugin\"] = repackagePluginWidget;\r\n\r\n})();\r\n",
"title": "$:/plugins/ahahn/tinka/tinka-repackagePlugin.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ahahn/tinka/tinka-saveTaglistToField.js": {
"text": "/*\\\r\ntitle: $:/plugins/ahahn/tinka/tinka-saveTaglistToField.js\r\ntype: application/javascript\r\nmodule-type: widget\r\n\r\nSaves a tiddlers list of tags to a csv field.\r\n\r\n\\*/\r\n(function(){\r\n\r\n/*jslint node: true, browser: true */\r\n/*global $tw: false */\r\n\"use strict\";\r\n\r\nvar CommonAction = require(\"$:/plugins/ahahn/tinka/tinkaCommonAction.js\").tinkaCommonAction;\r\n\r\nvar SaveTaglistToFieldWidget = function(parseTreeNode,options) {\r\n\tthis.initialise(parseTreeNode,options);\r\n this.setup(false,false,[\"$target\",\"$tiddler\",\"$field\"],false);\r\n};\r\n\r\n/*\r\nInherit from the base widget class\r\n*/\r\nSaveTaglistToFieldWidget.prototype = new CommonAction();\r\n\r\n/*\r\nInvoke the action associated with this widget\r\n*/\r\nSaveTaglistToFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\r\n\tvar taglist = [];\r\n \tvar field = \"text\";\r\n \r\n if(this.param[\"$target\"]) {\r\n \tvar targetTags = this.wiki.getTiddler(this.param[\"$target\"]);\r\n \t\r\n \tif(targetTags) {\r\n \t\ttaglist = targetTags.fields.tags || [];\r\n \t}\r\n }\r\n \r\n \tif(this.param[\"$field\"]) {\r\n \t\tfield = this.param[\"$field\"];\r\n \t}\r\n \r\n \tif(this.param[\"$tiddler\"]) {\r\n \t\t//save taglist in field on tiddler\r\n \tthis.wiki.setTextReference(this.param[\"$tiddler\"]+ \"!!\" +field,taglist,this.getVariable(\"currentTiddler\")); \r\n \t}\r\n\r\n return true; // Action was invoked\r\n};\r\n\r\nexports[\"tinka-saveTaglistToField\"] = SaveTaglistToFieldWidget;\r\n\r\n})();\r\n",
"title": "$:/plugins/ahahn/tinka/tinka-saveTaglistToField.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ahahn/tinka/tinkaCommonAction.js": {
"text": "/*\\\ntitle: $:/plugins/ahahn/tinka/tinkaCommonAction.js\ntype: application/javascript\nmodule-type: widget\n\nTinka common action widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CommonActionWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCommonActionWidget.prototype = new Widget();\n\n/*\nSetup an action widget with these properties\n*/\nCommonActionWidget.prototype.setup = function(allowPropagation,doRenderChildren,preparedParams,refreshOnAttributeChange) {\n\tthis.doRenderChildren = doRenderChildren;\n\tthis.preparedParams = preparedParams;\n\tthis.allowPropagation = allowPropagation;\n\tthis.refreshOnAttributeChange = refreshOnAttributeChange;\n};\n \n \n/*\nRender this widget into the DOM\n*/\nCommonActionWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n \tif(this.doRenderChildren) {\n\t\tthis.renderChildren(parent,nextSibling);\n \t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCommonActionWidget.prototype.execute = function() {\n this.processAttributes();\n\t// Construct the child widgets\n\tif(this.doRenderChildren) {\n\t\tthis.makeChildWidgets();\n\t}\n};\n\t\n/*\nCompute the values of our attributes\n*/\nCommonActionWidget.prototype.processAttributes = function() {\n\tvar self = this;\n\tthis.computeAttributes();\n\tthis.param = {};\n\n if(this.isObject(this.preparedParams) && !this.isArray(this.preparedParams)) {\n $tw.utils.each(this.preparedParams,function(def, name) {\n self.param[name] = self.getAttribute(name,def);\n });\n }\n else {\n $tw.utils.each(this.preparedParams,function(name) {\n self.param[name] = self.getAttribute(name);\n });\n }\n};\n\nCommonActionWidget.prototype.allowActionPropagation = function() {\n\treturn this.allowPropagation;\t\n};\n\nCommonActionWidget.prototype.isEmptyObject = function(obj) {\n\tfor(var prop in obj) {\n if(obj.hasOwnProperty(prop))\n return false;\n }\n\n return true;\n};\n\nCommonActionWidget.prototype.isObject = function(obj) {\n return ((obj !== null) && (typeof obj === 'object'));\n};\n\nCommonActionWidget.prototype.isArray = function(obj) {\n return (Object.prototype.toString.call(obj) === '[object Array]');\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCommonActionWidget.prototype.refresh = function(changedTiddlers) {\n \tvar changedAttributes = this.computeAttributes();\n\t\t\n\tif(!this.isEmptyObject(changedAttributes) && this.refreshOnAttributeChange) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n }\n\telse if (!this.isEmptyObject(changedAttributes)) {\n\t\tthis.processAttributes();\n\t}\n\t\n\treturn this.refreshChildren(changedTiddlers);\t\t\n};\n\nexports.tinkaCommonAction = CommonActionWidget;\n\n})();\n",
"title": "$:/plugins/ahahn/tinka/tinkaCommonAction.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ahahn/tinka/license": {
"title": "$:/plugins/ahahn/tinka/license",
"type": "text/vnd.tiddlywiki",
"caption": "license",
"text": "Tinka Plugin for Tiddlywiki5\n\nCopyright (c) 2017 Andreas Hahn <tinka.plugin@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n"
},
"$:/plugins/ahahn/tinka/emptyDiff": {
"title": "$:/plugins/ahahn/tinka/emptyDiff",
"type": "text/vnd.tiddlywiki",
"text": ""
},
"$:/plugins/ahahn/tinka/tinka-export": {
"tags": "$:/tags/Macro",
"title": "$:/plugins/ahahn/tinka/tinka-export",
"type": "text/vnd.tiddlywiki",
"text": "\\define tinkaExportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define tinkaExportQualifiedState()\n$:/state/popup/tinkaExport-$(currentTiddler)$\n\\end\n\n\\define tinkaExportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\">\n<$button popup=<<tinkaExportQualifiedState>> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<tinkaExportQualifiedState>> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<tinkaExportQualifiedState>>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
},
"$:/plugins/ahahn/tinka/readme": {
"title": "$:/plugins/ahahn/tinka/readme",
"type": "text/vnd.tiddlywiki",
"text": "This is a Control Panel extension that aims to simplify the plugin creation and editing process. After installing, you will find a new tab in your control panel that makes creating and modifying plugins a little bit easier.\n\n<a target=\"blank\" href=\"http://tinkaplugin.github.io\">Project Homepage on tinkaplugin.github.io</a>\n\n!! Version History\n\n!!! 2017-05-13 Release of version 0.4.0\n\nThis release fixes the following bugs:\n\n''Changelog''\n\n* Themes will now get the correct prefix `$:/themes/` when packaging\n* Fixed search results not linking properly\n* Added description field when creating a new theme\n\n\n!!! 2017-03-01 Release of version 0.3.0\n\nAfter more than a year, Tinka is now on <a target=\"blank\" href=\"http://tinkaplugin.github.io\">github</a> and also released under the [[MIT license|$:/plugins/ahahn/tinka/license]].\n\n''Changelog''\n\n* Packaging success now produces a modal that actively reminds the user to refresh the wiki.\n* The search tab state is now kept in a temporary system tiddler.\n* Added warning when repackaging themes that are not active.\n* The 'Help Tab' functionality is now also available for plugins that do not follow the `$:/plugins/...` naming convention. In particular this applies to themes and core plugins.\n* Fixed wrong headings for some modal dialogs.\n* Older action widgets remodeled to use the (new) CommonAction widget as a base.\n* Fixed error check that prevented users to enter a minimal core version dependency when creating a new plugin.\n\n!!! 2015-09-20 Release of version 0.2.0-beta\n\n''Changelog''\n\n* Added Help-Tab capabilities to quickly navigate between plugin tiddlers.\n* Moved Create-Plugin wizard to its own tab.\n* Redid Create-Plugin UI to be easier and more accessible.\n* Backups can now also be downloaded/exported.\n* Added more documentation.\n\n!!! 2015-05-18 Release of version 0.1.0\n\n''Changelog''\n\n* The metadata section now include edit fields for the `name` and `source` fields.\n* The //default search// box now only searches for title matches.\n* Backups can now be exported/downloaded.\n* <div>Backups can now be restored and made active again. If another version of the plugin is already active, the option is given to back it up,before restoring the backup.\n\n\n''Warning: For this mechanism to work, there has to be an 'original-title' field present in the backup tiddler. This is automatically added by Tinka, however earlier versions of Tinka did not add this field. If you want to restore a backup from an earlier version of Tinka, you will have to add the 'original-title' field manually and populate it with the former title of the plugin tiddler, in order for the restore function to work.''\n</div>\n\n!!! 2015-04-30 Release of version 0.0.2\n\n''Changelog''\n\n* The list of plugin tiddlers is now hidden by default, since some lists can get very long.\n* Added a different search option (default/filter)\n* Improved Documentation slightly\n* Added a backup option, so a plugin can be backed up before repackaging.\n\n \n!!! 2015-04-29 Release of version 0.0.1\n"
},
"$:/plugins/ahahn/tinka/style": {
"list-after": "$:/themes/tiddlywiki/vanilla/base",
"tags": "$:/tags/Stylesheet",
"title": "$:/plugins/ahahn/tinka/style",
"type": "text/vnd.tiddlywiki",
"text": "\n/* ==button styles== */\n\nbutton.tinka-blue, button.tinka-orange {\n font-weight: normal;\n font-size: 1em;\n color: #fff;\n fill: #fff;\n}\n\n.tinka-blue {\n background-color: #5E9FCA;\n}\n\n.tinka-orange {\n background-color: #FF8C19;\n}\n\n.tinka-archive-buttons {\n padding-left: 30px;\n display: inline-block;\n}\n\nbutton.tinka-sidebar-button, button.tinka-invisible {\n color: #acacac;\n fill: #acacac;\n}\n\n.tinka-enlarge {\n font-size: 1.5em;\n padding: 1.5em;\n}\n\n.tinka-enlarge svg {\n font-size: 3em;\n}\n\n.tinka-orb {\n border-radius: 10pt;\n}\n\n.tc-dirty .tinka-button-refresh {\n display: none;\n}\n\n/* ==container styles== */\n\n.tinka-centered-container {\n text-align: center;\n padding: 1em;\n}\n\n.tinka-note {\n display:block;\n padding-left: 5px;\n background-color: #FFF9B0;\n color: #7F7A32;\n border: 1px solid #7F7A32;\n border-radius: 5px;\n font-style: italic;\n font-size: 0.8em;\n}\n\n.tinka-note-red {\n display:block;\n padding-left: 5px;\n background-color: #E8DEE0;\n color: #E82C0C;\n border: 1px solid #E82C0C;\n border-radius: 5px;\n font-style: italic;\n font-size: 0.8em;\n}\n\n/* ==text formatting== */\n\n.tinka-list-item {\n\tlist-style: none;\n}\n\n.tinka-saving {\n display: none;\n}\n\n.tc-dirty .tinka-saving {\n display: inline;\n}\n\n.tinka-success {\n color: #26CC50;\n}\n\n.tinka-success .tc-image-done-button, .tinka-success .tc-image-save-button {\n fill: #26CC50;\n}\n\n.tinka-error {\n color: #F00;\n}\n\n.tinka-error .tc-image-close-button {\n fill: #F00;\n}\n\ntable.tinka-meta-table tr td {\n padding: 5px;\n}\n\n/* ==forms style== */\n.tc-control-panel input.tinka-inline-edit {\n width: 30%;\n min-width: 30pt;\n}\n\n.tc-control-panel input.tinka-full-edit, input.tinka-full-edit {\n width: 100%;\n}\n"
},
"$:/plugins/ahahn/tinka/backupList": {
"caption": "Archive",
"list-after": "$:/plugins/ahahn/tinka/pluginManagement",
"tags": "$:/tags/tinka/ControlPanel",
"title": "$:/plugins/ahahn/tinka/backupList",
"type": "text/vnd.tiddlywiki",
"text": "\\define plugin-export()\n[title[$(currentTiddler)$]]\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage)\n<div class=\"tc-plugin-info-chunk\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude></div>\n<div class=\"tc-plugin-info-chunk\">\n<h1>''<$view field=\"description\"><$view field=\"title\"/></$view>'' $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2></div>\n<div class=\"tinka-archive-buttons\">\n<$macrocall $name=\"tinkaExportButton\" exportFilter=<<plugin-export>> />\n<$button class=\"tc-btn-big-green tinka-blue\">\n<$tinka-backupPlugin $plugin=<<currentTiddler>> $restore=\"yes\"/>\n<$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/ahahn/tinka/restoreSuccess\" />Restore</$button>\n</div>\n\\end\n\n\\define plugin-table(type)\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">>>\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\">>\n</$link>\n</$list>\n\\end\n\n!!Backups\n\n<<plugin-table plugin-backup>>\n<<plugin-table theme-backup>>\n<<plugin-table language-backup>>\n"
},
"$:/plugins/ahahn/tinka/controlPanelExtension": {
"caption": "Tinka Plugin Management",
"tags": "$:/tags/ControlPanel",
"title": "$:/plugins/ahahn/tinka/controlPanelExtension",
"type": "text/vnd.tiddlywiki",
"text": "<<tabs \"[[$:/plugins/ahahn/tinka/pluginManagement]] [[$:/plugins/ahahn/tinka/createDialog]] [[$:/plugins/ahahn/tinka/backupList]]\" \"$:/plugins/ahahn/tinka/pluginManagement\" \"$:/temp/tinka/cpTabs\">>\n"
},
"$:/plugins/ahahn/tinka/createDialog": {
"caption": "Create a new Plugin",
"tags": "$:/tags/tinka/ControlPanel",
"title": "$:/plugins/ahahn/tinka/createDialog",
"type": "text/vnd.tiddlywiki",
"text": "\\define plugin-tiddler-selection()\n[[$(target)$]plugintiddlers[]]\n\\end\n\n\\define qualified-modify-add()\n$(qualifiedTiddler)$-$(target)$-add\n\\end\n\n\\define qualified-modify-diff()\n$(qualifiedTiddler)$-$(target)$-diff\n\\end\n\n\\define diff-plugin-title()\n$(qualifiedTiddler)$-$(target)$-diff!!create-title\n\\end\n\n\\define added-filter()\n[[$(addedTiddlers)$]tags[]]\n\\end\n\n\\define concatPluginTitle(prefix, sep)\n$prefix$$(createTitleOrg)$$sep$$(createTitleName)$\n\\end\n\n\\define tiddlerReference(ref)\n$(currentTiddler)$$ref$\n\\end\n\n\\define varsReference(ref)\n$(TinkaVars)$$ref$\n\\end\n\n\n!! Create New Plugin\n\n<span class=\"tinka-note\">Usage: Enter the necessary metadata for your plugin and use the Filter selection below to pick the tiddlers that should be added to the plugin. After selecting the tiddlers, press 'Package Plugin'. Refer to the [[Documentation|$:/plugins/ahahn/tinka/usage]] for further help.</span>\n\n<$set name=\"target\" value=\"skeleton\">\n<$set name=\"qualifiedTiddler\" value=<<qualify \"$:/temp/tinka/modify\">> >\n\n!!! Step 1: Enter Metadata\n\n\n<$set name=\"currentTiddler\" value=<<qualified-modify-diff>>>\n\t<$transclude mode=\"block\" tiddler=\"$:/plugins/ahahn/tinka/createMetadata\"/>\n</$set>\n\n!!! Step 2: Add Tiddlers\n\nUse the search box below to select the tiddlers you want to add to the plugin.\n\n{{$:/plugins/ahahn/tinka/searchDisplay}}\n\n\n''Added Tiddlers''\n\n<$set name=\"addedTiddlers\" value=<<qualified-modify-add>> >\n<ul>\n<$list filter=<<added-filter>> emptyMessage=\"<i>No tiddlers added.</i>\">\n\t\t<li class=\"tinka-list-item\">\n <$checkbox tiddler=<<qualified-modify-add>> tag={{!!title}} />\n <$link to={{!!title}}>{{!!title}}</$link>\n </li>\n</$list>\n</ul>\n</$set>\n\n\n<$button class=\"tc-btn-big-green tinka-orange\">\n<$set name=\"TinkaVars\" value=\"$:/temp/tinka/CreateVars\">\n<$set name=\"currentTiddler\" value=<<qualified-modify-diff>>>\n\t<$action-deletetiddler $tiddler=<<TinkaVars>> />\n\t<$action-setfield $tiddler=<<TinkaVars>> result=\"false\" />\n\n\t<!-- Check whether a plugin title was given -->\n\t<$tinka-check text={{!!create-title-org}} pattern=\"^[^\\s]+$\">\n\t\t<$tinka-filter verb=\"fail\">\n\t\t\t<$action-setfield $tiddler=<<TinkaVars>> result=\"true\"/>\n\t\t\t<$action-setfield $tiddler=<<TinkaVars>> errorTitle=\"The plugin title is not allowed to be empty or contain whitespaces.\"/>\n\t\t</$tinka-filter>\n\t</$tinka-check>\n\t\t\n\t<$tinka-check text={{!!create-title-name}} pattern=\"^[^\\s]+$\">\n\t\t<$tinka-filter verb=\"fail\">\n\t\t\t<$action-setfield $tiddler=<<TinkaVars>> result=\"true\"/>\n\t\t\t<$action-setfield $tiddler=<<TinkaVars>> errorTitle=\"The plugin path is not allowed to be empty or contain whitespaces.\"/>\n\t\t</$tinka-filter>\n\t</$tinka-check>\n\t\t\n\t<!-- Check whether a plugin type is set-->\n\t<$tinka-check text={{!!create-plugin-type}} pattern=\"^.+$\">\n\t\t<$tinka-filter verb=\"fail\">\n\t\t\t<$action-setfield $tiddler=<<TinkaVars>> result=\"true\"/>\n\t\t\t<$action-setfield $tiddler=<<TinkaVars>> errorType=\"You have to set a plugin type.\"/>\n\t\t</$tinka-filter>\n\t</$tinka-check>\n\t\t\n\t\t<!-- Check whether a name was given, depending on the plugin type-->\n\t\t<$reveal state=<<tiddlerReference \"!!create-plugin-type\">> type=\"match\" text=\"plugin\">\n\t\t\t<$tinka-check text={{!!create-description}} pattern=\"^.+$\">\n\t\t\t\t<$tinka-filter verb=\"fail\">\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> result=\"true\"/>\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> errorPlugin=\"You have to enter a plugin title.\"/>\n\t\t\t\t</$tinka-filter>\n\t\t\t</$tinka-check>\n\t\t</$reveal>\n\t\t<$reveal state=<<tiddlerReference \"!!create-plugin-type\">> type=\"match\" text=\"theme\">\n\t\t\t<$tinka-check text={{!!create-name}} pattern=\"^.+$\">\n\t\t\t\t<$tinka-filter verb=\"fail\">\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> result=\"true\"/>\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> errorTheme=\"You have to enter a theme title.\"/>\n\t\t\t\t</$tinka-filter>\n\t\t\t</$tinka-check>\n\t\t</$reveal>\n\t\t\n\t\t<!--Check Version numbers, if entered-->\n\t\t<$reveal state=<<tiddlerReference \"!!create-version\">> type=\"nomatch\" text=\"\">\n\t\t\t<$tinka-check text={{!!create-version}} pattern=\"^(\\d)+\\.(\\d)+\\.(\\d)+(-\\w+)?$\">\n\t\t\t\t<$tinka-filter verb=\"fail\">\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> result=\"true\"/>\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> errorVersion=\"Version numbers must have the following format: X.X.X (e.g. 1.0.0).\"/>\n\t\t\t\t</$tinka-filter>\n\t\t\t</$tinka-check>\n\t\t</$reveal>\n\t\t\n\t\t<$reveal state=<<tiddlerReference \"!!create-core-version\">> type=\"nomatch\" text=\"\">\n\t\t\t<$tinka-check text={{!!create-core-version}} pattern=\"^(>|>=|<|<=)?(\\d)+\\.(\\d)+\\.(\\d)+(-\\w+)?$\">\n\t\t\t\t<$tinka-filter verb=\"fail\">\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> result=\"true\"/>\n\t\t\t\t\t<$action-setfield $tiddler=<<TinkaVars>> errorCoreVersion=\"The core version number must have the following format: [>|>=|<|<=|]X.X.X-AAAA (e.g. >=5.1.8).\"/>\n\t\t\t\t</$tinka-filter>\n\t\t\t</$tinka-check>\n\t\t</$reveal>\n\n\t<$set name=\"currentTiddler\" value=<<TinkaVars>> >\n\t<$tinka-check text={{!!result}} pattern=\"^false$\">\n\t<$set name=\"currentTiddler\" value=<<qualified-modify-diff>>>\n\t<$tinka-filter verb=\"pass\">\n\t<!--Compute the plugin title (create-title> from the create-title-org and create-title-name fields -->\n\n\t\t<$set name=\"createTitleOrg\" value={{!!create-title-org}}>\n\t\t\t<$set name=\"createTitleName\" value={{!!create-title-name}}>\n <!--If the plugin is a theme, use a different plugin-prefix -->\n <$reveal state=<<tiddlerReference \"!!create-plugin-type\">> type=\"match\" text=\"theme\">\n\t\t\t\t <$action-setfield create-title=<<concatPluginTitle \"$:/themes/\" \"/\">> />\n </$reveal>\n\n <$reveal state=<<tiddlerReference \"!!create-plugin-type\">> type=\"nomatch\" text=\"theme\">\n\t\t\t\t <$action-setfield create-title=<<concatPluginTitle \"$:/plugins/\" \"/\">> />\n </$reveal>\n\t\t\t</$set>\n\t\t</$set>\n\t\n\t\t<$tinka-saveTaglistToField $target=<<qualified-modify-add>> $tiddler=<<qualified-modify-diff>> $field=\"addTiddlers\"/>\n\t\t<$tinka-repackagePlugin $plugin=\"$:/plugins/unknown/newPlugin\" $create=\"yes\" $diff=<<qualified-modify-diff>> />\n\t\t<$action-deletetiddler $tiddler=<<qualified-modify-add>>/>\n\t\t<$action-deletetiddler $tiddler=<<qualified-modify-diff>>/>\n\t\t<$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/ahahn/tinka/packageSuccess\" />\n\t</$tinka-filter>\n\t<$tinka-filter verb=\"fail\">\n\t\t<$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/ahahn/tinka/packageErrors\" errorVars=<<TinkaVars>>/>\n\t</$tinka-filter>\n\t</$set>\n\t</$tinka-check>\n\t</$set>\n</$set>\n</$set>\nPackage plugin</$button>\n\n\n</$set>\n</$set>\n"
},
"$:/plugins/ahahn/tinka/createMetadata/noSpecialPluginType": {
"title": "$:/plugins/ahahn/tinka/createMetadata/noSpecialPluginType",
"type": "text/vnd.tiddlywiki",
"text": "<tr>\n \t<td>Description:</td>\n <td><$edit-text tag=\"input\" type=\"text\" placeholder=\"e.g. Tinka - Plugin Packer\" field=\"create-description\"/></td>\n \n <td>Name:</td>\n <td><$edit-text tag=\"input\" type=\"text\" field=\"create-name\"/></td>\n</tr>\n"
},
"$:/plugins/ahahn/tinka/createMetadata/pluginPluginType": {
"title": "$:/plugins/ahahn/tinka/createMetadata/pluginPluginType",
"type": "text/vnd.tiddlywiki",
"text": "<tr>\n \t<td>''Plugin Title:''</td>\n <td colspan=\"3\"><$edit-text class=\"tinka-full-edit\" tag=\"input\" type=\"text\" placeholder=\"e.g. Tinka - Plugin Packer\" field=\"create-description\"/></td>\n</tr>\n"
},
"$:/plugins/ahahn/tinka/createMetadata/tableEnd": {
"title": "$:/plugins/ahahn/tinka/createMetadata/tableEnd",
"type": "text/vnd.tiddlywiki",
"text": "<tr>\n <td>Version:</td>\n <td><$edit-text tag=\"input\" type=\"text\" field=\"create-version\"/></td>\n \n\t\t<td>Core-Version:</td>\n <td><$edit-text type=\"text\" placeholder=\"e.g. >=5.1.8\" tag=\"input\" field=\"create-core-version\"/></td>\n\t</tr>\n"
},
"$:/plugins/ahahn/tinka/createMetadata/tableHead": {
"title": "$:/plugins/ahahn/tinka/createMetadata/tableHead",
"type": "text/vnd.tiddlywiki",
"text": "\t<tr>\n\t\t<td>''Plugin Path:''</td>\n <td colspan=\"3\">`$:/plugins/`<$edit-text class=\"tinka-inline-edit\" type=\"text\" placeholder=\"e.g. myName\" tag=\"input\" field=\"create-title-org\"/>`/`<$edit-text type=\"text\" class=\"tinka-inline-edit\" placeholder=\"e.g. myPlugin\" tag=\"input\" field=\"create-title-name\" /></td> \n\t</tr>\n \n <tr>\n\t\t<td>Author:</td>\n <td><$edit-text type=\"text\" placeholder=\"e.g. John Doe\" tag=\"input\" field=\"create-author\"/></td>\n\t\t\n\t\t<td>Source:</td>\n <td><$edit-text tag=\"input\" type=\"text\" placeholder=\"e.g. http://twguides.org\" field=\"source\"/></td>\n\t</tr>\n\n\t<tr>\n\t\t<td>Dependents:</td>\n <td><$edit-text tag=\"input\" type=\"text\" field=\"create-dependents\"/></td>\n \n <td>List:</td>\n <td><$edit-text tag=\"input\" type=\"text\" placeholder=\"e.g. readme usage\" field=\"create-list\"/></td>\n \t</tr>\n"
},
"$:/plugins/ahahn/tinka/createMetadata/themePluginType": {
"title": "$:/plugins/ahahn/tinka/createMetadata/themePluginType",
"type": "text/vnd.tiddlywiki",
"text": "<tr>\n <td>''Theme Title:''</td>\n <td colspan=\"3\"><$edit-text class=\"tinka-full-edit\" tag=\"input\" type=\"text\" placeholder=\"e.g. My cool theme\" field=\"create-name\"/></td>\n</tr>\n\n<tr>\n <td>Description:</td>\n <td colspan=\"3\"><$edit-text class=\"tinka-full-edit\" tag=\"input\" type=\"text\" placeholder=\"e.g. My description\" field=\"create-description\"/></td>\n</tr>\n"
},
"$:/plugins/ahahn/tinka/createMetadata": {
"create-plugin-type": "plugin",
"create-title": "",
"created": "20150429174811520",
"modified": "20170225181341996",
"tags": "",
"title": "$:/plugins/ahahn/tinka/createMetadata",
"type": "text/vnd.tiddlywiki",
"text": "''Plugin-Type:'' <$edit-text tag=\"input\" type=\"text\" field=\"create-plugin-type\"/>\n <$button popup=\"$:/temp/tinka/NewPluginPopup\" class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n\t\n\t\t<$reveal state=\"$:/temp/tinka/NewPluginPopup\" type=\"popup\" position=\"below\">\n\t\t<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n\t\t<$linkcatcher to=\"!!create-plugin-type\">\n\t\t\t<$link to=\"plugin\">Plugin</$link>\n\t\t\t<$link to=\"theme\">Theme</$link>\n\t\t</$linkcatcher>\n\t\t</div>\n\t\t</$reveal>\n\n<$reveal state=\"!!create-plugin-type\" type=\"nomatch\" text=\"plugin\" >\n\t<$reveal state=\"!!create-plugin-type\" type=\"nomatch\" text=\"theme\" >\n\t\t<table class=\"tinka-meta-table\">\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/tableHead\" />\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/noSpecialPluginType\" />\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/tableEnd\" />\n\t\t</table>\n\t</$reveal>\n</$reveal>\n\n<$reveal state=\"!!create-plugin-type\" type=\"match\" text=\"plugin\">\n\t\t<table class=\"tinka-meta-table\">\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/tableHead\" />\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/pluginPluginType\" />\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/tableEnd\" />\n\t\t</table>\n</$reveal>\n\n<$reveal state=\"!!create-plugin-type\" type=\"match\" text=\"theme\">\n\t\t<table class=\"tinka-meta-table\">\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/tableHead\" />\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/themePluginType\" />\n\t\t<$transclude tiddler=\"$:/plugins/ahahn/tinka/createMetadata/tableEnd\" />\n\t\t</table>\n</$reveal>\n\n''bold'' = //required field//\n"
},
"$:/plugins/ahahn/tinka/dropdownManage": {
"title": "$:/plugins/ahahn/tinka/dropdownManage",
"type": "text/vnd.tiddlywiki",
"text": "\\define plugin-tiddler-selection()\n[[$(target)$]plugintiddlers[]]\n\\end\n\n\\define qualified-remove-popup()\n$:/state/popup/$(qualifiedTiddler)$-$(target)$-remove-popup\n\\end\n\n\\define qualified-modify-remove()\n$(qualifiedTiddler)$-$(target)$-remove\n\\end\n\n\\define qualified-modify-add()\n$(qualifiedTiddler)$-$(target)$-add\n\\end\n\n\\define qualified-modify-diff()\n$(qualifiedTiddler)$-$(target)$-diff\n\\end\n\n\\define target-type()\n$(target)$!!plugin-type\n\\end\n\n\\define added-filter()\n[[$(addedTiddlers)$]tags[]]\n\\end\n\n\\define pluginSuffixFilter()\n[[$(target)$]prefix[$:/plugins/]removeprefix[$:/plugins/]] [[$(target)$]!prefix[$:/plugins/]]\n\\end\n\n\\define sideTabNameBuilder()\n$:/plugins/ahahn/tinka/temp/$(pluginSuffix)$ - Help Tab\n\\end\n\n\\define helpTabCaption()\n$(pluginSuffix)$ - Help Tab\n\\end\n\n\\define helpTabText()\n<$set name=\"pluginPrefix\" value=\"$(target)$\" >\n<$set name=\"currentTiddler\" value=\"$(sideTabName)$\" >\n\n<$transclude tiddler=\"$:/plugins/ahahn/tinka/pluginSidePanel\" />\n\n</$set>\n</$set>\n\\end\n\n<$set name=\"qualifiedTiddler\" value=<<qualify \"$:/temp/tinka/modify\">> >\n\n<$list filter=<<pluginSuffixFilter>> variable=\"pluginSuffix\">\n<<SidebarTabName>>\n<$set name=\"sideTabName\" value=<<sideTabNameBuilder>> >\n\n<$reveal state=<<sideTabName>> type=\"match\" text=\"\">\n<$button>Enable Help-Tab\n<$action-setfield $tiddler=<<sideTabName>> text=<<helpTabText>> caption=<<helpTabCaption>> tags=\"$:/tags/SideBar\" />\n</$button>\n\n</$reveal>\n\n<$reveal state=<<sideTabName>> type=\"nomatch\" text=\"\">\n<$button>Disable Help-Tab\n<$action-deletetiddler $tiddler=<<sideTabName>> />\n</$button>\n</$reveal>\n</$set>\n</$list>\n\nIf you have edited the shadow tiddlers that belong to the plugin, just repackage without making any changes. That way the packaged plugin will incorporate the changes made to the individual tiddlers. Refer to the [[Documentation|$:/plugins/ahahn/tinka/usage]] for help.\n\nIt is recommended to create a backup before repackaging a plugin.\n\n!!! Edit Metadata\n<span class=\"tinka-note\">Note: Changes will be committed immediately.</span>\n\n<$set name=\"currentTiddler\" value=<<target>>>\n\t<$transclude mode=\"block\" tiddler=\"$:/plugins/ahahn/tinka/editMetadata\"/>\n</$set>\n\n!!! Remove Tiddlers\n<span class=\"tinka-note\">Note: Re-packaging required for changes to take effect.</span>\n\n<$reveal type=\"match\" text=\"\" state=<<qualified-remove-popup>> ><$button set=<<qualified-remove-popup>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} Show plugin tiddlers</$button></$reveal>\n<$reveal type=\"nomatch\" text=\"\" state=<<qualified-remove-popup>> >\n<$button set=<<qualified-remove-popup>> setTo=\"\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} Hide plugin tiddlers</$button>\n<ul>\n\t<$list filter=<<plugin-tiddler-selection>> emptyMessage=\"<i>No tiddlers in plugin.</i>\">\n\t\t<li class=\"tinka-list-item\">\n <$checkbox tiddler=<<qualified-modify-remove>> tag={{!!title}} />\n <$link to={{!!title}}><$text text={{!!title}} /></$link></li>\n\t</$list>\n</ul>\n</$reveal>\n\n!!! Add Tiddlers\n<span class=\"tinka-note\">Note: Re-packaging required for changes to take effect.</span>\n\nUse the search box below to select the tiddlers you want to add to the plugin.\n\n{{$:/plugins/ahahn/tinka/searchDisplay}}\n\n\n''Added Tiddlers''\n\n<$set name=\"addedTiddlers\" value=<<qualified-modify-add>> >\n<ul>\n<$list filter=<<added-filter>> emptyMessage=\"<i>No tiddlers added.</i>\">\n\t\t<li class=\"tinka-list-item\">\n <$checkbox tiddler=<<qualified-modify-add>> tag={{!!title}} />\n <$link to={{!!title}}>{{!!title}}</$link>\n </li>\n</$list>\n</ul>\n</$set>\n\n<$reveal state=<<target-type>> type=\"match\" text=\"theme\">\n<span class=\"tinka-note-red\">Warning: Themes can only be repackaged if the theme is currently active or loaded as a dependant!</span>\n</$reveal>\n\n\n<$button class=\"tc-btn-big-green tinka-orange\">\n<$tinka-saveTaglistToField $target=<<qualified-modify-remove>> $tiddler=<<qualified-modify-diff>> $field=\"removeTiddlers\"/>\n<$tinka-saveTaglistToField $target=<<qualified-modify-add>> $tiddler=<<qualified-modify-diff>> $field=\"addTiddlers\"/>\n<$tinka-repackagePlugin $plugin=<<target>> $create=\"no\" $diff=<<qualified-modify-diff>> />\n<$action-deletetiddler $tiddler=<<qualified-modify-remove>>/>\n<$action-deletetiddler $tiddler=<<qualified-modify-add>>/>\n<$action-deletetiddler $tiddler=<<qualified-modify-diff>>/>\n<$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/ahahn/tinka/packageSuccess\" />Re-package plugin</$button>\n<$button class=\"tc-btn-big-green tinka-blue\">\n<$tinka-backupPlugin $plugin=<<target>> />\n<$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/ahahn/tinka/backupSuccess\" />Create Backup</$button>\n\n</$set>\n"
},
"$:/plugins/ahahn/tinka/editMetadata": {
"title": "$:/plugins/ahahn/tinka/editMetadata",
"type": "text/vnd.tiddlywiki",
"text": "|tinka-meta-table|k\n|Author:|<$edit-text type=\"text\" tag=\"input\" field=\"author\"/>|Description:|<$edit-text tag=\"input\" type=\"text\" field=\"description\"/>|\n|Dependents:|<$edit-text tag=\"input\" type=\"text\" field=\"dependents\"/>|List:|<$edit-text tag=\"input\" type=\"text\" field=\"list\"/>|\n|Plugin-Type:|<$edit-text tag=\"input\" type=\"text\" field=\"plugin-type\"/>|Version:|<$edit-text tag=\"input\" type=\"text\" field=\"version\"/>|\n|Source:|<$edit-text tag=\"input\" type=\"text\" field=\"source\"/>|Name:|<$edit-text tag=\"input\" type=\"text\" field=\"name\"/>|\n|Core-Version:|<$edit-text tag=\"input\" type=\"text\" field=\"core-version\"/>|||\n"
},
"$:/plugins/ahahn/tinka/backupSuccess": {
"caption": "Backup Success",
"subtitle": "Backup Success",
"title": "$:/plugins/ahahn/tinka/backupSuccess",
"type": "text/vnd.tiddlywiki",
"text": "<div class=\"tinka-success\">\n\n!!{{$:/core/images/done-button}} Backup Success !\n\nA backup of the plugin was successfully created.\n\n</div>\n"
},
"$:/plugins/ahahn/tinka/packageErrors": {
"caption": "Packaging Errors!",
"subtitle": "Packaging Errors!",
"title": "$:/plugins/ahahn/tinka/packageErrors",
"type": "text/vnd.tiddlywiki",
"text": "\\define errorFilter()\n[[$(errorVars)$]fields[]prefix[error]]\n\\end\n\n\n<div class=\"tinka-error\">\n\n!!{{$:/core/images/close-button}} There were some errors !\n\nThe follwoing errors occured whilst processing your request:\n\n<ul>\n\t<$list filter=<<errorFilter>> variable=\"errorField\">\n\t\t<li><$view tiddler=<<errorVars>> field=<<errorField>> /></li>\n\t</$list>\n</ul>\n</div>\n"
},
"$:/plugins/ahahn/tinka/packageSuccess": {
"caption": "Packaging Success",
"subtitle": "Packaging Success",
"title": "$:/plugins/ahahn/tinka/packageSuccess",
"type": "text/vnd.tiddlywiki",
"text": "<div class=\"tinka-success\">\n\n!!{{$:/core/images/done-button}} (Re-)Packaging Success !\n\nThe plugin was successfully (re-)packaged. It is recommended to <u>save and reload</u> the wiki now in order to avoid plugins to misbehave.\n\n <div class=\"tinka-centered-container\">\n <span class=\"tinka-saving\">{{$:/core/images/save-button}} Saving...<br/><sub>(If your wiki doesn't save automatically, please save&reload manually.)</sub></span>\n <$button class=\"tc-btn-big-green tinka-enlarge tinka-orb tinka-button-refresh\">\n <$action-sendmessage $message=\"tm-browser-refresh\" />\n {{$:/core/images/refresh-button}}\n <p>\n <b>RELOAD NOW!</b>\n </p>\n </$button>\n </div>\n</div>\n"
},
"$:/plugins/ahahn/tinka/restoreSuccess": {
"caption": "Restore Successful",
"subtitle": "Restore Successful",
"title": "$:/plugins/ahahn/tinka/restoreSuccess",
"type": "text/vnd.tiddlywiki",
"text": "<div class=\"tinka-success\">\n\n!!{{$:/core/images/done-button}} Restore Success !\n\nThe backup was successfully restored!\n\n</div>\n"
},
"$:/plugins/ahahn/tinka/pluginManagement": {
"caption": "Installed",
"tags": "$:/tags/tinka/ControlPanel",
"title": "$:/plugins/ahahn/tinka/pluginManagement",
"type": "text/vnd.tiddlywiki",
"text": "\\define popup-state-macro()\n$:/state/popup-$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage)\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1>\n''<$view field=\"description\"><$view field=\"title\"/></$view>'' $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-table(type)\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">>>\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\">>\n</$link>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$set name=\"target\" value={{!!title}}>\n\n{{$:/plugins/ahahn/tinka/dropdownManage}}\n\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n</$list>\n</$set>\n\\end\n\n!!Installed Plugins\n\n<<plugin-table plugin>>\n\n!!Installed Themes\n\n<<plugin-table theme>>\n"
},
"$:/plugins/ahahn/tinka/pluginSidePanel": {
"title": "$:/plugins/ahahn/tinka/pluginSidePanel",
"type": "text/vnd.tiddlywiki",
"text": "\\define pluginFilter()\n[[$(pluginPrefix)$]plugintiddlers[]sort[]]\n\\end\n\n\\define pluginDirFilter()\n[all[tiddlers]prefix[$(pluginPrefix)$]sort[]]\n\\end\n\n\\define newPluginTiddler()\n$(pluginPrefix)$/New Tiddler\n\\end\n\n<$button class=\"tc-btn-invisible tinka-invisible\">\n<$action-sendmessage $message=\"tm-new-tiddler\" $param=<<newPluginTiddler>> />''\n{{$:/core/images/new-button}} Add Tiddler''</$button>\n\n!!!Shadow tiddlers contained in the plugin:\n\n<$list filter=<<pluginFilter>> template=\"$:/core/ui/ListItemTemplate\"/>\n\n!!!Normal tiddlers in the plugin directory:\n<$list filter=<<pluginDirFilter>> template=\"$:/core/ui/ListItemTemplate\"/>\n\n<$reveal state=\"!!extender\" type=\"nomatch\" text=\"open\">\n<$button set=\"!!extender\" setTo=\"open\" class=\"tc-btn-invisible tinka-sidebar-button\"><h3>{{$:/core/images/chevron-right}} Filter search</h3></$button>\n</$reveal>\n<$reveal state=\"!!extender\" type=\"match\" text=\"open\">\n<$button set=\"!!extender\" setTo=\"close\" class=\"tc-btn-invisible tinka-sidebar-button\"><h3>{{$:/core/images/chevron-down}} Filter search</h3></$button>\n<div>\n<$edit-text type=\"search\" tiddler=\"$:/plugins/ahahn/tinka/temp/helpTabSearch\" field=\"filterSearch\" />\n<$list filter={{$:/plugins/ahahn/tinka/temp/helpTabSearch!!filterSearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n\n<$button class=\"tc-btn-big-green tinka-orange\">\n<$tinka-repackagePlugin $plugin=<<pluginPrefix>> $create=\"no\" $diff=\"$:/plugins/ahahn/tinka/emptyDiff\" />\n<$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/ahahn/tinka/packageSuccess\" />Quick-Package</$button>\n<$button class=\"tc-btn-big-green tinka-blue\">\n<$action-deletetiddler $tiddler=<<currentTiddler>> />\nDisable Help Tab</$button>\n"
},
"$:/plugins/ahahn/tinka/search-default": {
"caption": "Default search",
"tags": "$:/tags/TinkaSearch",
"title": "$:/plugins/ahahn/tinka/search-default",
"type": "text/vnd.tiddlywiki",
"text": "\\define searchstring()\n[all[tiddlers]search:title{$(searchTiddler)$}sort[title]]\n\\end\n\nEnter search term: <$edit-text tiddler=\"$:/temp/tinka/search\" type=\"search\" default=\"\" tag=\"input\"/> <$reveal state=\"$:/temp/tinka/search\" type=\"nomatch\" text=\"\"><$button class=\"tc-btn-invisible\" set=\"$:/temp/tinka/search\" setTo=\"\">{{$:/core/images/close-button}}</$button></$reveal>\n\n<$reveal state=\"$:/temp/tinka/search\" type=\"nomatch\" text=\"\">\n <$set name=\"searchTiddler\" value=\"$:/temp/tinka/search\">\n <ul>\n <$list filter=<<searchstring>> emptyMessage=\"<li class='tinka-list-item'><i>No Tiddlers selected.</i></li>\">\n <li class=\"tinka-list-item\">\n <$checkbox tiddler=<<qualified-modify-add>> tag={{!!title}} />\n <$link to={{!!title}}><$text text={{!!title}} /></$link>\n </li>\n </$list>\n </ul>\n </$set>\n</$reveal>\n\n<!--Empty search string would list all tiddlers-->\n<$reveal state=\"$:/temp/tinka/search\" type=\"match\" text=\"\">\n <ul>\n <li class=\"tinka-list-item\"><i>No Tiddlers selected.</i></li>\n </ul>\n</$reveal>\n\n\n"
},
"$:/plugins/ahahn/tinka/search-filter": {
"caption": "Filter search",
"list-after": "$:/plugins/ahahn/tinka/search-default",
"tags": "$:/tags/TinkaSearch",
"title": "$:/plugins/ahahn/tinka/search-filter",
"type": "text/vnd.tiddlywiki",
"text": "Enter Filterstring to select tiddlers: <$edit-text tiddler=\"$:/temp/tinka/search\" type=\"search\" default=\"\" tag=\"input\"/> <$reveal state=\"$:/temp/tinka/search\" type=\"nomatch\" text=\"\"><$button class=\"tc-btn-invisible\" set=\"$:/temp/tinka/search\" setTo=\"\">{{$:/core/images/close-button}}</$button></$reveal>\n<ul>\n<$list filter={{$:/temp/tinka/search}} emptyMessage=\"<li class='tinka-list-item'><i>No Tiddlers selected.</i></li>\">\n\t\t<li class=\"tinka-list-item\">\n <$checkbox tiddler=<<qualified-modify-add>> tag={{!!title}} />\n <$link to={{!!title}}><$text text={{!!title}} /></$link>\n </li>\n</$list>\n</ul>\n"
},
"$:/plugins/ahahn/tinka/searchDisplay": {
"title": "$:/plugins/ahahn/tinka/searchDisplay",
"type": "text/vnd.tiddlywiki",
"text": "<<tabs \"[[$:/plugins/ahahn/tinka/search-default]] [[$:/plugins/ahahn/tinka/search-filter]]\" \"$:/plugins/ahahn/tinka/search-default\" \"$:/temp/tinka/searchTab\">>\n"
},
"$:/plugins/ahahn/tinka/usage": {
"caption": "Usage/Help",
"created": "20150430092825762",
"modified": "20170225181342015",
"tags": "",
"title": "$:/plugins/ahahn/tinka/usage",
"type": "text/vnd.tiddlywiki",
"text": "{{$:/plugins/ahahn/tinka/docs/How to create a new plugin}}\n\n{{$:/plugins/ahahn/tinka/docs/Help Tab}}\n\n!! Notes\n\nWhen packaging or repackaging a plugin, the version number of the plugin is automatically increased. This might not be wanted in all cases and has to be manually corrected after packaging.\n\nAlso version suffixes such as:\n\n* -prerelease\n* -beta\n\nare supported and will be appended to the new version number when present.\n\n!! Plugin mechanism\nFor more information about how the plugin mechanism in TiddlyWiki works, see the official documentation: http://tiddlywiki.com/#PluginMechanism\n\n!! Filter language\nFilters are useful to select a subset of tiddlers from a wiki. If you are new to filters, learn more about them here: http://tiddlywiki.com/#Filters"
}
}
}
{
"tiddlers": {
"$:/plugins/ebalster/formula/coerce.js": {
"text": "/*\\\ntitle: $:/plugins/ebalster/formula/coerce.js\ntype: application/javascript\nmodule-type: macro\n\nType coercion logic for formulas.\nSupported types for coercion:\n\n* text\n* number\n* boolean\n* array\n* date\n\nAdditional types that may be coerced:\n\n* undefined\n* regular expression\n\n\\*/\n(function(){\n\n\"use strict\";\n\n\n// Value-to-text coercion.\nvar _ToText = {\n\t\"undefined\" : function(v,ctx) {return \"undefined\";},\n\t\"string\" : function(v,ctx) {return v;},\n\t\"number\" : function(v,ctx) {return ctx.formats.number(v);},\n\t\"symbol\" : function(v,ctx) {return String(v);},\n\t\"function\" : function(v,ctx) {return \"function\" + (v.formulaSrc || \" [built-in]\");},\n\t\"boolean\" : function(v,ctx) {return (v ? \"TRUE\" : \"FALSE\");},\n\t\"object\" : function(v,ctx) {\n\t\tif (v instanceof Date) return ctx.formats.date(v);\n\t\tif (v instanceof Array) return ctx.formats.array(v,ctx);\n\t\tif (v instanceof RegExp) return String(v);\n\t\tif (v instanceof Error) throw v;\n\t\treturn JSON.stringify(v); // Last resort\n\t},\n};\n\n// Value-to-number coercion.\nvar _ToNum = {\n\t\"undefined\" : function(v,ctx) {throw \"Cannot convert undefined value to number!\";},\n\t\"string\" : function(v,ctx) {\n\t\tvar n = Number(v);\n\t\tif (isNaN(n)) throw \"Cannot convert \\\"\"+v+\"\\\" to number!\";\n\t\treturn n;\n\t},\n\t\"number\" : function(v,ctx) {return v;},\n\t\"symbol\" : function(v,ctx) {throw \"Cannot convert symbol to number!\";},\n\t\"function\" : function(v,ctx) {throw \"Cannot convert function to number!\";},\n\t\"boolean\" : function(v,ctx) {return (v ? 1 : 0);},\n\t\"object\" : function(v,ctx) {throw \"Cannot convert \\\"\" + _ToText.object(v,ctx) + \"\\\" to number!\";},\n};\n\n// Value-to-boolean coercion.\nvar _ToBool = {\n\t\"undefined\" : function(v,ctx) {return false;},\n\t\"string\" : function(v,ctx) {return !(/^\\s*(undefined|false|null|0+|0*\\.0+|0+\\.0*|)\\s*$/i.test(v));},\n\t\"number\" : function(v,ctx) {return Boolean(v);},\n\t\"symbol\" : function(v,ctx) {return Boolean(v);},\n\t\"function\" : function(v,ctx) {return true;},\n\t\"boolean\" : function(v,ctx) {return v;},\n\t\"object\" : function(v,ctx) {return Boolean(v);},\n};\n\nexports.ToSelf = function ToSelf(v,ctx) {return v;};\nexports.ToText = function ToText(v,ctx) {return _ToText[typeof v](v,ctx);};\nexports.ToNum = function ToNum (v,ctx) {return _ToNum [typeof v](v,ctx);};\nexports.ToBool = function ToBool(v,ctx) {return _ToBool[typeof v](v,ctx);};\n\nexports.ToDate = function ToDate(v,ctx) {\n\tif (v instanceof Date) return v;\n\tthrow \"Cannot auto-convert \\\"\" + exports.ToText(v,ctx) + \"\\\" to a date!\";\n};\n\nvar rxJsRegex = /^\\/((?:[^\\\\\\/\\[]|\\[(?:[^\\]]|\\\\\\])*\\]|\\\\.)+)\\/([a-z]*)$/;\nvar rxTwRegexFlags = /^\\(\\?[a-z]*\\)|\\(\\?[a-z]*\\)$/i;\n\nexports.ToRegex = function ToRegex(v,ctx) {\n\tif (v instanceof RegExp) return v;\n\tif (typeof v === \"string\") {\n\t\tv = v.trim();\n\t\t// Try JavaScript style regex\n\t\tvar match = rxJsRegex.exec(v);\n\t\tif (match) {\n\t\t\treturn new RegExp(term[1].replace(\"\\\\/\", \"/\"), term[2]);\n\t\t}\n\t\t// Try TiddlyWiki style regex\n\t\tmatch = rxTwRegexFlags.exec(v);\n\t\tif (match) {\n\t\t\tvar flagLen = match[0].length;\n\t\t\tvar flags = match[0].substr(2, match[0].length-3);\n\t\t\tif (match.index == 0) return new RegExp(v.substr(flagLen), flags);\n\t\t\telse return new RegExp(v.substr(0, v.length-flagLen), flags);\n\t\t}\n\t\treturn new RegExp(v, \"g\");\n\t\t\n\t}\n\tthrow \"Cannot auto-convert \\\"\" + exports.ToText(v,ctx) + \"\\\" to a regular expression!\";\n};\nexports.ToArray = function ToArray(v,ctx) {\n\tif (v instanceof Array) return v;\n\tthrow \"Cannot auto-convert \\\"\" + exports.ToText(v,ctx) + \"\\\" to an array!\";\n};\nexports.ToFunc = function ToFunc(v,ctx) {\n\tif (v instanceof Function) return v;\n\tthrow \"Cannot convert \\\"\" + exports.ToText(v,ctx) + \"\\\" to a function!\";\n};\n// Maybe add ToRegex\n\n\n// Build a coerce rule from a source string.\nvar CoerceFuncs = {\n\tT: exports.ToText,\n\tN: exports.ToNum,\n\tB: exports.ToBool,\n\tA: exports.ToArray,\n\tD: exports.ToDate,\n\tR: exports.ToRegex,\n\tF: exports.ToFunc,\n\t_: exports.ToSelf,\n};\n\nfunction BuildCoerceRule(src) {\n\tvar rule = {\n\t\tmain: [],\n\t\textra: [],\n\t};\n\tvar i = 0, func;\n\t// Main part\n\twhile (i < src.length) {\n\t\tfunc = CoerceFuncs[src[i]]; ++i;\n\t\tif (func) {rule.main.push(func); continue;}\n\t\tif (src[i-1] == '+') break;\n\t\tthrow \"Unknown coerce rule: '\"+src[i-1]+\"'\";\n\t}\n\t// Extra arguments (loops)\n\twhile (i < src.length) {\n\t\tfunc = CoerceFuncs[src[i]]; ++i;\n\t\tif (func) {rule.extra.push(func); continue;}\n\t\tthrow \"Unknown coerce rule: '\"+src[i-1]+\"'\";\n\t}\n\treturn rule;\n}\n\nvar NoCoerce = {rule: {main:[], extra:[]}, gen: []};\nvar CoerceCache = {'': NoCoerce};\n\nfunction GetCoerceCache(src) {\n\tif (!CoerceCache[src]) {\n\t\ttry {\n\t\t\tCoerceCache[src] = {rule: BuildCoerceRule(src), gen: []};\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow err + \" in rule string '\" + src + \"'\";\n\t\t}\n\t}\n\treturn CoerceCache[src];\n}\n\n// Generate the coercing function array.\nfunction GenCoerceFuncs(rule,len) {\n\tvar result = [], i = 0, x = 0;\n\tresult = rule.main;\n\tif (rule.extra.length) {\n\t\twhile (result.length < len) result = result.concat(rule.extra);\n\t}\n\treturn result;\n}\n\n// Get an array of coercing (ToXXX) functions based on the function.\nexports.GetCoerceFuncs = function GetCoerceFuncs(func,args) {\n\t// Possibly set up coercion for this function.\n\tif (!func._coerce) {\n\t\tif (func.inCast) {\n\t\t\ttry {\n\t\t\t\tfunc._coerce = GetCoerceCache(func.inCast);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthrow err + \" for function \" + func.toString();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfunc._coerce = NoCoerce;\n\t\t}\n\t}\n\tvar gen = func._coerce.gen[args.length];\n\tif (gen) return gen;\n\tgen = GenCoerceFuncs(func._coerce.rule, args.length);\n\tfunc._coerce.gen[args.length] = gen;\n\treturn gen;\n};\n\n\n// Coerce\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/coerce.js",
"tags": "",
"module-type": "library",
"modified": "20180112071139424",
"description": "",
"created": "20180113183000431"
},
"$:/plugins/ebalster/formula/compile.js": {
"text": "(function(){\n\n\"use strict\";\n\nvar Nodes = require(\"$:/plugins/ebalster/formula/nodes.js\");\n\nvar rxDatumIsFormula = /^\\s*\\(=.*=\\)\\s*$/;\nvar rxDatumIsTrue = /^s*TRUE\\s*$/i;\nvar rxDatumIsFalse = /^s*FALSE\\s*$/i;\n\nvar rxLet = /let/gi;\n\nvar rxSkipInert = /(\\s*|\\/\\/.*?([\\r\\n]|$)|\\/\\*[\\s\\S]*?\\*\\/)*/g;\nvar rxNotWhitespace = /[^\\s]+/g;\nvar rxOperandFilter = /\\[(([^\\[\\]]|\\[[^\\[\\]]*\\])+(\\](\\s*[+-])?\\s*\\[)?)+\\]/g;\nvar rxOperandTransclusion = /\\{\\{([^\\{\\}]+)\\}\\}/g;\nvar rxDatumIsTransclusion = /^\\s*\\{\\{([^\\{\\}]+)\\}\\}\\s*$/;\nvar rxOperandVariable = /<<([^<>]+)>>/g;\nvar rxDatumIsVariable = /^\\s*<<[^<>]+>>\\s*$/;\nvar rxCellName = /\\$?([A-Z]{1,2})\\$?([0-9]+)/g;\nvar rxCellRange = /\\$?([A-Z]{1,2})\\$?([0-9]+):\\$?([A-Z]{1,2})\\$?([0-9]+)/g;\nvar rxIdentifier = /[_a-zA-Z][_a-zA-Z0-9]*/g;\nvar rxKeyword = /(function|let|for|foreach|if|then|else|while|do|this|self|currentTiddler)/gi;\n\nvar rxUnsignedDecimal = /((\\d+(\\.\\d*)?)|(\\.\\d+))/g;\nvar rxDecimal = /[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))/g;\nvar rxDatumIsDecimal = /^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/;\n\nvar rxDate = /\\d{2,4}-\\d{2}-\\d{2}(\\s*\\d{1,2}:\\d{2}(:\\d{2}(.\\d+)?)?)?/g;\nvar rxDatumIsDate = /^\\s*\\d{2,4}-\\d{2}-\\d{2}(\\s*\\d{1,2}:\\d{2}(:\\d{2}(.\\d{3})?)?)?\\s*$/;\nvar rxRegex = /\\/((?:[^\\\\\\/\\[]|\\[(?:[^\\]]|\\\\\\])*\\]|\\\\.)+)\\/([a-z]*)/g;\nvar rxDatumIsRegex = /^\\s*\\/((?:[^\\\\\\/\\[]|\\[(?:[^\\]]|\\\\\\])*\\]|\\\\.)+)\\/([a-z]*)\\s*$/;\nvar rxDatumIsTwDate = /^([0-9]{4})(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])([0-5][0-9])([0-9]{3})?$/;\nvar rxDateFragment = /\\d+/g;\n\nvar rxString = /(\"(\\\\.|[^\"\\\\])*\"|'(\\\\.|[^'\\\\])*')/g;\nvar rxEscapeSequence = /\\\\([a-tv-z0\"'\\\\]|u[a-fA-F0-9]{0,4}|$)/g;\n\nvar formulaFunctions = null;\nvar operatorsUnaryPre = null;\nvar operatorsUnaryPost = null;\nvar operatorsBinary = null;\nvar operatorsTernary = null;\n\nfunction Parser(src)\n{\n\tthis.src = src;\n\tthis.pos = 0;\n\tthis.end = src.length;\n\tthis.locals = {};\n\tthis.localStack = [];\n\tthis.assignStack = [];\n}\nParser.prototype.getChar = function()\n{\n\treturn this.src.charAt(this.pos);\n};\nParser.prototype.nextGlyph = function()\n{\n\tthis.skipInert();\n\tif (this.pos >= this.end) return '';\n\t++this.pos;\n\treturn this.src.charAt(this.pos-1);\n};\nParser.prototype.remaining = function()\n{\n\treturn this.src.substring(this.pos, this.end);\n};\nParser.prototype.nextToken = function()\n{\n\tthis.skipInert();\n\trxNotWhitespace.lastIndex = this.pos;\n\trxNotWhitespace.test(this.src);\n\treturn this.src.substring(this.pos, rxNotWhitespace.lastIndex);\n};\nParser.prototype.match_here = function(regex)\n{\n\t// TODO this is doing much more work than is necessary\n\tregex.lastIndex = this.pos;\n\tvar result = regex.exec(this.src);\n\tif (!result || result.index != this.pos || result.index+result[0].length > this.end) return null;\n\tthis.pos = regex.lastIndex;\n\treturn result;\n};\nParser.prototype.skipInert = function()\n{\n\trxSkipInert.lastIndex = this.pos;\n\trxSkipInert.test(this.src);\n\tthis.pos = Math.min(rxSkipInert.lastIndex, this.end);\n};\n\n// Push a new set of local variables onto the parser's stack.\nParser.prototype.pushLocals = function(assigns) {\n\tvar id;\n\tvar newLocals = {};\n\tthis.localStack.push(this.locals); for (id in this.locals) newLocals[id] = 0;\n\tthis.assignStack.push(assigns); for (id in assigns) newLocals[id] = 0;\n\tthis.locals = newLocals;\n};\n\n// Pop the last set of local variables off the parser's stack and return usage-counts.\nParser.prototype.popLocals = function() {\n\tvar id, count, usage = {captures: {}, assigns: {}},\n\t\tassigns = this.assignStack.pop(),\n\t\toldLocals = this.localStack.pop();\n\tfor (id in this.locals) {\n\t\tcount = this.locals[id];\n\t\tif (count > 0) {\n\t\t\tif (assigns[id]) {\n\t\t\t\tusage.assigns[id] = count;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tusage.captures[id] = count;\n\t\t\t\toldLocals[id] += count;\n\t\t\t}\n\t\t}\n\t}\n\tthis.locals = oldLocals;\n\treturn usage;\n};\n\nvar initialize = function() {\n\tformulaFunctions = {};\n\tvar operators = {};\n\t$tw.modules.applyMethods(\"formula-function\", formulaFunctions);\n\t$tw.modules.applyMethods(\"formula-operator\", operators);\n\n\toperatorsUnaryPre = {};\n\toperatorsUnaryPost = {};\n\toperatorsBinary = {}; //{}; //{plus: {arity: 2, precedence: 10, operator: \"+\", function: \"add\"}};\n\toperatorsTernary = {};\n\tfor (var opName in operators)\n\t{\n\t\tvar op = operators[opName];\n\n\t\t// Bind the associated function. \n\t\tvar func = formulaFunctions[op.function];\n\t\tif (!func) continue;\n\t\top.func_bind = func;\n\n\t\t// Sort the op by arity and position.\n\t\tswitch (op.arity)\n\t\t{\n\t\tcase 2: operatorsBinary [opName] = op; break;\n\t\tcase 3: operatorsTernary [opName] = op; break;\n\t\tcase 1:\n\t\t\tswitch (op.position)\n\t\t\t{\n\t\t\t\tcase \"pre\": operatorsUnaryPre [opName] = op; break;\n\t\t\t\tcase \"post\": operatorsUnaryPost[opName] = op; break;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n\nexports.compileExpression = function(expression) {\n\n\t// Create a parser and process the formula as an expression.\n\tvar parser = new Parser(expression);\n\n\tvar operand = buildExpression(parser);\n\n\treturn operand;\n};\n\nexports.compileDatum = function(datum) {\n\t\n\tvar parser, term;\n\n\t// Short-hand formula\n\tif (datum.charAt(0) == \"=\") {\n\t\tparser = new Parser(datum);\n\t\tparser.pos = 1;\n\t\treturn buildExpression(parser);\n\t}\n\n\t// Could be a TiddlyWiki date?\n\tif (rxDatumIsTwDate.test(datum)) {\n\t\treturn new Nodes.Date($tw.utils.parseDate(datum));\n\t}\n\n\t// Could be a number?\n\tif (rxDatumIsDecimal.test(datum)) {\n\t\t// Treat as a number constant\n\t\treturn new Nodes.Number(Number(datum));\n\t}\n\n\t// Could be a formula?\n\tif (rxDatumIsFormula.test(datum)) {\n\t\t// Parse contents as a formula\n\t\tparser = new Parser(datum);\n\t\tparser.pos = datum.indexOf(\"=\")+1;\n\t\tparser.end = datum.lastIndexOf(\"=\");\n\t\treturn buildExpression(parser);\n\t}\n\n\t// Could be a transclusion or variable?\n\tif (rxDatumIsTransclusion.test(datum) ||\n\t\t\trxDatumIsVariable.test(datum)) {\n\t\t// Defer to the operand parser...\n\t\tparser = new Parser(datum);\n\t\treturn buildOperand(parser);\n\t}\n\n\t// Booleans?\n\tif (rxDatumIsFalse.test(datum)) return new Nodes.Bool(false);\n\tif (rxDatumIsTrue .test(datum)) return new Nodes.Bool(true);\n\n\t// Date?\n\tif (rxDatumIsDate.test(datum))\n\t{\n\t\trxDateFragment.lastIndex = 0;\n\t\tvar parts = [];\n\t\twhile (true)\n\t\t{\n\t\t\tvar res = rxDateFragment.exec(datum);\n\t\t\tif (!res) break;\n\t\t\tparts.push(parseInt(res[0]));\n\t\t}\n\t\tif (parts.length)\n\t\t{\n\t\t\treturn new Nodes.Date(new Date(\n\t\t\t\tparts[0], (parts[1] || 1)-1, parts[2] || 1,\n\t\t\t\tparts[3] || 0, parts[4] || 0, parts[5] || 0, parts[6] || 0));\n\t\t}\n\t}\n\n\t// Regex?\n\tif ((term = rxDatumIsRegex.exec(datum))) {\n\t\treturn new Nodes.Regex(new RegExp(term[1].replace(\"\\\\/\", \"/\"), term[2]));\n\t}\n\n\t// Otherwise, treat as a string constant\n\treturn new Nodes.Text(datum);\n};\n\nexports.compileFormula = function(formulaString)\n{\n\t// Process the formula string into a root operand\n\ttry {\n\t\treturn exports.compileExpression(formulaString);\n\t}\n\tcatch (err) {\n\t\tthrow \"CompileError: \" + err;\n\t}\n};\n\n\n// Compile an operator\nfunction parseOperator(parser, operatorGroup) {\n\n\t// Skip more whitespace\n\tparser.skipInert();\n\n\tvar result = null;\n\n\t// Find the longest operator matching the current text.\n\tfor (var opName in operatorGroup)\n\t{\n\t\tvar op = operatorGroup[opName];\n\t\tif (parser.src.substr(parser.pos, op.operator.length) == op.operator\n\t\t\t&& parser.pos+op.operator.length <= parser.end)\n\t\t{\n\t\t\tif (!result || result.operator.length < op.operator.length) result = op;\n\t\t}\n\t}\n\n\tif (result) parser.pos += result.operator.length;\n\n\treturn result;\n}\n\n// Parse a text reference. This function is pased on $tw.utils.getTextReference.\nfunction buildTextReference(textReference) {\n\tvar tr = $tw.utils.parseTextReference(textReference);\n\tvar title;\n\tif (tr.title) title = new Nodes.Text(tr.title);\n\telse title = new Nodes.Variable(new Nodes.Text(\"currentTiddler\"));\n\tif (tr.field) {\n\t\tif (tr.field == \"title\") {\n\t\t\treturn title;\n\t\t}\n\t\telse {\n\t\t\treturn new Nodes.TranscludeField(title, new Nodes.Text(tr.field));\n\t\t}\n\t}\n\telse if (tr.index) {\n\t\treturn new Nodes.TranscludeIndex(title, new Nodes.Text(tr.index));\n\t}\n\telse {\n\t\treturn new Nodes.TranscludeText(title);\n\t}\n}\n\n// Parse a formula.\nfunction buildExpression(parser, nested) {\n\t\n\t// Make sure math functions are initialized\n\tif (!formulaFunctions) initialize();\n\n\tparser.skipInert();\n\n\t// Expression compiler state\n\tvar operands = [];\n\tvar operators = [];\n\tvar precedences = [];\n\tvar operand = null, callArgs;\n\t\n\t// Unary stacking function\n\tvar applyUnary = function(unary) {\n\t\toperand = new Nodes.CallJS(unary.func_bind, [operand]);\n\t};\n\n\twhile (true)\n\t{\n\t\tvar unaries = [];\n\n\t\t// Prefix operators\n\t\twhile (true)\n\t\t{\n\t\t\tvar prefix = parseOperator(parser, operatorsUnaryPre);\n\t\t\tif (prefix) unaries.unshift(prefix);\n\t\t\telse break;\n\t\t}\n\n\t\t// Grab the operand\n\t\toperand = buildOperand(parser);\n\n\t\t// Missing operand is an error\n\t\tif (operand === null)\n\t\t{\n\t\t\tvar token = parser.nextToken();\n\t\t\tif (token && token[0] != \")\" && token[0] != \",\")\n\t\t\t\tthrow \"invalid operand \\\"\" + token + \"\\\"\";\n\t\t\telse if (operators.length)\n\t\t\t\tthrow \"missing operand after \\\"\" + operators[operators.length-1].operator + \"\\\"\";\n\t\t\telse throw \"empty expression\";\n\t\t}\n\n\t\t// Check for a function call (precedes all operators).\n\t\tcallArgs = buildArguments(parser);\n\t\tif (callArgs) operand = new Nodes.CallFunc(operand, callArgs);\n\n\t\t// Postfix operators\n\t\twhile (true)\n\t\t{\n\t\t\tvar postfix = parseOperator(parser, operatorsUnaryPost);\n\t\t\tif (postfix) unaries.push(postfix);\n\t\t\telse break;\n\t\t}\n\n\t\tunaries.forEach(applyUnary);\n\n\t\t// Operand is complete.\n\t\toperands.push(operand);\n\n\t\t// Infix operators\n\t\tvar operator = parseOperator(parser, operatorsBinary);\n\n\t\t// Missing operator ends the expression\n\t\tif (operator === null) break;\n\n\t\t// Add the operator and its precedence level.\n\t\toperators.push(operator);\n\t\tvar precedence = operator.precedence;\n\t\tif (precedences.indexOf(precedence || 0) == -1) precedences.push(precedence);\n\t}\n\n\t// Sanity check\n\tif (operands.length != operators.length+1)\n\t\tthrow \"internal error: operator/operand parsing inconsistency\";\n\n\t// Resolve operators by precedence\n\tprecedences.sort(function(a,b) {return (a>b)?-1:1;});\n\n\tfor (var j = 0; j < precedences.length; ++j)\n\t{\n\t\tvar prec = precedences[j];\n\t\tfor (var i = 0; i < operators.length; )\n\t\t{\n\t\t\t// Process only operators at the current precedence level.\n\t\t\tvar op = operators[i];\n\t\t\tif (op.precedence != prec) {++i; continue;}\n\n\t\t\t// Collapse the previous and next operands with this operator.\n\t\t\toperands[i] = new Nodes.CallJS(op.func_bind, [operands[i], operands[i+1]]);\n\t\t\toperators.splice(i, 1);\n\t\t\toperands.splice(i+1, 1);\n\t\t}\n\t}\n\n\t// Sanity check\n\tif (operators.length !== 0 || operands.length != 1)\n\t\tthrow \"internal error: resoving failed; \" + operands.length + \" operands and \" + operators.length + \" operators remain\";\n\n\t// For non-nested expressions, throw if any tokens remain.\n\tif (!nested)\n\t{\n\t\tparser.skipInert();\n\n\t\tif (parser.pos < parser.end)\n\t\t{\n\t\t\tthrow \"expected operator, got \\\"\" + parser.nextToken() + \"\\\"\";\n\t\t}\n\t}\n\t\n\t// Otherwise return the operand directly\n\treturn operands[0];\n}\n\n// Compile a list expression, which could be function arguments or an array...\nfunction buildCommaList(parser, braces, afterHint) {\n\n\t// Is an open-brace present?\n\tparser.skipInert();\n\tif (parser.getChar() !== braces[0]) return null;\n\t++parser.pos;\n\n\t// Zero arguments?\n\tparser.skipInert();\n\tif (parser.getChar() === braces[1]) {++parser.pos; return [];}\n\t\n\tvar nodeList = [];\n\n\twhile (true)\n\t{\n\t\t// Compile an expression.\n\t\tnodeList.push(buildExpression(parser, true));\n\n\t\t// Expect close-brace or , after argument.\n\t\tvar char = parser.nextGlyph();\n\t\tif (char === braces[1]) break;\n\t\tif (char !== \",\") throw \"Expect ',' or '\" + braces[1] + \"' after \" + afterHint;\n\t}\n\n\treturn nodeList;\n}\n\n// Build an argument list.\nfunction buildArguments(parser) {\n\treturn buildCommaList(parser, \"()\", \"function argument.\");\n}\n\n// Build an array literal.\nfunction buildArrayLiteral(parser) {\n\tvar array = buildCommaList(parser, \"{}\", \"array element (use {{double braces}} for transclusions).\");\n\tif (!array) throw \"Expect '{' to begin array literal.\";\n\treturn array;\n}\n\n// Build a let or foreach expression (parser starts after the keyword)\nfunction buildLetExpression(parser) {\n\n\tif (parser.nextGlyph() !== \"(\") throw \"Expect '(' after LET.\";\n\n\t// Gradually push locals.\n\tvar assigns = {}, id, c;\n\tparser.pushLocals(assigns);\n\twhile (true) {\n\t\t// Look for a name (identifier)\n\t\tparser.skipInert();\n\t\tid = parser.match_here(rxIdentifier);\n\t\tif (!id) throw \"Expected name in LET assignment, got '\" + parser.nextToken() + \"'.\";\n\t\tid = id[0];\n\t\tif (rxKeyword.test(id)) throw \"Illegal name for LET: \" + id;\n\t\t\n\t\t// Look for an equals, then an expression.\n\t\tif (parser.nextGlyph() !== '=') throw \"Expect '=' after LET value.\";\n\n\t\t// Build the expression... Each let can use the ones before it.\n\t\ttry {\n\t\t\tassigns[id] = buildExpression(parser, true);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow \"compiling LET '\" + id + \"': \" + err;\n\t\t}\n\t\tparser.locals[id] = 0;\n\n\t\t// Expect ) or , after argument.\n\t\tvar char = parser.nextGlyph();\n\t\tif (char == \")\") break;\n\t\tif (char != \",\") throw \"Expect ',' or ')' after LET assignment.\";\n\t}\n\n\tif (parser.nextGlyph() !== \":\") throw \"Expect ':' after LET assignment list.\";\n\tif (parser.nextGlyph() !== \"(\") throw \"Expect LET expression in parentheses after ':'.\";\n\n\t// Compile the body expression, with additional locals.\n\tvar body = buildExpression(parser, true);\n\tvar usage = parser.popLocals();\n\n\t// TODO could examine usage.assigns and letLocals to see if any values were unused.\n\n\tif (parser.nextGlyph() !== \")\") throw \"Expect ')' after LET expression.\";\n\n\treturn new Nodes.LetVars(assigns,body);\n}\n\n// Build a function (parser starts after the keyword \"function\")\nfunction buildFunction(parser) {\n\t\n\tvar srcBegin = parser.pos;\n\n\tif (parser.nextGlyph() !== \"(\") throw \"Expect '(' after 'function'.\";\n\n\tparser.skipInert();\n\n\t// Build the parameter list, if any.\n\tvar params = [], assigns = {};\n\tif (parser.getChar() === \")\") {++parser.pos;}\n\telse while (true)\n\t{\n\t\t// Get a parameter name (identifier).\n\t\tvar param = parser.match_here(rxIdentifier);\n\t\tif (!param) throw \"Expect list of parameter names after 'function'.\";\n\t\tparam = param[0];\n\t\tif (rxKeyword.test(param)) throw \"Illegal parameter name: \" + param;\n\t\tparams.push(param);\n\t\tif (assigns[param]) throw \"Parameter name used twice: \" + param;\n\t\tassigns[param] = true;\n\n\t\t// Expect ) or , after argument.\n\t\tvar char = parser.nextGlyph();\n\t\tif (char == \")\") break;\n\t\tif (char != \",\") throw \"Expect ',' or ')' after function parameter name.\";\n\n\t\t// Skip inert stuff\n\t\tparser.skipInert();\n\t}\n\n\tif (parser.nextGlyph() !== \":\") throw \"Expect ':' after function parameter list.\";\n\tif (parser.nextGlyph() !== \"(\") throw \"Expect function body beginning with '(' after ':'.\";\n\n\t// Compile the body expression, with parameters as locals. Closures are NOT currently supported.\n\tparser.pushLocals(assigns);\n\tvar body = buildExpression(parser, true);\n\tvar usage = parser.popLocals();\n\tvar captures = usage.captures;\n\n\tif (parser.nextGlyph() !== \")\") throw \"Expect ')' after function body.\";\n\n\t// Create the function object (must be called with this = context)\n\tvar func = function() {\n\t\tvar locals = Object.assign({}, func.captured || {});\n\t\tfor (var i = 0; i < arguments.length; ++i) locals[params[i]] = arguments[i];\n\t\treturn body.compute(this.let(locals));\n\t};\n\t//func.params = params;\n\tfunc.min_args = params.length;\n\tfunc.max_args = params.length;\n\tfunc.formulaSrc = parser.src.substring(srcBegin, parser.pos);\n\treturn new Nodes.Function(func, captures);\n}\n\n// Compile an operand into a function returning the operand value.\nfunction buildOperand(parser) {\n\n\tvar term;\n\t\n\t// Skip whitespace & comments\n\tparser.skipInert();\n\n\tif (parser.pos == parser.end) return null;\n\n\tvar char = parser.getChar();\n\n\tif (char.match(/[0-9\\.+]/i))\n\t{\n\t\t// Number constant\n\t\tterm = parser.match_here(rxDecimal);\n\t\tif (term) return new Nodes.Number(Number(term[0]));\n\t\tthrow \"Invalid number: \" + parser.nextToken();\n\t}\n\telse if (char.match(/[$a-z_]/i))\n\t{\n\t\t// Cell range?\n\t\tterm = parser.match_here(rxCellRange);\n\t\tif (term) throw \"Cell ranges are currently unsupported!\";\n\n\t\t// Cell name?\n\t\tterm = parser.match_here(rxCellName);\n\t\tif (term) return new Nodes.Datum(\n\t\t\tnew Nodes.TranscludeIndex(\n\t\t\t\tnew Nodes.Variable(new Nodes.Text(\"currentTiddler\")),\n\t\t\t\tnew Nodes.Text(term[1]+term[2])));\n\n\t\t// Identifier?\n\t\tterm = parser.match_here(rxIdentifier);\n\t\tif (!term) return null;\n\n\t\tif (parser.locals[term] != undefined)\n\t\t{\n\t\t\t// Scoped variable. We count up references to each.\n\t\t\t++parser.locals[term];\n\t\t\treturn new Nodes.ScopeVar(term[0]);\n\t\t}\n\n\t\tvar termLower = term[0].toLowerCase();\n\t\tswitch (termLower)\n\t\t{\n\t\tcase \"let\":\n\t\t\t// LET expression.\n\t\t\treturn buildLetExpression(parser);\n\n\t\tcase \"function\":\n\t\t\t// Function declaration.\n\t\t\treturn buildFunction(parser);\n\n\t\tdefault:\n\t\t\t// Function call.\n\t\t\tvar func = formulaFunctions[termLower];\n\n\t\t\tif (!func) throw \"unknown function: \" + term[0];\n\n\t\t\tvar args = buildArguments(parser);\n\n\t\t\t// Omitting arguments is only OK for constant functions\n\t\t\tif (args === null)\n\t\t\t{\n\t\t\t\tif (!func.isConstant) throw \"Expected '(' after \" + term[0];\n\t\t\t\targs = [];\n\t\t\t}\n\n\t\t\tif (func instanceof Function) {\n\t\t\t\t// Check parameter count\n\t\t\t\tif (args.length > func.length && !func.variadic)\n\t\t\t\t\tthrow \"too many arguments for \" + term[0] + \" (requires \" + func.length + \")\";\n\t\t\t\tif (args.length < func.length)\n\t\t\t\t\tthrow \"too few arguments for \" + term[0] + (func.variadic?\" (min \":\" (requires \") + func.length + \")\";\n\t\t\t}\n\t\t\telse if (func.select || func.construct) {\n\t\t\t\t// Check argument range\n\t\t\t\tif (func.max_args && args.length > func.max_args)\n\t\t\t\t\tthrow \"too many arguments for \" + term[0] + \" (max \" + func.max_args + \")\";\n\t\t\t\tif (func.min_args && args.length < func.min_args)\n\t\t\t\t\tthrow \"too few arguments for \" + term[0] + \" (min \" + func.min_args + \")\";\n\t\t\t\t\n\t\t\t\t// If a construct function is present, use it to generate an operand.\n\t\t\t\tif (func.construct) return func.construct(args);\n\n\t\t\t\t// If a select function is present, prepare to bind it with a CallJS.\n\t\t\t\tfunc = func.select(args);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow \"Function \" + term[0] + \" seems to be unusable.\";\n\t\t\t}\n\n\t\t\treturn new Nodes.CallJS(func, args);\n\t\t}\n\t}\n\telse switch (char)\n\t{\n\tcase \"(\": // Parenthesized expression\n\t\t++parser.pos;\n\t\tvar parentheses = buildExpression(parser, true);\n\t\tparser.skipInert();\n\t\tif (parser.getChar() !== \")\")\n\t\t{\n\t\t\tif (parser.pos == parser.end) throw \"missing ')' at end of formula\";\n\t\t\telse throw \"expected ')', got \\\"\" + parser.nextToken() + \"\\\"\";\n\t\t}\n\t\t++parser.pos;\n\t\treturn parentheses;\n\n\tcase \"'\":\n\tcase \"\\\"\": // String constant\n\t\tterm = parser.match_here(rxString);\n\t\tif (!term) throw \"Invalid string: \" + parser.nextToken();\n\t\tterm = term[0].substr(1, term[0].length-2);\n\t\tterm = term.replace(rxEscapeSequence, function(esc) {\n\t\t\tswitch (esc.charAt(1)) {\n\t\t\t\tcase '\"': return '\"';\n\t\t\t\tcase '\\'': return '\\'';\n\t\t\t\tcase '\\\\': return '\\\\';\n\t\t\t\tcase 'n': return '\\n';\n\t\t\t\tcase 'r': return '\\r';\n\t\t\t\tcase 'b': return '\\b';\n\t\t\t\tcase 'f': return '\\f';\n\t\t\t\tcase 't': return '\\t';\n\t\t\t\tcase 'v': return '\\v';\n\t\t\t\tcase '0': return '\\0';\n\t\t\t\tcase 'u':\n\t\t\t\t\tif (esc.length < 6) throw \"Invalid escape sequence: \" + esc;\n\t\t\t\t\treturn String.fromCharCode(parseInt(esc.substr(2), 16));\n\t\t\t\tdefault: throw \"Invalid escape sequence: \" + esc;\n\t\t\t}\n\t\t});\n\t\treturn new Nodes.Text(term);\n\n\tcase \"[\": // Filter operand\n\t\tterm = parser.match_here(rxOperandFilter);\n\t\tif (term) return new Nodes.Filter(term[0]);\n\t\tbreak;\n\n\tcase \"{\": // Transclusion or array\n\t\t++parser.pos;\n\t\tchar = parser.getChar();\n\t\t--parser.pos;\n\t\tif (char == '{') {\n\t\t\t// Possible transclusion operand\n\t\t\tterm = parser.match_here(rxOperandTransclusion);\n\t\t\tif (term) return new Nodes.Datum(buildTextReference(term[1]));\n\t\t}\n\t\t// Array operand\n\t\treturn new Nodes.ArrayDef(buildArrayLiteral(parser));\n\n\tcase \"<\": // Variable operand\n\t\tterm = parser.match_here(rxOperandVariable);\n\t\tif (term) return new Nodes.Datum(\n\t\t\tnew Nodes.Variable(new Nodes.Text(term[1])));\n\t\tbreak;\n\n\tcase \"/\": // Regular expression?\n\t\tterm = parser.match_here(rxRegex);\n\t\tif (term) return new Nodes.Regex(new RegExp(term[1].replace(\"\\\\/\", \"/\"), term[2]));\n\t\t\tbreak;\n\t}\n\n\t// Didn't recognize the operand\n\treturn null;\n}\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/compile.js",
"tags": "",
"module-type": "library",
"modified": "20171211181652443",
"description": "",
"created": "20171210195223539"
},
"$:/plugins/ebalster/formula/compute.js": {
"text": "(function(){\n\n\"use strict\";\n\nvar Nodes = require(\"$:/plugins/ebalster/formula/nodes.js\");\nvar Compiler = require(\"$:/plugins/ebalster/formula/compile.js\");\nvar Coerce = require(\"$:/plugins/ebalster/formula/coerce.js\");\n\nvar Numeral = require(\"$:/plugins/ebalster/formula/lib/numeral.js\");\n\n// TiddlyWiki array format\nfunction arrayFormatTW(arr,ctx) {\n\tvar result = \"\";\n\tfor (var i = 0; i < arr.length; ++i) {\n\t\tvar part = Coerce.ToText(arr[i],ctx);\n\t\tif (i && part.length) result += \" \";\n\t\tif (part.indexOf(/\\s/g) >= 0) result += \"[[\" + part + \"]]\";\n\t\telse result += part;\n\t}\n\treturn result;\n}\n\n// Number format functions...\n\n// SANE number formatting: if we find five consecutive 9s or 0s after the decimal point, round them off.\nfunction NumberStringSane(n) {\n\tvar s = String(n);\n\tvar parse = /^(0\\.0*[1-9]\\d*?|\\d*\\.\\d*?)(0{5}\\d*|9{5}\\d*)(|e[+-]\\d*)$/.exec(s);\n\tif (!parse) return s;\n\tvar kept = parse[1], exp = parse[3];\n\tvar end = kept.slice(-1);\n\tif (parse[2][0] === '0') return ((end === '.') ? kept.substr(0,kept.length-1) : kept) + exp;\n\tif (end === '.') return (Number(kept.substr(0,kept.length-1))+1) + exp;\n\treturn kept.substr(0,kept.length-1) + (Number(end)+1) + exp;\n}\nvar numeralFormat = function(fmt) {return function(num) {return Numeral(num).format(fmt);};};\nvar numeralFormatPrec = function(fmt,digs) {return function(num) {return Numeral(num.toPrecision(digs)).format(fmt);};};\nvar numberFormatFixed = function(prec) {return function(num) {return num.toFixed (prec);};};\nvar numberFormatPrec = function(digs) {return function(num) {return num.toPrecision(digs);};};\nvar numberFormatSelect = function(settings)\n{\n\tif (settings.precision == \"true\" || settings.precision > 100) return String;\n\tif (typeof settings.numberFormat == \"string\") {\n\t\t// Use numeral\n\t\treturn isNaN(settings.precision) ?\n\t\t\tnumeralFormat (settings.numberFormat) :\n\t\t\tnumeralFormatPrec(settings.numberFormat, settings.precision);\n\t}\n\tif (!isNaN(settings.fixed)) return numberFormatFixed(settings.fixed);\n\tif (!isNaN(settings.precision)) return numberFormatPrec (settings.precision);\n\treturn NumberStringSane;\n\t// return String;\n};\n\nexports.computeFormula = function(compiledFormula, widget, formatOptions, debug) {\n\t\n\tvar value, context;\n\t\n\tformatOptions = formatOptions || {};\n\n\tvar dateFormat = formatOptions.dateFormat || \"0hh:0mm, DDth MMM YYYY\";\n\n\t// Specify format. These are all required!\n\tvar formats = {\n\t\tnumber: numberFormatSelect(formatOptions),\n\t\tdate: function(date) {return $tw.utils.formatDateString(date, dateFormat);},\n\t\tarray: arrayFormatTW,\n\t};\n\n\tcontext = new Nodes.Context(widget, formats);\n\n\t// Compute a value from the root node of the compiled formula.\n\ttry {\n\t\tvalue = compiledFormula.computeText(context);\n\t}\n\tcatch (err) {\n\t\tthrow \"ComputeError: \" + String(err) + (err.fileName || \"\") + (err.lineNumber || \"\")\n\t\t\t+ (debug ? \"\\nNodes: \" + JSON.stringify(compiledFormula) : \"\");\n\t}\n\n\t// Format the root node as a string.\n\tif (debug) return value + \"\\n - Val:\" + String(value) + \", Op:\" + compiledFormula.name;\n\telse return value;\n};\n\nexports.evalFormula = function(formulaString, widget, formatOptions, debug) {\n\t\n\tvar compiledFormula;\n\n\t// Compile the formula\n\ttry {\n\t\tcompiledFormula = Compiler.compileExpression(formulaString);\n\t}\n\tcatch (err) {\n\t\tthrow \"CompileError: \" + String(err);\n\t}\n\n\t// Compute the formula\n\treturn exports.computeFormula(compiledFormula, widget, formatOptions, debug);\n};\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/compute.js",
"tags": "",
"module-type": "library",
"modified": "20180114170348576",
"description": "",
"created": "20180114170308058"
},
"$:/plugins/ebalster/formula/filters/range.js": {
"text": "/*\\\ntitle: $:/plugins/ebalster/formula/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g), beg, end, inc, i, fixed = 0;\n\n\tfor (i = 0; i < parts.length; ++i) {\n\t\t// Validate real number\n\t\tif (!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i]))\n\t\t\treturn [\"range: bad number \\\"\"+parts[i]+\"\\\"\"];\n\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif (frac) fixed = Math.max(fixed, frac[0].length-1);\n\t\t\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\n\tswitch (parts.length) {\n\t\tcase 1:\n\t\t\tbeg = 0;\n\t\t\tend = parts[0];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\n\tif (inc === 0) return [\"range: increment 0 causes infinite loop\"];\n\n\t// May need to count backwards\n\tvar direction = ((end<beg) ? -1 : 1);\n\tinc *= direction;\n\n\t// Estimate number of resulting elements\n\tif ((end-beg)/inc > 10000) return [\"range: too many steps (over 10K)\"];\n\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1, fixed);\n\n\tvar safety = 10010;\n\n\t// Enumerate the range\n\tif (end<beg) {for (i = beg; i > end; i += inc) {results.push(i.toFixed(fixed)); if (--safety<0) break;}}\n\telse {for (i = beg; i < end; i += inc) {results.push(i.toFixed(fixed)); if (--safety<0) break;}}\n\n\tif (safety<0) return [\"range: unexpectedly large output\"];\n\n\t// Reverse?\n\tif (operator.prefix === \"!\") results.reverse();\n\n\treturn results;\n};\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/filters/range.js",
"tags": "",
"module-type": "filteroperator",
"modified": "20171221181907646",
"created": "20171221181646560"
},
"$:/plugins/ebalster/formula/functions/arithmetic.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n\n// Unary sign operators\nexports.uplus = function(a) {return a;};\nexports.uminus = function(a) {return -a;};\nexports.uminus.inCast = 'N';\n\n// Add\nexports.add = function(a, b) {return a + b;};\nexports.add.inCast = 'NN';\nexports.sub = function(a, b) {return a - b;};\nexports.sub.inCast = 'NN';\n\n// Multiply\nexports.mul = function(a, b) {return a * b;};\nexports.mul.inCast = 'NN';\nexports.div = function(a, b) {return a / b;};\nexports.div.inCast = 'NN';\n\n// Percent -- TODO make this a different value-type\nexports.percent = function(a) {return a / 100;};\nexports.percent.inCast = 'N';\n\n\n// Aliases\nexports.subtract = exports.sub;\nexports.minus = exports.sub;\nexports.multiply = exports.mul;\nexports.divide = exports.div;\nexports.quotient = exports.div;\nexports.power = exports.pow;\n\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/arithmetic.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171212223526867",
"created": "20171211192843088"
},
"$:/plugins/ebalster/formula/functions/arrays.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n\n// Array constructor function\nexports.array = function() {\n\treturn Array.prototype.slice.call(arguments);\n};\nexports.array.variadic = true;\n\n\nexports.nth = function(a, i) {\n\ti = Math.floor(i);\n\tif (i < 1 || i > a.length) return undefined;\n\treturn a[i-1];\n};\nexports.nth.inCast = 'AN';\n\nexports.first = function(a) {\n\tif (a.length) return a[0];\n\treturn undefined;\n};\nexports.first.inCast = 'A';\n\nexports.last = function(a) {\n\tif (a.length) return a[a.length-1];\n\treturn undefined;\n};\nexports.last.inCast = 'A';\n\n// MAP function\nexports.map = function(f, a) {\n\tif (f.min_args > 1 || f.max_args < 1) throw \"MAP requires single-argument function.\";\n\tvar result = [];\n\tvar func = f.bind(this);\n\tfor (var i = 0; i < a.length; ++i) result.push(func(a[i]));\n\treturn result;\n};\nexports.map.inCast = 'FA';\n\n\n/*\n\tCounting subroutines...\n\t\tcountA counts every non-array value\n\t\tcountS counts every non-array value but null, undefined and empty strings.\n*/\nfunction countS(a) {\n\tif (!(a instanceof Array)) return (a == null || a.length === 0) ? 0 : 1;\n\tvar n = 0;\n\tfor (var i = 0; i < a.length; ++i) n += countS(a[i]);\n\treturn n;\n}\nfunction countA(a) {\n\tif (!(a instanceof Array)) return 1;\n\tvar n = 0;\n\tfor (var i = 0; i < a.length; ++i) n += countA(a[i]);\n\treturn n;\n}\nfunction countS_multi() {\n\tvar n = 0;\n\tfor (var i = 0; i < arguments.length; ++i) n += countS(arguments[i]);\n\treturn n;\n}\nfunction countA_multi() {\n\tvar n = 0;\n\tfor (var i = 0; i < arguments.length; ++i) n += countA(arguments[i]);\n\treturn n;\n}\nexports.count =\n{\n\tmin_args : 1,\n\tselect : function(operands)\n\t{\n\t\tswitch (operands)\n\t\t{\n\t\tcase 1: return countS;\n\t\tdefault: return countS_multi;\n\t\t}\n\t}\n};\nexports.counta =\n{\n\tmin_args : 1,\n\tselect : function(operands)\n\t{\n\t\tswitch (operands)\n\t\t{\n\t\tcase 1: return countA;\n\t\tdefault: return countA_multi;\n\t\t}\n\t}\n};\n\n// COUNTA function, currently counts everything\nexports.counta = exports.count;\n\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/arrays.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171219014910148",
"created": "20171219014903147"
},
"$:/plugins/ebalster/formula/functions/compare.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n\n// Equality\nexports.eq = function(a, b) {return a == b;};\nexports.ne = function(a, b) {return a != b;};\n\n// Inequality\nexports.gt = function(a, b) {return a > b;};\nexports.gte = function(a, b) {return a >= b;};\nexports.lt = function(a, b) {return a < b;};\nexports.lte = function(a, b) {return a <= b;};\n\n\n// Aliases\nexports.equal = exports.eq;\nexports.not_equal = exports.ne;\nexports.greater = exports.gt;\nexports.greater_or_equal = exports.gte;\nexports.less = exports.lt;\nexports.less_or_equal = exports.lte;\n\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/compare.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171214050803365",
"created": "20171214050022626"
},
"$:/plugins/ebalster/formula/functions/datetime.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n\nvar MS_PER_DAY = 86400000;\nvar MS_PER_HOUR = 3600000;\nvar MS_PER_MINUTE = 60000;\nvar MS_PER_SECOND = 1000;\n\nvar UNIX_EPOCH_JULIAN_DAY = 2440587;\n\n\n/*!\n * isoWeekNum from pikaday <https://github.com/actano/Pikaday>\n */\nfunction isoWeekOfYear(date, dayInFirstWeek) {\n\tdayInFirstWeek = dayInFirstWeek || 4;\n\tdate = date instanceof Date ? date : new Date();\n\tdate.setHours(0, 0, 0, 0);\n\tvar yearDay = date.getDate(),\n\t\tweekDay = date.getDay(),\n\t\tdayShift = dayInFirstWeek - 1, // counting starts at 0\n\t\tprevWeekDay = function(day) { return (day + 7 - 1) % 7; };\n\tdate.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\tvar jan4th = new Date(date.getFullYear(), 0, dayInFirstWeek),\n\t\tdaysBetween = (date.getTime() - jan4th.getTime()) / MS_PER_DAY,\n\t\tweekNum = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / 7);\n\treturn weekNum;\n}\nfunction isLeapYear(year) {\n\treturn year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0);\n}\nfunction daysInYear(year) {\n\treturn isLeapYear(year) ? 366 : 365;\n}\nfunction daysInMonth(year, monthIndex) {\n\tswitch (monthIndex) {\n\tcase 0: case 2: case 4: case 6: case 7: case 9: case 11:return 31;\n\tcase 3: case 5: case 8: case 10: return 30;\n\tcase 1: return (isLeapYear(year) ? 29 : 28);\n\tdefault: throw \"days_in_month: invalid monthIndex: \" + monthIndex;\n\t}\n}\n\n// Utility: Add some months or years to a date\nfunction dateAddMonths(date, monthDiff, yearDiff) {\n\tyearDiff = yearDiff || 0;\n\tvar newMonth = date.getMonth() + Math.round(monthDiff);\n\tvar newYear = date.getFullYear() + Math.round(yearDiff);\n\n\tvar yearShift = ((newMonth < 0) ? -Math.floor(-(newMonth-11)/12) : Math.floor(newMonth/12));\n\tnewYear += yearShift;\n\tnewMonth -= 12*yearShift;\n\n\treturn new Date(newYear, newMonth,\n\t\tMath.min(date.getDate(), daysInMonth(newYear, newMonth)),\n\t\tdate.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n}\n\n// Utility: Get date difference in whole years and months\nfunction dateDelta(date1, date2) {\n\tif (date2.getTime() < date1.getTime())\n\t{\n\t\tvar d = dateDelta(date2, date1);\n\t\treturn {years: -d.years, months: -d.months};\n\t}\n\tvar dMonths = 12*(date2.getYear()-date1.getYear()) + (date2.getMonth()-date1.getMonth());\n\tif (date2.getDate() < date1.getDate()) dMonths -= 1;\n\tvar dYears = Math.floor(dMonths/12);\n\t//dMonths -= dYears*12;\n\t/*var dDays = (new Date(\n\t\tdate1.getFullYear()+dYears, date1.getMonth()+dMonths, date2.getDate(),\n\t\tdate2.getHours(), date2.getMinutes(), date2.getSeconds(), date2.getMilliseconds()\n\t\t).getTime() - date1.getTime()) / MS_PER_DAY;*/\n\treturn {years: dYears, months: dMonths};\n}\n\n\n// Get the current time\nexports.now = function() {return new Date(Date.now());};\n\n// Decompose dates\nexports.year = function(d) {return (d.getFullYear());};\nexports.year.inCast = 'D';\nexports.month = function(d) {return (d.getMonth()+1);};\nexports.month.inCast = 'D';\nexports.day = function(d) {return (d.getDate());};\nexports.day.inCast = 'D';\nexports.hour = function(d) {return (d.getHours());};\nexports.hour.inCast = 'D';\nexports.minute = function(d) {return (d.getMinutes());};\nexports.minute.inCast = 'D';\nexports.second = function(d) {return (d.getSeconds());};\nexports.second.inCast = 'D';\nexports.millisecond = function(d) {return (d.getMilliseconds());};\nexports.millisecond.inCast = 'D';\n\n// Week functions\nexports.weekday = function(d) {return (d.getDay()+1);};\nexports.weekday.inCast = 'D';\nexports.weeknum = function(d) {return (isoWeekOfYear(d, 1));};\nexports.weeknum.inCast = 'D';\nexports.isoweekday = function(d) {return ((d.getDay()+6) % 7 + 1);};\nexports.isoweekday.inCast = 'D';\nexports.isoweeknum = function(d) {return (isoWeekOfYear(d));};\nexports.isoweeknum.inCast = 'D';\n\n\n/*\n\tDate math\n*/\nfunction makeTimeDiffFunction(milliseconds) {\n\tvar f = function(a, b) {return (b.getTime() - a.getTime()) / milliseconds;};\n\tf.inCast = 'DD';\n\treturn f;\n}\nfunction makeTimeAddFunction(milliseconds) {\n\tvar f = function(a, b) {return new Date(a.getTime() + b * milliseconds);};\n\tf.inCast = 'DN';\n\treturn f;\n}\n\nexports.years = function(a, b) {return dateDelta(a, b).years;};\nexports.years.inCast = 'DD';\nexports.months = function(a, b) {return dateDelta(a, b).months;};\nexports.months.inCast = 'DD';\nexports.days = makeTimeDiffFunction(MS_PER_DAY);\nexports.hours = makeTimeDiffFunction(MS_PER_HOUR);\nexports.minutes = makeTimeDiffFunction(MS_PER_MINUTE);\nexports.seconds = makeTimeDiffFunction(MS_PER_SECOND);\nexports.milliseconds = makeTimeDiffFunction(1);\n\nexports.add_years = function(a, b) {return dateAddMonths(a, 0, b);};\nexports.add_years.inCast = 'DN';\nexports.add_months = function(a, b) {return dateAddMonths(a, b);};\nexports.add_months.inCast = 'DN';\nexports.add_days = makeTimeAddFunction(MS_PER_DAY);\nexports.add_hours = makeTimeAddFunction(MS_PER_HOUR);\nexports.add_minutes = makeTimeAddFunction(MS_PER_MINUTE);\nexports.add_seconds = makeTimeAddFunction(MS_PER_SECOND);\nexports.add_milliseconds = makeTimeAddFunction(1);\n\nexports.is_leap_year = function(year) {return (isLeapYear(year));};\nexports.is_leap_year.inCast = 'N';\nexports.days_in_year = function(year) {return (daysInYear(year));};\nexports.days_in_year.inCast = 'N';\nexports.days_in_month = function(yr, mon) {return (daysInMonth(yr, mon-1));};\nexports.days_in_month.inCast = 'NN';\n\n/*exports.datedif = function(a, b, c) {\n\tswitch (c.toUpperCase())\n\t{\n\tcase \"D\": return ((b.getTime() - a.getTime()) / MS_PER_DAY);\n\tcase \"M\": {var d=dateDelta(a, b); return d.months+12*d.years;}\n\tcase \"Y\": return dateDelta(a, b).years;\n\tcase \"YM\": return dateDelta(a, b).months;\n\tcase \"MD\": return dateDelta(a, b).days;\n\t}\n};\nexports.datedif.inCast = 'DDT';*/\n\n\n// Parse TiddlyWiki date\nexports.tw_date = function(timestamp) {\n\tvar date = $tw.utils.parseDate(timestamp);\n\tif (!date) throw \"Bad timestamp: \\\"\" + date + \"\\\"\";\n\treturn (date);\n};\nexports.tw_date.inCast = 'T';\n\n// Stringify as TiddlyWiki date\nexports.to_tw_date = function(date) {\n\treturn $tw.utils.stringifyDate(date);\n};\nexports.to_tw_date.inCast = 'D';\n\n// Create ISO date\nexports.make_date = function(year, month, day) {\n\treturn (new Date(year, month-1, day));\n};\nexports.make_date.inCast = 'NNN';\n\n// Create ISO time\nexports.make_time = function(hour, minute, second) {\n\treturn (new Date(0, 0, 0, hour, minute, second));\n};\nexports.make_time.inCast = 'NNN';\n\n// Create from julian\nexports.julian = function(julian) {\n\treturn (new Date((julian - UNIX_EPOCH_JULIAN_DAY) * MS_PER_DAY));\n};\nexports.julian.inCast = 'N';\n\n// Convert to julian\nexports.to_julian = function(date) {\n\treturn (UNIX_EPOCH_JULIAN_DAY + (date.getTime() / MS_PER_DAY));\n};\nexports.to_julian.inCast = 'D';\n\nexports.time = exports.make_time;\n\n\n// Cast the incoming value into a date.\nfunction interpret_date(a) {\n\tif (a instanceof Date) return a;\n\treturn exports.tw_date(a);\n}\ninterpret_date.inCast = 'D';\n\n\n// Consruct a date from a TiddlyWiki timestamp or a set of parts\nexports.date = {\n\tmin_args: 1, max_args: 3,\n\tselect: function(operands) {\n\t\tswitch (operands.length) {\n\t\tcase 1: return interpret_date;\n\t\tcase 3: return exports.make_date;\n\t\tdefault: throw \"Bad arguments to DATE. Should be (timestamp) or (year, month, day).\";\n\t\t}\n\t}\n};\n\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/datetime.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171217192149101",
"created": "20171217192129179"
},
"$:/plugins/ebalster/formula/functions/logic.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Node = require(\"$:/plugins/ebalster/formula/nodes.js\").Node;\n\n\n// Constants\nexports.true = function() {return true;};\nexports.false = function() {return false;};\n\nexports.true.isConstant = true;\nexports.false.isConstant = true;\n\n// Logical operators\nexports.not = function(a) {return !a;};\nexports.not.inCast = 'B';\nexports.and = function(a, b) {return a && b;};\nexports.and.inCast = 'BB';\nexports.or = function(a, b) {return a || b;};\nexports.or .inCast = 'BB';\nexports.xor = function(a, b) {return a ? !b : b;};\nexports.xor.inCast = 'BB';\n\n// Ternary\nfunction IfNode(pred, tval, fval) {\n\tthis.pred = pred;\n\tthis.tval = tval;\n\tthis.fval = fval;\n}\nIfNode.prototype = new Node();\nIfNode.prototype.name = \"if\";\nIfNode.prototype.compute = (function(ctx) {\n\treturn (this.pred.computeBool(ctx) ? this.tval.compute(ctx) : this.fval.compute(ctx));\n});\nexports.if = {\n\tmin_args: 3, max_args: 3,\n\tconstruct: function(operands) {\n\t\treturn new IfNode(operands[0], operands[1], operands[2]);\n\t}\n};\n\n\n// IFERROR\n/*exports.iferror = {\n\tmin_args = 2, max_args = 2,\n\tfunc = function(a, b) {\n\tselect: function(operands) {\n\t\ttry {return a.compute();}\n\t\tcatch (err) {return b.compute();}\n\t}\n\t};*/\n\n\n// SWITCH (variadic)\nexports.switch =\n{\n\tmin_args: 3,\n\tselect: function(operands)\n\t{\n\t\tswitch (operands.length % 2)\n\t\t{\n\t\tdefault:\n\t\tcase 0: return function(a) // Switch with default\n\t\t\t{\n\t\t\t\tvar value = a;\n\t\t\t\tfor (var i = 1; i+1 < arguments.length; i += 2)\n\t\t\t\t\t{if (arguments[i] == value) return arguments[i+1];}\n\t\t\t\treturn arguments[arguments.length-1];\n\t\t\t};\n\t\tcase 1: return function(a) // Switch, no default\n\t\t\t{\n\t\t\t\tvar value = a;\n\t\t\t\tfor (var i = 1; i+1 < arguments.length; i += 2)\n\t\t\t\t\t{if (arguments[i] == value) return arguments[i+1];}\n\t\t\t\treturn undefined;\n\t\t\t};\n\t\t}\n\t}\n};\n\n// CHOOSE (variadic)\nexports.choose = function(a, b)\n{\n\tvar index = Math.floor(a);\n\tvar result = arguments[index];\n\tif (index < 1 || !result) return undefined;\n\treturn result;\n};\nexports.choose.inCast = 'N';\nexports.choose.variadic = true;\n\n// IFS function (variadic)\nfunction ifsFunc() {\n\tfor (var i = 0; i < arguments.length; i += 2)\n\t\t{if (arguments[i]) return arguments[i+1];}\n\treturn undefined;\n};\nifsFunc.inCast = '+B_';\n\nexports.ifs =\n{\n\tmin_args : 2,\n\tinput: '+B_',\n\tselect : function(operands) {\n\t\tif (operands.length % 2 !== 0) throw \"Odd number of arguments to IFS\";\n\t\treturn ifsFunc;\n\t}\n};\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/logic.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171214060456114",
"created": "20171214054240274"
},
"$:/plugins/ebalster/formula/functions/math.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Coerce = require(\"$:/plugins/ebalster/formula/coerce.js\");\n\n\n// Constants\nexports.pi = function() {return (Math.PI);};\nexports._e = function() {return (Math.E);};\n\nexports.pi.isConstant = true;\nexports._e.isConstant = true;\n\n\n// Random\nexports.rand = function() {return Math.random();};\nexports.randbetween = function(a, b) {return (a+(b-a)*Math.random());};\nexports.randbetween.inCast = 'NN';\nexports.random = exports.rand;\n\n\n// Sign and absolute value\nexports.abs = function(a) {return Math.abs(a);};\nexports.abs.inCast = 'N';\nexports.sign = function(x) {return (((x > 0) - (x < 0)) || +x);};\nexports.sign.inCast = 'N';\n\n// Min/max\nexports.min = function(a)\n{\n\tvar min = a;\n\tfor (var i = 1; i < arguments.length; ++i) min = Math.min(min, arguments[i]);\n\treturn min;\n};\nexports.min.variadic = true;\nexports.min.inCast = '+N';\n\nexports.max = function(a)\n{\n\tvar max = a;\n\tfor (var i = 1; i < arguments.length; ++i) max = Math.max(max, arguments[i]);\n\treturn max;\n};\nexports.max.variadic = true;\nexports.max.inCast = '+N';\n\nexports.clamp = function(a, min, max) {\n\treturn (Math.min(Math.max(a, min), max));\n};\nexports.clamp.inCast = 'NNN';\n\n\n/*\n\tSeries arithmetic\n*/\nfunction Count(a) {\n\tif (a instanceof Array) {\n\t\tvar n = 0;\n\t\tfor (var i = 0; i < a.length; ++i) n += Count(a[i]);\n\t\treturn n;\n\t}\n\treturn 1;\n}\nfunction Sum(a) {\n\tif (a instanceof Array) {\n\t\tvar n = 0;\n\t\tfor (var i = 0; i < a.length; ++i) n += Sum(a[i]);\n\t\treturn n;\n\t}\n\treturn Coerce.ToNum(a,this);\n}\nfunction Product(a) {\n\tif (a instanceof Array) {\n\t\tvar n = 1;\n\t\tfor (var i = 0; i < a.length; ++i) n *= Product(a[i]);\n\t\treturn n;\n\t}\n\treturn Coerce.ToNum(a,this);\n}\nfunction Average(a) {\n\treturn Sum(a) / Count(a);\n}\n\nfunction GenSeriesFunc(func) {\n\treturn {\n\t\tmin_args : 1,\n\t\tselect : function(operands) {\n\t\t\tswitch (operands.length) {\n\t\t\tcase 1: return func;\n\t\t\tdefault: return function() {return func(Array.prototype.slice.call(arguments));};\n\t\t\t}\n\t\t}\n\t};\n}\n\nexports.sum = GenSeriesFunc(Sum);\nexports.average = GenSeriesFunc(Average);\nexports.product = GenSeriesFunc(Product);\n\n\n/*\n\tExponential\n*/\n\n// Exponentiation and logarithm\nexports.pow = function(a, b) {return (Math.pow(a, b));};\nexports.pow.inCast = 'NN';\nexports.log = function(a, b) {return (Math.log(a) / Math.log(b));};\nexports.log.inCast = 'NN';\nexports.exp = function(a) {return (Math.exp(a));};\nexports.exp.inCast = 'N';\nexports.ln = function(a) {return (Math.log(a));};\nexports.ln.inCast = 'N';\nexports.log2 = function(a) {return (Math.log2(a));};\nexports.log2.inCast = 'N';\nexports.log10 = function(a) {return (Math.log10(a));};\nexports.log10.inCast = 'N';\n\nexports.power = exports.pow;\n\n// Precise exponentiation and logarithm\nexports.expm1 = function(a) {return (Math.expm1(a));};\nexports.expm1.inCast = 'N';\nexports.log1p = function(a) {return (Math.log1p(a));};\nexports.log1p.inCast = 'N';\n\n// Roots\nexports.sqrt = function(a) {return (Math.sqrt(a));};\nexports.sqrt.inCast = 'N';\nexports.cbrt = function(a) {return (Math.cbrt(a));};\nexports.cbrt.inCast = 'N';\n\n\n/*\n\tTrigonometry\n*/\n\n// Conversion\nexports.radians = function(a) {return (Math.PI*a/180);};\nexports.radians.inCast = 'N';\nexports.degrees = function(a) {return (180*a/Math.PI);};\nexports.degrees.inCast = 'N';\n\n// Trigonometry\nexports.sin = function(a) {return ( Math.sin(a));};\nexports.sin.inCast = 'N';\nexports.cos = function(a) {return ( Math.cos(a));};\nexports.cos.inCast = 'N';\nexports.tan = function(a) {return ( Math.tan(a));};\nexports.tan.inCast = 'N';\nexports.csc = function(a) {return (1/Math.sin(a));};\nexports.csc.inCast = 'N';\nexports.sec = function(a) {return (1/Math.cos(a));};\nexports.sec.inCast = 'N';\nexports.cot = function(a) {return (1/Math.tan(a));};\nexports.cot.inCast = 'N';\n\n// Inverse Trigonometry\nexports.asin = function(a) {return (Math.asin( a));};\nexports.asin.inCast = 'N';\nexports.acos = function(a) {return (Math.acos( a));};\nexports.acos.inCast = 'N';\nexports.atan = function(a) {return (Math.atan( a));};\nexports.atan.inCast = 'N';\nexports.acsc = function(a) {return (Math.asin(1/a));};\nexports.acsc.inCast = 'N';\nexports.asec = function(a) {return (Math.acos(1/a));};\nexports.asec.inCast = 'N';\nexports.acot = function(a) {return (Math.atan(1/a));};\nexports.acot.inCast = 'N';\nexports.atan2 = function(y,x) {return (Math.atan2(y, x));};\nexports.atan2.inCast = 'NN';\n\n// Hyperbolic Trigonometry\nexports.sinh = function(a) {return ( Math.sinh(a));};\nexports.sinh.inCast = 'N';\nexports.cosh = function(a) {return ( Math.cosh(a));};\nexports.cosh.inCast = 'N';\nexports.tanh = function(a) {return ( Math.tanh(a));};\nexports.tanh.inCast = 'N';\nexports.csch = function(a) {return (1/Math.sinh(a));};\nexports.csch.inCast = 'N';\nexports.sech = function(a) {return (1/Math.cosh(a));};\nexports.sech.inCast = 'N';\nexports.coth = function(a) {return (1/Math.tanh(a));};\nexports.coth.inCast = 'N';\n\n// Inverse Hyperbolic Trigonometry\nexports.asinh = function(a) {return (Math.asinh( a));};\nexports.asinh.inCast = 'N';\nexports.acosh = function(a) {return (Math.acosh( a));};\nexports.acosh.inCast = 'N';\nexports.atanh = function(a) {return (Math.atanh( a));};\nexports.atanh.inCast = 'N';\nexports.acsch = function(a) {return (Math.asinh(1/a));};\nexports.acsch.inCast = 'N';\nexports.asech = function(a) {return (Math.acosh(1/a));};\nexports.asech.inCast = 'N';\nexports.acoth = function(a) {return (Math.atanh(1/a));};\nexports.acoth.inCast = 'N';\n\n/*\n\tRounding, ceiling and floor functions.\n\t\tSpecial measures were taken to reproduce the conventions.\n*/\n\nvar signedFloor = Math.trunc || function(n) {return (n<0) ? Math.ceil (n) : Math.floor(n);};\nvar signedCeil = function(n) {return (n<0) ? Math.floor(n) : Math.ceil (n);};\n\nfunction genCeilFloor(func) {\n\tvar by1 = function(a) {return func(a);},\n\t\tbyN = function(a, b) {var prec = b; return (func(a/prec) * prec);};\n\tby1.inCast = 'NN';\n\tbyN.inCast = 'NN';\n\treturn {\n\t\tmin_args : 1, max_args : 2,\n\t\tinput: 'NN',\n\t\tselect: function(operands) {\n\t\t\tswitch (operands.length)\n\t\t\t{\n\t\t\tcase 1: return by1;\n\t\t\tcase 2: return byN;\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction genRound(func) {\n\tvar lndigit = Math.log(0.1);\n\tvar by1 = function(a) {return func(a);},\n\t\tbyN = function(a, b) {var prec = Math.exp(lndigit*b); return (func(a/prec) * prec);};\n\tby1.inCast = 'NN';\n\tbyN.inCast = 'NN';\n\treturn {\n\t\tmin_args : 1, max_args : 2,\n\t\tinput: 'NN',\n\t\tselect: function(operands) {\n\t\t\tswitch (operands.length)\n\t\t\t{\n\t\t\tcase 1: return by1;\n\t\t\tcase 2: return byN;\n\t\t\t}\n\t\t}\n\t};\n}\n\nexports.floor = genCeilFloor(Math.floor);\nexports.ceil = genCeilFloor(Math.ceil);\n//exports.floor_precise = genCeilFloor(Math.floor);\n//exports.ceil_precise = genCeilFloor(Math.ceil);\nexports.round = genRound(Math.round);\nexports.roundup = genRound(signedCeil);\nexports.rounddown = genRound(signedFloor);\nexports.trunc = exports.rounddown;\n\n// Related functions\nexports.fract = function(a) {return (a-signedFloor(a));};\nexports.fract.inCast = 'NN';\nexports.modulo = function(a,b) {return (a-b*Math.floor(a/b));};\nexports.modulo.inCast = 'NN';\n\nexports.mod = exports.modulo;\n\n\n/*\n\tInterpolation\n*/\nexports.mix = function(a,b,m) {return (a + (b-a) * m);};\nexports.mix.inCast = 'NNN';\n\nexports.step = function(e,x) {return ((x<e) ? 0.0 : 1.0);};\nexports.step.inCast = 'NN';\n\nexports.smoothstep = function(e0,e1,x) {\n\tif (x < e0) return (0.0);\n\tif (x > e1) return (1.0);\n\tx = (x-e0) / (e1-e0);\n\treturn (3*x*x - 2*x*x*x);\n};\nexports.smoothstep.inCast = 'NNN';\n\n\n/*\n\tAlgorithms\n*/\nexports.gcd = function(a,b) {\n\ta = Math.abs(Math.round(a));\n\tb = Math.abs(Math.round(b));\n\tif (b > a) {var temp = a; a = b; b = temp;}\n\tvar limit = 1000;\n\twhile (true) {\n\t\tif (b == 0) return a;\n\t\ta %= b;\n\t\tif (a == 0) return b;\n\t\tb %= a;\n\t\tif (--limit < 0) throw \"GCD function is nonterminal!\";\n\t}\n};\nexports.gcd.inCast = 'NN';\n\nexports.lcm = function(a,b) {\n\ta = Math.abs(Math.round(a));\n\tb = Math.abs(Math.round(b));\n\treturn (!a || !b) ? 0 : Math.abs((a * b) / exports.gcd(a, b));\n};\nexports.lcm.inCast = 'NN';\n\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/math.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171214171708994",
"created": "20171214171454666"
},
"$:/plugins/ebalster/formula/functions/regexp.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n\n// Compile regex. TODO: Precompile these where possible\n/*var TW_RX_FLAGS = /^\\(\\?[a-z]*\\)|\\(\\?[a-z]*\\)$/i;\n\nfunction tw_regex(rx_str, defaultFlags) {\n\tif (!rx_str) throw \"Empty regular expression\";\n\tvar flagPart = TW_RX_FLAGS.exec(rx_str);\n\tif (flagPart) {\n\t\tvar flagLen = flagPart[0].length;\n\t\tvar flags = flagPart[0].substr(2, flagPart[0].length-3);\n\t\tif (flagPart.index == 0) return new RegExp(rx_str.substr(flagLen), flags);\n\t\telse return new RegExp(rx_str.substr(0, rx_str.length-flagLen), flags);\n\t}\n\treturn new RegExp(rx_str, defaultFlags);\n}*/\n\n\n// Regex replace\nexports.regexreplace = function(s, rx, b) {\n\t//rx = tw_regex(rx, \"g\");\n\trx.lastIndex = 0;\n\treturn s.replace(rx, b);\n};\nexports.regexreplace.inCast = 'TRT';\n\n// Regex match\nexports.regexmatch = function(s, rx) {\n\t//rx = tw_regex(rx, \"\");\n\trx.lastIndex = 0;\n\treturn rx.test(s);\n};\nexports.regexmatch.inCast = 'TR';\n\n// Regex extract\nfunction regexextract(s, rx) {\n\t//rx = tw_regex(rx, \"g\");\n\trx.lastIndex = 0;\n\ts = s;\n\tvar captureIndex = arguments[2] || 0;\n\tvar matches = [];\n\tvar match;\n\twhile ((match = rx.exec(s)) != null) {\n\t\tif (match[0].length == 0) ++rx.lastIndex;\n\t\tmatches.push(match[captureIndex] || \"\");\n\t\tif (!rx.global) break;\n\t}\n\treturn matches;\n}\nregexextract.inCast = 'TRN';\n\nexports.regexextract = {\n\tmin_args: 2, max_args: 3,\n\tselect: function(operands) {return regexextract;}\n};\n\n// Regex extract, single argument\nfunction regexextract1(s, rx, dfl) {\n\t//rx = tw_regex(rx, \"\");\n\trx.lastIndex = 0;\n\ts = s;\n\tvar captureIndex = arguments[3] || 0;\n\tvar match = rx.exec(s);\n\treturn (match && match[captureIndex]) ? match[captureIndex] : dfl;\n}\nregexextract1.inCast = 'TRTN';\n\nexports.regexextract1 = {\n\tmin_args: 3, max_args: 4,\n\tselect: function(operands) {return regexextract1;}\n};\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/regexp.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171220230855457",
"created": "20171220230845098"
},
"$:/plugins/ebalster/formula/functions/strings.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Coerce = require(\"$:/plugins/ebalster/formula/coerce.js\");\n\n\n// Cast to text. Second argument not yet supported.\nexports.t = function(a) {return a;};\nexports.t.inCast = 'T';\n\nfunction t_format(a, format) {return a;}\nt_format.inCast = 'TT';\n\nexports.text = {\n\tmin_args: 1, max_args: 1,\n\tinput: 'TT',\n\tselect: function(operands) {\n\t\tif (operands.length == 1) return exports.t;\n\t\treturn t_format;\n\t}\n};\n\n// Cast string to number.\nexports.value = function(a) {return a;};\nexports.inCast = 'N';\n\n// Array to string\nvar JoinFunc = function(delimiter, ignore_empty, array, startIndex) {\n\tvar join = \"\", part;\n\tfor (var i = startIndex; i < array.length; ++i)\n\t{\n\t\tvar arg = array[i];\n\t\tif (arg instanceof Array) {\n\t\t\tpart = JoinFunc(delimiter, ignore_empty, arg, 0);\n\t\t}\n\t\telse {\n\t\t\tpart = Coerce.ToText(arg,this);\n\t\t}\n\t\tif (part.length || !ignore_empty) {\n\t\t\tif (join.length) join += delimiter;\n\t\t\tjoin += part;\n\t\t}\n\t}\n\treturn join;\n};\n\n// Join\nexports.join = function(delimiter) {\n\treturn JoinFunc.call(this, delimiter, false, arguments, 1);\n};\nexports.join.variadic = true;\nexports.join.inCast = 'T';\n\n// Textjoin\nexports.textjoin = function(delimiter, ignore_empty) {\n\treturn JoinFunc.call(this, delimiter, ignore_empty, arguments, 2);\n};\nexports.textjoin.variadic = true;\nexports.textjoin.inCast = 'T';\n\n// Split string to array\nexports.split = function(str, delimiter) {\n\treturn str.split(delimiter);\n};\nexports.split.inCast = 'T';\n\n// String length\nexports.len = function(str) {return str.length;};\nexports.len.inCast = 'T';\n\n// String exact match\nexports.exact = function(a, b) {return a === b;};\nexports.exact.inCast = 'TT';\n\n\n// Substrings\nexports.mid = function(str, i, n) {return str.substr(i-1, n);};\nexports.exact.inCast = 'TNN';\n\nexports.substr = exports.mid;\n\n\n// Substitute\nexports.substitute = function(s, f, r) {return s.split(f).join(r);};\nexports.substitute.inCast = 'TTT';\n\n// Replace (N/I)\n//exports.replace = function(s, p, l, r) {return (s.splice(a, b));};\n\n\n// Concatenate\nexports.cat = function(a, b) {return a + b;};\nexports.cat.inCast = 'TT';\n\n// Trim space\nexports.trim = function(a) {return a.split(/^\\s+|\\s+$/g).join(\"\");};\nexports.trim.inCast = 'T';\n\n\n// Aliases\nexports.concatenate = exports.cat;\n\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/strings.js",
"tags": "",
"module-type": "formula-function",
"modified": "20171213003237206",
"created": "20171213003135495"
},
"$:/plugins/ebalster/formula/functions/wiki.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Nodes = require(\"$:/plugins/ebalster/formula/nodes.js\");\n\n\n// Get variable string by name.\nexports.transclude = {\n\tmin_args: 1, max_args: 2,\n\tconstruct: function(operands) {\n\t\tswitch (operands.length) {\n\t\t\tcase 1: return new Nodes.TranscludeText(operands[0]);\n\t\t\tcase 2: return new Nodes.TranscludeField(operands[0], operands[1]);\n\t\t}\n\t}\n};\n\n// Transclude tiddler text string by name.\nexports.transclude_index = {\n\tmin_args: 2, max_args: 2,\n\tconstruct: function(operands) {return new Nodes.TranscludeIndex(operands[0], operands[1]);}\n};\n\n// Transclude field string by name.\nexports.variable = {\n\tmin_args: 1, max_args: 1,\n\tconstruct: function(operands) {return new Nodes.Variable(operands[0]);}\n};\n\n// Interpret value as a datum.\nexports.datum = {\n\tmin_args: 1, max_args: 1,\n\tconstruct: function(operands) {return new Nodes.Datum(operands[0]);}\n};\n\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/functions/wiki.js",
"tags": "",
"module-type": "formula-function",
"modified": "20180108012007186",
"created": "20180108011928370"
},
"$:/plugins/ebalster/formula/lib/numeral.js": {
"text": "/*! @preserve\n * numeral.js\n * version : 2.0.6\n * author : Adam Draper\n * license : MIT\n * http://adamwdraper.github.com/Numeral-js/\n */\n!function(a,b){\"function\"==typeof define&&define.amd?define(b):\"object\"==typeof module&&module.exports?module.exports=b():a.numeral=b()}(this,function(){function a(a,b){this._input=a,this._value=b}var b,c,d=\"2.0.6\",e={},f={},g={currentLocale:\"en\",zeroFormat:null,nullFormat:null,defaultFormat:\"0,0\",scalePercentBy100:!0},h={currentLocale:g.currentLocale,zeroFormat:g.zeroFormat,nullFormat:g.nullFormat,defaultFormat:g.defaultFormat,scalePercentBy100:g.scalePercentBy100};return b=function(d){var f,g,i,j;if(b.isNumeral(d))f=d.value();else if(0===d||\"undefined\"==typeof d)f=0;else if(null===d||c.isNaN(d))f=null;else if(\"string\"==typeof d)if(h.zeroFormat&&d===h.zeroFormat)f=0;else if(h.nullFormat&&d===h.nullFormat||!d.replace(/[^0-9]+/g,\"\").length)f=null;else{for(g in e)if(j=\"function\"==typeof e[g].regexps.unformat?e[g].regexps.unformat():e[g].regexps.unformat,j&&d.match(j)){i=e[g].unformat;break}i=i||b._.stringToNumber,f=i(d)}else f=Number(d)||null;return new a(d,f)},b.version=d,b.isNumeral=function(b){return b instanceof a},b._=c={numberToFormat:function(a,c,d){var e,g,h,i,j,k,l,m=f[b.options.currentLocale],n=!1,o=!1,p=0,q=\"\",r=1e12,s=1e9,t=1e6,u=1e3,v=\"\",w=!1;if(a=a||0,g=Math.abs(a),b._.includes(c,\"(\")?(n=!0,c=c.replace(/[\\(|\\)]/g,\"\")):(b._.includes(c,\"+\")||b._.includes(c,\"-\"))&&(j=b._.includes(c,\"+\")?c.indexOf(\"+\"):0>a?c.indexOf(\"-\"):-1,c=c.replace(/[\\+|\\-]/g,\"\")),b._.includes(c,\"a\")&&(e=c.match(/a(k|m|b|t)?/),e=e?e[1]:!1,b._.includes(c,\" a\")&&(q=\" \"),c=c.replace(new RegExp(q+\"a[kmbt]?\"),\"\"),g>=r&&!e||\"t\"===e?(q+=m.abbreviations.trillion,a/=r):r>g&&g>=s&&!e||\"b\"===e?(q+=m.abbreviations.billion,a/=s):s>g&&g>=t&&!e||\"m\"===e?(q+=m.abbreviations.million,a/=t):(t>g&&g>=u&&!e||\"k\"===e)&&(q+=m.abbreviations.thousand,a/=u)),b._.includes(c,\"[.]\")&&(o=!0,c=c.replace(\"[.]\",\".\")),h=a.toString().split(\".\")[0],i=c.split(\".\")[1],k=c.indexOf(\",\"),p=(c.split(\".\")[0].split(\",\")[0].match(/0/g)||[]).length,i?(b._.includes(i,\"[\")?(i=i.replace(\"]\",\"\"),i=i.split(\"[\"),v=b._.toFixed(a,i[0].length+i[1].length,d,i[1].length)):v=b._.toFixed(a,i.length,d),h=v.split(\".\")[0],v=b._.includes(v,\".\")?m.delimiters.decimal+v.split(\".\")[1]:\"\",o&&0===Number(v.slice(1))&&(v=\"\")):h=b._.toFixed(a,0,d),q&&!e&&Number(h)>=1e3&&q!==m.abbreviations.trillion)switch(h=String(Number(h)/1e3),q){case m.abbreviations.thousand:q=m.abbreviations.million;break;case m.abbreviations.million:q=m.abbreviations.billion;break;case m.abbreviations.billion:q=m.abbreviations.trillion}if(b._.includes(h,\"-\")&&(h=h.slice(1),w=!0),h.length<p)for(var x=p-h.length;x>0;x--)h=\"0\"+h;return k>-1&&(h=h.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g,\"$1\"+m.delimiters.thousands)),0===c.indexOf(\".\")&&(h=\"\"),l=h+v+(q?q:\"\"),n?l=(n&&w?\"(\":\"\")+l+(n&&w?\")\":\"\"):j>=0?l=0===j?(w?\"-\":\"+\")+l:l+(w?\"-\":\"+\"):w&&(l=\"-\"+l),l},stringToNumber:function(a){var b,c,d,e=f[h.currentLocale],g=a,i={thousand:3,million:6,billion:9,trillion:12};if(h.zeroFormat&&a===h.zeroFormat)c=0;else if(h.nullFormat&&a===h.nullFormat||!a.replace(/[^0-9]+/g,\"\").length)c=null;else{c=1,\".\"!==e.delimiters.decimal&&(a=a.replace(/\\./g,\"\").replace(e.delimiters.decimal,\".\"));for(b in i)if(d=new RegExp(\"[^a-zA-Z]\"+e.abbreviations[b]+\"(?:\\\\)|(\\\\\"+e.currency.symbol+\")?(?:\\\\))?)?$\"),g.match(d)){c*=Math.pow(10,i[b]);break}c*=(a.split(\"-\").length+Math.min(a.split(\"(\").length-1,a.split(\")\").length-1))%2?1:-1,a=a.replace(/[^0-9\\.]+/g,\"\"),c*=Number(a)}return c},isNaN:function(a){return\"number\"==typeof a&&isNaN(a)},includes:function(a,b){return-1!==a.indexOf(b)},insert:function(a,b,c){return a.slice(0,c)+b+a.slice(c)},reduce:function(a,b){if(null===this)throw new TypeError(\"Array.prototype.reduce called on null or undefined\");if(\"function\"!=typeof b)throw new TypeError(b+\" is not a function\");var c,d=Object(a),e=d.length>>>0,f=0;if(3===arguments.length)c=arguments[2];else{for(;e>f&&!(f in d);)f++;if(f>=e)throw new TypeError(\"Reduce of empty array with no initial value\");c=d[f++]}for(;e>f;f++)f in d&&(c=b(c,d[f],f,d));return c},multiplier:function(a){var b=a.toString().split(\".\");return b.length<2?1:Math.pow(10,b[1].length)},correctionFactor:function(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var d=c.multiplier(b);return a>d?a:d},1)},toFixed:function(a,b,c,d){var e,f,g,h,i=a.toString().split(\".\"),j=b-(d||0);return e=2===i.length?Math.min(Math.max(i[1].length,j),b):j,g=Math.pow(10,e),h=(c(a+\"e+\"+e)/g).toFixed(e),d>b-e&&(f=new RegExp(\"\\\\.?0{1,\"+(d-(b-e))+\"}$\"),h=h.replace(f,\"\")),h}},b.options=h,b.formats=e,b.locales=f,b.locale=function(a){return a&&(h.currentLocale=a.toLowerCase()),h.currentLocale},b.localeData=function(a){if(!a)return f[h.currentLocale];if(a=a.toLowerCase(),!f[a])throw new Error(\"Unknown locale : \"+a);return f[a]},b.reset=function(){for(var a in g)h[a]=g[a]},b.zeroFormat=function(a){h.zeroFormat=\"string\"==typeof a?a:null},b.nullFormat=function(a){h.nullFormat=\"string\"==typeof a?a:null},b.defaultFormat=function(a){h.defaultFormat=\"string\"==typeof a?a:\"0.0\"},b.register=function(a,b,c){if(b=b.toLowerCase(),this[a+\"s\"][b])throw new TypeError(b+\" \"+a+\" already registered.\");return this[a+\"s\"][b]=c,c},b.validate=function(a,c){var d,e,f,g,h,i,j,k;if(\"string\"!=typeof a&&(a+=\"\",console.warn&&console.warn(\"Numeral.js: Value is not string. It has been co-erced to: \",a)),a=a.trim(),a.match(/^\\d+$/))return!0;if(\"\"===a)return!1;try{j=b.localeData(c)}catch(l){j=b.localeData(b.locale())}return f=j.currency.symbol,h=j.abbreviations,d=j.delimiters.decimal,e=\".\"===j.delimiters.thousands?\"\\\\.\":j.delimiters.thousands,k=a.match(/^[^\\d]+/),null!==k&&(a=a.substr(1),k[0]!==f)?!1:(k=a.match(/[^\\d]+$/),null!==k&&(a=a.slice(0,-1),k[0]!==h.thousand&&k[0]!==h.million&&k[0]!==h.billion&&k[0]!==h.trillion)?!1:(i=new RegExp(e+\"{2}\"),a.match(/[^\\d.,]/g)?!1:(g=a.split(d),g.length>2?!1:g.length<2?!!g[0].match(/^\\d+.*\\d$/)&&!g[0].match(i):1===g[0].length?!!g[0].match(/^\\d+$/)&&!g[0].match(i)&&!!g[1].match(/^\\d+$/):!!g[0].match(/^\\d+.*\\d$/)&&!g[0].match(i)&&!!g[1].match(/^\\d+$/))))},b.fn=a.prototype={clone:function(){return b(this)},format:function(a,c){var d,f,g,i=this._value,j=a||h.defaultFormat;if(c=c||Math.round,0===i&&null!==h.zeroFormat)f=h.zeroFormat;else if(null===i&&null!==h.nullFormat)f=h.nullFormat;else{for(d in e)if(j.match(e[d].regexps.format)){g=e[d].format;break}g=g||b._.numberToFormat,f=g(i,j,c)}return f},value:function(){return this._value},input:function(){return this._input},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b,c,e){return a+Math.round(d*b)}var d=c.correctionFactor.call(null,this._value,a);return this._value=c.reduce([this._value,a],b,0)/d,this},subtract:function(a){function b(a,b,c,e){return a-Math.round(d*b)}var d=c.correctionFactor.call(null,this._value,a);return this._value=c.reduce([a],b,Math.round(this._value*d))/d,this},multiply:function(a){function b(a,b,d,e){var f=c.correctionFactor(a,b);return Math.round(a*f)*Math.round(b*f)/Math.round(f*f)}return this._value=c.reduce([this._value,a],b,1),this},divide:function(a){function b(a,b,d,e){var f=c.correctionFactor(a,b);return Math.round(a*f)/Math.round(b*f)}return this._value=c.reduce([this._value,a],b),this},difference:function(a){return Math.abs(b(this._value).subtract(a).value())}},b.register(\"locale\",\"en\",{delimiters:{thousands:\",\",decimal:\".\"},abbreviations:{thousand:\"k\",million:\"m\",billion:\"b\",trillion:\"t\"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\"},currency:{symbol:\"$\"}}),function(){b.register(\"format\",\"bps\",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(a,c,d){var e,f=b._.includes(c,\" BPS\")?\" \":\"\";return a=1e4*a,c=c.replace(/\\s?BPS/,\"\"),e=b._.numberToFormat(a,c,d),b._.includes(e,\")\")?(e=e.split(\"\"),e.splice(-1,0,f+\"BPS\"),e=e.join(\"\")):e=e+f+\"BPS\",e},unformat:function(a){return+(1e-4*b._.stringToNumber(a)).toFixed(15)}})}(),function(){var a={base:1e3,suffixes:[\"B\",\"KB\",\"MB\",\"GB\",\"TB\",\"PB\",\"EB\",\"ZB\",\"YB\"]},c={base:1024,suffixes:[\"B\",\"KiB\",\"MiB\",\"GiB\",\"TiB\",\"PiB\",\"EiB\",\"ZiB\",\"YiB\"]},d=a.suffixes.concat(c.suffixes.filter(function(b){return a.suffixes.indexOf(b)<0})),e=d.join(\"|\");e=\"(\"+e.replace(\"B\",\"B(?!PS)\")+\")\",b.register(\"format\",\"bytes\",{regexps:{format:/([0\\s]i?b)/,unformat:new RegExp(e)},format:function(d,e,f){var g,h,i,j,k=b._.includes(e,\"ib\")?c:a,l=b._.includes(e,\" b\")||b._.includes(e,\" ib\")?\" \":\"\";for(e=e.replace(/\\s?i?b/,\"\"),h=0;h<=k.suffixes.length;h++)if(i=Math.pow(k.base,h),j=Math.pow(k.base,h+1),null===d||0===d||d>=i&&j>d){l+=k.suffixes[h],i>0&&(d/=i);break}return g=b._.numberToFormat(d,e,f),g+l},unformat:function(d){var e,f,g=b._.stringToNumber(d);if(g){for(e=a.suffixes.length-1;e>=0;e--){if(b._.includes(d,a.suffixes[e])){f=Math.pow(a.base,e);break}if(b._.includes(d,c.suffixes[e])){f=Math.pow(c.base,e);break}}g*=f||1}return g}})}(),function(){b.register(\"format\",\"currency\",{regexps:{format:/(\\$)/},format:function(a,c,d){var e,f,g,h=b.locales[b.options.currentLocale],i={before:c.match(/^([\\+|\\-|\\(|\\s|\\$]*)/)[0],after:c.match(/([\\+|\\-|\\)|\\s|\\$]*)$/)[0]};for(c=c.replace(/\\s?\\$\\s?/,\"\"),e=b._.numberToFormat(a,c,d),a>=0?(i.before=i.before.replace(/[\\-\\(]/,\"\"),i.after=i.after.replace(/[\\-\\)]/,\"\")):0>a&&!b._.includes(i.before,\"-\")&&!b._.includes(i.before,\"(\")&&(i.before=\"-\"+i.before),g=0;g<i.before.length;g++)switch(f=i.before[g]){case\"$\":e=b._.insert(e,h.currency.symbol,g);break;case\" \":e=b._.insert(e,\" \",g+h.currency.symbol.length-1)}for(g=i.after.length-1;g>=0;g--)switch(f=i.after[g]){case\"$\":e=g===i.after.length-1?e+h.currency.symbol:b._.insert(e,h.currency.symbol,-(i.after.length-(1+g)));break;case\" \":e=g===i.after.length-1?e+\" \":b._.insert(e,\" \",-(i.after.length-(1+g)+h.currency.symbol.length-1))}return e}})}(),function(){b.register(\"format\",\"exponential\",{regexps:{format:/(e\\+|e-)/,unformat:/(e\\+|e-)/},format:function(a,c,d){var e,f=\"number\"!=typeof a||b._.isNaN(a)?\"0e+0\":a.toExponential(),g=f.split(\"e\");return c=c.replace(/e[\\+|\\-]{1}0/,\"\"),e=b._.numberToFormat(Number(g[0]),c,d),e+\"e\"+g[1]},unformat:function(a){function c(a,c,d,e){var f=b._.correctionFactor(a,c),g=a*f*(c*f)/(f*f);return g}var d=b._.includes(a,\"e+\")?a.split(\"e+\"):a.split(\"e-\"),e=Number(d[0]),f=Number(d[1]);return f=b._.includes(a,\"e-\")?f*=-1:f,b._.reduce([e,Math.pow(10,f)],c,1)}})}(),function(){b.register(\"format\",\"ordinal\",{regexps:{format:/(o)/},format:function(a,c,d){var e,f=b.locales[b.options.currentLocale],g=b._.includes(c,\" o\")?\" \":\"\";return c=c.replace(/\\s?o/,\"\"),g+=f.ordinal(a),e=b._.numberToFormat(a,c,d),e+g}})}(),function(){b.register(\"format\",\"percentage\",{regexps:{format:/(%)/,unformat:/(%)/},format:function(a,c,d){var e,f=b._.includes(c,\" %\")?\" \":\"\";return b.options.scalePercentBy100&&(a=100*a),c=c.replace(/\\s?\\%/,\"\"),e=b._.numberToFormat(a,c,d),b._.includes(e,\")\")?(e=e.split(\"\"),e.splice(-1,0,f+\"%\"),e=e.join(\"\")):e=e+f+\"%\",e},unformat:function(a){var c=b._.stringToNumber(a);return b.options.scalePercentBy100?.01*c:c}})}(),function(){b.register(\"format\",\"time\",{regexps:{format:/(:)/,unformat:/(:)/},format:function(a,b,c){var d=Math.floor(a/60/60),e=Math.floor((a-60*d*60)/60),f=Math.round(a-60*d*60-60*e);return d+\":\"+(10>e?\"0\"+e:e)+\":\"+(10>f?\"0\"+f:f)},unformat:function(a){var b=a.split(\":\"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}})}(),b});",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/lib/numeral.js",
"module-type": "library",
"modified": "20180114171115244",
"created": "20180114171007227"
},
"$:/plugins/ebalster/formula/license": {
"text": "!!The MIT License (MIT)\n\nCopyright (c) 2017 Evan Balster\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
"bag": "default",
"revision": "0",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/ebalster/formula/license",
"tags": "",
"modified": "20171220211838536",
"created": "20171220071005710",
"caption": "license"
},
"$:/plugins/ebalster/formula/macros/formula.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Compute = require(\"$:/plugins/ebalster/formula/compute.js\");\n\n/*\n\tInformation about this macro\n*/\n\nexports.name = \"formula\";\nexports.params = [{\"name\": \"formula\"}];\n\n/*\nRun the macro\n*/\nexports.run = function(formula) {\n\n\ttry {\n\t\treturn Compute.evalFormula(formula, this);\n\t}\n\tcatch (err) {\n\t\treturn \"`\" + String(err) + \"`\";\n\t}\n};\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/macros/formula.js",
"tags": "",
"module-type": "macro",
"modified": "20171212194124031",
"created": "20171210215758530"
},
"$:/plugins/ebalster/formula/nodes.js": {
"text": "/*\\\ntitle: $:/plugins/ebalster/formula/nodes.js\ntype: application/javascript\nmodule-type: macro\n\nLibrary defining computation \"nodes\" used to build compiled formulas.\nOperands represent some value within the formula: an expression, datum, operator, constant or query...\nOperands may be constant, allowing the formula compiler to optimize them away.\n\n\\*/\n(function(){\n\n\"use strict\";\n\nvar Coerce = require(\"$:/plugins/ebalster/formula/coerce.js\");\n\n\n// A Context has all the information necessary for computations.\nexports.Context = function(widget, formats, locals, depth, maxDepth) {\n\tthis.widget = widget;\n\tthis.formats = formats || {};\n\tthis.locals = locals || {};\n\tthis.depth = depth || 1;\n\tthis.maxDepth = maxDepth || 256;\n\tif (this.maxDepth < this.depth) throw \"Formula recursion exceeds limit of \" + this.maxDepth + \". Infinite regress?\";\n};\nexports.Context.prototype.sub = function() {return new exports.Context(this.widget,this.formats,null,this.depth+1,this.maxDepth);};\nexports.Context.prototype.let = function(locals) {return new exports.Context(this.widget,this.formats,locals,this.depth,this.maxDepth);};\nexports.Context.prototype.wiki = function() {return this.widget.wiki;};\nexports.Context.prototype.wikiVariable = function(name) {return this.widget.getVariable(name);};\n\n\nexports.Node = function() {\n};\nexports.Node.prototype.is_constant = false;\nexports.Node.prototype.name = \"unknown-operand\";\nexports.Node.prototype.toString = function() {return \"[Node \" + this.name + \"]\";};\n\n// Compute the Node's value.\nexports.Node.prototype.compute = function(ctx) {return undefined;};\n\n// Compute a specific type of value, with coercion if necessary.\nexports.Node.prototype.computeNum = function(ctx) {return Coerce.ToNum (this.compute(ctx), ctx);};\nexports.Node.prototype.computeText = function(ctx) {return Coerce.ToText (this.compute(ctx), ctx);};\nexports.Node.prototype.computeBool = function(ctx) {return Coerce.ToBool (this.compute(ctx), ctx);};\nexports.Node.prototype.computeDate = function(ctx) {return Coerce.ToDate (this.compute(ctx), ctx);};\nexports.Node.prototype.computeArray = function(ctx) {return Coerce.ToArray(this.compute(ctx), ctx);};\nexports.Node.prototype.computeFunc = function(ctx) {return Coerce.ToFunc (this.compute(ctx), ctx);};\n\n\n// An operand that just throws an error.\nexports.ThrowError = function(exception) {\n\tthis.exception = exception;\n};\nexports.ThrowError.prototype = new exports.Node();\nexports.ThrowError.prototype.name = \"error\";\nexports.ThrowError.prototype.compute = function(ctx)\n{\n\t// Throw up\n\tthrow this.exception;\n};\n\n// Scoped variable node.\nexports.ScopeVar = function(name) {\n\tthis.name = name;\n};\nexports.ScopeVar.prototype = new exports.Node();\n//exports.ScopeVar.prototype.name = \"scope-var\";\nexports.ScopeVar.prototype.compute = function(ctx) {return ctx.locals[this.name];};\n\n// Scoped variable assignment node.\nexports.LetVars = function(assigns, expr) {\n\tthis.assigns = assigns;\n\tthis.expr = expr;\n};\nexports.LetVars.prototype = new exports.Node();\nexports.LetVars.prototype.name = \"let\";\nexports.LetVars.prototype.compute = function(ctx) {\n\t// Each let-expression can access the ones before it.\n\tvar locals = Object.assign({}, ctx.locals);\n\tctx = ctx.let(locals);\n\tfor (var id in this.assigns) {\n\t\ttry {\n\t\t\tlocals[id] = this.assigns[id].compute(ctx);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow \"computing LET '\" + id + \"': \" + err;\n\t\t}\n\t}\n\treturn this.expr.compute(ctx);\n};\n\n// Call a function by reference.\nexports.CallFunc = function CallFunc(func, args) {\n\tthis.func = func;\n\tthis.args = args;\n};\nexports.CallFunc.prototype = new exports.Node();\nexports.CallFunc.prototype.name = \"function-builtin\";\nexports.CallFunc.prototype.compute = (function(ctx) {\n\t// Check the function parameters.\n\tvar func = this.func.computeFunc(ctx);\n\tif (this.args.length < func.min_args) throw \"Too few parameters for function\";\n\tif (this.args.length > func.max_args) throw \"Too many parameters for function\";\n\t// Compute arguments.\n\tvar vals = [];\n\tfor (var i = 0; i < this.args.length; ++i) vals.push(this.args[i].compute(ctx));\n\t// Call the function!\n\treturn func.apply(ctx, vals);\n});\n\n// JavaScript function call with possible coercion.\nexports.CallJS = function CallJS(func, args) {\n\tthis.func = func;\n\tthis.args = args;\n\tthis.coerce = Coerce.GetCoerceFuncs(func, args);\n\tthis.n_coerce = Math.min(this.args.length, this.coerce.length);\n};\nexports.CallJS.prototype = new exports.Node();\nexports.CallJS.prototype.name = \"function-builtin\";\nexports.CallJS.prototype.compute = function(ctx) {\n\tvar vals = [];\n\tvar i = 0;\n\tfor (; i < this.n_coerce; ++i) vals.push(this.coerce[i](this.args[i].compute(ctx), ctx));\n\tfor (; i < this.args.length; ++i) vals.push(this.args[i].compute(ctx));\n\treturn this.func.apply(ctx, vals);\n};\n\n// Call a function by reference.\nexports.ArrayDef = function ArrayDef(elems) {\n\tthis.elems = elems;\n};\nexports.ArrayDef.prototype = new exports.Node();\nexports.ArrayDef.prototype.name = \"function-builtin\";\nexports.ArrayDef.prototype.compute = (function(ctx) {\n\t// Compute elements.\n\tvar elems = [];\n\tfor (var i = 0; i < this.elems.length; ++i) elems.push(this.elems[i].compute(ctx));\n\treturn elems;\n});\n\n\n// Function declaration operand.\nexports.Function = function(func, captures) {\n\tthis.func = func;\n\tthis.captures = captures;\n};\nexports.Function.prototype = new exports.Node();\nexports.Function.prototype.name = \"function\";\nexports.Function.prototype.is_constant = true;\nexports.Function.prototype.compute = function(ctx) {\n\tthis.func.captured = {};\n\tif (this.captures) {\n\t\tfor (var name in this.captures) {\n\t\t\tthis.func.captured[name] = ctx.locals[name];\n\t\t}\n\t}\n\treturn this.func;\n};\n\n// String constant operand.\nexports.Text = function(value) {this.value = value;};\nexports.Text.prototype = new exports.Node();\nexports.Text.prototype.name = \"string\";\nexports.Text.prototype.is_constant = true;\nexports.Text.prototype.compute = function(ctx) {return this.value;};\n\n// Date constant operand.\nexports.Date = function(value) {this.value = value;};\nexports.Date.prototype = new exports.Node();\nexports.Date.prototype.name = \"date\";\nexports.Date.prototype.is_constant = true;\nexports.Date.prototype.compute = function(ctx) {return this.value;};\n\n// Boolean constant operand.\nexports.Bool = function(value) {this.value = value;};\nexports.Bool.prototype = new exports.Node();\nexports.Bool.prototype.name = \"boolean\";\nexports.Bool.prototype.is_constant = true;\nexports.Bool.prototype.compute = function(ctx) {return this.value;};\n\n// Number constant operand.\nexports.Number = function(value) {this.value = value;};\nexports.Number.prototype = new exports.Node();\nexports.Number.prototype.name = \"number\";\nexports.Number.prototype.is_constant = true;\nexports.Number.prototype.compute = function(ctx) {return this.value;};\n\n// Regex constant operand.\nexports.Regex = function(value) {this.value = value;};\nexports.Regex.prototype = new exports.Node();\nexports.Regex.prototype.name = \"regex\";\nexports.Regex.prototype.is_constant = true;\nexports.Regex.prototype.compute = function(ctx) {return this.value;};\n\n\nvar Compile = require(\"$:/plugins/ebalster/formula/compile.js\");\n\n\n// \"Automatic\" operand; a compiled string value\nexports.Datum = function(origin) {\n\tthis.origin = origin;\n\tthis.text = null;\n\tthis.op = null;\n};\nexports.Datum.prototype = new exports.Node();\nexports.Datum.prototype.name = \"automatic\";\n\nexports.Datum.prototype.compute = function(ctx) {\n\n\tvar newText = this.origin.computeText(ctx);\n\n\tif (newText != this.text)\n\t{\n\t\tthis.text = newText;\n\t\ttry {\n\t\t\tthis.op = Compile.compileDatum(newText);\n\t\t}\n\t\tcatch (err) {\n\t\t\t// Save the error\n\t\t\tthis.op = new exports.ThrowError(\n\t\t\t\terr + \"\\n source: \\\"\" + this.datum + \"\\\"\\n from \" + origin.name);\n\t\t}\n\t}\n\n\treturn this.op.compute(ctx.sub());\n};\n\n\n// Transcluded text operand.\nexports.TranscludeText = function(title) {\n\tthis.title = title;\n};\nexports.TranscludeText.prototype = new exports.Node();\nexports.TranscludeText.prototype.name = \"transclude\";\n\nexports.TranscludeText.prototype.compute = function(ctx) {\n\treturn ctx.wiki().getTiddlerText(this.title.computeText(ctx),\"\");\n};\n\n// Transcluded field operand.\nexports.TranscludeField = function(title, field) {\n\tthis.title = title;\n\tthis.field = field;\n};\nexports.TranscludeField.prototype = new exports.Node();\nexports.TranscludeField.prototype.name = \"transclude-field\";\n\nexports.TranscludeField.prototype.compute = function(ctx) {\n\tvar tiddler = ctx.wiki().getTiddler(this.title.computeText(ctx)),\n\t\tfield = this.field.computeText(ctx);\n\treturn (tiddler && $tw.utils.hop(tiddler.fields,field)) ? tiddler.getFieldString(field) : \"\";\n};\n\n// Transcluded index operand.\nexports.TranscludeIndex = function(title, index) {\n\tthis.title = title;\n\tthis.index = index;\n};\nexports.TranscludeIndex.prototype = new exports.Node();\nexports.TranscludeIndex.prototype.name = \"transclude-index\";\n\nexports.TranscludeIndex.prototype.compute = function(ctx) {\n\treturn ctx.wiki().extractTiddlerDataItem(\n\t\tthis.title.computeText(ctx),\n\t\tthis.index.computeText(ctx),\"\");\n};\n\n\n// Variable operand.\nexports.Variable = function(variable) {\n\tthis.variable = variable;\n};\nexports.Variable.prototype = new exports.Node();\nexports.Variable.prototype.name = \"variable\";\n\nexports.Variable.prototype.compute = function(ctx) {\n\treturn ctx.wikiVariable(this.variable.computeText(ctx)) || \"\";\n};\n\n\n// Filter operand, with some lazy-compile optimizations.\nexports.Filter = function(filter) {\n\tthis.filter = filter;\n\tthis.elements = {}; // Each has count, op, value\n\t//this.array = [];\n\tthis.compileError = null;\n};\nexports.Filter.prototype = new exports.Node();\nexports.Filter.prototype.name = \"filter\";\n\nexports.Filter.prototype.compute = function(ctx) {\n\t// Apply the filter and compile each result\n\tvar i, expr, elem, exprs = ctx.wiki().filterTiddlers(this.filter, ctx.widget);\n\n\t// Clear the array and mark all existing elements for removal\n\tfor (expr in this.elements) this.elements[expr].count = 0;\n\t//this.array = [];\n\n\t// Selectively re-compile any filter results that have changed\n\tfor (i = 0; i < exprs.length; ++i)\n\t{\n\t\texpr = exprs[i];\n\t\telem = this.elements[expr];\n\t\t//this.array.push(expr);\n\t\t\n\t\tif (elem) ++elem.count;\n\t\telse try {\n\t\t\tthis.elements[expr] = {count: 1, op: Compile.compileDatum(expr), value: null};\n\t\t}\n\t\tcatch (err) {\n\t\t\t// Save the error\n\t\t\tthis.elements[expr] = new exports.ThrowError(\n\t\t\t\terr + \"\\n source: \\\"\" + expr + \"\\\"\\n from \\\"\" + this.filter + \"\\\"\");\n\t\t}\n\t}\n\n\t// Compute (unique) values. Delete any elements with no copies left.\n\tfor (expr in this.elements) {\n\t\telem = this.elements[expr];\n\t\tif (elem.count === 0) delete this.elements[expr];\n\t\telse elem.val = elem.op.compute(ctx.sub());\n\t}\n\n\t// Return value computes an array of datum values.\n\tvar results = [];\n\tfor (i = 0; i < exprs.length; ++i) {\n\t\texpr = exprs[i];\n\t\tresults.push(this.elements[expr].val);\n\t}\n\treturn results;\n};\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/nodes.js",
"tags": "",
"module-type": "library",
"modified": "20180112071139424",
"description": "",
"created": "20171211183000431"
},
"$:/plugins/ebalster/formula/operators/arithmetic.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Unary sign operators\nexports.uplus = {arity: 1, position: \"pre\", operator: \"+\", function: \"uplus\"};\nexports.uminus = {arity: 1, position: \"pre\", operator: \"-\", function: \"uminus\"};\n\n// Add\nexports.plus = {arity: 2, precedence: 10, operator: \"+\", function: \"add\"};\nexports.minus = {arity: 2, precedence: 10, operator: \"-\", function: \"sub\"};\n\n// Multiply\nexports.multiply = {arity: 2, precedence: 20, operator: \"*\", function: \"mul\"};\nexports.divide = {arity: 2, precedence: 20, operator: \"/\", function: \"div\"};\n\n// Exponential\nexports.pow = {arity: 2, precedence: 30, operator: \"^\", function: \"pow\", associativity: \"right\"};\n\n// Percentage\nexports.percent = {arity: 1, position: \"post\", operator: \"%\", function: \"percent\"};\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/operators/arithmetic.js",
"tags": "",
"module-type": "formula-operator",
"modified": "20171212223539769",
"created": "20171212223503019"
},
"$:/plugins/ebalster/formula/operators/compare.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Equality\nexports.eq = {arity: 2, precedence: 0, operator: \"=\", function: \"eq\"};\nexports.ne = {arity: 2, precedence: 0, operator: \"<>\", function: \"ne\"};\n\n// Inequality\nexports.gt = {arity: 2, precedence: 0, operator: \">\", function: \"gt\"};\nexports.gte = {arity: 2, precedence: 0, operator: \">=\", function: \"gte\"};\nexports.lt = {arity: 2, precedence: 0, operator: \"<\", function: \"lt\"};\nexports.lte = {arity: 2, precedence: 0, operator: \"<=\", function: \"lte\"};\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/operators/compare.js",
"tags": "",
"module-type": "formula-operator",
"modified": "20171214050739104",
"created": "20171214050556123"
},
"$:/plugins/ebalster/formula/operators/strings.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n\n// Concatenate\nexports.concatenate = {arity: 2, precedence: 4, operator: \"&\", function: \"cat\"};\n\n})();",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/operators/strings.js",
"tags": "",
"module-type": "formula-operator",
"modified": "20171213003346943",
"created": "20171213003246267"
},
"$:/plugins/ebalster/formula/readme": {
"text": "''Formula'' for TiddlyWiki, version {{$:/plugins/ebalster/formula!!version}}, by Evan Balster.\n\nFormulas are written between `(=` mushroom brackets `=)`. Where possible, their functions and syntax are designed to emulate popular spreadsheet software (Microsoft Excel and Google Sheets). They //also// support WikiText-like syntax for `{{`transclusion`}}`, `[`filters`]`, `<<`variables`>>`, and a large number of functions.\n\nFormulas can also be evaluated by the `$formula` widget, the `$formula-vars` widget and the `<<formula>>` macro.\n\nFurther documentation is available here: [[https://evanbalster.com/tiddlywiki/formulas.html]].\n\nThis plugin is a work in progress; please report any issues on GitHub: [[https://github.com/EvanBalster/TiddlyWikiFormula/issues]].",
"bag": "default",
"revision": "0",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/ebalster/formula/readme",
"tags": "",
"modified": "20171220212520970",
"created": "20171220042006170",
"caption": "readme"
},
"$:/plugins/ebalster/formula/settings": {
"text": "Currently no global settings are implemented, but formulas can be controlled by setting some global macros. For example:\n\n|Macro|Meaning|h\n|`\\define formulaFixed() 2`|makes numbers display with 2 decimal points.|\n|`\\define formulaPrecision() 4`|makes numbers display with 4 significant digits (but `formulafixed` takes priority.|\n|`\\define formulaDateFormat() YYYY-MM-0DD`|Sets a date display format using the same rules as TiddlyWiki.|\n\nPlace these at the top of the tiddler where they should take effect, or create a tiddler tagged with <<tag $:/tags/Macro>> to make them apply to all tiddlers.\n\nIn the future, we'll probably add some global settings here...",
"bag": "default",
"revision": "0",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/ebalster/formula/settings",
"tags": "",
"modified": "20171221002035357",
"created": "20171221001634811",
"caption": "readme"
},
"$:/plugins/ebalster/formula/value.js": {
"text": "(function(){\n\n\"use strict\";\n\n\nexports.NumberFormatFunc = null;\n\nexports.DateFormat = \"0hh:0mm, DDth MMM YYYY\";\n\n\n// Base type for formula values\nexports.Value = function() {\n this.name = \"unknown-value\";\n};\n\n// Get the value payload\nexports.Value.prototype.get = function() {return undefined;};\n\n// Describe the value\nexports.Value.prototype.describe = function() {return this.name + \" (\" + String(this.get()) + \")\";};\n\nexports.Value.prototype.toString = function() {return \"[Value \" + this.describe() + \"]\";};\n\n// Get the value as a number (generic implementation)\nexports.Value.prototype.asNum = function() {\n var v = this.get();\n var n = Number(v);\n if (isNaN(n)) throw \"Cannot convert \" + this.describe() + \" to a number!\";\n return n;\n};\n\n// Get the value as a number, summing arrays (generic implementation)\nexports.Value.prototype.asSum = function() {\n var v = this.get();\n var n;\n if (Array.isArray(v)) {n = 0; for (var i = 0; i < v.length; ++i) n += Number(v[i]);}\n else n = Number(v);\n if (isNaN(n)) throw \"Cannot sum \" + this.describe() + \" to a number!\";\n return n;\n};\n\n// More convertsions\nexports.Value.prototype.asString = function() {\n return String(this.get());\n};\nexports.Value.prototype.asArray = function() {\n var v = this.get();\n if (Array.isArray(v)) return v;\n else return [v];\n};\nexports.Value.prototype.asDate = function() {\n throw \"Cannot convert \" + this.describe() + \" to a date!\";\n};\n\n\n// Undefined value.\nexports.V_Undefined = function() {\n this.name = \"undefined\";\n};\nexports.V_Undefined.prototype = new exports.Value();\nexports.V_Undefined.prototype.get = function() {return undefined;};\n\n\n// Array value.\nexports.V_Array = function(value) {\n this.name = \"array\";\n\n this.value = value;\n};\nexports.V_Array.prototype = new exports.Value();\nexports.V_Array.prototype.get = function() {return this.value;};\nexports.V_Array.prototype.asNum = function() {throw \"Cannot convert \" + this.describe() + \" to number!\";};\nexports.V_Array.prototype.asSum = function() {\n var n = 0;\n for (var i = 0; i < this.value.length; ++i) n += this.value[i].asNum();\n if (isNaN(n)) throw \"Cannot sum \" + this.describe() + \" to a number!\";\n return n;\n};\nexports.V_Array.prototype.asString = function() {\n var result = \"\";\n for (var i = 0; i < this.value.length; ++i) {\n var part = this.value[i].asString();\n if (i && part.length) result += \" \";\n if (part.indexOf(/\\s/g) >= 0) result += \"[[\" + part + \"]]\";\n else result += part;\n }\n return result;\n};\n\n\n// String value.\nexports.V_Text = function(value) {\n this.name = \"string\";\n\n this.value = value;\n};\nexports.V_Text.prototype = new exports.Value();\nexports.V_Text.prototype.get = function() {return this.value;};\n//exports.V_Text.prototype.asDate = function() {return $tw.utils.parseDate();}\n\n\n// Date value.\nexports.V_Date = function(value) {\n this.name = \"date\";\n\n this.value = value;\n};\nexports.V_Date.prototype = new exports.Value();\nexports.V_Date.prototype.get = function() {return this.value;};\nexports.V_Date.prototype.asString = function() {return $tw.utils.formatDateString(this.value, exports.DateFormat);};\nexports.V_Date.prototype.asNum = function() {throw \"Date-to-Number conversion usupported\";};\nexports.V_Date.prototype.asSum = function() {throw \"Date-to-Number conversion usupported\";};\nexports.V_Date.prototype.asDate = function() {return this.value;};\n\n\n// Boolean value.\nexports.V_Bool = function(value) {\n this.name = \"boolean\";\n\n this.value = value;\n};\nexports.V_Bool.prototype = new exports.Value();\nexports.V_Bool.prototype.get = function() {return this.value;};\nexports.V_Bool.prototype.asString = function() {return this.value ? \"TRUE\" : \"FALSE\";};\nexports.V_Bool.prototype.asNum = function() {return this.value ? 1 : 0;};\nexports.V_Bool.prototype.asSum = function() {return this.value ? 1 : 0;};\n\n\n// Number value.\nexports.V_Num = function(value) {\n this.name = \"number\";\n\n this.value = value;\n};\nexports.V_Num.prototype = new exports.Value();\nexports.V_Num.prototype.get = function() {return this.value;};\nexports.V_Num.prototype.asString = function() {return (exports.NumberFormatFunc || String)(this.value);};\nexports.V_Num.prototype.asNum = function() {return this.value;};\nexports.V_Num.prototype.asSum = function() {return this.value;};\n\n\n// Percentage value.\nexports.V_Percent = function(value) {\n this.name = \"percentage\";\n\n this.value = value;\n};\nexports.V_Percent.prototype = new exports.V_Num();\nexports.V_Percent.prototype.asString = function()\n{\n return (exports.NumberFormatFunc || String)(100*this.value) + \"%\";\n};\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/value.js",
"tags": "",
"module-type": "library",
"modified": "20171211195014088",
"description": "",
"created": "20171211195003728"
},
"$:/plugins/ebalster/formula/widgets/attributes/formula.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Compile = require(\"$:/plugins/ebalster/formula/compile.js\");\nvar Compute = require(\"$:/plugins/ebalster/formula/compute.js\");\nvar Nodes = require(\"$:/plugins/ebalster/formula/nodes.js\");\n\nvar FormulaAttribute = function(widget, node) {\n\tthis.widget = widget;\n\tthis.formula = node.formula;\n\ttry {\n\t\tthis.compiledFormula = Compile.compileFormula(this.formula);\n\t}\n\tcatch (err) {\n\t\tthis.compiledFormula = new Nodes.ThrowError(err);\n\t}\n\tthis.value = this.compute();\n};\n\n/*\nInherit from the base ??? class\n*/\n//FormulaAttribute.prototype = new Attribute();\n\nFormulaAttribute.prototype.compute = function() {\n\t// Compute options\n\tthis.formatOptions =\n\t{\n\t\tfixed: (this.widget.getVariable(\"formulaFixed\")),\n\t\tprecision: (this.widget.getVariable(\"formulaPrecision\")),\n\t\tnumberFormat: (this.widget.getVariable(\"formulaNumberFormat\")),\n\t\tdateFormat: (this.widget.getVariable(\"formulaDateFormat\")),\n\t};\n\t// Execute the formula.\n\ttry {\n\t\treturn Compute.computeFormula(this.compiledFormula, this.widget, this.formatOptions);\n\t}\n\tcatch (err) {\n\t\treturn \"\";\n\t}\n};\n\nFormulaAttribute.prototype.refresh = function(changedTiddlers) {\n\tthis.value = this.compute();\n\treturn this.value;\n};\n\n\nexports.formula = FormulaAttribute;\n\n})();\n\t",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/widgets/attributes/formula.js",
"tags": "",
"module-type": "attributevalue",
"modified": "20171225035808674",
"description": "Evaluates a formula as an attribute value string.",
"created": "20171225035721011"
},
"$:/plugins/ebalster/formula/widgets/formula-vars.js": {
"text": "(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 Compile = require(\"$:/plugins/ebalster/formula/compile.js\");\nvar Compute = require(\"$:/plugins/ebalster/formula/compute.js\");\n\nvar FormulaVarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFormulaVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nFormulaVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\n\tif (this.formulaError) {\n\t\t// Show an error.\n\t\tvar parseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t}, children: [\n\t\t\t{type: \"text\", text: this.formulaError}\n\t\t]}];\n\t\tthis.makeChildWidgets(parseTreeNodes);\n\t}\n\telse {\n\t\t// Construct and render the child widgets.\n\t\tthis.makeChildWidgets();\n\t}\n\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nRecompute formulas\n*/\nFormulaVarsWidget.prototype.formula_recompute = function() {\n\t// Parse variables\n\tvar self = this;\n\n\tthis.formatOptions =\n\t{\n\t\tfixed: (this.getAttribute(\"$fixed\") || this.parentWidget.getVariable(\"formulaFixed\")),\n\t\tprecision: (this.getAttribute(\"$precision\") || this.parentWidget.getVariable(\"formulaPrecision\")),\n\t\tnumberFormat: (this.getAttribute(\"$numberFormat\") || this.parentWidget.getVariable(\"formulaNumberFormat\")),\n\t\tdateFormat: (this.getAttribute(\"$dateFormat\") || this.parentWidget.getVariable(\"formulaDateFormat\")),\n\t};\n\n\t// Deprecation\n\tif (this.getAttribute(\"$toFixed\")) {this.formulaError = \"Change '$toFixed' to '$fixed'.\"; return;}\n\tif (this.getAttribute(\"$toPrecision\")) {this.formulaError = \"Change '$toPrecision' to '$precision'.\"; return;}\n\n\tif (!this.currentValues)\n\t{\n\t\t// Initial values\n\t\tthis.currentValues = {};\n\t\tthis.formulaSrc = {};\n\t\tthis.formulaComp = {};\n\t}\n\n\tthis.formulaError = null;\n\n\ttry {\n\t\tif (this.getAttribute(\"$noRefresh\")) throw \"Illegal $noRefresh attribute; use $noRebuild instead.\";\n\n\t\t$tw.utils.each(this.attributes,function(val,key) {\n\t\t\tif(key.charAt(0) !== \"$\") {\n\t\t\t\t// Recompile if necessary\n\t\t\t\tif (self.formulaSrc[key] != val) {\n\t\t\t\t\tself.formulaSrc[key] = val;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tself.formulaComp[key] = Compile.compileFormula(self.formulaSrc[key]);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tself.formulaSrc[key] = null;\n\t\t\t\t\t\tthrow \"Variable \" + key + \": \" + String(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Recompute the formula\n\t\t\t\tif (self.formulaComp[key]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tself.currentValues[key] = Compute.computeFormula(\n\t\t\t\t\t\t\tself.formulaComp[key], self, self.formatOptions);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tthrow \"Variable \" + key + \": \" + String(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Variable \" + key + \": Formula not assigned\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tcatch (err) {\n\t\tthis.formulaError = String(err);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nFormulaVarsWidget.prototype.execute = function() {\n\t// Recompute formulas\n\tthis.formula_recompute();\n\n\tif (!this.formulaError) {\n\t\tfor (var key in this.currentValues) {\n\t\t\tthis.setVariable(key, this.currentValues[key]);\n\t\t}\n\t}\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nFormulaVarsWidget.prototype.refresh = function formulaVarsRefresh(changedTiddlers) {\n\tthis.computeAttributes();\n\tvar oldValues = Object.assign({}, this.currentValues || {}), oldError = this.formulaError;\n\tthis.formula_recompute();\n\n\t// Did any computed values change?\n\tvar changedValues = false;\n\tfor (var key in this.currentValues) {\n\t\tif (this.currentValues[key] !== oldValues[key]) {\n\t\t\tthis.setVariable(key, this.currentValues[key]);\n\t\t\tchangedValues = true;\n\t\t}\n\t}\n\n\t// Option to suppress full refreshing\n\tif (this.getAttribute(\"$noRebuild\") === \"true\") changedValues = false;\n\tif (this.formulaError !== oldError) changedValues = true;\n\n\tif(changedValues) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"formula-vars\"] = FormulaVarsWidget;\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/widgets/formula-vars.js",
"tags": "",
"module-type": "widget",
"modified": "20171222071557661",
"description": "As the $vars widget, but each attribute is interpreted as a formula.",
"created": "20171216003055342"
},
"$:/plugins/ebalster/formula/widgets/formula.js": {
"text": "(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 Compile = require(\"$:/plugins/ebalster/formula/compile.js\");\nvar Compute = require(\"$:/plugins/ebalster/formula/compute.js\");\n\nvar FormulaWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFormulaWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFormulaWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.rerender(parent,nextSibling);\n};\n\nFormulaWidget.prototype.rerender = function(parent, nextSibling) {\n\n\tthis.removeChildDomNodes();\n\n\tvar parseTreeNodes;\n\n\tif (this.formulaError) {\n\t\t// Show an error as a tc-error span.\n\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t}, children: [\n\t\t\t{type: \"text\", text: this.formulaError}\n\t\t]}];\n\t}\n\telse {\n\t\t// Parse the value, or, failing this, produce a text node.\n\t\tvar parser = this.wiki.parseText(\n\t\t\tthis.wikifyType, this.currentValue,\n\t\t\t{parseAsInline: this.wikifyMode === \"inline\"});\n\t\tparseTreeNodes = (parser ? parser.tree : [{type: \"text\", text: this.currentValue}]);\n\t}\n\n\t// Construct and render the child widgets.\n\tthis.makeChildWidgets(parseTreeNodes);\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFormulaWidget.prototype.execute = function() {\n\n\tvar oldFormula = this.formula;\n\n\t// Get parameters from our attributes\n\tthis.formula = this.getAttribute(\"formula\");\n\tthis.debug = this.getAttribute(\"debug\");\n\n\tthis.wikifyType = this.getAttribute(\"outputType\");\n\tthis.wikifyMode = this.getAttribute(\"outputMode\",\"inline\");\n\n\tthis.formatOptions =\n\t{\n\t\tfixed: (this.getAttribute(\"fixed\") || this.getVariable(\"formulaFixed\")),\n\t\tprecision: (this.getAttribute(\"precision\") || this.getVariable(\"formulaPrecision\")),\n\t\tnumberFormat: (this.getAttribute(\"numberFormat\") || this.getVariable(\"formulaNumberFormat\")),\n\t\tdateFormat: (this.getAttribute(\"dateFormat\") || this.getVariable(\"formulaDateFormat\")),\n\t};\n\n\t// Deprecation\n\tif (this.getAttribute(\"toFixed\")) {this.formulaError = \"Change 'toFixed' to 'fixed'.\"; return;}\n\tif (this.getAttribute(\"toPrecision\")) {this.formulaError = \"Change 'toPrecision' to 'precision'.\"; return;}\n\n\t// Compile the formula, if it has changed, yielding compiledFormula\n\tif(this.formula !== oldFormula) {\n\t\t// Clear the error flag\n\t\tthis.formulaError = null;\n\t\tthis.compiledFormula = null;\n\t\tif (this.formula) {\n\t\t\ttry {\n\t\t\t\tthis.compiledFormula = Compile.compileFormula(this.formula);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis.formulaError = String(err);\n\t\t\t\tthis.formula = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compute the formula, yielding currentValue\n\tif(this.compiledFormula) {\n\t\ttry {\n\t\t\tthis.currentValue = Compute.computeFormula(this.compiledFormula, this, this.formatOptions, Boolean(this.debug));\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis.formulaError = String(err);\n\t\t}\n\t}\n\telse {\n\t\tthis.formulaError = \"Error: formula not assigned\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFormulaWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldValue = this.currentValue, oldError = this.formulaError;\n\tthis.execute();\n\tif(this.oldError !== this.formulaError || this.currentValue !== oldValue) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\t// We DON'T call refreshSelf() because it call execute() again\n\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\tthis.rerender(this.parentDomNode,nextSibling);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.formula = FormulaWidget;\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/widgets/formula.js",
"tags": "",
"module-type": "widget",
"modified": "20171212194059701",
"description": "Evaluates a formula.",
"created": "20171210232543292"
},
"$:/plugins/ebalster/formula/wikiparser/attributes/formula.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n\nexports.formula = function(source, pos, node) {\n\t// Is it a formula?\n\tvar reFormulaValue = /\\(=(([^=]+|=[^\\)])*)=\\)/g;\n\n\tvar value = $tw.utils.parseTokenRegExp(source,pos,reFormulaValue);\n\tif (!value) return null;\n\n\tnode.type = \"formula\";\n\tnode.formula = value.match[1];\n\tnode.end = value.end;\n\treturn node;\n};\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/wikiparser/attributes/formula.js",
"tags": "",
"module-type": "attributerule",
"modified": "20171225042523039",
"description": "Tag attribute rule for formulas. Ex. `(= 2+2 =)`",
"created": "20171224060415431"
},
"$:/plugins/ebalster/formula/wikiparser/formula.js": {
"text": "(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"formula\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\(=/mg;\n\tthis.endMatchRegExp = /=\\)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end marker\n\tthis.endMatchRegExp.lastIndex = this.parser.pos;\n\tvar match = this.endMatchRegExp.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"formula\",\n\t\tattributes: {\n\t\t\tformula: {type: \"string\", value: text},\n\t\t}\n\t}];\n};\n\n})();\n",
"bag": "default",
"revision": "0",
"type": "application/javascript",
"title": "$:/plugins/ebalster/formula/wikiparser/formula.js",
"tags": "",
"module-type": "wikirule",
"modified": "20171211181716654",
"description": "Wiki text inline rule for formulas. Ex. `((=2+2))`",
"created": "20171211033327565"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/excel-utils/deserializer.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/excel-utils/deserializer.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nXLSX file deserializer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar bibtexParse = require(\"$:/plugins/tiddlywiki/bibtex/bibtexParse.js\");\n\n/*\nParse an XLSX file into tiddlers\n*/\nexports[\"application/x-bibtex\"] = function(text,fields) {\n\tvar data,\n\t\tresults = [];\n\t// Parse the text\n\ttry {\n\t\tdata = bibtexParse.toJSON(text)\n\t} catch(ex) {\n\t\tdata = ex.toString();\n\t}\n\tif(typeof data === \"string\") {\n\t\treturn [{\n\t\t\ttitle: \"BibTeX import error: \" + data,\n\t\t}];\n\t}\n\t// Convert each entry\n\t$tw.utils.each(data,function(entry) {\n\t\tvar fields = {\n\t\t\ttitle: entry.citationKey,\n\t\t\t\"bibtex-entry-type\": entry.entryType\n\t\t};\n\t\t$tw.utils.each(entry.entryTags,function(value,name) {\n\t\t\tfields[\"bibtex-\" + name] = value;\n\t\t});\n\t\tresults.push(fields);\n\t});\n\t// Return the output tiddlers\n\treturn results;\n};\n\n})();\n",
"title": "$:/plugins/tiddlywiki/excel-utils/deserializer.js",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/plugins/tiddlywiki/bibtex/readme": {
"title": "$:/plugins/tiddlywiki/bibtex/readme",
"text": "The BibTeX plugin provides a deserializer that can convert bibliographic entries in `.bib` files into individual tiddlers.\n\nYou can use it in the browser by dragging and dropping a `.bib` file into the TiddlyWiki window. Under Node.js, use the `--load` command to load a `.bib` file.\n\nThe conversion is as follows:\n\n* `title` comes from citationKey\n* `bibtex-entry-type` comes from entryType\n* all `entryTags` are assigned to fields with the prefix `bibtex-`\n\nThe BibTeX plugin is based on the library [[bibtexParseJs by Henrik Muehe and Mikola Lysenko|https://github.com/ORCID/bibtexParseJs]].\n"
},
"$:/plugins/tiddlywiki/bibtex/bibtexParse.js": {
"text": "/* start bibtexParse 0.0.22 */\n\n//Original work by Henrik Muehe (c) 2010\n//\n//CommonJS port by Mikola Lysenko 2013\n//\n//Port to Browser lib by ORCID / RCPETERS\n//\n//Issues:\n//no comment handling within strings\n//no string concatenation\n//no variable values yet\n//Grammar implemented here:\n//bibtex -> (string | preamble | comment | entry)*;\n//string -> '@STRING' '{' key_equals_value '}';\n//preamble -> '@PREAMBLE' '{' value '}';\n//comment -> '@COMMENT' '{' value '}';\n//entry -> '@' key '{' key ',' key_value_list '}';\n//key_value_list -> key_equals_value (',' key_equals_value)*;\n//key_equals_value -> key '=' value;\n//value -> value_quotes | value_braces | key;\n//value_quotes -> '\"' .*? '\"'; // not quite\n//value_braces -> '{' .*? '\"'; // not quite\n(function(exports) {\n\n function BibtexParser() {\n \n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',','{','}',' ','='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n\n this.currentEntry = \"\";\n\n this.setInput = function(t) {\n this.input = t;\n };\n\n this.getEntries = function() {\n return this.entries;\n };\n\n this.isWhitespace = function(s) {\n return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n };\n\n this.match = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw \"Token mismatch, expected \" + s + \", found \"\n + this.input.substring(this.pos);\n };\n this.skipWhitespace(canCommentOut);\n };\n\n this.tryMatch = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n };\n this.skipWhitespace(canCommentOut);\n };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function() {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n };\n\n if (this.input[this.pos] == '@') {\n return true;\n };\n return false;\n };\n\n this.skipWhitespace = function(canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n };\n if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n };\n this.skipWhitespace(canCommentOut);\n };\n };\n\n this.value_braces = function() {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n };\n } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value\";\n };\n };\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.value_comment = function() {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{')\n brcktCnt++;\n if (this.input[this.pos] == '}')\n brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n };\n this.pos++;\n };\n return str;\n };\n\n this.value_quotes = function() {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n };\n }\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.single_value = function() {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\"))\n return k;\n else if (this.months.indexOf(k.toLowerCase()) >= 0)\n return k.toLowerCase();\n else\n throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n \n };\n };\n\n this.value = function() {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n };\n return values.join(\"\");\n };\n\n this.key = function(optional) {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw \"Runaway key\";\n };\n // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n if (optional && this.input[this.pos] != ',') {\n this.pos = start;\n return null;\n };\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n \n };\n };\n };\n\n this.key_equals_value = function() {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n return [ key, val ];\n } else {\n throw \"... = value expected, equals sign missing:\"\n + this.input.substring(this.pos);\n };\n };\n\n this.key_value_list = function() {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n ;\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n };\n };\n\n this.entry_body = function(d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key(true);\n this.currentEntry['entryType'] = d.substring(1);\n if (this.currentEntry['citationKey'] != null) { \n this.match(\",\");\n }\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n\n this.directive = function() {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n\n this.preamble = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.comment = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.entry = function(d) {\n this.entry_body(d);\n };\n\n this.alernativeCitationKey = function () {\n this.entries.forEach(function (entry) {\n if (!entry.citationKey && entry.entryTags) {\n entry.citationKey = '';\n if (entry.entryTags.author) {\n entry.citationKey += entry.entryTags.author.split(',')[0] += ', ';\n }\n entry.citationKey += entry.entryTags.year;\n }\n });\n }\n\n this.bibtex = function() {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d == \"@STRING\") {\n this.string();\n } else if (d == \"@PREAMBLE\") {\n this.preamble();\n } else if (d == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n };\n\n this.alernativeCitationKey();\n };\n };\n \n exports.toJSON = function(bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n exports.toBibtex = function(json) {\n var out = '';\n for ( var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey)\n out += json[i].citationKey + ', ';\n if (json[i].entry)\n out += json[i].entry ;\n if (json[i].entryTags) {\n var tags = '';\n for (var jdx in json[i].entryTags) {\n if (tags.length != 0)\n tags += ', ';\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += '}\\n\\n';\n }\n return out;\n \n };\n\n})(typeof exports === 'undefined' ? this['bibtexParse'] = {} : exports);\n\n/* end bibtexParse */\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/bibtex/bibtexParse.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/bibtex/license": {
"text": "\nThe MIT License (MIT)\nCopyright (c) 2013 ORCID, Inc.\n\nCopyright (c) 2010 Henrik Muehe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n",
"type": "text/plain",
"title": "$:/plugins/tiddlywiki/bibtex/license"
}
}
}
{
"tiddlers": {
"$:/config/Comments/EnableFilter": {
"title": "$:/config/Comments/EnableFilter",
"text": "[all[current]!is[system]]\n"
},
"$:/plugins/tiddlywiki/comments/above-story": {
"title": "$:/plugins/tiddlywiki/comments/above-story",
"tags": "$:/tags/AboveStory",
"text": "<$reveal state=\"$:/config/Comments/EnableWikiComments\" type=\"match\" text=\"yes\" default=\"no\">\n<$tiddler tiddler=\"$:/SiteTitle\">\n<$transclude tiddler=\"$:/plugins/tiddlywiki/comments/comments-template\" mode=\"inline\"/>\n</$tiddler>\n</$reveal>\n"
},
"$:/plugins/tiddlywiki/comments/add-comment-button-actions": {
"title": "$:/plugins/tiddlywiki/comments/add-comment-button-actions",
"text": "<$set name=\"username\" value={{$:/status/UserName}} emptyValue=\"(anonymous)\">\n<$set name=\"target\" filter=\"[<currentTiddler>]\">\n<$action-createtiddler $basetitle={{{ [[Comment by ']addsuffix<username>addsuffix[' on ']addsuffix<currentTiddler>addsuffix[']] }}} role=\"comment\" list=<<target>> text=\"\" edit-mode=\"yes\"/>\n</$set>\n</$set>\n"
},
"$:/plugins/tiddlywiki/comments/add-comment-button": {
"title": "$:/plugins/tiddlywiki/comments/add-comment-button",
"text": "<$reveal state=\"$:/status/IsReadOnly\" type=\"match\" text=\"no\" default=\"no\" tag=\"div\" class=\"tc-comment-button\">\n<$button class=\"tc-btn-invisible\" actions={{$:/plugins/tiddlywiki/comments/add-comment-button-actions}}>\nadd comment {{$:/core/images/add-comment}}\n</$button>\n</$reveal>\n"
},
"$:/plugins/tiddlywiki/comments/comments-template": {
"title": "$:/plugins/tiddlywiki/comments/comments-template",
"text": "<div class=\"tc-comments\">\n<ol class=\"tc-comment-list\">\n<$list filter=\"[all[tiddlers+shadows]role[comment]contains<currentTiddler>sort[created]!has[draft.of]]\">\n<li>\n<div class=\"tc-comment-entry\">\n<div class=\"tc-comment-entry-heading\">\n<$link>{{!!creator}} at <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DDD DDth MMM YYYY\"/></$link>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/CommentToolbarButton]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$list>\n</div>\n<div class=\"tc-comment-entry-body\">\n<$reveal type=\"match\" state=\"!!edit-mode\" text=\"yes\">\n<$edit-text tiddler=<<currentTiddler>> tag=\"textarea\" focus=\"true\"/>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"!!edit-mode\" text=\"yes\">\n<$transclude tiddler=<<currentTiddler>> mode=\"block\"/>\n<$transclude tiddler=\"$:/plugins/tiddlywiki/comments/add-comment-button\" mode=\"inline\"/>\n</$reveal>\n</div>\n</div>\n<$transclude tiddler=\"$:/plugins/tiddlywiki/comments/comments-template\" mode=\"inline\"/>\n</li>\n</$list>\n</ol>\n</div>\n"
},
"$:/plugins/tiddlywiki/comments/config": {
"title": "$:/plugins/tiddlywiki/comments/config",
"text": "\\define select(description,filter)\n<$button>\n<$action-setfield $tiddler=\"$:/config/Comments/EnableFilter\" $value=<<__filter__>>/>\n$description$\n</$button>\n\\end\n\n! Wiki Comments\n\n<$checkbox tiddler=\"$:/config/Comments/EnableWikiComments\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Comments/EnableWikiComments\">Allow wiki-level comments as well as tiddler comments</$link> </$checkbox>\n\n! Tiddler Comments\n\nThis filter expression determines which tiddlers will have commenting enabled:\n\n<$edit-text tiddler=\"$:/config/Comments/EnableFilter\" tag=\"input\"/>\n\nOr you can choose a preselected filter:\n\n* <<select \"All tiddlers except system tiddlers\" \"[all[current]!is[system]]\">>\n* <<select \"Only tiddlers tagged 'commentable'\" \"[all[current]tag[commentable]]\">>\n* <<select \"Disable all commenting\" \"\">>\n"
},
"$:/plugins/tiddlywiki/comments/filter-all-comments": {
"title": "$:/plugins/tiddlywiki/comments/filter-all-comments",
"tags": "$:/tags/Filter",
"filter": "[role[comment]!sort[modified]]",
"description": "All comments",
"text": ""
},
"$:/plugins/tiddlywiki/comments/footer-view-template-segment": {
"title": "$:/plugins/tiddlywiki/comments/footer-view-template-segment",
"tags": "$:/tags/ViewTemplate",
"list-after": "$:/core/ui/ViewTemplate/body",
"text": "<$list filter={{$:/config/Comments/EnableFilter}} variable=\"ignore\">\n<div class=\"tc-comments-segment\">\n<$transclude tiddler=\"$:/plugins/tiddlywiki/comments/add-comment-button\" mode=\"inline\"/>\n<$transclude tiddler=\"$:/plugins/tiddlywiki/comments/comments-template\" mode=\"inline\"/>\n</div>\n</$list>"
},
"$:/plugins/tiddlywiki/comments/header-view-template-segment": {
"title": "$:/plugins/tiddlywiki/comments/header-view-template-segment",
"tags": "$:/tags/ViewTemplate",
"list-before": "$:/core/ui/ViewTemplate/body",
"text": "<$list filter=\"[all[current]role[comment]]\" variable=\"ignore\">\n<div class=\"tc-is-comment-header\">\nThis tiddler is a comment on:\n<ul>\n<$list filter=\"[list<currentTiddler>sort[title]]\">\n<li>\n<$link to=<<currentTiddler>>><$text text=<<currentTiddler>>/></$link>\n</li>\n</$list>\n</ul>\n</div>\n</$list>\n"
},
"$:/plugins/tiddlywiki/comments/readme": {
"title": "$:/plugins/tiddlywiki/comments/readme",
"text": "This plugin provides a simple means for adding threaded comments to tiddlers.\n\n* Click the \"add comment\" button to make a new comment, and then click the \"save\" button to save it\n* You can comment on a tiddler itself, or add a comment to an existing comment\n* The sidebar tab ''Comments'' lists a timeline of all comments\n* Comments are attributed to the username stored in the system tiddler [[$:/status/UserName]]\n* By default, comments are available on all non-system tiddlers. The ''config'' tab lets you customise which tiddlers can accept comments by specifying a filter extension\n* The buttons for adding and editing comments are only available if the system tiddler [[$:/status/IsReadOnly]] is not set to `yes`\n* Use the \"All comments\" option in the $:/AdvancedSearch ''Filter'' tab to see or export all comments\n\n!! Data Model\n\nThe data model employed by the comments plugin is very simple:\n\n* Comment tiddlers are identified by the `role` field being set to `comment`\n* The `list` field of comment tiddlers lists the tiddlers to which this comment applies\n** It is thus possible for a comment to be applied to multiple tiddlers at once\n** The links between comments can be preserved when renaming them by using the relink checkbox in the edit template\n* The `edit-mode` field of comment tiddlers is set to `yes` to display it in edit mode, or `no` to display it in view mode\n* The `saved-text` field is updated when switching to edit mode so that it can be restored if the user cancels\n\n"
},
"$:/plugins/tiddlywiki/comments/sidebar-segment": {
"title": "$:/plugins/tiddlywiki/comments/sidebar-segment",
"tags": "$:/tags/SideBarSegment",
"list-after": "$:/core/ui/SideBarSegments/site-subtitle",
"text": "<$reveal state=\"$:/config/Comments/EnableWikiComments\" type=\"match\" text=\"yes\" default=\"no\">\n<$tiddler tiddler=\"$:/SiteTitle\">\n<$transclude tiddler=\"$:/plugins/tiddlywiki/comments/add-comment-button\" mode=\"inline\"/>\n</$tiddler>\n</$reveal>\n"
},
"$:/plugins/tiddlywiki/comments/sidebar": {
"title": "$:/plugins/tiddlywiki/comments/sidebar",
"tags": "$:/tags/SideBar",
"caption": "Comments",
"text": "<div class=\"tc-timeline\">\n<$list filter=\"[all[tiddlers+shadows]role[comment]has[modified]!sort[modified]eachday[modified]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"modified\" format=\"date\" template=\"DDth MMM YYYY\"/>\n<$list filter=\"[all[tiddlers+shadows]role[comment]sameday:modified{!!modified}!sort[modified]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link>Comment by '<$view field=\"modifier\">(anonymous)</$view>'</$link> on\n<$list filter=\"[list<currentTiddler>sort[title]]\">\n<$link to=<<currentTiddler>>><$text text=<<currentTiddler>>/></$link>\n</$list>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n"
},
"$:/plugins/tiddlywiki/comments/styles": {
"title": "$:/plugins/tiddlywiki/comments/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-is-comment-header {\n\tbackground: #c1e1e9;\n\tpadding: 0.25em;\n}\n\n.tc-comments-segment {\n\tborder-top: 2px solid #c1e1e9;\n}\n\n.tc-comment-button button {\n\twidth: 100%;\n\ttext-align: right;\n}\n\n.tc-sidebar-scrollable .tc-comment-button button {\n\twidth: auto;\n\ttext-align: right;\n}\n\n.tc-comment-button button svg {\n\tfill: #26cb56;\n\theight: 2em;\n\twidth: 2em;\n}\n\n.tc-comments {\n}\n\n.tc-comment-list {\n\tlist-style: none;\n padding-left: 0;\n}\n\n.tc-comment-list .tc-comments {\n\tpadding-left: 1em;\n}\n\n.tc-comment-entry {\n\tborder: 1px solid #c1e1ea;\n\tmargin: 0.5em 0 0 0;\n\tbackground: #dbf6ff;\n}\n\n.tc-comment-entry-heading {\n\tfont-size: 0.7em;\n\tfont-weight: bold;\n\ttext-transform: uppercase;\n\tbackground: #c1e1ea;\n\tcolor: #5B6D80;\n\tpadding: 0 0.5em;\n}\n\n.tc-comment-entry-body {\n\tfont-size: 0.8em;\n\tpadding: 0 0.5em;\n}\n\n.tc-comment-entry-body textarea {\n\tfont-size: 1.1em;\n\twidth: 100%\n}\n"
},
"$:/tags/CommentToolbarButton": {
"title": "$:/tags/CommentToolbarButton",
"list": "[[$:/plugins/tiddlywiki/comments/toolbar-button-cancel]] [[$:/plugins/tiddlywiki/comments/toolbar-button-delete]] [[$:/plugins/tiddlywiki/comments/toolbar-button-save]] [[$:/plugins/tiddlywiki/comments/toolbar-button-edit]]"
},
"$:/plugins/tiddlywiki/comments/toolbar-button-cancel": {
"title": "$:/plugins/tiddlywiki/comments/toolbar-button-cancel",
"tags": "$:/tags/CommentToolbarButton",
"text": "<$reveal state=\"$:/status/IsReadOnly\" type=\"match\" text=\"no\" default=\"no\" tag=\"span\">\n<$reveal type=\"match\" state=\"!!edit-mode\" text=\"yes\">\n<$button>\n<$action-setfield $tiddler=<<currentTiddler>> $field=\"edit-mode\" $value=\"no\"/>\n<$action-setfield $tiddler=<<currentTiddler>> $field=\"text\" $value={{!!saved-text}}/>\ncancel\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/plugins/tiddlywiki/comments/toolbar-button-delete": {
"title": "$:/plugins/tiddlywiki/comments/toolbar-button-delete",
"tags": "$:/tags/CommentToolbarButton",
"text": "<$reveal state=\"$:/status/IsReadOnly\" type=\"match\" text=\"no\" default=\"no\" tag=\"span\">\n<$reveal type=\"match\" state=\"!!edit-mode\" text=\"yes\">\n<$button>\n<$action-deletetiddler $tiddler=<<currentTiddler>>/>\ndelete\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/plugins/tiddlywiki/comments/toolbar-button-edit": {
"title": "$:/plugins/tiddlywiki/comments/toolbar-button-edit",
"tags": "$:/tags/CommentToolbarButton",
"text": "<$reveal state=\"$:/status/IsReadOnly\" type=\"match\" text=\"no\" default=\"no\" tag=\"span\">\n<$reveal type=\"nomatch\" state=\"!!edit-mode\" text=\"yes\">\n<$button>\n<$action-setfield $tiddler=<<currentTiddler>> $field=\"edit-mode\" $value=\"yes\"/>\n<$action-setfield $tiddler=<<currentTiddler>> $field=\"saved-text\" $value={{!!text}}/>\nedit\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/plugins/tiddlywiki/comments/toolbar-button-save": {
"title": "$:/plugins/tiddlywiki/comments/toolbar-button-save",
"tags": "$:/tags/CommentToolbarButton",
"text": "<$reveal state=\"$:/status/IsReadOnly\" type=\"match\" text=\"no\" default=\"no\" tag=\"span\">\n<$reveal type=\"match\" state=\"!!edit-mode\" text=\"yes\">\n<$button>\n<$action-setfield $tiddler=<<currentTiddler>> $field=\"edit-mode\" $value=\"no\"/>\nsave\n</$button>\n</$reveal>\n</$reveal>\n"
}
}
}
{
"tiddlers": {
"$:/config/HighlightPlugin/TypeMappings/application/javascript": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/javascript",
"text": "javascript"
},
"$:/config/HighlightPlugin/TypeMappings/application/json": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/json",
"text": "json"
},
"$:/config/HighlightPlugin/TypeMappings/text/css": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/css",
"text": "css"
},
"$:/config/HighlightPlugin/TypeMappings/text/html": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/html",
"text": "html"
},
"$:/config/HighlightPlugin/TypeMappings/image/svg+xml": {
"title": "$:/config/HighlightPlugin/TypeMappings/image/svg+xml",
"text": "xml"
},
"$:/config/HighlightPlugin/TypeMappings/text/x-markdown": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/x-markdown",
"text": "markdown"
},
"$:/plugins/tiddlywiki/highlight/highlight.js": {
"text": "var hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define(\"hljs\",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,\"&\").replace(/</gm,\"<\").replace(/>/gm,\">\")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=/\\blang(?:uage)?-([\\w-]+)\\b/i.exec(i))return w(t[1])?t[1]:\"no-highlight\";for(i=i.split(/\\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:\"start\",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}f+=\"<\"+t(e)+Array.prototype.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){f+=\"</\"+t(e)+\">\"}function c(e){(\"start\"==e.event?o:u)(e.node)}for(var s=0,f=\"\",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else\"start\"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof a.k?c(\"keyword\",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\\b\\w+\\b/,!0),i&&(a.bK&&(a.b=\"\\\\b(\"+a.bK.split(\" \").join(\"|\")+\")\\\\b\"),a.b||(a.b=/\\B|\\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\\B|\\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||\"\",a.eW&&i.tE&&(a.tE+=(a.e?\"|\":\"\")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?\"\":E.classPrefix,i='<span class=\"'+a,o=t?\"\":\"</span>\";return i+=e+'\">',i+n+o}function p(){if(!L.k)return n(y);var e=\"\",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e=\"string\"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,\"\",!0):\"\";e.rB?(k+=r,y=\"\"):e.eB?(k+=n(t)+r,y=\"\"):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+=\"</span>\"),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y=\"\",a.starts&&v(a.starts,\"\"),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme \"'+t+'\" for mode \"'+(L.cN||\"<unnamed>\")+'\"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var R,L=i||N,M={},k=\"\";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,\"\",!0)+k);var y=\"\",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+=\"</span>\");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\\t)+)/gm,function(e,n){return n.replace(/\\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\\n/g,\"<br>\")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),t.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");Array.prototype.forEach.call(e,p)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\\b/},e.C=function(n,t,r){var a=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),a},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"header\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"blockquote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"`.+?`\"},{b:\"^( {4}|\t)\",e:\"$\",r:0}]},{cN:\"horizontal_rule\",b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"link_label\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,r:0},{cN:\"link_url\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"link_reference\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],r:10},{b:\"^\\\\[.+\\\\]:\",rB:!0,c:[{cN:\"link_reference\",b:\"\\\\[\",e:\"\\\\]:\",eB:!0,eE:!0,starts:{cN:\"link_url\",e:\"$\"}}]}]}});hljs.registerLanguage(\"ruby\",function(e){var c=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",r=\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",b={cN:\"doctag\",b:\"@[A-Za-z]+\"},a={cN:\"value\",b:\"#<\",e:\">\"},n=[e.C(\"#\",\"$\",{c:[b]}),e.C(\"^\\\\=begin\",\"^\\\\=end\",{c:[b],r:10}),e.C(\"^__END__\",\"\\\\n$\")],s={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:r},t={cN:\"string\",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/`/,e:/`/},{b:\"%[qQwWx]?\\\\(\",e:\"\\\\)\"},{b:\"%[qQwWx]?\\\\[\",e:\"\\\\]\"},{b:\"%[qQwWx]?{\",e:\"}\"},{b:\"%[qQwWx]?<\",e:\">\"},{b:\"%[qQwWx]?/\",e:\"/\"},{b:\"%[qQwWx]?%\",e:\"%\"},{b:\"%[qQwWx]?-\",e:\"-\"},{b:\"%[qQwWx]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/}]},i={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",k:r},d=[t,a,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[e.inherit(e.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{cN:\"inheritance\",b:\"<\\\\s*\",c:[{cN:\"parent\",b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(n)},{cN:\"function\",bK:\"def\",e:\"$|;\",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:\"constant\",b:\"(::)?(\\\\b[A-Z]\\\\w*(::)?)+\",r:0},{cN:\"symbol\",b:e.UIR+\"(\\\\!|\\\\?)?:\",r:0},{cN:\"symbol\",b:\":\",c:[t,{b:c}],r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[a,{cN:\"regexp\",c:[e.BE,s],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o=\"[>?]>\",l=\"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>\",u=\"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>\",N=[{b:/^\\s*=>/,cN:\"status\",starts:{e:\"$\",c:d}},{cN:\"prompt\",b:\"^(\"+o+\"|\"+l+\"|\"+u+\")\",starts:{e:\"$\",c:d}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:r,c:n.concat(N).concat(d)}});hljs.registerLanguage(\"makefile\",function(e){var a={cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]};return{aliases:[\"mk\",\"mak\"],c:[e.HCM,{b:/^\\w+\\s*\\W*=/,rB:!0,r:0,starts:{cN:\"constant\",e:/\\s*\\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:\"title\",b:/^[\\w]+:\\s*$/},{cN:\"phony\",b:/^\\.PHONY:/,e:/$/,k:\".PHONY\",l:/[\\.\\w]+/},{b:/^\\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage(\"json\",function(e){var t={literal:\"true false null\"},i=[e.QSM,e.CNM],l={cN:\"value\",e:\",\",eW:!0,eE:!0,c:i,k:t},c={b:\"{\",e:\"}\",c:[{cN:\"attribute\",b:'\\\\s*\"',e:'\"\\\\s*:\\\\s*',eB:!0,eE:!0,c:[e.BE],i:\"\\\\n\",starts:l}],i:\"\\\\S\"},n={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(l,{cN:null})],i:\"\\\\S\"};return i.splice(i.length,0,c,n),{c:i,k:t,i:\"\\\\S\"}});hljs.registerLanguage(\"xml\",function(t){var s=\"[A-Za-z0-9\\\\._:-]+\",c={b:/<\\?(php)?(?!\\w)/,e:/\\?>/,sL:\"php\"},e={eW:!0,i:/</,r:0,c:[c,{cN:\"attribute\",b:s,r:0},{b:\"=\",r:0,c:[{cN:\"value\",c:[c],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\\/>]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},t.C(\"<!--\",\"-->\",{r:10}),{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[e],starts:{e:\"</style>\",rE:!0,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[e],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\"]}},c,{cN:\"pi\",b:/<\\?\\w+/,e:/\\?>/,r:10},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"title\",b:/[^ \\/><\\n\\t]+/,r:0},e]}]}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",a={cN:\"function\",b:c+\"\\\\(\",rB:!0,eE:!0,e:\"\\\\(\"},r={cN:\"rule\",b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{cN:\"value\",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"},{cN:\"important\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,r,{cN:\"id\",b:/\\#[A-Za-z0-9_-]+/},{cN:\"class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"attr_selector\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/},{cN:\"at_rule\",b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:\"tag\",b:c,r:0},{cN:\"rules\",b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage(\"perl\",function(e){var t=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\",r={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:t},s={b:\"->{\",e:\"}\"},n={cN:\"variable\",v:[{b:/\\$\\d/},{b:/[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},{b:/[\\$%@][^\\s\\w{]/,r:0}]},o=[e.BE,r,n],i=[n,e.HCM,e.C(\"^\\\\=\\\\w\",\"\\\\=cut\",{eW:!0}),s,{cN:\"string\",c:o,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",r:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",r:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",r:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",r:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",r:5},{b:\"qw\\\\s+q\",e:\"q\",r:5},{b:\"'\",e:\"'\",c:[e.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[e.BE]},{b:\"{\\\\w+}\",c:[],r:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],r:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\\\\/\\\\/|\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",r:0,c:[e.HCM,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",r:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],r:0}]},{cN:\"sub\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",r:5},{cN:\"operator\",b:\"-\\\\w\\\\b\",r:0},{b:\"^__DATA__$\",e:\"^__END__$\",sL:\"mojolicious\",c:[{b:\"^@@.*\",e:\"$\",cN:\"comment\"}]}];return r.c=i,s.c=i,{aliases:[\"pl\"],k:t,c:i}});hljs.registerLanguage(\"cs\",function(e){var r=\"abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield\",t=e.IR+\"(<\"+e.IR+\">)?\";return{aliases:[\"csharp\"],k:r,i:/::/,c:[e.C(\"///\",\"$\",{rB:!0,c:[{cN:\"xmlDocTag\",v:[{b:\"///\",r:0},{b:\"<!--|-->\"},{b:\"</?\",e:\">\"}]}]}),e.CLCM,e.CBCM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line region endregion pragma checksum\"},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},e.ASM,e.QSM,e.CNM,{bK:\"class interface\",e:/[{;=]/,i:/[^\\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\"namespace\",e:/[{;=]/,i:/[^\\s:]/,c:[{cN:\"title\",b:\"[a-zA-Z](\\\\.?\\\\w)*\",r:0},e.CLCM,e.CBCM]},{bK:\"new return throw await\",r:0},{cN:\"function\",b:\"(\"+t+\"\\\\s+)+\"+e.IR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+\"\\\\s*\\\\(\",rB:!0,c:[e.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\"apache\",function(e){var r={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:!0,c:[e.HCM,{cN:\"tag\",b:\"</?\",e:\">\"},{cN:\"keyword\",b:/\\w+/,r:0,k:{common:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,r:0,k:{literal:\"on off all\"},c:[{cN:\"sqbracket\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"cbracket\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",r]},r,e.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"http\",function(t){return{aliases:[\"https\"],i:\"\\\\S\",c:[{cN:\"status\",b:\"^HTTP/[0-9\\\\.]+\",e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{cN:\"request\",b:\"^[A-Z]+ (.*?) HTTP/[0-9\\\\.]+$\",rB:!0,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:!0,eE:!0}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:!0,i:\"\\\\n|\\\\s|=\",starts:{cN:\"string\",e:\"$\"}},{b:\"\\\\n\\\\n\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\"objectivec\",function(e){var t={cN:\"built_in\",b:\"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\\\w+\"},i={keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n=\"@interface @class @protocol @implementation\";return{aliases:[\"mm\",\"objc\",\"obj-c\"],k:i,l:o,i:\"</\",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"}]},{cN:\"preprocessor\",b:\"#\",e:\"$\",c:[{cN:\"title\",v:[{b:'\"',e:'\"'},{b:\"<\",e:\">\"}]}]},{cN:\"class\",b:\"(\"+n.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:!0,k:n,l:o,c:[e.UTM]},{cN:\"variable\",b:\"\\\\.\"+e.UIR,r:0}]}});hljs.registerLanguage(\"python\",function(e){var r={cN:\"prompt\",b:/^(>>>|\\.\\.\\.) /},b={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},a={cN:\"number\",r:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},l={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",r,a,b]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)/,c:[r,a,b,e.HCM,{v:[{cN:\"function\",bK:\"def\",r:10},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,l]},{cN:\"decorator\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"java\",function(e){var a=e.UIR+\"(<\"+e.UIR+\">)?\",t=\"false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private\",c=\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",r={cN:\"number\",b:c,r:0};return{aliases:[\"jsp\"],k:t,i:/<\\/|#/,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{r:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:!0,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+a+\"\\\\s+)+\"+e.UIR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,r:0,c:[e.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:\"annotation\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\.]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",operator:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"shebang\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage(\"sql\",function(e){var t=e.C(\"--\",\"$\");return{cI:!0,i:/[<>{}*]/,c:[{cN:\"operator\",bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke\",e:/;/,eW:!0,k:{keyword:\"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\",literal:\"true false null\",built_in:\"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE,{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[e.BE,{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage(\"nginx\",function(e){var r={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+e.UIR}]},b={eW:!0,l:\"[a-z/_]+\",k:{built_in:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},r:0,i:\"=>\",c:[e.HCM,{cN:\"string\",c:[e.BE,r],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{cN:\"url\",b:\"([a-z]+):/\",e:\"\\\\s\",eW:!0,eE:!0,c:[r]},{cN:\"regexp\",c:[e.BE,r],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:!0},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:!0},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",r:0},r]};return{aliases:[\"nginxconf\"],c:[e.HCM,{b:e.UIR+\"\\\\s\",e:\";|{\",rB:!0,c:[{cN:\"title\",b:e.UIR,starts:b}],r:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"cpp\",function(t){var e={cN:\"keyword\",b:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},r={cN:\"string\",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?\"'}),{b:'(u8?|U)?R\"',e:'\"',c:[t.BE]},{b:\"'\\\\\\\\?.\",e:\"'\",i:\".\"}]},s={cN:\"number\",v:[{b:\"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)\"},{b:t.CNR}]},i={cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line pragma ifdef ifndef\",c:[{b:/\\\\\\n/,r:0},{bK:\"include\",e:\"$\",c:[r,{cN:\"string\",b:\"<\",e:\">\",i:\"\\\\n\"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+\"\\\\s*\\\\(\",c={keyword:\"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong\",built_in:\"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf\",literal:\"true false nullptr NULL\"};return{aliases:[\"c\",\"cc\",\"h\",\"c++\",\"h++\",\"hpp\"],k:c,i:\"</\",c:[e,t.CLCM,t.CBCM,s,r,i,{b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:c,c:[\"self\",e]},{b:t.IR+\"::\",k:c},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+t.IR+\"[\\\\*&\\\\s]+)+\"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\\w\\s\\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage(\"php\",function(e){var c={cN:\"variable\",b:\"\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\"},a={cN:\"preprocessor\",b:/<\\?(php)?|\\?>/},i={cN:\"string\",c:[e.BE,a],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:[\"php3\",\"php4\",\"php5\",\"php6\"],cI:!0,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[e.CLCM,e.HCM,e.C(\"/\\\\*\",\"\\\\*/\",{c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"},a]}),e.C(\"__halt_compiler.+?;\",!1,{eW:!0,k:\"__halt_compiler\",l:e.UIR}),{cN:\"string\",b:/<<<['\"]?\\w+['\"]?$/,e:/^\\w+;?$/,c:[e.BE,{cN:\"subst\",v:[{b:/\\$\\w+/},{b:/\\{\\$/,e:/\\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/},{cN:\"function\",bK:\"function\",e:/[;{]/,eE:!0,i:\"\\\\$|\\\\[|%\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",c,e.CBCM,i,t]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:!0,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[e.UTM]},{bK:\"use\",e:\";\",c:[e.UTM]},{b:\"=>\"},i,t]}});hljs.registerLanguage(\"coffeescript\",function(e){var c={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",built_in:\"npm require console print module global window document\"},n=\"[A-Za-z$_][0-9A-Za-z$_]*\",r={cN:\"subst\",b:/#\\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:\"(\\\\s*/)?\",r:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[e.BE,r]},{b:/\"/,e:/\"/,c:[e.BE,r]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[r,e.HCM]},{b:\"//[gim]*\",r:0},{b:/\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W|$)/}]},{cN:\"property\",b:\"@\"+n},{b:\"`\",e:\"`\",eB:!0,eE:!0,sL:\"javascript\"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i=\"(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",o={cN:\"params\",b:\"\\\\([^\\\\(]\",rB:!0,c:[{b:/\\(/,e:/\\)/,k:c,c:[\"self\"].concat(t)}]};return{aliases:[\"coffee\",\"cson\",\"iced\"],k:c,i:/\\/\\*/,c:t.concat([e.C(\"###\",\"###\"),e.HCM,{cN:\"function\",b:\"^\\\\s*\"+n+\"\\\\s*=\\\\s*\"+i,e:\"[-=]>\",rB:!0,c:[s,o]},{b:/[:\\(,=]\\s*/,r:0,c:[{cN:\"function\",b:i,e:\"[-=]>\",rB:!0,c:[o]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:!0,i:/[:=\"\\[\\]]/,c:[s]},s]},{cN:\"attribute\",b:n+\":\",e:\":\",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage(\"javascript\",function(e){return{aliases:[\"js\"],k:{keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},c:[{cN:\"pi\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},e.ASM,e.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,{cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\"}]},e.CLCM,e.CBCM,{cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\\s*[);\\]]/,r:0,sL:\"xml\"}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\\[|%/},{b:/\\$[(.]/},{b:\"\\\\.\"+e.IR,r:0},{bK:\"import\",e:\"[;$]\",k:\"import from as\",c:[e.ASM,e.QSM]},{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]}],i:/#/}});hljs.registerLanguage(\"ini\",function(e){var c={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",r:10},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[e.C(\";\",\"$\"),e.HCM,{cN:\"title\",b:/^\\s*\\[+/,e:/\\]+/},{cN:\"setting\",b:/^[a-z0-9\\[\\]_-]+\\s*=\\s*/,e:\"$\",c:[{cN:\"value\",eW:!0,k:\"on off true false yes no\",c:[{cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},c,{cN:\"number\",b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage(\"diff\",function(e){return{aliases:[\"patch\"],c:[{cN:\"chunk\",r:10,v:[{b:/^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"header\",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\\-\\-\\-/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+\\+\\+/,e:/$/},{b:/\\*{5}/,e:/\\*{5}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"change\",b:\"^\\\\!\",e:\"$\"}]}});\nexports.hljs = hljs;\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/highlight/highlight.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/highlight/highlight.css": {
"text": "/*\n\nOriginal style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>\n\n*/\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #f0f0f0;\n -webkit-text-size-adjust: none;\n}\n\n.hljs,\n.hljs-subst,\n.hljs-tag .hljs-title,\n.nginx .hljs-title {\n color: black;\n}\n\n.hljs-string,\n.hljs-title,\n.hljs-constant,\n.hljs-parent,\n.hljs-tag .hljs-value,\n.hljs-rule .hljs-value,\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-name,\n.haml .hljs-symbol,\n.ruby .hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-template_tag,\n.django .hljs-variable,\n.smalltalk .hljs-class,\n.hljs-addition,\n.hljs-flow,\n.hljs-stream,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.apache .hljs-cbracket,\n.tex .hljs-command,\n.tex .hljs-special,\n.erlang_repl .hljs-function_or_atom,\n.asciidoc .hljs-header,\n.markdown .hljs-header,\n.coffeescript .hljs-attribute,\n.tp .hljs-variable {\n color: #800;\n}\n\n.smartquote,\n.hljs-comment,\n.hljs-annotation,\n.diff .hljs-header,\n.hljs-chunk,\n.asciidoc .hljs-blockquote,\n.markdown .hljs-blockquote {\n color: #888;\n}\n\n.hljs-number,\n.hljs-date,\n.hljs-regexp,\n.hljs-literal,\n.hljs-hexcolor,\n.smalltalk .hljs-symbol,\n.smalltalk .hljs-char,\n.go .hljs-constant,\n.hljs-change,\n.lasso .hljs-variable,\n.makefile .hljs-variable,\n.asciidoc .hljs-bullet,\n.markdown .hljs-bullet,\n.asciidoc .hljs-link_url,\n.markdown .hljs-link_url {\n color: #080;\n}\n\n.hljs-label,\n.ruby .hljs-string,\n.hljs-decorator,\n.hljs-filter .hljs-argument,\n.hljs-localvars,\n.hljs-array,\n.hljs-attr_selector,\n.hljs-important,\n.hljs-pseudo,\n.hljs-pi,\n.haml .hljs-bullet,\n.hljs-doctype,\n.hljs-deletion,\n.hljs-envvar,\n.hljs-shebang,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in,\n.tex .hljs-formula,\n.erlang_repl .hljs-reserved,\n.hljs-prompt,\n.asciidoc .hljs-link_label,\n.markdown .hljs-link_label,\n.vhdl .hljs-attribute,\n.clojure .hljs-attribute,\n.asciidoc .hljs-attribute,\n.lasso .hljs-attribute,\n.coffeescript .hljs-property,\n.hljs-phony {\n color: #88f;\n}\n\n.hljs-keyword,\n.hljs-id,\n.hljs-title,\n.hljs-built_in,\n.css .hljs-tag,\n.hljs-doctag,\n.smalltalk .hljs-class,\n.hljs-winutils,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.hljs-type,\n.hljs-typename,\n.tex .hljs-command,\n.asciidoc .hljs-strong,\n.markdown .hljs-strong,\n.hljs-request,\n.hljs-status,\n.tp .hljs-data,\n.tp .hljs-io {\n font-weight: bold;\n}\n\n.asciidoc .hljs-emphasis,\n.markdown .hljs-emphasis,\n.tp .hljs-units {\n font-style: italic;\n}\n\n.nginx .hljs-built_in {\n font-weight: normal;\n}\n\n.coffeescript .javascript,\n.javascript .xml,\n.lasso .markup,\n.tex .hljs-formula,\n.xml .javascript,\n.xml .vbscript,\n.xml .css,\n.xml .hljs-cdata {\n opacity: 0.5;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/highlight/highlight.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/highlight/highlightblock.js": {
"title": "$:/plugins/tiddlywiki/highlight/highlightblock.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\ntype: application/javascript\nmodule-type: widget\n\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TYPE_MAPPINGS_BASE = \"$:/config/HighlightPlugin/TypeMappings/\";\n\nvar CodeBlockWidget = require(\"$:/core/modules/widgets/codeblock.js\").codeblock;\n\nvar hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n\nhljs.configure({tabReplace: \" \"});\t\n\nCodeBlockWidget.prototype.postRender = function() {\n\tvar domNode = this.domNodes[0],\n\t\tlanguage = this.language,\n\t\ttiddler = this.wiki.getTiddler(TYPE_MAPPINGS_BASE + language);\n\tif(tiddler) {\n\t\tlanguage = tiddler.fields.text || \"\";\n\t}\n\tif(language && hljs.listLanguages().indexOf(language) !== -1) {\n\t\tdomNode.className = language.toLowerCase() + \" hljs\";\n\t\tif($tw.browser && !domNode.isTiddlyWikiFakeDom) {\n\t\t\thljs.highlightBlock(domNode);\t\t\t\n\t\t} else {\n\t\t\tvar text = domNode.textContent;\n\t\t\tdomNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(language,text).value);\n\t\t\t// If we're using the fakedom then specially save the original raw text\n\t\t\tif(domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tdomNode.children[0].textInnerHTML = text;\n\t\t\t}\n\t\t}\n\t}\t\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/highlight/license": {
"title": "$:/plugins/tiddlywiki/highlight/license",
"type": "text/plain",
"text": "Copyright (c) 2006, Ivan Sagalaev\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of highlight.js nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
},
"$:/plugins/tiddlywiki/highlight/readme": {
"title": "$:/plugins/tiddlywiki/highlight/readme",
"text": "This plugin provides syntax highlighting of code blocks using v8.8.0 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev.\n\n! Usage\n\nWhen the plugin is installed it automatically applies highlighting to all codeblocks defined with triple backticks or with the CodeBlockWidget.\n\nThe language can optionally be specified after the opening triple braces:\n\n<$codeblock code=\"\"\"```css\n * { margin: 0; padding: 0; } /* micro reset */\n\nhtml { font-size: 62.5%; }\nbody { font-size: 14px; font-size: 1.4rem; } /* =14px */\nh1 { font-size: 24px; font-size: 2.4rem; } /* =24px */\n```\"\"\"/>\n\nIf no language is specified highlight.js will attempt to automatically detect the language.\n\n! Built-in Language Brushes\n\nThe plugin includes support for the following languages (referred to as \"brushes\" by highlight.js):\n\n* apache\n* bash\n* coffeescript\n* cpp\n* cs\n* css\n* diff\n* http\n* ini\n* java\n* javascript\n* json\n* makefile\n* markdown\n* nginx\n* objectivec\n* perl\n* php\n* python\n* ruby\n* sql\n* xml\n\nYou can also specify the language as a MIME content type (eg `text/html` or `text/css`). The mapping is accomplished via mapping tiddlers whose titles start with `$:/config/HighlightPlugin/TypeMappings/`.\n"
},
"$:/plugins/tiddlywiki/highlight/styles": {
"title": "$:/plugins/tiddlywiki/highlight/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": ".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:teal}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.scss .hljs-preprocessor{color:#900;font-weight:bold}.hljs-list .hljs-keyword,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword{color:navy;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name{color:teal}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}"
},
"$:/plugins/tiddlywiki/highlight/usage": {
"title": "$:/plugins/tiddlywiki/highlight/usage",
"text": "! Usage\n\nFenced code blocks can have a language specifier added to trigger highlighting in a specific language. Otherwise heuristics are used to detect the language.\n\n```\n ```js\n var a = b + c; // Highlighted as JavaScript\n ```\n```\n! Adding Themes\n\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub:\n\nhttps://github.com/isagalaev/highlight.js/tree/master/src/styles\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/jszip/jszip.js": {
"text": "/*!\n\nJSZip - A Javascript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n*/\n!function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var b;\"undefined\"!=typeof window?b=window:\"undefined\"!=typeof global?b=global:\"undefined\"!=typeof self&&(b=self),b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error(\"Cannot find module '\"+g+\"'\")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){\"use strict\";var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";c.encode=function(a){for(var b,c,e,f,g,h,i,j=\"\",k=0;k<a.length;)b=a.charCodeAt(k++),c=a.charCodeAt(k++),e=a.charCodeAt(k++),f=b>>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j=\"\",k=0;for(a=a.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");k<a.length;)f=d.indexOf(a.charAt(k++)),g=d.indexOf(a.charAt(k++)),h=d.indexOf(a.charAt(k++)),i=d.indexOf(a.charAt(k++)),b=f<<2|g>>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)),64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){\"use strict\";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){\"use strict\";c.STORE={magic:\"\\x00\\x00\",compress:function(a){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a(\"./flate\")},{\"./flate\":8}],4:[function(a,b){\"use strict\";var c=a(\"./utils\"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if(\"undefined\"==typeof a||!a.length)return 0;var e=\"string\"!==c.getTypeOf(a);\"undefined\"==typeof b&&(b=0);var f=0,g=0,h=0;b=-1^b;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{\"./utils\":21}],5:[function(a,b){\"use strict\";function c(){this.data=null,this.length=0,this.index=0}var d=a(\"./utils\");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<a||0>a)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+a+\"). Corrupted zip ?\")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo(\"string\",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{\"./utils\":21}],6:[function(a,b,c){\"use strict\";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],7:[function(a,b,c){\"use strict\";var d=a(\"./utils\");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo(\"uint8array\",a)},c.uint8Array2String=function(a){return d.transformTo(\"string\",a)},c.string2Blob=function(a){var b=d.transformTo(\"arraybuffer\",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{\"./utils\":21}],8:[function(a,b,c){\"use strict\";var d=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,e=a(\"pako\");c.uncompressInputType=d?\"uint8array\":\"array\",c.compressInputType=d?\"uint8array\":\"array\",c.magic=\"\\b\\x00\",c.compress=function(a,b){return e.deflateRaw(a,{level:b.level||-1})},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){\"use strict\";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root=\"\",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)\"function\"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a(\"./base64\");c.prototype=a(\"./object\"),c.prototype.load=a(\"./load\"),c.support=a(\"./support\"),c.defaults=a(\"./defaults\"),c.utils=a(\"./deprecatedPublicUtils\"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a(\"./compressions\"),b.exports=c},{\"./base64\":1,\"./compressions\":3,\"./defaults\":6,\"./deprecatedPublicUtils\":7,\"./load\":10,\"./object\":13,\"./support\":17}],10:[function(a,b){\"use strict\";var c=a(\"./base64\"),d=a(\"./zipEntries\");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;g<e.length;g++)h=e[g],this.file(h.fileName,h.decompressed,{binary:!0,optimizedBinaryString:!0,date:h.date,dir:h.dir,comment:h.fileComment.length?h.fileComment:null,unixPermissions:h.unixPermissions,dosPermissions:h.dosPermissions,createFolders:b.createFolders});return f.zipComment.length&&(this.comment=f.zipComment),this}},{\"./base64\":1,\"./zipEntries\":22}],11:[function(a,b){(function(a){\"use strict\";b.exports=function(b,c){return new a(b,c)},b.exports.test=function(b){return a.isBuffer(b)}}).call(this,\"undefined\"!=typeof Buffer?Buffer:void 0)},{}],12:[function(a,b){\"use strict\";function c(a){this.data=a,this.length=this.data.length,this.index=0}var d=a(\"./uint8ArrayReader\");c.prototype=new d,c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{\"./uint8ArrayReader\":18}],13:[function(a,b){\"use strict\";var c=a(\"./support\"),d=a(\"./utils\"),e=a(\"./crc32\"),f=a(\"./signature\"),g=a(\"./defaults\"),h=a(\"./base64\"),i=a(\"./compressions\"),j=a(\"./compressedObject\"),k=a(\"./nodeBuffer\"),l=a(\"./utf8\"),m=a(\"./stringWriter\"),n=a(\"./uint8ArrayWriter\"),o=function(a){if(a._data instanceof j&&(a._data=a._data.getContent(),a.options.binary=!0,a.options.base64=!1,\"uint8array\"===d.getTypeOf(a._data))){var b=a._data;a._data=new Uint8Array(b.length),0!==b.length&&a._data.set(b,0)}return a._data},p=function(a){var b=o(a),e=d.getTypeOf(b);return\"string\"===e?!a.options.binary&&c.nodebuffer?k(b,\"utf-8\"):a.asBinary():b},q=function(a){var b=o(this);return null===b||\"undefined\"==typeof b?\"\":(this.options.base64&&(b=h.decode(b)),b=a&&this.options.binary?D.utf8decode(b):d.transformTo(\"string\",b),a||this.options.binary||(b=d.transformTo(\"string\",D.utf8encode(b))),b)},r=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this.unixPermissions=c.unixPermissions,this.dosPermissions=c.dosPermissions,this._data=b,this.options=c,this._initialMetadata={dir:c.dir,date:c.date}};r.prototype={asText:function(){return q.call(this,!0)},asBinary:function(){return q.call(this,!1)},asNodeBuffer:function(){var a=p(this);return d.transformTo(\"nodebuffer\",a)},asUint8Array:function(){var a=p(this);return d.transformTo(\"uint8array\",a)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var s=function(a,b){var c,d=\"\";for(c=0;b>c;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&\"undefined\"==typeof c[b]&&(c[b]=arguments[a][b]);return c},u=function(a){return a=a||{},a.base64!==!0||null!==a.binary&&void 0!==a.binary||(a.binary=!0),a=t(a,g),a.date=a.date||new Date,null!==a.compression&&(a.compression=a.compression.toUpperCase()),a},v=function(a,b,c){var e,f=d.getTypeOf(b);if(c=u(c),\"string\"==typeof c.unixPermissions&&(c.unixPermissions=parseInt(c.unixPermissions,8)),c.unixPermissions&&16384&c.unixPermissions&&(c.dir=!0),c.dosPermissions&&16&c.dosPermissions&&(c.dir=!0),c.dir&&(a=x(a)),c.createFolders&&(e=w(a))&&y.call(this,e,!0),c.dir||null===b||\"undefined\"==typeof b)c.base64=!1,c.binary=!1,b=null,f=null;else if(\"string\"===f)c.binary&&!c.base64&&c.optimizedBinaryString!==!0&&(b=d.string2binary(b));else{if(c.base64=!1,c.binary=!0,!(f||b instanceof j))throw new Error(\"The data of '\"+a+\"' is in an unsupported format !\");\"arraybuffer\"===f&&(b=d.transformTo(\"uint8array\",b))}var g=new r(a,b,c);return this.files[a]=g,g},w=function(a){\"/\"==a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf(\"/\");return b>0?a.substring(0,b):\"\"},x=function(a){return\"/\"!=a.slice(-1)&&(a+=\"/\"),a},y=function(a,b){return b=\"undefined\"!=typeof b?b:!1,a=x(a),this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},z=function(a,b,c){var f,g=new j;return a._data instanceof j?(g.uncompressedSize=a._data.uncompressedSize,g.crc32=a._data.crc32,0===g.uncompressedSize||a.dir?(b=i.STORE,g.compressedContent=\"\",g.crc32=0):a._data.compressionMethod===b.magic?g.compressedContent=a._data.getCompressedContent():(f=a._data.getContent(),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c))):(f=p(a),(!f||0===f.length||a.dir)&&(b=i.STORE,f=\"\"),g.uncompressedSize=f.length,g.crc32=e(f),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c)),g.compressedSize=g.compressedContent.length,g.compressionMethod=b.magic,g},A=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},B=function(a){return 63&(a||0)},C=function(a,b,c,g,h){var i,j,k,m,n=(c.compressedContent,d.transformTo(\"string\",l.utf8encode(b.name))),o=b.comment||\"\",p=d.transformTo(\"string\",l.utf8encode(o)),q=n.length!==b.name.length,r=p.length!==o.length,t=b.options,u=\"\",v=\"\",w=\"\";k=b._initialMetadata.dir!==b.dir?b.dir:t.dir,m=b._initialMetadata.date!==b.date?b.date:t.date;var x=0,y=0;k&&(x|=16),\"UNIX\"===h?(y=798,x|=A(b.unixPermissions,k)):(y=20,x|=B(b.dosPermissions,k)),i=m.getHours(),i<<=6,i|=m.getMinutes(),i<<=5,i|=m.getSeconds()/2,j=m.getFullYear()-1980,j<<=4,j|=m.getMonth()+1,j<<=5,j|=m.getDate(),q&&(v=s(1,1)+s(e(n),4)+n,u+=\"up\"+s(v.length,2)+v),r&&(w=s(1,1)+s(this.crc32(p),4)+p,u+=\"uc\"+s(w.length,2)+w);var z=\"\";z+=\"\\n\\x00\",z+=q||r?\"\\x00\\b\":\"\\x00\\x00\",z+=c.compressionMethod,z+=s(i,2),z+=s(j,2),z+=s(c.crc32,4),z+=s(c.compressedSize,4),z+=s(c.uncompressedSize,4),z+=s(n.length,2),z+=s(u.length,2);var C=f.LOCAL_FILE_HEADER+z+n+u,D=f.CENTRAL_FILE_HEADER+s(y,2)+z+s(p.length,2)+\"\\x00\\x00\\x00\\x00\"+s(x,4)+s(g,4)+n+u+p;return{fileRecord:C,dirRecord:D,compressedObject:c}},D={load:function(){throw new Error(\"Load method is not defined. Is the file jszip-load.js included ?\")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=y.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||(\"/\"!=a.slice(-1)&&(a+=\"/\"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){a=t(a||{},{base64:!0,compression:\"STORE\",compressionOptions:null,type:\"base64\",platform:\"DOS\",comment:null,mimeType:\"application/zip\"}),d.checkSupport(a.type),(\"darwin\"===a.platform||\"freebsd\"===a.platform||\"linux\"===a.platform||\"sunos\"===a.platform)&&(a.platform=\"UNIX\"),\"win32\"===a.platform&&(a.platform=\"DOS\");var b,c,e=[],g=0,j=0,k=d.transformTo(\"string\",this.utf8encode(a.comment||this.comment||\"\"));for(var l in this.files)if(this.files.hasOwnProperty(l)){var o=this.files[l],p=o.options.compression||a.compression.toUpperCase(),q=i[p];if(!q)throw new Error(p+\" is not a valid compression method !\");var r=o.options.compressionOptions||a.compressionOptions||{},u=z.call(this,o,q,r),v=C.call(this,l,o,u,g,a.platform);g+=v.fileRecord.length+u.compressedSize,j+=v.dirRecord.length,e.push(v)}var w=\"\";w=f.CENTRAL_DIRECTORY_END+\"\\x00\\x00\\x00\\x00\"+s(e.length,2)+s(e.length,2)+s(j,4)+s(g,4)+s(k.length,2)+k;var x=a.type.toLowerCase();for(b=\"uint8array\"===x||\"arraybuffer\"===x||\"blob\"===x||\"nodebuffer\"===x?new n(g+j+w.length):new m(g+j+w.length),c=0;c<e.length;c++)b.append(e[c].fileRecord),b.append(e[c].compressedObject.compressedContent);for(c=0;c<e.length;c++)b.append(e[c].dirRecord);b.append(w);var y=b.finalize();switch(a.type.toLowerCase()){case\"uint8array\":case\"arraybuffer\":case\"nodebuffer\":return d.transformTo(a.type.toLowerCase(),y);case\"blob\":return d.arrayBuffer2Blob(d.transformTo(\"arraybuffer\",y),a.mimeType);case\"base64\":return a.base64?h.encode(y):y;default:return y}},crc32:function(a,b){return e(a,b)},utf8encode:function(a){return d.transformTo(\"string\",l.utf8encode(a))},utf8decode:function(a){return l.utf8decode(a)}};b.exports=D},{\"./base64\":1,\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./defaults\":6,\"./nodeBuffer\":11,\"./signature\":14,\"./stringWriter\":16,\"./support\":17,\"./uint8ArrayWriter\":19,\"./utf8\":20,\"./utils\":21}],14:[function(a,b,c){\"use strict\";c.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",c.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",c.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",c.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",c.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],15:[function(a,b){\"use strict\";function c(a,b){this.data=a,b||(this.data=e.string2binary(this.data)),this.length=this.data.length,this.index=0}var d=a(\"./dataReader\"),e=a(\"./utils\");c.prototype=new d,c.prototype.byteAt=function(a){return this.data.charCodeAt(a)},c.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)},c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{\"./dataReader\":5,\"./utils\":21}],16:[function(a,b){\"use strict\";var c=a(\"./utils\"),d=function(){this.data=[]};d.prototype={append:function(a){a=c.transformTo(\"string\",a),this.data.push(a)},finalize:function(){return this.data.join(\"\")}},b.exports=d},{\"./utils\":21}],17:[function(a,b,c){(function(a){\"use strict\";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,c.nodebuffer=\"undefined\"!=typeof a,c.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)c.blob=!1;else{var b=new ArrayBuffer(0);try{c.blob=0===new Blob([b],{type:\"application/zip\"}).size}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;f.append(b),c.blob=0===f.getBlob(\"application/zip\").size}catch(d){c.blob=!1}}}}).call(this,\"undefined\"!=typeof Buffer?Buffer:void 0)},{}],18:[function(a,b){\"use strict\";function c(a){a&&(this.data=a,this.length=this.data.length,this.index=0)}var d=a(\"./dataReader\");c.prototype=new d,c.prototype.byteAt=function(a){return this.data[a]},c.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{\"./dataReader\":5}],19:[function(a,b){\"use strict\";var c=a(\"./utils\"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo(\"uint8array\",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{\"./utils\":21}],20:[function(a,b,c){\"use strict\";for(var d=a(\"./utils\"),e=a(\"./support\"),f=a(\"./nodeBuffer\"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(e=a[b++],128>e)i[c++]=e;else if(f=g[e],f>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,\"utf-8\"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo(\"nodebuffer\",a).toString(\"utf-8\");a=d.transformTo(e.uint8array?\"uint8array\":\"array\",a);for(var b=[],c=0,f=a.length,g=65536;f>c;){var h=j(a,Math.min(c+g,f));b.push(e.uint8array?k(a.subarray(c,h)):k(a.slice(c,h))),c=h}return b.join(\"\")}},{\"./nodeBuffer\":11,\"./support\":17,\"./utils\":21}],21:[function(a,b,c){\"use strict\";function d(a){return a}function e(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function f(a){var b=65536,d=[],e=a.length,f=c.getTypeOf(a),g=0,h=!0;try{switch(f){case\"uint8array\":String.fromCharCode.apply(null,new Uint8Array(0));break;case\"nodebuffer\":String.fromCharCode.apply(null,j(0))}}catch(i){h=!1}if(!h){for(var k=\"\",l=0;l<a.length;l++)k+=String.fromCharCode(a[l]);return k}for(;e>g&&b>1;)try{d.push(\"array\"===f||\"nodebuffer\"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join(\"\")}function g(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];return b}var h=a(\"./support\"),i=a(\"./compressions\"),j=a(\"./nodeBuffer\");c.string2binary=function(a){for(var b=\"\",c=0;c<a.length;c++)b+=String.fromCharCode(255&a.charCodeAt(c));return b},c.arrayBuffer2Blob=function(a,b){c.checkSupport(\"blob\"),b=b||\"application/zip\";try{return new Blob([a],{type:b})}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;return f.append(a),f.getBlob(b)}catch(d){throw new Error(\"Bug : can't construct the Blob.\")}}},c.applyFromCharCode=f;var k={};k.string={string:d,array:function(a){return e(a,new Array(a.length))},arraybuffer:function(a){return k.string.uint8array(a).buffer},uint8array:function(a){return e(a,new Uint8Array(a.length))},nodebuffer:function(a){return e(a,j(a.length))}},k.array={string:f,array:d,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(a)}},k.arraybuffer={string:function(a){return f(new Uint8Array(a))},array:function(a){return g(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:d,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(new Uint8Array(a))}},k.uint8array={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:d,nodebuffer:function(a){return j(a)}},k.nodebuffer={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return k.nodebuffer.uint8array(a).buffer},uint8array:function(a){return g(a,new Uint8Array(a.length))},nodebuffer:d},c.transformTo=function(a,b){if(b||(b=\"\"),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=k[d][a](b);return e},c.getTypeOf=function(a){return\"string\"==typeof a?\"string\":\"[object Array]\"===Object.prototype.toString.call(a)?\"array\":h.nodebuffer&&j.test(a)?\"nodebuffer\":h.uint8array&&a instanceof Uint8Array?\"uint8array\":h.arraybuffer&&a instanceof ArrayBuffer?\"arraybuffer\":void 0},c.checkSupport=function(a){var b=h[a.toLowerCase()];if(!b)throw new Error(a+\" is not supported by this browser\")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d=\"\";for(c=0;c<(a||\"\").length;c++)b=a.charCodeAt(c),d+=\"\\\\x\"+(16>b?\"0\":\"\")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return\"[object RegExp]\"===Object.prototype.toString.call(a)}},{\"./compressions\":3,\"./nodeBuffer\":11,\"./support\":17}],22:[function(a,b){\"use strict\";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a(\"./stringReader\"),e=a(\"./nodeBufferReader\"),f=a(\"./uint8ArrayReader\"),g=a(\"./utils\"),h=a(\"./signature\"),i=a(\"./zipEntry\"),j=a(\"./support\"),k=a(\"./object\");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error(\"Corrupted zip or bug : unexpected signature (\"+g.pretty(b)+\", expected \"+g.pretty(a)+\")\")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;d>e;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(h.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===h.CENTRAL_FILE_HEADER;)a=new i({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(h.CENTRAL_DIRECTORY_END);if(-1===a){var b=!0;try{this.reader.setIndex(0),this.checkSignature(h.LOCAL_FILE_HEADER),b=!1}catch(c){}throw new Error(b?\"Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html\":\"Corrupted zip : can't find end of central directory\")}if(this.reader.setIndex(a),this.checkSignature(h.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===g.MAX_VALUE_16BITS||this.diskWithCentralDirStart===g.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===g.MAX_VALUE_16BITS||this.centralDirRecords===g.MAX_VALUE_16BITS||this.centralDirSize===g.MAX_VALUE_32BITS||this.centralDirOffset===g.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),-1===a)throw new Error(\"Corrupted zip : can't find the ZIP64 end of central directory locator\");this.reader.setIndex(a),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}},prepareReader:function(a){var b=g.getTypeOf(a);this.reader=\"string\"!==b||j.uint8array?\"nodebuffer\"===b?new e(a):new f(g.transformTo(\"uint8array\",a)):new d(a,this.loadOptions.optimizedBinaryString)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=c},{\"./nodeBufferReader\":12,\"./object\":13,\"./signature\":14,\"./stringReader\":15,\"./support\":17,\"./uint8ArrayReader\":18,\"./utils\":21,\"./zipEntry\":23}],23:[function(a,b){\"use strict\";function c(a,b){this.options=a,this.loadOptions=b}var d=a(\"./stringReader\"),e=a(\"./utils\"),f=a(\"./compressedObject\"),g=a(\"./object\"),h=0,i=3;c.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},prepareCompressedContent:function(a,b,c){return function(){var d=a.index;a.setIndex(b);var e=a.readData(c);return a.setIndex(d),e}},prepareContent:function(a,b,c,d,f){return function(){var a=e.transformTo(d.uncompressInputType,this.getCompressedContent()),b=d.uncompress(a);if(b.length!==f)throw new Error(\"Bug : uncompressed data size mismatch\");return b}},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readString(this.fileNameLength),a.skip(c),-1==this.compressedSize||-1==this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)\");if(b=e.findCompression(this.compressionMethod),null===b)throw new Error(\"Corrupted zip : compression \"+e.pretty(this.compressionMethod)+\" unknown (inner file : \"+this.fileName+\")\");if(this.decompressed=new f,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(a,a.index,this.compressedSize,b),this.decompressed.getContent=this.prepareContent(a,a.index,this.compressedSize,b,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=e.transformTo(\"string\",this.decompressed.getContent()),g.crc32(this.decompressed)!==this.crc32))throw new Error(\"Corrupted zip : CRC32 mismatch\")},readCentralPart:function(a){if(this.versionMadeBy=a.readInt(2),this.versionNeeded=a.readInt(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4),this.fileNameLength=a.readInt(2),this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");this.fileName=a.readString(this.fileNameLength),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readString(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=16&this.externalFileAttributes?!0:!1,a===h&&(this.dosPermissions=63&this.externalFileAttributes),a===i&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileName.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var a=new d(this.extraFields[1].value);this.uncompressedSize===e.MAX_VALUE_32BITS&&(this.uncompressedSize=a.readInt(8)),this.compressedSize===e.MAX_VALUE_32BITS&&(this.compressedSize=a.readInt(8)),this.localHeaderOffset===e.MAX_VALUE_32BITS&&(this.localHeaderOffset=a.readInt(8)),this.diskNumberStart===e.MAX_VALUE_32BITS&&(this.diskNumberStart=a.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index;for(this.extraFields=this.extraFields||{};a.index<e+this.extraFieldsLength;)b=a.readInt(2),c=a.readInt(2),d=a.readString(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){if(this.useUTF8())this.fileName=g.utf8decode(this.fileName),this.fileComment=g.utf8decode(this.fileComment);else{var a=this.findExtraFieldUnicodePath();null!==a&&(this.fileName=a);var b=this.findExtraFieldUnicodeComment();null!==b&&(this.fileComment=b)}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileName)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))\n}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileComment)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))}return null}},b.exports=c},{\"./compressedObject\":2,\"./object\":13,\"./stringReader\":15,\"./utils\":21}],24:[function(a,b){\"use strict\";var c=a(\"./lib/utils/common\").assign,d=a(\"./lib/deflate\"),e=a(\"./lib/inflate\"),f=a(\"./lib/zlib/constants\"),g={};c(g,d,e,f),b.exports=g},{\"./lib/deflate\":25,\"./lib/inflate\":26,\"./lib/utils/common\":27,\"./lib/zlib/constants\":30}],25:[function(a,b,c){\"use strict\";function d(a,b){var c=new s(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}function f(a,b){return b=b||{},b.gzip=!0,d(a,b)}var g=a(\"./zlib/deflate.js\"),h=a(\"./utils/common\"),i=a(\"./utils/strings\"),j=a(\"./zlib/messages\"),k=a(\"./zlib/zstream\"),l=0,m=4,n=0,o=1,p=-1,q=0,r=8,s=function(a){this.options=h.assign({level:p,method:r,chunkSize:16384,windowBits:15,memLevel:8,strategy:q,to:\"\"},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==n)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};s.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?m:l,e.input=\"string\"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),c=g.deflate(e,d),c!==o&&c!==n)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&d===m)&&this.onData(\"string\"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&c!==o);return d===m?(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===n):!0},s.prototype.onData=function(a){this.chunks.push(a)},s.prototype.onEnd=function(a){a===n&&(this.result=\"string\"===this.options.to?this.chunks.join(\"\"):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=s,c.deflate=d,c.deflateRaw=e,c.gzip=f},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/deflate.js\":32,\"./zlib/messages\":37,\"./zlib/zstream\":39}],26:[function(a,b,c){\"use strict\";function d(a,b){var c=new m(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a(\"./zlib/inflate.js\"),g=a(\"./utils/common\"),h=a(\"./utils/strings\"),i=a(\"./zlib/constants\"),j=a(\"./zlib/messages\"),k=a(\"./zlib/zstream\"),l=a(\"./zlib/gzheader\"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:\"\"},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?i.Z_FINISH:i.Z_NO_FLUSH,l.input=\"string\"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),c=f.inflate(l,i.Z_NO_FLUSH),c!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&(\"string\"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d===i.Z_FINISH?(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK):!0},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result=\"string\"===this.options.to?this.chunks.join(\"\"):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/constants\":30,\"./zlib/gzheader\":33,\"./zlib/inflate.js\":35,\"./zlib/messages\":37,\"./zlib/zstream\":39}],27:[function(a,b,c){\"use strict\";var d=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if(\"object\"!=typeof c)throw new TypeError(c+\"must be non-object\");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){\"use strict\";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c=\"\",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a(\"./common\"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{\"./common\":27}],29:[function(a,b){\"use strict\";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){\"use strict\";function c(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function d(a,b,c,d){var f=e,g=d+c;a=-1^a;for(var h=d;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var e=c();b.exports=d},{}],32:[function(a,b,c){\"use strict\";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-jb?a.strstart-(a.w_size-jb):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ib,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ib-(m-f),f=m-ib,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-jb)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=hb)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+hb-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<hb)););}while(a.lookahead<jb&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return sb;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return sb;if(a.strstart-a.block_start>=a.w_size-jb&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?sb:sb}function o(a,b){for(var c,d;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c)),a.match_length>=hb)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-hb),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=hb){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function p(a,b){for(var c,d,e;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=hb-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===S||a.match_length===hb&&a.strstart-a.match_start>4096)&&(a.match_length=hb-1)),a.prev_length>=hb&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-hb,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-hb),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=hb-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return sb}else if(a.match_available){if(d=D._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return sb}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=D._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ib){if(m(a),a.lookahead<=ib&&b===H)return sb;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=hb&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ib;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ib-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=hb?(c=D._tr_tally(a,1,a.match_length-hb),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return sb;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=hb-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*fb),this.dyn_dtree=new C.Buf16(2*(2*db+1)),this.bl_tree=new C.Buf16(2*(2*eb+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(gb+1),this.heap=new C.Buf16(2*cb+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*cb+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?lb:qb,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+hb-1)/hb),i.window=new C.Buf8(2*i.w_size),i.head=new C.Buf16(i.hash_size),i.prev=new C.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new C.Buf8(i.pending_buf_size),i.d_buf=i.lit_bufsize>>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===rb&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===lb)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=mb):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,wb),h.status=qb);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=kb),m+=31-m%31,h.status=qb,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===mb)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=nb)}else h.status=nb;if(h.status===nb)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ob)}else h.status=ob;if(h.status===ob)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=pb)}else h.status=pb;if(h.status===pb&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=qb)):h.status=qb),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===rb&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==rb){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===ub||o===vb)&&(h.status=rb),o===sb||o===ub)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===tb&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==lb&&b!==mb&&b!==nb&&b!==ob&&b!==pb&&b!==qb&&b!==rb?d(a,O):(a.state=null,b===qb?d(a,P):M)):O}var B,C=a(\"../utils/common\"),D=a(\"./trees\"),E=a(\"./adler32\"),F=a(\"./crc32\"),G=a(\"./messages\"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,ab=29,bb=256,cb=bb+1+ab,db=30,eb=19,fb=2*cb+1,gb=15,hb=3,ib=258,jb=ib+hb+1,kb=32,lb=42,mb=69,nb=73,ob=91,pb=103,qb=113,rb=666,sb=1,tb=2,ub=3,vb=4,wb=3,xb=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new xb(0,0,0,0,n),new xb(4,4,8,4,o),new xb(4,5,16,8,o),new xb(4,6,32,32,o),new xb(4,4,16,16,p),new xb(8,16,32,32,p),new xb(8,16,128,128,p),new xb(8,32,128,256,p),new xb(32,128,258,1024,p),new xb(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./messages\":37,\"./trees\":38}],33:[function(a,b){\"use strict\";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){\"use strict\";var c=30,d=12;b.exports=function(a,b){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;e=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=e.dmax,l=e.wsize,m=e.whave,n=e.wnext,o=e.window,p=e.hold,q=e.bits,r=e.lencode,s=e.distcode,t=(1<<e.lenbits)-1,u=(1<<e.distbits)-1;a:do{15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){e.mode=d;break a}a.msg=\"invalid literal/length code\",e.mode=c;break a}x=65535&v,w&=15,w&&(w>q&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg=\"invalid distance code\",e.mode=c;break a}if(y=65535&v,w&=15,w>q&&(p+=B[f++]<<q,q+=8,w>q&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg=\"invalid distance too far back\",e.mode=c;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&e.sane){a.msg=\"invalid distance too far back\",e.mode=c;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=g>f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),e.hold=p,e.bits=q}},{}],35:[function(a,b,c){\"use strict\";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg=\"\",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(ob),b.distcode=b.distdyn=new r.Buf32(pb),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,rb)}function k(a){if(sb){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),sb=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new r.Buf8(f.wsize)),d>=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,ob,pb,qb,rb,sb,tb,ub,vb,wb,xb,yb,zb,Ab=0,Bb=new r.Buf8(4),Cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return F;c=a.state,c.mode===V&&(c.mode=W),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xb=C;a:for(;;)switch(c.mode){case K:if(0===c.wrap){c.mode=W;break}for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg=\"incorrect header check\",c.mode=lb;break}if((15&m)!==J){a.msg=\"unknown compression method\",c.mode=lb;break}if(m>>>=4,n-=4,wb=(15&m)+8,0===c.wbits)c.wbits=wb;else if(wb>c.wbits){a.msg=\"invalid window size\",c.mode=lb;break}c.dmax=1<<wb,a.adler=c.check=1,c.mode=512&m?T:V,m=0,n=0;break;case L:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==J){a.msg=\"unknown compression method\",c.mode=lb;break}if(57344&c.flags){a.msg=\"unknown header flags set\",c.mode=lb;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,Bb[2]=m>>>16&255,Bb[3]=m>>>24&255,c.check=t(c.check,Bb,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wb=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wb)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.name+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.comment+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg=\"header crc mismatch\",c.mode=lb;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=U;case U:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,E;a.adler=c.check=1,c.mode=V;case V:if(b===A||b===B)break a;case W:if(c.last){m>>>=7&n,n-=7&n,c.mode=ib;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=bb,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg=\"invalid block type\",c.mode=lb}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg=\"invalid stored block lengths\",c.mode=lb;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg=\"too many length or distance symbols\",c.mode=lb;break}c.have=0,c.mode=_;case _:for(;c.have<c.ncode;){for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Cb[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Cb[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,yb={bits:c.lenbits},xb=v(w,c.lens,0,19,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg=\"invalid code lengths set\",c.mode=lb;break}c.have=0,c.mode=ab;case ab:for(;c.have<c.nlen+c.ndist;){for(;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(16>sb)m>>>=qb,n-=qb,c.lens[c.have++]=sb;else{if(16===sb){for(zb=qb+2;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qb,n-=qb,0===c.have){a.msg=\"invalid bit length repeat\",c.mode=lb;break}wb=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sb){for(zb=qb+3;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=3+(7&m),m>>>=3,n-=3}else{for(zb=qb+7;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg=\"invalid bit length repeat\",c.mode=lb;break}for(;q--;)c.lens[c.have++]=wb}}if(c.mode===lb)break;if(0===c.lens[256]){a.msg=\"invalid code -- missing end-of-block\",c.mode=lb;break}if(c.lenbits=9,yb={bits:c.lenbits},xb=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg=\"invalid literal/lengths set\",c.mode=lb;break}if(c.distbits=6,c.distcode=c.distdyn,yb={bits:c.distbits},xb=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,yb),c.distbits=yb.bits,xb){a.msg=\"invalid distances set\",c.mode=lb;break}if(c.mode=bb,b===B)break a;case bb:c.mode=cb;case cb:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);\nbreak}for(c.back=0;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(rb&&0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.lencode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,c.length=sb,0===rb){c.mode=hb;break}if(32&rb){c.back=-1,c.mode=V;break}if(64&rb){a.msg=\"invalid literal/length code\",c.mode=lb;break}c.extra=15&rb,c.mode=db;case db:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=eb;case eb:for(;Ab=c.distcode[m&(1<<c.distbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.distcode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,64&rb){a.msg=\"invalid distance code\",c.mode=lb;break}c.offset=sb,c.extra=15&rb,c.mode=fb;case fb:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg=\"invalid distance too far back\",c.mode=lb;break}c.mode=gb;case gb:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg=\"invalid distance too far back\",c.mode=lb;break}q>c.wnext?(q-=c.wnext,ob=c.wsize-q):ob=c.wnext-q,q>c.length&&(q=c.length),pb=c.window}else pb=f,ob=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pb[ob++];while(--q);0===c.length&&(c.mode=cb);break;case hb:if(0===j)break a;f[h++]=c.length,j--,c.mode=cb;break;case ib:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?t(c.check,f,p,h-p):s(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg=\"incorrect data check\",c.mode=lb;break}m=0,n=0}c.mode=jb;case jb:if(c.wrap&&c.flags){for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg=\"incorrect length check\",c.mode=lb;break}m=0,n=0}c.mode=kb;case kb:xb=D;break a;case lb:xb=G;break a;case mb:return H;case nb:default:return F}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<lb&&(c.mode<ib||b!==z))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=mb,H):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?t(c.check,f,p,a.next_out-p):s(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===V?128:0)+(c.mode===bb||c.mode===Y?256:0),(0===o&&0===p||b===z)&&xb===C&&(xb=I),xb)}function n(a){if(!a||!a.state)return F;var b=a.state;return b.window&&(b.window=null),a.state=null,C}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?F:(c.head=b,b.done=!1,C)):F}var p,q,r=a(\"../utils/common\"),s=a(\"./adler32\"),t=a(\"./crc32\"),u=a(\"./inffast\"),v=a(\"./inftrees\"),w=0,x=1,y=2,z=4,A=5,B=6,C=0,D=1,E=2,F=-2,G=-3,H=-4,I=-5,J=8,K=1,L=2,M=3,N=4,O=5,P=6,Q=7,R=8,S=9,T=10,U=11,V=12,W=13,X=14,Y=15,Z=16,$=17,_=18,ab=19,bb=20,cb=21,db=22,eb=23,fb=24,gb=25,hb=26,ib=27,jb=28,kb=29,lb=30,mb=31,nb=32,ob=852,pb=592,qb=15,rb=qb,sb=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./inffast\":34,\"./inftrees\":36}],36:[function(a,b){\"use strict\";var c=a(\"../utils/common\"),d=15,e=852,f=592,g=0,h=1,i=2,j=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],k=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],l=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],m=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];b.exports=function(a,b,n,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new c.Buf16(d+1),Q=new c.Buf16(d+1),R=null,S=0;for(D=0;d>=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[n+E]]++;for(H=C,G=d;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;d>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===g||1!==G))return-1;for(Q[1]=0,D=1;d>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[n+E]&&(r[Q[b[n+E]]++]=E);if(a===g?(N=R=r,y=19):a===h?(N=j,O-=257,R=k,S-=257,y=256):(N=l,R=m,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===h&&L>e||a===i&&L>f)return 1;for(var T=0;;){T++,z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[n+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;G>I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<<I,a===h&&L>e||a===i&&L>f)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{\"../utils/common\":27}],37:[function(a,b){\"use strict\";b.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],38:[function(a,b,c){\"use strict\";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?gb[a]:gb[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>V-c?(a.bi_buf|=b<<a.bi_valid&65535,f(a,a.bi_buf),a.bi_buf=b>>V-a.bi_valid,a.bi_valid+=c-V):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function h(a,b,c){g(a,c[2*b],c[2*b+1])}function i(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;U>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;T>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(U+1),g=0;for(d=1;U>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(U+1);for(c=0,d=0;O-1>d;d++)for(ib[d]=c,a=0;a<1<<_[d];a++)hb[c++]=d;for(hb[c-1]=d,e=0,d=0;16>d;d++)for(jb[d]=e,a=0;a<1<<ab[d];a++)gb[e++]=d;for(e>>=7;R>d;d++)for(jb[d]=e<<7,a=0;a<1<<ab[d]-7;a++)gb[256+e++]=d;for(b=0;U>=b;b++)f[b]=0;for(a=0;143>=a;)eb[2*a+1]=8,a++,f[8]++;for(;255>=a;)eb[2*a+1]=9,a++,f[9]++;for(;279>=a;)eb[2*a+1]=7,a++,f[7]++;for(;287>=a;)eb[2*a+1]=8,a++,f[8]++;for(l(eb,Q+1,f),a=0;R>a;a++)fb[2*a+1]=5,fb[2*a]=i(a,5);kb=new nb(eb,_,P+1,Q,U),lb=new nb(fb,ab,0,R,U),mb=new nb(new Array(0),bb,0,S,W)}function n(a){var b;for(b=0;Q>b;b++)a.dyn_ltree[2*b]=0;for(b=0;R>b;b++)a.dyn_dtree[2*b]=0;for(b=0;S>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*X]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function r(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&q(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!q(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function s(a,b,c){var d,f,i,j,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],f=a.pending_buf[a.l_buf+k],k++,0===d?h(a,f,b):(i=hb[f],h(a,i+P+1,b),j=_[i],0!==j&&(f-=ib[i],g(a,f,j)),d--,i=e(d),h(a,i,c),j=ab[i],0!==j&&(d-=jb[i],g(a,d,j)));while(k<a.last_lit);h(a,X,b)}function t(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=T,c=0;i>c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(j>h?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*Y]++):10>=h?a.bl_tree[2*Z]++:a.bl_tree[2*$]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++j<k&&e===i)){if(l>j){do h(a,e,a.bl_tree);while(0!==--j)}else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,Y,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,Z,a.bl_tree),g(a,j-3,3)):(h(a,$,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc),b=S-1;b>=3&&0===a.bl_tree[2*cb[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*cb[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;P>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){pb||(m(),pb=!0),a.l_desc=new ob(a.dyn_ltree,kb),a.d_desc=new ob(a.dyn_dtree,lb),a.bl_desc=new ob(a.bl_tree,mb),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,X,eb),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,eb,fb)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(hb[c]+P+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a(\"../utils/common\"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=3,N=258,O=29,P=256,Q=P+1+O,R=30,S=19,T=2*Q+1,U=15,V=16,W=7,X=256,Y=16,Z=17,$=18,_=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ab=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],bb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],db=512,eb=new Array(2*(Q+2));d(eb);var fb=new Array(2*R);d(fb);var gb=new Array(db);d(gb);var hb=new Array(N-M+1);d(hb);var ib=new Array(O);d(ib);var jb=new Array(R);d(jb);var kb,lb,mb,nb=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},ob=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},pb=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{\"../utils/common\":27}],39:[function(a,b){\"use strict\";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/jszip/jszip.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/jszip/license": {
"text": "JSZip is dual licensed. You may use it under the MIT license *or* the GPLv3\nlicense.\n\nThe MIT License\n===============\n\nCopyright (c) 2009-2014 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\nGPL version 3\n=============\n\n GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n",
"type": "text/plain",
"title": "$:/plugins/tiddlywiki/jszip/license"
},
"$:/plugins/tiddlywiki/jszip/readme": {
"title": "$:/plugins/tiddlywiki/jszip/readme",
"text": "This plugin packages [[JSZip|https://stuk.github.io/jszip/]] for use by other plugins. It does not provide any end-user visible features.\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/xlsx-utils/controls": {
"title": "$:/plugins/tiddlywiki/xlsx-utils/controls",
"caption": "XLSX Utilities",
"tags": "$:/tags/ControlPanel",
"text": "\\define help-button(state)\n<$button popup=\"\"\"$:/state/expand-help/$state$\"\"\" class=\"tc-btn-invisible tc-popup-keep\">\n{{$:/core/images/help}}\n</$button>\n\\end\n\n\\define help-content(type,state)\n<$reveal tag=\"span\" state=\"\"\"$:/state/expand-help/$state$\"\"\" type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down tc-popup-keep\" style=\"padding: 0.5em; max-width: 30em; white-space: normal;\">\n<$transclude tiddler=\"\"\"$:/plugins/tiddlywiki/xlsx-utils/docs/$type$\"\"\" mode=\"block\"/>\n</div>\n</$reveal>\n\\end\n\n\\define renameProxyTitle()\n$:/state/plugins/tiddlywiki/xlsx-utils/rename-$(currentTiddler)$\n\\end\n\n\\define rename-current-tiddler()\n<$edit-text tag=\"input\" tiddler=<<renameProxyTitle>> placeholder=\"Rename\" default=<<currentTiddler>> size=\"50\"/>\n<$reveal type=\"nomatch\" state=\"\"\"$(renameProxyTitle)$\"\"\" text=<<currentTiddler>> default=<<currentTiddler>> tag=\"span\">\n<$button>\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\ncancel\n</$button>\n<$button>\n<$action-sendmessage $message=\"tm-rename-tiddler\" from=<<currentTiddler>> to={{$(renameProxyTitle)$}}/>\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\nrename\n</$button>\n<$set name=\"proxy-title\" value={{$(renameProxyTitle)$}}>\n<$list filter=\"\"\"[<proxy-title>is[tiddler]]\"\"\">\nWarning: tiddler already exists\n</$list>\n</$set>\n</$reveal>\n\\end\n\n\\define expand-collapse-button(state)\n<$reveal state=\"\"\"$:/state/expand/$state$\"\"\" type=\"match\" text=\"yes\" default=\"no\" tag=\"span\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/state/expand/$state$\"\"\" $value=\"no\"/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal state=\"\"\"$:/state/expand/$state$\"\"\" type=\"nomatch\" text=\"yes\" default=\"no\" tag=\"span\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/state/expand/$state$\"\"\" $value=\"yes\"/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n\\end\n\n\\define expand-collapse-content(state,content,class)\n<$reveal state=\"\"\"$:/state/expand/$state$\"\"\" type=\"match\" text=\"yes\" default=\"no\" tag=\"div\" class=\"\"\"$class$\"\"\" animate=\"yes\" retain=\"yes\">\n$content$\n</$reveal>\n\\end\n\n\\define up-down-buttons(parent,child)\n<$list filter=\"[list<$parent$>butfirst[]field:title<$child$>limit[1]]\" variable=\"listItem\">\n<$button class=\"tc-btn-invisible\">\n<$action-listops $tiddler=<<$parent$>> $subfilter=\"+[move:-1<$child$>]\"/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$list>\n<$list filter=\"[list<$parent$>butlast[]field:title<$child$>limit[1]]\" variable=\"listItem\">\n<$button class=\"tc-btn-invisible\">\n<$action-listops $tiddler=<<$parent$>> $subfilter=\"+[move:1<$child$>]\"/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$list>\n\\end\n\n\\define edit-button(state)\n<$reveal state=\"\"\"$:/state/edit/$state$\"\"\" type=\"nomatch\" text=\"yes\" default=\"no\" tag=\"span\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/state/edit/$state$\"\"\" $value=\"yes\"/>\n<$action-setfield $tiddler=\"\"\"$:/state/expand/$state$\"\"\" $value=\"yes\"/>\n{{$:/core/images/edit-button}}\n</$button>\n</$reveal>\n<$reveal state=\"\"\"$:/state/edit/$state$\"\"\" type=\"match\" text=\"yes\" default=\"no\" tag=\"span\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/state/edit/$state$\"\"\" $value=\"no\"/>\n{{$:/core/images/done-button}} Finish editing\n</$button>\n</$reveal>\n\\end\n\n\\define delete-item-button(filter,parent,title,prompt)\n<$button class=\"tc-btn-invisible\">\n<$action-deletetiddler $filter=\"\"\"$filter$\"\"\"/>\n<$action-listops $tiddler=\"\"\"$parent$\"\"\" $subfilter=\"-[[$title$]]\"/>\n{{$:/core/images/delete-button}}$prompt$\n</$button>\n\\end\n\n\\define edit-field()\n<$select tiddler=<<field>> field=\"import-field-list-op\" default=\"none\">\n<option value=\"none\">Set field</option>\n<option value=\"append\">Append to list field</option>\n</$select>\n<$edit-text tiddler=<<field>> field=\"import-field-name\" size=\"10\" tag=\"input\" placeholder=\"field name\"default=\"\"/>\n<$reveal state=\"\"\"$(field)$!!import-field-list-op\"\"\" type=\"match\" text=\"none\" default=\"none\" tag=\"span\">\nto\n</$reveal>\n<$reveal state=\"\"\"$(field)$!!import-field-list-op\"\"\" type=\"match\" text=\"append\" default=\"none\" tag=\"span\">\nthe\n</$reveal>\n<$select tiddler=<<field>> field=\"import-field-type\" default=\"string\">\n<option value=\"date\">date</option>\n<option value=\"string\">string</option>\n</$select>\n<$select tiddler=<<field>> field=\"import-field-source\" default=\"column\">\n<option value=\"column\">from column</option>\n<option value=\"constant\">constant</option>\n</$select>\n<$reveal state=\"\"\"$(field)$!!import-field-source\"\"\" type=\"match\" text=\"column\" default=\"column\" tag=\"span\">\n<$edit-text tiddler=<<field>> field=\"import-field-column\" tag=\"input\" placeholder=\"column\" default=\"\"/>\nprefixed\n<$edit-text tiddler=<<field>> field=\"import-field-prefix\" tag=\"input\" placeholder=\"prefix\" default=\"\"/>,\nsuffixed\n<$edit-text tiddler=<<field>> field=\"import-field-suffix\" tag=\"input\" placeholder=\"suffix\" default=\"\"/>\n</$reveal>\n<$reveal state=\"\"\"$(field)$!!import-field-source\"\"\" type=\"match\" text=\"constant\" default=\"column\" tag=\"span\">\n<$edit-text tiddler=<<field>> field=\"import-field-value\" tag=\"input\" placeholder=\"constant\" default=\"\"/>\n</$reveal>\n<$checkbox tiddler=<<field>> field=\"import-field-skip-tiddler-if-blank\" checked=\"yes\" unchecked=\"no\" default=\"no\">\nSkip this tiddler when field blank\n<br/>\nTitle:\n<$tiddler tiddler=<<field>>>\n<<rename-current-tiddler>>\n</$tiddler>\n\\end\n\n\\define view-field()\n<$link to=<<field>>>\n<$list filter=\"[<field>!has[import-field-list-op]]\" variable=\"listItem\">\nSet field ''<$view tiddler=<<field>> field=\"import-field-name\"/>'' to\n</$list>\n<$list filter=\"[<field>get[import-field-list-op]prefix[append]]\" variable=\"listItem\">\nAppend to list field ''<$view tiddler=<<field>> field=\"import-field-name\"/>''\n</$list>\n<$list filter=\"[<field>has[import-field-prefix]]\" variable=\"listItem\">\n''<code><$view tiddler=<<field>> field=\"import-field-prefix\"/></code>'' +\n</$list>\n<$list filter=\"[<field>get[import-field-type]prefix[date]]\" variable=\"listItem\">\ndate\n</$list>\n<$list filter=\"[<field>get[import-field-source]prefix[column]]\" variable=\"listItem\">\nvalue from column ''<$view tiddler=<<field>> field=\"import-field-column\"/>''\n</$list>\n<$list filter=\"[<field>get[import-field-source]prefix[constant]]\" variable=\"listItem\">\nconstant ''<code><$view tiddler=<<field>> field=\"import-field-value\"/></code>''\n</$list>\n<$list filter=\"[<field>has[import-field-suffix]]\" variable=\"listItem\">\n+ ''<code><$view tiddler=<<field>> field=\"import-field-suffix\"/></code>''\n</$list>\n</$link>\n\\end\n\n\\define list-fields()\n<ul class=\"tc-import-spec-row-list\">\n<$list filter=\"[list<row>]\" variable=\"field\" emptyMessage=\"<div>(No field import specifiers)</div>\">\n<li class=\"tc-import-spec-field-wrapper\">\n<$reveal state=\"\"\"$:/state/edit/$(row)$\"\"\" type=\"match\" text=\"yes\" default=\"no\" tag=\"span\">\n<<edit-field>>\n<<up-down-buttons parent:\"row\" child:\"field\">>\n<$macrocall $name=\"delete-item-button\" filter=\"[<field>]\" parent=<<row>> title=<<field>>/>\n</$reveal>\n<$reveal state=\"\"\"$:/state/edit/$(row)$\"\"\" type=\"nomatch\" text=\"yes\" default=\"no\" tag=\"span\">\n<<view-field>>\n</$reveal>\n</li>\n</$list>\n</ul>\n\\end\n\n\\define view-row-content()\n<$reveal state=\"\"\"$:/state/edit/$(row)$\"\"\" type=\"match\" text=\"yes\" default=\"no\" tag=\"ul\" class=\"tc-import-spec-row-controls\" animate=\"yes\" retain=\"yes\">\n<li>\n<$macrocall $name=\"delete-item-button\" filter=\"[<row>] [<row>getlist[]]\" parent=<<sheet>> title=<<row>> prompt=\" Delete this row\"/>\n</li>\n<li>\nTitle:\n<$tiddler tiddler=<<row>>>\n<<rename-current-tiddler>>\n</$tiddler>\n</li>\n<li>\nRow type:\n<$select tiddler=<<row>> field=\"import-row-type\" default=\"by-field\">\n<option value=\"by-field\">By field</option>\n<option value=\"by-column\">By column</option>\n</$select>\n</li>\n<li>\n<$button class=\"tc-btn-invisible\">\n<$action-createtiddler $basetitle=\"$:/_ExcelImporter/ImportSpecifiers/Field\" $savetitle=\"$:/temp/newtiddler\" import-spec-role=\"field\" import-field-name=\"fieldname\" import-field-type=\"string\" import-field-source=\"column\" import-field-column=\"Column Name\" />\n<$action-listops $tiddler=<<row>> $subfilter=\"[{$:/temp/newtiddler}] +[putfirst[]]\"/>\n{{$:/core/images/new-button}} Add new field\n</$button>\n</li>\n</$reveal>\n<<list-fields>>\n\\end\n\n\\define view-row()\n<div class=\"tc-import-spec-row-wrapper\">\n<h5>\n<$macrocall $name=\"expand-collapse-button\" state=<<row>>/>\nEach row: <$list filter=\"[list<row>import-field-name[title]]\" variable=\"field\" emptyMessage=\"\n<$link to=<<field>>>(title field not set)</$link>\"><<view-field>></$list>\n<$macrocall $name=\"edit-button\" state=<<row>>/>\n<<up-down-buttons parent:\"sheet\" child:\"row\">>\n<$macrocall $name=\"help-button\" state=<<row>>/>\n</h5>\n<$macrocall $name=\"help-content\" type=\"row\" state=<<row>>/>\n<$macrocall $name=\"expand-collapse-content\" state=<<row>> content=<<view-row-content>> class=\"tc-import-spec-row\"/>\n</div>\n\\end\n\n\\define list-rows()\n<div class=\"tc-import-spec-sheet-list\">\n<$list filter=\"[list<sheet>]\" variable=\"row\" emptyMessage=\"<div>(No row import specifiers)</div>\">\n<<view-row>>\n</$list>\n\\end\n\n\\define view-sheet-content()\n<$reveal state=\"\"\"$:/state/edit/$(sheet)$\"\"\" type=\"match\" text=\"yes\" default=\"no\" tag=\"ul\" class=\"tc-import-spec-sheet-controls\" animate=\"yes\" retain=\"yes\">\n<li>\n<$macrocall $name=\"delete-item-button\" filter=\"[<sheet>] [<sheet>getlist[]] [<sheet>getlist[]getlist[]]\" parent=<<workbook>> title=<<sheet>> prompt=\" Delete this sheet\"/>\n</li>\n<li>\nTitle:\n<$tiddler tiddler=<<sheet>>>\n<<rename-current-tiddler>>\n</$tiddler>\n</li>\n<li>\nImport sheet name:\n<$edit-text tiddler=<<sheet>> field=\"import-sheet-name\" size=\"50\"/>\n</li>\n<li>\n<$button class=\"tc-btn-invisible\">\n<$action-createtiddler $basetitle=\"$:/_ExcelImporter/ImportSpecifiers/Row\" $savetitle=\"$:/temp/newtiddler\" import-spec-role=\"row\"/>\n<$action-listops $tiddler=<<sheet>> $subfilter=\"[{$:/temp/newtiddler}] +[putfirst[]]\"/>\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\"yes\"/>\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\"yes\"/>\n{{$:/core/images/new-button}} Add new row\n</$button>\n</li>\n</$reveal>\n<<list-rows>>\n\\end\n\n\\define view-sheet()\n<div class=\"tc-import-spec-sheet-wrapper\">\n<h4>\n<$macrocall $name=\"expand-collapse-button\" state=<<sheet>>/>\nSheet: <$link to=<<sheet>>><$view tiddler=<<sheet>> field=\"import-sheet-name\"/></$link>\n<$macrocall $name=\"edit-button\" state=<<sheet>>/>\n<<up-down-buttons parent:\"workbook\" child:\"sheet\">>\n<$macrocall $name=\"help-button\" state=<<sheet>>/>\n</h4>\n<$macrocall $name=\"help-content\" type=\"sheet\" state=<<sheet>>/>\n<$macrocall $name=\"expand-collapse-content\" state=<<sheet>> content=<<view-sheet-content>> class=\"tc-import-spec-sheet\"/>\n</div>\n\\end\n\n\\define list-sheets()\n<div class=\"tc-import-spec-workbook-list\">\n<$list filter=\"[list<workbook>]\" variable=\"sheet\" emptyMessage=\"<div>(No sheet import specifiers)</div>\">\n<<view-sheet>>\n</$list>\n</div>\n\\end\n\n\\define view-workbook-content()\n<$reveal state=\"\"\"$:/state/edit/$(workbook)$\"\"\" type=\"match\" text=\"yes\" default=\"no\" tag=\"ul\" class=\"tc-import-spec-workbook-controls\" animate=\"yes\" retain=\"yes\">\n<li>\n<$macrocall $name=\"delete-item-button\" filter=\"[<workbook>] [<workbook>getlist[]] [<workbook>getlist[]getlist[]] [<workbook>getlist[]getlist[]getlist[]]\" prompt=\" Delete this workbook\"/>\n</li>\n<li>\nTitle:\n<$tiddler tiddler=<<workbook>>>\n<<rename-current-tiddler>>\n</$tiddler>\n</li>\n<li>\nCaption:\n<$edit-text tiddler=<<workbook>> field=\"caption\" size=\"50\"/>\n</li>\n<li>\n<$button class=\"tc-btn-invisible\">\n<$action-createtiddler $basetitle=\"$:/_ExcelImporter/ImportSpecifiers/Sheet\" $savetitle=\"$:/temp/newtiddler\" import-spec-role=\"sheet\" import-sheet-name=\"Sheet name\"/>\n<$action-listops $tiddler=<<workbook>> $subfilter=\"[{$:/temp/newtiddler}] +[putfirst[]]\"/>\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\"yes\"/>\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\"yes\"/>\n{{$:/core/images/new-button}} Add new sheet\n</$button>\n</li>\n</$reveal>\n<<list-sheets>>\n\\end\n\n\\define view-workbook()\n<div class=\"tc-import-spec-workbook-wrapper\">\n<h3>\n<$macrocall $name=\"expand-collapse-button\" state=<<workbook>>/>\nWorkbook: <$link to=<<workbook>>><$view tiddler=<<workbook>> field=\"caption\"/></$link>\n<$macrocall $name=\"edit-button\" state=<<workbook>>/>\n<$macrocall $name=\"help-button\" state=<<workbook>>/>\n</h3>\n<$macrocall $name=\"help-content\" type=\"workbook\" state=<<workbook>>/>\n<$macrocall $name=\"expand-collapse-content\" state=<<workbook>> content=<<view-workbook-content>> class=\"tc-import-spec-workbook\"/>\n</div>\n\\end\n\n\\define list-workbooks()\n<ul class=\"tc-import-spec-editor-controls\">\n<li>\n<$button class=\"tc-btn-invisible\">\n<$action-createtiddler $basetitle=\"$:/_ExcelImporter/ImportSpecifiers/Workbook\" $savetitle=\"$:/temp/newtiddler\" import-spec-role=\"workbook\" caption=\"New workbook\"/>\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\"yes\"/>\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\"yes\"/>\n{{$:/core/images/new-button}} Add new workbook\n</$button>\n</li>\n</ul>\n<div class=\"tc-import-spec-editor-list\">\n<$list filter=\"[all[shadows+tiddlers]import-spec-role[workbook]sort[caption]]\" variable=\"workbook\">\n<<view-workbook>>\n</$list>\n</div>\n\\end\n\n<h1>\nControls for XLSX Spreadsheet Utilities\n</h1>\n\n<div class=\"tc-import-spec-selector\">\n<h2>\nCurrent Import Specification\n</h2>\n<$list filter=\"[all[shadows+tiddlers]import-spec-role[workbook]limit[1]]\" emptyMessage=\"\"\"\nThere are no import specifications available. Use the controls below to create one\n\"\"\">\nThis is the import specification that will be used for the next import of an `.XLSX` file\n<$select tiddler=\"$:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec\">\n<$list filter=\"[all[shadows+tiddlers]import-spec-role[workbook]sort[caption]]\">\n<option value=<<currentTiddler>>><$text text={{!!caption}}/></option>\n</$list>\n</$select>\n</$list>\n</div>\n\n<div class=\"tc-import-spec-editor-wrapper\">\n<h2>\n Import Specifications\n<$macrocall $name=\"help-button\" state=\"\"/>\n</h2>\n<$macrocall $name=\"help-content\" type=\"editor\" state=\"\"/>\n<div class=\"tc-import-spec-editor\">\n<<list-workbooks>>\n</div>\n</div>\n"
},
"$:/plugins/tiddlywiki/xlsx-utils/deserializer.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/xlsx-utils/deserializer.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nXLSX file deserializer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse an XLSX file into tiddlers\n*/\nexports[\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"] = function(text,fields) {\n\t// Collect output tiddlers in an array\n\tvar results = [],\n\t\tXLSXImporter = require(\"$:/plugins/tiddlywiki/xlsx-utils/importer.js\").XLSXImporter,\n\t\timporter = new XLSXImporter({\n\t\t\ttext: text\n\t\t});\n\t// Return the output tiddlers\n\treturn importer.getResults();\n};\n\n})();\n",
"title": "$:/plugins/tiddlywiki/xlsx-utils/deserializer.js",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/plugins/tiddlywiki/xlsx-utils/docs/editor": {
"title": "$:/plugins/tiddlywiki/xlsx-utils/docs/editor",
"text": "!!! Import Specifications\n\nImport specifications govern how spreadsheets are converted into individual tiddlers.\n\nEach \"workbook\" describes how spreadsheets of a particular format should be converted.\n"
},
"$:/plugins/tiddlywiki/xlsx-utils/docs/row": {
"title": "$:/plugins/tiddlywiki/xlsx-utils/docs/row",
"text": "!!! Row Import Specifications\n\nEach row import specification describes how one tiddler should be extracted from each row of the current sheet.\n\nNote that using multiple row import specifications within a sheet enables multiple tiddlers to be created from each row of the sheet.\n\nRows contain a list of field import specifications that describe how each field of the tiddler should be created.\n\n!!! Field Import Specifications\n\nField import specifications describe the value given to a particular field of a tiddler.\n\nThey follow a rich syntax for describing how each field of the tiddler is created. For example:\n\n* Set field `title` to string from column `Organization`\n* Set field `role` to string constant `organization`\n* Append to list field `list` the string from column `Country` prefixed with `Map:`\n\n"
},
"$:/plugins/tiddlywiki/xlsx-utils/docs/sheet": {
"title": "$:/plugins/tiddlywiki/xlsx-utils/docs/sheet",
"text": "!!! Sheet Import Specifications\n\nEach sheet import specification describes how a named sheet within a workbook should be converted into individual tiddlers.\n\nSheets contain a list of row import specifications that describe how individual rows of the sheet should be handled.\n\nEach sheet has the name of the sheet that it handles.\n\nNote that the first row of each sheet is interpreted as the title of each column.\n"
},
"$:/plugins/tiddlywiki/xlsx-utils/docs/workbook": {
"title": "$:/plugins/tiddlywiki/xlsx-utils/docs/workbook",
"text": "!!! Workbook Import Specifications\n\nEach workbook import specification describes how spreadsheets of a particular format should be converted into individual tiddlers.\n\nCreate a new workbook for each type of spreadsheet that you will be working with.\n\nWorkbooks contain a list of sheet import specifications that describe how individual sheets of the workbook should be handled.\n\nEach workbook has a caption that you can use to describe its purpose.\n"
},
"$:/plugins/tiddlywiki/xlsx-utils/xlsx.js": {
"text": "var old_exports = exports,JSZip = require(\"$:/plugins/tiddlywiki/jszip/jszip.js\");exports = {};if($tw.browser){module.exports=undefined;};/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint -W041 */\n/*jshint funcscope:true, eqnull:true */\nvar XLSX = {};\n(function make_xlsx(XLSX){\nXLSX.version = '0.8.0';\nvar current_codepage = 1200, current_cptable;\nif(typeof module !== \"undefined\" && typeof require !== 'undefined') {\n\tif(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');\n\tcurrent_cptable = cptable[current_codepage];\n}\nfunction reset_cp() { set_cp(1200); }\nvar set_cp = function(cp) { current_codepage = cp; };\n\nfunction char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\nvar debom_xml = function(data) { return data; };\n\nvar _getchar = function _gc1(x) { return String.fromCharCode(x); };\nif(typeof cptable !== 'undefined') {\n\tset_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; };\n\tdebom_xml = function(data) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x) {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n}\nvar Base64 = (function make_b64(){\n\tvar map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\treturn {\n\t\tencode: function(input, utf8) {\n\t\t\tvar o = \"\";\n\t\t\tvar c1, c2, c3, e1, e2, e3, e4;\n\t\t\tfor(var i = 0; i < input.length; ) {\n\t\t\t\tc1 = input.charCodeAt(i++);\n\t\t\t\tc2 = input.charCodeAt(i++);\n\t\t\t\tc3 = input.charCodeAt(i++);\n\t\t\t\te1 = c1 >> 2;\n\t\t\t\te2 = (c1 & 3) << 4 | c2 >> 4;\n\t\t\t\te3 = (c2 & 15) << 2 | c3 >> 6;\n\t\t\t\te4 = c3 & 63;\n\t\t\t\tif (isNaN(c2)) { e3 = e4 = 64; }\n\t\t\t\telse if (isNaN(c3)) { e4 = 64; }\n\t\t\t\to += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\n\t\t\t}\n\t\t\treturn o;\n\t\t},\n\t\tdecode: function b64_decode(input, utf8) {\n\t\t\tvar o = \"\";\n\t\t\tvar c1, c2, c3;\n\t\t\tvar e1, e2, e3, e4;\n\t\t\tinput = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\t\t\tfor(var i = 0; i < input.length;) {\n\t\t\t\te1 = map.indexOf(input.charAt(i++));\n\t\t\t\te2 = map.indexOf(input.charAt(i++));\n\t\t\t\te3 = map.indexOf(input.charAt(i++));\n\t\t\t\te4 = map.indexOf(input.charAt(i++));\n\t\t\t\tc1 = e1 << 2 | e2 >> 4;\n\t\t\t\tc2 = (e2 & 15) << 4 | e3 >> 2;\n\t\t\t\tc3 = (e3 & 3) << 6 | e4;\n\t\t\t\to += String.fromCharCode(c1);\n\t\t\t\tif (e3 != 64) { o += String.fromCharCode(c2); }\n\t\t\t\tif (e4 != 64) { o += String.fromCharCode(c3); }\n\t\t\t}\n\t\t\treturn o;\n\t\t}\n\t};\n})();\nvar has_buf = (typeof Buffer !== 'undefined');\n\nfunction new_raw_buf(len) {\n\t/* jshint -W056 */\n\treturn new (has_buf ? Buffer : Array)(len);\n\t/* jshint +W056 */\n}\n\nfunction s2a(s) {\n\tif(has_buf) return new Buffer(s, \"binary\");\n\treturn s.split(\"\").map(function(x){ return x.charCodeAt(0) & 0xff; });\n}\n\nvar bconcat = function(bufs) { return [].concat.apply([], bufs); };\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/;\n/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nvar SSF = {};\nvar make_ssf = function make_ssf(SSF){\nSSF.version = '0.8.1';\nfunction _strrev(x) { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction fill(c,l) { var o = \"\"; while(o.length < l) o+=c; return o; }\nfunction pad0(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v,d){var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v,d){var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v,d){var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = Math.pow(2,32);\nfunction pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\nfunction isgeneral(s, i) { return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\n/* Options */\nvar opts_fmt = [\n\t[\"date1904\", 0],\n\t[\"output\", \"\"],\n\t[\"WTF\", false]\n];\nfunction fixopts(o){\n\tfor(var y = 0; y != opts_fmt.length; ++y) if(o[opts_fmt[y][0]]===undefined) o[opts_fmt[y][0]]=opts_fmt[y][1];\n}\nSSF.opts = opts_fmt;\nvar table_fmt = {\n\t0: 'General',\n\t1: '0',\n\t2: '0.00',\n\t3: '#,##0',\n\t4: '#,##0.00',\n\t9: '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"',\n\t65535: 'General'\n};\nvar days = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction frac(x, D, mixed) {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.0000000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { Q = Q_1; P = P_1; }\n\tif(Q > D) { Q = Q_2; P = P_2; }\n\tif(!mixed) return [0, sgn * P, Q];\n\tif(Q===0) throw \"Unexpected state: \"+P+\" \"+P_1+\" \"+P_2+\" \"+Q+\" \"+Q_1+\" \"+Q_2;\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction general_fmt_int(v, opts) { return \"\"+v; }\nSSF._general_int = general_fmt_int;\nvar general_fmt_num = (function make_general_fmt_num() {\nvar gnr1 = /\\.(\\d*[1-9])0+$/, gnr2 = /\\.0*$/, gnr4 = /\\.(\\d*[1-9])0+/, gnr5 = /\\.0*[Ee]/, gnr6 = /(E[+-])(\\d)$/;\nfunction gfn2(v) {\n\tvar w = (v<0?12:11);\n\tvar o = gfn5(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\nfunction gfn3(v) {\n\tvar o = v.toFixed(11).replace(gnr1,\".$1\");\n\tif(o.length > (v<0?12:11)) o = v.toPrecision(6);\n\treturn o;\n}\nfunction gfn4(o) {\n\tfor(var i = 0; i != o.length; ++i) if((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4,\".$1\").replace(gnr5,\"E\").replace(\"e\",\"E\").replace(gnr6,\"$10$2\");\n\treturn o;\n}\nfunction gfn5(o) {\n\t//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,\"\").replace(gnr1,\".$1\");\n\t//return o;\n\treturn o.indexOf(\".\") > -1 ? o.replace(gnr2,\"\").replace(gnr1,\".$1\") : o;\n}\nreturn function general_fmt_num(v, opts) {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = gfn2(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = gfn3(v);\n\treturn gfn5(gfn4(o));\n};})();\nSSF._general_num = general_fmt_num;\nfunction general_fmt(v, opts) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\nSSF._general = general_fmt;\nfunction fix_hijri(date, o) { return 0; }\nfunction parse_date_code(v,opts,b2) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tfixopts(opts != null ? opts : (opts=[]));\n\tif(opts.date1904) date += 1462;\n\tif(out.u > 0.999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { time = 0; ++date; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 */\n\t\tvar d = new Date(1900,0,1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nSSF.parse_date_code = parse_date_code;\n/*jshint -W086 */\nfunction write_date(type, fmt, val, ss0) {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\tif(val.u === 0) switch(fmt) {\n\t\t\tcase 's': case 'ss': return pad0(val.S, fmt.length);\n\t\t\tcase '.0': case '.00': case '.000':\n\t\t}\n\t\tswitch(fmt) {\n\t\t\tcase 's': case 'ss': case '.0': case '.00': case '.000':\n\t\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\t\to = pad0(ss,2 + ss0);\n\t\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\t\tdefault: throw 'bad second format: ' + fmt;\n\t\t}\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1;\n\t}\n\tif(outl > 0) return pad0(out, outl); else return \"\";\n}\n/*jshint +W086 */\nfunction commaify(s) {\n\tif(s.length <= 3) return s;\n\tvar j = (s.length % 3), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=3) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,3);\n\treturn o;\n}\nvar write_num = (function make_write_num(){\nvar pct1 = /%/g;\nfunction write_num_pct(type, fmt, val){\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_cm(type, fmt, val){\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_exp(fmt, val){\n\tvar o;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o[0] + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o[0] + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o[o.length-1];\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r, aval, sign) {\n\tvar den = parseInt(r[4]), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r, aval, sign) {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.(0+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str) {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val, d) { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val, d) { return Math.round((val-Math.floor(val))*Math.pow(10,d)); }\nfunction flr(val) { if(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0)); return \"\"+Math.floor(val); }\nfunction write_num_flt(type, fmt, val) {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt[1]==' '?2:1),val);\n\tvar o, oo;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1)) !== null) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/) !== null) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1)) !== null) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+r[1]).replace(/\\.$/,\".\"+r[1]).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", r[1].length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/)) !== null) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#,##0(\\.?)$/)) !== null) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/)) !== null) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) !== null) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone) !== null) {\n\t\to = write_num_flt(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) !== null) {\n\t\tri = Math.min(r[4].length,7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", r[1], ff[1]);\n\t\tif(oa[oa.length-1] == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + r[2] + \"/\" + r[3];\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) !== null) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/)) !== null) {\n\t\to = pad0r(val, 0);\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n if((r = fmt.match(/^([#0?]+)\\.([#0]+)$/)) !== null) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/)) !== null) {\n\t\tri = dec(val, r[1].length);\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(ri,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"#,###\": var x = commaify(pad0r(aval,0)); return x !== \"0\" ? sign + x : \"\";\n\t\tdefault:\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nfunction write_num_cm2(type, fmt, val){\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_pct2(type, fmt, val){\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_exp2(fmt, val){\n\tvar o;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(!o.match(/[Ee]/)) {\n\t\t\tvar fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o[0] + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o[o.length-1];\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nfunction write_num_int(type, fmt, val) {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt[1]==' '?2:1),val);\n\tvar o;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1)) !== null) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/) !== null) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1)) !== null) {\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+r[1]).replace(/\\.$/,\".\"+r[1]).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", r[1].length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/)) !== null) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#,##0(\\.?)$/)) !== null) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/)) !== null) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) !== null) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone) !== null) {\n\t\to = write_num_int(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) !== null) {\n\t\tri = Math.min(r[4].length,7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", r[1], ff[1]);\n\t\tif(oa[oa.length-1] == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + r[2] + \"/\" + r[3];\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) !== null) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/)) !== null) {\n\t\to = \"\" + val;\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(/^([#0]+)\\.([#0]+)$/)) !== null) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/)) !== null) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\"+val).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(0,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"#,###\": var x = commaify(\"\"+aval); return x !== \"0\" ? sign + x : \"\";\n\t\tdefault:\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nreturn function write_num(type, fmt, val) {\n\treturn (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n};})();\nfunction split_fmt(fmt) {\n\tvar out = [];\n\tvar in_str = false, cc;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\nSSF._split = split_fmt;\nvar abstime = /\\[[HhMmSs]*\\]/;\nfunction eval_fmt(fmt, v, opts, flen) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', q, dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt[i])) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt[++i], t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt[i+1] === \"1\" || fmt[i+1] === \"2\") {\n if(dt==null) { dt=parse_date_code(v, opts, fmt[i+1] === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i<fmt.length && fmt[i].toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; /* m = minute */\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A':\n\t\t\t\tq={t:c, v:\"A\"};\n\t\t\t\tif(dt==null) dt=parse_date_code(v, opts);\n if(fmt.substr(i, 3) === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? \"P\" : \"A\"; q.t = 'T'; hr='h';i+=3;}\n else if(fmt.substr(i,5) === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt[i++] !== ']' && i < fmt.length) o += fmt[i];\n\t\t\t\tif(o.substr(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(abstime)) {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t} else { o=\"\"; }\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while((c=fmt[++i]) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(\"0#?.,E+-%\".indexOf(c=fmt[++i]) > -1 || c=='\\\\' && fmt[i+1] == \"-\" && \"0#\".indexOf(fmt[i+2])>-1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt[++i] === c) o+=c;\n\t\t\t\tq={t:c, v:o}; out[out.length] = q; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt[i] == ' ' || fmt[i] == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(\"0123456789\".indexOf(fmt[++i]) > -1) o+=fmt[i];\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxz\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': if(out[i].v === \"B2\");\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i] = undefined; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\tout[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '(': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t(c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/') ||\n\t\t\t\t\tout[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||\n\t\t\t\t\tc === 't' && (out[jj].v === '/' || '$€'.indexOf(out[jj].v) > -1 || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = undefined; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v); /* '-' */\n\t\tostr = write_num(nstr.charCodeAt(0) === 40 ? '(' : 'n', nstr, myv); /* '(' */\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t}\n\t\telse if(decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tjj = ostr.indexOf(\".\")-1;\n\t\t\tfor(i=decpt; i>= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v[j] === \"0\" || out[i].v[j] === \"#\")) vv = ostr[jj--] + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t\tjj = ostr.indexOf(\".\")+1;\n\t\t\tfor(i=decpt; i<out.length; ++i) {\n\t\t\t\tif(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n