<<display "pane">>
<<pane "left" "debug">>\\n<<pane "right" "links">>
THIS IS A MACRO THAT ALLOWS YOU TO PLACE SUB-PASSAGES INSIDE YOUR PASSAGES, AND TO SELECTIVELY TARGET THEM WITH LINKS (TO RELOAD OR ADVANCE, ETC).\n* USE {{{<<pane "pane name" "initial passage">>}}} TO PLACE A SUB-PANE IN A GIVEN PASSAGE.\n* LINKS IN THE FORM {{{<<link "to passage" "link text">>}}} WITHIN THE PASSAGE SHOWN BY THAT PANE WILL RELOAD THE PASSAGE WITHOUT TOUCHING ANY OTHER PASSAGES BEING DISPLAYED.\n* LINKS IN THE FORM {{{<<linkTo "pane name" "to passage" "link text">>}}} WILL TARGET THAT PANE (REPLACING THE GIVEN PASSAGE) NO MATTER WHERE THEY ARE ON THE PAGE.\n* THERE'S ALSO {{{<<linkMany "pane name" "to passage" "pane name" "to passage" (etc) "link text">>}}} FOR ALTERING MANY PANES WITH ONE LINK\nPANES ARE WRAPPED IN A DIV W/ THE ID OF THEIR PANE, SO YOU CAN USE {{{#left}}} TO TARGET CSS RULES FOR THE PANE CALLED "left"\n<<link "baz" "links in this pane">> / <<link "quux" "don't touch anything in the other pane">>
<<link "debug" "letting you have stories">> / <<link "quux" "that diverge and recombine">>
<<link "debug" "letting you have complex ui">> / <<link "baz" "in some passages, without touching others">>
<<link "foo" "this is a link">>\n\n<<linkTo "left" "leftOnly" "this link will always target the left pane">>\n<<linkTo "right" "rightOnly" "this link will always target the right pane">>\n\n<<linkMany "left" "doubleLeft" "right" "doubleRight" "this link targets both panes">>
JUST SOME OTHER PASSAGE\n\n<<link "links" "BACK TO LINKS">>
LEFT ONLY!!\n<<link "debug" "BACK TO INFO">>
RIGHT ONLY!!!\n<<link "links" "BACK TO LINKS">>
THESE PASSAGES CAN ONLY
BE REACHED FROM THAT DOUBLE LINK\n\n<<linkMany "left" "debug" "right" "links" "BACK (FOR BOTH)">>
.revision-span-in,\n.revision-span-in * {\n opacity: 0;\n}\n.revision-span:not(.revision-span-out),\n.revision-span:not(.revision-span-out) * {\n transition: 0.5s;\n -webkit-transition: 0.5s;\n}\n.revision-span-out,\n.revision-span-out * {\n position:absolute;\n opacity: 0;\n}
@font-face {\n font-family: 'Quicksand Regular';\n font-style: normal;\n font-weight: 400;\n src: local('Quicksand Regular'), local('Quicksand-Regular'), url(https://dl.dropbox.com/s/roxwdsrg09fho3b/Quicksand_Regular.ttf) format('truetype');\n}\nbody, html {\n font-family: 'Quicksand Regular', sans-serif;\n font-size: 9pt;\n margin: 0;\n padding: 0;\n height: 100%;\n}\n#passages {\n min-height: 100%;\n overflow: hidden;\n}\n#passages {\n margin: 0;\n border: 0;\n padding: 0;\n min-height: 100%;\n}\n#sidebar {\n display: none;\n}\n#left,\n#right {\n min-height: 100%;\n width: 50%;\n float: left;\n box-sizing: border-box;\n padding: 1em 2em 51em 2em;\n margin-bottom: -50em;\n}\n#left {\n text-align: right;\n border-right-style: solid;\n border-right-width: .5em;\n}\n#right {\n text-align: left;\n border-left-style: solid;\n border-left-width: .5em;\n}\n #left ul, #left ol {\n margin-right: .5em;\n padding-right: 1.5em;\n margin-left: 0;\n padding-left: 0;\n }\n #left li {\n margin-left: 6em;\n margin-right: 0;\n }\n #right li:before,\n #left li:before {\n display: block;\n content: "\2022";\n width: 1.0em;\n height: 1.0em;\n line-height: 1.33em;\n font-size: 150%;\n text-align: center;\n }\n #right li:before {\n position: absolute;\n top: 0;\n left: -1.33em;\n }\n #left li:before {\n position: absolute;\n top: 0;\n right: -1.33em;\n }\n #right li,\n #left li {\n position: relative;\n }\nli {\n list-style: none;\n}\n.black, #left {\n background: #111;\n color: #ddd;\n border-color: #eee;\n}\n.white, #right {\n background: #eee;\n color: #222;\n border-color: #111;\n}\n .passage .black a,\n .passage .white a,\n #left a,\n #right a {\n transition: 0.5s;\n -webkit-transition: 0.5s;\n }\n .passage .black a:hover,\n .passage .white a:hover,\n #left a:hover,\n #right a:hover {\n text-decoration: none;\n }\n .passage .black a,\n #left a {\n color: #ccc;\n text-shadow: 1px 0 1px #ccc;\n }\n .passage .black a:hover,\n #left a:hover {\n color: #fff;\n text-shadow: 1px 0 3px #fff;\n }\n .passage .white a,\n #right a {\n color: #333;\n text-shadow: -1px 0 1px #333;\n }\n .passage .white a:hover,\n #right a:hover {\n color: #000;\n text-shadow: -1px 0 3px #000;\n }
function reshowAll(e){var t=document.querySelectorAll(".passage ."+e.replace(" ","_")),n=false;for(var r=0;r<t.length;r++){n=reshow(t[r])}return n}function reshow(e){e.innerHTML="";new Wikifier(e,e.tweecode);e.classList.remove("revision-span-out");e.classList.add("revision-span-in");if(e.timeout){clearTimeout(e.timeout)}e.timeout=setTimeout(function(){e.classList.remove("revision-span-in")},1)}macros.pane={handler:function(place,macroName,params,parser){var name=params[0][0]=="$"?eval(Wikifier.parse(params[0])):params[0];var passage=params[1][0]=="$"?eval(Wikifier.parse(params[1])):params[1];var pane=document.createElement("span");var contents=document.createElement("span");pane.id=name.replace(" ","_");contents.className=" "+name.replace(" ","_");contents.tweecode='<<set $_ to $_current.push ("'+name+'")>><<display $_'+name+">><<set $_ to $_current.pop()>>";var h=state.history[0].variables;h["_"+name]=passage;if(typeof h._current=="undefined"){h._current=[]}pane.insertBefore(contents,null);place.insertBefore(pane,null);new Wikifier(contents,contents.tweecode)}};macros.link=macros.linkTo={handler:function(place,macroName,params,parser){var to,text,target;var h=state.history[0].variables;if(typeof h._current=="undefined"){h._current=[]}if(macroName=="link"){if(params.length<2){throwError(place,macroName+" macro needs 2 parameters");return}to=params[0][0]=="$"?eval(Wikifier.parse(params[0])):params[0];text=params[1][0]=="$"?eval(Wikifier.parse(params[1])):params[1];target=h._current[h._current.length-1]}else{if(params.length<3){throwError(place,macroName+" macro needs 3 parameters");return}target=params[0][0]=="$"?eval(Wikifier.parse(params[0])):params[0];to=params[1][0]=="$"?eval(Wikifier.parse(params[1])):params[1];text=params[2][0]=="$"?eval(Wikifier.parse(params[2])):params[2]}var link=Wikifier.createInternalLink();link.className="internalLink paneLink";link.id=to;link.insertBefore(document.createTextNode(text),null);link.onclick=function(){h["_"+target]=to;reshowAll(target)};place.insertBefore(link,null)}};macros.linkMany={handler:function(place,macroName,params,parser){if(params.length<3||params.length%2!=1){throwError(place,macroName+": invalid args, needs [pane passage...] link text");return}var h=state.history[0].variables;if(typeof h._current=="undefined"){h._current=[]}var text=params[params.length-1][0]=="$"?eval(Wikifier.parse(params[params.length-1])):params[params.length-1];var to,target;var link=Wikifier.createInternalLink();link.className="internalLink paneLink";link.insertBefore(document.createTextNode(text),null);link.onclick=function(){while(params.length!=1){target=params.shift();target=text[0]=="$"?eval(Wikifier.parse(target)):target;to=params.shift();to=to[0]=="$"?eval(Wikifier.parse(to)):to;h["_"+target]=to;reshowAll(target)}};place.insertBefore(link,null)}}
function reshowAll (name) {\n var\n rall=document.querySelectorAll(".passage ."+name.replace(" ","_")),\n ret=false;\n for(var i=0;i<rall.length;i++){\n ret=reshow(rall[i]);\n }\n return ret;\n}\n\nfunction reshow (target) {\n target.innerHTML="";\n new Wikifier(target,target.tweecode);\n target.classList.remove("revision-span-out");\n target.classList.add("revision-span-in");\n if(target.timeout){\n clearTimeout(target.timeout);\n }\n target.timeout=setTimeout(\n function(){\n target.classList.remove("revision-span-in")\n },\n 1);\n}\n\nmacros.pane = {\n handler: function (place, macroName, params, parser) {\n var name = params[0][0] == "$"\n ? eval(Wikifier.parse(params[0]))\n : params[0];\n var passage = params[1][0] == "$"\n ? eval(Wikifier.parse(params[1]))\n : params[1];\n var pane = document.createElement ("span");\n var contents = document.createElement ("span");\n pane.id = name.replace(" ","_");\n contents.className=" "+name.replace(" ","_");\n contents.tweecode =\n "<<set $_ to $_current.push (\"" + name + "\")>>\\n <<display $_" + name + ">>\\n <<set $_ to $_current.pop()>>";\n var h = state.history[0].variables;\n h["_" + name] = passage;\n if (typeof h._current == "undefined") {\n h._current = [];\n }\n pane.insertBefore(contents,null);\n place.insertBefore(pane,null);\n new Wikifier(contents, contents.tweecode);\n }\n }\n\nmacros.link = macros.linkTo =\n { handler: function (place, macroName, params, parser) {\n var\n to,\n text,\n target;\n var h = state.history[0].variables;\n if (typeof h._current == "undefined") {\n h._current = [];\n }\n if (macroName == "link") {\n if(params.length<2){\n throwError(place, macroName+" macro needs 2 parameters");\n return;\n }\n to = params[0][0] == "$"\n ? eval(Wikifier.parse(params[0]))\n : params[0];\n text = params[1][0] == "$"\n ? eval(Wikifier.parse(params[1]))\n : params[1];\n target = h._current[h._current.length-1];\n } else {\n if(params.length<3){\n throwError(place, macroName+" macro needs 3 parameters");\n return;\n }\n target = params[0][0] == "$"\n ? eval(Wikifier.parse(params[0]))\n : params[0];\n to = params[1][0] == "$"\n ? eval(Wikifier.parse(params[1]))\n : params[1];\n text = params[2][0] == "$"\n ? eval(Wikifier.parse(params[2]))\n : params[2];\n }\n var link = Wikifier.createInternalLink();\n link.className = "internalLink paneLink";\n link.id = to;\n link.insertBefore(document.createTextNode (text),null);\n link.onclick = function(){\n h["_" + target] = to;\n reshowAll (target);\n };\n place.insertBefore (link, null);\n }\n }\nmacros.linkMany =\n { handler: function (place, macroName, params, parser) {\n if (params.length < 3 || params.length % 2 != 1) {\n throwError (place, macroName + ": invalid args, needs [pane passage...] link text");\n return\n }\n var h = state.history[0].variables;\n if (typeof h._current == "undefined") {\n h._current = [];\n }\n var text = params[params.length-1][0] == "$"\n ? eval(Wikifier.parse(params[params.length-1]))\n : params[params.length-1];\n var to, target;\n var link = Wikifier.createInternalLink();\n link.className = "internalLink paneLink";\n link.insertBefore(document.createTextNode (text),null);\n link.onclick = function(){\n while (params.length != 1) {\n target = params.shift();\n target = text[0] == "$"\n ? eval(Wikifier.parse(target))\n : target;\n to = params.shift();\n to = to[0] == "$"\n ? eval(Wikifier.parse(to))\n : to;\n h["_" + target] = to;\n reshowAll (target);\n }\n };\n place.insertBefore (link, null);\n }\n }