Vector Fields 3D is loading ...

Requires Javascript.
Vector Fields 3D - a reusable non-linear personal web notebook
----\n<html>\n<applet code="scivis.project.VectorFields3DApplet"\n height="680" width="480" archive="applet/SciVis.jar,applet/javaview.jar,applet/jvx.jar,applet/log4j.jar">\n </applet>\n</html>
[[StyleSheetAdjustments]]\n[[BrightText]]\n/* ==== blackout ==== */\n/*{{{*/\nbody\n { background-color:#000; }\n.menubox\n { background-color:#111; }\n.viewer\n { background-color:#111; border: 1px solid #999; -moz-border-radius:1em; padding:1em; }\n.header\n { background-image: none; background-color:transparent; color:#ccf; border:0; }\n.floatingPanel, .attachPanel, #importPanel, #exportPanel,\n { background: #eee; background-image: url('[[TexturesParchmentGray]]');}\n.floatingPanel a, .attachPanel a, #messageArea a, #importPanel a, #exportPanel a, #sidebarTabs .tabContents a,\n.floatingPanel .button, .attachPanel .button, #messageArea .button, #importPanel .button, #exportPanel .button, #sidebarTabs .tabContents .button,\n.floatingPanel .tiddlyLinkExisting, .attachPanel .tiddlyLinkExisting, #messageArea .tiddlyLinkExisting, #importPanel .tiddlyLinkExisting, #exportPanel .tiddlyLinkExisting, #sidebarTabs .tabContents .tiddlyLinkExisting\n { color:#009; }\n.siteMenu .floatingPanel, #messageArea \n { background: #eee; }\n.tiddlyCard { background:#ffd; }\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 { background: #666; color:#fff; }\n#sidebarTabs .tabContents\n { background-color:#111; color:#fff; }\n#sidebarTabs .tabContents a, #sidebarTabs .tabContents .button, #sidebarTabs .tabContents .tiddlyLinkExisting\n { color:#99f; }\n/*}}}*/
// // add TiddlyTools 'brand' to shadow SiteTitle (default for TiddlyTools starter documents)\n//{{{\n//config.shadowTiddlers.SiteTitle += " {{medium{with [[TiddlyTools |http://www.TiddlyTools.com]] extensions}}}\sn";\n//}}}\n\n// // add shadows for common TiddlyTools default tiddlers used in starter documents\n//{{{\nconfig.shadowTiddlers.Welcome = "[[Welcome]]";\nconfig.shadowTiddlers.About = "[[About]]";\nconfig.shadowTiddlers.Download = "[[Download]]";\nconfig.shadowTiddlers.Contact = "[[Contact]]";\n//}}}\n\n// // force no animation\n//{{{\nconfig.options.chkAnimate=false;\n//}}}\n\n// // restrict editor height\n//{{{\nconfig.options.txtMaxEditRows=15;\n//}}}\n\n// // re-label default text for some UI elements\n//{{{\nconfig.commands.permalink.text="link"; // shortened from "permalink" to save space :-)\n//}}}
// // {{small{\n// // This tweak adds URL paramifier handlers for "hide:elementID" and "show:elementID". This is useful for forcing the display state of specific TW page elements, without requiring StyleSheet changes. For example, if your customized StyleSheet hides the sidebar (useful for 'read only' published documents), you can force it to display when you need to edit the document by adding {{{#show:sidebar}}} to the document URL. Alternatively, you might want to supress non-tiddler content when printing by hiding the sidebars and header (e.g., {{{#hide:mainMenu hide:sidebar hide:header}}})\n//{{{\nif (config.paramifiers) { // check for backward-compatibility\n config.paramifiers.hide = { onstart: function(id) { var e=document.getElementById(id); if (e) e.style.display="none"; } };\n config.paramifiers.show = { onstart: function(id) { var e=document.getElementById(id); if (e) e.style.display="block"; } };\n}\n//}}}\n\n// // This HIJACK tweak pre-processes source content to convert "backslash-newline" into {{{<<br>>>}}} before wikify(), so that literal newlines can be embedded in line-mode wiki syntax (e.g., tables, bullets, etc.). Based on a suggestion from Sitaram Chamarty.\n//{{{\nwindow.coreWikify = wikify;\nwindow.wikify = function(source,output,highlightRegExp,tiddler)\n{\n if (source) source=source.replace(/\s\s\sn\ss*/mg,"<<br>>");\n coreWikify(source,output,highlightRegExp,tiddler)\n}\n//}}}\n\n// // This tweak adds a check for any tiddlers that are being actively edited, so that accidental page transitions don't discard tiddler content that has been entered but not yet saved to the 'store' (i.e., by pressing 'done').\n//{{{\nconfig.messages.editing_confirmExit ="There are currently open tiddler editors that may contain unsaved changes.\snIf you continue you will lose those changes";\nfunction confirmExit()\n{\n hadConfirmExit = true;\n if(store && store.isDirty && store.isDirty())\n return config.messages.confirmExit;\n // added by ELS\n var editing=false;\n story.forEachTiddler(function(title,element) { if(element.getAttribute("dirty")=="true") editing=true; });\n if (editing) return config.messages.editing_confirmExit;\n}\n//}}}\n\n// // When a slider is opened/closed with animation enabled, the opacity/alphafilter styles are incrementally adjusted to create a "fade-in/fade-out" effect. However, this effect seems to render incredibly slowly on FireFox, and even slower when the background image is a complex JPG photo image, making animation impractical to use. This tweak provides an option to disable the opacity/alphafilter handling, while leaving the 'incremental height' animation intact. The resulting increase in performance makes it possible to leave the animation enabled so that you can benefit from the visual cues it provides.\n//{{{\nif (!config.options.chkEnableFade) config.options.chkEnableFade=false; // ELS: added conditional option for fade-in/fade-out\nSlider.prototype.tick = function()\n{\n this.progress += this.step;\n if(this.progress < 0 || this.progress > 1)\n {\n this.stop();\n return false;\n }\n else\n {\n var f = Animator.slowInSlowOut(this.progress);\n var h = this.realHeight * f;\n this.element.style.height = h + "px";\n if (config.options.chkEnableFade) // ELS: added conditional option for fade-in/fade-out\n {\n this.element.style.opacity = f;\n this.element.style.filter = "alpha(opacity:" + f * 100 +")";\n }\n return true;\n }\n}\n//}}}\n// // }}}
[[Vector Fields 3D]]
<script>\n if (!story.findContainingTiddler(place)) return;\n var t=story.findContainingTiddler(place); // get the tiddler element\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"viewer")) t.ondblclick=null; // disable double-click\n</script>
[[StyleSheetAdjustments]]\n[[BrightText]]\n/* ==== Edge of Night ==== */\n/*{{{*/\nbody\n { background-image: url('[[Edge of Night Background]]'); background-color:#113; }\n.menubox\n { background-image: none; background-color: #002; }\n#mainMenu .menubox\n { background-image: url('[[Edge of Night Background]]'); }\n.viewer\n { background-image: url('[[TexturesMarbleBlack]]'); background-color:#111; border: 1px solid #999; -moz-border-radius:1em; padding:1em; }\n.header\n { background-image: none; background-color:transparent; color:#ccf; border-bottom:3px solid #036; }\n#siteSubtitle\n { color:#0c0; }\n.floatingPanel, .attachPanel, #importPanel, #exportPanel, .tiddlyCard\n { background: #eee; background-image: url('[[TexturesParchmentGray]]');}\n.floatingPanel a, .attachPanel a, #importPanel a, #exportPanel a, \n.floatingPanel .button, .attachPanel .button, #importPanel .button, #exportPanel .button,\n.floatingPanel .tiddlyLinkExisting, .attachPanel .tiddlyLinkExisting, #importPanel .tiddlyLinkExisting, #exportPanel .tiddlyLinkExisting,\n { color:#009; }\n.siteMenu .floatingPanel, #messageArea \n { background: #eef; }\n.tiddlyCard\n { background: #eee; }\n.groupbox { background:#ddf; }\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 { background: #666; color:#fff; }\n\n#sidebarTabs .tabContents \n { background-image:none; background-color:#113; color:#fff; }\n#sidebarTabs .tabContents a, #sidebarTabs .tabContents .button, #sidebarTabs .tabContents .tiddlyLinkExisting\n { color:#99f; }\n/*}}}*/
| source file|{{{...images\ssunset.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[images/sunset.jpg|images/sunset.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|Edge of Night Background]] or [img[tooltip|Edge of Night Background][link]]}}}\n[img[tooltip|Edge of Night Background]]\n<<<\n
----\nVektorfelder bezeichnen hier eine Ansammlung von Vektoren im Raum, welche durch ein Potential/Zentrum ihre Ausrichtung erfahren. Diese Potentiale können verschiedene Eigenschaften besitzen, wie z.B. einen Wirkungsradius und einen bestimmten Typ (z.B. Rotation). Das Vektorfeld für jedes Potential kann wiederum entweder ein Geschwindigkeits- (velocity) oder Kraftfeld (force) sein, wobei sich die in dieses Feld eintretenden Teilchen dementsprechend bewegen.
/***\n|''Name:''|HTMLFormattingPlugin|\n|''Source:''|http://www.TiddlyTools.com/#HTMLFormattingPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nThe shorthand Wiki-style formatting syntax of ~TiddlyWiki is very convenient and enables most content to be reasonably well presented. However, there are times when tried-and-true HTML formatting syntax allows more more precise control of the content display.\n\nWhen HTML formatting syntax is embedded within a tiddler (in between {{{<}}}{{{html>}}} and {{{<}}}{{{/html>}}} markers) TiddlyWiki passes this content to the browser for processing as 'native' HTML. However, TiddlyWiki does not also process the HTML source content for any embedded wiki-formatting syntax it may contain. This means that while you can use HTML formatted content, you cannot mix wiki-formatted content within the HTML formatting.\n!!!!!Usage\n<<<\nThe ~HTMLFormatting plugin allows you to freely ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.\n\nWhen a tiddler is about to be displayed, ~TiddlyWiki looks for tiddler content contained within ''<{{{html}}}>'' and ''<{{{/html}}}>'' HTML tags. This content (if any) is passed directly to the browser's internal "rendering engine" to process as ~HTML-formatted content. Once the HTML formatting has been processed, all the pieces of text occuring in between the HTML formatting are then processed by the ~TiddlyWiki rendering engine, one piece at a time, so that normal wiki-style formatting can be applied to the individual text pieces.\n<<<\n!!!!!Line breaks\n<<<\nOne major difference between Wiki formatting and HTML formatting is how "line breaks" are processed. Wiki formatting treats all line breaks as literal content to be displayed //as-is//. However, because HTML normally ignores line breaks and actually processes them as simple "word separators" instead, many people who write HTML include extra line breaks in their documents, just to make the "source code" easier to read.\n\nEven though you can use HTML tags within your tiddler content, the default treatment for line breaks still follows the Wiki-style rule (i.e., all new lines are displayed as-is). When adding HTML content to a tiddler (especially if you cut-and-paste it from another web page), you should take care to avoid adding extra line breaks to the text.\n\nIf removing all the extra line breaks from your HTML content would be a big hassle, you can quickly //override the default Wiki-style line break rule// so that the line breaks use the standard HTML rules instead. Placing a ''<{{{hide linebreaks}}}>'' tag within the tiddler's HTML content changes all line breaks to spaces before rendering the content, so that the literal line breaks will be processed as simple word-breaks instead.\n\nNote: this does //not// alter the actual tiddler content that is stored in the document, just the manner in which it is displayed. Any line breaks contained in the tiddler will still be there when you edit its content. Also, to include a literal line break when the ''<{{{hide linebreaks}}}>'' tag is present, you will need to use a ''<{{{br}}}>'' or ''<{{{p}}}>'' HTML tag instead of simply typing a line break.\n<<<\n!!!!!How it works\n<<<\nThe TW core support for HTML does not let you put ANY wiki-style syntax (including TW macros) *inside* the {{{<html>...</html>}}} block. Everything between {{{<html>}}} and {{{</html>}}} is handed to the browser for processing and that is it. Fortunately, this plugin ADDS the ability to let you put wiki-syntax (including macros) inside the html. It does this by first giving the tiddler source content to the browser to process the HTML, and then handling any wiki-based syntax that remains afterward.\n\nHowever, not all wiki syntax can be safely passed through the browser's parser. Specifically, any TW macros inside the HTML will get 'eaten' by the browser since the macro brackets, {{{<<...>>}}} use the "<" and ">" that normally delimit the HTML/XML syntax recognized by the browser's parser.\n\nSimilarly, you can't use InlineJavascript within the HTML because the {{{<script>...</script>}}} syntax will also be consumed by the browser and there will be nothing left to process afterward. Note: unfortunately, even though the browser removes the {{{<script>...</script>}}} sequence, it doesn't actually execute the embedded javascript code that it removes, so any scripts contained inside of <html> blocks in TW are currently being ignored. :-(\n\nAs a work-around to allow TW *macros* (but not inline scripts) to exist inside of <html> formatted blocks of content, the plugin first converts the {{{<<}}} and {{{>>}}} into "%%(" and ")%%", making them "indigestible" so they can pass unchanged through the belly of the beast (the browser's HTML parser).\n\nAfter the browser has done its job, the wiki syntax sequences (including the "undigested" macros) are contained in #text nodes in the browser-generated DOM elements. The plugin then recursively locates and processes each #text node, converts the %%( and )%% back into {{{<<}}} and {{{>>}}}, passes the result to wikify() for further rendering of the wiki-formatted syntax into a containing SPAN that replaces the previous #text node. At the end of this process, none of the encoded %%( and )%% sequences remain in the rendered tiddler output.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''HTMLFormattingPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for HTMLFormatting handling^^\n<<<\n!!!!!Revision History\n<<<\n''2006.09.10 [2.1.4]'' update formatter for 2.1 compatibility (use this.lookaheadRegExp instead of temp variable)\n''2006.05.28 [2.1.3]'' in wikifyTextNodes(), decode the *value* of TEXTAREA nodes, but don't wikify() its children. (thanks to "ayj" for bug report)\n''2006.02.19 [2.1.2]'' in wikifyTextNodes(), put SPAN element into tiddler DOM (replacing text node), BEFORE wikifying the text content. This ensures that the 'place' passed to any macros is correctly defined when the macro is evaluated, so that calls to story.findContainingTiddler(place) will work as expected. (Thanks for bug report from GeoffSlocock)\n''2006.02.05 [2.1.1]'' wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2005.12.01 [2.1.0]'' don't wikify #TEXT nodes inside SELECT and TEXTAREA elements\n''2005.11.06 [2.0.1]'' code cleanup\n''2005.10.31 [2.0.0]'' replaced hijack wikify() with hijack config.formatters["html"] and simplified recursive WikifyTextNodes() code\n''2005.10.09 [1.0.2]'' combined documentation and code into a single tiddler\n''2005.08.05 [1.0.1]'' moved HTML and CSS definitions into plugin code instead of using separate tiddlers\n''2005.07.26 [1.0.1]'' Re-released as a plugin. Added <{{{html}}}>...</{{{nohtml}}}> and <{{{hide newlines}}}> handling\n''2005.07.20 [1.0.0]'' Initial Release (as code adaptation)\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.HTMLFormatting = {major: 2, minor: 1, revision: 4, date: new Date(2006,9,10)};\n\n// find the formatter for HTML and replace the handler\ninitHTMLFormatter();\nfunction initHTMLFormatter()\n{\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);\n if (i<config.formatters.length) config.formatters[i].handler=function(w) {\n if (!this.lookaheadRegExp) // fixup for TW2.0.x\n this.lookaheadRegExp = new RegExp(this.lookahead,"mg");\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var html=lookaheadMatch[1];\n // optionally suppress wiki-style literal handling of newlines\n // strip any carriage returns added by Internet Explorer's textarea edit field\n // encode newlines as \sn so Internet Explorer's HTML parser won't eat them\n // encode macro brackets (<< and >>) so HTML parser won't eat them\n if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(regexpNewLine,' ');\n html=html.replace(regexpCarriageReturn,'');\n html=html.replace(regexpNewLine,'\s\sn');\n html=html.replace(/<</g,'%%(').replace(/>>/g,')%%');\n // create span to hold HTML\n // parse HTML and normalize the results\n // walk node tree and call wikify() on each text node\n var e = createTiddlyElement(w.output,"span");\n e.innerHTML=html;\n e.normalize(); \n wikifyTextNodes(e);\n // advance to next parse position\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n}\n\n// wikify text nodes remaining after HTML content is processed (pre-order recursion)\nfunction wikifyTextNodes(theNode)\n{\n // textarea node doesn't get wikified, just decoded... \n if (theNode.nodeName.toLowerCase()=='textarea')\n theNode.value=theNode.value.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n else for (var i=0;i<theNode.childNodes.length;i++) {\n var theChild=theNode.childNodes.item(i);\n if (theChild.nodeName.toLowerCase()=='option') continue;\n if (theChild.nodeName.toLowerCase()=='select') continue;\n wikifyTextNodes(theChild);\n if (theChild.nodeName=='#text') {\n var txt=theChild.nodeValue;\n // decode macro brackets and newlines\n txt=txt.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n // replace text node with wikified() span\n var newNode=createTiddlyElement(null,"span");\n theNode.replaceChild(newNode,theChild);\n wikify(txt,newNode);\n }\n }\n}\n//}}}
/***\n|''Name:''|InlineJavascriptPlugin|\n|''Source:''|http://www.TiddlyTools.com/#InlineJavascriptPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nInsert Javascript executable code directly into your tiddler content. Lets you ''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.\n!!!!!Usage\n<<<\nWhen 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.\n\n''Deferred execution from an 'onClick' link''\nBy 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.\n\n''External script source files:''\nYou 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.\n\n''Display script source in tiddler output''\nBy 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.\n\n''Defining javascript functions and libraries:''\nAlthough 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).\n\nTo 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.\n\nSince 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.\n\n''Creating dynamic tiddler content''\nAn 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:\n* 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.\n* 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.\n* 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.\n\nIf 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")}}}.\n\n//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.//\n\n''Accessing the ~TiddlyWiki DOM''\nThe 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.\n\nAccess to this DOM element allows you to create scripts that can:\n* vary their actions based upon the specific location in which they are embedded\n* access 'tiddler-relative' information (use findContainingTiddler(place))\n* perform direct DOM manipulations (when returning wikified text is not enough)\n<<<\n!!!!!Examples\n<<<\nan "alert" message box:\n><script show>\n alert('InlineJavascriptPlugin: this is a demonstration message');\n</script>\ndynamic output:\n><script show>\n return (new Date()).toString();\n</script>\nwikified dynamic output:\n><script show>\n return "link to current user: [["+config.options.txtUserName+"]]";\n</script>\ndynamic output using 'place' to get size information for current tiddler:\n><script show>\n if (!window.story) window.story=window;\n var title=story.findContainingTiddler(place).id.substr(7);\n return title+" is using "+store.getTiddlerText(title).length+" bytes";\n</script>\ncreating an 'onclick' button/link that runs a script:\n><script label="click here" show>\n if (!window.story) window.story=window;\n alert("Hello World!\snlinktext='"+place.firstChild.data+"'\sntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");\n</script>\nloading a script from a source url:\n>http://www.TiddlyTools.com/demo.js contains:\n>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}\n>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}\n><script src="demo.js" show>\n return "loading demo.js..."\n</script>\n><script label="click to execute demo() function" show>\n demo()\n</script>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''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.\n''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\n''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output\n''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.\n''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\n''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\n''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax\n''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access \n''2005.11.08 [1.0.0]'' initial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.inlineJavascript= {major: 1, minor: 5, revision: 2, date: new Date(2006,10,16)};\n\nconfig.formatters.push( {\n name: "inlineJavascript",\n match: "\s\s<script",\n lookahead: "\s\s<script(?: src=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?(?: label=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?( show)?\s\s>((?:.|\s\sn)*?)\s\s</script\s\s>",\n\n handler: function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n if (lookaheadMatch[1]) { // load a script library\n // make script tag, set src, add to body to execute, then remove for cleanup\n var script = document.createElement("script"); script.src = lookaheadMatch[1];\n document.body.appendChild(script); document.body.removeChild(script);\n }\n if (lookaheadMatch[4]) { // there is script code\n if (lookaheadMatch[3]) // show inline script code in tiddler output\n wikify("{{{\sn"+lookaheadMatch[0]+"\sn}}}\sn",w.output);\n if (lookaheadMatch[2]) { // create a link to an 'onclick' script\n // add a link, define click handler, save code in link (pass 'place'), set link attributes\n var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);\n link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}\n link.code="function _out(place){"+lookaheadMatch[4]+"\sn};_out(this);"\n link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";\n }\n else { // run inline script code\n var code="function _out(place){"+lookaheadMatch[4]+"\sn};_out(w.output);"\n code=code.replace(/document.write\s(/gi,'place.innerHTML+=(');\n try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }\n if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);\n }\n }\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n} )\n//}}}\n
<html>\n<a href="./javadoc/index.html">JavaDoc</a>\n</html>
----\nLinks zu verwendeten Inhalten:\n\n\n* [[Vorlesungsseite|http://geom.mi.fu-berlin.de/teaching/scivis06/index.html]]\n* [[Vektorfelder (Wikipedia)|http://de.wikipedia.org/wiki/Vektorfeld]]\n* [[Runge-Kutta (Wikipedia)|http://de.wikipedia.org/wiki/Runge-Kutta-Verfahren]]\n* [[Runge-Kutta (Uni Kiel)|http://www.ieap.uni-kiel.de/plasma/ag-piel/p3m/kap6/kap6.html]]\n* [[JavaView|http://www.javaview.de/]]\n* [[Vorgabeapplet|http://www.falstad.com/vector3d/]]
<!--{{{-->\n<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>\n<!--}}}-->\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>Vector Fields 3D</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
/***\n|''Name:''|NestedSlidersPlugin|\n|''Source:''|http://www.TiddlyTools.com/#NestedSlidersPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''\n\nYou 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.\n\nFor more details, please click on a section headline below:\n++++!!!!![Configuration]>\nDebugging messages for 'lazy sliders' deferred rendering:\n<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering\n<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered\n===\n++++!!!!![Usage]>\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater (with optional CSS width value)\n*mouse auto rollover\n*custom class/label/tooltip/accesskey\n*automatic blockquote\n*deferred rendering\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip]}}}>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^\nmarks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^\n* {{{(cookiename)}}}^^\nsaves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^\n* {{{!}}} through {{{!!!!!}}}^^\ndisplays the slider label using a formatted headline (Hn) style instead of a button/link style^^\n* {{{^width^}}} (or just {{{^}}})^^\nmakes 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)^^\n* {{{*}}}^^\nautomatically opens/closes slider on "rollover" as well as when clicked^^\n* {{{{{class{[label=key|tooltip]}}}}}}^^\nuses 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.^^\n* {{{">"}}} //(without the quotes)//^^\nautomatically adds blockquote formatting to slider content^^\n* {{{"..."}}} //(without the quotes)//^^\ndefers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^\n\n//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.//\n===\n++++!!!!![Examples]>\nsimple in-line slider: \n{{{\n+++\n content\n===\n}}}\n+++\n content\n===\n----\nuse a custom label and tooltip: \n{{{\n+++[label|tooltip]\n content\n===\n}}}\n+++[label|tooltip]\n content\n===\n----\ncontent automatically blockquoted: \n{{{\n+++>\n content\n===\n}}}\n+++>\n content\n===\n----\nall options combined //(default open, cookie, heading, sized floater, rollover, class, label/tooltip/key, blockquoted, deferred)//\n{{{\n++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...\n content\n===\n}}}\n++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...\n content\n===\n----\ncomplex nesting example:\n{{{\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n}}}\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n===\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.07.28 - 2.0.0'' added custom class syntax around label/tip/key syntax: {{{{{classname{[label=key|tip]}}}}}}\n''2006.07.25 - 1.9.3'' when parsing slider, save default open/closed state in button element, then in onClickNestedSlider(), if slider state matches saved default, instead of saving cookie, delete it. Significantly reduces the 'cookie overhead' when default slider states are used.\n''2006.06.29 - 1.9.2'' in onClickNestedSlider(), when setting focus to first control, skip over type="hidden"\n''2006.06.22 - 1.9.1'' added panel.defaultPanelWidth to save requested panel width, even after resizing has changed the style value\n''2006.05.11 - 1.9.0'' added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label\n''2006.05.09 - 1.8.0'' in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element\n''2006.04.24 - 1.7.8'' in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position\n''2006.02.16 - 1.7.7'' corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie\n''2006.02.15 - 1.7.6'' in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)\n''2006.02.04 - 1.7.5'' add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2006.01.18 - 1.7.4'' only define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.\n''2006.01.16 - 1.7.3'' added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.\n''2006.01.16 - 1.7.2'' added button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n''2006.01.14 - 1.7.1'' added optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.\n''2006.01.14 - 1.7.0'' added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)\n''2006.01.03 - 1.6.2'' When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)\n''2005.12.15 - 1.6.1'' added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders\nremoved checkbox option for 'global' application of lazy sliders\n''2005.11.25 - 1.6.0'' added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)\n''2005.11.21 - 1.5.1'' revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.\n''2005.11.20 - 1.5.0'' added (cookiename) syntax for optional tracking and restoring of slider open/close state\n''2005.11.11 - 1.4.0'' added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style\n''2005.11.07 - 1.3.0'' removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other\nformatting extensions) and simplified/improved regular expressions to trim multiple excess newlines\n''2005.11.05 - 1.2.1'' changed name to NestedSlidersPlugin\nmore documentation\n''2005.11.04 - 1.2.0'' added alternative character-mode syntax {{{(((}}} and {{{)))}}}\ntweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax\n''2005.11.03 - 1.1.1'' fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used\ncode cleanup, added documentation\n''2005.11.03 - 1.1.0'' changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}\nchanged name to EasySlidersPlugin\n''2005.11.03 - 1.0.0'' initial public release\n<<<\n!!!!!Credits\n<<<\nThis feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.nestedSliders = {major: 2, minor: 0, revision: 0, date: new Date(2006,7,28)};\n//}}}\n\n//{{{\n// options for deferred rendering of sliders that are not initially displayed\nif (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;\nif (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;\n\n// default styles for 'floating' class\nsetStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \s\n background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "nestedSliders",\n match: "\s\sn?\s\s+{3}",\n terminator: "\s\ss*\s\s={3}\s\sn?",\n lookahead: "\s\sn?\s\s+{3}(\s\s+)?(\s\s([^\s\s)]*\s\s))?(\s\s!*)?(\s\s^(?:[^\s\s^\s\s*\s\s[\s\s>]*\s\s^)?)?(\s\s*)?(?:\s\s{\s\s{([\s\sw]+[\s\ss\s\sw]*)\s\s{)?(\s\s[[^\s\s]]*\s\s])?(?:\s\s}{3})?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\n {\n // defopen=lookaheadMatch[1]\n // cookiename=lookaheadMatch[2]\n // header=lookaheadMatch[3]\n // panelwidth=lookaheadMatch[4]\n // rollover=lookaheadMatch[5]\n // class=lookaheadMatch[6]\n // label=lookaheadMatch[7]\n // blockquote=lookaheadMatch[8]\n // deferred=lookaheadMatch[9]\n\n lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie, no accesskey\n var show="none"; var title=">"; var tooltip="show"; var cookie=""; var key="";\n\n // extra "+", default to open\n if (lookaheadMatch[1])\n { show="block"; title="<"; tooltip="hide"; }\n\n // cookie, use saved open/closed state\n if (lookaheadMatch[2]) {\n cookie=lookaheadMatch[2].trim().slice(1,-1);\n cookie="chkSlider"+cookie;\n if (config.options[cookie]==undefined)\n { config.options[cookie] = (show=="block") }\n if (config.options[cookie])\n { show="block"; title="<"; tooltip="hide"; }\n else\n { show="none"; title=">"; tooltip="show"; }\n }\n\n // parse custom label/tooltip/accesskey: [label=X|tooltip]\n if (lookaheadMatch[7]) {\n title = lookaheadMatch[7].trim().slice(1,-1);\n var pos=title.indexOf("|");\n if (pos!=-1) { tooltip = title.substr(pos+1,title.length); title=title.substr(0,pos); }\n if (title.substr(title.length-2,1)=="=") { key=title.substr(title.length-1,1); title=title.slice(0,-2); }\n if (pos==-1) tooltip += " "+title; // default tooltip: "show/hide <title>"\n }\n\n // create the button\n if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link\n var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;\n var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);\n btn.onclick=onClickNestedSlider;\n btn.setAttribute("href","javascript:;");\n btn.setAttribute("title",tooltip);\n }\n else\n var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);\n\n // set extra button attributes\n btn.sliderCookie = cookie; // save the cookiename (if any) in the button object\n btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)\n btn.keyparam=key; // save the access key letter ("" if none)\n if (key.length) {\n btn.setAttribute("accessKey",key); // init access key\n btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus\n }\n\n // "non-click" MouseOver open/close slider\n if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panel=createTiddlyElement(place,"div",null,panelClass,null);\n panel.button = btn; // so the slider panel know which button it belongs to\n panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):""; // save requested panel size\n btn.sliderPanel=panel;\n panel.style.display = show;\n panel.style.width=panel.defaultPanelWidth;\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if ((show=="block")||!lookaheadMatch[9]) {\n // render now if panel is supposed to be shown or NOT deferred rendering\n w.subWikify(lookaheadMatch[8]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align slider/floater position with button\n adjustSliderPos(place,btn,panel,panelClass);\n }\n else {\n var src = w.source.substr(w.nextMatch);\n var endpos=findMatchingDelimiter(src,"+++","===");\n panel.setAttribute("raw",src.substr(0,endpos));\n panel.setAttribute("blockquote",lookaheadMatch[8]?"true":"false");\n panel.setAttribute("rendered","false");\n w.nextMatch += endpos+3;\n if (w.source.substr(w.nextMatch,1)=="\sn") w.nextMatch++;\n if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\sn\sn"+panel.getAttribute("raw"));\n }\n }\n }\n }\n)\n\n// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)\nfunction findMatchingDelimiter(src,starttext,endtext) {\n var startpos = 0;\n var endpos = src.indexOf(endtext);\n // check for nested delimiters\n while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {\n // count number of nested 'starts'\n var startcount=0;\n var temp = src.substring(startpos,endpos-1);\n var pos=temp.indexOf(starttext);\n while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }\n // set up to check for additional 'starts' after adjusting endpos\n startpos=endpos+endtext.length;\n // find endpos for corresponding number of matching 'ends'\n while (startcount && endpos!=-1) {\n endpos = src.indexOf(endtext,endpos+endtext.length);\n startcount--;\n }\n }\n return (endpos==-1)?src.length:endpos;\n}\n//}}}\n\n//{{{\nwindow.onClickNestedSlider=function(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLabel = theTarget.firstChild.data;\n var theSlider = theTarget.sliderPanel\n var isOpen = theSlider.style.display!="none";\n // if using default button labels, toggle labels\n if (theLabel==">") theTarget.firstChild.data = "<";\n else if (theLabel=="<") theTarget.firstChild.data = ">";\n // if using default tooltips, toggle tooltips\n if (theTarget.getAttribute("title")=="show")\n theTarget.setAttribute("title","hide");\n else if (theTarget.getAttribute("title")=="hide")\n theTarget.setAttribute("title","show");\n if (theTarget.getAttribute("title")=="show "+theLabel)\n theTarget.setAttribute("title","hide "+theLabel);\n else if (theTarget.getAttribute("title")=="hide "+theLabel)\n theTarget.setAttribute("title","show "+theLabel);\n // deferred rendering (if needed)\n if (theSlider.getAttribute("rendered")=="false") {\n if (config.options.chkDebugLazySliderRender)\n alert("rendering '"+theLabel+"':\sn\sn"+theSlider.getAttribute("raw"));\n var place=theSlider;\n if (theSlider.getAttribute("blockquote")=="true")\n place=createTiddlyElement(place,"blockquote");\n wikify(theSlider.getAttribute("raw"),place);\n theSlider.setAttribute("rendered","true");\n }\n // show/hide the slider\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n theSlider.style.display = isOpen ? "none" : "block";\n // reset to default width (might have been changed via plugin code)\n theSlider.style.width=theSlider.defaultPanelWidth;\n // align slider/floater position with target button\n if (!isOpen) adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);\n // if showing panel, set focus to first 'focus-able' element in panel\n if (theSlider.style.display!="none") {\n var ctrls=theSlider.getElementsByTagName("*");\n for (var c=0; c<ctrls.length; c++) {\n var t=ctrls[c].tagName.toLowerCase();\n if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")\n { ctrls[c].focus(); break; }\n }\n }\n if (this.sliderCookie && this.sliderCookie.length) {\n config.options[this.sliderCookie]=!isOpen;\n if (config.options[this.sliderCookie]!=this.defOpen)\n saveOptionCookie(this.sliderCookie);\n else { // remove cookie if slider is in default display state\n var ex=new Date(); ex.setTime(ex.getTime()-1000);\n document.cookie = this.sliderCookie+"=novalue; path=/; expires="+ex.toGMTString();\n }\n }\n return false;\n}\n\n// hijack animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }\n\n// adjust panel position based on button position\nif (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {\n if (panelClass=="floatingPanel") {\n var left=0;\n var top=btn.offsetHeight; \n if (place.style.position!="relative") {\n var left=findPosX(btn);\n var top=findPosY(btn)+btn.offsetHeight;\n var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;\n if (p) { left-=findPosX(p); top-=findPosY(p); }\n }\n if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth-10;\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n}\n\nfunction getWindowWidth() {\n if(document.width!=undefined)\n return document.width; // moz (FF)\n if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )\n return document.documentElement.clientWidth; // IE6\n if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )\n return document.body.clientWidth; // IE4\n if(window.innerWidth!=undefined)\n return window.innerWidth; // IE - general\n return 0; // unknown\n}\n//}}}
<<selectStylesheet [size:nnn|auto] [width:nnn[cm|px|em|%]>>\n\nYour username for signing:\n\n<<option txtUserName>>\n<<option chkSaveBackups>> SaveBackups\n<<option chkAutoSave>> AutoSave\n<<option chkRegExpSearch>> RegExpSearch\n<<option chkCaseSensitiveSearch>> CaseSensitiveSearch\n<<option chkAnimate>> EnableAnimations\n\n----\nAdvancedOptions\nPluginManager\nImportTiddlers
----\n*+++[Theorie]\nUm ein Vektorfeld zu berechnen muss ein Algorithmus gegeben sein, welcher für jede Koordinate (x,y,z) im Raum ein entsprechenden Gegenstück findet, welches die Richtung und Stärke des entgültigen Vektorfeldes festlegt. Die eigentliche Schwierigkeit bei der Visualisierung liegt jedoch nicht im Erzeugen des Vektorfeldes, anhand simpler Manipulation der Korrdinatenwerte, sondern in der Visualisierung einer Teilchenbewegung entlang des Vektorfeldes. Zu diesem Zweck ist ein Algorithmus vonnöten, welcher vorausberechnend agiert und somit in der Lage ist eine möglichst genaue Interpolation zwischen mehreren Wegstrecken zu bestimmen.\n===\n\n*+++[Runge-Kutta]\nDas ~Runge-Kutta Verfahren der 4. Ordnung ist eine der möglichen Interpolationsverfahren.\nDie Grundidee von ~Runge-Kutta Verfahren ist, durch Hinzunahme weiterer Stützstellen des Weges, an denen die Kraft F in dem gegebenen Zeitintervall ausgewertet wird, eine Erhöhung der Konsistenzordnung zu erreichen. Die lineare Approximation der Bahnkurve im Euler Verfahren wird somit ersetzt durch eine quadratische, kubische, quartische, etc. Annäherung. Wir haben dieses Verfahren aus Zeitgründen nur für eine feste Schrittweite implementiert - eine adaptive Schrittweite erfordert mehr Rechenaufwand, würde jedoch eine flüssigere Bewegung des Teilchens ohne Abweichungen vom eigentlichen Weg bedeuten.\n\n|Euler|~Runge-Kutta|\n|[<img[Euler|pictures/euler.gif]]|[>img[Runge-Kutta|pictures/runge-kutta.gif]]|\n|&copy; 1999, Prof. Dr. A. Piel|&copy; 1999, Prof. Dr. A. Piel|\n===\n\n*+++[Implementierte Algorithmen]\n\n''1/r^2 single:''\nDieses Feld verbindet Gravitation und elektrostatische Anziehung. Die Feldlinien zeigen auf das Zentrum und sind invers proportional zu dem Quadrat der Entfernung vom Mittelpunkt angeordnet.\n\n''1/r^2 double:''\nDieses Feld ist ähnlich dem oberen Algorithmus, jedoch sind hier zwei Zentren gegeben, die sich ähnlich zwei negativ gepolten Punktladungen verhalten.\n\n''1/r single line:'' \nDieses Feld betrachtet die reine elektrostatische Anziehung, welche über die komplette zentrierte Linie konstant ist. Die Feldstärke ist hier invers zum Abstand zur Mittellinie.\n\n''1/r double lines:'' \nDas gleiche Prinzip wie im oberen Fall, jedoch wirken die zwei Linien ähnlich verstärkend und überschneidend, so dass sich der Fixpunkt verschiebt und eine Teilchenbewegung vom direkten Weg zur jeweiligen Linie abgelenkt wird.\n\n''1/r rotational:'' \nDieses Feld beschreibt ein Rotationszentrum als Linie, wobei die Geschwindigkeit invers proportional zum Abstand ist.\n\n''helical:''\nDie Feldlinien entsprechen einer Helix.\n===\n\n*+++[Projektverlauf]\nEs wurde zuerst eine Basis zur Simulation geschaffen, welche jedoch als zu komplex verworfen wurde. Die Implementierung per ~Runge-Kutta verlief dagegen recht simpel und schnell.\n===\n\n*+++[Bedienung]\nDas Programm verfügt über ein Anzeigefenster, in welchem sich das 3D Vektorfeld mit der Maus bewegen lässt. Über die rechte Maustaste erhält man ein Kontextmenü von ~JavaView, welches weitere Bewegungsmöglichkeiten (z.B. Zoom) erlaubt.\n\n[img[pictures/screen.png]]\n\nDie Kontrolfelder erlauben:\n* Das Auswählen eines bestimmten Algorithmus\n* Das Einstellen der Feldstärke\n* Die Einstellen der Elementdichte\n* Die Möglichkeit den Algorithmus zu invertieren\n* Die Möglichkeit verschiedene Aspekte der Darstellung auszublenden\n\nEin Einfrieren der Simulation ist möglich, indem die Feldstärke auf 0 gesetzt wird.\n===
/***\n|''Name:''|SelectStylesheetPlugin|\n|''Source:''|http://www.TiddlyTools.com/#SelectStylesheetPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nSelect alternative TiddlyWiki CSS stylesheet 'themes' from a list of tiddlers tagged with "stylesheets".\n\n!!!!!Usage\n<<<\nThis plugin defines a macro that creates a stylesheet link or selection listbox/droplist that can be added to the content of any tiddler (such as the OptionsPanel or MainMenu tiddlers).\n\nFirst, create (or import) a custom style sheet tiddler (i.e, a tiddler containing CSS definitions) and tag it with <<tag stylesheets>> so it can be included in the selection list. Then, add the {{{<<selectStylesheet>>}}} macro to the desired tiddler to display the stylesheet list. (note: to create a link to apply a specific stylesheet, include the stylesheet tiddlername as a parameter. See below for more details).\n\nSelect your desired stylesheet from the droplist:\n** ''[system]'' uses the built-in CSS definitions\n** ''[default]'' uses "StyleSheet" tiddler (if present)\n** //tiddlername// uses any named stylesheet\nThe currently selected stylesheet is indicated by a '>' symbol.\n\n//Note: If a selected stylesheet tiddler no longer exists (i.e, the tiddler was deleted or renamed after it had been selected for use), the [default] CSS tiddler ("StyleSheet") will be used as a fallback. If this tiddler does not exist either, then the built-in CSS definitions are used.//\n<<<\n!!!!!Parameters\n<<<\nThe selectStylesheet macro accepts parameters to control various features and functions. //Note: while each parameter is optional and may be omitted from the macro, the parameters (when present) must appear in the order shown below.//\n* ''size:nnn''\nDetermines the number of lines to display in the stylesheet list. If this parameter is omitted or "size:1" is specified, a single-line droplist is created. When a size > 1 is provided, a standard, fixed-size scrollable listbox is created. You can use "size:0" or "size:auto" to display a varible-height listbox that automatically adjusts to fit the current list contents without scrolling.\n* ''width:nnn[cm|px|em|%]''\nControls the width of the stylesheet list. Overrides the built-in CSS width declaration (=100%). Use standard CSS width units (cm=centimeters, px=pixels, em=M-space, %=proportional to containing area). You can also use a ".selectStylesheet" custom CSS class definition to override the built-in CSS declarations for the stylesheet list.\n* ''label:text'' and ''prompt:text''\nwhen used in conjunction with a specific named stylesheet to create a stylesheet link (see //tiddlername// param, below), these two parameters define the link text the 'tooltip' text that appears near the mouse pointer when placed over the link, respectively.\n* ''//tiddlername//''\nIf you include a stylesheet //tiddlername// parameter in the macro (e.g., {{{<<selectStylesheet [[Woodshop]]>>}}} then a link will be created instead of a listbox/droplist. Selecting this link applies the specified stylesheet. You may use the special keywords ''[system]'' to use the built-in CSS definitions, or ''[none]'' to bypass all stylesheet tiddlers (sometimes useful during CSS debugging).\n\n<<<\n!!!!!Nested Stylesheets\n<<<\nThe CSS definitions for TiddlyWiki are fairly substantial, and stylesheet tiddlers can include hundreds of lines of CSS statements. Often, these stylesheets will use the exact same CSS for the bulk of their definitions plus several changes or additions to create a difference in appearance. This results in lots of duplicated CSS definitions that can become difficult to keep 'in sync' with each other.\n\nTo make this problem much easier to manage, you can move the common CSS definitions into separate stylesheet tiddlers. Then, embed {{{[[tiddlertitle]]}}} references in the original stylesheet tiddlers to re-combine the CSS definitions into a single stylesheet 'theme' to be applied.\n\nWith some clever division of CSS into separate tiddlers, you can quite easily construct dozens of stylesheet combinations. You can also mark the common CSS tiddlers with tags and use them as overlay stylesheets so you can mix-and-match their styles to create even more 'on-the-fly' stylesheet combinations.\n\nNote: Normally, when rendering tiddler content for display, the {{{[[tiddlertitle]]}}} syntax means "insert a link to this tiddler". However, when applying stylesheets, this syntax means "insert the content of this tiddler"\n<<<\n!!!!!Bypassing default shadow styles (for 'CSS gurus')\n<<<\nNormally, TiddlyWiki documents automatically use CSS definitions contained in ''shadow tiddlers:'' StyleSheetLayout, StyleSheetColors, and StyleSheetPrint. Custom stylesheet definitions are then ''overlayed'' on top of these default styles, allowing you to modify and extend the CSS definitions to suit your desired look-and-feel, by just adding a few lines of CSS, instead of directly modifying the shadow tiddlers (which, while it is allowed, is not recommended).\n\nPrior to version 4.3.0 (2006 August 27), the plugin behavior always bypassed the shadow stylesheets when applying a selected custom stylesheet. As a result, the custom stylesheet definitions had to contain this syntax: {{{[[StyleSheetLayout]] [[StyleSheetColors]] [[StyleSheetPrint]]}}} to make use of the default CSS definitions. Unfortunately, this made it awkward to import and use 'standard' StyleSheet tiddlers defined for use without the SelectStylesheetPlugin, as they didn't necessarily contain the needed references to the shadow defaults.\n\n''As of version 4.3.0, SelectStylesheetPlugin no longer bypasses the default shadow stylesheets, so that the {{{[[...]]}}} references to the shadows are not required to include the default styles.''\n\nHowever, if overriding a CSS definition in a custom StyleSheet is simply not sufficient for your needs, you can still ''completely bypass the built-in shadow styles'' by entering\n{{{\nconfig.options.chkBypassShadowStyles=true\n}}}\ninto a tiddler tagged with<<tag systemConfig>> (e.g., "ConfigTweaks"). This ''internal system value'' causes the plugin to revert to the pre-4.3.0 behavior so that it skips the shadow styles when applying a selected stylesheet. Note that this setting is not a user-level preference, so it is not presented as a checkbox option nor stored in a cookie, as it is intended to only be set by the //author// of the document.\n<<<\n!!!!!Changing templates or invoking custom javascript from a stylesheet\n<<<\nIn addition to CSS definitions, some TiddlyWiki look-and-feel designs also make adjustments to the TiddlyWiki document structure so that certain document features can be moved, hidden, or otherwise redefined. The default set of templates that control the document structure are called PageTemplate, ViewTemplate, and EditTemplate. To select an alternative set of templates, you can include the special psuedo-macro ''{{{<<template prefix>>}}}'' in your stylesheet. This adds the indicated prefix to the standard template names, and automatically switches to using those templates whenever the stylesheet is selected and applied.\n\nWhenever a document is being viewed in read-only mode (i.e., via http: protocol), an implied template prefix of "Web" is also used, and is inserted between any custom template prefix and the standard template name. For example, ''{{{<<template Custom>>}}}'' will use {{{CustomWebViewTemplate}}} when the document is in read-only mode. You can specify an alternative for this implied prefix by including a second prefix parameter in the pseudo-macro. For example, ''{{{<<template Custom ReadOnly>>}}}'' will use {{{CustomReadOnlyViewTemplate}}}. Note: if a template tiddler with the indicated combination of custom and read-only prefixes is not available, a suitable fallback template is chosen, first by omitting the custom prefix, then by omitting the read-only prefix, and finally by omitting both, and reverting to the appropriate default template.\n\nIn addition to selecting alternative templates, a stylesheet can also include the psuedo-macro ''{{{<<init tiddlertitle>>}}}'' to execute custom javascript that can access TiddlyWiki internal data and 'core' functions or perform direct manipulation of the currently-rendered DOM elements of the document. First, place the desired javascript code into one or more tiddlers (note: //although these tiddlers will contain javascript, ''do NOT tag them as 'systemConfig', since this will cause the javascript to be executed every time TW starts'', rather than only when a specific stylesheet has been selected//). Then, add the ''{{{<<init tiddlertitle>>}}}'' pseudo-macro to your stylesheet so the javascript will be executed when that specific stylesheet is selected and applied.\n\nOf course, when another stylesheet is subsequently selected, other custom javascript functions may be needed to reset whatever TW internal data changes or DOM manipulations were performed by any {{{<<init>>}}} scripts. You can define tiddlers containing these ''reset'' scripts by embedding ''{{{<<reset tiddlertitle>>}}}'' in your stylesheet definition. Unlike {{{<<init>>}}} scripts, any tiddlers declared in this way will NOT be executed when the stylesheet is applied, but will be remembered and automatically executed before applying another stylesheet.\n\nNote: These special-purpose psuedo-macros are only executed when the stylesheet containing them is actually in use. When these macros are rendered as part of the tiddler content (such as when //viewing// a stylesheet definition), the macros simply report their values without performing any actions.\n<<<\n!!!!!Examples\n<<<\nsingle auto-sized listbox\n{{{<<selectStylesheet size:auto width:60%>>}}}\n<<selectStylesheet size:auto width:60%>>\n\ndroplist for stylesheets\n{{{<<selectStylesheet size:1 width:30%>>}}}\n<<selectStylesheet size:1 width:30%>>\n\ninline links to set specific stylesheets\n{{{<<selectStylesheet Woodshop>> or <<selectStylesheet [[Edge of Night]]>> or <<selectStylesheet [default]>> or <<selectStylesheet [none]>> or <<selectStylesheet label:TiddlyWiki "prompt:The standard TW stylesheet" [system]>>\n}}}\n<<selectStylesheet Woodshop>> or <<selectStylesheet [[Edge of Night]]>> or <<selectStylesheet [default]>> or <<selectStylesheet [none]>> or <<selectStylesheet label:TiddlyWiki "prompt:The standard TW stylesheet" [system]>>\n\nstylesheet definitions (tagged with "stylesheets"):\n<<tag stylesheets>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SelectStylesheetPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SelectStylesheethandling^^\n\ncreate/edit ''OptionsPanel'':\nAdd "{{{<<selectStylesheet [size:nnn|auto] [width:nnn[cm|px|em|%]>>}}}" macro.\n<<<\n!!!!!Revision History\n<<<\n''2007.01.13'' [4.4.0] in applyStylesheets(), when readOnly, automatically use "Web" prefix for StyleSheet (and Layout/Colors/Print shadows), with fallback to regular stylesheets if custom Web stylesheets are not defined. (similar to handling for templates in switchTemplates())\n''2006.11.14'' [4.3.5] in applyPageTemplate(), only force use of selectStylesheet alternative page template if explicit template parameter is NOT provided (i.e., allow other plugin code to pass a value for the template). Based on a request by Paulo Soares.\n''2006.11.12'' [4.3.4] in applyStylesheets(), moved invocation of 'reset' handlers so they occur BEFORE switching to another template. (thanks to UdoBorkowski for the bug report)\n''2006.11.11'' [4.3.3] in initSelectStylesheetNotification(), hijack previously registered notifications for refreshPageTemplate() in addition to refreshStyles(). This ensures that non-default PageTemplate is displayed when document is first loaded (thanks to AndresLister for bug report).\n''2006.11.11'' [4.3.2] in applyStylesheets(), use getRecursiveTiddlerText() instead of getTiddlerText() to retrieve system-default shadow stylesheet. (thanks to UdoBorkowski for the bug report)\n''2006.09.26'' [4.3.1] in applyStylesheets(), corrected setting of StyleSheetPrint. Restored "[none]" choice in listbox.\n''2006.08.27'' [4.3.0] in applyStylesheets(), changed default so that shadow stylesheets are automatically applied ALONG WITH the selected custom stylesheet. Use config.options.chkBypassShadowStyles=true to revert to the prior handling (i.e., skip the shadow stylesheets)\n''2006.08.26'' [4.2.7] in applyStylesheets(), added depth-limiting param to getRecursiveTiddlerText() to avoid inifinite recursion. Note: limits nesting of stylesheets to 10 levels (same as core).\n''2006.06.28 [4.2.6]'' added 'nocookie' param to set(), so "style:xyz" param can **temporarily** override stylesheet (by NOT overwriting the cookie value)\n''2006.05.18 [4.2.5]'' revert to 'onchange' handling, BUT... don't *reload* the list contents each time selection changes (just move the ">" indicator to the current item instead), AND... track onkeydown/up to avoid FF crash due to excess calls to set() when scrolling a listbox by holding down arrow keys.\n''2006.05.15 [4.2.4]'' switch from 'onchange' listbox handling to 'onclick' and 'onkeyup'. Avoids FF **CRASH** due to stylesheets being excessively refreshed *during* onchange due to keyboard event handling.\n''2006.04.21 [4.2.3]'' recognize "stylesheet" tag when building list of available stylesheets (in addition to plural, "stylesheets")\n''2006.04.05 [4.2.2]'' in applyStylesheet(), reverted change from 4.2.0: *don't* apply "StyleSheetColors" and "StyleSheetLayout" along with selected stylesheet, so custom stylesheet can completely bypass the default formatting. To include default formatting in a stylesheet, embed "[[StyleSheetColors]] [[StyleSheetLayout]]" \n''2006.03.30 [4.2.1]'' in applyStylesheet(), change calls from "window.eval()" to just "eval()" to avoid FF1501 'global variable crash' problem \n''2006.03.30 [4.2.0]'' remove [none] choice from listbox. Added handling for <<selectStylesheet sheetname>> to create a link that applies the specified sheet instead of presenting a listbox of available sheets. added "style:" paramifier. Apply "StyleSheetColors" and "StyleSheetLayout" along with selected stylesheet (i.e., overlay selected sheet on top of shadow styles instead of replacing default shadow styles). Based on suggestions from Clint Checketts.\n''2006.03.09 [4.1.4]'' in refreshSelectStylesheet(), make sure that tiddler named in stylesheet cookie value still exists before attempting to select it in the listbox.\n''2006.02.25 [4.1.3]'' Problem: the ">" indicator was not always being refreshed, due to event "timing" issues. refreshSelectStylesheet() deferred for 10msec so it will execute *after* onChangeSelectStylesheet event processing has completed.\n''2006.02.24 [4.1.2]'' Problem: {{{<<template>>}}} macro was not being processed in IE.\nCause: regexp processing creates browser-internal "private globals" used to keep track of the regexp parser's state, including the current 'scan' position within the source string. This lets you use search() and exec() inside loops to scan for successive pattern matches. In applyStyleSheet(), "theCSS.search(templateRegExp)" was called before "theCSS.exec(templateRegExp)". As a result, the regexp parser had already matched the {{{<<template>>}}} macro embedded in the CSS and thus did not actually process the macro and switch the templates.\nFix: use {{{indexOf("<<template")}}} instead of search(templateRegExp) to check for presence of template switching macro in CSS.\n''2006.02.23 [4.1.1]'' performance fixes: in switchTemplates(), added default init of 'altTemplate' value to prevent unneeded triggering of refreshPageTemplate() during TW load-time when using standard templates. Saves LOTS of startup time and avoids the dreaded "script is running slowly" FireFox warnings.\nAlso, the forEachTiddler() call to force a "refresh all tiddlers" (needed when view/edit templates are changed) was moved from applyPageTemplate() and is now called directly from switchTemplates(). This eliminates redundant re-rendering of tiddlers while the page template is being refreshed.\n''2006.02.21 [4.1.0]'' added {{{<<template>>}}} pseudo-macro with new switchTemplate() function. Allows stylsheets to switch page/view/edit templates by adding a prefix to standard template names. Detects readOnly mode and automatically adds "Web" to template name (e.g. "MyWebViewTemplate"). Defines "Web" shadow templates and "viewSource" toolbar command.\n''2006.02.21 [4.0.3]'' added real macro handlers for psuedo-macros "init", "reset" so they will display in the stylesheet tiddler without appearing as an error.\n''2006.01.20 [4.0.2]'' add 'var' to unintended global variable declarations and wrapped notification hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.20 [4.0.1]'' Added optional "init" keyword for {{{<<init tiddlertitle>>}}} psuedo-macro syntax (note: previous {{{<<tiddlertitle>>}}} syntax still permitted)\nRevised documentation to better describe use of init/reset for custom code invokation.\n''2005.11.05 [4.0.0]'' Entire plugin simplified in response to new "shadow stylesheet" architecture introduced in TW1.2.37. Concept of separate overlays has been removed. Stylesheet themes are assembled using [[tiddler]] 'nesting' syntax, and tagged as 'stylesheet'. A single listbox/droplist is provided to select themes.\n''2005.10.25 [3.1.0]'' added support for embedding {{{<<reset tiddlertitle>>}}} companion code (to declare 'DOM cleanup' routines invoked when a stylesheet is UNloaded)\n//Based on a request from ClintChecketts//\n''2005.10.09 [3.0.1]'' combined documentation and code in a single tiddler\n''2005.08.15 [3.0.0]'' Another major re-write. Replaced separate "selectOverlays" macro definition with 'overlays' parameter on 'selectStylesheet' macro. Added support for embedding {{{<<tiddlertitle>>}}} companion code. applyStylesheets() completely re-designed to address quirks with loading and combining multiple stylesheets using browser-specific native handling, as well as add support for executing companion code. Stylesheets+overlays+code are now handled in a platform-neutral manner that avoids differences between browser implementations and uses much less overhead in the DOM.\n''2005.08.07 [2.0.0]'' Major re-write to not use static ID values for listbox controls, so that multiple macro instances can exist without corrupting each other or the DOM. Moved HTML and CSS definitions into plugin code instead of using separate tiddlers. Added new features: support for multiple groups of overlay stylesheets with collapsible tree display. Added size and width params for listbox display.\n''2005.07.27 [1.0.3]'' core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.25 [1.0.2]'' correct 'fallback' handling in selectStyleSheet()\n''2005.07.23 [1.0.1]'' added parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]. Thanks to David Jaquith for testing and bug reports and SteveRumsby for feature suggestions.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.selectStylesheet = {major: 4, minor: 4, revision: 0, date: new Date(2007,01,13)};\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.refreshSelectStylesheet=refreshSelectStylesheet;\nwindow.applyStylesheets=applyStylesheets;\n\nif (!config.options.txtStyleSheet) config.options.txtStyleSheet="StyleSheet";\n//}}}\n\n//{{{\n// define macro rendering handler\nconfig.macros.selectStylesheet = { };\nconfig.macros.selectStylesheet.reset = [];\nconfig.macros.selectStylesheet.handler = function(place,macroName,params) {\n setStylesheet(".selectStylesheet {width:100%;font-size:8pt;margin:0em}","selectStylesheetPlugin");\n var autosize=1;\n if (params[0] && (params[0]=="size:auto"))\n { autosize=0; params.shift(); }\n if (params[0] && (params[0].substr(0,5)=="size:"))\n autosize=(params.shift()).substr(5);\n if (params[0] && (params[0].substr(0,6)=="width:"))\n var width=(params.shift()).substr(6);\n if (params[0] && (params[0].substr(0,6)=="label:"))\n var label=(params.shift()).substr(6);\n if (params[0] && (params[0].substr(0,7)=="prompt:"))\n var prompt=(params.shift()).substr(7);\n if (params[0] && params[0].trim().length) // create a link that sets a specific stylesheet\n createTiddlyButton(place,label?label:params[0],prompt?prompt:params[0], function(){config.macros.selectStylesheet.set(params[0]); return false;});\n else { // create a select list of available stylesheets\n var theList=createTiddlyElement(place,"select",null,"selectStylesheet",null);\n theList.onkeydown=function() // track keystrokes for listbox only\n { if (this.size>1 && !this.keydown) { this.keydown=true; this.previousIndex=this.selectedIndex; } return true; };\n theList.onkeyup=function()\n { if (this.keydown) { this.keydown=false; if (this.selectedIndex!=this.previousIndex) config.macros.selectStylesheet.set(this.value); } return true; };\n theList.onchange=function()\n { if (!this.keydown) config.macros.selectStylesheet.set(this.value); return true; };\n theList.size=1;\n theList.autosize=autosize;\n if (width) theList.style.width=width;\n store.addNotification(null,refreshSelectStylesheet);\n refreshSelectStylesheet();\n }\n}\nconfig.macros.selectStylesheet.set = function(theSheet,nocookie) {\n if (!theSheet || !theSheet.trim().length) return;\n var allStyleLists=getElementsByClass("selectStylesheet");\n for (var k=0; k<allStyleLists.length; k++) {\n var theList=allStyleLists[k];\n for (var t=0; t<theList.options.length; t++) {\n if (theList.options[t].text.substr(0,1)==">")\n theList.options[t].text=String.fromCharCode(160)+String.fromCharCode(160)+theList.options[t].text.substr(1);\n if ((theList.options[t].value==theSheet) || (theSheet=="[default]" && theList.options[t].value=="StyleSheet"))\n { theList.options[t].text=">"+theList.options[t].text.substr(2); theList.selectedIndex=t; }\n }\n }\n config.options.txtStyleSheet=theSheet;\n if (!nocookie) saveOptionCookie("txtStyleSheet");\n applyStylesheets();\n return;\n}\nif (config.paramifiers) config.paramifiers.style = { onstart: function(theSheet) { config.macros.selectStylesheet.set(theSheet,true); } };\n\n// set to TRUE to enable debugging status messages when stylesheets are applied\nconfig.macros.selectStylesheet.verbose = false;\n\n// hijack existing notifications for refreshStyles() and refreshPageTemplate() handlers\ninitSelectStylesheetNotification();\nfunction initSelectStylesheetNotification() {\n for (var i=0; i<store.namedNotifications.length; i++) {\n if (store.namedNotifications[i].notify==window.refreshStyles)\n store.namedNotifications[i].notify=applyStylesheets;\n if (store.namedNotifications[i].notify==window.refreshPageTemplate)\n store.namedNotifications[i].notify=applyPageTemplate;\n }\n}\n\n// hijack refreshStyles() handler\nconfig.macros.selectStylesheet.coreRefreshStyles = window.refreshStyles;\nwindow.refreshStyles=applyStylesheets;\n\n// hijack refreshPageTemplate() handler\nconfig.macros.selectStylesheet.coreRefreshPageTemplate = window.refreshPageTemplate;\nwindow.refreshPageTemplate=applyPageTemplate;\n\nfunction getElementsByClass(classname)\n{\n var arr=new Array();\n var count=0;\n var all=document.all? document.all : document.getElementsByTagName("*");\n for (var i=0; i<all.length; i++)\n if (all[i].className==classname)\n arr[count++]=all[i];\n return arr;\n}\n\nfunction refreshSelectStylesheet()\n{\n var indent = String.fromCharCode(160)+String.fromCharCode(160)+String.fromCharCode(160);\n // for all instances of the selectStylesheet control\n var allStyleLists=getElementsByClass("selectStylesheet");\n for (var k=0; k<allStyleLists.length; k++) {\n var theList=allStyleLists[k];\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n theList.selectedIndex=-1;\n // fill the stylesheet list\n var count=0;\n // prompt text\n theList.options[count++] = new Option("select a stylesheet:","",false,false);\n // option: none (built-in hard-coded CSS only)\n theList.options[count++] = new Option(indent+"[none]","[none]",false,false);\n // option: default (built-in plus shadow stylesheets)\n theList.options[count++] = new Option(indent+"[system]","[system]",false,false);\n // option: StyleSheet tiddler, if present\n if (store.getTiddler("StyleSheet")!=undefined)\n theList.options[count++] = new Option(indent+"[default]","StyleSheet",false,false);\n // options: CSS tiddlers tagged with "stylesheets" or "stylesheet"\n var theSheets=store.getTaggedTiddlers("stylesheets").concat(store.getTaggedTiddlers("stylesheet"));\n for (var i=0; i<theSheets.length; i++) {\n var theTitle=theSheets[i].title;\n if (theTitle=="StyleSheet") continue;\n theList.options[count++] = new Option(indent+theTitle,theTitle,false,false);\n }\n // make sure the requested stylesheet exists, fallback if not...\n var theSheet=config.options.txtStyleSheet;\n if (theSheet!="[none]" && theSheet!="[system]" && !store.getTiddler(theSheet)) theSheet="StyleSheet";\n if (!store.getTiddler(theSheet)) theSheet="[system]";\n // set the listbox selection to current stylesheet\n theList.selectedIndex=0; // default to first item\n for (var t=0; t<theList.options.length; t++) \n if (theList.options[t].value==theSheet)\n { theList.selectedIndex=t; break; }\n theList.options[t].text=">"+theList.options[t].text.substr(2);\n // autosize as appropriate\n theList.size=(theList.autosize<1)?theList.options.length:theList.autosize;\n } // end of "for all instances"\n}\n//}}}\n\n//{{{\nconfig.macros.selectStylesheet.templates = { };\nfunction switchTemplates(which,readOnlyPrefix)\n{\n // remember original templates (init only)\n if (!config.macros.selectStylesheet.templates.originalpage)\n config.macros.selectStylesheet.templates.originalpage = "PageTemplate";\n if (!config.macros.selectStylesheet.templates.originalview)\n config.macros.selectStylesheet.templates.originalview = config.tiddlerTemplates[1];\n if (!config.macros.selectStylesheet.templates.originaledit)\n config.macros.selectStylesheet.templates.originaledit = config.tiddlerTemplates[2];\n if (!config.macros.selectStylesheet.altTemplate)\n config.macros.selectStylesheet.altTemplate="";\n\n // define shorthand variables just for code readability \n var page=config.macros.selectStylesheet.templates.originalpage;\n var view=config.macros.selectStylesheet.templates.originalview;\n var edit=config.macros.selectStylesheet.templates.originaledit;\n\n // get 'readOnly' mode... set by TW core, but not until after the plugin is loaded, so we need to do this here as well...\n var loc = document.location.href;\n if (readOnly==undefined)\n var readOnly = (loc.substr(0,4) == "http" || loc.substr(0,3) == "ftp") ? config.options.chkHttpReadOnly : false;\n\n // get prefix defaults\n if (!which) var which="";\n if (!readOnlyPrefix) var readOnlyPrefix = "Web";\n if (!readOnly) readOnlyPrefix="";\n var alt = which+readOnlyPrefix;\n\n var msg="current template prefix: '%0', requested template prefix '%1'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([config.macros.selectStylesheet.altTemplate,alt]));\n\n // only switch if really changing templates\n if (alt == config.macros.selectStylesheet.altTemplate) return;\n\n // remember which templates are being used\n config.macros.selectStylesheet.altTemplate = alt;\n\n // set page template, with fallbacks for missing combinations\n var pageTemplate=alt+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=which+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=readOnlyPrefix+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=page;\n config.macros.selectStylesheet.templates.currentpage = pageTemplate;\n\n // set view template, with fallbacks for missing combinations\n var viewTemplate=alt+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=which+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=readOnlyPrefix+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=view;\n config.tiddlerTemplates[1] = config.macros.selectStylesheet.templates.currentview = viewTemplate;\n\n // set edit template, with fallbacks for missing combinations\n var editTemplate=alt+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=which+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=readOnlyPrefix+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=edit;\n config.tiddlerTemplates[2] = config.macros.selectStylesheet.templates.currentedit = editTemplate;\n\n var msg="switching to templates: %0, %1, %2";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([pageTemplate,viewTemplate,editTemplate]));\n\n // apply page template\n window.applyPageTemplate();\n // apply view/edit templates\n story.forEachTiddler(function(title,element) { this.refreshTiddler(title,null,true);});\n\n}\n// Hijack refreshPageTemplate to force alternative template to be used (if any)\nfunction applyPageTemplate(template)\n{\n var cw=document.getElementById("contentWrapper");\n cw.style.display="none";\n if (!template) var template=config.macros.selectStylesheet.templates.currentpage;\n if (config.macros.selectStylesheet.verbose) alert("Apply PageTemplate: %0".format([template]));\n config.macros.selectStylesheet.coreRefreshPageTemplate(template);\n cw.style.display="block";\n}\n//}}}\n\n//{{{\nfunction applyStylesheets()\n{\n // define pattern to match executable <<tiddlername>> references embedded in CSS text\n var setTiddlerRegExp = new RegExp("(?:<<(?:init )([^>]+)>>)","mg");\n var resetTiddlerRegExp = new RegExp("(?:<<reset ([^>]+)>>)","mg");\n var templateRegExp = new RegExp("(?:<<template ([^\ss>]+)( [^>]+)?>>)","mg");\n\n // get 'readOnly' mode... set by TW core, but not until after the plugin is loaded, so we need to do this here as well...\n var loc = document.location.href;\n if (readOnly==undefined)\n var readOnly = (loc.substr(0,4) == "http" || loc.substr(0,3) == "ftp") ? config.options.chkHttpReadOnly : false;\n\n // make sure the requested stylesheets exist, fallback if not...\n var prefix=readOnly?"Web":"";\n switch (config.options.txtStyleSheet) {\n case "[none]":\n case "[system]":\n var theSheet=config.options.txtStyleSheet;\n break;\n default:\n var theSheet=prefix+config.options.txtStyleSheet;\n if (!store.tiddlerExists(theSheet)) theSheet=config.options.txtStyleSheet;\n if (!store.tiddlerExists(theSheet)) theSheet="StyleSheet";\n if (!store.tiddlerExists(theSheet)) theSheet="[system]";\n break;\n }\n var layoutID="StyleSheetLayout";\n if (store.tiddlerExists(prefix+layoutID)) layoutID=prefix+layoutID;\n var colorsID="StyleSheetColors";\n if (store.tiddlerExists(prefix+colorsID)) colorsID=prefix+colorsID;\n var printID="StyleSheetPrint";\n if (store.tiddlerExists(prefix+printID)) printID=prefix+printID;\n\n // When store.NotifyAll() is invoked, it can trigger multiple calls to applyStylesheets(),\n // even though only one is needed to set the styles and render things properly. The extra calls\n // add unnecessary processing overhead by performing multiple re-rendering of entire TW display,\n // often resulting in "slow script" warnings. To avoid this, we can track the last stylesheet that\n // was applied and only apply the current requested sheet if it is really a different sheet, OR\n // if the TW contents have actually changed (which might include changes to the current stylesheet)\n if (theSheet==config.macros.selectStylesheet.current && !store.dirty) return;\n config.macros.selectStylesheet.current=theSheet;\n\n // get the primary stylesheet CSS\n var msg="stylesheet: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([theSheet]));\n var theCSS = (theSheet.substr(0,1)=='[')?"":store.getRecursiveTiddlerText(theSheet,"",10);\n if (theSheet.substr(0,1)!='[') store.addNotification(theSheet,refreshStyles);\n\n // execute any saved stylesheet 'reset' code tiddlers\n while (config.macros.selectStylesheet.reset.length) {\n var tiddler=config.macros.selectStylesheet.reset.shift();\n var msg="stylesheet reset macro: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([tiddler]));\n var msg="error in '%0': %1";\n try { eval(store.getTiddlerText(tiddler)); }\n catch(e) { displayMessage(msg.format([tiddler,e.toString()])); }\n }\n\n // if <<template>> reference is not specified, reset to standard template\n if (theCSS.indexOf("<<template")==-1) switchTemplates();\n\n // execute any embedded <<template>> references\n do {\n var match = templateRegExp.exec(theCSS);\n if(match && match[1]) switchTemplates(match[1],match[2]);\n } while(match);\n // filter out embedded <<template>> references\n theCSS = theCSS.replace(templateRegExp,"");\n\n // save embedded <<reset tiddlername>> references\n do {\n var match = resetTiddlerRegExp.exec(theCSS);\n if(match && match[1])\n config.macros.selectStylesheet.reset.push(match[1]);\n } while(match);\n // filter out embedded <<reset tiddlername>> references\n theCSS = theCSS.replace(resetTiddlerRegExp,"");\n\n // execute any embedded <<init tiddlername>> references\n do {\n var match = setTiddlerRegExp.exec(theCSS);\n if(match && match[1]) {\n var msg="stylesheet macro: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([match[1]]));\n var msg="error in '%0': %1";\n try { eval(store.getTiddlerText(match[1])); }\n catch(e) { displayMessage(msg.format([match[1],e.toString()])); }\n }\n } while(match);\n // filter out embedded <<set tiddlername>> references\n theCSS = theCSS.replace(setTiddlerRegExp,"");\n\n // finally, apply the styles\n switch (theSheet) {\n case "[none]": // no styles\n setStylesheet("/*bypass*/","StyleSheetColors");\n setStylesheet("/*bypass*/","StyleSheetLayout");\n setStylesheet("/*bypass*/","StyleSheetPrint");\n setStylesheet("/*bypass*/","StyleSheet");\n break;\n case "[system]": // default styles only\n setStylesheet(store.getRecursiveTiddlerText(layoutID,"",10),"StyleSheetLayout");\n setStylesheet(store.getRecursiveTiddlerText(colorsID,"",10),"StyleSheetColors");\n setStylesheet(store.getRecursiveTiddlerText(printID,"",10),"StyleSheetPrint");\n setStylesheet("","StyleSheet");\n break;\n default: // alternative stylesheet *replaces* default styles\n if (config.options.chkBypassShadowStyles) { // NOTE: hard-coded value, not saved as cookie, adjust in "ConfigTweaks"\n // stylesheet *replaces* default styles\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetLayout");\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetColors");\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetPrint");\n }\n else {\n // stylesheet *overlays* default styles\n setStylesheet(store.getRecursiveTiddlerText(layoutID,"",10),"StyleSheetLayout");\n setStylesheet(store.getRecursiveTiddlerText(colorsID,"",10),"StyleSheetColors");\n setStylesheet(store.getRecursiveTiddlerText(printID,"",10),"StyleSheetPrint");\n }\n setStylesheet(theCSS,"StyleSheet");\n break;\n }\n}\n\nconfig.macros.init = { };\nconfig.macros.init.handler = function(place,macroName,params)\n { var out="init: [[%0]]"; wikify(out.format(params),place); }\nconfig.macros.reset = { };\nconfig.macros.reset.handler = function(place,macroName,params)\n { var out="reset: [[%0]]"; wikify(out.format(params),place); }\nconfig.macros.template = { };\nconfig.macros.template.handler = function(place,macroName,params)\n { var out="use template prefix: ''%0 %1''"; wikify(out.format(params),place); }\n\n//}}}
/***\n|''Name:''|SinglePageModePlugin|\n|''Source:''|http://www.TiddlyTools.com/#SinglePageModePlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nNormally, 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.\n\n!!!!!Usage\n<<<\nSinglePageMode 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.\n\nEven 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.\n<<<\n!!!!!Configuration\n<<<\nWhen 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:\n\n<<option chkSinglePageMode>> Display one tiddler at a time\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SinglePageMode handling^^\n\nWhen 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.''\n<<<\n!!!!!Revision History\n<<<\n''2007.01.08 [2.2.2]'' use apply() to invoke hijacked core functions\n''2006.07.04 [2.2.1]'' in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.\n''2006.06.01 [2.2.0]'' added chkTopOfPageMode (TPM) handling\n''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\n''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\n''2005.12.27 [2.0.0]'' Update for TW2.0\n''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\n''2005.10.14 [1.1.1]'' permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them\n''2005.10.14 [1.1.0]'' added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.\n''2005.10.09 [1.0.1]'' combined documentation and code in a single tiddler\n''2005.08.15 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nSupport for BACK/FORWARD buttons adapted from code developed by Clint Checketts\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SinglePageMode= {major: 2, minor: 2, revision: 2, date: new Date(2007,1,8)};\n\nif (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSinglePageMode>> Display one tiddler at a time";\n\nif (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";\n\nconfig.SPMTimer = 0;\nconfig.lastURL = window.location.hash;\nfunction checkLastURL()\n{\n if (!config.options.chkSinglePageMode)\n { window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }\n if (config.lastURL == window.location.hash)\n return;\n var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));\n tiddlerName=tiddlerName.replace(/\s[\s[/,"").replace(/\s]\s]/,""); // strip any [[ ]] bracketing\n if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);\n}\n\nif (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)\n{\n if (config.options.chkSinglePageMode) {\n window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));\n config.lastURL = window.location.hash;\n document.title = wikifyPlain("SiteTitle") + " - " + title;\n story.closeAllTiddlers();\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n if (config.options.chkTopOfPageMode) { story.closeTiddler(title); window.scrollTo(0,0); srcElement=null; }\n this.SPM_coreDisplayTiddler.apply(this,arguments);\n}\n\nif (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;\nStory.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)\n{\n // suspend single-page mode when displaying multiple tiddlers\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n this.SPM_coreDisplayTiddlers.apply(this,arguments);\n config.options.chkSinglePageMode=saveSPM; config.options.chkTopOfPageMode=saveTPM;\n}\n//}}}
Vector Fields 3D
/***\n\n''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''\n\n|Name|SplashScreenPlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#SplashScreenPlugin|\n|Version|0.21 |\n|Requires|~TW2.08+|\n!Description:\nProvides a simple splash screen that is visible while the TW is loading.\n\n!Installation\nCopy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.\n\n!Customizing\nOnce the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.\n\n!History\n* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.\n* 26-06-06 : version 0.2, first release\n\n!Code\n***/\n//{{{\nvar old_lewcid_splash_restart=restart;\n\nrestart = function()\n{ if (document.getElementById("SplashScreen"))\n document.getElementById("SplashScreen").style.display = "none";\n if (document.getElementById("contentWrapper"))\n document.getElementById("contentWrapper").style.display = "block";\n \n old_lewcid_splash_restart();\n \n if (splashScreenInstall)\n {if(config.options.chkAutoSave)\n {saveChanges();}\n displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");\n }\n}\n\n\nvar oldText = store.getTiddlerText("MarkupPreHead");\nif (oldText.indexOf("SplashScreen")==-1)\n {var siteTitle = store.getTiddlerText("SiteTitle");\n var splasher='\sn\sn<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';\n if (! store.tiddlerExists("MarkupPreHead"))\n {var myTiddler = store.createTiddler("MarkupPreHead");}\n else\n {var myTiddler = store.getTiddler("MarkupPreHead");}\n myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);\n store.setDirty(true);\n var splashScreenInstall = true;\n}\n//}}}
[[StyleSheetAdjustments]]\n\n/***\nChange this to set the default stylesheet:\n***/\n[[TotallyTiddlers]]
[[StyleSheetPlugins]] /* include adjustments to plugin-supplied definitions */\n[[StyleSheetShortcuts]] /* include formatting "shortcut" definitions */\n\n/***\nThe following CSS declarations extend/enhance the TiddlyWiki default shadowed stylesheets.\n\nThese 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.\n\n/***\n!body /%==================================================%/\nIE needs explicit "position:static" declaration (fixes 'partial background display bug')\n***/\n/*{{{*/\nbody { font-family: Verdana,Arial,Helvetica; position:static; }\n/*}}}*/\n\n/***\n!common colors /%==================================================%/\n***/\n/*{{{*/\n/* these seem to have been omitted from the core defaults for link styles */\na { color:#014; }\na:hover { color:#f00; }\n/*}}}*/\n\n/***\n!header and titles /%==================================================%/\nIE needs explicit "position:static" declaration (fixes 'background display hides text bug')\n***/\n/*{{{*/\n.header\n { background:transparent; padding:.2em 1em; border-bottom:1px solid; position:static; }\n.headerShadow, .headerForeground\n { padding:.5em; }\n.header a, .header .button, .header .tiddlyLinkExisting, .header .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n.header .externalLink,\n.siteSubtitle a, .siteSubtitle .button, .siteSubtitle .tiddlyLinkExisting, .siteSubtitle .tiddlyLinkNonExisting\n { font-style:italic; text-decoration:none; }\n.header table\n { border-collapse: collapse !important; }\n\n/*}}}*/\n\n/***\n!displayArea /%==================================================%/\n***/\n/*{{{*/\n#displayArea\n { margin-top:0em; }\n/*}}}*/\n\n\n/***\n!popups /%==================================================%/\nwhite-space:nowrap prevents items from wrapping if popup is near right edge of window\nz-index:1000 makes sure popup is above EVERYTHING else\n***/\n/*{{{*/\n.popup\n { white-space: nowrap; z-index:1000; color: #000; background: #ffe; border: 1px solid #000;\n -moz-border-radius-topright: 5px; -moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px; }\n.popup a, .popup .button, .popup .tiddlyLinkExisting, .popup .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n.popup hr\n { color: #000; background: #ddd; border: 0; }\n.popup li.disabled\n { color: #999; }\n.popup li a, .popup li a:visited\n { color: #300; }\n.popup li a:hover\n { background: #006; color: #fff;}\n/*}}}*/\n\n/***\n!messageArea /%==================================================%/\n***/\n/*{{{*/\n#messageArea\n { font-size:90%; -moz-border-radius:1em; background:#eee; }\n/*}}}*/\n\n/***\n!main menu (left sidebar) /%==================================================%/\n***/\n/*{{{*/\n#mainMenu\n { width:9em; text-align:left; margin:0; margin-top:.5em; margin-left:1.5em; padding:0; }\n*[id="mainMenu"] /* moz browsers only */\n { width:auto !important; } \n/*}}}*/\n\n/***\n!sidebar (right sidebar) /%==================================================%/\n***/\n/*{{{*/\n#sidebar\n { width:18em; margin-right:1em; }\n#sidebarTabs .tab\n { font-size:90%; -moz-border-radius-topleft:.5em; -moz-border-radius-topright:.5em; }\n#sidebarTabs .tabContents\n { background:transparent; border:1px solid #999; padding:.5em; height:auto; overflow:auto; width:92.5%; }\n#sidebarTabs .tabContents .tabContents\n { background:transparent; border:1px solid #999; padding:.5em; height:auto; }\n#sidebarOptions input[type="text"]\n { font-size:8pt; }\n}\n*/\n/*}}}*/\n\n/***\n!tabs /%==================================================%/\n***/\n/*{{{*/\n.tabset\n { padding: 0.2em 0 0 0; }\n.tab\n { padding:0 1px 0 1px; }\n.tabSelected\n { border: 1px solid; border-bottom: 0px !important; margin-bottom:-2px !important; }\n.tabUnselected\n { border: 1px solid #999; }\n.tabContents\n { border: 1px solid; -moz-border-radius:1em; padding: 1em; }\n/*}}}*/\n\n/***\n!tiddler display elements /%==================================================%/\n***/\n/*{{{*/\n.tiddler\n { padding: 0 1em 1em 1em; }\n.button, .button:hover, .button:active,\n.viewer .button, .viewer .button:hover, .viewer .button:active\n { background:transparent; border:0; }\n.toolbar\n { float:right; display:inline; padding-bottom:0; }\n.toolbar .button\n { border:1px solid #69c; background:transparent; margin:0px 1px; padding:0px .2em; -moz-border-radius:.5em; }\n.toolbar .button:hover\n { border:1px solid #69c; background:#006; color:#fff; }\n.tagging, .tagged\n { background-color: #ccc; border: 1px solid; }\n.selected .tagging, .selected .tagged\n { background-color:#eee; border: 1px solid #999; }\n.tagging, .tagged\n { -moz-border-radius:1em; }\n.subtitle\n { font-size:90%; }\n.editor input, .editor textarea\n { font-size: 8pt;}\n.title\n { font-size: 12pt; line-height:120%; }\n.viewer\n { font-size: 9pt; padding: 0.7em; text-align:justify; }\n.viewer pre, .viewer code, .viewer blockquote\n { font-size:8pt; text-align:left; }\n.viewer pre \n { background:#ffe; border:1px solid; }\n.viewer table, .viewer table tr, .viewer table td\n { border:1px solid; }\n.viewer hr {\n margin: 1px; padding:1px;\n border:0;\n border-top: solid 1px #666;\n color: #666;\n}\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 1em;\n margin-left: 1em;\n border-left: 1px dotted;\n}\n/*}}}*/\n
/***\nThe following CSS declarations modify default style classes defined by various plugins and scripts, and/or used in customized Page/View/Edit templates\n\nThese 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.\n\n/***\n!PageTemplate - siteMenu \n***/\n/*{{{*/\n.siteMenu\n { background:transparent; padding:1em; }\n.siteMenu a, .siteMenu .button, .siteMenu .tiddlyLinkExisting, .siteMenu .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n/*** LEAVE THESE OUT FOR NOW\n.siteMenu .button, .siteMenu a\n { border:1px solid transparent; background:transparent; margin:0px; padding:0px 1px; -moz-border-radius:.5em; }\n.siteMenu .button:hover, .siteMenu a:hover\n { border:1px solid #69c; background:#006; color:#fff; }\n***/\n/*}}}*/\n\n/***\n!PageTemplate - storyMenu \n***/\n/*{{{*/\n.storyMenu\n { display:block; margin:0em 1em 0em 1em; }\n.storyMenu a, .storyMenu .button, .storyMenu .tiddlyLinkExisting, .storyMenu .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; text-decoration:none; }\n/*}}}*/\n\n/***\n!NestedSlidersPlugin \n***/\n/*{{{*/\n.floatingPanel\n { padding:1em; margin:0em; border:1px solid; -moz-border-radius:1em; font-size:8pt; text-align:left; }\n.floatingPanel hr\n { margin:2px 0 1px 0; padding:0; }\n#sidebarOptions .sliderPanel\n { margin:0; padding:0; font-size:1em; background:transparent; }\n#sidebarOptions .sliderPanel a\n { font-weight:normal; }\n#sidebarOptions .sliderPanel blockquote\n { margin:0;padding:0;margin-left:1em; border-left:1px dotted; padding-left:1em }\n/*}}}*/\n\n/***\n!CheckboxPlugin \n***/\n/*{{{*/\ninput[type="Checkbox"]\n { margin-top:2px;margin-bottom:2px; }\n/*}}}*/\n\n/***\n!BreadcrumbsPlugin \n***/\n/*{{{*/\n/* smaller size for bread crumbs (see BreadcrumbsPlugin) */\n#breadCrumbs\n { display:none; margin:0 1em; font-size:7pt; } /* display:block is set by plugin when crumbs are in use */\n/*}}}*/\n\n/***\n!TableOfContentsPlugin \n***/\n/*{{{*/\n#sidebarTabs .tabContents *[class="TOCList"] /* MOZ ONLY */\n { background-color: transparent; border-color:transparent !important; }\n/*}}}*/\n\n/***\n!AttachFilePlugin \n***/\n/*{{{*/\n#sidebar .attachPanel\n { right:115%; top:3em; text-align:left; }\n/*}}}*/\n\n/***\n!ImportTiddlersPlugin \n***/\n/*{{{*/\n#sidebar #importPanel\n { right:115%; top:6em; text-align:left; }\n/*}}}*/\n\n/***\n!ExportTiddlersPlugin \n***/\n/*{{{*/\n#sidebar #exportPanel\n { right:115%; top:9em; text-align:left; }\n/*}}}*/\n
/*{{{*/\n@media print {\n\n#mainMenu, #sidebar, #messageArea, .toolbar, .tagged, .tagging, .subtitle, .header\n {display: none !important;}\n#breadCrumbs, #siteMenu, #storyMenu\n { display:none !important; }\n#displayArea\n { margin: 1em !important; }\nnoscript /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */\n { display:none; }\n.tiddler\n { page-break-after:always; }\n/*****\nuse this for 3x5 index cards:\n.tiddler { height:3in !important; width:5in !important; overflow:none !important; }\n*****/\n\n}\n/*}}}*/
/***\nThe following CSS declarations provide quick shortcuts for common formatting styles\n\nThese 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.\n\n***/\n/*{{{*/\n\n/* text alignments */\n.left\n { display:block;text-align:left; }\n.floatleft\n { float:left; }\n.right \n { display:block;text-align:right; }\n.floatright\n { float:right; }\n.center\n { display:block;text-align:center; }\n.wrap\n { white-space:normal }\n.nowrap\n { white-space:nowrap }\n\n/* font sizes */\n.big\n { font-size:14pt;line-height:120% }\n.medium\n { font-size:12pt;line-height:120% }\n.normal\n { font-size:9pt;line-height:120% }\n.small\n { font-size:8pt;line-height:120% }\n.fine\n { font-size:7pt;line-height:120% }\n.tiny\n { font-size:6pt;line-height:120% }\n.larger\n { font-size:120%; }\n.smaller\n { font-size:80%; }\n\n/* borderless tables */\n.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody\n { border:0 !important; margin:0 !important; padding:0 !important; }\n\n/* thumbnail images (fixed-sized scaled images) */\n.thumbnail img { height:5em !important; }\n\n/* grouped content */\n.outline\n { display:block; padding:1em; -moz-border-radius:1em; border:1px solid; }\n.menubox\n { display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#fff; color:#000; }\n.menubox a, .menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting\n { color:#009 !important; }\n.groupbox\n { display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#ffe; color:#000; }\n.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting\n { color:#009 !important; }\n.indent\n { margin:0;padding:0;border:0;margin-left:.5em; }\n.borderleft\n { margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }\n.borderright\n { margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }\n.borderbottom\n { margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }\n.bordertop\n { margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }\n\n/* compact form */\n.smallform\n { white-space:nowrap; }\n.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select\n { font-size:8pt; }\n\n/* colors */\n.green { color:#6f6 !important }\n.red { color:#f66 !important }\n.blue { color:#99f !important }\n\n/*}}}*/
----\nDie Hauptklassen sind die für ~JavaView typischen Konstrukte. Eine Klasse für das Applet, eine für das Projekt an sich, sowie eine weitere für die Steuerung.\nDie eigentliche Implementierung findet sich in der abstrakten Klasse //~AbstractFieldAlgorithm//, welche von allen implementierten Algorithmen geerbt wird und nur die wichtigsten Methoden überschreibt. Die //~FieldAlgorithmFactory// bietet einen komfortablen Zugriff auf die einzelnen Algorithmen und setzt praktische Standardwerte. Die umliegende Box, Farbe der Vektoren, Kamera, etc. werden in der Projektklasse //~VectorFields3DProject// definiert.\n\n* [[Source|SciVis_source.jar]] (JAR download)\n* [[JavaDoc|javadoc/index.html]] (neues Fenster)\n\n[img[UML|pictures/uml_small.png][pictures/uml.png]]\n
<script label="show/hide left sidebar">\n var show=document.getElementById('mainMenu').style.display=='none';\n if (!show) {\n document.getElementById('mainMenu').style.display='none';\n var margin='1em';\n }\n else {\n document.getElementById('mainMenu').style.display='block';\n var margin=config.options.txtDisplayAreaLeftMargin?config.options.txtDisplayAreaLeftMargin:"";\n }\n place.innerHTML=(show?"&lt;&lt;&lt;":"&gt;&gt;&gt;"); // SET LINK TEXT\n place.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n document.getElementById('displayArea').style.marginLeft=margin;\n config.options.chkShowLeftSidebar=show;\n saveOptionCookie('chkShowLeftSidebar');\n var sm=document.getElementById("storyMenu"); if (sm) config.refreshers.content(sm);\n return false;\n</script><script>\n if (config.options.chkShowLeftSidebar==undefined)\n config.options.chkShowLeftSidebar=true;\n if (!config.options.txtDisplayAreaLeftMargin||!config.options.txtDisplayAreaLeftMargin.length)\n config.options.txtDisplayAreaLeftMargin="12em";\n var show=config.options.chkShowLeftSidebar;\n document.getElementById('mainMenu').style.display=show?"block":"none";\n document.getElementById('displayArea').style.marginLeft=show?config.options.txtDisplayAreaLeftMargin:"1em";\n place.lastChild.innerHTML=(show?"&lt;&lt;&lt;":"&gt;&gt;&gt;"); // SET LINK TEXT\n place.lastChild.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n place.lastChild.style.fontWeight="normal";\n</script>
<<option chkHttpReadOnly>><script>\n var chk=place.lastChild;\n chk.style.margin=chk.style.padding="0";\n chk.id="ToggleReadOnly_checkbox";\n chk.title="enable/disable TiddlyWiki editing functions";\n chk.checked=readOnly;\n chk.coreOnChange=chk.onchange;\n chk.onchange=function() {\n if (this.coreOnChange) this.coreOnChange();\n readOnly=!readOnly;\n this.checked=readOnly;\n story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});\n refreshDisplay();\n };\n</script><script label="read-only">\n place.previousSibling.onchange();\n</script><script>\n var s=place.lastChild.style; s.display="inline"; s.fontWeight="normal";\n</script>
<script label="show/hide right sidebar">\n var show=document.getElementById('sidebar').style.display=='none';\n if (!show) {\n document.getElementById('sidebar').style.display='none';\n var margin='1em';\n }\n else {\n document.getElementById('sidebar').style.display='block';\n var margin=config.options.txtDisplayAreaRightMargin?config.options.txtDisplayAreaRightMargin:"";\n }\n place.innerHTML=(show?"&gt;&gt;&gt;":"&lt;&lt;&lt;"); // SET LINK TEXT\n place.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n document.getElementById('displayArea').style.marginRight=margin;\n config.options.chkShowRightSidebar=show;\n saveOptionCookie('chkShowRightSidebar');\n var sm=document.getElementById("storyMenu"); if (sm) config.refreshers.content(sm);\n return false;\n</script><script>\n if (config.options.chkShowRightSidebar==undefined)\n config.options.chkShowRightSidebar=true;\n if (!config.options.txtDisplayAreaRightMargin||!config.options.txtDisplayAreaRightMargin.length)\n config.options.txtDisplayAreaRightMargin="17em";\n var show=config.options.chkShowRightSidebar;\n document.getElementById('sidebar').style.display=show?"block":"none";\n document.getElementById('displayArea').style.marginRight=show?config.options.txtDisplayAreaRightMargin:"1em";\n place.lastChild.innerHTML=(show?"&gt;&gt;&gt;":"&lt;&lt;&lt;"); // SET LINK TEXT\n place.lastChild.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP\n place.lastChild.style.fontWeight="normal";\n</script>
<script>\n if (config.options.chkScrollSidebars==undefined)\n config.options.chkScrollSidebars=true;\n if (!config.options.txtOuterTabHeight||!config.options.txtOuterTabHeight.length)\n config.options.txtOuterTabHeight="25em";\n if (!config.options.txtInnerTabHeight||!config.options.txtInnerTabHeight.length)\n config.options.txtInnerTabHeight="21em";\n\n var scroll=config.options.chkScrollSidebars||config.browser.isIE?'':'fixed'; // IE doesn't do 'fixed' position\n document.getElementById('mainMenu').style.position=scroll;\n document.getElementById('sidebar').style.position=scroll;\n\n // "short sheet" the SideBarTabs when sidebars are hovering (to hopefully fit "above the fold")\n var outer=config.options.chkScrollSidebars||config.browser.isIE?"auto":config.options.txtOuterTabHeight;\n var inner=config.options.chkScrollSidebars||config.browser.isIE?"auto":config.options.txtInnerTabHeight;\n var css='#sidebarTabs .tabContents { height:'+outer+'; overflow:auto; width:92.5%; }';\n css+='#sidebarTabs .tabContents .tabContents { height:'+inner+' !important; }';\n setStylesheet(css,'shortSidebarTabs');\n\n window.ToggleScrollingSidebars_setscroll = function() {\n if (config.browser.isIE) return; // IE doesn't support 'fixed' position\n document.getElementById('mainMenu').style.position=!config.options.chkScrollSidebars?'fixed':'';\n document.getElementById('sidebar').style.position=!config.options.chkScrollSidebars?'fixed':'';\n var outerTabHeight=config.options.txtOuterTabHeight;\n if (config.options.chkScrollSidebars) outerTabHeight="auto";\n var innerTabHeight=config.options.txtInnerTabHeight;\n if (config.options.chkScrollSidebars) innerTabHeight="auto";\n var css='#sidebarTabs .tabContents { height:'+outerTabHeight+'; overflow:auto; width:92.5%; }';\n css+='#sidebarTabs .tabContents .tabContents { height:'+innerTabHeight+' !important; }';\n setStylesheet(css,'shortSidebarTabs');\n }\n\n</script><<option chkScrollSidebars>><script>\n place.lastChild.checked=config.options.chkScrollSidebars;\n place.lastChild.onchange=function() {\n config.options.chkScrollSidebars=this.checked;\n saveOptionCookie("chkScrollSidebars");\n window.ToggleScrollingSidebars_setscroll();\n };\n</script> sidebars scroll with page
<script>\n window.toggleSiteMenu=function() {\n var m=document.getElementById('siteMenu'); \n if (!m) return true; // no sitemenu element... let event bubble through...\n var show=m.style.display=="none";\n m.style.display=show?"block":"none";\n config.options.chkHideSiteMenu=!show; saveOptionCookie('chkHideSiteMenu');\n var nodes = document.getElementsByTagName("input");\n for(var t=0; t<nodes.length; t++)\n if (nodes[t].getAttribute("option")=="chkHideSiteMenu") nodes[t].checked=show;\n var doDblclick=config.options.chkHideSiteMenu&&!config.options.chkShowRightSidebar;\n document.ondblclick=doDblclick?window.toggleSiteMenu:null;\n window.status=document.body.title=doDblclick?"double-click page background to display menubar":"";\n return false;\n };\n if (config.options.chkHideSiteMenu==undefined) config.options.chkHideSiteMenu=false;\n var m=document.getElementById('siteMenu'); \n m.style.display=config.options.chkHideSiteMenu?"none":"block";\n var doDblclick=config.options.chkHideSiteMenu&&!config.options.chkShowRightSidebar;\n document.ondblclick=doDblclick?window.toggleSiteMenu:null;\n window.status=document.body.title=doDblclick?"double-click page background to display menubar":"";\n</script><<option chkHideSiteMenu>><script>\n place.lastChild.id="ToggleSiteMenu_checkbox"\n place.lastChild.checked=!config.options.chkHideSiteMenu;\n place.lastChild.coreOnChange=place.lastChild.onchange;\n place.lastChild.onchange=function() {\n if (this.coreOnChange) this.coreOnChange();\n window.toggleSiteMenu();\n if (config.options.chkHideSiteMenu&&!config.options.chkShowRightSidebar) { \n clearMessage(); displayMessage("double-click page background to redisplay menubar")\n setTimeout("clearMessage()",3000); // EPHEMERAL "REMINDER" MESSAGE\n }\n };\n</script> show site menubar
<script>\n var c=document.getElementById('contentWrapper'); \n if (config.options.chkHideSiteTitles==undefined) config.options.chkHideSiteTitles=false;\n for (var i=0; i<c.childNodes.length; i++) if (hasClass(c.childNodes[i],"header")) var h=c.childNodes[i];\n h.style.display=config.options.chkHideSiteTitles?"none":"block";\n</script><<option chkHideSiteTitles>><script>\n place.lastChild.checked=!config.options.chkHideSiteTitles;\n place.lastChild.onchange=function() {\n var c=document.getElementById('contentWrapper'); \n for (var i=0; i<c.childNodes.length; i++) if (hasClass(c.childNodes[i],"header")) var h=c.childNodes[i];\n config.options.chkHideSiteTitles=!this.checked;\n h.style.display=config.options.chkHideSiteTitles?"none":"block";\n saveOptionCookie("chkHideSiteTitles");\n };\n</script> show site titles
<script> \n window.showTopButton=function(show) {\n // remove existing "top" button (if any)\n var e=document.getElementById("scrollToTopButton"); if (e) e.parentNode.removeChild(e);\n if (config.browser.isIE) return; // IE doesn't do FIXED... do nothing.\n if (!show) return; // hiding button... we're done.\n // create a link that scrolls to the top of page\n e=createTiddlyElement(null,"A",null,null,"top");\n e.id="scrollToTopButton";\n e.title="scroll to top of page";\n e.onclick=function(){window.scrollTo(0,0)};\n // make it hover in the bottom right corner of the window\n var s=e.style;\n s.position="fixed";\n s.zIndex="1001"; // hopefully, this will be on top of ALL other elements!\n s.bottom=".5em";\n s.right=".5em";\n s.cursor="pointer";\n s.backgroundColor="#eee";\n s.color="#009";\n s.border="1px solid";\n s.padding="0 1em";\n s.MozBorderRadius="1em";\n s.fontSize="7pt";\n document.body.insertBefore(e,null);\n }\n if (config.options.chkShowTopButton==undefined) config.options.chkShowTopButton=true;\n window.showTopButton(config.options.chkShowTopButton);\n</script><<option chkShowTopButton>><script>\n place.lastChild.onchange=function() {\n window.showTopButton(this.checked);\n config.options.chkShowTopButton=this.checked;\n saveOptionCookie("chkShowTopButton");\n };\n</script> "scroll-to-top" button
/***\n!!!!{{big{important information - please read carefully:}}}\n<<<\nThis stylesheet hides all TiddlyWiki standard toolbars, tags, titles, headers, menus, and sidebars, so that ONLY TIDDLER CONTENT is displayed. Combined with SinglePageModePlugin, this stylesheet allows you to construct and publish your TiddlyWiki documents using a more "conventional" website appearance and interaction pattern.\n\n''WARNING: After you select this stylesheet, you will most likely no longer have access to the "themes" droplist'' typically presented in the right sidebar options panel. The current stylesheet selection is stored in a cookie, called "txtStyleSheet". Each time you load the document, this stylesheet is automatically re-applied by the SelectStylesheetPlugin. ''This makes it very difficult to select a different stylesheet.''\n\n''To reset the stylesheet selection and restore the TiddlyWiki interface elements, you can use any of the following methods:''\n* append "#TotallyTiddlers" to the end of this document URL. This will automatically open THIS tiddler when you refresh your browser window so that you can select a different stylesheet from the SelectStylesheetPlugin droplist that has been embedded here for your convenience:\n{{center{please select a theme: <<selectStylesheet size:1 width:auto>>}}}\n* //or...// append "#style:~TiddlerName" to the end of this document URL, where //~TiddlerName// is the name of any installed stylesheet tiddler. This ''temporarily overrides'' the current stylesheet selection and applies the named stylesheet ''without changing the current cookie-tracked stylesheet preference''.\n* //or...// use your browser's "cookie-management" functions (if available) to manually remove the "txtStyleSheet" cookie. The next time your document is loaded, it will revert to the default stylesheet, "StyleSheet" (if present), restoring the display of the familiar ~TiddlyWiki features and functions.\n\nThe following 'init' tiddler is processed by SelectStylesheetPlugin, and forces this stylesheet tiddler to be automatically displayed whenever it is first applied (i.e., selected from the droplist), so that the ''important instructions'' included above will be shown. However, subsequent visits to the page are rendered without displaying the instructions again.\n{{{\n<<init TotallyTiddlersInit>>\n}}}\n<<<\n***/\n/*{{{*/\n/* hide tiddler functions, menus, and breadcrumbs */\n.tiddler .toolbar, .tiddler .tagged, .tiddler .tagging, .tiddler .subtitle, .header,\n#mainMenu, #breadCrumbs, #siteMenu, #storyMenu, #sidebar\n { display:none !important; }\n\n /* reclaim space left by sidebar and main menu*/\n#displayArea\n { margin:1em !important; }\n/*}}}*/\n
// // This script ensures that important instructions contained within the the TotallyTiddlers stylesheet are displayed whenever that stylesheet is selected. Note that this tiddler is automatically invoked by the SelectStylesheetPlugin and, although it contains javascript code, must NOT be tagged with<<tag systemConfig>>, as that would treat this script as a plugin to be invoked when the document is first loaded.\n//{{{\nif (document.getElementById("tiddlerDisplay")) {\n // only do this if display area is already showing...\n // ...prevents execution when document is loaded with TotallyTiddlers *already* selected\n story.displayTiddler(null,"Vector Fields 3D",1);\n window.scrollTo(0,0);\n}\n//}}}
Ausarbeitung im Rahmen der Vorlesung Scientific Visualization\nim Wintersemester 2005/06 von Markus Decke und Maximilian Schmidt\n\nIm Verlauf der Vorlesung wurde dieses Projekt geschaffen, welches Vektorfelder visualisiert, indem es Teilchenbewegungen innerhalb des Feldes darstellt.\n\n* [[Einleitung]]\n* [[Projektbeschreibung]]\n* [[Applet]]\n* [[Technische Dokumentation]]\n* [[Links]]
<!--{{{-->\n\n<span class='title' macro='view title'></span>\n\n<span class='toolbar' macro='toolbar +editTiddler sendTiddler permalink references jump'></span>\n<span class='toolbar' macro='tiddler TidIDECommand'></span>\n<span class='toolbar' macro='toolbar collapseTiddler collapseOthers closeTiddler closeOthers'></span>\n\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<!--}}}-->\n