Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
[[old days]]
[[new days]]
[[phantom images]]
[[it's Grasshopper]]
[[careful about tomorrow]]
[[sing with me]]
[[marching Ants]]
[[sudden light]]
[[new season]]
[[crash with me]]
[[lunatic among them]]
[[the real thing]]
[[going nowhere]]
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Version|1.6.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.
''Deferred execution from an 'onClick' link''
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered. You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text
''External script source files:''
You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
''Display script source in tiddler output''
By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.
''Defining javascript functions and libraries:''
Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).
To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.
Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.
''Creating dynamic tiddler content''
An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.
If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.
//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//
''Accessing the ~TiddlyWiki DOM''
The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.
Access to this DOM element allows you to create scripts that can:
* vary their actions based upon the specific location in which they are embedded
* access 'tiddler-relative' information (use findContainingTiddler(place))
* perform direct DOM manipulations (when returning wikified text is not enough)
<<<
!!!!!Examples
<<<
an "alert" message box:
><script show>
alert('InlineJavascriptPlugin: this is a demonstration message');
</script>
dynamic output:
><script show>
return (new Date()).toString();
</script>
wikified dynamic output:
><script show>
return "link to current user: [["+config.options.txtUserName+"]]";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
if (!window.story) window.story=window;
var title=story.findContainingTiddler(place).id.substr(7);
return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
creating an 'onclick' button/link that runs a script:
><script label="click here" title="clicking this link will show an 'alert' box" show>
if (!window.story) window.story=window;
alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
</script>
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
><script src="demo.js" show>
return "loading demo.js..."
</script>
><script label="click to execute demo() function" show>
demo()
</script>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.02.19 [1.6.0]'' added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
''2006.10.16 [1.5.2]'' add newline before closing '}' in 'function out_' wrapper. Fixes error caused when last line of script is a comment.
''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
''2006.01.05 [1.4.0]'' added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access
''2005.11.08 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 6, revision: 0, date: new Date(2007,2,19)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
if (lookaheadMatch[1]) { // load a script library
// make script tag, set src, add to body to execute, then remove for cleanup
var script = document.createElement("script"); script.src = lookaheadMatch[1];
document.body.appendChild(script); document.body.removeChild(script);
}
if (lookaheadMatch[5]) { // there is script code
if (lookaheadMatch[4]) // show inline script code in tiddler output
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (lookaheadMatch[2]) { // create a link to an 'onclick' script
// add a link, define click handler, save code in link (pass 'place'), set link attributes
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
link.code="function _out(place){"+lookaheadMatch[5]+"\n};_out(this);"
link.setAttribute("title",lookaheadMatch[3]?lookaheadMatch[3]:"");
link.setAttribute("href","javascript:;");
link.style.cursor="pointer";
}
else { // run inline script code
var code="function _out(place){"+lookaheadMatch[5]+"\n};_out(w.output);"
code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
| [img[images/krewe_worriers.png]]|Most Worriers are not impressed by historical arguments Dick concocts late into the night. I listen as we sip his scotch. The Worriers don't much buy into speculations about "blood mysticism." Maybe because most of them have been there already and their ANX doesn't allow any relish of such memories. But, as with all things desperate,+++>In search of an emblem, we decided to turn a cross '+' on its side like an 'x'. Superimposed over it was a smaller cross '+' that I felt marked two new boundaries—one between the //quiet// and the //unquiet//, as only recogs understand. The other separating //now// from //then//. Our emblem looks like an asterisk and it didn't take long for someone to christen it "Ass To Risk." I love my krewe! Worriers +++>For a Mardi Gras theme we needed something everyone could relate to, that would incite outrageous cleverness. Or at least the outrageous. Someone suggested we do a //Menstrual Show//, but since recogs are generally male we felt at a disadvantage right at the start. Then, playing around with free association we morphed through a 'blood flood' of all the liquid visceral threats dreaded by lost and failed warriors. Finally we settled on a burlesque +++>It was a hoot! +++>The parade favors we threw confused and even astounded the knots of tourists and native hell-raisers we managed to draw to our throng. We tossed packets of tampons doused in ketchup, condoms tied off to contain smatterings of egg white, little slimy plastic fish and crawfish, as well as our traditional wooden krewe doubloons. Ending up in raucous gala at a large music hall on Decatur Street, //The Odd Howler//, we drank and danced and drove the night through drunken spree. //Farewell to the Flesh//, indeed!===Some were garish caricatures of cowboys astride formidable and obscenely festooned tampons. Others came as fish of various species of pun: lots of //Trouser Trout//, //Cod Fish//, and //Smackerals//. Among the guys the //Blowfish// was most popular; she won the prize hands—and knees—down!=== of the macho Gulf fishing festival. The //Tarpon Rodeo// became our //Tampon Rodeo//. === seem to have invented fun! === yet beyond control, they do seem to find our musings uproariously funny. [[^top|anx1.13]]|
''<<popup First '<<tiddler 1Menu$))'>>''
''[[Second|tw_mwk2.html]]''
''[[Third|tw_mwk3.html]]''
''[[Fourth|tw_mwk4.html]]''
''[[Fifth|tw_mwk5.html]]''
''[[Sixth|tw_mwk6.html]]''
''[[Seventh|tw_mwk7.html]]''
''[[Eighth|tw_mwk8.html]]''
''[[Ninth|tw_mwk9.html]]''
''[[Tenth|tw_mwk10.html]]''
''[[Eleventh|tw_mwk11.html]]''
''[[Twelfth|tw_mwk12.html]]''
''[[Thirteenth|tw_mwk13.html]]''
''[[Fourteenth|tw_mwk14.html]]''
''[[Fifteenth|tw_mwk15.html]]''
''[[Sixteenth|tw_mwk16.html]]''
''[[Seventeenth|tw_mwk17.html]]''
''[[Eighteenth|tw_mwk18.html]]''
''[[Nineteenth|tw_mwk19.html]]''
''[[Twentieth|tw_mwk20.html]]''
''[[Twenty-First|tw_mwk21.html]]''
''[[Twenty-Second|tw_mwk22.html]]''
''[[Twenty-Third|tw_mwk23.html]]''
''[[Twenty-Fourth|tw_mwk24.html]]''
''[[Twenty-Fifth|tw_mwk25.html]]''
''[[Twenty-Sixth|tw_mwk26.html]]''
''[[Twenty-Seventh|tw_mwk27.html]]''
''[[Twenty-Eighth|tw_mwk28.html]]''
''[[Twenty-Ninth|tw_mwk29.html]]''
''[[Thirtieth|tw_mwk30.html]]''
''[[Thirty-First|tw_mwk31.html]]''
''[[Thirty-Second|tw_mwk32.html]]''
''[[Epilogue|tw_mwkep.html]]''
''[[Resources & Copyright|Resources]]''
----
----
+++[Browser Requirements|Which browsers work best?]>Best viewed with //[[Firefox|http://www.mozilla.com/firefox/]]//. Some browsers, especially older ones, do not correctly display pages dynamically created from ~JavaScript and CSS. Internet Explorer, especially, ignores CSS styles applied to tables; it draws ugly borders that should be invisible. With any browser be sure ~JavaScript is enabled. Set screen display dimensions as high as possible (1024x768 or higher) to avoid "cramping" the browser window.===
These notes illuminate Penn Hebert's life in the ANX lattice. They comprise a //memecopia//, i.e., a hypertext of "many thoughts."
''[//ANX// is a work in progress and currently is far from completion . . . .]''
>[[Overview]]
>[[Memecopia Structure]]
>[[Resources]]
|A //memecopia// is simply a collection of interlinked text passages, some with images, some without. |
|//ANX// is organized into a number of sections. The menu of links at the upper left will jump to the "starting place" of its respective section.|
|Within text passages are [[links that open new items|ANX Lattice]] as well as //gloss// links +++>that amplify or extend the tiddler in which they occur===. Some gloss links may +++[look like a button]>but they work the same way===. (Click a gloss link to open; click again to close.) These links open new ANX passages inside the same browser window.|
|[[Links that are underlined|http://en.wikipedia.org]] open supporting information from outside of //ANX//, often from //Wikipedia.org//. To avoid losing your place in //ANX//, right click underlined links and select either "Open Link in New Window" or "Open Link in New Tab".|
|Also on the left are links to all of the 'tiddlers' (a term coined by //[[TiddlyWiki|http://www.tiddlywiki.com/]]// designer and developer Jeremy Ruston) that make up the entire section.|
|Each tiddler has its own menu to close one or more tiddlers, as well as other items that are explained on the //~TiddlyWiki// web site.|
|A memecopia is for browsing at will. There is no "chronological" order of earlier or later; it is more like a mesh of interconnected thoughts and recollections. Wander about and let its context gradually reveal what is available. If you get lost try the menu links at top left or the "tiddler" links below left. Within each //ANX// section you can search for passages containing specific words.|
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Version|2.0.5|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Slider.prototype.stop|
|Description|Make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content.|
++++!!!!![Configuration]>
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.
Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
===
++++!!!!![Usage]>
When installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.
Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*mouse auto rollover
*custom class/label/tooltip/accesskey
*automatic blockquote
*deferred rendering
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip]}}}>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^
marks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^
* {{{(cookiename)}}}^^
saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^
* {{{!}}} through {{{!!!!!}}}^^
displays the slider label using a formatted headline (Hn) style instead of a button/link style^^
* {{{^width^}}} (or just {{{^}}})^^
makes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)^^
* {{{*}}}^^
automatically opens/closes slider on "rollover" as well as when clicked^^
* {{{{{class{[label=key|tooltip]}}}}}}^^
uses custom label/tooltip/accesskey. {{{{{class{...}}}}}}, {{{=key}}} and {{{|tooltip}}} are optional. 'class' is any valid CSS class name, used to style the slider label text. 'key' must be a ''single letter only''. Default labels/tootips are: ">" (more) and "<" (less), with no default access key assignment.^^
* {{{">"}}} //(without the quotes)//^^
automatically adds blockquote formatting to slider content^^
* {{{"..."}}} //(without the quotes)//^^
defers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^
//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
===
++++!!!!![Examples]>
simple in-line slider:
{{{
+++
content
===
}}}
+++
content
===
----
use a custom label and tooltip:
{{{
+++[label|tooltip]
content
===
}}}
+++[label|tooltip]
content
===
----
content automatically blockquoted:
{{{
+++>
content
===
}}}
+++>
content
===
----
all options combined //(default open, cookie, heading, sized floater, rollover, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
}}}
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
----
complex nesting example:
{{{
+++^[get info...=I|click for information or press Alt-I]
put some general information here, plus a floating slider with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===
===
===
}}}
+++^[get info...=I|click for information or press Alt-I]
put some general information here, plus a floating slider with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===
===
===
===
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.06.10 - 2.0.5'' add check to ensure that window.adjustSliderPanel() is defined before calling it (prevents error on shutdown when mouse event handlers are still defined)
''2007.05.31 - 2.0.4'' add handling to invoke adjustSliderPanel() for onmouseover events on slider button and panel. This allows the panel position to be re-synced when the button position shifts due to changes in unrelated content above it on the page. (thanks to Harsha for bug report)
''2007.03.30 - 2.0.3'' added chkFloatingSlidersAnimate (default to FALSE), so that slider animation can be disabled independent of the overall document animation setting (avoids strange rendering and focus problems in floating panels)
''2007.03.01 - 2.0.2'' for TW2.2+, hijack Morpher.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
''2007.03.01 - 2.0.1'' in hijack for Slider.prototype.stop, use apply() to pass params to core function
|please see [[NestedSlidersPluginHistory]] for additional revision details|
''2005.11.03 - 1.0.0'' initial public release
<<<
!!!!!Credits
<<<
This feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.
<<<
!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 2, minor: 0, revision: 5, date: new Date(2007,6,10)};
//}}}
//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=false;
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
//}}}
//{{{
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\[\\>]*\\^)?)?(\\*)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(?:\\}{3})?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
// defopen=lookaheadMatch[1]
// cookiename=lookaheadMatch[2]
// header=lookaheadMatch[3]
// panelwidth=lookaheadMatch[4]
// rollover=lookaheadMatch[5]
// class=lookaheadMatch[6]
// label=lookaheadMatch[7]
// blockquote=lookaheadMatch[8]
// deferred=lookaheadMatch[9]
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey
var show="none"; var title=">"; var tooltip="show"; var cookie=""; var key="";
// extra "+", default to open
if (lookaheadMatch[1])
{ show="block"; title="<"; tooltip="hide"; }
// cookie, use saved open/closed state
if (lookaheadMatch[2]) {
cookie=lookaheadMatch[2].trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
if (config.options[cookie])
{ show="block"; title="<"; tooltip="hide"; }
else
{ show="none"; title=">"; tooltip="show"; }
}
// parse custom label/tooltip/accesskey: [label=X|tooltip]
if (lookaheadMatch[7]) {
title = lookaheadMatch[7].trim().slice(1,-1);
var pos=title.indexOf("|");
if (pos!=-1) { tooltip = title.substr(pos+1,title.length); title=title.substr(0,pos); }
if (title.substr(title.length-2,1)=="=") { key=title.substr(title.length-1,1); title=title.slice(0,-2); }
if (pos==-1) tooltip += " "+title; // default tooltip: "show/hide <title>"
}
// create the button
if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);
// set extra button attributes
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
// "non-click" MouseOver opens/closes slider
if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;
// otherwise, mouseover aligns floater position with button
else btn.onmouseover=function(event)
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel,this.sliderPanel.className); }
// create slider panel
var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
var panel=createTiddlyElement(place,"div",null,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):""; // save requested panel size
btn.sliderPanel=panel;
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this,this.className); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!lookaheadMatch[9]) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(lookaheadMatch[8]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel,panelClass);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",lookaheadMatch[8]?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
}
}
}
}
)
// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var theLabel = theTarget.firstChild.data;
var theSlider = theTarget.sliderPanel
var isOpen = theSlider.style.display!="none";
// if using default button labels, toggle labels
if (theLabel==">") theTarget.firstChild.data = "<";
else if (theLabel=="<") theTarget.firstChild.data = ">";
// if using default tooltips, toggle tooltips
if (theTarget.getAttribute("title")=="show")
theTarget.setAttribute("title","hide");
else if (theTarget.getAttribute("title")=="hide")
theTarget.setAttribute("title","show");
if (theTarget.getAttribute("title")=="show "+theLabel)
theTarget.setAttribute("title","hide "+theLabel);
else if (theTarget.getAttribute("title")=="hide "+theLabel)
theTarget.setAttribute("title","show "+theLabel);
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
if (config.options.chkDebugLazySliderRender)
alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (theSlider.className!='floatingPanel' || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ ctrls[c].focus(); break; }
}
}
if (this.sliderCookie && this.sliderCookie.length) {
config.options[this.sliderCookie]=!isOpen;
if (config.options[this.sliderCookie]!=this.defOpen)
saveOptionCookie(this.sliderCookie);
else { // remove cookie if slider is in default display state
var ex=new Date(); ex.setTime(ex.getTime()-1000);
document.cookie = this.sliderCookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}
return false;
}
// TW2.1 and earlier:
// hijack Slider animation handler 'stop' handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher animation handler 'stop' handler so overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
}
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {
if (panelClass=="floatingPanel") {
var left=0;
var top=btn.offsetHeight;
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
}
if (findPosX(btn)+panel.offsetWidth > getWindowWidth()) // adjust position to stay inside right window edge
left-=findPosX(btn)+panel.offsetWidth-getWindowWidth()+15; // add extra 15px 'fudge factor'
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
function getWindowWidth() {
if(document.width!=undefined)
return document.width; // moz (FF)
if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
return document.documentElement.clientWidth; // IE6
if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
return document.body.clientWidth; // IE4
if(window.innerWidth!=undefined)
return window.innerWidth; // IE - general
return 0; // unknown
}
//}}}
//[[ANX|ANX Lattice]]// is set in the French Quarter of New Orleans. The young protagonist and author of these notes is Penn Hebert. (//Hebert// is a Cajun French name, pronounced "a bear".)
Penn, formerly a graduate student in photonic engineering, was tragically and unjustly caught up in his cousin's trafficking of a notoriously perverse hallucinogenic drug //majik//. Implicated along with a gang known as the //Teuton Warriors//, infamous for their tabloid-hyped, violently intoxicated //majik sprees//, Penn is convicted of aggravated rape and murder.
As experimental alternative to the death penalty he and most of the surviving Warriors suffer implantation of the //''ANX''//—an experimental radio-linked monitor of hypothalamic brain states that punishes any thought of violence with bouts of hysterical nausea.
Unable to recall much of their lives prior to the ANX, but now docile and firmly leashed by the ANX lattice of control nodes, such convicted felons are released on their own recognizance to survive on the streets of New Orleans. Penn finds himself tethered to an ANX node located behind St. Louis Cathedral in the French Quarter.
Victimized by bullies and perversely exploited by almost everyone, destitute recogs survive by cleaning up after tourists and performing various tasks, however menial or venal, for local citizens, whom recogs talking among themselves contemptuously call //CZ//'s.
Learning to cope within their now pitiless existence, wherein the only vices not punished by the ANX are gluttony and drunkeness, the Teuton Warrior recogs sarcastically restyle themselves the //Two Ton Worriers//.
Penn has managed to eke out an advantageous niche by putting his technical skills in service to the reigning //Queen of Vice//, Mamma Latrice. For her he installs and maintains surreptitious //transpaks//, devices that open into a virtual world of holographic data-net surveillance of public and private lives. Mamma Latrice is especially interested in scandalous failures of various police officials, politicians and rival criminal operators. And for so long as Penn helps Mamma Latrice keep control of her underworld empire, she supports and protects him from the worst of abysmal fortunes that afflict his kind.
As Penn learns ever more about events leading to his arrest and conviction, he finds new hope: that he may decipher vague clues suggesting just how he fell into such desolation, that somehow he can prove his innocence, gain official pardon and perhaps even survive removal of the ANX implant!
Penn's friend and mentor Richard Piron owns and operates an antique shop //Le Salon d'Histoire// on Decatur Street. In late night discussions Penn pours out his regrets, suspicions and aspirations for Piron's cool appraisal and counsel. In recollections of their conversations Penn ponders his own and humanity's penchant for self-induced misfortune and suffering. Through his hyperlinked notes we negotiate webs of association and speculation regarding Penn, New Orleans, the Mississippi Delta, the New World, and ancient motives braiding the human psyche.
/***
|''Name:''|~PopupMacro|
|''Version:''|1.0.0 (2006-05-09)|
|''Source:''|http://tw.lewcid.org/#PopupMacro|
|''Author:''|Saq Imtiaz|
|''Description:''|Create popups with custom content|
|''Documentation:''|[[PopupMacro Documentation|PopupMacroDocs]]|
|''~Requires:''|TW Version 2.0.8 or better|
***/
// /%
{{{
config.macros.popup = {};
config.macros.popup.arrow = (document.all?"▼":"▾");
config.macros.popup.handler = function(place,macroName,params,wikifier,paramString,theTiddler) {
if (!params[0] || !params[1])
{createTiddlyError(place,'missing macro parameters','missing label or content parameter');
return false;};
var label = params[0];
var source = (params[1]).replace(/\$\)\)/g,">>");
var nestedId = params[2]? params[2]: 'nestedpopup';
var onclick = function(event) {
if(!event){var event = window.event;}
var theTarget = resolveTarget(event);
var nested = (!isNested(theTarget));
if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};
var theId = (nested==false)? "popup" : nestedId;
var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
Popup.stack.push({root: button, popup: popup});
wikify(source,popup);
Popup.show(popup,true);
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
var button = createTiddlyButton(place, label+this.arrow,label, onclick, null);
};
window.isNested = function(e) {
while (e != null) {
var contentWrapper = document.getElementById("contentWrapper");
if (contentWrapper == e) return true;
e = e.parentNode;
}
return false;
};
setStylesheet(
".popup, .popup a, .popup a:visited {color: #fff;}\n"+
".popup a:hover {background: #014; color: #fff; border: none;}\n"+
".popup li , .popup ul, .popup ol {list-style:none !important; margin-left:0.3em !important; margin-right:0.3em; font-size:100%; padding-top:0.5px !important; padding:0px !important;}\n"+
"#nestedpopup {background:#2E5ADF; border: 1px solid #0331BF; margin-left:1em; }\n"+
"",
"CustomPopupStyles");
config.shadowTiddlers.PopupMacroDocs="The documentation is available [[here.|http://tw.lewcid.org/#PopupMacroDocs]]";
}}}
//%/
I'll build a town on this black, swollen ground,
Fill up the sky with walls built around,
Fill up the rooms with puppets and kings,
Tie them together with white linen strings.
[[...>|http://www.spotops.net/salon/songs/pdf/ssspdf/puppets.pdf]]
''Bibliography:''
>
>Hall, J. Storrs. //Nanofuture: What's Next for Nanotechnology//. Amherst, NY: Prometheus Books, 2005.
>
>Huizinga, Johan. //Homo Ludens: A Study of the Play Element in Culture//. Boston: Beacon Press, 1935.
>
>Lakoff, George and Nunez, Rafael. //Where Mathematics Comes From//. New York: Basic Books, 2000.
>
>~LeDoux, Joseph. //Synaptic Self: How Our Brains Become Who We Are//. New York: Penguin Books, 2003.
>
>Miller, William Ian. //The Anatomy of Disgust//. Cambridge, MA: Harvard University Press, 1997.
>
>Moffett, Shannon. //The ~Three-Pound Enigma: The Human Brain and the Quest to Unlock Its Mysteries//. Chapel Hill, NC: Algonquin Press, 2006.
>
>Ricard, Matthieu and Thuan, Trinh Xuan. //The Quantum and the Lotus//. New York, NY: Three Rivers Press, 2001.
>
>Satinover, Jeffrey. //The Quantum Brain//. New York, NY: John Wiley & Sons, 2001
>
>Shanker, Stuart G. //The First Idea: How Symbols, Language, and Intelligence Evolved From Our Primate Ancestors//. Cambridge, MA:Da Capo Press, 2004.
>
>Theweleit, Klaus. //Male Fantasies//. Minneapolis: University of Minnesota Press, vol 1:1987, vol 2:1989.
>
>Tipler, Frank J. //The Physics of Immortality//. New York: Doubleday, 1994.
>
^^ //''The Makewell Kisser'' memecopia// Copyright (c) 1977-2007 Howard Jones All rights reserved.
[This is Pre-release Version #20070724]
----
^^This rendering of //''The Makewell Kisser''// is embodied in a modified //[[TiddlyWiki|http://www.tiddlywiki.com/]]//, a uniquely dynamic non-linear writing format developed by Jeremy Ruston.^^
^^ //~TiddlyWiki 2.2.4 by Jeremy Ruston//, (jeremy [at] osmosoft [dot] com), published under a BSD open source license. //[[TiddlyWiki|http://www.tiddlywiki.com/]]// code Copyright (c) Osmosoft Limited 2005-07^^
^^~HTMLFormattingPlugin, ~NestedSlidersPlugin, ~InlineJavascriptPlugin and ~SinglePageDisplayPlugin were developed by Eric Shulman from [[ELS Design Studios|http:/www.elsdesign.com]]^^
^^~RolloverPlugin created by [[Frank Dellaert|http://www.cc.gatech.edu/~dellaert/tiddly.html]]^^
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Version|2.3.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|
|Description|Display tiddlers one at a time with automatic update of URL (permalink). Also, options to always open tiddlers at top/bottom of page|
Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.
!!!!!Usage
<<<
SinglePageMode allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time. When SinglePageMode is enabled, the title of the current tiddler is automatically displayed in the browser window's titlebar and the browser's location URL is updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.
Even when SinglePageMode is disabled (i.e., displaying multiple tiddlers is permitted), you can reduce the potential for confusion by enable TopOfPageMode, which forces tiddlers to always open at the top of the page instead of being displayed following the tiddler containing the link that was clicked.
<<<
!!!!!Configuration
<<<
When installed, this plugin automatically adds checkboxes in the AdvancedOptions tiddler so you can enable/disable the plugin behavior. For convenience, these checkboxes are also included here:
<<option chkSinglePageMode>> Display one tiddler at a time
<<option chkTopOfPageMode>> Always open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Always open tiddlers at the bottom of the page
//(note: if both settings are selected, "top of page" is used)//
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for SinglePageMode handling^^
When installed, this plugin automatically adds checkboxes in the ''shadow'' AdvancedOptions tiddler so you can enable/disable this behavior. However, if you have customized your AdvancedOptions, you will need to ''manually add these checkboxes to your customized tiddler.''
<<<
!!!!!Revision History
<<<
''2007.03.03 [2.3.1]'' fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)
''2007.03.03 [2.3.0]'' added support for BottomOfPageMode (BPM) based on request from DaveGarbutt
''2007.02.06 [2.2.3]'' in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)
''2007.01.08 [2.2.2]'' use apply() to invoke hijacked core functions
''2006.07.04 [2.2.1]'' in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.
''2006.06.01 [2.2.0]'' added chkTopOfPageMode (TPM) handling
''2006.02.04 [2.1.1]'' moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals
''2005.12.27 [2.1.0]'' hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list). Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers
''2005.12.27 [2.0.0]'' Update for TW2.0
''2005.11.24 [1.1.2]'' When the back and forward buttons are used, the page now changes to match the URL. Based on code added by Clint Checketts
''2005.10.14 [1.1.1]'' permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them
''2005.10.14 [1.1.0]'' added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.
''2005.10.09 [1.0.1]'' combined documentation and code in a single tiddler
''2005.08.15 [1.0.0]'' Initial Release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageMode= {major: 2, minor: 3, revision: 1, date: new Date(2007,3,3)};
if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSinglePageMode>> Display one tiddler at a time";
if (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;
config.shadowTiddlers.AdvancedOptions += "\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";
if (config.options.chkBottomOfPageMode==undefined) config.options.chkBottomOfPageMode=false;
config.shadowTiddlers.AdvancedOptions += "\n<<option chkBottomOfPageMode>> Always open tiddlers at the bottom of the page";
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
if (!config.options.chkSinglePageMode)
{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
if (config.lastURL == window.location.hash)
return;
var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));
tiddlerName=tiddlerName.replace(/\[\[/,"").replace(/\]\]/,""); // strip any [[ ]] bracketing
if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);
}
if (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)
{
if (config.options.chkSinglePageMode) {
window.location.hash = encodeURIComponent(convertUnicodeToUTF8(String.encodeTiddlyLink(title)));
config.lastURL = window.location.hash;
document.title = wikifyPlain("SiteTitle") + " - " + title;
story.closeAllTiddlers();
if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
}
if (config.options.chkTopOfPageMode) { story.closeTiddler(title); srcElement=null; }
else if (config.options.chkBottomOfPageMode) { story.closeTiddler(title); srcElement="bottom"; }
this.SPM_coreDisplayTiddler.apply(this,arguments);
if (config.options.chkTopOfPageMode) window.scrollTo(0,0); // make sure top of page is visible
else if (config.options.chkBottomOfPageMode) {
var display=document.getElementById("tiddlerDisplay"); // for TW2.1-
if (!display) var display=document.getElementById("storyDisplay"); // for TW2.2+
window.scrollTo(0,ensureVisible(display.lastChild)); // make sure last tiddler is visible
}
}
if (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)
{
// suspend single-page mode (and/or top/bottom display options) when showing multiple tiddlers
var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;
this.SPM_coreDisplayTiddlers.apply(this,arguments);
config.options.chkBottomOfPageMode=saveBPM;
config.options.chkTopOfPageMode=saveTPM;
config.options.chkSinglePageMode=saveSPM;
}
//}}}
[img[images/ringsag.png]][img[images/spacer.png]]@@color(#f8c240):''The Makewell Kisser''@@
http://www.spotops.net/salon/
#mainMenu{
position: relative;
float: left;
}
body{background:#F1F7E4;}
#sidebar{
position: relative;
margin: 820px 0 0 20px;
display: none;
//visibility: visible;
}
.tiddler {-moz-border-radius:0em;border-top:1px solid #ccc;border-left:1px solid #ccc;
border-bottom:5px solid #ccc;border-right:5px solid #ccc;margin:0.5em;background:#fff;padding:0.5em;}
#displayArea{
position: absolute;
top: 120px; left:0px;
width: 80%;
margin: 0 80px 0 200px;
}
.marginedImage {
margin-right: 20px;
}
.headerShadow {padding:1em 0em 1em 6em;}
.headerForeground {padding:1em 0em 1em 6em;}
.tiddler {
padding:1em 2em 0em 2em;
}
.tiddler .button:hover {
color: #444;
background: #ccc;
}
.tiddler .button:active {
color: #000;
background: #c90;
}
.popup {background: #05a;}
.viewer .button {
background: #ddd;
color: #300;
border-right: 1px solid #600;
border-bottom: 1px solid #600;
}
.viewer .button:hover {
background: #eea;
color: #c90;
}
.viewer blockquote{
border-left: 3px solid #666;
}
.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 {
background: #cc9;
}
.viewer table {
border: 2px none #606060;
}
.viewer th {
background: #996;
border: 1px none #606060;
color: #fff;\n
}
.viewer td, .viewer tr {
border: 1px none #606060;
}
.viewer pre {
color: #000000;
border: 1px solid #963;
background: #eea;
}
.viewer code {
color: #630;
}
.viewer hr {
border-top: dashed 1px #606060;
border-left: none;
border-right: none;
border-bottom: none;
color: #666;
}
[[<back|it's Grasshopper]]
They step out from the toll booth to rejoin the hapless scramble.
“Can’t we just hold hands?” Kristin tugs fretfully at the belt leash.
“No. This is better . . . .”
No hint as to why it is better. She peers closely at him as they transition from bright sun into cavern dimness.
He seems to wish she were not with him. Some old hints of resentment have lately resurfaced, percolating out of residues and stresses that once nearly foiled their raucous and sudden celebrity. Peter Dooley and Bill Banner had become comic mascots of a Federal Emergency Response Administration, Llc, FERAL, public relations effort meant to ease public response to new and even more austere government policies imposed amid worsening economic woes.
Successive propaganda campaigns have sought to redress decades of profligacy. Preaching an ethic of hard work, frugality and stoic forbearance. //Ant and Grasshopper// recently sprang through teleview spots and occasional, carefully managed public appearances to cheerlead public awareness in revised invocations: America has grown too lavishly cavalier. Save more. Waste less. Shop, always shop, but be smart about it. Be happy, but careful about tomorrow.
[[next>|sing with me]]
[[<back|new season]]
“My, God, he’s crazy!” a woman gasps from behind.
“Shut up, Hazel,” a sour male voice clips.
“Yeah, Hazel, crazy ways’ll faze a maze of hazy days,” Grasshopper chants, then resumes his lusty serenade,
"For we are marching to Pretoria, Pretoria, Pretoria.
"We are marching to Pretoria. Pretoria, hooray!
"Haze with me, I’ll craze with you
"So we all plays together,
"And we all lays together,
"Just let's all embraze together . . . ."
Grasshopper jumps and capers about. He berates a few reluctant hikers nearby to release their dismay into the rhythms of his marching song. Other voices are recruited, finally even those of Hazel and her companion.
In the void of Dooley’s departed intent, Grasshopper is intrigued by a suddenly profound notion. It promises to transform a senseless jumble of noise and movement into terms he can grasp. It renders scattered intimations of hope, pleasure, joy, rage, fear and sadness into an intuitively evident maxim.
He proclaims it loudly for all to hear, "//For lack of anything better to do–just do anything!// //''It''//s meaning is given in the doing. //''It''//'s so marvelous! //''It''// explains everything . . . in //''it''//s own good time . . . . You miserable Ants are wishing–but Grasshopper's swishing. You're hoping; I'm hoppening! //''It's hoppening''// everywhere–all around. Always was. Always is. Always shall be. //'All that is'// once was maybe //'what shall be' . . . ''Aliswashalbe''// hoppening now . . . ." he exclaims, celebrating new dawn manifesting at the far tunnel exit. "Now, Aliswashalbe!"
As the surrounding chorus launches through another round of singing, Grasshopper exults in the elegant simplicity of it all. He cackles praise of a new tenor he hears joining his choral glee. He has no idea from whence they have come, nor where they may be headed, nor even why Ant’s Sister refuses to sing. Or why she vacillates between staring coldly ahead, looking dolefully at him and crying as they trudge out toward the old New Jersey Turnpike and toward access to Interstate-78 to Harrisburg.
Whatever her reasons for not joining in, he relishes their outing. As they emerge from the tunnel Grasshopper gratefully breathes deeply, warm in the radiance of a lovely Indian Summer Day.
"Aliswashalbe."
[[next>|lunatic among them]]
[[<back|the real thing]]
Ant’s Sister trudges on without breaking pace. She has ignored the entire episode and now refuses to talk about it or anything else. She is so like her brother, Grasshopper reminds himself as he again catches up to her. Narrow and stubborn, nothing is of interest unless it gets you somewhere. You’d think she knows where she is going, so intent is she getting there. For her it's the goal, not the journey. But maybe she does know! Sometimes Ants have a lot of astonishing things. Maybe she does, too.
“Where’re we going, Sis?” he asks lightly, trying to seem casually disinterested. Her lips flinch slightly, still refusing to chat with him.
“Hey, Sis. You're in charge. Where’re we going?” he repeats a little louder. As he reaches for her arm he is startled by the vehemence of her jerking away and beyond his reach.
“Leave me alone, Pete!” she snarls, “For God’s sake, just shut up and fucking leave me alone!” Clenched jaws harden her face. A threat of green glaring retribution glints in her eyes. “I don’t know what you’re doing but I don’t like it! Cut it out and get away from me!” She reaches arms widely out and about, dismissing puzzled expressions on people still wary and avoiding the two of them, “Everybody is going nowhere,” she hisses, "Maybe you haven't noticed . . . ."
Grasshopper beams back at her, cheery disposition is the most apt antidote to such impatience. “Don’t worry,” he chuckles as he holds up the frozen display of his iLink for her inspection, “they’ll make it okay. Time’s awaiting.”
Kristin looks back angrily at him, without tears but as if there should be some. The flush of anger slowly relents. She does not seem to mind when finally he reaches out and puts his arm around her shoulder as if they are schoolyard chums. They stand for a while longer, over by the side of the roadbed. Then she moves abruptly from his casual embrace to rejoin the retreating tide of refugees. Grasshopper watches her take a few steps. Then she pauses and turns to look searchingly back at his impossibly happy face.
“Come on,” she sighs, resigned to some new age of senselessness, “we’re all we have left.”
[[next>|tw_mwk2.html]]
[[<back|old days]]
----
<html>
<center>
<strong>The Ant and the Grasshopper</strong><br />
<br />
In a field one summer's day a Grasshopper was hopping about,<br />
chirping and singing to its heart's content.<br />
An Ant passed by, bearing along with great toil<br />
an ear of corn he was taking to the nest.<br />
<br />
"Why not come and chat with me," said the Grasshopper,<br />
"instead of toiling and moiling in that way?"<br />
<br />
"I am helping to lay up food for the winter," said the Ant,<br />
"and recommend you to do the same."<br />
<br />
"Why bother about winter?" said the Grasshopper; we have got<br />
plenty of food at present." But the Ant went on its way and<br />
continued its toil. When the winter came the Grasshopper had no<br />
food and found itself dying of hunger, while it saw the ants<br />
distributing every day corn and grain from the stores they had<br />
collected in the summer. Then the Grasshopper knew:<br />
<br />
<strong><em>It is best to prepare for the days of necessity.</em></strong><br />
<i>[Aesop's Fables]</i>
</center>
</html>
----
Worlds seen or imagined, near or far, like nesting dreams of maybe hold all that may be conceived or enacted.
Who denies their own flesh merely to spawn new, more vicious demons? National plagues bleed even innocent tribes.
Listen, my child. You, too, sprout from insane legacies, unfolding secret pretenses into tomorrow's infecting vectors.
Ah, to live //Grasshopper Lives//, savoring savvy seasons, //Otherwise Being// among these winning–oh so saintly–//Overlords of Dispossession//.
Who courts the //Landlord's Daughter// must sire and church //Her Fey Children//.
Ride long, ride on in the heat of the sun. I'll sing you //The Death of The Fortunate One//. [[next>|new days]]
[[<back|phantom images]]
He places the belt, looped through its buckle, over her left wrist. The other end of the impromptu leash he wraps around his right wrist to hold tightly in a fist. Kristin winces uncertainly as the loop tightens, but accepts the bond as together they gauge the best path toward the tunnel adit.
A man and woman are passing by, pushing a supermarket shopping cart loaded with clothing and assorted gear. Bruised boxes and fraying plastic bags strain to retain these few remaining possessions. in the toddler seat a young girl perches happily; her legs clack in persistent rhythm, mimicking cart wheel chatter against the pavement. Recognizing him from teleview, the girl laughs and waves delight across her parents' shoulders, back toward the object of her discovery, “Look, Mamma, it’s Grasshopper!”
Neither parent pays any attention; they press on into shadows fallen just before the entrance. To Kristin the child’s bright joy seems especially damning of their unfolding plight, but Dooley pays no attention to his young fan. Then, again, he has not much noticed fans since the untimely death of his partner, her brother, Bill.
[[next>|careful about tomorrow]]
[[<back|crash with me]]
Gradually the throng eases into a more leisurely pace as the avenue widens out beyond the rampway bottlenecks. Grasshopper is only mildly curious at the grim wariness seen among his fellow travelers. So many details and features of landscape to drink in, to opine loudly about. He is sorry the singing has ceased. Occasionally he tries to kick it up again by whistling a cheery little melody. But the crowd seems to have fallen back into their earlier surliness. Oh, well . . . Ants.
He overhears another remark about someone being insane. Looking intently about, he peers closely into several faces, but is unable to identify the poor unfortunate.
While he has not found the lunatic traveling among them, he does like the sound of the accusation. “Looooo-naaaa-tick!” He rolls it about on his tongue, feeling the extruding puissance of its phonemes flattening up against the roof of his mouth. He squeezes out hamburger patties of squeakey glee into sibilant whispers, “Innnnnn-saaaaannnne.”
Ant’s Sister grows even more distant. She fell silent as they left the tunnel. Finally she sighs, rubs her chafed wrist pensively and fastens her ripped blouse as best she may by its remaining buttons. But her silence is ruthless. She totally ignores him.
Grasshopper suspects her of playing a little game with him, with them all. She is like that, a melodrama of shock and trauma because she doesn't want to whistle. Or doesn't know how. He clucks absently at the transparency of her mute ploy. She only glances at him dumbly and picks up her pace.
Skipping along to keep up, Grasshopper works through //Three Little Fishes// but is unable to decide what the little fishes did once they “famm and famm all over the dam.” The iLink does not detect a maxnet signal so cannot retrieve the info online. The little fishes fimm off into rescinded limbos of flash memory as he hustles to remain abreast with Ant’s Sister. But she still refuses to acknowledge him.
Off to the right, on a gentle incline of an overgrown embankment that sweeps out and downward to meet another plunging slope, Grasshopper sees a number of soldiers sprawled in a shallow hollow, languishing in warm sunlight. Most of them carry, or have lying available nearby, shepherd staves: long sturdy but flexible poles made of synthetic fiber polymers, at one end of which is a variable high-voltage prod capable of stunning a horse, if need be. A well trained platoon of so-equipped crowd handlers can dissuade and direct even the most unruly mob.
Hovering, then darting suddenly to assume new vantage above and along the evacuation route, are several remotely controlled usher drones bearing teleview cameras that permit remote monitoring of the progress of evacuation. Usher drones also are equipped with crowd control measures. High-voltage ion-discharge pellets can ionize a directed channel of air to permit discharge into a target of a high-voltage bolt equally as vicious as delivered by the manual shepherd staves. Usher drones also can carry a range of behavioral gases to invoke a spectrum variety of nausea, fear, or good cheer in a malingering crowd. Pepper guns can embed urgently burning pellets of capsicum to distract and deter mischief-makers.
Nearby another pair tinker with a large automatic rifle. Occasionally one glances up to disinterestedly survey the scattered passing of multitudes. Grasshopper waves cheerily and speculates about a picnic inviting armed Ants. “Maybe they're //Soldier Ants//,” he speculates aloud, “with enough heavy artillery to take over the picnic . . . r e v o l u u u u t i o n!”
Kristin pretends not to hear him. She neither glances toward the soldiers nor acknowledges Dooley’s enthusiasm. She hates his berserk manner. She hates that she has no idea where they are going nor how they will get there. She hates that Ira Crown can organize soldiers to keep them on the freeway, but does not provide sufficient transport to move them en masse to Relocation Centers. She hates that Dooley keeps calling her Sister. She hates that she is certain of very little but what is in the backpack and already it seems both too much to carry and too little to sustain. She hates that her feet are aching and that they still have a very long way to go.
[[next>|the real thing]]
[[<back|sing with me]]
Dooley leads along the tunnel wall to her right. They are shoved violently against it and occasionally rebuffed just as roughly by cursing figures loitering in the darkness. She steps on someone’s foot and a powerful blow sends her reeling against Dooley. Someone in the crowd pushes back and both are buffeted back against concrete wall. For a moment they are trapped, unable to find an opening in the crush of bodies coursing by. She recalls once being caught by a rip tide while swimming in the ocean, of being sucked into a swirling blackness of airless desperation. Kristin feels a whimper rise spontaneously in her throat. “Peter, let’s go back. Please.”
He does not answer.
Except for occasional yells and angry grunts, amid plaintive cries of children, the darkness is oddly quiet. An abrading rhythm of feet striding pavement seems more like a pulsing fog than sound. Noises echo precariously in underground twilight to disperse clues of origins and tease any grasp of dimension or direction. Inexorable press lends but one sensible direction, onward: its rhythm and pace of irresistable movement squelches any resolve to go back. Even if he gives in to her plea, they are unable to travel any direction but forward.
At times, stumbling among foul encounters and aggravated complaints, she thinks she can see figures moving across an immense stage of secret illumination. At other times she is trapped in a packet smallness of a closet peopled with fellow aliens. Her eyes open and close involuntarily. They care not whether such darkness is inward or without. The same fear permeates all.
From somewhere in the distance a thin pencil of red light erupts to sweep the dimness. It searches briefly, hovers to paint a tiny dot of red on her breast bone, just below her chin, and then disappears. She remembers a director once using a tiny laser pointer as baton to conduct her movements in a commercial she was shooting. Who was pointing at her? Why?
Again, the sliver of red tags her chest.
From above, on an elevated maintenance catwalk, a hand brushes her hair, takes an ample handful and pulls up hard, snatching her painfully onto her tiptoes. Another groping pair grabs at her shoulders, then reaches under her armpits and lifts her from the pavement. She hears male voices from above, grunting and hurrying the effort. More grunts, as more hands join the abduction, moving across her body in a nightmare of rampant violation. She feels herself abruptly lifted upward and flails ineffectually. In panic she is lifted toward coarsely whispered complaints of male voices now yelling.
“Peter!” she shrieks. A hand chokes at her throat while bruising fingers dig into her armpits. Others take hold of wads of her clothing. Another hand covers her mouth, crushing her lips tightly to keep her from biting. The belt leash scrapes and painfully binds her wrist. One of the hands slides along her arm to discover the strap. It probes and yanks angrily at the restraint. Excruciating spasms lance from her wrist up her arm. Her shoulder threatens dislocation. Someone above mutters, hissing exasperation, “Pull! She’s tied to somebody–give me your damn knife . . . .”
“Ants!” Dooley bellows accusation, “ Ants! I told you! I knew it would . . . get away, you goddamned bastards! Get away!”
[[next>|sudden light]]
[[<back|old days]]
"Run, Ants! Run! Scatter! Shatter! Splatter! Latter tatter!"
A lithe and slender young man bellows across converging streams of men, women and children. Most are afoot. Many push or pull slapdash conveyances weighed down by haphazard remnants of possessions tossed together on short notice. A few bicycles dart like sparrows among pedestrians indifferently avoiding collision or hindrance. Occasionally someone flashes a fingered rebuke or yells back into his hoarse cant: "Run. Run. Run. You built it . . . now it's falling on you! Fall! All! Appall! Folderol! Babel fable treble table, Mabel's able devil shovels revel . . . Ants pant slant rants . . .paint . . . faint . . . taint . . . saint . . . ain't . . . ." Burbled out of both rhyme and breath, he resorts to mutely aping those who cross his baleful eye.
His companion, Kristin Banner, looks wearily back to where he has taken his stand. He berates an anonymous throng trudging warily around him into the gaping channel of the Holland Tunnel. On a day such as this, among these distracted evacuees, Peter Dooley is just another oddity to be ignored or escaped.
They are leaving Manhattan Island. Along with countless others they have joined suddenly swelling exodus of Gotham Seaboard: Boston, New York, Philadelphia, Baltimore, DC. Teleview is rampant in threats and speculation of smuggled nuclear devices, of plagues unleashed, of booby-trapped bridges, of numbered days.
Brushing aside a stray lock of copper red hair from her green and canny eyes, Kristin awaits exhaustion ending his impromptu exhortation. She slips into refuge of a battered and abandoned security check booth. Scarred, metal-sheathed concrete pylons shield against the onrushing horde of pilgrims weighed down by all they might carry or haul along in their impromptu freight. Swarming physics of bouncing fleshly particles, they advance into darkened gape of the Tunnel. Occasional bicyclists dismount before the entrance and prepare to push their wheels along through the straited netherworld.
"We should have gotten bicycles while they were still available," she chides no one in particular.
Dooley does not hear, or pretends not to hear. Or does not care. He is staring edgily about. Eyes float as two bright blue corks, rimmed in wary white. They bob across the river of traffic. Each glance tosses blue darts from beneath his haloing wreath of long silver hair. Physically unimposing, in his early twenties, Dooley does not present any daunting obstacle. Like flotsam he is nudged and buffeted to where she waits. He stares vaguely toward her for a moment, then looks away, as if he can not quite recall how they met. He is making spitting sounds with his tongue. Nervous tics flicker at his eyes.
Kristin leans back against the booth. Her backpack, legacy of not too distant student days, settles onto a concrete ledge, relieving her shoulders of its burden: a few belongings and provisions she managed to hurriedly toss together as they anguished whether to get out now.
How many protein bars to . . . to wherever? Maybe Harrisburg? What then?
[[next>|phantom images]]
[[<back|sudden light]]
Slowly, rhythmic pulsing builds again, ushering them along as hysteria subsides and the crowd gradually closes ranks in surly, buzzing aftermath.
Eventually a dimness ahead rouses into dusty radiance. She can just make out the profile of his face fringed in faint glimmering. Beyond, a thickly massed throng of heads undulates slowly up and down like lily pads on a pond disturbed in the wake of a passing boat. Then she reckons that it is not the surrounding crowd swaying up and down. It's him! His head bobs and rocks slowly as he surges through an exaggerated tidal rising, falling, rising, falling . . . . She feels his arm, still strapped to hers, pull her along in pacing undulation.
“Pete, what are you doing?” she snaps. Annoyance strikes fear to spark exasperation. They move quickly toward gathering declarations of external light.
“Marching!” Grasshopper announces proudly, “just like in your song.” He glances down at her feet. His frown lightly rebukes her poor showing of cadence.
“Please don’t do that,” she begs.
Her right hand tugs at the buckle and manages to loosen the leather loop still holding her wrist. Rolling it into a tight spiral she tries to put the belt into his jacket pocket. But he takes it and begins threading it casually back through the loops of his trousers.
“I’ll walk like you, then,” Grasshopper teases. He glances again at her feet, gives a brisk little hop to synchronize their paces and strives up onto tiptoes where he minces along in caricature of her once-signature stride down //haute couture// runways.
“For we are marching to Pretoria, Pretoria, Pretoria . . . .” he screeches in a superciliously continental, quavering counter-tenor's falsetto. His torso swishes through turns calculated to usher buyers into a new season of fashion-mongering.
[[next>|crash with me]]
|>|<html><center><h1>~ Prologue ~</h1></center></html>|
|{{marginedImage{<<rollover owowglyph images/rings_big.png images/ringsag_big.png>>}}}|Think back to what once may have seemed a peaceful world. Or if–as am I–you're younger than a time before this //Third Regime//, [[just imagine|hallucinating telescopes]], if you can. No war. No insurrections. No riots. No exploding people or suspicious packages found abandoned in public places. No vagrant, crippled warriors beggaring lost honors. No worries, but for dread of un-cool or being dissed.|''~ Wade Penny ~''|
|~|Jason and Chloe thought they had problems then. Perhaps lovers must, once they glimpse beyond first amorous weldings of bliss. Kristin and Dooley were a wholly different case. Mirrored in their striving–tossed and skewed in advent of Grasshopper–were those of this entire planet. But no one pays attention to what really happens until //''now''// has long since past.|
|~|They all fled latter day throes of the New York, Philadelphia, Boston, DC megalopolis: the Gotham Seaboard. They, and unnumbered other refugees, trekked treacherous highways all the way, past failed rescues, past corrupt reparation and on up toward sanctuaries such as these West Virginia hills. I learned of them from my mother, Amelia, as she recounted days with my father, Eli Whitney Penny, lion of the fabled //Morningstar Militia//.|
|~|It's funny how past trials turn toward "good old days". Days don't age, but //''this''// does; //''this''// grows ever more complex in an expanding and burgeoning universe. And we're always in //''this''//, just //''now''//, remembering, comparing, anticipating, striving, suffering. How big is ''here''? How long ''now''? Sow the wind, reap the whirlwind. Ever more anxious even as hope reveals ever-blooming promise, //''Amazing Grace''// of new days, of the //''next world''// breaking . . . in ever-renewing //''love''//.|
|~|//''A world broken is not the One World. A way spoken is not the One Way.''//|
|>|<html><center><h1>Love . . . O ~ W ~ O ~ W</h1></center></html>|
[[next>|new days]]
[[<back|new days]]
Among ancient slatherings of graffiti flung across a far wall she glances across, but does not really read, a freshly sprayed legend: //''T''eleological ''H''ereafter-''E''nraptured ''I''nternational ''S''ectarian ''M''ovements give ''GOD headsup!''//.
An unlikely froth of human guises sway and play like bath water bubbles dancing at a drain. They pause, turn, then commit to the plunge. Beyond, from tunnel depths quaver echoes of shuffling footsteps, distraught children, shouts and curses of irate adults. Leery young crews, mostly male, saunter along. Gang signs flicker nervous fingers to troll tribal reassurances among reckless crowdings. They weigh favors and follies of diverse neighborhoods and boroughs. Caution watches for hints of companionable relief and blusters against yet unseen jeopardy.
How can this be happening?
A shimmering wash of luminous images, hardly visible in full daylight, plays spook games about Dooley's torso. Real bodies bump against his. The real bodies ignore, or do not notice, these encircling wraiths of //The Three Stooges//, //Buster Keaton//, and //Harold Lloyd// who taunt and rebut each intrusion into his spectrally squired body space. Flailing weakly, washed dim in the brilliant flare of late summer sunlight, the capering spectres go largely unseen.
Kristin grimaces impatience. She reaches across to curtly switch off his iLink limner. Its glowing holofield of swirling bufoonery dies.
"Will you stop jerking off that crap? We don't have many power paks left."
He ignores her scold and resumes his tirade against milling antagonism, shouting, "You think you can escape //Al Quidproquo//?"
"'Quid pro quo' . . . do you mean, 'Qaeda'?" Kristin puzzles aloud for clarification.
Dooly ignores her question to mount into raging glossalalia, "Jive hive wives strive live knives . . . bust rust just us lust . . . double rubble trouble bubble . . . ."
“Pete, I don’t like this . . . look at me. Pete! Peter! Look at me!” Her voice veers toward panic as it lifts above the din. She pounds his back with a fist, as if to save him from choking obstruction. A lightly fetid breeze swirls smoke and the powdery smell of charred concrete as crowds amble by, uncaring, unaffected.
Dooley snaps his head back and forth, bewildered to so suddenly return from reverie. She sees him fight an urge to switch on the iLink limner. Looking back at roiling columns of smoke rising in the distance he seems to be reconsidering or wondering or simply lost at sea. His head pivots to gaze distractedly at the tunnel maw . . . pondering options. After a long while he removes his belt and reaches for her left hand, “Put this on your arm.”
“But what . . .?”
“It’ll be dark in there.” His voice is mechanical, “This will help keep us from getting separated.”
[[next>|it's Grasshopper]]
config.macros.rollover = {};
config.macros.rollover.handler= function(place,macroName,params) {
if (params.length<3) return;
var name = params[0];
var img1 = params[1];
var img2 = params[2];
var url = (params.length==3) ? img2 : params[3];
var options = (params.length>=5) ? params[4] : "";
wikify("<html><a target = '_blank' href='"+url+"' onmouseout=\"document."+name+".src='"+img1+"'\" onmouseover=\"document."+name+".src='"+img2+"'\"> <img "+options+" name='"+name+"' src="+img1+"></a></html>",place)
}
[[<back|careful about tomorrow]]
Now Kristin is led by Peter Dooley–perhaps in some latter antic of //Ant and Grasshopper//–into lurching turmoil. Their wrists joined by his belt, they enter the tunnel. She tries to look back at faint veils of gray-green smoke rising above the pinnacled skyline but an urgent press of bodies shoves her forward into what seems an eternally receding hole. Pavement just before her falls nearly invisible as light quickly dies. Her feet have to find their own way through a clutter of dropped objects, disowned clothing, painfully encountered elbows and errantly tripping feet.
Stumbling over what may have been a corpse shutters her resolve. Slowly her eyes adjust to such scant illumination as is availed in a few fixtures still working overhead. She tries to suppress a new gasp of fear by softly intoning a song fragment learned among campfire rounds of a girlhood long ago,
"Sing with me, I’ll sing with you,
"And so we shall sing together,
"So we shall sing together . . . ."
[[next>|marching Ants]]
[[<back|marching Ants]]
A bright orange flash erupts about them. The iLink limner slams a stupendously rendered phantom fireball into the void. It boils seething fiery plumes up onto the walkway to envelope the now startled marauders. A sharply explosive iLink surround sound explodes across the rupturing darkness to reverberate in the tunnel echo chamber. Uproar and cacophany build explosively from harnessed energies of a suddenly screaming crowd, bolting in terror from the worst fears of the day.
In its sudden cinematic pleroma of light she sees five young men frozen as if jack-lighted, straining to free her from the hindering leash. Another man wears military-style light amplifying goggles. Standing off to the side, he has been coordinating and directing their efforts with a laser pointer.
Also vivid in still blossoming fireball image, Dooley’s eyes flare panicked damnation. Boiling up from fervid psychic depths, a hideously imagined raptor stalks amid fiery wraiths of hell's threat unleashed. The stunned abductors, now cowering as prey, in unison forget abduction and let go.
Kristin falls awkwardly back onto the pavement, pulling Dooley down on top of her. Again the limner erupts streaking plumes of 3D-imaged fire from which rocket-driven darts erupt to drive the gang in frantic retreat back toward the tunnel opening. Out of the subsiding fireball emerge pursuers to chase after now-comic miscreants suddenly scrambling for hasty exit: Buster Keaton, Harold Lloyd, Laurel and Hardy join the Keystone Cops in amazingly agile headlong pursuit down the catwalk. And they seem really pissed!
“A hand just reached down . . . and grabbed me,” Kristin sobs, “then another one picked me up. And another . . . .”
A wide swath of vacant pavement now surrounds them.They manage to roll over onto their feet and stagger to huddle up against the wall. For the first time, no one shoves or pummels them. A surround of saving, empty twilight remains open, yet still is edged in alarm and cries of protest that incite Dooley’s ongoing rant against abominable Ants.
Her ears still ringing from the explosive uproar, the men's startled outcries, and Dooley's caviling screech, Kristin can not make out what he is saying. It has something to do with “chance.” He repeats it over and over again in a spuming tirade that abuses her still belted wrist as he gesticulates wildly in the dark.
“What?” Kristin yells through competing floods of anger and fear.
“Ants . . .chance against Ants!” Grasshopper's voice is sharp and bitter. Harold Lloyd and Buster Keaton swagger back toward them ahead of a strutting troupe of Keystone cops, returned from avid chase. The slapstick chimeras all transmogrify into large cartoon Ants bearing stolen picnic booty. Grasshopper drags Kristin from the wall and begins to trot forward along tunnel. Somehow she stays on her feet and seems to gain hope in their sudden flight.
A wide margin still separates them from the crowd, warily fleeing threats of spectacular explosions. Now large cartoon Ants swarm past and surge even more insistently to push on ahead, parting the mass of human evacuees trying to get out of the way of this nightmare rampant among them.
The iLink ultracapacitor, depleted to its threshold minimum power level, automatically shuts down the limner. Platooned Ant spectres fade suddenly and Grasshopper's diatribe eases into rambling exhortations against any insult, real or imagined. Against what complaints he rails Kristin is uncertain, but it seems that Ants are to blame for misfortunes lately visited upon them all. Still yanked about by the leash during his wild gesticulations, she topples along to keep up as best she can. They move forward, it seems, only for lack of something better to do.
[[next>|new season]]
[[<back|lunatic among them]]
Up ahead, a narrow valley between two ramps spreads into a plain of their separation. Some of the passing crowd drift toward the inviting green, tempted by signs advertising a nearby shopping mall.
A minicopter arises suddenly from behind a hill. It hovers head-high a hundred paces beyond to block the wayward group trying to leave the highway. A swarm of usher drones are dispatched from behind the same rise. The smaller machines dart and flit about, dispersing quickly to cut off the intended path of escape. They waft about like oversized, cluster-laden dragonflies inspired by souls of border collies. The crowd recoils from threats of their airborne high-voltage catapults and pepper sprays. An acrid sample of nausea gas is pushed across the group by the rumbling wash of distant minicopter rotors.
A public address speaker pummels the air with an amplified midwestern accent that orders the crowd back onto the pavement and shoulders of the highway. Several soldiers farther off in the valley nonchalantly watch the aerial to ground confrontation. They do not move, but stretch to display staves, heavy truncheons or plastic shields in case they may be ordered to engage and repell a vagrant few back onto the official evacuation route.
Grasshopper is fascinated. He pauses while the vulturously hovering black machine beats the air with its rotors. It seems to dance and skim lightly on choreographed waftings that are answered in bouncing weeds and soldiers deploying beneath its sidling drift.
The usher drones dart and play to befuddle and intimidate vagrant defectors who look defiantly up, waving fists and middle-fingered salutes amid shouted protests. They are reluctant to give up on reaching the advertised mall. Farther back along the highway a gathering audience pauses to watch the outcome of the confrontation. A collective sigh hopes for delivery from pavement already grown dreary. A shopping center!
The faint staccato of a machine gun on board the minicopter burps puffs of powder smoke that quickly dissipate in the wash of rotor blades. A line is drawn through tracing puffs of dust in the turf beyond the defiant band, which pauses to reconsider. Slowly they pull back from the dotted boundary and disconsolately return to the freeway.
The distant soldiers relax back into their casual postures and scatter along the grassy slope. Among the chastened evacuees more than a few loudly damn Ira Crown as a son of a bitch who ought to be shot.
Grasshopper muses aloud that the cannon fire sounded faint. Maybe they were using rubber bullets and puffer cartridges. “Use the real thing!,” he yells to the departing minicopter, “Don’t let a bunch of spoilsports ruin the parade!”
[[next>|going nowhere]]