[[Think Broadband|http://www.adslguide.org.uk/]]\n[[TT Speed Checker|https://myaccount.talktalk.co.uk/speed-checker/]]\n[[MTU Tweaking explained|http://www.kitz.co.uk/adsl/MTU2.htm]]\n[[Kitz|http://www.kitz.co.uk/adsl/adsl.htm]]\n[[Tweak Tester|http://www.dslreports.com/tweaks]] DSL Reports\n
[[Linux-HOWTO Accessibility|http://www.faqs.org/docs/Linux-HOWTO/Accessibility-Dev-HOWTO.html]]
//{{{\nconfig.macros.accordion={}\nconfig.macros.accordion.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var tiddler = story.findContainingTiddler(place);\n var btns = tiddler.getElementsByTagName("a");\n for (var i=0; i<btns.length; i++){\n var btn=btns[i];\n if (hasClass(btn,"sliderButton")){\n btn.old_onclick = btn.onclick;\n btn.onclick = function(e){\n this.old_onclick.apply(this,arguments);\n divs = tiddler.getElementsByTagName("div");\n for (var i=0; i<divs.length; i++){\n if(hasClass(divs[i],"sliderPanel")){\n if(divs[i]!=this.nextSibling)\n divs[i].style.display = "none";\n }\n }\n }\n }\n }\n}\n//}}}
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\n<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkToggleLinks>> Clicking on links to notes that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP\n<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\n^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> ConfirmBeforeDeleting \n Maximum number of lines in a note edit box: <<option txtMaxEditRows>> \n Folder name for backup files: <<option txtBackupFolder>> \n<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field\n<<option chkSinglePageMode>> Display one tiddler at a time\n<<option chkSinglePagePermalink>> Automatically permalink current tiddler\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page\n<<option chkBottomOfPageMode>> Always open tiddlers at the bottom of the page
<html>\n\n<head>\n<title>Amsler Grid Eye Chart Application</title>\n<style type="text/css">\n #image1 {position:absolute; left:400; top:120; width:30; z-index:2}\n #image2 {position:absolute; left:400; top:120; width:30; z-index:3}\n #image3 {position:absolute; left:400; top:120; width:30; z-index:4}\n #panel {position:absolute; left:550; top:50; width:200; z-index:5}\n #data {position:absolute; left:550; top:350; width:200; z-index:6}\n #instructions {position:absolute; left:5; top:10; width:185}\n</style>\n<script language="JavaScript1.2">\n<!--\n\n\n// JavaScript/JScript by Peter Kosenko -- kosenko@netwood.net\n\n// neither the Navigator resize handler from Brian nor the one from Webreference work\n// with this application\n\n \nvar isNav = false;\nvar isIE = false;\n\nvar dx = dy = 0; // differentials of the distance an object is dragged\nvar layerObjectArray = new Array();\nvar current = null; // the currently selected circle layer\nvar zIndexTop = 10; // zIndex of the currently selected circle layer\nvar currentIndex = 1; // array index of the currently selected circle layer, start with 1\n\n// query string variable initialization\n\nvar x1 = x2 = x3 = 0; // center x\nvar y1 = y2 = y3 = 0; // center y\nvar w1 = w2 = w3 = 0; // width\nvar h1 = h2 = h3 = 0; // height\n\n// grid coordinates\n// Explorer\n\nIEGridLeft = 206;\nIEGridRight =505;\nIEGridTop = 52;\nIEGridBottom = 345;\nIEGridCenterX = 355;\nIEGridCenterY = 199;\n\n// Navigator\n\nNavGridLeft = 211;\nNavGridRight = 510;\nNavGridTop = 58;\nNavGridBottom = 351;\nNavGridCenterX = 361;\nNavGridCenterY = 205;\n\n// Precache images\n\nvar object1 = new Image();\nvar object2 = new Image();\nvar object3 = new Image();\nobject1.src = "dot.gif";\nobject2.src = "dot.gif";\nobject3.src = "dot.gif";\n\n// object to store the current position of the circles\n// every time the location or size of a circle changes, a function needs\n// to call and change the data object for it\n\nfunction circleObject(x,y,w,h) {\n this.x = x; // center x\n this.y = y; // center y\n this.w = w; // width\n this.h = h; // height\n}\n\nvar circle = new Array;\ncircle[1] = new circleObject;\ncircle[2] = new circleObject;\ncircle[3] = new circleObject;\n\n// initializes circle data to 0 by brute force\n\ncircle[1].x = x1; circle[1].y = y1; circle[1].w = w1; circle[1].h = h1;\ncircle[2].x = x2; circle[2].y = y2; circle[2].w = w2; circle[2].h = h2;\ncircle[3].x = x3; circle[3].y = y3; circle[3].w = w3; circle[3].h = h3;\n\n\nvar queryString = window.location.search;\nvar queryElements = new Array; // "name=value" pair array\nvar queryElementIndex = 0;\n\n// END OF GLOBAL VARIABLES -- JS FUNCTIONS BELOW MAY BE SHIFTED TO A .JS FILE\n\nfunction readQueryString() {\n\n // function is called in init() if queryString exists\n // grab the query string if it exists and parse into name=value pairs\n // and assign values to x, y, w, and h variables\n\n var andPos = 0; // position of "&" in the string\n queryString = queryString.substring(1, queryString.length); // drop "?"\n while (queryString.indexOf("&") != -1) { // loop while "&" remains\n andPos = queryString.indexOf("&");\n queryElements[queryElementIndex] = queryString.substring(0, andPos);\n queryString = queryString.substring(andPos + 1, queryString.length);\n queryElementIndex++;\n }\n queryElements[queryElementIndex] = queryString; // catch last element\n for (var i = 0; i < queryElements.length; i++) {\n var equalPos = queryElements[i].indexOf("=");\n var elementName \n = queryElements[i].substring(0, equalPos);\n var elementValue \n = cleanUp(queryElements[i].substring(equalPos + 1, queryElements[i].length));\n eval("" + elementName + "=\s"" + elementValue + "\s"");\n }\n for (var i = 1; i <= queryElements.length/4; i++) {\n\n // put data in circle objects 1 to 3\n // sets only as many as data exists for in the query string\n\n eval("circle[" + i + "].x = x" + i); \n eval("circle[" + i + "].y = y" + i);\n eval("circle[" + i + "].w = w" + i);\n eval("circle[" + i + "].h = h" + i);\n }\n}\n\nfunction cleanUp(s) {\n\n // Replaces + with space, and unescapes the resulting string.\n // Is not technically necessary in this application, but is part\n // of the generic query string grabber. So keep in.\n\n var returnString = "";\n for (var i = 0; i < s.length; i++) {\n c = s.charAt(i);\n if (c == "+") c = " ";\n returnString += c;\n }\n return unescape(returnString);\n}\n\n\nfunction setLayersFromQuery () {\n\n // function is called in init() if queryString exists\n\n for (var i = 1; i <= queryElements.length/4; i++) {\n // left is x minus half image width\n // top is y minus half image height\n var layerName = "image" + i; // id of the image layer\n if (isNav) current = document.layers[layerName];\n if (isIE) current = eval("" + layerName + ".style");\n currentIndex = i;\n var left = eval("x"+i) - eval("w"+i)/2;\n var top = eval("y"+i) - eval("h"+i)/2;\n var circleWidth = eval("w" + i);\n var circleHeight = eval("h" + i);\n if (isNav) {\n current.left = left;\n current.top = top;\n current.document.write("<img src=\s"dot.gif\s" width=\s"" +\n circleWidth + "\s" height=\s"" + circleHeight +\n "\s" border=\s"0\s">");\n current.document.close();\n current.visibility = "show";\n }\n if (isIE) {\n current.pixelLeft = left;\n current.pixelTop = top;\n current.innerHTML = "<img name=\s"object" + currentIndex + "\s" id=\s"object" \n + currentIndex + "\s" src=\s"dot.gif\s" width=\s"30\s" height=\s"30\s""\n + "border=\s"0\s">";\n current.visibility = "visible";\n document.images[currentIndex-1].width = circleWidth;\n document.images[currentIndex-1].height = circleHeight;\n }\n }\n}\n\nfunction setCircleData() {\n\n var w, h, image;\n if (isNav) image = current.document.images[0];\n if (isIE) image = document.images[currentIndex-1];\n circle[currentIndex].w = w = image.width;\n circle[currentIndex].h = h = image.height;\n if (isNav) {\n circle[currentIndex].x = current.left + w/2;\n circle[currentIndex].y = current.top + h/2;\n }\n if (isIE) {\n circle[currentIndex].x = current.pixelLeft + w/2;\n circle[currentIndex].y = current.pixelTop + h/2;\n window.event.cancelBubble = true;\n }\n}\n\nfunction resizeCircle(ds) {\n\n// alert(circle[currentIndex].w);\n\n // sizes circle up or down by ds pixels\n // circleWidth same as layer width\n // circleHeight same as layer height\n // hidden circles off the grid must not be effected by events\n\n var circleWidth, circleHeight;\n if (isNav) {\n if (current.visibility == "show") {\n circleWidth = current.document.images[0].width + ds;\n circleHeight = current.document.images[0].height + ds;\n } else {\n\n // default 30 x 30 if hidden off grid\n\n circleHeight = 30;\n circleWidth = 30;\n }\n\n current.document.write("<img src=\s"dot.gif\s" width=\s"" \n + circleWidth + "\s" height=\s"" + circleHeight + "\s" border=\s"0\s">");\n if (ds > 0) { // larger\n current.moveBy(-ds+1,-ds+1);\n } else { // smaller\n current.moveBy(-ds-1,-ds-1);\n }\n current.document.close();\n setCircleData();\n if (current.visibility == "show") {\n displayCircleData();\n \n }\n }\n if (isIE) {\n\n // currentIndex is 1 to 3\n // document.images[i] is 0 to 2\n\n div = eval("image" + currentIndex);\n if (current.visibility == "visible") {\n var circleWidth = document.images[currentIndex-1].width + ds;\n var circleHeight = document.images[currentIndex-1].height + ds;\n } else {\n\n // default 30 x 30 size if hidden off grid\n\n var circleWidth = 30;\n var circleHeight = 30;\n }\n if (circleWidth >= 8 || circleWidth <= 294) { // min & max sizes\n\n div.innerHTML = "<img name=\s"object" + currentIndex + "\s" id=\s"object" \n + currentIndex + "\s" src=\s"dot.gif\s" width=\s"" \n + circleWidth + "\s" height=\s"" + circleHeight\n + "\s" border=\s"0\s">";\n\n // keep center aligned\n\n if (ds > 0) { // larger\n current.pixelTop += -1;\n current.pixelLeft += -1;\n } else { // smaller\n current.pixelLeft += 1;\n current.pixelTop += 1;\n }\n setCircleData();\n if (current.visibility == "visible") {\n displayCircleData();\n }\n }\n window.event.cancelBubble = true;\n }\n}\n\nfunction displayCircleData() {\n\n var position = "" + circle[currentIndex].x + "," + circle[currentIndex].y;\n var size = "" + circle[currentIndex].w + "," + circle[currentIndex].h;\n if (isNav) {\n var layer = document.layers["data"];\n layer.document.write("<p align=\s"left\s">Position (center x,y): " + position +\n "<br>Size (width, height): " + size + "</p>");\n layer.document.close();\n }\n if (isIE) {\n data.innerHTML = "<p align=\s"left\s">Position (center x,y): " + position +\n "<br>Size (width, height): " + size + "</p>";\n }\n}\n\nfunction adjustCircle(dx,dy) {\n if (isNav) {\n current.moveBy(dx,dy);\n }\n if (isIE && current.visibility == "visible") {\n // without visibility check hidden circles continue to move\n current.pixelLeft += dx;\n current.pixelTop += dy;\n window.event.cancelBubble = true;\n }\n setCircleData();\n displayCircleData();\n hideIfOffGrid();\n}\n\nfunction hideIfOffGrid(){\n if (isNav) {\n if ( (current.left + circle[currentIndex].w < NavGridLeft) ||\n (current.top + circle[currentIndex].h < NavGridTop) ||\n (current.left > NavGridRight) ||\n (current.top > NavGridBottom) ) {\n current.visibility = "hide";\n\n // resize circle to default of 30 x 30\n\n var ds = 30 - current.document.images[0].width;\n resizeCircle(ds);\n\n // remove data display\n\n var layer = document.layers["data"];\n layer.document.write("<p align=\s"left\s">Position (center x,y): " + \n "<br>Size (width, height): </p>");\n layer.document.close();\n }\n }\n if (isIE) {\n\n\n if ( current.pixelLeft + circle[currentIndex].w < IEGridLeft ||\n current.pixelTop + circle[currentIndex].h < IEGridTop ||\n current.pixelLeft > IEGridRight ||\n current.pixelTop > IEGridBottom ) {\n current.visibility = "hidden";\n var ds = 30 - document.images[currentIndex - 1].width;\n resizeCircle(ds);\n data.innerHTML = "<p align=\s"left\s">Position (center x,y): " + \n "<br>Size (width, height): </p>";\n }\n window.event.cancelBubble = true;\n }\n}\n\n\nfunction newCircle() {\n\n for (var i=1; i <= 3 ; i++) {\n if (isNav) {\n if (layerObjectArray[i].visibility == "hide") {\n layerObjectArray[i].moveTo(NavGridCenterX - 15, NavGridCenterY - 15);\n layerObjectArray[i].visibility = "show";\n current = layerObjectArray[i]; // now available for events\n currentIndex = i;\n setCircleData();\n displayCircleData();\n break;\n }\n }\n if (isIE) {\n current = eval("image" + i + ".style");\n if (current.visibility == "hidden") {\n current.pixelTop = IEGridCenterY - 15;\n current.pixelLeft = IEGridCenterX - 15;\n current.visibility = "visible";\n currentIndex = i;\n break;\n }\n window.event.cancelBubble = true;\n }\n setCircleData();\n displayCircleData();\n }\n}\n\nfunction setQueryString() {\n\n // Explorer does not set the query string off line\n\n var queryString = "?";\n for (var i = 1; i <= 3; i++) {\n\n var elementName = "image" + i;\n var add = false;\n \n // Do not add hidden layers\n\n if (isNav && document.layers[elementName].visibility == "show") {\n add = true;\n }\n if (isIE && eval(elementName + ".style.visibility = \s"visible\s"")) {\n add = true;\n window.event.cancelBubble = true;\n }\n if (add) {\n queryString += "x" + i + "=" + circle[i].x +\n "&y" + i + "=" + circle[i].y +\n "&w" + i + "=" + circle[i].w +\n "&h" + i + "=" + circle[i].h;\n queryString += "&"; // separator between circle data\n }\n add = false; // reset flag\n }\n // subtract last "&"\n queryString = queryString.substring(0, queryString.length-1);\n document.location.href = "amsler_response.html" + queryString;\n}\n\nfunction init() {\n\n // only NN4 or IE4 and above\n\n if (parseInt(navigator.appVersion) >= 4) {\n \n // Determine browser\n\n if (navigator.appName.indexOf("Netscape") != -1) {\n isNav = true;\n } else if (navigator.appName.indexOf("Microsoft") != -1) {\n isIE = true;\n } \n } else {\n alert("You are using a browser other than Netscape Communicator 4.0" +\n " or Internet Explorer 4.0 or above that will not run Dynamic HTML" +\n " applications. Hence we will be sending you to a more browser-" +\n "appropriate page.");\n // should be a static amsler grid page for printing and mailing\n document.location.href = "amsler4.html";\n }\n \n if (isNav || isIE) {\n // Set layer objects\n makeLayerObjects("data", "image1", "image2", "image3");\n }\n\n if (isNav) {\n\n // Event Capturing for Navigator\n\n document.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.KEYDOWN);\n\n }\n \n if (isNav || isIE) {\n document.onmousedown = processEvent;\n document.onmouseup = endDrag;\n document.onkeydown = keyPress;\n\n }\n\n if (isIE) {\n\n // initialize circle display for Explorer\n\n image1.style.visibility = "hidden";\n image2.style.visibility = "hidden";\n image3.style.visibility = "hidden";\n currentIndex = 1;\n current = image1.style;\n newCircle();\n\n // a kludge to get the window to set, to cure a bug\n // Explorer 4.0 shifts grid 4 pixels right when first resize occurs\n // Ask Microsoft why; it shouldn't be happening\n\n resizeCircle(2);\n resizeCircle(-2);\n\n setCircleData();\n displayCircleData();\n }\n\n\n if ((isNav || isIE) && queryString != "") {\n readQueryString();\n setLayersFromQuery();\n }\n}\n\nfunction keyPress(e) {\n\n // Note that Explorer and Navigator have different keycodes\n // Explorer interprets all key events as ASCII caps apparently\n // "show" tests for Navigator; "visible" tests for Explorer\n \n var key;\n if (isNav) key = e.which;\n if (isIE) key = event.keyCode + 32; // Explorer keyCode is 32 less than Navigator\n switch(key) {\n case 110: // n\n newCircle();\n break;\n case 120: // x larger\n if (current.visibility == "show" || current.visibility == "visible") {\n // make larger only if less than 294 pixels wide\n if (circle[currentIndex].w < 294) {\n resizeCircle(2);\n }\n }\n break;\n case 122: // z smaller\n if (current.visibility == "show" || current.visibility == "visible") {\n // make smaller only if greater than 10 pixels wide\n if (circle[currentIndex].w > 10) {\n resizeCircle(-2);\n }\n }\n break;\n case 101: // e\n if (current.visibility == "show" || current.visibility == "visible") {\n adjustCircle(0,-1);\n }\n break;\n case 99: // c\n if (current.visibility == "show" || current.visibility == "visible") {\n adjustCircle(0,1);\n }\n break;\n case 115: // s\n if (current.visibility == "show" || current.visibility == "visible") {\n adjustCircle(-1,0);\n }\n break;\n case 102: // f\n if (current.visibility == "show" || current.visibility == "visible") {\n adjustCircle(1,0);\n }\n break; \n }\n}\n\nfunction makeLayerObjects() {\n\n // default at initialization is one circle visible at center\n if (isNav) {\n for (var i = 0; i < makeLayerObjects.arguments.length; i++) {\n layerObjectArray[i] = document.layers[makeLayerObjects.arguments[i]];\n layerObjectArray[i].visibility = "hide"; // first hide all\n }\n current = layerObjectArray[1]; // image1 is immediately sizable and movable\n layerObjectArray[0].visibility="show"; // show data layer\n }\n currentIndex = 1;\n newCircle(); // put a circle in the center, currentIndex will be 1\n setCircleData();\n displayCircleData();\n}\n\nfunction processEvent(e) {\n\n // was formerly startDrag(e) and still includes the start of\n // drag and drop functionality--but now other things as well\n\n\n var found = false;\n var i = layerObjectArray.length;\n\n if (isNav) {\n\n// document.layers["data"].document.write("" + e.pageY); // for detecting coordinates\n\n var target = e.target.name;\n var zIndexFound = 0;\n var objFound = 0;\n\n // Since we have captured Mousedown, take different actions\n // depending on what the mouse clicked or where it clicked.\n // But circles hidden off the grid should not be affected.\n\n if (target == "newcircle") {\n newCircle();\n } else if (target == "larger" && current.visibility == "show") {\n // make large only if less than 294 pixels wide\n if (circle[currentIndex].w < 294) {\n resizeCircle(2);\n }\n } else if (target == "smaller" && current.visibility == "show") {\n // make smaller only if greater than 10 wide\n if (circle[currentIndex].w > 10) {\n resizeCircle(-2);\n }\n } else if (target == "up" && current.visibility == "show") {\n adjustCircle(0,-1);\n } else if (target == "down" && current.visibility == "show") {\n adjustCircle(0,1);\n } else if (target == "left" && current.visibility == "show") {\n adjustCircle(-1,0);\n } else if (target == "right" && current.visibility == "show") {\n adjustCircle(1,0);\n } else if (target == "reset") {\n document.location.reload();\n } else if (target == "submit") {\n setQueryString();\n } else if ( e.pageX > NavGridRight ||\n e.pageX < NavGridLeft ||\n e.pageY < NavGridTop ||\n e.pageY > NavGridBottom ) {\n\n // click falls outside of grid\n // simply don't respond, except to named targets above\n\n } else {\n \n while ((i > 0)) { // backwards loop: 3, 2, 1 but not data layer\n i--;\n var obj = layerObjectArray[i];\n\n // check which dot has been clicked if any\n\n if ((e.pageX > obj.left) && \n (e.pageX < obj.left + obj.clip.width) &&\n (e.pageY > obj.top) &&\n (e.pageY < obj.top + obj.clip.height)) {\n \n // reset zIndex to top\n\n if (obj.zIndex > zIndexFound) {\n found = true;\n objFound = i;\n zIndexFound = obj.zIndex;\n }\n }\n }\n\n if (found) {\n current = layerObjectArray[objFound];\n currentIndex = objFound; // global\n \n dx = e.pageX - current.left;\n dy = e.pageY - current.top;\n \n // move the layer/object to the top\n\n zIndexTop++;\n current.zIndex = zIndexTop;\n\n // Event-Capturing\n document.captureEvents(Event.MOUSEMOVE);\n document.onmousemove = drag;\n return false;\n }\n }\n\n }\n\n if (isIE) {\n\n\n var e = window.event;\n var obj = window.event.srcElement; // source element is the image\n\n// data.innerHTML = "" + e.clientY; // for detecting coordinates\n\n if (obj.name == "newcircle") {\n newCircle();\n } else if (obj.name == "larger") {\n // make larger only if less than 294 wide\n if (circle[currentIndex].w < 294) {\n resizeCircle(2);\n }\n } else if (obj.name == "smaller") {\n // make smaller only if greater than 10 wide\n if (circle[currentIndex].w > 10) {\n resizeCircle(-2);\n }\n } else if (obj.name == "up") {\n adjustCircle(0,-1);\n } else if (obj.name == "down") {\n adjustCircle(0,1);\n } else if (obj.name == "left") {\n adjustCircle(-1,0);\n } else if (obj.name == "right") {\n adjustCircle(1,0);\n } else if (obj.name == "reset") {\n document.location.reload();\n } else if (obj.name == "submit") {\n setQueryString();\n } else if (obj.parentElement.id.indexOf("image") != -1) {\n\n // event target is an image\n // parent is an image-containing DIV element\n // current is not initialized for IE without an event\n\n current = obj.parentElement.style; // this is the DIV css\n\n // we need the "currentIndex" of the selected DIV container\n \n currentIndex = parseInt(obj.parentElement.id.substring(5,6));\n\n // Note: the following presume a fixed window\n // Otherwise scrollTop and scrollLeft would need to be added\n\n \n if ( e.clientX > IEGridRight ||\n e.clientX < IEGridLeft ||\n e.clientY < IEGridTop ||\n e.clientY > IEGridBottom ) {\n\n // click outside grid; do nothing \n\n window.event.cancelBubble = true;\n\n } else {\n\n obj.style.cursor = "hand"; // hand cursor over grid\n\n dx = window.event.clientX - current.pixelLeft;\n dy = window.event.clientY - current.pixelTop;\n \n // move the layer/object to the top\n\n zIndexTop++;\n current.zIndex = zIndexTop;\n\n // form always above by one index\n\n document.all.panel.style.zIndex = zIndexTop + 1;\n \n document.onmousemove = drag;\n// window.event.cancelBubble = true; // prevent bubbling of event\n return false;\n }\n }\n }\n\n // user has not clicked an object\n\n// current = null;\n return false;\n}\n\nfunction drag(e) {\n if (current != null) {\n\n if (isNav) {\n\n // layer follows mouse movement\n\n current.top = e.pageY - dy;\n current.left = e.pageX - dx;\n }\n if (isIE) {\n current.pixelTop = window.event.clientY - dy;\n current.pixelLeft = window.event.clientX - dx;\n }\n\n }\n\n return false;\n}\n\nfunction endDrag(e) {\n if (isNav) {\n\n document.releaseEvents(Event.MOUSEMOVE);\n\n // display new location\n\n if (current.visibility == "show") {\n // without visibility check hidden circle data redisplays\n setCircleData();\n displayCircleData();\n }\n }\n if (isIE) {\n\n if (current.visibility == "visible") {\n setCircleData();\n displayCircleData();\n }\n }\n\n\n // if dragged off the grid, images disappear\n\n hideIfOffGrid();\n\n document.onmousemove = null;\n// current = null;\n return false;\n}\n\n\n//-->\n</script>\n</head>\n\n<body topmargin="0" leftmargin="0" onLoad="init()">\n\n<div id="image1">\n<img name="object1" id="object1" src="dot.gif" width="30" height="30" border="0">\n</div>\n<div id="image2">\n<img name="object2" id="object2" src="dot.gif" width="30" height="30" border="0">\n</div><div id="image3">\n<img name="object3" id="object3" src="dot.gif" width="30" height="30" border="0">\n</div>\n\n\n\n<MAP NAME="amsler" ID="grid"><AREA SHAPE="RECT" COORDS="0, 0, 300, 294" HREF="javascript:void(0)"></MAP><img src="amsler_grid.GIF" alt="Amsler Grid" border="0" width="300"\nheight="294" style="position:absolute; float: none; margin-left: 200px; margin-top: 50px"usemap="#amsler">\n\n<div id="instructions">\n<p>Amsler Eye Grid<br><br>\nInstructions<br>\n<font face="Arial" size="2">1. Move circles around the grid by clicking on them and dragging and dropping them with\nyour mouse.<br>\n2. Drag circles off the grid to get rid of them.<br>\n3. Press the &quot;New Circle&quot; button to add a circle to the center of the grid.<br>\n4. Use the &quot;Position Adjustment&quot; buttons (or keys) to make minor adjustments.<br>\n5. Use the &quot;Larger&quot; or &quot;Smaller&quot; buttons (or keys) to enlarge the last\ncircle that you have selected with your mouse.<br>\n6. When you have adjusted all elements, click the &quot;Submit&quot; button to send your\ndata.<br>\n7. If you wish to start over, use the &quot;Reset&quot; button.</font></p>\n</div>\n\n<div name="panel" id="panel">\n<form method="POST" name="form1" action="amsler4.html">\n <p align="center"><input type="button" id="newcircle" value="New Circle" name="newcircle"> n </p>\n<table border="0" cellspacing="0" align="center">\n <tr>\n <td width="33%" valign="top" align="center"></td>\n <td width="33%" valign="top" align="center"> e <br><input type="button" id="up" name="up" value="Up"></td>\n <td width="34%"></td>\n </tr>\n <tr>\n <td width="33%" valign="middle">s <input type="button" id="left" name="left" value="Left"></td>\n <td width="33%" valign="middle" align="center"><img src="arrows.gif" width="53"\n height="48" alt="Position Adjustments"></td>\n <td width="34%" valign="middle" align="center"><input type="button" id="right" name="right" value="Right"> f </td>\n </tr>\n <tr>\n <td width="33%"></td>\n <td width="33%" valign="top" align="center"><input type="button" id="down" name="down" value="Down"><br> c </td>\n <td width="34%"></td>\n </tr>\n</table>\n\n<p align="center"><input type="button" id="larger" value=" Larger " name="larger"> x \n <input type="button" id="smaller" name="smaller" value="Smaller"> z <br><br>\n<input type="button" id="submit" name="submit" value="Submit">\n <input type="reset" id="reset" name="reset" value="Reset"></p>\n</form>\n</div>\n\n<div id="data">\n<p align="left">Position (center x,y):<br>\nSize (width, height):</p>\n</div>\n\n\n</body>\n</html>\n
/***\n|Name|AnswerMacro|\n|Source|http://luceatlux.net/macros/answer/index.html|\n|Version|1.2|\n|Author|''George C Brackett'' (http://luceatlux.com/gcb/) <br />//with major contributions from//<br />''Paulo Soares''|\n|License|GPL|\n|~CoreVersion|1.2|\n|Type|macro|\n|Requires||\n|Overrides||\n|Description|displays answers and feedback for online questions|\n\nThis alternative to the {{{<<slider>>}}} plugin\n*displays an answer or other feedback either\n**inserted in content like the standard slider or\n**floated above existing tiddler content on a panel\n*provides default feedback for correct and incorrect responses\n*uses no cookies to remember its open or closed state; defaults to closed, so a new user on a shared machine always gets hidden answers\n*offers three interfaces\n**the standard tiddlybutton\n**checkboxes for questions with multiple correct answers\n**radio buttons for questions with a single correct answer\n*provides option to display default feedback plus a tiddler button for more information [NEW in v1.2]\n\n!!Syntax\nThe AnswerMacro has four parameters; most are optional:\n//{{{\n<<answer [type[^]] (id) [text] [label]>>\n//}}}\nParameters (separated by spaces):\n*type\n**"T" (tiddlybutton),\n**"S" (single-answer radio button group), \n**"M" (multiple answer checkbox), \n**Append "^" for floating panel (e.g., T^, S^, M^)\n** default is "M^"\n*id\n**required for type S only\n**assign same value for all radio buttons in the group; value must be unique across all tiddlers\n*text: \n**text:"TheTiddler" (display text from tiddler named "TheTiddler"),\n**text:"OK" (display config.macros.answer.rightAnswer)\n**text:"NO" (display config.macros.answer.wrongAnswer\n**text:"OK+TheTiddler" (display config.answer.rightAnswer + tiddlybutton labeled config.macros.answer.okButton that reveals "TheTiddler"\n**text:"NO+TheTiddler" (display config.answer.wrongAnswer + tiddlybutton labeled config.macros.answer.noButton) that reveals "TheTiddler"\n**default is text:"NO"\n*label:\n**label:"Button Label" (set label on tiddlybutton to "Button Label"),\n**default is config.macros.answer.label\n\nDefaults: (to change, edit config.macro.answer.)\n*wrongAnswer: "Incorrect answer. Please think again.", \n*rightAnswer: "That's correct!"\n*okButton: "explanation"\n*noButton: "hint"\n*label: "Answer"\n\n!!Usage\n!!!!Example 1 - A checkbox revealing a standard wrong answer (two ways), a standard wrong answer with tiddlybutton to a hint, a standard right answer, a standard right answer with tiddlybutton to a solution, and the tiddler Q1A, each on a floating panel\n//{{{\n<<answer>> A wrong answer <<answer text:"NO">> A wrong answer\n<<answer text:"NO+Q1H">> Another wrong answer\n<<answer text:"OK">> A correct answer\n<<answer text:"OK+Q1S">> Another correct answer\n<<answer text:"Q1A">> Yet another correct answer\n//}}}\n><<answer>> A wrong answer <<answer text:"NO">> A wrong answer\n><<answer text:"NO+Q1H">> Another wrong answer\n><<answer text:"OK">> A correct answer\n><<answer text:"OK+Q1S">> Another correct answer\n><<answer text:"Q1A">> Yet another correct answer\n\n!!!!Example 2 - A radio button revealing standard wrong answer, a standard right answer, and a wrong-with-hint tiddler on floating panel\n//{{{\n<<answer S^ id="Q1">> A wrong answer\n<<answer S^ id="Q1" text:"OK">> A correct answer\n<<answer S^ id="Q1" text:"NO+Q1H">> An incorrect answer\n//}}}\n><<answer S^ id="Q1">> A wrong answer\n><<answer S^ id="Q1" text:"OK">> A correct answer\n><<answer S^ id="Q1" text:"NO+Q1H">> An incorrect answer\n\nBecause sliders push everything after them downscreen, it's not a good idea to use radio buttons with sliders. Example:\n\n>The United States is a world leader in reducing carbon dioxide emissions.\n><<answer S id="Q1">> True\n><<answer S id="Q1" text:"OK">> False\n\n!!!!Example 3 - A tiddlybutton labeled "solution" revealing tiddler Q1S as a slider\n//{{{\n<<answer T text:"Q1S" label:"solution">>\n//}}}\n>Question 1: What is the answer to this problem?\n> ''A'' one answer\n> ''B'' another answer\n> ''C'' a third answer\n>\n><<answer T text:"Q1S" label:"solution">>\n\n!!!!Example 4 - Tiddly buttons revealing standard wrong answer and standard right answer on a floating panel\n//{{{\n<<answer T^ label:"Always">> <<answer T^ label:"Sometimes">> <<answer T^ text:"OK" label:"Never">>\n//}}}\n>When is it correct to wear a hat indoors?\n><<answer T^ label:"Always">> <<answer T^ label:"Sometimes">> <<answer T^ text:"OK" label:"Never">>\n\n!!Notes\n#Notice that it's easy (by writing wrong-answer tiddlers) to give a specific response to each wrong answer, or responses that offer hints, etc.\n#The answer macro is not really designed for questions with multiple right answers, although it can be used that way. The difficulty is that students don't know when they've found all the right answers without clicking all the choices. (This may not be much of a drawback, though. The students then see not only which answers are right, but also which are wrong.)\n#To change the appearance of the floating and/or slider panels, add .floatingPanel and/or .sliderPanel CSS classes to your ~StyleSheet.\n\n!!Code\n***/\n\n//{{{\nconfig.macros.answer = {label: "Answer", \n wrongAnswer: "Incorrect answer. Please think again.", \n rightAnswer: "That's correct!",\n okButton:"explanation",\n noButton:"hint"};\n\nconfig.macros.answer.onClickButton = function(evt)\n{\n if(!evt) var evt = window.event; //for IE\n var n = this.nextSibling; // n points at panel\n var isOpen = n.style.display != "none";\n var viewer = document.getElementById("viewer");\n\n // close other panels unless button on second level (in which case they are already closed)\n if (this.name != "2ndLevel") {\n var panel = getElementsByClass('floatingPanel', viewer);\n for ( var i = 0; i < panel.length; i++ ) {\n panel[ i ].style.display = "none";\n }\n }\n\n // show or hide floating or slider panel as required\n n.style.display = isOpen ? "none" : "block";\n var left= evt.clientX +10;\n n.style.left = left + "px";\n return ""; \n}\n\nconfig.macros.answer.onClickPanel = function(evt) {\n if (!evt) var evt = window.event;\n var theSrc = evt.target ? evt.target : evt.srcElement; // get clicked element\n\n // only close panel if it is the target; i.e., don't close when panel button is clicked)\n if (theSrc == this) {\n this.style.display = "none";\n this.previousSibling.checked = false;\n }\n}\n\nconfig.macros.answer.createButton = function(place, type, label, id)\n{\n var panelClass = "sliderPanel"; //default to slider panel\n if (type.charAt(1) == "^") {panelClass = "floatingPanel";}\n mainType = type.charAt(0);\n switch (mainType) {\n case "M":\n var btn = createTiddlyCheckbox(place,"",false,this.onClickButton);\n btn.className = "checkboxItem";\n break;\n case "S":\n var btn = createTiddlyRadiobox(place,"",false,this.onClickButton,id);\n btn.className = "radioItem";\n break;\n case "T":\n var btn = createTiddlyButton(place,label,"",this.onClickButton);\n btn.classname = "button" // already set; this is here to remind me\n if (id == "2ndLevel") {btn.setAttribute("name",id)}; // mark as 2nd level\n break;\n }\n var panel = createTiddlyElement(null,"div","",panelClass);\n panel.style.display = "none"; //default to closed\n panel.onclick = this.onClickPanel;\n place.appendChild(panel);\n return panel;\n}\n\nconfig.macros.answer.handler = function(place,macroName,params,wikifier,paramString)\n{ \n var theText = getParam(paramString.parseParams("list",null,true),"text", "");\n var theId = getParam(paramString.parseParams("list",null,true),"id", "");\n var btnLabel = getParam(paramString.parseParams("list",null,true),"label", "");\n\n var theType = "M^"; //default to floating checkbox\n if (params[0] != undefined) { // if params[0] exists\n if (params[0].indexOf(":") == -1) { // if the first parameter is not like id: text: label:\n theType = params[0]; // then params[0] is the type\n }\n } \n switch (theText) {\n case "": //empty text defaults to wrong answer\n case "NO":\n panelText = config.macros.answer.wrongAnswer;\n break;\n case "OK":\n panelText = config.macros.answer.rightAnswer;\n break;\n default:\n var cmdStr = theText.substr(0,3); //get command, if any\n var theTarget = theText.substr(3, theText.length - 3); //get target tiddler if any\n switch (cmdStr) {\n\n //create panel content and mark 2nd-level button for OK+ and NO+\n case "OK+":\n panelText = config.macros.answer.rightAnswer + \n " <<answer T text:\s"" + theTarget + "\s" label:\s"" + \n config.macros.answer.okButton + "\s" id:2ndLevel>>";\n break;\n case "NO+":\n panelText = config.macros.answer.wrongAnswer + \n " <<answer T text:\s"" + theTarget + "\s" label:\s"" + \n config.macros.answer.noButton + "\s" id:2ndLevel>>";\n break;\n\n // create panel content from specified tiddler\n default:\n panelText = store.getTiddlerText(theText);\n break;\n }\n break;\n }\n\n var panel = this.createButton(place, theType, btnLabel, theId);\n panel.setAttribute("refresh", "content");\n panel.setAttribute("tiddler", panelText);\n wikify(panelText,panel,null);\n}\n\n// this function by Udo, overrides TW function\n\nfunction getParam(params, name, defaultValue) {\n if (!params) return defaultValue;\n var p = params[0][name];\n return p ? p[0] : defaultValue;\n}\n\n\nfunction getElementsByClass(searchClass,node,tag) {\n var classElements = new Array();\n if ( node == null ) node = document;\n if ( tag == null ) tag = '*';\n var els = node.getElementsByTagName(tag); \n var elsLen = els.length;\n var pattern = new RegExp("(^|\s\ss)"+searchClass+"(\s\ss|$)");\n var j = 0;\n for (var i = 0; i < elsLen; i++) {\n if ( pattern.test(els[ i ].className) ) {\n classElements[ j ] = els[ i ];\n j++;\n }\n }\n return classElements;\n}\n\nfunction createTiddlyRadiobox(theParent,caption,checked,onChange,id)\n{\n var rb = document.createElement("input");\n rb.setAttribute("type","radio");\n rb.setAttribute("name",id);\n rb.onclick = onChange;\n theParent.appendChild(rb);\n rb.checked = checked;\n rb.className = "chkOptionInput";\n if(caption)\n wikify(caption,theParent);\n return rb;\n}\n\nsetStylesheet("/*{{{*/\sn .floatingPanel {\sn color: black;\sn;position: absolute;\snz-index: 10;\snpadding: 0.5em;\snbackground-color: #eee;\snborder: 1px solid #333;\sncursor: pointer;\snmargin-right: 20%;}\sn\sn.sliderPanel {padding: 0.5em;\snborder: 1px dotted #333;\snwidth: auto;\sncursor: pointer;}\sn\sn/*}}}*/","AnswerPanelStyles");\n//}}}
[[downloads|http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareIndex.jsp?lang=en&cc=us&prodNameId=96629&prodTypeId=321957&prodSeriesId=96223&swLang=8&taskId=135&swEnvOID=20#120]]\n[[PCHub|http://www.pchub.com/uph/model/0--322-3/Armada-3500-parts.html]]
[[Artnatomy - facial muscle and expression simulator|http://www.artnatomia.net/uk/artnatomy.html]]\n[[Nat port Gall|http://www.npg.org.uk/live/index.asp]]\n[[Visual Illusions|http://www.michaelbach.de/ot/index.html]] Wrong place, I know...
[[Squishy Circuits|http://courseweb.stthomas.edu/apthomas/SquishyCircuits/index.htm]]\n[[Instructables|http://www.instructables.com/id/Basic-Electronics/]]\n[[electronics-tutorials|http://www.electronics-tutorials.ws/]]\n[[Madlabs|http://www.madlab.org/electrnx/electrnx.html]]\n[[Electronics Club|http://electronicsclub.info/]]\nhttps://learn.sparkfun.com/tutorials/voltage-current-resistance-and-ohms-law/all\n
<html><div align="center">\n<iframe src="http://free.timeanddate.com/clock/il97mv6/n136/tluk" frameborder="0" width="58" height="18"></iframe>\n</div></html>
[[Met Office|http://www.metoffice.gov.uk/learning/clouds]]\n[[Cloud Appreciation Society|https://cloudappreciationsociety.org/]]\n[[WW2010 |http://ww2010.atmos.uiuc.edu/(Gh)/guides/mtr/cld/cldtyp/home.rxml]]
/***\n|Name|CollapseTiddlersPlugin|\n|Source|http://gensoft.revhost.net/Collapse.html|\n|Version|2007.10.11|\n|Author|Bradley Meck (modified by ELS)|\n|License|unknown|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires|CollapsedTemplate|\n|Overrides||\n|Description|show/hide content of a tiddler while leaving tiddler title visible|\n\n|ELS 10/11/2007: moved [[FoldFirst]] inline script and converted to {{{<<foldFirst>>}}} macro. |\n|ELS 9/12/2007: suspend/resume SinglePageMode (SPM/TPM/BPM) when folding/unfolding tiddlers |\n|ELS 6/5/2007: add "return false" at the end of each command handler to prevent IE 'page transition' problem. |\n|ELS 3/30/2007: add a shadow definition for CollapsedTemplate. Tweak ViewTemplate shadow so "fold/unfold" and "focus" toolbar items automatically appear when using default templates. Remove error check for "CollapsedTemplate" existence, since shadow version will now always work as a fallback. |\n|ELS 2/24/2006: added fallback to "CollapsedTemplate" if "WebCollapsedTemplate" is not found |\n|ELS 2/6/2006: added check for 'readOnly' flag to use alternative "WebCollapsedTemplate" |\n\n***/\n\n//{{{\n\nconfig.shadowTiddlers.CollapsedTemplate=\n "<!--{{{-->\s\n <div class='toolbar' macro='toolbar expandTiddler collapseOthers closeTiddler closeOthers +editTiddler permalink references jump'></div>\s\n <div class='title' macro='view title'></div>\s\n <!--}}}-->";\n\n// automatically tweak shadow ViewTemplate to add "collapseTiddler collapseOthers" commands at 'front' of toolbar (before 'closeTiddler')\nconfig.shadowTiddlers.ViewTemplate=config.shadowTiddlers.ViewTemplate.replace(/closeTiddler/,"collapseTiddler collapseOthers closeTiddler");\n\nconfig.commands.collapseTiddler = {\n text: "fold",\n tooltip: "Collapse this tiddler",\n handler: function(event,src,title) {\n var e = story.findContainingTiddler(src);\n if(e.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]) {\n var t = (readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\n if(e.getAttribute("template") != t ){\n e.setAttribute("oldTemplate",e.getAttribute("template"));\n // suspend single page mode (or top/bottom of page mode)\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;\n // display tiddler\n story.displayTiddler(null,title,t);\n // restore SPM/TPM/BPM settings\n config.options.chkBottomOfPageMode=saveBPM;\n config.options.chkTopOfPageMode=saveTPM;\n config.options.chkSinglePageMode=saveSPM;\n }\n }\n return false;\n }\n}\n\nconfig.commands.expandTiddler = {\n text: "unfold",\n tooltip: "Expand this tiddler",\n handler: function(event,src,title) {\n var e = story.findContainingTiddler(src);\n // suspend single page mode (or top/bottom of page mode)\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;\n // display tiddler\n story.displayTiddler(null,title,e.getAttribute("oldTemplate"));\n // restore SPM/TPM/BPM settings\n config.options.chkBottomOfPageMode=saveBPM;\n config.options.chkTopOfPageMode=saveTPM;\n config.options.chkSinglePageMode=saveSPM;\n return false;\n }\n}\n\nconfig.macros.collapseAll = {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n createTiddlyButton(place,"Collapse All","",function(){\n story.forEachTiddler(function(title,tiddler){\n if(story.isDirty(tiddler.title)) return;\n var t=(readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\n // suspend single page mode (or top/bottom of page mode)\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;\n // display tiddler\n story.displayTiddler(null,title,t);\n // restore SPM/TPM/BPM settings\n config.options.chkBottomOfPageMode=saveBPM;\n config.options.chkTopOfPageMode=saveTPM;\n config.options.chkSinglePageMode=saveSPM;\n })\n })\n }\n}\n\nconfig.macros.expandAll = {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n createTiddlyButton(place,"Expand All","",function(){\n story.forEachTiddler(function(title,tiddler){\n var t=(readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\n // suspend single page mode (or top/bottom of page mode)\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;\n // display tiddler\n if(tiddler.getAttribute("template") == t) story.displayTiddler(null,title,tiddler.getAttribute("oldTemplate"));\n // restore SPM/TPM/BPM settings\n config.options.chkBottomOfPageMode=saveBPM;\n config.options.chkTopOfPageMode=saveTPM;\n config.options.chkSinglePageMode=saveSPM;\n })\n })\n }\n}\n\nconfig.commands.collapseOthers = {\n text: "focus",\n tooltip: "Expand this tiddler and collapse all others",\n handler: function(event,src,title) {\n var e = story.findContainingTiddler(src);\n story.forEachTiddler(function(title,tiddler) {\n if(story.isDirty(tiddler.title)) return;\n var t=(readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\n if (e==tiddler) t=e.getAttribute("oldTemplate");\n // suspend single page mode (or top/bottom of page mode)\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;\n // display tiddler\n story.displayTiddler(null,title,t);\n // restore SPM/TPM/BPM settings\n config.options.chkBottomOfPageMode=saveBPM;\n config.options.chkTopOfPageMode=saveTPM;\n config.options.chkSinglePageMode=saveSPM;\n })\n return false;\n }\n}\n\n// {{{<<foldFirst>>}}} macro forces tiddler to be folded when initially displayed.\n// Subsequent re-render does NOT re-fold tiddler, but closing/re-opening tiddler DOES cause it to fold first again.\nconfig.macros.foldFirst = {\n handler: function(place,macroName,params,wikifier,paramString,tiddler){\n var here=story.findContainingTiddler(place);\n if (here.foldedFirst) return; // already been folded\n var template = (readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\n if (!store.tiddlerExists(template)) { displayMessage("FoldFirst: can't find 'CollapsedTemplate'"); return; }\n here.setAttribute("oldTemplate",here.getAttribute("template"));\n story.displayTiddler(null,here.getAttribute("tiddler"),template);\n here.foldedFirst=true; // only when tiddler is first rendered\n return false;\n }\n}\n//}}}
<!--{{{-->\n<!--\n|Name|CollapsedTemplate|\n|Source|http://www.TiddlyTools.com/#CollapsedTemplate|\n|Version||\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|template|\n|Requires||\n|Overrides||\n|Description|alternative to ViewTemplate, used by CollapseTiddlersPlugin to display tiddler when 'folded'|\n-->\n\n<span class='toolbar' macro='toolbar +editTiddler'></span>\n<span class='toolbar' macro='toolbar expandTiddler closeTiddler closeOthers'></span>\n<span class='title'>\n <span macro='view title'></span>\n</span>\n\n<!--}}}-->
Background: #fff\nForeground: #000\nPrimaryPale: #aef\nPrimaryLight: #8ad\nPrimaryMid: #38c\nPrimaryDark: #026\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nQuaternaryPale: #cf8\nQuaternaryLight: #8f1\nQuaternaryMid: #4b0\nQuaternaryDark: #140\nError: #f88\n
<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','Background')}} Background>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','Foreground')}} Foreground>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','PrimaryPale')}} PrimaryPale>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','PrimaryLight')}} PrimaryLight>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','PrimaryMid')}} PrimaryMid>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','PrimaryDark')}} PrimaryDark>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','SecondaryPale')}} SecondaryPale>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','SecondaryLight')}} SecondaryLight>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','SecondaryMid')}} SecondaryMid>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','SecondaryDark')}} SecondaryDark>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','TertiaryPale')}} TertiaryPale>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','TertiaryLight')}} TertiaryLight>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','TertiaryMid')}} TertiaryMid>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','TertiaryDark')}} TertiaryDark>>\n<<tiddler [[TemplateShowColor]] with:{{store.getTiddlerSlice('ColorPalette','Error')}} Error>>
/%RGB hexadecimal 216-color "Web safe" palette %/\nSource: Paul Petterson, revised by Eric Shulman\n{{menubox{\n|bgcolor(#FFF):FFF |bgcolor(#CCC):CCC |bgcolor(#999):999 |bgcolor(#666):@@color(white):666@@ |bgcolor(#333):@@color(white):333@@ |bgcolor(#000):@@color(white):000@@ |bgcolor(#FC0):~FC0 |bgcolor(#F90):F90 |bgcolor(#F60):@@color(white):F60@@ |bgcolor(#F30):@@color(white):F30@@ |>|>|>|>|>| |\n|bgcolor(#9C0):9C0 |>|>|>| |bgcolor(#C90):C90 |bgcolor(#FC3):~FC3 |bgcolor(#FC6):~FC6 |bgcolor(#F96):F96 |bgcolor(#F63):@@color(white):F63@@ |bgcolor(#C30):@@color(white):C30@@ |>|>|>| |bgcolor(#C03):@@color(white):C03@@ |\n|bgcolor(#CF0):~CF0 |bgcolor(#CF3):~CF3 |bgcolor(#330):@@color(white):330@@ |bgcolor(#660):@@color(white):660@@ |bgcolor(#990):990 |bgcolor(#CC0):~CC0 |bgcolor(#FF0):~FF0 |bgcolor(#C93):C93 |bgcolor(#C63):@@color(white):C63@@ |bgcolor(#300):@@color(white):300@@ |bgcolor(#600):@@color(white):600@@ |bgcolor(#900):@@color(white):900@@ |bgcolor(#C00):@@color(white):C00@@ |bgcolor(#F00):@@color(white):F00@@ |bgcolor(#F36):@@color(white):F36@@ |bgcolor(#F03):@@color(white):F03@@ |\n|bgcolor(#9F0):9F0 |bgcolor(#CF6):~CF6 |bgcolor(#9C3):9C3 |bgcolor(#663):@@color(white):663@@ |bgcolor(#993):993 |bgcolor(#CC3):~CC3 |bgcolor(#FF3):~FF3 |bgcolor(#960):@@color(white):960@@ |bgcolor(#930):@@color(white):930@@ |bgcolor(#633):@@color(white):633@@ |bgcolor(#933):@@color(white):933@@ |bgcolor(#C33):@@color(white):C33@@ |bgcolor(#F33):@@color(white):F33@@ |bgcolor(#C36):@@color(white):C36@@ |bgcolor(#F69):@@color(white):F69@@ |bgcolor(#F06):@@color(white):F06@@ |\n|bgcolor(#6F0):6F0 |bgcolor(#9F6):9F6 |bgcolor(#6C3):6C3 |bgcolor(#690):690 |bgcolor(#996):996 |bgcolor(#CC6):~CC6 |bgcolor(#FF6):~FF6 |bgcolor(#963):@@color(white):963@@ |bgcolor(#630):@@color(white):630@@ |bgcolor(#966):@@color(white):966@@ |bgcolor(#C66):@@color(white):C66@@ |bgcolor(#F66):@@color(white):F66@@ |bgcolor(#903):@@color(white):903@@ |bgcolor(#C39):@@color(white):C39@@ |bgcolor(#F6C):@@color(white):~F6C@@ |bgcolor(#F09):@@color(white):F09@@ |\n|bgcolor(#3F0):3F0 |bgcolor(#6F3):6F3 |bgcolor(#390):390 |bgcolor(#6C0):6C0 |bgcolor(#9F3):9F3 |bgcolor(#CC9):~CC9 |bgcolor(#FF9):~FF9 |bgcolor(#C96):C96 |bgcolor(#C60):@@color(white):C60@@ |bgcolor(#C99):C99 |bgcolor(#F99):F99 |bgcolor(#F39):@@color(white):F39@@ |bgcolor(#C06):@@color(white):C06@@ |bgcolor(#906):@@color(white):906@@ |bgcolor(#F3C):@@color(white):~F3C@@ |bgcolor(#F0C):@@color(white):~F0C@@ |\n|bgcolor(#0C0):0C0 |bgcolor(#3C0):3C0 |bgcolor(#360):@@color(white):360@@ |bgcolor(#693):693 |bgcolor(#9C6):9C6 |bgcolor(#CF9):~CF9 |bgcolor(#FFC):FFC |bgcolor(#FC9):~FC9 |bgcolor(#F93):F93 |bgcolor(#FCC):FCC |bgcolor(#F9C):~F9C |bgcolor(#C69):@@color(white):C69@@ |bgcolor(#936):@@color(white):936@@ |bgcolor(#603):@@color(white):603@@ |bgcolor(#C09):@@color(white):C09@@ |bgcolor(#303):@@color(white):303@@ |\n|bgcolor(#3C3):3C3 |bgcolor(#6C6):6C6 |bgcolor(#0F0):0F0 |bgcolor(#3F3):3F3 |bgcolor(#6F6):6F6 |bgcolor(#9F9):9F9 |bgcolor(#CFC):CFC |>|>| |bgcolor(#C9C):~C9C |bgcolor(#969):@@color(white):969@@ |bgcolor(#939):@@color(white):939@@ |bgcolor(#909):@@color(white):909@@ |bgcolor(#636):@@color(white):636@@ |bgcolor(#606):@@color(white):606@@ |\n|bgcolor(#060):@@color(white):060@@ |bgcolor(#363):@@color(white):363@@ |bgcolor(#090):090 |bgcolor(#393):393 |bgcolor(#696):696 |bgcolor(#9C9):9C9 |>|>| |bgcolor(#FCF):FCF |bgcolor(#F9F):~F9F |bgcolor(#F6F):@@color(white):~F6F@@ |bgcolor(#F3F):@@color(white):~F3F@@ |bgcolor(#F0F):@@color(white):~F0F@@ |bgcolor(#C6C):@@color(white):~C6C@@ |bgcolor(#C3C):@@color(white):~C3C@@ |\n|bgcolor(#030):@@color(white):030@@ |bgcolor(#0C3):0C3 |bgcolor(#063):@@color(white):063@@ |bgcolor(#396):396 |bgcolor(#6C9):6C9 |bgcolor(#9FC):9FC |bgcolor(#CFF):CFF |bgcolor(#39F):39F |bgcolor(#9CF):9CF |bgcolor(#CCF):CCF |bgcolor(#C9F):~C9F |bgcolor(#96C):@@color(white):96C@@ |bgcolor(#639):@@color(white):639@@ |bgcolor(#306):@@color(white):306@@ |bgcolor(#90C):@@color(white):90C@@ |bgcolor(#C0C):@@color(white):~C0C@@ |\n|bgcolor(#0F3):0F3 |bgcolor(#3F6):3F6 |bgcolor(#093):093 |bgcolor(#0C6):0C6 |bgcolor(#3F9):3F9 |bgcolor(#9FF):9FF |bgcolor(#9CC):9CC |bgcolor(#06C):@@color(white):06C@@ |bgcolor(#69C):69C |bgcolor(#99F):99F |bgcolor(#99C):99C |bgcolor(#93F):@@color(white):93F@@ |bgcolor(#60C):@@color(white):60C@@ |bgcolor(#609):@@color(white):609@@ |bgcolor(#C3F):@@color(white):~C3F@@ |bgcolor(#C0F):@@color(white):~C0F@@ |\n|bgcolor(#0F6):0F6 |bgcolor(#6F9):6F9 |bgcolor(#3C6):3C6 |bgcolor(#096):096 |bgcolor(#6FF):6FF |bgcolor(#6CC):6CC |bgcolor(#699):699 |bgcolor(#036):@@color(white):036@@ |bgcolor(#369):@@color(white):369@@ |bgcolor(#66F):@@color(white):66F@@ |bgcolor(#66C):@@color(white):66C@@ |bgcolor(#669):@@color(white):669@@ |bgcolor(#309):@@color(white):309@@ |bgcolor(#93C):@@color(white):93C@@ |bgcolor(#C6F):@@color(white):~C6F@@ |bgcolor(#90F):@@color(white):90F@@ |\n|bgcolor(#0F9):0F9 |bgcolor(#6FC):6FC |bgcolor(#3C9):3C9 |bgcolor(#3FF):3FF |bgcolor(#3CC):3CC |bgcolor(#399):399 |bgcolor(#366):@@color(white):366@@ |bgcolor(#069):@@color(white):069@@ |bgcolor(#039):@@color(white):039@@ |bgcolor(#33F):@@color(white):33F@@ |bgcolor(#33C):@@color(white):33C@@ |bgcolor(#339):@@color(white):339@@ |bgcolor(#336):@@color(white):336@@ |bgcolor(#63C):@@color(white):63C@@ |bgcolor(#96F):@@color(white):96F@@ |bgcolor(#60F):@@color(white):60F@@ |\n|bgcolor(#0FC):0FC |bgcolor(#3FC):3FC |bgcolor(#0FF):0FF |bgcolor(#0CC):0CC |bgcolor(#099):099 |bgcolor(#066):@@color(white):066@@ |bgcolor(#033):@@color(white):033@@ |bgcolor(#39C):39C |bgcolor(#36C):@@color(white):36C@@ |bgcolor(#00F):@@color(white):00F@@ |bgcolor(#00C):@@color(white):00C@@ |bgcolor(#009):@@color(white):009@@ |bgcolor(#006):@@color(white):006@@ |bgcolor(#003):@@color(white):003@@ |bgcolor(#63F):@@color(white):63F@@ |bgcolor(#30F):@@color(white):30F@@ |\n|bgcolor(#0C9):0C9 |>|>|>| |bgcolor(#09C):09C |bgcolor(#3CF):3CF |bgcolor(#6CF):6CF |bgcolor(#69F):69F |bgcolor(#36F):@@color(white):36F@@ |bgcolor(#03C):@@color(white):03C@@ |>|>|>| |bgcolor(#30C):@@color(white):30C@@ |\n|>|>|>|>|>| |bgcolor(#0CF):0CF |bgcolor(#09F):09F |bgcolor(#06F):@@color(white):06F@@ |bgcolor(#03F):@@color(white):03F@@ |>|>|>|>|>| |\n}}}
[[PC bits]] \n[[Software]]\n[[Games]]\n[[ADSL]]\n[[XP]]\n\n\n[[FF winupdate|http://windowsupdate.62nds.com/]]\n[[mininova|http://www.mininova.org/]]\n\n\n!______________________________________________________________________
config.messages.tiddlerLinkTooltip = ""; \nconfig.options.txtDisplayAreaRightMargin = "18em" \n \nfunction getPageTitle() { return wikifyPlain("Grrr"); }
PageTemplate\n|>|>|SiteTitle - SiteSubtitle|\n|MainMenu|DefaultTiddlers<<br>><<br>><<br>><<br>>ViewTemplate<<br>><<br>>EditTemplate|SideBarOptions|\n|~|~|OptionsPanel|\n|~|~|AdvancedOptions|\n|~|~|<<tiddler Configuration.SideBarTabs>>|\n\n''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint\n\nSiteUrl
SideBarTabs\n|[[Timeline|TabTimeline]]|[[All|TabAll]]|[[Tags|TabTags]]|>|>|[[More|TabMore]] |\n|>|>||[[Missing|TabMoreMissing]]|[[Orphans|TabMoreOrphans]]|[[Shadowed|TabMoreShadowed]]|
Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://keith.tiddlyspot.com/controlpanel]] (your control panel username is //keith//).\n<<tiddler TspotControls>>
Background: This controls the color of the background or 'paper', and\nthe text in the title and subtitle.\nForeground: This controls the color of the text.\nPrimaryPale: This controls the color of the Interface Options box.\nPrimaryLight: This controls the color of the top of the Header\ngradient.\nPrimaryMid: This controls the color of the text in the MainMenu, the\ncolor of the text for links, the color of the text in the lists of\ntiddlers and tags, and the color of the bottom of the Header gradient.\nPrimaryDark: This controls the color of the text of the items in the\ntop of the right hand menu and the text of the buttons on the\ntiddlers.\nSecondaryPale: This controls the color of the background of the boxes\nin those tiddlers that show snippets of the TiddlyWiki code.\nSecondaryLight: This controls the color that appears when the tiddler\nbuttons or items in the right hand menu are highlighted.\nSecondaryMid: This controls the color of the title cells in tables,\nthat is, cells which begin with an exclamation mark (!). It also\ncontrols the color of the box that appears when changes have been\nsaved, and the color of the tiddler buttons when they are selected.\nSecondaryDark: This controls the color of the titles of the tiddlers.\nTertiaryPale: This controls the color of the right hand menu that\nshows lists of tags and tiddlers, as well as the color of the tag\nbutton on the tiddlers.\nTertiaryLight: This controls the color of the borders around the right\nhand menus.\nTertiaryMid: This controls the color of the unselected tabs behind the\nlist of tags and tiddlers in the bottom right hand menu.\nTertiaryDark: This controls the color of the subtitle of each tiddler,\nthat is, the author of the tiddler, the most recent date it was\nmodified and date it was created.
Download Error -228\n\nThis error message may be caused by having the Firefox cache disabled. To re-enable:\n\nFirefox 1.5: Tools -> Options -> Privacy -> Cache Firefox 2.0: Tools -> Options -> Advanced -> Network\n\nMake sure the cache to at least 1MB.\n\nFirewalls or spyware screeners may also cause this issue. If you use the CA firewall, Windows Defender, or the resident option of Spybot S&D ("Teatimer" feature), temporarily disable it to see if your system will now allow the extensions or themes to install [3].\n\nFailing that, a workaround is to right-click the download link, select "Save Link As..." and download the .xpi or .jar file to your computer. You can then manually install it by dragging the file icon onto an open Firefox window [4].
Bios upgrade (unofficial)\nhttp://forums.pcper.com/showthread.php?t=293252\n
<!--{{{-->\n<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler wikibar'></div>\n<div class='title' macro='view title'></div>\n<div class='editor' macro='edit title'></div>\n<div class='editor' macro='edit text'></div>\n<div class='editor' macro='edit tags'></div><div class='editorFooter'>\n<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler wikibar'></div>\n<span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n<!--}}}-->
[[Fortnightly Review|http://fortnightlyreview.co.uk/]]\n[[Project Gutenberg: Online books|http://www.gutenberg.org/browse/scores/top]]\n[[CSICOP|http://www.csicop.org/]]\n[[The Skeptic's Dictionary|http://www.skepdic.com/]]\n[[Doubtful News|http://doubtfulnews.com/]] Inactive\n[[Doubtful ~ Sharon Hill|https://idoubtit.wordpress.com/]]\n[[Open democracy|https://www.opendemocracy.net/about]]\n\n[[Arachnoid|http://www.arachnoid.com/index.html]]\n[[LibraryThing|http://www.librarything.com/]]\n[[Free medical books|http://www.freebooks4doctors.com]]\n[[LibriVox|http://librivox.org/]]\n\n[[Touch typing|http://www.sense-lang.org/typing/]]\n[[Astro Central|http://www.astrocentral.co.uk/index.htm]]\n\n[[mininova|http://www.mininova.org/]]\n\n[[CBRD (roads)|http://www.cbrd.co.uk/]]\n[[Car Bibles|http://www.chris-longhurst.com/carbibles/index.html?menu.html&additives.html]]\n[[Causes of...|http://www.causeof.org/index.htm]]\n[[Electronics|http://www.madlab.org/electrnx/electrnx.html]]\n[[Electronics club|http://www.kpsec.freeuk.com/index.htm]]\n\n[[PhonepayPlus|http://www.phonepayplus.org.uk/default.asp]]\n[[Dedoimedo|http://www.dedoimedo.com/]]\n\n[[Clouds]]\n\n
/***\n|Name|ExternalTiddlersPlugin|\n|Source|http://www.TiddlyTools.com/#ExternalTiddlersPlugin|\n|Version|1.1.0|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides|config.macros.tiddler.handler|\n|Description|retrieve and wikify content from external files or remote URLs|\nThis plugin extends the {{{<<tiddler>>}}} macro syntax so you can retrieve and wikify content from external files or remote URLs in addition to tiddlers stored within the document.\n!!!!!Usage\n<<<\nThe standard TiddlyWiki core syntax for the {{{<<tiddler>>}}} macro is:\n>{{{<<tiddler TiddlerName with: param param param ...>>}}}\nwhere "with: param..." is optional, and is used in combination with "substitution markers" ($1 to $9) embedded in the referenced tiddler: when the contents of ~TiddlerName are retrieved, but before they are rendered, any substitution markers in that content are automatically replaced with values specified in the corresponding macro params (if any). When a given TiddlerName does NOT exist in the current document, the standard macro handler produces no output.\n!!!!!Reading content from external files or URLs\nWhen this plugin is installed and a TiddlerName does not exist in the document also also matches the format for an external file/URL reference (as determined by the core's isExternalLink() test function), then the {{{<<tiddler>>}}} macro will attempt to retrieve the external source content from that file/URL and render it into the output, ''//as if// it had come from a tiddler in the current document''.\n\nTo use this extension, simply replace the usual ~TiddlerName in the macro with a filename or a URL, using ''either a relative or an absolute path. The external source file can contain simple "plain text" or a full TiddlyWiki document''. When using a TiddlyWiki document, you must specify which tiddlers should be included in the output by appending a permaview-like suffix to the file or URL reference, e.g.:\n{{{\n<<tiddler "myfile.html#tiddlername tiddlername...">>\nor\n<<tiddler "http://www.TiddlyWiki.com/#HelloThere">>\n}}}\nAs with locally-stored tiddler content, you can use the macro's standard "with:" syntax in combination with "$n" ''substitution markers embedded in the external content'' to insert dynamic values into the output, before passing it to the core's wikify() parser for rendering.\n\nIn addition, if you modify and save an external source file and then subsequently refresh the tiddler display in the current document, the macro will re-read the file, so that the rendered content will stilll reflect the *current* external file content. As a result, you can use the {{{<<tiddler>>}}} macro with remotely-hosted text files such as server logs, etc. to create an simple remote system monitor, virtually instantly!\n\nNote: The plugin uses asynchronous {{{XMLHttpRequest()}}} processing to fetch external content directly from remote URLs. This can create unavoidable delays before that content is completely rendered, ranging from //"mere moments to many minutes"//, while waiting for the remote web server to transfer the requested file.\n\nIf the plugin is unable to retrieve the requested file (because it doesn't exist, or perhaps due to a "time-out" from the network/server), then the macro will produce no output (i.e., the same result as the standard core macro handler produces when a locally-stored tiddler does not exist).\n!!!!!Using alternative "fallback" references\nIn addition to supporting external file/URL references in place of the usual ~TiddlerName, the plugin also permits you to specify a ''fallback'' list with alternative tiddler, file, and/or URL references, each separated by "|", that will be attempted one at a time, until content is successfully retrieved or all alternatives have been tried.\n\nFor example, if you create a tiddler called [[HelloThere]], as well as a remotely-hosted TW document containing a published tiddler, also called [[HelloThere]], then using standard "external ~PrettyLink" syntax (i.e., {{{[[text|URL]]}}}, you can write:\n{{{\n<<tiddler [[HelloThere|http://www.TiddlyWiki.com/#HelloThere]]>>\n}}}\nWhen [[HelloThere]] is present in the local document, it is processed in the normal manner. However, if you delete the local [[HelloThere]] tiddler, the plugin will attempt to retrieve the remote [[HelloThere]] tiddler from the indicated remote URL.\n>Note: a fallback list can include a combination of multiple alternative tiddlers, local files, and remote URLs in any order; however, because retrieval from a remote URL is handled //asynchronously// via XMLHttpRequest() processing, there can be no more than one remote URL reference, and it must always be the last alternative in the list. Any alternatives following a remote URL reference will be ignored.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n[[ExternalTiddlersPlugin]]\n<<<\n!!!!!Revision History\n<<<\n''2007.11.26 [1.1.0]'' added support for multiple alternative fallback references\n''2007.11.25 [1.0.0]'' initial release - moved from CoreTweaks\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by Eric Shulman\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.ExternalTiddlers= {major: 1, minor: 1, revision: 0, date: new Date(2007,11,26)};\n\nconfig.macros.tiddler.externalTiddlers_handler = config.macros.tiddler.handler;\nconfig.macros.tiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n params = paramString.parseParams("name",null,true,false,true);\n var names = params[0]["name"];\n var referenceList= names[0];\n var className = names[1] ? names[1] : null;\n var args = params[0]["with"];\n\n // UTILITY FUNCTIONS\n function extract(text,tids) { // get tiddler source content from external file text\n if (!text || !tids || !tids.length) return text; // no text or no tiddler list... return text as-is\n var remoteStore=new TiddlyWiki();\n if (!remoteStore.importTiddlyWiki(text)) return text; // not a TW document... return text as-is\n var out=[]; for (var t=0;t<tids.length;t++)\n { var txt=remoteStore.getTiddlerText(tids[t]); if (txt) out.push(txt); }\n return out.join("\sn");\n }\n function substitute(text,args) { // replace "substitution markers" ($1-$9) with macro param values (if any)\n if (!text || !args || !args.length) return text;\n var n=args.length; if (n>9) n=9;\n for(var i=0; i<n; i++) { var re=new RegExp("\s\s$" + (i + 1),"mg"); text=text.replace(re,args[i]); }\n return text;\n }\n\n // loop through "|"-separated list of alternative tiddler/file/URL references until successful\n var alts=referenceList.split("|");\n for (var a=0; a<alts.length; a++) { tiddlerName=alts[a];\n\n // if tiddler (or shadow) exists, replace reference list with single tiddlername and apply core handler\n if (store.getTiddlerText(tiddlerName)) {\n arguments[2][0]=tiddlerName; // params[] array\n var p=arguments[4].split(referenceList); arguments[4]=p[0]+tiddlerName+p[1]; // paramString\n this.externalTiddlers_handler.apply(this,arguments);\n break; // stop processing alternatives\n }\n\n // if tiddler doesn't exist, but is not a valid external file/URL reference... skip it\n if (!config.formatterHelpers.isExternalLink(tiddlerName)) continue;\n\n // separate 'permaview' list of tiddlers (if any) from file/URL (i.e., '#name name name..." suffix)\n var p=tiddlerName.split("#"); tiddlerName=p[0]; var tids=p[1]?p[1].readBracketedList(false):[];\n\n // if reference is to a remotely hosted document or the current document is remotely hosted...\n if (tiddlerName.substr(0,4)=="http" || document.location.protocol.substr(0,4)=="http") {\n // create placeholder and assign GUID (globally unique ID) for async rendering\n var wrapper = createTiddlyElement(place,"span",null,className);\n wrapper.id=new Date().getTime()+Math.random().toString();\n if (tiddlerName.substr(0,4)!="http") // fixup URL for relative remote references\n { var h=document.location.href; tiddlerName=h.substr(0,h.lastIndexOf("/")+1)+tiddlerName; }\n loadRemoteFile( tiddlerName,\n function(success,params,text,src,xhr) { // ASYNC CALLBACK\n if (!success) return; // couldn't read remote file... do nothing...\n var wrapper=document.getElementById(params.id); if (!wrapper) return;\n wikify(substitute(extract(text,params.tids),params.args),wrapper); // ASYNC RENDER\n }, { id:wrapper.id, args:args, tids:tids } );\n break; // can't tell if async read will succeed.... stop processing alternatives anyway.\n }\n else { // read file from local filesystem\n var text=loadFile(getLocalPath(tiddlerName));\n if (!text) { // couldn't load file... fixup path for relative local reference and try again...\n var h=document.location.href;\n var path=getLocalPath(decodeURI(h.substr(0,h.lastIndexOf("/")+1)));\n var text=loadFile(path+tiddlerName);\n }\n if (text) { // if file was loaded OK, render it in a className wrapper\n wikify(substitute(extract(text,tids),args),createTiddlyElement(place,"span",null,className));\n break; // stop processing alternatives\n }\n }\n }\n};\n//}}}
[[Internet Movie Database|http://imdb.com/]]\n[[Digital Spy|http://www.digitalspy.co.uk/]]
[[UTS|http://www.upthesaddlers.com/]]\n[[NewsNow|http://www.newsnow.co.uk/newsfeed/?name=Walsall]]\n[[BBC Football - Walsall|http://news.bbc.co.uk/sport1/hi/football/teams/w/walsall/default.stm]]\n[[Walsall Advertiser|http://www.walsalladvertiser.co.uk/football]]\n[[E&S - Walsall FC|http://www.expressandstar.com/sport/walsall-fc/]]\n[[BBC Football|http://www.bbc.co.uk/sport/0/football/]]\n[[Saddledzine|http://www.saddledzine.com/]]\n[[The Football Forum|http://onefootballforum.co.uk/index.php?forums/league-one.10/]] League One\n[[Statto|http://www.statto.com/football/stats/england/league-one/2015-2016/table]]\n[[Attendances|http://www.european-football-statistics.co.uk/attn.htm]]\n[[Sky Sports score centre|http://live.skysports.com/ScoreCentre/live.html]]\n[[WFC YouTube Channel|https://www.youtube.com/channel/UC18ZxZ80qKecD0bpimpyGcA/videos]]\n[[Sky Football - Walsall|http://www1.skysports.com/football/teams/walsall]]\n\n[[Ultimate League|http://www1.skysports.com/football/news/11095/9817599]] Ratings over past 50 years\n[[Tony's English Football Site|http://www.tonykempster.co.uk/index.htm]]\n[[Southern League|http://www.southern-football-league.co.uk/]]\n[[Chasetown FC|http://www.pitchero.com/clubs/chasetown/]]\n[[Hednesford Town|http://www.hednesfordtownfc.com/home]]\n[[Virgin L1 video|http://www.football.virginmedia.com/page/leagueonevideo/]]\n[[Stats|http://www.football-league.premiumtv.co.uk/page/DivisionalStats/0,,10794,00.html]]\n[[Live|http://livetv.sx/en/]]\nhttp://www.wiziwig.to\n!______________________________________________________________________
/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.5 (2006-02-05)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''Macros:''|[[ForEachTiddlerMacro]] v1.0.5|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.5\n** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.\n** Support Firefox 1.5.0.1\n** Internal\n*** Make "JSLint" conform\n*** "Only install once"\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n \n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\n// Only install once\nif (!version.extensions.ForEachTiddlerPlugin) {\n\nversion.extensions.ForEachTiddlerPlugin = {major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), source: "http://tiddlywiki.abego-software.de/#ForEachTiddlergPlugin"};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n }\n };\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n};\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.getContainingTiddler = function(e) {\n while(e && !hasClass(e,"tiddler"))\n e = e.parentNode;\n var title = e ? e.getAttribute("tiddler") : null; \n return title ? store.getTiddler(title) : null;\n};\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);\n\n if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n inTiddler: tiddler,\n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n};\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n};\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n};\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n};\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li");\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n};\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (filename) {\n if (lineSeparator !== undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);\n }\n};\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam,\n inTiddler : inTiddlerParam\n };\n};\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n var lenPrefix = idPrefix.length;\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content === null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var tiddlyWiki = new TiddlyWiki();\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title !== "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n};\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText+";theFunction;";\n return eval(fullText);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n var i;\n for (i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n};\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n};\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n};\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n};\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n};\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n};\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n};\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n};\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n};\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n};\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n};\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n};\n\n\n} // of "install only once"\n\n// Used Globals (for JSLint) ==============\n// ... DOM\n/*global document */\n// ... TiddlyWiki Core\n/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, \n displayMessage, endSaveArea, hasClass, loadFile, saveFile, \n startSaveArea, store, wikify */\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n\n
/***\n|Name|FullScreenPlugin|\n|Created by|SaqImtiaz|\n|Location|http://lewcid.googlepages.com/lewcid.html#FullScreenPlugin|\n|Version|1.1|\n|Requires|~TW2.x|\n!Description:\nToggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.\n\n!Demo:\nClick the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nEdit the ViewTemplate to add the fullscreen command to the toolbar.\n\n!History:\n*25-07-06: ver 1.1\n*20-07-06: ver 1.0\n\n!Code\n***/\n//{{{\nvar lewcidFullScreen = false;\n\nconfig.commands.fullscreen =\n{\n text:" ↕ ",\n tooltip:"Fullscreen mode"\n};\n\nconfig.commands.fullscreen.handler = function (event,src,title)\n{\n if (lewcidFullScreen == false)\n {\n lewcidFullScreen = true;\n setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");\n }\n else\n {\n lewcidFullScreen = false;\n setStylesheet(' ',"lewcidFullScreenStyle");\n }\n}\n\nconfig.macros.fullscreen={};\nconfig.macros.fullscreen.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var label = params[0]||" ↕ ";\n var tooltip = params[1]||"Fullscreen mode";\n createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);\n}\n\nvar lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;\nStory.prototype.closeTiddler =function(title,animate,slowly)\n{\n lewcid_fullscreen_closeTiddler.apply(this,arguments);\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n\n\nSlider.prototype.lewcidStop = Slider.prototype.stop;\nSlider.prototype.stop = function()\n{\n this.lewcidStop();\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n//}}}
[[Old Games|http://www.old-games.com/]]\n[[GOG|https://www.gog.com/]]\n[[Deus Ex - The HDTP Project|http://offtopicproductions.com/forum/viewforum.php?f=9]]\n[[GMDX Moddb|http://www.moddb.com/mods/gmdx]]\n[[GMDX website|http://genericname112.wix.com/gmdx]]\n[[PC Gaming Wiki: Deus Ex|http://pcgamingwiki.com/wiki/Deus_Ex]]\n[[Tack's Deus Ex Lab|http://www.offtopicproductions.com/tacks/]]\n[[UnrealEd tutorial|https://web.archive.org/web/20110908045429/http://unreal.gamedesign.net/tutorials/basic/basic.html]] (Wayback Machine)\n[[UE2 tutorials on Youtube|http://www.youtube.com/watch?v=T64y2xPC__M]]\n[[Cheats|http://deusex.wikia.com/wiki/Deus_Ex_console_commands]]\n[[Walkthrough|http://www.visualwalkthroughs.com/deusex/deusexwalkthrough.htm]]\nhttp://www.oldunreal.com/wiki/index.php?title=Tutorials\n\n[[Thief: The Circle|http://www.thief-thecircle.com/]]\n[[Thief Gold |http://www.thecomputershow.com/computershow/walkthroughs/thiefthedarkprojectgoldfaq.htm#5]]\n\n[[The Dark Mod 2|http://www.thedarkmod.com/main/]]\n[[Walkthrough|http://www.3dactionplanet.com/thief/walk/walkthroughs.shtml]]\n\n[[Grim Fandango|http://www.thecomputershow.com/computershow/walkthroughs/grimfandangowalk2.htm#1]]\n [[Icon|http://www.good-tutorials.com/images/icons/15895.jpg]] for Linux\n [[GrimLauncher|http://www.grimfandango.net/files/launcher/GrimLauncher1.2.zip]]\n\n[[System Shock 2 Mods|https://levelskip.com/first-person-shooters/How-to-get-the-most-out-of-System-Shock-2-Installation-Mods-and-Setup]]\n\n[[Abandonia|http://www.abandonia.com/index.php]]\n!!TR\n[[Glidos|http://www.glidos.net/]]\n[[Vogons|http://vogons.zetafleet.com/viewforum.php?f=20]]\n[[TombraiderXtra|http://www.tombraiderxtra.com/]]\n[[Stella's site|http://www.tombraiders.net/stella/]]\n[[TR Chronicles|http://www.tombraiderchronicles.com/]]\n[[NGLE tutorials|http://www.skribblerz.com/editortools.htm]]\n\n[[The Illustrated Nethack Monsters |http://koti.mbnet.fi/villes/nethack/illustrated_nethack.php]]\n[[Compiling tips|https://andrei600.wordpress.com/tag/nethack/]]
[[PC Guide|http://www.pcguide.com/index.htm]]\n[[Computer Hope|http://www.computerhope.com/]]\n[[ss64|http://www.ss64.com/index.html]] Command line reference for Windows, Bash\n[[GHacks|http://www.ghacks.net/2005/12/03/10-ways-to-speed-up-windows-xp/]] 10 Ways to speed up Windows XP\n[[howtofixcomputers|http://www.howtofixcomputers.com/bb/index.php]]\n[[Computer World|http://www.computerworld.com/index.jsp]]\n!!!Mags\n[[Micro Mart|http://www.micromart.co.uk/]]
<html>\n <style type="text/css">\n #tiddlerHealth a { font-weight: bold; } \n</style>\n </html> \n!!General\n[[NHS Direct|http://www.nhsdirect.nhs.uk/]]\n[[Medical Physiology And Pathophysiology|http://www.mfi.ku.dk/ppaulev/content.htm]]\n[[The Merck Manual|http://www.merckmanuals.com/home]]\n[[Free Health Encyclopedia|http://www.faqs.org/health/index.html]]\n\n[[Diabetes UK|http://www.diabetes.org.uk/]]
/***\n| Name|HideWhenPlugin|\n| Description|Allows conditional inclusion/exclusion in templates|\n| Version|3.0 ($Rev: 1845 $)|\n| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source|http://mptw.tiddlyspot.com/#HideWhenPlugin|\n| Author|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\nFor use in ViewTemplate and EditTemplate. Example usage:\n{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}\n{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}\n***/\n//{{{\n\nwindow.removeElementWhen = function(test,place) {\n if (test) {\n removeChildren(place);\n place.parentNode.removeChild(place);\n }\n};\n\nmerge(config.macros,{\n\n hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( eval(paramString), place);\n }},\n\n showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !eval(paramString), place);\n }},\n\n hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAny(params), place);\n }},\n\n showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAny(params), place);\n }},\n\n hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);\n }},\n\n showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);\n }}\n\n});\n\n//}}}\n\n
[[Viltu Læra Íslensku|http://tungumalatorg.is/viltu_laera_islensku/en/n1/]] \nViltu læra íslensku is a 21-episode dramatised television series which takes place in a variety of private homes, official locations and in a classroom. Each episode takes about twenty minutes and is in two parts. In the first part the viewer sees people at work and play, and the second part shows an Icelandic lesson in a classroom. The emphasis is on the spoken language.\n[[Freelang|http://www.freelang.net/online/icelandic.php]] Online dictionary\n[[ Icelandic online|https://icelandic.hi.is/]] - free course.\nhttp://uwdc.library.wisc.edu/collections/IcelOnline - Icelandic dictionary and bilingual readings. Complements the course above.\n[[ie.languages|http://www.ielanguages.com/icelandic.html]] - Icelandic tutorial (good deal of grammar).\n[[Cool Icelandic Lessons|https://www.youtube.com/playlist?list=PL0DpnlpMVcXtSf-pBMxA1XwG6-B_1LL2e]] Youtube - vocabulary categories with pronunciation\n[[Omniglot|http://www.omniglot.com/writing/icelandic.htm]]\nhttp://www.ruv.is/ - Icelandic video and radio with podcasts.\nhttp://www.youtube.com/watch?annotati... - Video by Jordan Chark talking about Icelandic in Icelandic.\n[[Memrise|https://www.memrise.com/]]\nhttps://learnicelandicnow.wordpress.com/2013/07/14/is-icelandic-a-hard-language/\n=======================================================================\nIcelandic Tutorial by Daniel Roche\n\n1. Pronunciation\n\nIcelandic has many English sounds due the languages both coming from the same language tree. Unless mentioned, assume English pronunciation.\n\nÁ á - said as “ow” as in cow\n\nÐ ð - said as “th” in the\n\nE e - said as the short “ai” sound in air\n\nÉ é - said as yeah, but shorter\n\nF f - at the start of words it is said as the English f. Between vowels as English. Before l or n as a b. Fnd is said as English m and fnt is said as hm\n\nG g - At the beginning of words it is said as a hard English g. In between vowels and at the end of a word a very soft throaty g resembling a toned down German “ch” at the back of the throat.\n\nIt is not pronounced between accented vowels. It is said as an Icelandic j between a vowel and j. After a vowel and before a t or s it is a hard German “ch”\n\nI i - said as “I” in win\n\nÍ í - said as “ee” in we\n\nJ j - said as a “y” at the beginning of words. Elsewhere it is aspirated before the “y” sound\n\nO o - said as “o” in hot\n\nÓ ó - said as “oh”\n\nR r - is always rolled\n\nS s - always an “s”, never said as a z\n\nU u - said as the French “eux” but shorter\n\nÚ ú - said as the “ew” sound in yew\n\nX x - said as a hard German “ch”\n\nY y - see I\n\nÝ ý - see í\n\nÞ þ - said as the “th” sound in thing\n\nÆ æ - said as “eye”\n\nÖ ö - said as “ ur ” as in murder\n\nHv - as “kf” in thankful\n\nLl - as “tl”\n\nNn - as tn after accented vowel or diphthong. This also happens between rl, rn, sl and sn\n\nPp, tt, kk are all aspirated\n\nAu - is said as “öj”\n\nEi and ey - said as the “a” sound in case\n\n[[Icelandic 2]]\n\n
From: http://odin.bio.miami.edu/icetrans.html\n\n ******** PRONUNCIATION ********\nVowels:\na (short) as in "man" (british accent) EX: land\na (long) as in "father" EX: maður\na (followed by "ng" or "nk") like "ou" in "house" EX: banki\ná like "ou" in "house" EX: láta\ne (short) as in "met" EX: selja\ne (long) like "ea" in "bear" EX: bera\né like "ye" in "yet" EX: éta\ni (short) as in "hit" EX: hitta\ni (long) as in "hit" but lengthened EX: bila\ni (followed by "ng" or "nk") like "ee" in "seen", but shorter EX: hringja\ní like "ee" in "seen" EX: líta\no (short) as in "not" EX: foss\no (long) like "aw" in "saw" EX: sofa\nó like "o" in "sole" EX: sól\nu (short) like "eu" in French "deux" EX: munnur\nu (long) sounds same as short but lengthened EX: sumar\nu (followed by "ng" or "nk") like "oo" in "moon", but shorter EX: ungur\nú like "oo" in "moon" EX: súpa\ny sounds same as Icelandic "i" or "í" EX: lyfta\ný sounds same as Icelandic "i" or "í" EX: sýna\næ like "i" in "mile" EX: mæla\nö (short) is similar to German "ö" like "ur" in "urgent" but shorter EX: högg\nö (long) like "ur" in "urgent" EX: vör\nau like the vowel in French "feuille", similar to "oy" in "boy" EX: aumur\nei like "ay" in "day" EX: heim\ney like "ay" in "day" EX: leysa\n\n*Note*\nAll Icelandic vowels can be long or short. They are normally pronounced long\nwhen followed by 1) a single consonant or 2) the consonant combinations\np, t, or k + r, j, or v (i.e. pr, tr etc.). They are normally pronounced short\nif followed by a double consonant or a consonant combination other than the \nones mentioned above.\n\nConsonants:\nb same as in English, but not strongly voiced EX: bað\nd same as in English, but not strongly voiced EX: dóttir\nf 1) at beginning of a word is same as in English EX: fara\n 2) in the middle or at the end of a word like English "v" EX: hafa\n 3) before "l" or "n" like English "b" EX: gafl, nafn\ng 1) at beginning of a word as in "good" EX: góður \n 2) after a vowel, unless followed by "i" or "j", like German g in "sagen"\n EX: saga, sagði\n 3) after a vowel and followed by "i" or "j" like "y" in "yet" EX: magi, segja\nh same as in English EX: ha\nhv like "qu" in "quick" EX: hvað\nj like "y" in "yes" EX: já\nk same as in English EX: kaup\nkk is preceded by a pre-aspiration EX: ekkert (ehh-kert)\nkl is also preceded by a pre-aspiration EX: afklæða\nkn is also preceded by a pre-aspiration EX: aðsókn\nl same as in English EX: laun\nll like "ttl" in "settle" but not with hard "t" sound (like "dl") EX: sæll\nm same as in English EX: með\nn same as in English EX: nei\nnn 1) after "á", "í", "ó", "ú", "ý", "æ", "au", "ei", or "ey" like "dn" \n EX: steinn \n 2) after all other vowels and in the suffixed definate article sounds like \n "nn" in English EX: finna\np same as in English except when before "s", "k", or "t" where it then in\n combination sounds like "f" EX: skips, dýpka, dýpt \npp is preceded by a pre-aspiration EX: sloppur\npl is also preceded by a pre-aspiration EX: depla\npn is also preceded by a pre-aspiration EX: opna\nr like in English only trilled EX: far \nrl like Icelandic "ll" above EX: karl\nrn like Icelandic "nn" above EX: barn\ns as in "mouse" EX: mús\nt same as in English EX: takk\ntt is preceded by a pre-aspiration EX: hætta\ntl is also preceded by a pre-aspiration EX: betla\ntn is also preceded by a pre-aspiration EX: batna\nv same as in English EX: við\nx same as in English EX: buxur\nz like "s" in "sun" EX: verzlun\nþ like "th" in "thin" EX: þunnur\nð like "th" in "breathe" is never found at beginning of word EX: staða \n\nAccent:\nThe accent of Icelandic words fall in almost all cases on the first syllable.\nThe exceptions are:\n1) words that have the negative prefix "ó-" meaning "un-" as in "unwilling."\n EX: óhreinindi\n2) words that have the prefix "all-" meaning "rather" or "very" EX: allfeginn\nIn these two cases, the accent falls equally on the first two syllables or \nmainly on the second syllable.\n\n******** PHRASES ********\nWhat's new? Hvað er að frétta?\nnothing remarkable ekkert merkilegt\nnothing much ekkert mikið\nHow's it going? Hvernig gengur?\nDo you remember me? Manst þú eftir mér?; Manstu eftir mér?\nsame to you somuleiðis \nsincerely yours yðar einlægur\nWho cares! Hverjum er ekki sama?\nCheer up! Hresstu þig við!, *Vertu ekki svona neikvæður!\nAs far as I know. . . Eftir því sem ég best veit. . .\nBy the way. . . *Meðan ég man. . .\nBy all means. . . Endilega. . . \nIts no use. Þetta er tilgangslaust.\nWhat do you think? Hvað heldur þú?\nShe's a babe. Hun er skvísa., skutla., gella.\nShe goes on and on. Hún heldur áfram og áfram.\nUp until now.. Fram að nú; Hingað til; Fram að þessu..\nIt is surrounded by.. Það er umlukið; Það er umkringt af; *Í kringum það er..\nin front of fyrir framan\nJust for fun. Bara til skemmtunar.\nI can't help it. Ég get ekki að því gert.\nHe's nuts. Hann er klikkaður.\nWhat's up? Hvað segir þú gott?\nneat! (as in great!) sniðugt!\nConsider it done. Skal gert. ; *Því er lokið.\nMy dream came true. Draumar mínir urðu að veruleika.\nLet's face it. . . *Gerum okkur grein fyrir þessu. . . \nHe's full of shit! *Hann er rugludallur.\nThey died. Þau létust. ; Þau féllu frá.\nWhat a shame. Hvílík leiðindi.; Hvílík niðurlæging. ; Hvílík skömm.\nKeep it to yourself. Segðu engum frá því.\nHer days are numbered. Hún á stutt eftir. ; Hún er feig.\nSo what's the point? *Hvað varstu svo að reyna að segja?\nThat's beyond me. *Það er fyrir ofan minn skilning.\nin the nick of time á síðustu sekúndunum ; á elleftu stundu\nYou should have known better! Þú ættir að vita betur!\nI'm losing my temper! Það er að fjúka í mig! \nI'm losing my temper! Ég er að reiðast!\nDo you get it (understand)? Nærðu þessu?; Skilur þú þetta?\nGive me a call. Hafðu samband.; Hringdu í mig.\nI like her/him. Mér líkar við hana/hann.\nI love her/him. Ég elska hana/hann.\nI'm staying put. Ég verð um kyrrt.\nGo to hell! Farðu til fjandanns!\nI'm sorry. Fyrirgefðu.\nLearn it by heart. Lærðu þetta utanbókar.\nLet's get together. Hittumst. ; Komum saman.\nHe's driving me nuts! Hann er að gera mig brjálaðan! \nShe's driving me nuts! Hún er að gera mig brjálaðan! \nIt's driving me nuts! Það er að gera mig brjálaðan!\nJust imagine! Ímyndaðu þér bara! ; Hugsaðu þér!\nThat goes without saying. Þetta er sjálfsagt.\nShe's my pride and joy. Hún er stolt mitt og skemmtan.\nYou hit the jackpot. Þú hafðir rétt fyrir þér. \nYou hit the jackpot. Þú vannst stóra vinninginn.\nWhat is the exchange rate? Hvert er skiptahlutfallið?\nHow much is the postage? Hvað kostar mikið undir þetta?\nI haven't a clue. Ég hef ekki minnstu hugmynd.\nKeep your chin up. *Halltu hökunni hátt.\nYou get on my nerves. Þú pirrar mig.\nYou get on my nerves. Þú ferð í taugarnar á mér. (dir. trans)\nIt's a matter of time. Þetta er spurning um tíma.\nGet lost! Farðu!; Láttu þig hverfa! \nGet lost! Drullaðu þér í burtu!\nLet's make the best of it. Gerum það besta úr þessu. \nLet's make the best of it. Gerum bara gott úr þessu.\nLook out! Varaðu þig!\nIt looks bad. Það lítur illa út.\nMake up your mind. Ákveddu þig.\nOn the other hand. . . Hinsvegar. . .\nWhat's the matter with you? Hvað er að þér?\nWe barely made it. Við rétt sluppum.\nEat shit and shut up! Éttu skít og þegiðu! \nHow can you say that? Hvernig getur þú sagt það?\nThat's a different case altogether. Það er allt annað mál. \nThat's a different case altogether. Það er allt annar handleggur.\nDon't judge a book by its cover. Ekki dæma bók af kilinum (kjölur)\nIf I'm not mistaken. . . Ef ég hef ekki rangt fyrir mér. . .\nKeep in touch! Hafðu samband!\nShame on you! Skammastu þín!\nJust a moment. Augnablik.\nI'm as happy as can be. Ég er eins ánægður og ég get orðið. \nI'm as happy as can be. Ég er í sjöunda himni.\nI see ég skil\nI know exactly what you're talking about. Ég veit alveg hvað þú ert að tala um.\nsee you later bless á meðan\nsleep soundly sofðu vel (one person)\nsleep soundly sofið vel (two or more people)\nclose enough nærri lagi\nbye sjáumst\nbye all bless allir\ngood night góða nótt\nI'm going at 11PM to see 1984 Ég fer klukkan 23.00 að sjá 1984\nWho in the world are you? Hver í veröldinni ert þú?\nDo you speak english? Talarðu ensku?\nI only speak english. Ég tala bara ensku.\nNice to meet you. Gleður mig að kynnast þér.\nSee you later. Sjáumst síðar.\nI know. Ég veit.\nHow old are you? Hvað ertu gamall? (male); gömul? (fem)\nMy name is. . . Ég heiti. . .\nI don't know. Ég veit ekki.\nIt was nothing. Það var ekkert.\nWhat is your name? Hvað heitir þú?\nHow does one say. . . Hvernig segir maður. . .\nin Icelandic á íslensku\nGood day. Góðan dag.\nGood evening. Gott kvöld.\nSend it to me. Sendu mer það.\nIs that really true? Er það (virkilega) satt?\nWhere do you come from? Hvaðan komið þér?\nWhere do you come from? Hvaðan kemur þú? (common spoken form)\nWhere are you from? Hvaðan ertu?\nI am from. . . Ég er frá. . .\nCould you speak more slowly please? Gætir þú talað svolítið hægar?\nYou are very beautiful. Þú ert mjög falleg.\nYou are very funny. Þú ert mjög fyndin.\nCan you help me with. . . Geturðu hjálpað mér með. . .\nHow far away is it? Hversu langt í burtu er það?\nShow me. Vísið mér. ; Vísaðu.\nShow them to me. Vísið mér á það.\nWhat will it cost? Hversu (mikið) kostar það?\nHow much for that? Hvað kostar þetta?\nI like that. Þetta líkar mér.\nI don't like that. Mér líkar þetta ekki.\nWhere is the. . . ? Hvar er. . . ?\nI am lost. Ég er villtur.\nThere has been an accident. Það hefur orðið slys.\nCould you help me please? Gætir þú hjálpað mér?\nHow do I get to. . . Hvernig kemst ég til. . .\nWhere is the hospital? Hvar er sjúkrahúsið?\nWhere is a telephone? Hvar er næsti sími?\nWhere is the bathroom? Hvar er salernið?\nWhere can I exchange money? Hvar get ég skipt peningum?\nWhat do you want? Hvað viljið þer?\nthanks a lot, thanks much takk kærlega\nI will stay with you. Ég skal vera hjáyður.\nI am sick. Ég er veikur.\nHi, whats going on? Hallo, hvað er um að vera?\nWho sent you? Hver sendi yður?\nAre you ill? Er yður ilt?\nAre you hungry? Eruð þér hungraðir?\nAre you cold? Er yður kalt?\nI am cold. Mér er kalt.\nI am hot. Mér er heitt. \nbad weather óveður\ntrue sannur\nkeep away from halda sig fjarri, forðast\nthat is to say það er að segja\nat last loksins\nhelp hjálp (noun), hjálpa (verb)\ngo to bed hátta\nget up, get out of bed fara á fætur\ncare about kæra sig um\ndid it work? virkaði það?\nhave to go verð að fara\nAre you finished? Ertu búinn?\ndoesn't work virkar ekki\nIs someone there? Er einhver hér?\nIs everything in good order? Er allt í lagi?\nHow do you do. Komið þér sælir. ; Komdu sæll. (male); Komdu sæl. (fem)\nWhat is your religion? Hverrar trúar ert þú?\nPlease tell me. Gerið þér svo vel að segja mér.\nI don't understand. Ég skil ekki.\nI do not understand you. Ég skil yður ekki.\nI am grateful. Ég er þakklátur. (male); þakklát. (fem)\nYes or no? Já eða nei?\nWhat time is it? Hvað er klukkan?\nWhat is that? Hvað er þetta?\nWhat did you say? Hvað segið þér?\nEverything is all right. Allt í Lagi.\nI am reading. Ég er að lesa.\nI was reading. Ég var að lesa.\nI have been reading. Ég hef verið að lesa.\nI had been reading. Ég hafði verið að lesa.\nI shall probably be reading. Ég mun vera/verða að lesa.\nI shall be reading. Ég verð að lesa.\nI am going to sleep. Ég fer að sofa.\nI went to sleep. Ég fór að sofa.\nI shall/will (not) go. Ég skal (ekki) fara.\nYou shall/will (not) go. Þú skalt (ekki) fara. \nHe shall/will (not) go. Hann skal (ekki) fara.\nMust you go? Þurfið þið (þér) að fara?\nHe told me to go. Hann sagði mér að fara.\nWhere do you live? Hvar áttu heima?\nWhen do you celebrate national holidays? Hvenær heldurðu þjóðhátíðardaga?\nWhen will you celebrate? Hvenær heldurðu upp á það?\nI wish you a merry Christmas. Ég oska þer gleðilegra jóla.\nMerry Christmas Gleðileg jól\nHappy new year Gleðileg nýár\nHappy and prosperous new year Gott og farsælt komandi ár \nWhen did you go? Hvenær fórstu?\nWhen were you there? Hvenær varstu þar?\nWhat is that supposed to do? Hvað á það að gera?\nWhat does that mean? Hvað þýðir það?\nWhat did you see? Hvað sástu?\nWho should I talk to? Við hvern ætti ég að tala?\nWhy do you ask? Af hverju spyrðu?\nHow does it work? Hvernig virkar það?\nHow do I do that? Hvernig geri ég það?\nHow did you do that? Hvernig gerðirðu þetta?\nIt's all the same to me. Það er allt það sama fyrir mér.\nGee, thanks a lot. Váá, takk rosalega.\nAh come on. (you must be kidding) Nei, hættu nú (þú hlýtur að vera að grínast)\nHe's at the top of his class. Hann er efstur í sínum bekk.\nCut it out! (stop that) Hættu þessu!\nI'm beat. Ég er búinn.\nI'm wiped out. Ég er ALVEG búinn.\nI'm exhausted. Ég er örmagna.\nThat does me good. Þetta gerir mér gott.\nThe coast is clear. Gatan er greið. \nIt is safe to go on. það er óhætt að halda áfram.\nI risked my neck for you! Ég setti mig í hættu fyrir þig!\nI put myself in a dangerous situation for you.\nÉg setti mig í hættulega aðstöðu fyrir þig.\nI was just thinking about you. Ég var að hugsa um þig.\nI was just thinking about you. Ég var rétt í þessu að hugsa um þig. \nand so on - etc. o.s. frv. - og svo framvegis\n\n******** ADJECTIVES/ADVERBS ********\nabsurd fjarstæður\naccidental slysalegur, tilviljunarkenndur\naccurate nákvæmur\nactive starfsamur, virkur\nadvanced framhalds-, þróaður, nútímalegur\naffirmative jákvæður\naged aldurhniginn, gamall\nagile lipur, fimur\nagrarian landbúnaðar-, bænda-\nagreeable þægilegur, geðfelldur\nalcoholic áfengur, drykkjusjúkur\namazing furðulegur\nangry reiður\nbad slæmur, vondur\nbeautiful, lovely fallegur, legur (male); fallegar (fem)\nbest bestur\nbold djarfur, frekur\nboring leiðinlegur\nbrief stuttur, stuttorður\nbroad breiður, víðáttumikill\nbroken brotinn, slitinn, bilaður\nbright bjartur\ncheap, inexpensive ódýr\ncool (adj) svalur\ncold (adj) kaldur, kuldalegur\ncomfortable þægilegur\ncosy notalegur, þægilegur\ncourageous hugrakkur\ncowardly huglaus, ragur\ncrazy brjálaður, sturlaður\ncruel grimmur, miskunnarlaus\ncurious forvitinn, forvitnilegur\ncute sætur, snotur\ndangerous hættulegur\ndark, black dimmur\ndrunk drukkinn\ndry þurr\ndumb mállaus\nfirst fyrstur\nfurious, mad óður\ngood (adj) góður\ngreat mikill\nhigh hár\nholy heilagur\nhot heitur, bragðsterkur (taste)\ninteresting, full of fun skemmtilegur\nlast siðastur\nlively líflegur, fjörugur\nlonely einmana, fáfarinn\nlost týndur, vegaviltur\nloud hávær, hávaðasamur\nlow lágur\nmarried giftur\nnormal eðlilegur, venjulegur\nobnoxious, repellant óaðlaðandi\nobvious auðljós, greinilegur\npolite kurteis, hæverskur, siðfágaður\npoor fátækur\npregnant ófrísk\nrevolting (adj) viðbjóðslegur\nrich ríkur, efnaður\nscenic náttúrufagur, landslags-\nshort stuttur, skammur, lágur (stature)\nsick sjúkur\nsignificant mikilvægur, marktækur\nsincere einlægur\nsmart velklæddur\nsober ódrukkinn\nsour súr\nstrong sterkur, öflugur\nstupid heimskur\nsweet sætur\ntalented hæfileikaríkur, gáfaður\ntall hár, stór vexti\nterrible hræðilegur, skelfilegur, óskaplegur\nugly ljótur\nwet blautur, votur\nwild villtur, villi-\nwonderful furðulegur, dásamlegur\n\n******** USEFUL ********\nCardinals (numbers) Frumtölur \nnumber tala, númer\nnothing ekkert\n0 núll\n1 einn\n2 tveir\n3 þrir\n4 fjórir\n5 fimm\n6 sex\n7 sjö\n8 átta\n9 níu\n10 tíu\n11 ellefu\n12 tólf\n13 þrettán\n14 fjórtán\n15 fimmtán\n16 sextán\n17 sautján\n18 átján\n19 nítján\n20 tuttugu\n21 tuttugu og einn\n30 þrjátíu\n35 þrjátíu og fimm\n36 þrjátíu og sex\n40 fjörutíu\n50 fimmtíu\n60 sextíu\n70 sjötíu\n80 áttatíu\n90 níutíu\n100 hundrað\n1000 þúsund\n1000000 milljón\n\nwho hver (interrogative), sem (relative)\nwhat hvað, það sem (prn); hvaða (adj)\nwhere hvar, hvert, þar sem\nwhy hvers vegna, af hverju\nhow hvernig, hversu\nwhen hvenær (adv), þegar (conj)\nnext næstur\nnever aldrei, ekki nokkurn tíma\nmorning morgunn, í morgun (this m.)\nnoon, midday hádegi\nevening kvöld, í kvöld (this e.)\nmidnight miðnætti\nday dagur, sólarhringur\nweek vika\ntime tími, skipti\nsecond sekúnda\nminute mínúta\nhour klukkustund, tími\ntoday dagurinn í dag, í dag, nú\ntommorow morgundagur, framtiðin, á morgun\ntonight kvöld\nyesterday gærdagur\n\nSunday Sunnudagur\nMonday Mánudagur\nTuesday þriðjudagur\nWednesday Miðvikudagur\nThursday Fimmtudagur\nFriday Föstudagur\nSaturday Laugardagur\n\nmonth mánuður\nyear ár\n\nJanuary janúar\nFebruary febrúar\nMarch mars\nApril april\nMay maí\nJune júní\nJuly júlí\nAugust agúst\nSeptember september\nOctober október\nNovember nóvember \nDecember desember\n\nwinter vetur\nspring vor\nsummer sumar\nautumn, fall haust\n\nred rauður\nyellow gulur\ngreen grænn\nblue blár\npurple purpuralitur, rauðfjólublár\n\nnorth norður\neast auster\nwest vestur\nsouth suður\nsouth-east suðaustur\nsouth-west suðvestur\n\n******** PEOPLE SOCIETY ********\nnationality þjóðerni\nAfrican Afríkubúi (noun), afrískur (adj)\nAsian Asíu-, austurálfu-, austrænn\nAmerica Ameríka\nAmerican Ameríkumaður (noun), amerískur (adj)\nArgentina Argentína\nAustria Austurríki\nAustralia Ástralía\nAustralian Ástralíubúi (noun), ástralskur (adj)\nBelgium Belgía\nBrazil Brasilía\nBritain Bretland\nCanada Kanada\nChile Chile\nDenmark Danmörk\nDane dani\nDanish danska (people), danskur (adj)\nFrance Frakkland\nFrench (language) franska\nFrench (adjective) franskur\nFinland Finnland\nGerman (language) þýska\nGerman (adjective) þýskur\nGermans (plural) þjóðverjar\nGermany Þýskaland\nGreat Britain Stóra Bretland\nGreece Grikkland\nHong Kong Hong Kong\nIceland Ísland\nIcelander Íslendingur\nIndia Indland\nIndian (from India) Indverji\nIndian (American) Indiáni\nIreland Írland\nIrish írskur\nIsrael Ísrael\nItaly Ítalía\nKorea Kórea\nMalaysia Malasía\nMexico Mexíkó\nNetherlands, Holland Holland\nNorway Noregur\nPortugal Portúgal\nSingapore Singapore\nSpain Spánn\nSpanish (adjective) spánskur \nSpanish (language) spænska\nSweden Svíþjóð\nSwede Svíi\nSwitzerland Sviss\nThailand Taíland\nTaiwan Tævan\nTurkey Tyrkland\nYugoslav (person) Júgóslavi\nYugoslavia Júgóslavía\n\nfamily fjölskylda\nman maður\nwoman kvenmaður, kona\nfather, daddy faðir, pabbi\nfather and son feðgar\nfather and daughter feðgin\nsweetheart kærasti (m), kærasta (f)\nmother móðir\nmother and son mæðgin\nmother and daughter mæðgur\nparents foreldrar\ngrandmother amma\ngrandfather afi\ngreat-grandmother langamma\ngreat-grandfather langafi\nelder eldri\nin-laws tengdafólk\nboy drengur, strákur\ngirl stúlka\nchild barn\nbrother bróðir\nsister systir\nbrother and sister systkin\nhusband maðurinn\nwife konan\nson sonur\ndaughter dóttir\nrelatives frændfólk\nfriend vinur\nteenager táningur\nperson persóna\npeople fólk, þjóð\nlanguage tungumál\npolitics stjórnmál, stjórnmálafræði\nwar ófriður\nrefugee flóttamaður, landflótta maður\nsoldier hermaður\nreceptionist móttökustarfsmaður\nsoul sál\nmechanic vélvirki\ndoctor læknir\nwaiter þjónn\ncraftsman, tradesman, artisan iðnaðarmaður\nsports, athletics íþróttir\n\n******** LANDSCAPE ********\nmountain fjall\nmountain pass fjallaskarð\nmountain range fjallgarður\nglacier (skrið)jökull\nvalley dalur\nriver á\nriver (wide) fljót\nlake stöðuvatn\ncoast sjávarströnd\nterrain land, landslag\nroad vegur\npath gangstígur, braut, leið\ntrail spor, slóð\nfield völlur, akur, svæði, svið, flekkur\ndesert eyðimörk\nforest skógur \nland land, jörð\nlandmark landamerki, kennileiti\nlandscape landslag\nlandslide skriða\n\n******** FOOD AND DRINK ********\nfood fæða, matur\nmeat kjöt\nbread brauð\nmeal máltið\nfruit ávöxtur\nmilk mjólk (noun), mjólka (verb)\nwater vatn\nbeer bjór\nwine vín\nhoney hunang\napple epli\nbanana banani, bjúgaldin\ncarrot gulrót\ncherry kirsuber\nchocolate (noun) súkkulaði\nnut hneta (food); ró, brjálæðingur (metal)\nonion laukur\n\n******** TECHNICAL ********\nchemistry efnafræði\nmathematics stærðfræði\nphysics eðlisfræði\nbinary code tvítölukerfi\ndata gögn, upplýsingar\ndatabase gagnasafn\ncomputer tölva\nanalog computer myndræn tölva\nmicrocomputer örtölva\n(computer) programming forritun\nword processing language ritvinnslumál\nfile þjöl\nsoftware hugbúnaður\nmachinery vélar, vélbúnaður\nmachine language vélamál\nlow level language óæðra forritunarmál\nmotor mótor\nradio útvarp, útvarpstæki (r. set)\ntelephone sími (noun), síma (verb)\ntelevision sjónvarp, sjónvarpstæki (t. set)\nqueue, line biðöð\nshortwave stuttbylgja\n\n******** VERBS ********\ntalk, speak tala\ndance dans, dansleikur (noun); dansa (verb)\nwrite skrifa, rita\nplay leikur (noun), leika (verb)\ntake taka\nsolve leysa úr, ráða (gátu)\ngive gefa\nread lesa\nteach kenna\nstop stöðva, stoppa\ngo fara\nlook sjá, líta\nbring koma með, færa, flytja\nlisten hlusta\nwalk ganga, labba\nrun hlaupa, renna\nfly fluga (noun), fljúga (verb)\ndrive aka, keyra (car); reka (sheep)\nfeed fæða, fóðra (animals)\neat borða, éta\ndrink drykkur (noun), drekka (verb)\ncomprehend skilja, fela í sér\nopen opna \nclose loka, enda, ljúka, byrgja\nscream, howl orga\ncause orsaka\n\nAn excerpt of "Saga Íslands" from Icelandic Grammar Texts Glossary \nby Stefán Einarsson\n\nÞegar Norðmenn fundu Ísland á síðara hluta níundu aldar, komu þeir að óbyggðu\nlandi. Með stofnun Alþingis settu þeir á fót lýðveldi, sem stóð þar til um \nmiðja þrettándu öld. Þá hafði um nokkur ár verið ófriður innanlands meðal\nhöfðingja, og endaði hann með því, að landið gekk Noregskonungi á hönd 1264.\nMeð norsku krúnunni komst landið undir dönsk yfirráð 1380.\n\nThe above narration was supplied by Auður Valtýsdóttir Gallagher.\n
/***\n|''Name:''|abego.IncludePlugin|\n|''Version:''|1.0.0 (2007-02-08)|\n|''Type:''|plugin|\n|''Source:''|http://tiddlywiki.abego-software.de/#IncludePlugin|\n|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|\n|''Documentation:''|[[IncludePlugin Documentation|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]]|\n|''Community:''|([[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23IncludePlugin]]) ([[Support|http://groups.google.com/group/TiddlyWiki]])|\n|''Copyright:''|&copy; 2007 [[abego Software|http://www.abego-software.de]]|\n|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|\n|''~CoreVersion:''|2.1.3|\n|''Browser:''|Firefox 1.5.0.9 or better; Internet Explorer 6.0|\n***/\n/***\nThis plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/IncludePlugin/Plugin-Include-src.1.0.0.js]] to get the readable source code.\n***/\n///%\nif(!window.abego){window.abego={};}var invokeLater=function(_1,_2,_3){return abego.invokeLater?abego.invokeLater(_1,_2,_3):setTimeout(_1,_2);};abego.loadFile=function(_4,_5,_6){var _7=function(_8,_9,_a,_b,_c){return _8?_5(_a,_b,_9):_5(undefined,_b,_9,"Error loading %0".format([_b]));};if(_4.search(/^((http(s)?)|(file)):/)!=0){if(_4.search(/^((.\s:\s\s)|(\s\s\s\s)|(\s/))/)==0){_4="file://"+_4;}else{var _d=document.location.toString();var i=_d.lastIndexOf("/");_4=_d.substr(0,i+1)+_4;}_4=_4.replace(/\s\s/mg,"/");}loadRemoteFile(_4,_7,_6);};abego.loadTiddlyWikiStore=function(_f,_10,_11,_12){var _13=function(_14,_15){if(_12){_12(_14,"abego.loadTiddlyWikiStore",_15,_f,_11);}};var _16=function(_17,_18){var _19=_18.indexOf(startSaveArea);var _1a=_18.indexOf("<!--POST-BODY-END--"+">");var _1b=_18.lastIndexOf(endSaveArea,_1a==-1?_18.length:_1a);if((_19==-1)||(_1b==-1)){return config.messages.invalidFileError.format([_f]);}var _1c="<html><body>"+_18.substring(_19,_1b+endSaveArea.length)+"</body></html>";var _1d=document.createElement("iframe");_1d.style.display="none";document.body.appendChild(_1d);var doc=_1d.document;if(_1d.contentDocument){doc=_1d.contentDocument;}else{if(_1d.contentWindow){doc=_1d.contentWindow.document;}}doc.open();doc.writeln(_1c);doc.close();var _1f=doc.getElementById("storeArea");_17.loadFromDiv(_1f,"store");_1d.parentNode.removeChild(_1d);return null;};var _20=function(_21){_13("Error when loading %0".format([_f]),"Failed");_10(undefined,_f,_11,_21);return _21;};var _22=function(_23){_13("Loaded %0".format([_f]),"Done");_10(_23,_f,_11);return null;};var _24=function(_25,_26,_27,_28){if(_25===undefined){_20(_28);return;}_13("Processing %0".format([_f]),"Processing");var _29=config.messages.invalidFileError;config.messages.invalidFileError="The file '%0' does not appear to be a valid TiddlyWiki file";try{var _2a=new TiddlyWiki();var _2b=_16(_2a,_25);if(_2b){_20(_2b);}else{_22(_2a);}}catch(ex){_20(exceptionText(ex));}finally{config.messages.invalidFileError=_29;}};_13("Start loading %0".format([_f]),"Started");abego.loadFile(_f,_24,_11);};(function(){if(abego.TiddlyWikiIncluder){return;}var _2c="waiting";var _2d="loading";var _2e=1000;var _2f=-200;var _30=-100;var _31=-300;var _32;var _33=[];var _34={};var _35=[];var _36;var _37=[];var _38;var _39=function(){if(_32===undefined){_32=config.options.chkUseInclude===undefined||config.options.chkUseInclude;}return _32;};var _3a=function(url){return "No include specified for %0".format([url]);};var _3c=function(){var _3d=_35;_35=[];if(_3d.length){for(var i=0;i<_37.length;i++){_37[i](_3d);}}};var _3f;var _40=function(){if(_36!==undefined){clearInterval(_36);}_3f=0;var _41=function(){abego.TiddlyWikiIncluder.sendProgress("","","Done");};_36=setInterval(function(){_3f++;if(_3f<=10){return;}clearInterval(_36);_36=undefined;abego.TiddlyWikiIncluder.sendProgress("Refreshing...","","");refreshDisplay();invokeLater(_41,0,_2f);},0);};var _42=function(_43){var _44;for(var i=0;i<_33.length;i++){var _46=abego.TiddlyWikiIncluder.getStore(_33[i]);if(_46&&(_44=_43(_46,_33[i]))){return _44;}}};var _47=function(){if(!window.store){return invokeLater(_47,100);}var _48=store.fetchTiddler;store.fetchTiddler=function(_49){var t=_48.apply(this,arguments);if(t){return t;}if(config.shadowTiddlers[_49]!==undefined){return undefined;}if(_49==config.macros.newTiddler.title){return undefined;}return _42(function(_4b,url){var t=_4b.fetchTiddler(_49);if(t){t.includeURL=url;}return t;});};if(_33.length){_40();}};var _4e=function(){if(!window.store){return invokeLater(_4e,100);}var _4f=store.getTiddlerText("IncludeList");if(_4f){wikify(_4f,document.createElement("div"));}};var _50=function(_51){var _52=function(){var _53=store.forEachTiddler;var _54=function(_55){var _56={};var _57;var _58=function(_59,_5a){if(_56[_59]){return;}_56[_59]=1;if(_57){_5a.includeURL=_57;}_55.apply(this,arguments);};_53.call(store,_58);for(var n in config.shadowTiddlers){_56[n]=1;}_56[config.macros.newTiddler.title]=1;_42(function(_5c,url){_57=url;_5c.forEachTiddler(_58);});};store.forEachTiddler=_54;try{return _51.apply(this,arguments);}finally{store.forEachTiddler=_53;}};return _52;};var _5e=function(_5f,_60){return _5f[_60]=_50(_5f[_60]);};abego.TiddlyWikiIncluder={};abego.TiddlyWikiIncluder.setProgressFunction=function(_61){_38=_61;};abego.TiddlyWikiIncluder.getProgressFunction=function(_62){return _38;};abego.TiddlyWikiIncluder.sendProgress=function(_63,_64,_65){if(_38){_38.apply(this,arguments);}};abego.TiddlyWikiIncluder.onError=function(url,_67){displayMessage("Error when including '%0':\sn%1".format([url,_67]));};abego.TiddlyWikiIncluder.hasPendingIncludes=function(){for(var i=0;i<_33.length;i++){var _69=abego.TiddlyWikiIncluder.getState(_33[i]);if(_69==_2c||_69==_2d){return true;}}return false;};abego.TiddlyWikiIncluder.getIncludes=function(){return _33.slice();};abego.TiddlyWikiIncluder.getState=function(url){var s=_34[url];if(!s){return _3a(url);}return typeof s=="string"?s:null;};abego.TiddlyWikiIncluder.getStore=function(url){var s=_34[url];if(!s){return _3a(url);}return s instanceof TiddlyWiki?s:null;};abego.TiddlyWikiIncluder.include=function(url,_6f){if(!_39()||_34[url]){return;}var _70=this;_33.push(url);_34[url]=_2c;var _71=function(_72,_73,_74,_75){if(_72===undefined){_34[url]=_75;_70.onError(url,_75);return;}_34[url]=_72;_35.push(url);invokeLater(_3c);};var _76=function(){_34[url]=_2d;abego.loadTiddlyWikiStore(url,_71,null,_38);};if(_6f){invokeLater(_76,_6f);}else{_76();}};abego.TiddlyWikiIncluder.forReallyEachTiddler=function(_77){var _78=function(){store.forEachTiddler(_77);};_50(_78).call(store);};abego.TiddlyWikiIncluder.getFunctionUsingForReallyEachTiddler=_50;abego.TiddlyWikiIncluder.useForReallyEachTiddler=_5e;abego.TiddlyWikiIncluder.addListener=function(_79){_37.push(_79);};abego.TiddlyWikiIncluder.addListener(_40);if(config.options.chkUseInclude===undefined){config.options.chkUseInclude=true;}config.shadowTiddlers.AdvancedOptions+="\sn<<option chkUseInclude>> Include ~TiddlyWikis (IncludeList | IncludeState | [[help|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]])\sn^^(Reload this ~TiddlyWiki to make changes become effective)^^";config.shadowTiddlers.IncludeState="<<includeState>>";var _7a=function(e,_7c,_7d){if(!anim||!abego.ShowAnimation){e.style.display=_7c?"block":"none";return;}anim.startAnimating(new abego.ShowAnimation(e,_7c,_7d));};abego.TiddlyWikiIncluder.getDefaultProgressFunction=function(){setStylesheet(".includeProgressState{\sn"+"background-color:#FFCC00;\sn"+"position:absolute;\sn"+"right:0.2em;\sn"+"top:0.2em;\sn"+"width:7em;\sn"+"padding-left:0.2em;\sn"+"padding-right:0.2em\sn"+"}\sn","abegoInclude");var _7e=function(){var e=document.createElement("div");e.className="includeProgressState";e.style.display="none";document.body.appendChild(e);return e;};var _80=_7e();var _81=function(_82){removeChildren(_80);createTiddlyText(_80,_82);_7a(_80,true,0);};var _83=function(){invokeLater(function(){_7a(_80,false,_2e);},100,_30);};var _84=function(_85,_86,_87,url,_89){if(_87=="Done"||_87=="Failed"){_83();return;}if(_86=="abego.loadTiddlyWikiStore"){_3f=0;if(_87=="Processing"){_81("Including...");}}else{_81(_85);}};return _84;};abego.TiddlyWikiIncluder.setProgressFunction(abego.TiddlyWikiIncluder.getDefaultProgressFunction());config.macros.include={};config.macros.include.handler=function(_8a,_8b,_8c,_8d,_8e,_8f){_8c=_8e.parseParams("url",null,true,false,true);var _90=parseInt(getParam(_8c,"delay","0"));var _91=_8c[0]["url"];var _92=getFlag(_8c,"hide",false);if(!_92){createTiddlyText(createTiddlyElement(_8a,"code"),_8d.source.substring(_8d.matchStart,_8d.nextMatch));}for(var i=0;_91&&i<_91.length;i++){abego.TiddlyWikiIncluder.include(_91[i],_90);}};config.macros.includeState={};config.macros.includeState.handler=function(_94,_95,_96,_97,_98,_99){var _9a=function(){var s="";var _9c=abego.TiddlyWikiIncluder.getIncludes();if(!_9c.length){return "{{noIncludes{\snNo includes or 'include' is disabled (see AdvancedOptions)\sn}}}\sn";}s+="|!Address|!State|\sn";for(var i=0;i<_9c.length;i++){var inc=_9c[i];s+="|{{{"+inc+"}}}|";var t=abego.TiddlyWikiIncluder.getState(inc);s+=t?"{{{"+t+"}}}":"included";s+="|\sn";}s+="|includeState|k\sn";return s;};var _a0=function(){removeChildren(div);wikify(_9a(),div);if(abego.TiddlyWikiIncluder.hasPendingIncludes()){invokeLater(_a0,500,_31);}};var div=createTiddlyElement(_94,"div");invokeLater(_a0,0,_31);};var _a2=Tiddler.prototype.isReadOnly;Tiddler.prototype.isReadOnly=function(){return _a2.apply(this,arguments)||this.isIncluded();};Tiddler.prototype.isIncluded=function(){return this.includeURL!=undefined;};Tiddler.prototype.getIncludeURL=function(){return this.includeURL;};var _a3={getMissingLinks:1,getOrphans:1,getTags:1,reverseLookup:1,updateTiddlers:1};for(var n in _a3){_5e(TiddlyWiki.prototype,n);}var _a5=function(){if(abego.IntelliTagger){_5e(abego.IntelliTagger,"assistTagging");}};_47();invokeLater(_4e,100);invokeLater(_a5,100);})();\n//%/\n
//{{{\nconfig.formatters.unshift( {\n name: "inlinesliders",\n match: "\s\s+\s\s+\s\s+\s\s+|\s\s<slider",\n lookaheadRegExp: /(?:\s+\s+\s+\s+|<slider) (.*?)(?:>?)\sn((?:.|\sn)*?)\sn(?:====|<\s/slider>)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart )\n {\n var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\su00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");\n var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");\n panel.style.display = "none";\n wikify(lookaheadMatch[2],panel);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n },\n onClickSlider : function(e)\n {\n if(!e) var e = window.event;\n var n = this.nextSibling;\n n.style.display = (n.style.display=="none") ? "block" : "none";\n return false;\n }\n})\n//}}}
[[W3schools tutorials|http://www.w3schools.com/js/default.asp]]\n[[Basic JavaScript|http://www.yourhtmlsource.com/javascript/basicjavascript.html]]\n\n[[Opensource templates|http://www.opensourcetemplates.org/templates/preview.php?template_id=1054723136]]\n[[layers|http://www.webconcerns.co.uk/javascript/dhtml/dhtml_page.asp]]
//If you use TiddlyWiki a lot, it may pay to learn these codes. The top five are essential to know. //\n\n\n//~TiddlyWiki // \n;CTRL ENTER\n:Closes and accepts changes to the current tiddler being edited.\n;ESCAPE\n:Closes and discards changes to the current tiddler being edited.\n\n//Cut, Copy, and Paste// \n;CTRL X \n:Cut the selected text to the clipboard\n;CTRL C\n:Copy the selected text to the clipboard\n;CTRL V\n:Paste the clipboard to the current cursor position\n\n//Undo and Redo//\n;CTRL Z \n:Undo the last editing command\n;CTRL Y \n:Redo the last undo command\n\n//Navigating Text//\n;HOME \n:Move cursor to the beginning of the current line\n;END \n:Move the cursor to the end of the current line\n;CTRL HOME \n:Move the cursor the very beginning of the current text field.\n;CTRL END \n:Move the cursor to the very end of the last line of the current text field.\n;PAGE UP \n:Moves the cursor up the same number of lines as is displayed in the textarea.\n;PAGE DOWN \n:Moves the cursor down the same number of lines as is displayed in the textarea.\n;UP ARROW \n:Move the cursor up one line to the current horizontal cursor position. If the current horizontal position doesn’t exist, the cursor will move to the end of the line.\n;DOWN ARROW \n:Move the cursor down one line to the current horizontal cursor position. If the current horizontal position doesn’t exist, the cursor will move to the end of the line.\n;LEFT ARROW\n:Moves the cursor one character to the left.\n;RIGHT ARROW \n:Moves the cursor one character to the right.\n;CTRL RIGHT ARROW \n:Moves the cursor one word to the right, placing the cursor before the first letter of the next word.\n;CTRL LEFT ARROW \n:Moves the cursor one word to the left, placing the cursor before the first letter of the previous word.\n\n//Selecting Text//\n;CTRL A \n:Selects everything in a text area.\n;SHIFT HOME \n:Selects all text from the cursor to the beginning of the current line.\n;SHIFT END \n:Selects all text from the cursor to the end of the current line.\n;SHIFT CTRL HOME \n:Selects all text from the cursor the very beginning of the current text field.\n;SHIFT CTRL END \n:Selects all text from the cursor to the very end of the last line of the current text field.\n;SHIFT PAGE UP \n:Selects all text from the cursor up the same number of lines as is displayed in the textarea.\n;SHIFT PAGE DOWN \n:Selects all text from the cursor down the same number of lines as is displayed in the textarea.\n;SHIFT UP ARROW - \n:Selects all text from the cursor up one line to the current horizontal cursor position. If the current horizontal position doesn’t exist on that line, the cursor will selects all text from the end of the line.\n;SHIFT DOWN ARROW \n:Selects all text from the cursor down one line to the current horizontal cursor position. If the current horizontal position doesn’t exist on that line, the cursor will Selects all text to the end of the line.\n;SHIFT LEFT ARROW \n:Selects one character to the left of the cursor.\n;SHIFT RIGHT ARROW \n:Selects one character to the right of the cursor.\n;SHIFT CTRL RIGHT ARROW \n:Selects all characters from the cursor to the first letter of the next word.\n;SHIFT CTRL LEFT ARROW \n:Selects all characters from the cursor to the first letter of the previous word.\n\nTaken from [[Tid-Help|http://tidhelp.tiddlyspot.com/]]
+++(testcookie)!!!{{bold{[+ English]}}}...\n[[Words are symbols too|http://www.symbols.net/words/]]\n[[Dictionary.com|http://dictionary.reference.com/]]\n[[Plain English Campaign|http://www.plainenglish.co.uk/]]\n[[Educational Jargon|http://www.tes.co.uk/jargonbuster/]]\n[[Financial Jargon (Tesco's)|http://www.tescofinance.com/personal/finance/smarter_money/tools/glossary.jsp]]\n[[Web Jargonbuster: BBC|http://www.bbc.co.uk/webwise/course/jargon/a.shtml]]\n[[NHS Jargon Buster|http://www.peterborough.nhs.uk/default.asp?id=17]]\n===\n+++(testcookie)!!!{{bold{[+ French]}}}...\n[[French: BBC|http://www.bbc.co.uk/languages/french/]]\n[[French Assistant|http://www.frenchassistant.com/overview.asp]]\n[[Learn French Online (resources)|http://www.cwgsy.net/private/bihet/learnfr.htm]]\n[[france-pub.com|http://www.france-pub.com/french/index.html]]\n===\n[[Spanish]]\n[[Polish]]\n[[Icelandic]]\n[[GLOSS|https://gloss.dliflc.edu/]] Defence Language Institute: Global Language Online Support Something...\n[[Chinese characters|http://www.archchinese.com/]]\n!!Odds and Sods\n{{floatbox{\nTranslation\n[[KudoZ open glossary|http://www.proz.com/kog]]\n}}} \nOther languages ........ <<section MORE \n[[How to learn any language|http://how-to-learn-any-language.com/e/index.html]]\n[[Learn to read Urdu|http://www.ukindia.mistral.co.uk/zurdu1.htm]]\n[[Learn Dutch|http://www.learndutch.org/]]\n[[Learn to speak Dutch|http://www.speakdutch.nl/]]\n>>\n\nSign Language ........... <<section MORE [[Artsigns|http://www.artsigns.ac.uk/]]\n[[ASL fingerspelling quiz|http://www.lifeprint.com/asl101/fingerspelling/animatedquizzes.htm]]>>\n\nLanguage and linguistics <<section MORE [[Phonetics|http://www.unil.ch/Jahia/site/ling/cache/offonce/pid/24434;jsessionid=2C7117EEA65403E40FEA8434672ED5C3.jvm1]]\n[[Rapid language learning|http://mirror.mricon.com/french/french.html]]\n[[The Linguist List|http://linguistlist.org/langres/index.html]]\n[[Non-verbal Dictionary|http://www.nonverbal-dictionary.org/2013/01/nonverbal-communication.html]]\n>>\n\n!______________________________________________________________________
/***\n|''Name:''|LaunchApplicationPlugin|\n|''Author:''|Lyall Pearce|\n|''Source:''|http://www.Remotely-Helpful.com/TiddlyWiki/LaunchApplication.html|\n|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''Version:''|1.3.1|\n|''~CoreVersion:''|2.2.4|\n|''Requires:''| |\n|''Overrides:''| |\n|''Description:''|Launch an application from within TiddlyWiki using a button|\n!!!!!Usage\n<<<\n{{{<<LaunchApplication "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}\n* buttonLabel is anything you like\n* tooltip is anything you like\n* application is a path to the executable\n* arguments is any command line arguments the application requires.\n* You must supply relative path from the location of the TiddlyWiki OR a fully qualified path\n* Forward slashes works fine for Windows\n\neg.\n\n{{{\n<<LaunchApplication "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>\n}}}\n<<LaunchApplication "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>\n\n{{{\n<<LaunchApplication "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>\n}}}\n<<LaunchApplication "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>\n \n{{{\n<<LaunchApplication "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>\n}}}\n<<LaunchApplication "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>\n\n{{{\n<<LaunchApplication "C Drive" "Folder" "file:///c:/">>\n}}}\n<<LaunchApplication "C Drive" "Folder" "file:///c:/">>\n\n\n!!!!!Revision History\n* 1.1.0 - leveraged some tweaks from from Bradly Meck's version (http://bradleymeck.tiddlyspot.com/#LaunchApplicationPlugin) and the example text.\n* 1.2.0 - Make launching work in Linux too and use displayMessage() to give diagnostics/status info.\n* 1.3.0 - execute programs relative to TiddlyWiki html file plus fix to args for firefox.\n* 1.3.1 - parameters to the macro are properly parsed, allowing dynamic paramters using {{{ {{javascript}} }}} notation.\n\n<<<\n***/\n//{{{\nversion.extensions.LaunchApplication = {major: 1, minor: 3, revision: 1, date: new Date(2007,8,7)};\nconfig.macros.LaunchApplication = {};\n\nfunction LaunchApplication(appToLaunch,appParams) {\n if(! appToLaunch)\n return;\n var tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("\s\s")+1);\n if(!tiddlyBaseDir || tiddlyBaseDir == "") {\n tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("/")+1);\n }\n // if Returns with a leading slash, we don't want that.\n if(tiddlyBaseDir.substring(0,1) == "/") {\n tiddlyBaseDir = tiddlyBaseDir.substring(1);\n }\n if(appToLaunch.indexOf("file:///") == 0) // windows would have C:\s as the resulting file\n {\n tiddlyBaseDir = "";\n appToLaunch = appToLaunch.substring(8);\n }\n\n if (config.browser.isIE) {\n // want where the tiddly is actually located, excluding tiddly html file\n\n var theShell = new ActiveXObject("WScript.Shell");\n if(theShell) {\n // the app name may have a directory component, need that too\n // as we want to start with current working dir as the location\n // of the app.\n var appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("\s\s"));\n if(! appDir || appDir == "") {\n appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("/"));\n }\n appParams = appParams.length > 0 ? " \s""+appParams.join("\s" \s"")+"\s"" : "";\n try {\n theShell.CurrentDirectory = decodeURI(tiddlyBaseDir + appDir);\n var commandString = ('"' +decodeURI(tiddlyBaseDir+appToLaunch) + '" ' + appParams);\n pluginInfo.log.push(commandString);\n theShell.run(commandString);\n } catch (e) {\n displayMessage("LaunchApplication cannot locate/execute file '"+tiddlyBaseDir+appToLaunch+"'");\n return;\n }\n } else {\n displayMessage("LaunchApplication failed to create ActiveX component WScript.Shell");\n }\n } else { // Not IE\n // want where the tiddly is actually located, excluding tiddly html file\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\n var launchString;\n try { // try linux/unix format\n launchString = decodeURI(tiddlyBaseDir+appToLaunch);\n file.initWithPath(launchString);\n } catch (e) {\n try { // leading slash on tiddlyBaseDir\n launchString = decodeURI("/"+tiddlyBaseDir+appToLaunch);\n file.initWithPath(launchString);\n } catch (e) {\n try { // try windows format\n launchString = decodeURI(appToLaunch).replace(/\s//g,"\s\s");\n file.initWithPath(launchString);\n } catch (e) {\n try { // try windows format\n launchString = decodeURI(tiddlyBaseDir+appToLaunch).replace(/\s//g,"\s\s");\n file.initWithPath(launchString);\n } catch (e) {\n displayMessage("LaunchApplication cannot locate file '"+launchString+"' : "+e);\n return;\n } // try windows mode\n } // try windows mode\n }; // try with leading slash in tiddlyBaseDir\n }; // try linux/unix mode\n try {\n if (file.isFile() && file.isExecutable()) {\n displayMessage("LaunchApplication executing '"+launchString+"' "+appParams.join(" "));\n var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);\n process.init(file);\n process.run(false, appParams, appParams.length);\n }\n else\n {\n displayMessage("LaunchApplication launching '"+launchString+"' "+appParams.join(" "));\n file.launch(); // No args available with this option\n }\n } catch (e) {\n displayMessage("LaunchApplication cannot execute/launch file '"+launchString+"'");\n }\n }\n};\n\nconfig.macros.LaunchApplication.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n // 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters\n \n if (params[0] && params[1] && params[2]) {\n var theButton = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication);\n theButton.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));\n params.splice(0,3);\n theButton.setAttribute("appParameters", params.join(" "));\n return;\n }\n}\n\n function onClickLaunchApplication(e) {\n var theAppToLaunch = this.getAttribute("appToLaunch");\n var theAppParams = this.getAttribute("appParameters").readMacroParams();\n LaunchApplication(theAppToLaunch,theAppParams);\n }\n\n//}}}\n
<<toggleSideBar SideBar wider hide>>\n\n<html><div align="center">\n<iframe src="http://www.handprint.com/HP/WCL/color1.html" frameborder="1" width="695" height="500"></iframe>\n</div></html>\n\n\n\n
[[LinuxQuestions|http://www.linuxquestions.org/questions/index.php]]\n[[DistroWatch|http://distrowatch.com/]]\n[[Free Software Magazine|http://www.freesoftwaremagazine.com/]]\n[[Linuxfordogs|http://linuxfordogs.tiddlyspot.com/]]
+++(menucookie)!!!!{{bold{[Quickies =Z|click to open or close]}}}\n[[Google|http://www.google.co.uk/]]\n[[Startpage|https://startpage.com/]]\n[[Textise|http://textise.net/]]\n\n[[ebay|http://www.ebay.co.uk/?site=3]]\n[[TT webmail|http://webmail.talktalk.net/]]\n[[More|Quickies...]]\n===\n+++(menucookie)!!!!{{bold{[Computers =Z|click to open or close]}}}\n[[PC bits]] \n[[Software]]\n[[Linux]]\n[[Games]]\n[[ADSL]]\n[[XP]]\n[[Security]]\n[[Guides]]\n[[Programming]]\n===\n!!!![[Footy]]\n!!!![[Online Courses]]\n!!!![[Things|Things]]\n!!!![[Volcanoes]]\n!!!![[News]]\n\n<<toggleSideBar>>\n<html><div align="center">\n<iframe src="http://free.timeanddate.com/clock/il97tsn/n136/tluk/tccdf/pccdf/tt0/tw0" frameborder="0" width="191" height="18"></iframe>\n\n</div></html>\n\nTW version <<version>>
[[ArcGIS|http://www.arcgis.com/home/index.html]]\n[[OpenStreetMap|http://www.openstreetmap.org/]]
0 = O\n1 = A\n2 = B\n3 = C\n4 = D\n5 = E\n6 = S\n7 = G\n8 = H\n9 = N\n[[100|http://100.tiddlyspot.com/]]
[[wikiHow|http://www.wikihow.com/Improve-Your-Memory]]\n[[The memory page|http://www.thememorypage.net/tut.htm]]\n[[The Human Memory|http://www.human-memory.net/types_short.html]]\n\n[[Explorable.com|https://explorable.com/autobiographical-memory]]
[[SearchMedica|http://www.searchmedica.co.uk/]]\n[[Ask|http://uk.ask.com/?o=312]]\n[[Hero|http://www.hero.ac.uk/uk/reference_and_subject_resources/resources/internet_search_facilities473.cfm]]
!!Odds & Sods\n[[wikiHow|http://www.wikihow.com/Improve-Your-Memory]]\n[[The memory page|http://www.thememorypage.net/tut.htm]]\n[[The Human Memory|http://www.human-memory.net/types_short.html]]\n[[Memorise.com|http://memorize.com/]]\n[[Memorize Everything|http://www.memorizeeverything.com/numbers/]]\n[[Grey Matters|http://headinside.blogspot.com/]]\n[[Can You Name?...|http://www.canyouname.com/]] Dormant\n[[Sporcle|http://www.sporcle.com/]]\n[[Resources for effective reading|http://www.lifeoptimizer.org/2007/04/18/50-free-resources-for-effective-reading/]]\n[[Spreeder|http://spreeder.com/app.php?intro=1]]\n\n[[Write or Die!|http://lab.drwicked.com/writeordie.html]]\n[[Wikipedia|http://en.wikipedia.org/wiki/Main_Page]] On-line encyclopedia\n[[NeuroScience for kids: the eye|http://faculty.washington.edu/chudler/eyetr.html]]\n[[The Senses|http://www.hhmi.org/senses/]] Howard Hughes Medical Institute\n\n[[Kurzgesagt.org|http://kurzgesagt.org/]] Kurzgesagt (German for „in a nutshell“) is a Munich based youtube channel and design studio with a distinctive perspective on design and animation within the fields of education, science and commerce.
A. Changing Inches to Centimeters:\nFORMULA:\nOne inch = 2.5 centimeters \nEXAMPLE: 10 inches = 25 centimeters (10 X 2.5) \nB. Changing Magnification (X) to Diopter (D):\nFORMULA:\nX = D/4 OR D = 4X \nEXAMPLE: \nYou are working with a low vision student who is using a 5X \nmicroscope. In order to determine the diopter equivalent: \nMultiply 4 times 5 = 20 diopter \nC. Determination of Focal Distance in Centimeters (cm): (when diopter value is known) \nFORMULA: 100/diopters = focal distance (cm) \nOR \nfocal distance (fd) = 100 cm/D \nEXAMPLE: \nYou are working with a low vision student who is using a +20.00 \n(20 diopter) microscope. In order to determine the theoretical* working\ndistance in centimeters: \nDivide 100 by 20 (diopters) = 5 cm \nD. Determination of Focal Distance in Inches: (when diopter value is known) \nFORMULA: 40/ diopters = focal distance (inches) \nEXAMPLE: \nYou are working with a low vision student who is using a +20.00 \n(20 diopter) microscope. In order to determine the theoretical* \nworking distance in inches: \nDivide 40 by 20 (diopters) = 2 inches \n
/***\n|''Name:''|NavigationMacro|\n|''Description:''|Create next and previous buttons between tiddlers|\n|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|\n|''Source:''|http://tw.lewcid.org/#NavigationMacro|\n|''Code Repository:''|http://tw.lewcid.org/svn/plugins|\n|''Version:''|2.0|\n|''Date:''||\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.2.2|\n!!Usage:\n* Add the macro to the ViewTemplate, specifying the tiddlers to navigate between.\n** Below the line: {{{<div class='viewer' macro='view text wikified'></div>}}}<br>add: <br> {{{<div class='viewer' macro='navigation tiddlers:[[Tiddler1 Tiddler2 Tiddler3]]'></div>}}}\n* Note the tiddlers parameter that lists the tiddlers and their order, to navigate between.\n* Alternatively you can use an evaluated parameter to provide an array of tiddlers or tiddler titles.\n** Example: {{{tiddlers:{{store.getTaggedTiddlers("Lewcid","title");}}}}}\n\n!!Example:\n[[Demo|NavigationDemo1]]\n***/\n// /%\n//!BEGIN-PLUGIN-CODE\nresolveTitle = function(t)\n{\n if (t instanceof Tiddler) t = t.title;\n return store.tiddlerExists(t) ? t : null;\n};\n\nconfig.macros.navigation = {};\nconfig.macros.navigation.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n if (!store.tiddlerExists(tiddler.title))\n return false;\n var e = createTiddlyElement(place,"span",null,"nav");\n e.setAttribute("refresh","macro");\n e.setAttribute("macroName",macroName);\n e.setAttribute("params",paramString);\n e.setAttribute("tiddler",tiddler.title);\n this.refresh(e,paramString);\n};\n\nconfig.macros.navigation.refresh = function(place,params)\n{\n var tiddler = store.getTiddler(place.getAttribute("tiddler"));\n var params = place.getAttribute("params").parseParams("tiddlers",null,true);\n removeChildren(place);\n var tiddlers = getParam(params,"tiddlers",undefined);\n if (typeof tiddlers == 'string')\n tiddlers = tiddlers.readBracketedList();\n if (tiddlers == undefined)\n alert("no source tiddlers defined for navigation");\n var contents = [];\n for (var i=0;i<tiddlers.length;i++)\n {\n var title = resolveTitle(tiddlers[i]);\n contents.push(title);\n }\n var navIndex = contents.indexOf(tiddler.title);\n if (navIndex == -1)\n return false;\n if (contents[navIndex-1])\n {\n wikify("[[<< Previous|"+contents[navIndex-1]+"]]",place);\n place.lastChild.className += " navPrev";\n }\n if (contents[navIndex+1])\n {\n wikify("[[Next >>|"+contents[navIndex+1]+"]]",place);\n place.lastChild.className += " navNext";\n }\n var theTable = createTiddlyElement(place,"table",null,"nav");\n var theBody = createTiddlyElement(theTable,"tbody");\n var theRow = createTiddlyElement(theBody,"tr");\n for (var j=0; j<contents.length; j++)\n {\n var box = createTiddlyElement(theRow,"td",null,"navlinkcell"," ");\n box.onclick = onClickTiddlerLink;\n box.setAttribute("tiddlyLink",contents[j]);\n box.title = (contents[j]);\n if (contents[j] ==tiddler.title)\n box.className += " activenav";\n }\n};\n\nsetStylesheet(\n ".navNext {float:right;font-family:'Courier New',Courier,monospace;}\sn"+\n ".navPrev, .navPrevious{float:left;font-family:'Courier New',Courier,monospace;}\sn"+\n ".nav .tiddlyLink {color:#000; background:transparent;border:none;padding:0;margin:0;}\sn"+\n ".nav {padding:0;margin:0;}\sn"+\n ".viewer .nav table {margin:0 auto !important; border:0px solid #000;padding:0;border-collapse:separate;}\sn"+\n ".viewer .nav table tr{padding:0; margin:0;border-spacing: 1px;}\sn"+\n ".viewer .nav table td {padding:4px; border:1px solid #000; border-spacing: 0px;cursor:pointer;cursor:hand}\sn"+\n ".viewer .nav .activenav{background:#000 !important;}\sn","NavigationPluginStyles");\n//!END-PLUGIN-CODE\n// %/
/***\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//}}}
/***\n|Name|NewDocumentPlugin|\n|Source|http://www.TiddlyTools.com/#NewDocumentPlugin|\n|Version|1.5.1|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides||\n|Description|Quickly create new TiddlyWiki documents from your existing document, with just one click|\n\nUse the {{{<<newDocument>>}}} macro to place a "new document" link into your sidebar/mainmenu/any tiddler (wherever you like). Select this command to automatically create a "new.html" document containing a specific set of tagged tiddlers. Optional parameters let you specify an alternate path/filename for the new file, or different tags to match. You can also indicate "ask" for either parameter, which will trigger a prompt for input when the command is selected.\n\n!!!!!Usage\n<<<\n{{{<<newDocument label:text filename tag tag tag...>>}}}\n{{{<<newDocument label:text filename all>>}}}\n{{{<<newDocument label:text filename snap ID>>}}}\n where:\n* ''label:text'' defines //optional// alternative link text (replaces default "new document" display)\n* ''filename'' is any local path-and-filename. If no parameters are provided, the default is to create the file "new.html" in the current directory. If a filename is provided without a path (i.e., there is no "/" in the input), then the current directory is also assumed. Otherwise, this parameter is expected to contain the complete path and filename needed to write the file to your local hard disk. If ''ask'' is used in place of the filename parameter then, when the command link is selected, a message box will be automatically displayed so you can select/enter the path and filename.\n* ''tag tag tag...'' is a list of one or more space-separated tags (use quotes or {{{[[]]}}} around tags that contain spaces). The new document will include all tiddlers that match at least one of the tags in the list. The default is to include tiddlers tagged with <<tag includeNew>>. The special value ''all'' may be used to match every tiddler (even those without tags). If ''ask'' is used in place of the tags then, when the command link is selected, a message box will be automatically displayed so you can enter the desired tags at that time.\n* When you use the keyword ''snap'' in place of the tags, you can generate a file containing the //rendered// CSS-and-HTML that is currently being displayed in browser. By default, the snapshop uses the 'contentWrapper' DOM element ID to automatically include all the TiddlyWiki elements, such as the sidebars and header, in addition to the center 'story' column containing the tiddler content.\n* You can limit the snapshot to capture only a portion of the rendered TiddlyWiki elements by specifiying an optional alternate DOM element ID, such as "displayArea" (the entire center 'story' column) or even just a single tiddler (e.g., "tidderMyTiddlerTitle", assuming that "MyTiddlerTitle" is currently displayed). Only the portions of the document that are contained //within// the specified DOM element will be transcribed to the resulting snapshot file. If ''ask'' is used in place of a DOM element ID, you will be prompted to enter the ID (default is "contentWrapper") when the snapshot is being taken. This allows you to easily enter the ID of any currently displayed tiddler to make quick snapshots of specific tiddlers.\n\nNote: as of version 1.4.0 of this plugin, support for selecting tiddlers by using tag *expressions* has been replaced with simpler, more efficient "containsAny()" logic. To create new ~TiddlyWiki documents that contain only those tiddlers selected with advanced AND/OR/NOT Boolean expressions, you can use the filtering features provided by the ExportTiddlersPlugin (see www.TiddlyTools.com/#ExportTiddlersPlugin).\n<<<\n!!!!!Examples:\n<<<\n{{{<<newDocument>>}}}\nequivalent to {{{<<newDocument new.htm includeNew systemTiddlers>>}}}\ncreates default "new.html" containing tiddlers tagged with either<<tag includeNew>>or<<tag systemTiddlers>>\ntry it: <<newDocument>>\n\n{{{<<newDocument empty.html systemTiddlers>>}}}\ncreates "empty.html" containing only tiddlers tagged with<<tag systemTiddlers>>\n//(reproduces old-style (pre 2.0.2) empty file)//\ntry it: <<newDocument empty.html systemTiddlers>>\n\n{{{<<newDocument "label:create Import/Export starter" ask importexport>>}}}\nsave importexport tiddlers to a new file, prompts for path/file\ntry it: <<newDocument "label:create Import/Export starter" ask importexport>>\n\n{{{<<newDocument ask ask>>}}}\nprompts for path/file, prompts for tags to match\ntry it: <<newDocument ask ask>>\n\n{{{<<newDocument ask all>>}}}\nsave all current TiddlyWiki contents to a new file, prompts for path/file\ntry it: <<newDocument ask all>>\n\n{{{<<newDocument ask snap>>}}}\ngenerates snapshot of currently displayed document, prompts for path/file\ntry it: <<newDocument ask snap>>\n\n{{{<<newDocument ask snap tiddlerNewDocumentPlugin>>}}}\ngenerates snapshot of this tiddler ONLY, prompts for path/file\ntry it: <<newDocument ask snap tiddlerNewDocumentPlugin>>\n\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''NewDocumentPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2007.02.12 [1.6.0]'' in onClickNewDocument(), reset HTML source 'markup'\n''2006.10.23 [1.5.1]'' in onClickNewDocument(), get saved parameter value for snapID instead of using default "contentWrapper" (oops!)\n''2006.10.18 [1.5.0]'' new optional param for 'snap'... specify alternative DOM element ID (default is still "contentWrapper"). Based on a suggestion from Xavier Verges.\n''2006.08.03 [1.4.3]'' in promptForFilename(), for IE (WinXP only), added handling for UserAccounts.CommonDialog\n''2006.07.29 [1.4.2]'' in onClickNewDocument(), okmsg display is now linked to newly created file\n''2006.07.24 [1.4.1]'' in promptForFilename(), check for nsIFilePicker.returnCancel to allow nsIFilePicker.returnOK **OR** nsIFilePicker.returnReplace to be processed.\n''2006.05.23 [1.4.0]'' due to very poor performance, support for tag *expressions* has been removed, in favor of a simpler "containsAny()" scan for tags.\n''2006.04.09 [1.3.6]'' in onClickNewDocument, added call to convertUnicodeToUTF8() to better handle international characters.\n''2006.03.15 [1.3.5]'' added nsIFilePicker() handler for selecting filename in moz-based browsers. IE and other non-moz browsers still use simple prompt() dialog\n''2006.03.15 [1.3.0]'' added "label:text" param for custom link text. added special "all" filter parameter for "save as..." handling (writes all tiddlers to output file)\n''2006.03.09 [1.2.0]'' added special "snap" filter parameter to generate and write "snapshot" files containing static HTML+CSS for currently rendered document.\n''2006.02.24 [1.1.2]'' Fix incompatiblity with TW 2.0.5 by removing custom definition of getLocalPath() (which is now part of TW core)\n''2006.02.03 [1.1.1]'' concatentate 'extra' params so that tag expressions don't have to be quoted. moved all text to 'formatted' string definitions for easier translation.\n''2006.02.03 [1.1.0]'' added support for tag EXPRESSIONS. plus improved documentation and code cleanup\n''2006.02.03 [1.0.0]'' Created.\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.newDocument = {major: 1, minor: 6, revision: 0, date: new Date(2007,2,12)};\n\nconfig.macros.newDocument = {\n newlabel: "new document",\n newprompt: "Create a new TiddlyWiki 'starter' document",\n newdefault: "new.html",\n allparam: "all",\n saveaslabel: "save as...",\n saveasprompt: "Save current TiddlyWiki to a different file",\n snapparam: "snap",\n snaplabel: "create a snapshot",\n snapprompt: "Create a 'snapshot' of the current TiddlyWiki display",\n snapdefault: "snapshot.html",\n snapID: "contentWrapper",\n snapIDprompt: "Please enter a DOM element ID for the desired content",\n snapIDerrmsg: "Unrecognized document element ID: '%0'",\n askparam: "ask",\n labelparam: "label:",\n fileprompt: "Please enter a filename",\n filter: "includeNew",\n filterprompt: "Match one or more tags:\sn(space-separated, use [[...]] around tags containing spaces)",\n filtererrmsg: "Error in tag filter '%0'",\n snapmsg: "Document snapshot written to %1",\n okmsg: "%0 tiddlers written to %1",\n failmsg: "An error occurred while creating %0"\n};\n\nconfig.macros.newDocument.handler = function(place,macroName,params) {\n\n var path=getLocalPath(document.location.href);\n var slashpos=path.lastIndexOf("/"); if (slashpos==-1) slashpos=path.lastIndexOf("\s\s"); \n if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash\n\n if (params[0] && params[0].substr(0,config.macros.newDocument.labelparam.length)==config.macros.newDocument.labelparam)\n var label=params.shift().substr(config.macros.newDocument.labelparam.length)\n var filename=params.shift(); if (!filename) filename=config.macros.newDocument.newdefault;\n if (params[0]==config.macros.newDocument.snapparam) {\n params.shift();\n if (!label) var label=config.macros.newDocument.snaplabel;\n var prompt=config.macros.newDocument.snapprompt;\n var defaultfile=config.macros.newDocument.snapdefault;\n var snapID=config.macros.newDocument.snapID;// default to "contentWrapper"\n if (params[0]) var snapID=params.shift(); // alternate DOM element for snapshot\n }\n if (params[0]==config.macros.newDocument.allparam) {\n if (!label) var label=config.macros.newDocument.saveaslabel;\n var prompt=config.macros.newDocument.saveasprompt;\n var defaultfile=getLocalPath(document.location.href);\n var slashpos=defaultfile.lastIndexOf("/"); if (slashpos==-1) slashpos=defaultfile.lastIndexOf("\s\s");\n if (slashpos!=-1) defaultfile=defaultfile.substr(slashpos+1); // get filename only\n }\n if (!prompt) var prompt=config.macros.newDocument.newprompt;\n if (!label) var label=config.macros.newDocument.newlabel;\n if (!defaultfile) var defaultfile=config.macros.newDocument.newdefault;\n\n var btn=createTiddlyButton(place,label,prompt,onClickNewDocument);\n btn.path=path;\n btn.file=filename;\n btn.defaultfile=defaultfile;\n btn.snapID=snapID; // NULL unless snapshot is being taken\n btn.filter=params.length?params:[config.macros.newDocument.filter]; \n}\n\n// IE needs explicit global scoping for functions called by browser events\nwindow.onClickNewDocument=function(e)\n{\n if (!e) var e = window.event; var btn=resolveTarget(e);\n\n // assemble document content, write file, report result\n var okmsg=config.macros.newDocument.okmsg;\n var failmsg=config.macros.newDocument.failmsg;\n var count=0;\n var out="";\n if (btn.snapID) { // HTML+CSS snapshot\n var snapID=btn.snapID;\n if (btn.snapID==config.macros.newDocument.askparam)\n snapID=prompt(config.macros.newDocument.snapIDprompt,config.macros.newDocument.snapID);\n if (!document.getElementById(snapID)) { // if specified element does not exist\n if (snapID) // ID=null if prompt was cancelled by user\n displayMessage(config.macros.newDocument.snapIDerrmsg.format([snapID]));\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);\n }\n var styles=document.getElementsByTagName("style");\n out+="<html>\sn<head>\sn<style>\sn";\n for(var i=0; i < styles.length; i++)\n out +="/* stylesheet from tiddler:"+styles[i].getAttribute("id")+" */\sn"+styles[i].innerHTML+"\sn\sn";\n out+="</style>\sn</head>\sn<body>\sn\sn"+document.getElementById(snapID).innerHTML+"\sn\sn</body>\sn</html>";\n okmsg=config.macros.newDocument.snapmsg;\n } else { // TW starter document\n // get the TiddlyWiki core code source\n var sourcefile=getLocalPath(document.location.href);\n var source=loadFile(sourcefile);\n if(source==null) { alert(config.messages.cantSaveError); return null; }\n // reset existing HTML source markup\n source=updateMarkupBlock(source,"PRE-HEAD");\n source=updateMarkupBlock(source,"POST-HEAD");\n source=updateMarkupBlock(source,"PRE-BODY");\n source=updateMarkupBlock(source,"POST-BODY");\n // find store area\n var posOpeningDiv=source.indexOf(startSaveArea);\n var posClosingDiv=source.lastIndexOf(endSaveArea);\n if((posOpeningDiv==-1)||(posClosingDiv==-1)) { alert(config.messages.invalidFileError.format([sourcefile])); return; }\n // get the matching tiddler divs\n var match=btn.filter;\n if (match[0]==config.macros.newDocument.askparam) { // ask user for tags\n var newfilt=prompt(config.macros.newDocument.filterprompt,config.macros.newDocument.filter);\n if (!newfilt) return; // cancelled by user\n match=newfilt.readMacroParams();\n }\n var storeAreaDivs=[];\n var tiddlers=store.getTiddlers('title');\n for (var i=0; i<tiddlers.length; i++)\n if (match[0]==config.macros.newDocument.allparam || (tiddlers[i].tags && tiddlers[i].tags.containsAny(match)) )\n storeAreaDivs.push(tiddlers[i].saveToDiv());\n out+=source.substr(0,posOpeningDiv+startSaveArea.length);\n out+=convertUnicodeToUTF8(storeAreaDivs.join("\sn"))+"\sn\st\st";\n out+=source.substr(posClosingDiv);\n count=storeAreaDivs.length;\n }\n // get output path/filename\n var filename=btn.file;\n if (filename==config.macros.newDocument.askparam)\n filename=promptForFilename(config.macros.newDocument.fileprompt,btn.path,btn.defaultfile);\n if (!filename) return; // cancelled by user\n // if specified file does not include a path, assemble fully qualified path and filename\n var slashpos=filename.lastIndexOf("/"); if (slashpos==-1) slashpos=filename.lastIndexOf("\s\s");\n if (slashpos==-1) filename=btn.path+filename;\n var ok=saveFile(filename,out);\n var msg=ok?okmsg.format([count,filename]):failmsg.format([filename]);\n var link=ok?"file:///"+filename.replace(regexpBackSlash,'/'):""; // change local path to link text\n clearMessage(); displayMessage(msg,link);\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);\n}\n//}}}\n\n//{{{\nfunction promptForFilename(msg,path,file)\n{\n if(window.Components) { // moz\n try {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');\n var nsIFilePicker = window.Components.interfaces.nsIFilePicker;\n var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);\n picker.init(window, msg, nsIFilePicker.modeSave);\n var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);\n thispath.initWithPath(path);\n picker.displayDirectory=thispath;\n picker.defaultExtension='html';\n picker.defaultString=file;\n picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);\n if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;\n }\n catch(e) { alert('error during local file access: '+e.toString()) }\n }\n else { // IE\n try { // XP only\n var s = new ActiveXObject('UserAccounts.CommonDialog');\n s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';\n s.FilterIndex=3; // default to HTML files;\n s.InitialDir=path;\n s.FileName=file;\n if (s.showOpen()) var result=s.FileName;\n }\n catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE\n }\n return result;\n}\n//}}}
[[BBC News|http://news.bbc.co.uk/]]\n[[Huffington Post UK|http://www.huffingtonpost.co.uk/]]\n[[Guardian|http://www.guardian.co.uk/]]\n\n[[The New Yorker|http://www.newyorker.com/]]\n\n!______________________________________________________________________
[[edX|https://courses.edx.org/]]\n[[mcb80x|http://www.mcb80x.org/]] Fundamentals of Neuroscience\n[[MIT|http://ocw.mit.edu/courses/]]\n[[Coursera|https://www.coursera.org/]]\n[[Khan Academy|https://www.khanacademy.org/]]\n[[FutureLearn|https://www.futurelearn.com/]]\n[[Stanford|https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about]]\n[[Alison|https://alison.com/courses]]\n[[Memrise|http://www.memrise.com/courses/english/icelandic/]] Icelandic\n[[CrashCourse|https://www.youtube.com/watch?v=qPix_X-9t7E]] The Nervous System, Part 1: (YouTube)\n
{{borderless{\n|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window| http://www.origami-resource-center.com/index.html ]]&nbsp;&raquo;|\n}}}<html><div align="center"><iframe src ="http://www.origami-resource-center.com/index.html" width="100%" align="center" height="600"></iframe></div></html>\n
{{borderless{\n|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://origami.iap-peacetree.org/basics.php?lang=1]]&nbsp;&raquo;|\n}}}<html><div align="center"><iframe src ="http://origami.iap-peacetree.org/basics.php?lang=1" width="100%" align="center" height="600"></iframe></div></html>\n
[[Aria|http://www.aria.co.uk/]]\n[[Advance|http://www.advancetec.co.uk/]]\n[[Misco|http://www.misco.co.uk/]]\n[[Scan|http://www.scan.co.uk/]]\n[[Microdirect|http://www.microdirect.co.uk/]]\n[[Crucial memory checker|http://www.crucial.com/uk/store/listmfgr.asp?cat=RAM]]\n\n[[PSU calculator|http://www.extreme.outervision.com/PSUEngine]]\n[[CPU Upgrade|http://www.cpu-upgrade.com/mb-PC_CHIPS/M811LU(V3.1).html]]\n[[SpeedswitchXP|http://www.diefer.de/speedswitchxp/]]\n[[Graphics cards compared|http://www.tomshardware.com/reviews/graphics-card,1923-7.html]]\n[[Hexus|http://forums.hexus.net/showthread.php?t=59795]]\n[[PSU Selection Guide|http://www.bleedinedge.com/guides/psu_select/psu_select_01.html]]\n[[Graphics card troubleshooting|http://www.playtool.com/pages/home/index.html]]\nhttp://www.osnews.com/story/25660/How_to_Integrate_SATA_and_IDE_Drives\n\n\n
<!--{{{-->\n<div class='header'>\n\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->
/***\n|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|\n|''Version:''|1.0.9 (2007-07-14)|\n|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.3|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Table of Content<html><a name="TOC"/></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>\n!Description<html><a name="Description"/></html>\nWith the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. \nEach part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts (e.g. {{{[[Quotes/BAX95]]}}} or {{{[[Hobbies|AboutMe/Hobbies]]}}}), use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.\n\n\n''Syntax:'' \n|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|\n|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//. <<br>>If you use a partName containing spaces you need to quote it (e.g. {{{"Major Overview"}}} or {{{[[Shortcut List]]}}}).|\n|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|\n|<html><i>any&nbsp;tiddler&nbsp;content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Applications<html><a name="Applications"/></html>\n!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>\nAssume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.\n\nNotice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Citation Index<html><a name="Citation"/></html>\nCreate a tiddler "Citations" that contains your "citations". \nWrap every citation with a part and a proper name. \n\n''Example''\n{{{\n<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// \nin //Proc. ICSM//, 1998.</part>\n\n<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// \nThesis, Uni Stuttgart, 2002.</part>\n\n<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// \nin //Proc. ICSM//, 1999.</part>\n}}}\n\nYou may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>\nYou may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list\n{{{\n* Item 1\n* Item 2\n* Item 3\n}}}\ninto a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.\n\nUsing the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.\n\n''Example''\n{{{\n|!Subject|!Items|\n|subject1|<<tiddler ./Cell1>>|\n|subject2|<<tiddler ./Cell2>>|\n\n<part Cell1 hidden>\n* Item 1\n* Item 2\n* Item 3\n</part>\n...\n}}}\n\nNotice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".\n\nBTW: The same approach can be used to create bullet lists with items that contain more than one line.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating Tabs<html><a name="Tabs"/></html>\nThe build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.\n\nWith the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.\n\n''Example''\nThe standard tabs at the sidebar are defined by the following eight tiddlers:\n* SideBarTabs\n* TabAll\n* TabMore\n* TabMoreMissing\n* TabMoreOrphans\n* TabMoreShadowed\n* TabTags\n* TabTimeline\n\nInstead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:\n{{{\n<<tabs txtMainTab \n Timeline Timeline SideBarTabs/Timeline \n All 'All tiddlers' SideBarTabs/All \n Tags 'All tags' SideBarTabs/Tags \n More 'More lists' SideBarTabs/More>>\n<part Timeline hidden><<timeline>></part>\n<part All hidden><<list all>></part>\n<part Tags hidden><<allTags>></part>\n<part More hidden><<tabs txtMoreTab \n Missing 'Missing tiddlers' SideBarTabs/Missing \n Orphans 'Orphaned tiddlers' SideBarTabs/Orphans \n Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>\n<part Missing hidden><<list missing>></part>\n<part Orphans hidden><<list orphans>></part>\n<part Shadowed hidden><<list shadowed>></part>\n}}}\n\nNotice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.\n\nE.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:\n{{{\n<<forEachTiddler \n sortBy 'tiddler.modified' descending \n write '(index < 100) ? "* [["+tiddler.title+"]]\sn":""'>>\n}}}\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Using Sliders<html><a name="Sliders"/></html>\nVery similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature\n\n''Example''\nIn a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.\n{{{\n...\n<<slider chkAboutDetails About/Details details "Click here to see more details">>\n<part Details hidden>\nTo give you a better overview ...\n</part>\n...\n}}}\n\nNotice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Revision history<html><a name="Revisions"/></html>\n* v1.0.9 (2007-07-14)\n** Bugfix: Error when using the SideBarTabs example and switching between "More" and "Shadow". Thanks to cmari for reporting the issue.\n* v1.0.8 (2007-06-16)\n** Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivière for reporting the issue.\n** Support "./partName" syntax inside <<tabs ...>> macro\n* v1.0.7 (2007-03-07)\n** Bugfix: <<tiddler "./partName">> does not always render correctly after a refresh (e.g. like it happens when using the "Include" plugin). Thanks to Morris Gray for reporting the bug.\n* v1.0.6 (2006-11-07)\n** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.\n* v1.0.5 (2006-03-02)\n** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.\n* v1.0.4 (2006-02-28)\n** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.\n* v1.0.3 (2006-02-26)\n** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.\n* v1.0.2 (2006-02-05)\n** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)\n* v1.0.1 (2006-01-27)\n** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.\n** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.\n* v1.0.0 (2006-01-25)\n** initial version\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Code<html><a name="Code"/></html>\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n//{{{\n//============================================================================\n// PartTiddlerPlugin\n\n// Ensure that the PartTiddler Plugin is only installed once.\n//\nif (!version.extensions.PartTiddlerPlugin) {\n\n\n\nversion.extensions.PartTiddlerPlugin = {\n major: 1, minor: 0, revision: 9,\n date: new Date(2007, 6, 14), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"\n};\n\nif (!window.abego) window.abego = {};\nif (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");\n\n//============================================================================\n// Common Helpers\n\n// Looks for the next newline, starting at the index-th char of text. \n//\n// If there are only whitespaces between index and the newline \n// the index behind the newline is returned, \n// otherwise (or when no newline is found) index is returned.\n//\nvar skipEmptyEndOfLine = function(text, index) {\n var re = /(\sn|[^\ss])/g;\n re.lastIndex = index;\n var result = re.exec(text);\n return (result && text.charAt(result.index) == '\sn') \n ? result.index+1\n : index;\n}\n\n\n//============================================================================\n// Constants\n\nvar partEndOrStartTagRE = /(<\s/part>)|(<part(?:\ss+)((?:[^>])+)>)/mg;\nvar partEndTagREString = "<\s\s/part>";\nvar partEndTagString = "</part>";\n\n//============================================================================\n// Plugin Specific Helpers\n\n// Parse the parameters inside a <part ...> tag and return the result.\n//\n// @return [may be null] {partName: ..., isHidden: ...}\n//\nvar parseStartTagParams = function(paramText) {\n var params = paramText.readMacroParams();\n if (params.length == 0 || params[0].length == 0) return null;\n \n var name = params[0];\n var paramsIndex = 1;\n var hidden = false;\n if (paramsIndex < params.length) {\n hidden = params[paramsIndex] == "hidden";\n paramsIndex++;\n }\n \n return {\n partName: name, \n isHidden: hidden\n };\n}\n\n// Returns the match to the next (end or start) part tag in the text, \n// starting the search at startIndex.\n// \n// When no such tag is found null is returned, otherwise a "Match" is returned:\n// [0]: full match\n// [1]: matched "end" tag (or null when no end tag match)\n// [2]: matched "start" tag (or null when no start tag match)\n// [3]: content of start tag (or null if no start tag match)\n//\nvar findNextPartEndOrStartTagMatch = function(text, startIndex) {\n var re = new RegExp(partEndOrStartTagRE);\n re.lastIndex = startIndex;\n var match = re.exec(text);\n return match;\n}\n\n//============================================================================\n// Formatter\n\n// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.\n//\n// @return true if a complete part section (including the end tag) could be processed, false otherwise.\n//\nvar handlePartSection = function(w) {\n var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);\n if (!tagMatch) return false;\n if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;\n\n // Parse the start tag parameters\n var arguments = parseStartTagParams(tagMatch[3]);\n if (!arguments) return false;\n \n // Continue processing\n var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);\n var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);\n if (endMatch && endMatch[1]) {\n if (!arguments.isHidden) {\n w.nextMatch = startTagEndIndex;\n w.subWikify(w.output,partEndTagREString);\n }\n w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);\n \n return true;\n }\n return false;\n}\n\nconfig.formatters.push( {\n name: "part",\n match: "<part\s\ss+[^>]+>",\n \n handler: function(w) {\n if (!handlePartSection(w)) {\n w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);\n }\n }\n} )\n\n//============================================================================\n// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers \n// as tiddlers.\n\nvar currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)\n\n// Return the match to the first <part ...> tag of the text that has the\n// requrest partName.\n//\n// @return [may be null]\n//\nvar findPartStartTagByName = function(text, partName) {\n var i = 0;\n \n while (true) {\n var tagMatch = findNextPartEndOrStartTagMatch(text, i);\n if (!tagMatch) return null;\n\n if (tagMatch[2]) {\n // Is start tag\n \n // Check the name\n var arguments = parseStartTagParams(tagMatch[3]);\n if (arguments && arguments.partName == partName) {\n return tagMatch;\n }\n }\n i = tagMatch.index+tagMatch[0].length;\n }\n}\n\n// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler \n// object, using fullName as the Tiddler's title. \n//\n// All remaining properties of the new Tiddler (tags etc.) are inherited from \n// the parentTiddler.\n// \n// @return [may be null]\n//\nvar getPart = function(parentTiddler, partName, fullName) {\n var text = parentTiddler.text;\n var startTag = findPartStartTagByName(text, partName);\n if (!startTag) return null;\n \n var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);\n var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);\n\n if (indexOfEndTag >= 0) {\n var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);\n var partTiddler = new Tiddler();\n partTiddler.set(\n fullName,\n partTiddlerText,\n parentTiddler.modifier,\n parentTiddler.modified,\n parentTiddler.tags,\n parentTiddler.created);\n partTiddler.abegoIsPartTiddler = true;\n return partTiddler;\n }\n \n return null;\n}\n\n// Hijack the store.fetchTiddler to recognize the "part" addresses.\n//\nvar hijackFetchTiddler = function() {\n var oldFetchTiddler = store.fetchTiddler ;\n store.fetchTiddler = function(title) {\n var result = oldFetchTiddler.apply(this, arguments);\n if (!result && title) {\n var i = title.lastIndexOf('/');\n if (i > 0) {\n var parentName = title.substring(0, i);\n var partName = title.substring(i+1);\n var parent = (parentName == ".") \n ? store.resolveTiddler(currentParent)\n : oldFetchTiddler.apply(this, [parentName]);\n if (parent) {\n return getPart(parent, partName, parent.title+"/"+partName);\n }\n }\n }\n return result; \n };\n};\n\n// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. \n// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.\n// Otherwise hijack now.\nif (!store) {\n var oldRestartFunc = restart;\n window.restart = function() {\n hijackFetchTiddler();\n oldRestartFunc.apply(this,arguments);\n };\n} else\n hijackFetchTiddler();\n\n\n\n\n// The user must not edit a readOnly/partTiddler\n//\n\nconfig.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;\n\nTiddler.prototype.isReadOnly = function() {\n // Tiddler.isReadOnly was introduced with TW 2.0.6.\n // For older version we explicitly check the global readOnly flag\n if (config.commands.editTiddler.oldIsReadOnlyFunction) {\n if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;\n } else {\n if (readOnly) return true;\n }\n\n return this.abegoIsPartTiddler;\n}\n\nconfig.commands.editTiddler.handler = function(event,src,title)\n{\n var t = store.getTiddler(title);\n // Edit the tiddler if it either is not a tiddler (but a shadowTiddler)\n // or the tiddler is not readOnly\n if(!t || !t.abegoIsPartTiddler)\n {\n clearMessage();\n story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n}\n\n// To allow the "./partName" syntax in macros we need to hijack \n// the invokeMacro to define the "currentParent" while it is running.\n// \nvar oldInvokeMacro = window.invokeMacro;\nfunction myInvokeMacro(place,macro,params,wikifier,tiddler) {\n var oldCurrentParent = currentParent;\n if (tiddler) currentParent = tiddler;\n try {\n oldInvokeMacro.apply(this, arguments);\n } finally {\n currentParent = oldCurrentParent;\n }\n}\nwindow.invokeMacro = myInvokeMacro;\n\n// To correctly support the "./partName" syntax while refreshing we need to hijack \n// the config.refreshers.tiddlers to define the "currentParent" while it is running.\n// \n(function() {\n var oldTiddlerRefresher= config.refreshers.tiddler;\n config.refreshers.tiddler = function(e,changeList) {\n var oldCurrentParent = currentParent;\n try {\n currentParent = e.getAttribute("tiddler");\n return oldTiddlerRefresher.apply(this,arguments);\n } finally {\n currentParent = oldCurrentParent;\n }\n };\n})();\n\n// Support "./partName" syntax inside <<tabs ...>> macro\n(function() {\n var extendRelativeNames = function(e, title) {\n var nodes = e.getElementsByTagName("a");\n for(var i=0; i<nodes.length; i++) {\n var node = nodes[i];\n var s = node.getAttribute("content");\n if (s && s.indexOf("./") == 0)\n node.setAttribute("content",title+s.substr(1));\n }\n };\n var oldHandler = config.macros.tabs.handler;\n config.macros.tabs.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n var result = oldHandler.apply(this,arguments);\n if (tiddler)\n extendRelativeNames(place, tiddler.title);\n return result;\n };\n})();\n\n// Scroll the anchor anchorName in the viewer of the given tiddler visible.\n// When no tiddler is defined use the tiddler of the target given event is used.\nwindow.scrollAnchorVisible = function(anchorName, tiddler, evt) {\n var tiddlerElem = null;\n if (tiddler) {\n tiddlerElem = document.getElementById(story.idPrefix + tiddler);\n }\n if (!tiddlerElem && evt) {\n var target = resolveTarget(evt);\n tiddlerElem = story.findContainingTiddler(target);\n }\n if (!tiddlerElem) return;\n\n var children = tiddlerElem.getElementsByTagName("a");\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var name = child.getAttribute("name");\n if (name == anchorName) {\n var y = findPosY(child);\n window.scrollTo(0,y);\n return;\n }\n }\n}\n\n} // of "install only once"\n//}}}\n\n/***\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n
[[Surface Languages|http://www.surfacelanguages.com/language/Polish]]\n[[Sounds|http://www.apronus.com/learnpolish/polishsounds.htm]] apronus.com\n[[Gregloby|http://polish.gregloby.net/about-polish-with-gregloby/]] "About The Polish Language Stuff"\n[[Mówić po polsku|http://mowicpopolsku.com/]]\n[[Polish course|http://grzegorj.w.interia.pl/kurs/0.html]]\n[[Polish Audio Lessons|http://mylanguages.org/polish_audio.php]]\n[[Wikibooks|http://en.wikibooks.org/wiki/Polish]]\n[[loecsen.com|http://www.loecsen.com/travel/0-en-67-2-50-free-lessons-polish.html]]\n[[.digitaldialects|http://www.digitaldialects.com/Polish.htm]]\n[[Polskie Radio|http://www.polskieradio.pl/]]\n[[Polish keyboard|http://www.101languages.net/polish/keyboard/]] 101languages.net\n[[Polish-Translator.net|http://www.polish-translator.net/]]\n[[Dictionary|http://www2.getionary.pl/]]\n[[Online Translator: Poltran.com|http://www.poltran.com/]]\n[[Learn Polish: youtube|http://www.youtube.com/watch?list=PL108B436634148B72&v=cIk9psP0Njw#t=46]]\nhttps://www.youtube.com/watch?v=Umww5rj28m4\nhttp://polishisfun.blogspot.com/2012/10/how-to-say-how-are-you-in-polish-co.html\n\nhttps://www.youtube.com/watch?v=uL9Fv_b3IwI\n\n
[[Planet Source Code|http://www.planet-source-code.com/]]\n[[Basic-256|http://www.basic256.org/index_en]]\n[[Wintermute|http://dead-code.org/home/]]\n[[GameDev|http://www.gamedev.net/page/index.html]]\n\n!!!!Assembly - maybe, one day....\n[[GRC Assembly|http://www.grc.com/smgassembly.htm]]\n[[HLA|https://sites.google.com/site/highlevelassembly/]]\n[[Webster|http://webster.cs.ucr.edu/]]
{{floatbox{MAPS\n[[Live Local|http://local.live.com/]]\n[[Instant street view|http://www.instantstreetview.com/]]\n[[Google maps|http://maps.google.co.uk/maps?ie=UTF-8&oe=UTF-8&hl=en&tab=wl&q=]]\n[[RAC route planner|http://www.rac.co.uk/web/routeplanner/]]\n}}} \n\n[[ebid|http://uk.ebid.net/buy/]]\n[[Youtube|https://www.youtube.com/?gl=GB]]\n[[Blackle|http://www.blackle.com/]]\n[[Strictly Rehab|http://strictlyrehab.tiddlyspot.com/index.html]]\n[[TT webmail|http://webmail.talktalk.net/]]\n[[WCC webmail|https://webmail.worcestershire.gov.uk/]]\n[[Amazon|http://www.amazon.co.uk/]]\n[[Spanish]]\n[[Google Translate|https://translate.google.co.uk/]]\n\n!______________________________________________________________________
!!!<<gradient horiz #fc3 #fff>>&nbsp;[[Internet Radio|RadioIntro]]>>\n\n[img[http://img218.imageshack.us/img218/7518/speakersmqz8.gif]] [[BBC Radio|http://www.bbc.co.uk/radio/]]\n\n\n
Magnitude Description Average earthquake effects Average frequency of occurrence (estimated)\nLess than 2.0 Micro I Microearthquakes, not felt, or felt rarely by sensitive people. Recorded by seismographs.[15] Continual/several million per year\n2.0–2.9 Minor I to II Felt slightly by some people. No damage to buildings. Over one million per year\n3.0–3.9 II to IV Often felt by people, but very rarely causes damage. Shaking of indoor objects can be noticeable. Over 100,000 per year\n4.0–4.9 Light IV to VI Noticeable shaking of indoor objects and rattling noises. Felt by most people in the affected area. Slightly felt outside. Generally causes none to minimal damage. Moderate to significant damage very unlikely. Some objects may fall off shelves or be knocked over. 10,000 to 15,000 per year\n5.0–5.9 Moderate VI to VIII Can cause damage of varying severity to poorly constructed buildings. At most, none to slight damage to all other buildings. Felt by everyone. Casualties range from none to a few. 1,000 to 1,500 per year\n6.0–6.9 Strong VII to X Damage to a moderate number of well-built structures in populated areas. Earthquake-resistant structures survive with slight to moderate damage. Poorly designed structures receive moderate to severe damage. Felt in wider areas; up to hundreds of miles/kilometers from the epicenter. Strong to violent shaking in epicentral area. Death toll ranges from none to 25,000. 100 to 150 per year\n7.0–7.9 Major VIII or greater[16] Causes damage to most buildings, some to partially or completely collapse or receive severe damage. Well-designed structures are likely to receive damage. Felt across great distances with major damage mostly limited to 250 km from epicenter. Death toll ranges from none to 250,000. 10 to 20 per year\n8.0–8.9 Huge Major damage to buildings, structures likely to be destroyed. Will cause moderate to heavy damage to sturdy or earthquake-resistant buildings. Damaging in large areas. Felt in extremely large regions. Death toll ranges from 1,000 to 1 million. One per year\n9.0 and greater Near or at total destruction - severe damage or collapse to all buildings. Heavy damage and shaking extends to distant locations. Permanent changes in ground topography. Death toll usually over 50,000. One per 10 to 50 years
[[Science Daily|https://www.sciencedaily.com/]]
[[All Search Engines|http://www.allsearchengines.co.uk/]]\n[[Ask|http://uk.ask.com/?o=312&l=dir]]\n[[Recommended Search Engines - Berkely Uni|http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/SearchEngines.html]]\n[[Search Engine List|http://en.wikipedia.org/wiki/List_of_search_engines]] Wikipedia
/***\n|''Name:''|~SectionMacro|\n|''Version:''|0.9.1 (28-Apr-2006)|\n|''Author:''|[[Jack]]|\n|''Type:''|Macro|\n!Description\nAllows you to create collapsable sections just like the slider macro but without needing to create new tiddlers for these sections.\n!Usage\n{{{<<section Title Tiddler Text goes here...\nand can be multi-\nline.\n>>}}}\n<<section Title Tiddler Text goes here...\nand can be multi-\nline.\n>>\n!Revision History\n* Original by [[Jack]] 0.9\n* Nested sliders and cookie persistence 0.9.1\n* Removed crappy cookie persistance 0.9.2\n!Code\n***/\n//{{{\nversion.extensions.section = {major: 0, minor: 9, revision: 2, date: new Date("Apr 30, 2006")};\n\nconfig.macros.section = {count:0,display:'none'};\nconfig.macros.section.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n this.slider(place,"chkSection" + this.count++,paramString.substr(params[0].length+1).replace(/\s$\s>/g, '>'),params[0], "tooltip");\n}\n\nconfig.macros.section.slider = function(place,cookie,text,title,tooltips) {\n var btn = createTiddlyButton(place,title,tooltips,config.macros.slider.onClickSlider); \n var panel = createTiddlyElement(place,"div",null,"timelineSliderPanel",null);\n //panel.setAttribute("cookie",cookie);\n //panel.style.display = config.options[cookie] ? "block" : "none";\n panel.style.display=this.display;\n if(text) wikify(text,panel);\n};\n//}}}
[[Shields UP!|https://www.grc.com/x/ne.dll?bh0bkyd2]]\n[[Wilders|http://www.wilderssecurity.com/]] Wilders Security Forums\n[[ipleak|https://ipleak.net/]]\n\n[[Firewall ratings|http://www.matousec.com/projects/windows-personal-firewall-analysis/leak-tests-results.php#firewalls-ratings]] matousec.com\n[[thinkbroadband forum: security|http://bbs.adslguide.org.uk/postlist.php?Cat=&Board=security&page=0&view=collapsed&sb=5&o=]]\n[[Ranum|http://www.ranum.com/security/computer_security/index.html]] Computer Security\n!!!Spam\n[[spamgourmet|http://www.spamgourmet.com/]] Disposable email addresses\n[[Spamlinks|http://spamlinks.net/track-trace-net.htm]]\n!!!!Progs\n[[Superantispyware|http://www.superantispyware.com/index.html]]\n[[SpywareBlaster|http://www.javacoolsoftware.com/]]\n[[Comodo|http://www.personalfirewall.comodo.com/]]\n[[AVG|http://free.grisoft.com/doc/2/]]\n[[Bleeping Computer|http://www.bleepingcomputer.com/]]
/***\n\n''This plugin was previously called StyleChooser.''\n\n|Name|SelectThemePlugin|\n|Created by|SimonBaird and SaqImtiaz|\n|Location|http://lewcid.googlepages.com/lewcid.html#SelectThemePlugin|\n|Version|1.2.3|\n|Requires|~TW2.x|\n!Description\n*An alternative style switcher, can be used to switch just stylesheets and/or pagetemplates, or a combination of both (a theme)\n*you can add your own stylesheets and pagetemplates, or use a ThemePack, like BigThemePack.\n\n!Usage\n* You have to have fetch or create some styleSheets and pageTemplates to use this plugin.\n**You can either get a ThemePack like BigThemePack which automatically adds themes to ThemeSelect.\n**or create tiddlers with styleSheets and pageTemplates and tag them styleSheets and pageTemplates respectively.\n* Put {{{<<themeSelect style 'Select theme'>>}}} in your SideBarOptions.\n\n!Creating Theme Packs\n*You can create your own theme pack if you like. Instructions can be found [[here.|CreateThemePack]]\n\n!History\n* 15-May-06, v1.2.3, added paramifier so you can put theme on url, eg http://www.somewhere.com/twfile.html#theme:Berry2, thanks Clint (Simon).\n* 28-Apr-o6, v1.2.2, fixed bug with opening TW after deleting themepacks. (Saq)\n* 26-Apr-06, v1.2.1, more code optimization, dropdowns now updated on the fly. (Saq)\n* 25-Apr-06, v1.2.0, added 3rd party ThemePack support, and made various other improvements.(Simon & Saq)\n* 24-Apr-06, v1.1.0, added: no styles and default styles options,<<br>>support for ThemePack, support for tag variations(Saq)\n* 21-Apr-06, v1.0.0, Reworked dropdowns to include option for pagetemplates (Saq)\n* 21-Apr-06, v0.9.0, Rewrote and added Saq's lovely dropdown select (Simon)\n* 20-Apr-06, v0.0.1, Basic switcher working (Simon)\n\n!Examples\n|!Source|!Output|h\n|{{{<<themeSelect style>>}}} for a dropdown with StyleSheets|<<themeSelect style>>|\n|{{{<<themeSelect pagetemplate>>}}} for a dropdown with PageTemplates|<<themeSelect pagetemplate>>|\n|{{{<<themeSelect style customlabel>>}}} to use a customlabel|<<themeSelect style customlabel>>|\n* When applying a stylesheet or template, it also looks for a template or stylesheet respectively based on naming convention, eg MyFunkyStyleSheet and MyFunkyPageTemplate.\n\n!Notes\n* See also http://www.tiddlytools.com/#SelectStyleSheetPlugin for a more feature-rich style sheet switcher\n\n! Ideas\n* do ViewTemplate also?\n* Pretty up the [x] bit\n\n!Code\n***/\n//{{{\n// for compatibility with TW <2.0.9\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item)\n {\n return this.find(item) != null;\n };\n\n// for compatibility with TW <2.0.9\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items)\n {\n for(var i=0; i<items.length; i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n//}}}\n\n//{{{\nversion.extensions.SelectTheme = { major: 1, minor: 2, revision: 3, date: new Date(2006,5,15),\n source: "http://lewcid.googlepages.com/lewcid.html#SelectTheme"\n};\n\nconfig.SelectTheme = {\n things: {\n style: {\n tag: ["StyleSheets","StyleSheet","styleSheet","styleSheets","stylesheet","stylesheets"],\n theDefault: "StyleSheet",\n suffix: "StyleSheet",\n notify: refreshStyles,\n cookie: "txtStyleSheet",\n otherThing: "pagetemplate",\n label: "Choose StyleSheet: ",\n tooltip: "Choose a StyleSheet",\n caseNone: { text:"None", title:"NoStyleSheet"},\n caseDefault: { text:"Default", title:"StyleSheet" }\n\n },\n pagetemplate: {\n tag: ["PageTemplates","PageTemplate","pageTemplates","pageTemplate","pagetemplate","pagetemplates"],\n theDefault: "PageTemplate",\n suffix: "PageTemplate",\n notify: refreshPageTemplate,\n cookie: "txtPageTemplate",\n otherThing: "style",\n label: "Choose PageTemplate: ",\n tooltip: "Choose a PageTemplate",\n caseNone: { text:"None", title:"NoPageTemplate"},\n caseDefault: { text:"Default", title:"PageTemplate" }\n }\n\n },\n\n specialCases: ["caseNone","caseDefault"]\n\n};\n\nTiddlyWiki.prototype.removeNotification = function(title,fn) {\n for (var i=0;i<this.namedNotifications.length;i++)\n if((this.namedNotifications[i].name == title) && (this.namedNotifications[i].notify == fn))\n this.namedNotifications.splice(i,1); // counting on it only being there once\n}\n\n\nvar things = config.SelectTheme.things;\nvar specialCases=config.SelectTheme.specialCases;\n\nfor (var t in things) {\n // make sure we have a value\n if (!config.options[things[t].cookie])\n config.options[things[t].cookie] = things[t].theDefault;\n\n // remove core notify\n store.removeNotification(things[t].theDefault,things[t].notify);\n\n // and add our one\n store.addNotification(config.options[things[t].cookie],things[t].notify);\n\n}\n\n//checks to see if a tiddler exists in store or as a shadow.\nTiddlyWiki.prototype.isTiddler= function (title)\n {return store.tiddlerExists(title) || store.isShadowTiddler(title)}\n\n//hijack core function & make sure template exists\nwindow.applyPageTemplate_themeSelect=window.applyPageTemplate;\nwindow.applyPageTemplate=function(title){\n if(!store.isTiddler(title))\n {title = things.pagetemplate.theDefault;}\n applyPageTemplate_themeSelect(title);\n }\n\nTiddlyWiki.prototype.makeActiveTheme = function(what,title,alsoCheckOtherThing) {\n\n var thing = things[what];\n if (!store.isTiddler(title))\n title = thing.theDefault;\n\n var oldTitle = config.options[thing.cookie];\n\n if (what == "style") {\n // remove old style element from DOM\n var oldStyleElement = document.getElementById(oldTitle);\n oldStyleElement.parentNode.removeChild(oldStyleElement);\n }\n\n store.removeNotification(oldTitle,thing.notify);\n store.addNotification(title,thing.notify);\n store.notify(title);\n\n config.options[thing.cookie] = title;\n saveOptionCookie(thing.cookie);\n if (alsoCheckOtherThing)\n this.makeActiveTheme(thing.otherThing,\n title.replace(new RegExp(thing.suffix+"$"),"") + things[thing.otherThing].suffix,\n false);\n};\n\n\nconfig.shadowTiddlers.NoStyleSheet = "";\nconfig.shadowTiddlers.NoPageTemplate = config.shadowTiddlers.PageTemplate;\n\n\nfunction switchTheme(e){\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLink = theTarget;\n var switchTo= theLink.getAttribute("switchTo");\n var mode = theLink.getAttribute("mode");\n if ((config.options[things[mode].cookie])!=switchTo)\n {store.makeActiveTheme(mode,switchTo,true);};\n return(false);\n}\n\n\nconfig.macros.themeSelect={};\nconfig.macros.themeSelect.dropdownchar = (document.all?"▼":"▾");\nconfig.macros.themeSelect.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n var arrow = config.macros.themeSelect.dropdownchar;\n var mode = params[0];\n var label = (params[1]?params[1]:things[mode].label) + arrow;\n var cookie = (config.options[things[mode].cookie]);\n\n var onclick = function(e)\n { if (!e) var e = window.event;\n var popup = Popup.create(this);\n\n var tagged=[];\n\n store.forEachTiddler(function(title,tiddler) {\n if ((tiddler.tags).containsAny(things[mode].tag)){\n tagged.push(tiddler.title);}\n });\n\n //integrate ThemePacks\n if (config.themes) {\n // see what themes have been loaded...\n for (var i=0;i<config.themes.length;i++) {\n // see if there is one\n var lookForThis = config.themes[i] + things[mode].suffix;\n if (store.isShadowTiddler(lookForThis)) {\n tagged.pushUnique(lookForThis);\n }\n }\n tagged = tagged.sort();\n }\n\n //this function used later to create buttons\n var createThemeButton = function(switchTo){\n var theButton = createTiddlyButton(createTiddlyElement(popup,"li"),text,null,switchTheme,useClass);\n theButton.setAttribute("switchTo",switchTo);\n theButton.setAttribute("mode",mode);};\n\n //create Buttons for None(shadow styles) & Default (StyleSheet)\n // Default button is not created if StyleSheet doesnt exist.\n for(var t=0; t<specialCases.length; t++){\n var special = specialCases[t];\n var text = things[mode][special].text;\n var useClass = "tiddlyLinkExisting"; //redundant, optimize!\n if ((things[mode][special].title==cookie)||(special=="caseNone"&&!store.isTiddler(cookie)))\n {text+= " [x]";\n useClass = "currentlySelected";}\n if (!((special=="caseDefault")&&(!store.getTiddler(things[mode][special].title))))\n createThemeButton(things[mode][special].title); }\n\n //insert horizontal rule\n createTiddlyElement(createTiddlyElement(popup,"li"),"hr");\n\n //create buttons for all other stylesheet tiddlers\n for(var t=0; t<tagged.length; t++)\n { var useClass = "tiddlyLinkExisting";\n var text = (tagged[t]).replace((things[mode].suffix),"");\n if (tagged[t]==(cookie) )\n {text+=" [x]"; useClass="currentlySelected";}\n if ((tagged[t]!= (things[mode].theDefault))&&tagged[t]!= (things[mode].none))\n {createThemeButton(tagged[t]);}}\n Popup.show(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation)\n e.stopPropagation();\n return(false);\n };\n\n var createdropperButton = function(place){\n var sp = createTiddlyElement(place,"span",null,"ThemeChooserButton");\n var theDropDownBtn = createTiddlyButton(sp,label,things[mode].tooltip,onclick);\n };\n\n createdropperButton(place);\n};\n\n\nsetStylesheet(".popup li a.currentlySelected {background:#ccc;color:black;font-weight:bold;}","currentlySelectedStyle"); // could do better probably...\n\nconfig.macros.layoutChooser=config.macros.themeSelect;\n\n//shadow tiddler to hold instructions for creating ThemePacks\nconfig.shadowTiddlers.ThemePack='See http://simonbaird.com/mptw/#CreateThemePack'; \n\nconfig.macros.applyTheme = {handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n var theme = params[0];\n var label = params[1]?params[1]:'Apply theme "' + theme + '"';\n var tooltip = 'Apply the "'+theme+'" theme to this TiddlyWiki';\n createTiddlyButton(place,label,tooltip,function() {\n store.makeActiveTheme("style",theme+things.style.suffix,true);\n });\n}};\n\n\n// this means you can put #theme:ThemeName in url. suggested by Clint\nconfig.paramifiers.theme = {\n onstart: function(themeName) {\n store.makeActiveTheme("style",themeName+config.SelectTheme.things.style.suffix,true);\n }\n};\n\n//}}}\n\n
\n|Name|SetTiddlerColumns|\n|Source|http://www.TiddlyTools.com/#SetTiddlerColumns|\n|Version|1.0.0|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|script|\n|Requires||\n|Overrides||\n|Description|use CSS3 "-moz-column-count" to set single or multi-column tiddler layout|\n\nusage: <<tiddler SetTiddlerColumns>>\n\ncredits: Much thanks to "maki" (www.makiaea.org) for pointing out the -moz-column-* attributes.\nImportant note: these CSS3 features are not supported in InternetExplorer.\n\n<script>\n // init option value (as needed) and set CSS3 column attribute on tiddlerDisplay/storyDisplay\n if (config.options.txtTiddlerColumns==undefined) config.options.txtTiddlerColumns="1";\n var td=document.getElementById("tiddlerDisplay"); // for TW2.1.x and earlier\n if (!td) td=document.getElementById("storyDisplay"); // for TW2.2+\n td.style.MozColumnCount=config.options.txtTiddlerColumns;\n</script># of tiddler columns: {{smallform{<<option txtTiddlerColumns>><script>\n var t=place.lastChild\n t.style.width="2em";\n t.value=config.options.txtTiddlerColumns;\n if (config.browser.isIE) {\n t.disabled=true;\n t.value=1;\n t.title="Sorry, multiple column tiddler display is not supported in Internet Explorer";\n return;\n }\n // hijack onchange for this field so CSS can be updated on the fly\n t.coreOnChange=t.onchange;\n t.onchange=function() {\n // call original core onchange handler\n if (this.coreOnChange) this.coreOnChange();\n // set CSS3 column attribute\n var td=document.getElementById("tiddlerDisplay"); // for TW2.1.x and earlier\n if (!td) td=document.getElementById("storyDisplay"); // for TW2.2+\n td.style.MozColumnCount=this.value;\n // sync any option field that is showing txtTiddlerColumns value\n var nodes = document.getElementsByTagName("input");\n for(var t=0; t<nodes.length; t++) \n if(nodes[t].getAttribute("option")=="txtTiddlerColumns") nodes[t].value=this.value;\n };\n</script>}}}
<<search>><<closeAll>><<newTiddler>><<tiddler TspotSidebar>><<saveChanges>>[[Controls]]\n<<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>\n<<slider chkSliderContents [[TabContents]] 'Contents »' 'contents'>>\n
[[OU page|http://www3.open.ac.uk/courses/bin/p12.dll?C01SD329_3_203#s14]]\n\nBlock 1 ‘[[Introduction to the senses]]’ An introduction to the human senses, concentrating on observations and experiences that raise questions about how the senses work.\n\nBlock 2 ‘[[The sensory nervous system]]’ An introduction to neuroscience, and in particular to the neuron, this block looks at the way electrical impulses created by external signals of whatever kind are transmitted to the brain, where they are processed and give rise to our personal picture of the world. It introduces the technique of functional imaging, now an essential tool for examining brain activity related to each of the senses.\n\nBlock 3 ‘[[Hearing and balance]]’ explores the nature and properties of sound waves; the anatomy of the ear; and the specialised functions of the outer, middle and inner ear. It goes on to examine the mechanism of transduction (how hair cells convert the minute mechanical impulses brought about by sound waves into electrical signals); auditory perception, including both speech and music; and hearing defects and remedies. Finally, it describes the role of the semicircular canals in determining our sense of balance.\n\nBlock 4 ‘[[Vision]]’ This is the longest block partly because, of all the senses, the most is known about vision, and partly because vision is in many ways the most complex of the senses. The block covers the nature and properties of light; the electromagnetic spectrum; the optical system of the eye; the retina; visual acuity; visual defects and remedies; colour vision; processing in the visual cortex; visual perception; stereoscopy; and functional imaging in vision.\n\nBlock 5 ‘[[Touch and pain]]’ describes the somatic sensory system. This includes at least four senses: touch, pain, temperature and proprioception (the sense of position and movement). It looks at both the body’s own mechanism of pain control and the use of drugs for pain relief.\n\nBlock 6 ‘[[Smell and taste]]’ These two senses are closely interlinked, and both involve the interaction of molecules, rather than energy as is the case with the other senses. For that reason they are often referred to as the chemical senses. Topics include the molecular characteristics of substances that we smell or taste; the coding of smell and taste; the nature of the receptors involved; the mechanism of transduction; and the role of human pheromones in sexual attraction.\n\nBlock 7 ‘[[Integrating the senses]]’ brings the various senses together to examine how they interrelate, and how signals affecting one sense can conflict with those stimulating another sense. This can sometimes be simply uncomfortable (e.g. a feeling of nausea) or potentially dangerous (e.g. if it happens to aircraft pilots). The block looks at how perception can be manipulated in virtual reality and hypnosis.\n
/***\n|Name|SinglePageModePlugin|\n|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|\n|Version|2.5.1|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|\n|Description|Display tiddlers one at a time with automatic update of URL (permalink). Also, options to always open tiddlers at top/bottom of page|\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. In addition, 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. You can disable the URL update action\n\nEven when SinglePageMode is disabled (i.e., displaying multiple tiddlers is permitted), you can reduce the potential for confusion by enable TopOfPageMode (or BottomOfPageMode), which forces tiddlers to always open at the top (or bottom) of the page instead of being displayed following the tiddler containing the link that was clicked.\n\nnote: when used on the Safari browser, adding the permalink to the URL seems to create a problem whereby tiddlers cannot be properly displayed. In the short-term, to avoid this problem, this feature is disabled when using Safari. This does not affect usage under other browsers, and other plugin options will still be applied as configured below...\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 chkSinglePagePermalink>> Automatically permalink current tiddler\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page\n<<option chkBottomOfPageMode>> Always open tiddlers at the bottom of the page\n//(note: if both 'top' and 'bottom' settings are selected, "top of page" is used)//\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)\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 may need to ''manually add these checkboxes to your customized tiddler.''\n<<<\n!!!!!Revision History\n<<<\n2007.10.08 [2.5.1] if displayTiddler(), when using single-page or top-of-page mode, scrollTo(0,0) to ensure that page header is in view.\n2007.09.13 [2.5.0] for TPM/BPM modes, don't force tiddler to redisplay if already shown. Allows transition between view/edit or collapsed/view templates, without repositioning displayed tiddler.\n2007.09.12 [2.4.0] added option to disable automatic permalink feature. Also, Safari is now excluded from permalinking action to avoid bug where tiddlers don't display after hash is updated.\n2007.03.03 [2.3.1] fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)\n2007.03.03 [2.3.0] added support for BottomOfPageMode (BPM) based on request from DaveGarbutt\n2007.02.06 [2.2.3] in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)\n2007.01.08 [2.2.2] use apply() to invoke hijacked core functions\n2006.07.04 [2.2.1] in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.\n2006.06.01 [2.2.0] added chkTopOfPageMode (TPM) handling\n2006.02.04 [2.1.1] moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n2005.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\n2005.12.27 [2.0.0] Update for TW2.0\n2005.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\n2005.10.14 [1.1.1] permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them\n2005.10.14 [1.1.0] added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.\n2005.10.09 [1.0.1] combined documentation and code in a single tiddler\n2005.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: 5, revision: 1, date: new Date(2007,10,8)};\n\nif (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;\nif (config.options.chkSinglePagePermalink==undefined) config.options.chkSinglePagePermalink=true;\nif (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;\nif (config.options.chkBottomOfPageMode==undefined) config.options.chkBottomOfPageMode=false;\n\nif (config.optionsDesc) {\n config.optionsDesc.chkSinglePageMode="Display one tiddler at a time";\n config.optionsDesc.chkSinglePagePermalink="Automatically permalink current tiddler";\n config.optionsDesc.chkTopOfPageMode="Always open tiddlers at the top of the page";\n config.optionsDesc.chkBottomOfPageMode="Always open tiddlers at the bottom of the page";\n} else {\n config.shadowTiddlers.AdvancedOptions += "\s\n \sn<<option chkSinglePageMode>> Display one tiddler at a time \s\n \sn<<option chkSinglePagePermalink>> Automatically permalink current tiddler \s\n \sn<<option chkTopOfPageMode>> Always open tiddlers at the top of the page \s\n \sn<<option chkBottomOfPageMode>> Always open tiddlers at the bottom of the page";\n}\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 story.closeAllTiddlers();\n else if (config.options.chkTopOfPageMode)\n arguments[0]=null;\n else if (config.options.chkBottomOfPageMode)\n arguments[0]="bottom";\n if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {\n window.location.hash = encodeURIComponent(convertUnicodeToUTF8(String.encodeTiddlyLink(title)));\n config.lastURL = window.location.hash;\n document.title = wikifyPlain("SiteTitle") + " - " + title;\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler\n var tiddlerElem=document.getElementById(story.idPrefix+title);\n if (tiddlerElem) {\n var yPos=ensureVisible(tiddlerElem);\n if (config.options.chkSinglePageMode||config.options.chkTopOfPageMode) yPos=0;\n window.scrollTo(0,yPos); // make sure header and/or tiddler is scrolled into view\n }\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 (and/or top/bottom display options) when showing multiple tiddlers\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;\n this.SPM_coreDisplayTiddlers.apply(this,arguments);\n config.options.chkBottomOfPageMode=saveBPM;\n config.options.chkTopOfPageMode=saveTPM;\n config.options.chkSinglePageMode=saveSPM;\n}\n//}}}
The World According to...
/***\n!Metadata:\n|''Name:''|Slider2Plugin|\n|''Description:''||\n|''Version:''|1.0.1|\n|''Date:''|Mar 20, 2007|\n|''Source:''|http://www.sourceforge.net/projects/ptw/|\n|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|\n|''~CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.5+ (the firefox extension, XTML Ruby support, is required)|\n!Syntax:\n{{{\n <<slider2 tiddlerTitle sliderTitle toolsip>>\n or {{custClass{<<slider2 tiddlerTitle sliderTitle toolsip>><<slider2 ...>>...<slider2...>>}}}\n}}}\n<<<\ntiddlerTitle: the title of tiddler to include in the slider\nsliderTitletitle: text of the slider\ntoolsip: tooltip text of the slider\ncustClass: optional, for grouping the sliders and/or assigning a group style.\n<<<\n!Revision History:\n|''Version''|''Date''|''Note''|\n|1.0.1|Mar 20, 2007|Added animation collapse|\n|1.0.0|Mar 18, 2007|Initial release|\n!Code section:\n***/\n//{{{\nconfig.slider2 = {};\nconfig.macros.slider2 = {\n onClickSlider: function(e){\n if (!e) var e = window.event;\n var n = this.nextSibling;\n var isOpen = n.style.display != "none";\n var nodes = this.parentNode.childNodes;\n for(var i=0; i<nodes.length; i++){\n if(nodes[i].title && nodes[i].title != this.title){\n if(nodes[i].nextSibling.className = "sliderPanel"){\n if(config.slider2[this.parentNode.className] == nodes[i].title){\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(nodes[i].nextSibling, false,e.shiftKey || e.altKey,"none"));\n else \n nodes[i].nextSibling.style.display = "none";\n }\n }\n }\n }\n if (config.options.chkAnimate)\n setTimeout(function(){anim.startAnimating(new Slider(n,!\nisOpen,null,"none"));},300);\n// anim.startAnimating(new Slider(n,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n n.style.display = isOpen ? "none" : "block";\n config.slider2[this.parentNode.className] = isOpen ? "" : this.title;\n return false;\n },\n\n createSlider: function(place,title,tooltip){\n var btn = createTiddlyButton(place,title,tooltip,this.onClickSlider);\n var panel = createTiddlyElement(place,"div",null,"sliderPanel",null);\n panel.style.display = "none";\n return panel;\n },\n\n handler: function(place,macroName,params){\n params[2] = params[2]?params[2]:params[0];\n var panel = this.createSlider(place,params[1],params[2]);\n var text = store.getTiddlerText(params[0]);\n if(text)\n wikify(text,panel,null,store.getTiddler(params[0]));\n }\n};\n//}}}
[[Portable Apps|http://portableapps.com/]]\n[[Portable freeware|http://www.portablefreeware.com/]]\n[[TinyApps|http://www.tinyapps.org/faq.html]]\n[[Cylog|http://www.cylog.org/index.asp]]\n[[Shell Extension City|http://www.shellcity.net/index.php]]\n[[Astatix|http://www.astatix.com/]]\n[[Freewarehome|http://www.freewarehome.com/]]\n[[FreeSerifSoftware|http://www.freeserifsoftware.com/]]\n[[concise Freeware|http://www.concisefreeware.com/]]\n[[Arachnoid|http://www.arachnoid.com/]]\n[[xtort|http://www.xtort.net/]]\n
[[Master of Memory|http://masterofmemory.com/spanish-fluency-day-1/]]\n+++(testcookie)!!!{{bold{[+ Spanish|]}}}...\n[[Spanish BBC|http://www.bbc.co.uk/languages/spanish/]]\n[[BBC Spanish news|http://news.bbc.co.uk/hi/spanish/programmes/default.stm]]\n[[Lingolex|http://www.lingolex.com/spanish.htm]]\n[[Deb Lemon|http://www.drlemon.net/]]\n[[Open of Course|http://www.open-of-course.org/courses/mod/resource/view.php?id=415]]\n\n<<section MORE \n[[Aesop's fables|http://jca3.freeshell.org/spanish/aesop_old.html]]\n[[Ukindia|http://www.ukindia.com/zspan1.htm]]\n[[Spanish Online|http://www.spanish.bz/learn-spanish.htm]]\n[[About:Spanish|http://spanish.about.com/]]\n[[Phonetics|http://www.uiowa.edu/~acadtech/phonetics/spanish/frameset.html]]\n[[El Tiempo|http://www.eltiempo.com/]]>>\n\n{{borderless{\n|vertical-align:bottom;<<toggleSideBar>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.wordreference.com/]]&nbsp;&raquo;|\n}}}\n<html><div align="center">\n<iframe src ="http://www.wordreference.com/" width="100%" align="center" height="600"</iframe>\n</div></html>\n\n\nhttp://www.wordreference.com/\n===\n{{floatbox{\n[[ONCE English|http://www.once.es/vocacion/webenglish/default.htm]]\n[[ONCE|http://www.once.es/]]\n[[Blindness - Wikipedia (in Spanish)|http://es.wikipedia.org/wiki/Ceguera]]\n[[Ojo - Wikipedia|http://es.wikipedia.org/wiki/Ojo]]\n[[ONCE Braille|http://www.once.es/otros/cursobraille/]]\n}}} \n\n\n!!VI Related \n\n
<<toggleSideBar SideBar wider hide>>\n\n<html><div align="center">\n<iframe src="http://www.jimmyr.com/blog/speed_math.html" frameborder="1" width="695" height="500"></iframe>\n</div></html>\n
[[Tool Bar]]\n[[floatbox2]]\n\nh4 { margin-top: .3em; \n margin-bottom: .3em;\n padding-right: 1em;\n }\n\n/*{{{*/\n\n#header { padding: 5em 5em 5em 0em; \n background:transparent; \n font-family: Inconsolata,arial,helvetica;\n font-size:12px;\n }\n\n.header {height: 99px; \n background-color:#4477bb;\n } \n\n.siteTitle {\n font-family: Bodoni MT Black;\n color:#ccddef;\n font-size: 2.5em;\n padding: 1em 1em 1em .3em; \n }\n\n#sidebar{\nposition:relative;\nfloat:right;\nright: 1px;\nleft: 12px;\nmargin-bottom:1em;\n/*display:inline;*/\nwidth: 16em;\n}\n\n/*}}}*/\n\n/***\n!Main menu styles /% ================================= %/\n***/\n/*{{{*/\n\n#mainMenu a {\n font-size: 11pt; \n height: 24px; \n line-height: 24px;\nfont-color: #aaa;\n text-transform: capitalize;\n}\n\n\n.tiddler {\n padding: 1em 1em 1em 1em;\n border: 2px solid #6688aa;\n border-width: 2px 2px 2px 2px;\n}\n\n.accordionEffect .button{ display: block; color: #fff; text-align: left;\nfont-weight: bold; line-height: 140%;\nborder-top: solid 1px #bbb;\nborder-left: solid 1px #bbb;\nborder-right: solid 1px #888;\nborder-bottom: solid 1px #888;\nbackground: #999;\nmargin-left: -0.3em;\npadding: 0 1px 1px 20px;\n}\n\n.accordionEffect .button:hover{\nborder-top: solid 1px #777;\nborder-left: solid 1px #777;\nborder-right: solid 1px #bbb;\nborder-bottom: solid 1px #bbb;\nbackground: #888;\npadding: 1px 0 0 21px;\n}\n\n\n
/*{{{*/\nbody {\n background: [[ColorPalette::Background]];\n color: [[ColorPalette::Foreground]];\n}\n\na{\n color: [[ColorPalette::PrimaryMid]];\n}\n\na:hover{\n background: [[ColorPalette::PrimaryMid]];\n color: [[ColorPalette::Background]];\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: #000;\n background: [[ColorPalette::TertiaryPale]];\n}\n\n.button {\n color: [[ColorPalette::PrimaryDark]];\n border: 1px solid [[ColorPalette::Background]];\n}\n\n.button:hover {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n border-color: [[ColorPalette::SecondaryMid]];\n}\n\n.button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::SecondaryDark]];\n}\n\n.header {\n background: [[ColorPalette::PrimaryMid]];\n}\n\n#displayArea {background: #fff;}\n\n.headerShadow {\n color: [[ColorPalette::Foreground]];\n}\n\n.headerShadow a {\n font-weight: normal;\n color: [[ColorPalette::Foreground]];\n}\n\n.headerForeground {\n color: [[ColorPalette::Background]];\n}\n\n.headerForeground a {\n font-weight: normal;\n color: [[ColorPalette::PrimaryPale]];\n}\n\n.tabSelected{\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border-left: 1px solid [[ColorPalette::TertiaryLight]];\n border-top: 1px solid [[ColorPalette::TertiaryLight]];\n border-right: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabUnselected {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::TertiaryMid]];\n}\n\n.tabContents {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabContents .button {\n border: 0;}\n\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel {\n background: [[ColorPalette::PrimaryPale]];\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: [[ColorPalette::PrimaryMid]];\n background: [[ColorPalette::Background]];\n}\n\n.wizard {\n background: [[ColorPalette::SecondaryLight]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard h1 {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.wizard h2 {\n color: [[ColorPalette::Foreground]];\n}\n\n.wizardStep {\n background: [[ColorPalette::Background]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-bottom: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard .button {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:hover {\n color: [[ColorPalette::PrimaryLight]];\n background: [[ColorPalette::PrimaryDark]];\n border-color: [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n#messageArea {\n border: 1px solid [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::SecondaryMid]];\n color: [[ColorPalette::PrimaryDark]];\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::Background]];\n}\n\n.popup {\n background: [[ColorPalette::PrimaryLight]];\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.popup hr {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::PrimaryDark]];\n border-bottom: 1px;\n}\n\n.listBreak div{\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n}\n\n.popup li.disabled {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.popup li a, .popup li a:visited {\n color: [[ColorPalette::PrimaryMid]];\n border: none;\n}\n\n.popup li a:hover {\n background: [[ColorPalette::PrimaryDark]];\n color: [[ColorPalette::PrimaryMid]];\n border: none;\n}\n\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.title {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.subtitle {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.toolbar {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.tagging, .tagged {\n border: 1px solid [[ColorPalette::TertiaryPale]];\n background-color: [[ColorPalette::TertiaryPale]];\n}\n\n.selected .tagging, .selected .tagged {\n background-color: [[ColorPalette::TertiaryLight]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: [[ColorPalette::PrimaryDark]];\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: [[ColorPalette::TertiaryLight]];\n}\n\n.selected .footer {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n.sparkline {\n background: [[ColorPalette::PrimaryPale]];\n border: 0;\n}\n\n.sparktick {\n background: [[ColorPalette::PrimaryDark]];\n}\n\n.error, .errorButton {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::Error]];\n}\n\n.warning {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.cascade {\n background: [[ColorPalette::TertiaryPale]];\n color: [[ColorPalette::TertiaryMid]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.viewer blockquote {\n border-left: 3px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer table {\n border: 2px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer th, thead td {\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::Background]];\n}\n\n.viewer td, .viewer tr {\n border: 1px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer pre {\n border: 1px solid [[ColorPalette::SecondaryLight]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.viewer code {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.highlight, .marked {\n background: [[ColorPalette::SecondaryLight]];\n}\n\n.editor input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.editor textarea {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n width: 100%;\n}\n\n.editorFooter {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n/*}}}*/
/*{{{*/\n* html .tiddler {\n height: 1%;\n}\n\nbody {\n font-size: 1.1em;\n font-family: arial;\n margin: 0;\n padding: 0;\n}\n\nh1,h2,h3,h4,h5 {\n font-weight: bold;\n text-decoration: none;\n padding-left: 0.4em;\n font-color: #ccc;\n}\n\nh1 {font-size: 1.35em; font-family: arial; font-color: #ccc;}\nh2 {font-size: 1.25em; font-family: arial; font-color: #ccc;}\nh3 {font-size: 1.1em; font-family: arial; font-color: #ccc;}\nh4 {font-size: 1em; font-family: arial; font-color: #ccc;}\nh5 {font-size: .9em; font-family: arial; font-color: #ccc;}\n\nhr {\n height: 1.5px;\n}\n\na{\n text-decoration: none;\n}\n\ndt {font-weight: bold;}\n\nol { list-style-type: decimal }\nol ol { list-style-type: lower-alpha }\nol ol ol { list-style-type: lower-roman }\nol ol ol ol { list-style-type: decimal }\nol ol ol ol ol { list-style-type: lower-alpha }\nol ol ol ol ol ol { list-style-type: lower-roman }\nol ol ol ol ol ol ol { list-style-type: decimal }\n\n.txtOptionInput {\n width: 11em;\n}\n\n#contentWrapper .chkOptionInput {\n border: 0;\n}\n\n.externalLink {\n text-decoration: underline;\n}\n\n.indent { display:margin:0;padding:0;border:0;margin-left:3em; }\n.indent {margin-left:4em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.italic { \nfont-style:italic; \n} \n\n.tiddlyLinkExisting {\n font-weight: bold;\n}\n\n\n\n.tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler a bold */\na.tiddlyLinkNonExisting.shadow {\n font-weight: bold;\n}\n\n#mainMenu .tiddlyLinkExisting, \n#mainMenu .tiddlyLinkNonExisting,\n#sidebarTabs .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n#sidebarTabs .tiddlyLinkExisting {\n font-weight: bold;\n font-style: normal;\n}\n\n.header {\n position: relative;\n}\n\n.header a:hover {\n background: transparent;\n}\n\n.headerShadow {\n position: relative;\n padding: 2em 2em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: 2em 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n\n.siteTitle {\n font-size: 3em;\n}\n\n.siteSubtitle {\n font-size: 1.2em;\n}\n\n#mainMenu {\n position: absolute;\n left: 0;\n width: 15em;\n text-align: right;\n line-height: 1.6em;\n padding: 4em 2em 2em 0.5 em;\n font-size: 1.1em;\n}\n\n\n\n#sidebarOptions {\n padding-top: 0.3em;\n}\n\n#sidebarOptions a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarOptions input {\n margin: 0.4em 0.5em;\n}\n\n#sidebarOptions .sliderPanel {\n margin-left: 1em;\n padding: 0.5em;\n font-size: 0.8em;\n}\n\n#sidebarOptions .sliderPanel a {\n font-weight: bold;\n display: inline;\n padding: 0;\n}\n\n#sidebarOptions .sliderPanel input {\n margin: 0 0 .3em 0;\n}\n\n#sidebarTabs .tabContents {\n width: 15em;\n overflow: hidden;\n}\n\n.wizard {\n padding: 0.1em 0em 0em 2em;\n}\n\n.wizard h1 {\n font-size: 2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.4em 0em 0.2em 0em;\n}\n\n.wizard h2 {\n font-size: 1.2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.2em 0em 0.2em 0em;\n} \n\n.wizardStep {\n padding: 1em 1em 1em 1em;\n}\n\n.wizard .button {\n margin: 0.5em 0em 0em 0em;\n font-size: 1.2em;\n}\n\n#messageArea {\nposition:absolute; top:0; right:0; margin: 0.5em; padding: 0.5em;\n}\n\n*[id='messageArea'] {\nposition:fixed !important; z-index:99;}\n\n.messageToolbar {\ndisplay: block;\ntext-align: right;\n}\n\n#messageArea a{\n text-decoration: underline;\n}\n\n.popup {\n font-size: .9em;\n padding: 0.2em;\n list-style: none;\n margin: 0;\n}\n\n.popup hr {\n display: block;\n height: 1px;\n width: auto;\n padding: 0;\n margin: 0.2em 0em;\n}\n\n.listBreak {\n font-size: 1px;\n line-height: 1px;\n}\n\n.listBreak div {\n margin: 2px 0;\n}\n\n.popup li.disabled {\n padding: 0.2em;\n}\n\n.popup li a{\n display: block;\n padding: 0.2em;\n}\n\n.tabset {\n padding: 1em 0em 0em 0.5em;\n}\n\n.tab {\n margin: 0em 0em 0em 0.25em;\n padding: 2px;\n}\n\n.tabContents {\n padding: 0.5em;\n}\n\n.tabContents ul, .tabContents ol {\n margin: 0;\n padding: 0;\n}\n\n.txtMainTab .tabContents li {\n list-style: none;\n}\n\n.tabContents li.listLink {\n margin-left: .75em;\n}\n\n#displayArea {\n margin: 1em 15em 0em 17em;\n}\n\n\n.toolbar {\n text-align: right;\n font-size: .9em;\n visibility: hidden;\n}\n\n.selected .toolbar {\n visibility: visible;\n}\n\n.tiddler {\n border-width: 0 0 2px 2px;\n}\n\n.missing .viewer,.missing .title {\n font-style: italic;\n}\n\n.title {\n font-size: 1.5em; font-family: arial;\n font-weight: bold;\n}\n\n.missing .subtitle {\n display: none;\n}\n\n.subtitle {\n font-size: 1.1em;\n}\n\n.tiddler .button {\n padding: 0.2em 0.4em;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: both;\n}\n\n.footer {\n font-size: .9em;\n}\n\n.footer li {\ndisplay: inline;\n}\n\n* html .viewer pre {\n width: 99%;\n padding: 0 0 1em 0;\n}\n\n.viewer {\n line-height: 1.4em;\n padding-top: 0.5em;\n}\n\n.viewer .button {\n margin: 0em 0.25em;\n padding: 0em 0.25em;\n}\n\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer em {\nfont-family: Palatino Linotype;\nfont-style: normal;\nfont-size: 150%;\n} \n\n.viewer ul, .viewer ol{\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer table {\n border-collapse: collapse;\n margin: 0.8em 1.0em;\n}\n\n.viewer th, .viewer td, .viewer tr,.viewer caption{\n padding: 3px;\n}\n\n.viewer table.listView {\n font-size: 0.85em;\n margin: 0.8em 1.0em;\n}\n\n.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {\n padding: 0px 3px 0px 3px;\n}\n\n.viewer pre {\n padding: 0.5em;\n margin-left: 0.5em;\n font-size: 1.2em;\n line-height: 1.4em;\n overflow: auto;\n}\n\n.viewer code {\n font-size: 1.2em;\n line-height: 1.4em;\n}\n\n.editor {\nfont-size: 1.1em;\n}\n\n.editor input, .editor textarea {\n display: block;\n width: 100%;\n font: inherit;\n}\n\n.editorFooter {\n padding: 0.25em 0em;\n font-size: .9em;\n}\n\n.editorFooter .button {\npadding-top: 0px; padding-bottom: 0px;}\n\n.fieldsetFix {border: 0;\npadding: 0;\nmargin: 1px 0px 1px 0px;\n}\n\n.li {padding-bottom: 1em;\n}\n\n.sparkline {\n line-height: 1em;\n}\n\n.sparktick {\n outline: 0;\n}\n\n.zoomer {\n font-size: 1.1em;\n position: absolute;\n padding: 1em;\n}\n\n.cascade {\n font-size: 1.1em;\n position: absolute;\n overflow: hidden;\n}\n\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// // }}}\n/*}}}*/\n\n
<<tabs txtMainTab Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>
<<list tagged [IT]>>
<<tabs txtMoreTab Shadowed 'Shadowed tiddlers' TabMoreShadowed>>
@@margin: 0 1em;padding: 0 4em;width: 20em;background-color: $1;&nbsp;@@ [[$2|ColorPalette]]
<<tabs tabsClass [[Language]] "" [[Language]] [[More Things]] "" [[More Things]] [[Etc]] "" [[Etc]]>>
/***\n|Name|TidIDEPlugin|\n|Source|http://www.TiddlyTools.com/#TidIDEPlugin|\n|Version|1.7.0|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides||\n|Description|TiddlyWiki Integrated Development Environment - tools for authors and plugin writers|\n\n~TidIDE (//prounounced "Tie Dyed"//) - ''Tid''dlyWiki ''I''ntegrated ''D''evelopment ''E''nvironment - tools for ~TiddlyWiki authors and editors. \n\nProvides a full-featured tiddler editor with key-by-key ''LIVE PREVIEW'' of //formatted// tiddler content!! Also includes a diagnostic macro to help you debug your TiddlyWiki problems by letting you view the internal DOM (Document Object Model) tree structure for any specific part of the TiddlyWiki document.\n!!!!!Configuration\n<<<\nAutomatically freeze preview updates when a tiddler takes more than <<option txtTidIDEAutoFreeze>> milliseconds to render.\n<<<\n!!!!!Usage/Example\n<<<\n{{{<<tidIDE id:example edit:GettingStarted>>}}}\n{{smallform{<<tidIDE id:example edit:GettingStarted>>}}}\n!!!!!parameters:\n* ''id'' - assign a unique ID to this instance of TidIDE. (default id=current tiddler title or "" if not in a tiddler)\n* ''edit'' includes tiddler editor/previewer.\n**''edit:here'' automatically sets the editor to show the current tiddler contents (if in a tiddler)\n**''edit:tiddlertitle'' automatically sets the editor to show the specified tiddler contents\n* use ''{{{[[label|tiddlertitle]]}}}'' to include 'custom panels' (and corresponding labelled checkboxes to toggle their display)\n* all parameters are optional. The default panel is "edit:here".\n* panel parameters preceded by a "+" are displayed by default. If only one panel specified in the parameters, it is automatically displayed, even if the "+" is omitted.\n!!!!!using the editor\nThe editor includes a droplist of all tiddlers in the document, sorted alpha-numerically by tiddler title. Shadow tiddlers that have not been customized are added to the end of this list and marked with "(shadow)". Next to the droplist are several buttons:\n* ''view'' opens the tiddler in the normal ~TiddlyWiki display area\n* ''add'' prompts for a new tiddler title and begins a new editing session\n* ''remove'' deletes an existing tiddler (note: shadow tiddlers cannot be removed)\n* ''save'' saves changes to the tiddler currently being edited\n* ''save as'' saves changes using a new tiddler title\nIf a tiddlername was not specified in the macro, select a tiddler from the droplist (or press ''add'') to begin editing. Once a tiddler has been loaded into the editor, you can change it's content, enter or select tags.\n\nNormally, when you save changes to a tiddler, the created/modified dates and tiddler author are automatically updated. However, it is sometimes useful to make small changes to a tiddler without automatically updating the date/author information. Select the ''minor edits'' checkbox to prevent those values from being //automatically// changed. In addition, this enables the date/author edit fields which allows you to //manually// 'back date' a tiddler or change the author to another name. When the tiddler is saved, the date/author values shown in the edit fields will be used.\n!!!!!using the previewer\nThe ''preview'' checkbox adds a display area that shows you what your tiddler changes will look like, //before// committing to those changes.\n\nBy default, this preview display is automatically rendered each time a key is typed into the tiddler content edit field. As soon as changes are entered, they will be instantly visible within the preview display. Unfortunately, the partial tiddler source definitions that occur //during// editing may somtimes cause rendering problems, and some exceptionally complex tiddlers make take an unusually long amount of time to completely render their content. In such cases, key-by-key display updates are undesirable or impractical.\n\nWhen ''preview'' is selected, you can also select ''freeze'' to suspend automatic key-by-key preview display updates. The preview display will not be re-rendered again until you press the ''refresh'' button, or clear the 'freeze' checkbox, or switch to editing a different tiddler. The editor automatically freezes the preview display whenever the //rendering time// exceeds a pre-determined time limit (see configuration section), specified in milliseconds. Note: the ''actual elapsed time'' used to process and render any given tiddler is reported in the browser's status bar area whenever that tiddler is previewed.\n\nThe previewer also can display a ''DOM viewer'' and an ''HTML viewer'' that are also updated with each keystroke. These text-based displays can be helpful while attempting to correct or enhance the formatting of tiddler content, especially when complex combinations of wiki-syntax produce unexpected or undesired results.\n!!!!! ~DOMViewer macro\nsyntax: {{{<<DOMViewer rows:nn indent:xxxx inline path elementID|tiddlertitle>>}}}\n\nWhenever TiddlyWiki renders a given tiddler, it creates a 'tree' of DOM (Document Object Model) elements that represent the information that is displayed by the browser. You can use the ''DOMViewer'' macro to examine the internal DOM elements that are produced by TiddlyWiki's formatter (the 'wikifier'), or elements directly produced by embedded macros that create custom formatted output. This can be particularly helpful when trying to fine tune the layout and appearance of your tiddler content.\n\nDOMViewer creates a textarea control and reports the DOM tree for the current 'insertion point' where the DOMViewer macro is being placed. ''inline'' flag uses TiddlyWiki rendering instead of textarea control. ''path'' shows the relative location of each child element in the DOM tree, using subscript notation, ''[elementID or tiddlertitle]'' displays DOM elements starting from the node with the specified ID. If that ID is not found in the DOM tree, the macro attempts to open a tiddler with that title and then displays the "tiddler"+title DOM elements that were rendered.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''TidIDEPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for macro handling^^\n<<<\n!!!!!Revision History\n<<<\n''2007.09.09 [1.7.0]'' split systemInfo into separate plugin (see [[SystemInfoPlugin]])\n|please see [[TidIDEPluginHistory]] for additional revision details|\n''2006.04.15 [0.5.0]'' Initial ALPHA release. Converted from inline script.\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n// // version info\n//{{{\nversion.extensions.tidIDE = {major: 1, minor: 7, revision: 0, date: new Date(2006,9,9)};\n//}}}\n\n// // macro definition\n//{{{\nconfig.macros.tidIDE = {\n versionMsg: "TidIDE v%0.%1.%2: ",\n datetimefmt: "0MM/0DD/YYYY 0hh:0mm",\n titleMsg: "Please enter a new tiddler title",\n isShadowMsg: "'%0' is a shadow tiddler and cannot be removed.",\n renderMsg: "rendering preview...",\n timeoutMsg: " (> %0ms)",\n freezeMsg: " - preview is frozen. Press [refresh] to re-display.",\n evalMsg: "Warning!!\sn\snThis action will process '%0' as a systemConfig (plugin) tiddler, and may produce unexpected results!\sn\snAre you sure you want to proceed?",\n toolsDef: "<html><a href='javascript:config.macros.tidIDE.set(\s"%0\s",\s"%1\s");'>edit %1...</a></html>",\n editorLabel: "TiddlerEditor",\n};\nconfig.macros.tidIDE.handler= function(place,macroName,params) {\n var here=story.findContainingTiddler(place);\n var selectors="";\n var panels="";\n var showsys=false;\n var title="";\n var id=""; if (here) id=here.getAttribute("tiddler").replace(/ /g,"_");\n var p=params.shift();\n if (!p) p="edit:here"; // default to editor if no params\n var openpanels=[];\n var panelcount=0;\n while (p) {\n var defOpen=(p.substr(0,1)=="+"); if (defOpen) p=p.substr(1);\n if (p.substr(0,3)=="id:")\n { id=p.substr(3); }\n else if (p.substr(0,4)=="edit") {\n panelcount++;\n defOpen=defOpen || (!params[0] && panelcount==1); // if only one panel to show, default to open\n var toolname=this.editorLabel;\n if (p.indexOf('|')!=-1) toolname=p.substr(0,p.indexOf('|'));\n selectors+=this.html.editorchk.replace(/%toolname%/mg,toolname);\n selectors=selectors.replace(/%showpanel%/mg,defOpen?"CHECKED":"");\n panels+=this.html.editorpanel;\n // editor panel setup...\n panels=panels.replace(/%showpanel%/mg,defOpen?"block":"none");\n panels=panels.replace(/%maxrows%/mg,config.options.txtMaxEditRows);\n panels=panels.replace(/%disabled%/mg,readOnly?"DISABLED":"");\n panels=panels.replace(/%readonlychk%/mg,readOnly?"CHECKED":"");\n panels=panels.replace(/%minoredits%/mg,config.options.chkForceMinorUpdate&&!readOnly?"":"DISABLED");\n panels=panels.replace(/%minorchk%/mg,config.options.chkForceMinorUpdate?"CHECKED":"");\n var tiddlers=store.getTiddlers("title"); var tiddlerlist=""; \n for (var t=0; t<tiddlers.length; t++)\n tiddlerlist+='<option value="'+tiddlers[t].title+'">'+tiddlers[t].title+'</option>';\n for (var t in config.shadowTiddlers)\n if (!store.tiddlerExists(t)) tiddlerlist+="<option value='"+t+"'>"+t+" (shadow)</option>";\n panels=panels.replace(/%tiddlerlist%/mg,tiddlerlist);\n var tags = store.getTags(); var taglist="";\n for (var t=0; t<tags.length; t++)\n taglist+="<option value='"+tags[t][0]+"'>"+tags[t][0]+"</option>";\n panels=panels.replace(/%taglist%/mg,taglist);\n if (p.substr(0,5)=="edit:") { \n title=p.substr(5); \n if (here && title=="here") title=here.id.substr(7);\n }\n }\n else {\n panelcount++;\n defOpen=defOpen || (!params[0] && panelcount==1); // if only one panel to show, default to open\n var toolid=toolname=p;\n if (p.indexOf('|')!=-1)\n { toolname=p.substr(0,p.indexOf('|')); toolid=p.substr(p.indexOf('|')+1); }\n selectors+=this.html.toolschk.replace(/%toolid%/mg,toolid).replace(/%toolname%/mg,toolname);\n selectors=selectors.replace(/%showpanel%/mg,defOpen?"CHECKED":"");\n panels+=this.html.toolspanel.replace(/%toolid%/mg,toolid);\n panels=panels.replace(/%showpanel%/mg,defOpen?"block":"none");\n if (defOpen) openpanels.push(toolid);\n }\n p=params.shift(); // next param\n }\n var html=this.html.framework;\n if (panelcount<2)\n html=html.replace(/%version%/mg,'').replace(/%selector%/mg,''); // omit header/selectors if just one panel to display\n else {\n html=html.replace(/%version%/mg,\n this.versionMsg.format([version.extensions.tidIDE.major,version.extensions.tidIDE.minor,version.extensions.tidIDE.revision]));\n html=html.replace(/%selector%/mg,selectors+"<hr style='margin:0;padding:0'>");\n }\n html=html.replace(/%panels%/mg,panels);\n html=html.replace(/%id%/mg,id);\n var newIDE=createTiddlyElement(place,"span");\n newIDE.innerHTML=html;\n if (title.length) this.set(id,title); // pre-load tiddler editor (if needed)\n if (openpanels.length) for (i=0;i<openpanels.length;i++) { config.macros.tidIDE.loadPanel(id,openpanels[i]); }\n // see [[TextAreaPlugin]] for extended ctrl-F/G (search/search again)and TAB handler definitions\n var elems=newIDE.getElementsByTagName("textarea");\n for (var i=0;i<elems.length;i++) { \n if (window.addKeyDownHandlers!=undefined) window.addKeyDownHandlers(elems[i]);\n }\n}\n//}}}\n\n// // CUSTOM PANEL FUNCTIONS \n//{{{\nconfig.macros.tidIDE.loadPanel=function(id,toolid) {\n var place=document.getElementById(id+"_"+toolid+"_panel"); if (!place) return;\n var t=store.getTiddlerText(toolid,"");\n place.innerHTML=""; \n if (t) wikify(t,place); else place.innerHTML=this.toolsDef.format([id,toolid]);\n}\n//}}}\n\n// // EDITOR PANEL FUNCTIONS\n//{{{\nconfig.macros.tidIDE.set=function(id,title) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_editorform");\n var p=document.getElementById(id+"_preview");\n if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;\n // reset to form defaults\n f.dirty=false;\n f.current="";\n f.created.value=f.created.defaultValue;\n f.modified.value=f.modified.defaultValue;\n f.author.value=f.author.defaultValue;\n f.content.value=f.content.defaultValue;\n f.tags.value=f.tags.defaultValue;\n f.size.value=f.size.defaultValue;\n f.freeze.checked=false;\n f.domview.value="";\n f.htmlview.value="";\n f.status.value="";\n p.innerHTML="";\n if (!title.length) return;\n f.current=title;\n // values for new/shadow tiddlers\n var cdate=new Date();\n var mdate=new Date();\n var modifier=config.options.txtUserName;\n var text=config.views.editor.defaultText.format([title]);\n var tags="";\n // adjust values for shadow tiddlers\n if (store.isShadowTiddler(title))\n { modifier=config.views.wikified.shadowModifier; text=store.getTiddlerText(title) }\n // get values for specified tiddler (if it exists)\n var t=store.getTiddler(title);\n if (t) { var cdate=t.created; var mdate=t.modified; var modifier=t.modifier; var text=t.text; var tags=t.getTags(); }\n if (!t && !store.isShadowTiddler(title)) f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list\n f.tiddlers.value=title; // select current title (just in case it wasn't already selected)\n f.created.value=cdate.formatString(this.datetimefmt);\n f.modified.value=mdate.formatString(this.datetimefmt);\n f.author.value=modifier;\n f.content.value=text;\n f.tags.value=tags;\n f.minoredits.checked=config.options.chkForceMinorUpdate&&!readOnly;\n f.size.value=f.content.value.length+" bytes";\n if (f.preview.checked) { p.style.display="block"; this.render(id); }\n}\n\nconfig.macros.tidIDE.add=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_editorform");\n var p=document.getElementById(id+"_preview");\n if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;\n var title=prompt(this.titleMsg,config.macros.newTiddler.title);\n while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))\n title=prompt(this.titleMsg,config.macros.newTiddler.title);\n if (!title || !title.trim().length) return; // cancelled by user\n f.dirty=false; // suppress unneeded confirmation message\n this.set(id,title);\n}\n\nconfig.macros.tidIDE.remove=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_editorform");\n var p=document.getElementById(id+"_preview");\n if (!f.current.length) return;\n if (!store.tiddlerExists(f.current) && store.isShadowTiddler(f.current)) { alert(this.isShadowMsg.format([f.current])); return; }\n if (config.options.chkConfirmDelete && !confirm(config.commands.deleteTiddler.warning.format([f.current]))) return;\n if (store.tiddlerExists(f.current)) {\n story.closeTiddler(f.current);\n store.removeTiddler(f.current);\n store.setDirty(true);\n if(config.options.chkAutoSave) saveChanges();\n }\n f.tiddlers.options[f.tiddlers.selectedIndex]=null; // remove item from list\n f.dirty=false; // suppress unneeded confirmation message\n this.set(id,""); // clear form controls\n}\n\nconfig.macros.tidIDE.save=function(id,saveAs) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_editorform");\n var title=f.current;\n if (!title || !title.trim().length || saveAs) { // get a new title\n title=prompt(this.titleMsg,config.macros.newTiddler.title);\n while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))\n title=prompt(this.titleMsg,config.macros.newTiddler.title);\n if (!title || !title.trim().length) return; // cancelled by user\n f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list\n f.current=title;\n }\n var author=config.options.txtUserName;\n var mdate=new Date();\n var content=f.content.value;\n var tags=f.tags.value;\n var tiddler=store.saveTiddler(title,title,content,author,mdate,tags);\n if (f.minoredits.checked) {\n var author=f.author.value;\n var mdate=new Date(f.modified.value);\n var cdate=new Date(f.created.value);\n tiddler.assign(null,null,author,mdate,null,cdate);\n }\n store.setDirty(true);\n if(config.options.chkAutoSave) saveChanges();\n story.refreshTiddler(title,null,true);\n f.dirty=false;\n}\n//}}}\n\n// // EDITOR PANEL: PREVIEW FUNCTIONS\n//{{{\nif (config.options.txtTidIDEAutoFreeze==undefined)\n config.options.txtTidIDEAutoFreeze=250; // limit (in milliseconds) for auto-freezing preview display\n\nconfig.macros.tidIDE.render=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_editorform");\n var p=document.getElementById(id+"_preview");\n var d=document.getElementById(id+"_domview");\n var h=document.getElementById(id+"_htmlview");\n p.innerHTML="";\n f.status.value=this.renderMsg;\n var start=new Date();\n wikify(f.content.value.replace(regexpCarriageReturn,''),p);\n var end=new Date();\n this.renderDOM(id);\n this.renderHTML(id);\n f.status.value=f.current+": "+(end-start+1)+"ms";\n // automatically suspend preview updates for slow rendering tiddlers\n if (end-start+1>config.options.txtTidIDEAutoFreeze) {\n f.freeze.checked=true;\n f.status.value+=this.timeoutMsg.format([config.options.txtTidIDEAutoFreeze]);\n }\n if (f.freeze.checked) f.status.value+=this.freezeMsg;\n}\n\nconfig.macros.tidIDE.renderDOM=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_editorform");\n var p=document.getElementById(id+"_preview");\n var d=document.getElementById(id+"_domview");\n var h=document.getElementById(id+"_htmlview");\n p.style.height=(f.dom.checked||f.html.checked)?"10em":"25em";\n if (f.dom.checked) d.value=this.getNodeTree(p,"| ");\n d.style.display=f.dom.checked?"inline":"none";\n d.style.width=f.html.checked?"49.5%":"100%";\n h.style.width=f.dom.checked?"49.5%":"100%";\n}\n\nconfig.macros.tidIDE.renderHTML=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_editorform");\n var p=document.getElementById(id+"_preview");\n var d=document.getElementById(id+"_domview");\n var h=document.getElementById(id+"_htmlview");\n p.style.height=(f.dom.checked||f.html.checked)?"10em":"25em";\n if (f.html.checked) h.value=this.formatHTML(p.innerHTML);\n h.style.display=f.html.checked?"inline":"none";\n d.style.width=f.html.checked?"49.5%":"100%";\n h.style.width=f.dom.checked?"49.5%":"100%";\n}\n\nconfig.macros.tidIDE.formatHTML=function(txt) {\n if (config.browser.isIE) return txt; // BYPASS - 4/24/2006 due to IE hang problem. Will fix later...\n var out="";\n var indent="";\n var level=0;\n for (var i=0;i<txt.length;i++) {\n var c=txt.substr(i,1);\n if (c=="<") {\n if (txt.substr(i+1,1)=="/") indent=indent.substr(0,indent.length-2);\n out+="\sn"+indent;\n if (txt.substr(i+1,1)!="/" && txt.substr(i+1,3)!="br>" && txt.substr(i+1,2)!="p>" && txt.substr(i+1,3)!="hr>") indent+=" ";\n }\n out+=c;\n if (c=="\sn")\n out+=indent;\n if (c==">" && txt.substr(i+1,1)!="<")\n out+="\sn"+indent;\n }\n return out;\n}\n\nconfig.macros.tidIDE.getNodeTree=function(theNode,theIndent,showPath,inline,thePrefix,thePath)\n{\n if (!theNode) return "";\n if (!thePrefix) thePrefix="";\n if (!thePath) thePath="";\n var mquote='"'+(inline?"{{{":"");\n var endmquote=(inline?"}}}":"")+'"';\n // generate output for this node\n var out = thePrefix;\n if (showPath && thePath.length)\n out += (inline?"//":"")+thePath.substr(1)+":"+(inline?"//":"")+"\sr\sn"+thePrefix;\n if (theNode.className=="DOMViewer")\n return out+'[DOMViewer]\sr\sn'; // avoid self-referential recursion\n out += (inline?"''":"")+theNode.nodeName.toUpperCase()+(inline?"''":"");\n if (theNode.nodeName=="#text")\n out += ' '+mquote+theNode.nodeValue.replace(/\sn/g,'\s\sn')+endmquote;\n if (theNode.className)\n out += ' class='+mquote+theNode.className+endmquote;\n if (theNode.type)\n out += ' type='+mquote+theNode.type+endmquote;\n if (theNode.id)\n out += ' id='+mquote+theNode.id+endmquote;\n if (theNode.name)\n out += " "+theNode.name+(theNode.value?"="+mquote+theNode.value+endmquote:"");\n if (theNode.href)\n out += ' href='+mquote+theNode.href+endmquote;\n if (theNode.src)\n out += ' src='+mquote+theNode.src+endmquote;\n if (theNode.attributes && theNode.getAttribute("tiddlyLink")!=undefined)\n out += ' tiddler='+mquote+theNode.getAttribute("tiddlyLink")+endmquote;\n out += "\sr\sn";\n // recursively generate output for child nodes\n thePath=thePath+"."+theNode.nodeName.toLowerCase();\n thePrefix=theIndent+thePrefix;\n for (var i=0;i<theNode.childNodes.length;i++)\n {\n var thisChild=theNode.childNodes.item(i);\n var theNum=(inline?"~~":"(")+(i+1)+(inline?"~~":")");\n out += this.getNodeTree(thisChild,theIndent,showPath,inline,thePrefix,thePath+theNum);\n }\n return out;\n}\n//}}}\n\n// // DOMViewer macro\n//{{{\nversion.extensions.DOMViewer = version.extensions.tidIDE;\nconfig.macros.DOMViewer = { };\nconfig.macros.DOMViewer.handler = function(place,macroName,params) {\n // set default params\n var inline=false;\n var theRows=15;\n var theIndent="| ";\n var showPath=false;\n var theTarget=place;\n // unpack options parameters\n if (params[0]=='inline') { inline=true; theIndent=">"; params.shift(); } \n if (params[0]&&(params[0].substr(0,7)=="indent:")) { theIndent=params[0].substr(7); params.shift(); } \n if (params[0]&&(params[0].substr(0,5)=="rows:")) { theRows=params[0].substr(5); params.shift(); } \n if (params[0]=='path') { showPath=true; params.shift(); } \n if (params[0]) {\n theTarget=document.getElementById(params[0]);\n if (!theTarget)\n if (store.getTiddler(params[0])!=undefined) {\n theTarget=document.getElementById("tiddler"+params[0]);\n if (!theTarget && confirm("DOMViewer asks:\sn\snIs it OK to open tiddler '"+params[0]+"' now?")) { \n story.displayTiddler(null,params[0],1,null,null,false);\n theTarget=document.getElementById("tiddler"+params[0]);\n }\n }\n params.shift();\n }\n // generate and display DOM tree\n if (inline) {\n var out=config.macros.tidIDE.getNodeTree(theTarget,theIndent,showPath,inline);\n wikify(out,place);\n }\n else {\n var out=config.macros.tidIDE.getNodeTree(theTarget,theIndent,showPath,inline);\n var css=".DOMViewer{width:100%;font-size:8pt;color:inherit;background:transparent;border:0px;}";\n setStylesheet(css,"DOMViewerPlugin");\n var theTextArea=createTiddlyElement(place,"textarea",null,"DOMViewer",out);\n theTextArea.rows=theRows;\n theTextArea.cols=60;\n theTextArea.wrap="off";\n theTextArea.theTarget=theTarget;\n theTextArea.theIndent=theIndent;\n theTextArea.showPath=showPath;\n }\n}\n//}}}\n\n// // HTML DEFINITIONS\n//{{{\nconfig.macros.tidIDE.html = { };\nconfig.macros.tidIDE.html.framework = " \s\n <html> %version% <form style='display:inline;margin:0;padding:0;'>%selector%</form> %panels% </html> \s\n";\n//}}}\n//{{{\nconfig.macros.tidIDE.html.editorchk = " \s\n <input type=checkbox name=editor \s\n style='display:inline;width:auto;margin:1px;' \s\n title='add/delete/modify tiddlers' %showpanel% \s\n onclick='document.getElementById(\s"%id%_editorpanel\s").style.display=this.checked?\s"block\s":\s"none\s"; \s\n if (this.checked) config.macros.tidIDE.render(\s"%id%\s");'>%toolname% \s\n";\nconfig.macros.tidIDE.html.toolschk = " \s\n <input type=checkbox name=tools \s\n style='display:inline;width:auto;margin:1px;' \s\n title='' %showpanel% \s\n onclick='document.getElementById(\s"%id%_%toolid%_panel\s").style.display=this.checked?\s"block\s":\s"none\s"; \s\n if (this.checked) config.macros.tidIDE.loadPanel(\s"%id%\s",\s"%toolid%\s");'>%toolname% \s\n";\n//}}}\n//{{{\nconfig.macros.tidIDE.html.toolspanel = " \s\n <div id='%id%_%toolid%_panel' style='display:%showpanel%;margin:0;margin-top:0.5em'> \s\n </div> \s\n";\n//}}}\n//{{{\nconfig.macros.tidIDE.html.editorpanel = " \s\n <div id='%id%_editorpanel' style='display:%showpanel%;margin:0;margin-top:0.5em'> \s\n <form id='%id%_editorform' style='display:inline;margin:0;padding:0;'> \s\n <!-- tiddler editor list and buttons --> \s\n <select size=1 name=tiddlers style='display:inline;width:44%;' \s\n onchange='config.macros.tidIDE.set(\s"%id%\s",this.value); this.value=this.form.current;'> \s\n <option value=''>select a tiddler...</option> \s\n %tiddlerlist% \s\n </select><!-- \s\n --><input name=add type=button style='display:inline;width:8%' \s\n value='new' title='create a new tiddler' \s\n onclick='config.macros.tidIDE.add(\s"%id%\s")' %disabled%><!-- \s\n --><input name=remove type=button style='display:inline;width:8%' \s\n value='remove' title='delete this tiddler' \s\n onclick='config.macros.tidIDE.remove(\s"%id%\s")' %disabled%><!-- \s\n --><input name=save type=button style='display:inline;width:8%' \s\n value='save' title='save changes to this tiddler' \s\n onclick='config.macros.tidIDE.save(\s"%id%\s")' %disabled%><!-- \s\n --><input name=saveas type=button style='display:inline;width:8%' \s\n value='save as' title='save changes to a new tiddler' \s\n onclick='config.macros.tidIDE.save(\s"%id%\s",true)' %disabled%><!-- \s\n --><input name=view type=button style='display:inline;width:8%' \s\n value='open' title='open this tiddler for regular viewing' \s\n onclick='if (!this.form.current.length) return; story.displayTiddler(null,this.form.current)'><!-- \s\n --><input name=run type=button style='display:inline;width:8%' \s\n value='run' title='evaluate this tiddler as a javascript \s"systemConfig\s" plugin' \s\n onclick='if (!confirm(config.macros.tidIDE.evalMsg.format([this.form.current]))) return false; \s\n var err=processConfig(this.form.content.value); \s\n if(err)displayMessage(config.messages.customConfigError.format([err,this.form.current]));'><!-- \s\n --><input name=previewbutton type=button style='display:inline;width:8%;' \s\n value='preview' title='show \s"live\s" preview display' \s\n onclick='document.getElementById(\s"%id%_previewpanel\s").style.display=\s"block\s"; \s\n this.form.preview.checked=true; config.macros.tidIDE.render(\s"%id%\s")'><!-- \s\n hidden field for preview show/hide state: \s\n --><input name=preview type=checkbox style='display:none;'>\s\n <!-- tiddler content edit --> \s\n <div><textarea id='%id%_content' name='content' edit='text' cols=60 rows=%maxrows% \s\n style='width:100%;' \s\n onkeyup='var f=this.form; f.dirty=true; f.size.value=this.value.length+\s" bytes\s"; \s\n var p=document.getElementById(\s"%id%_preview\s"); \s\n if (f.preview.checked && !f.freeze.checked) { config.macros.tidIDE.render(\s"%id%\s"); }'></textarea></div> \s\n <!-- tag edit and droplist --> \s\n <table width='100%' style='border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'> \s\n <td style='border:0;padding:0;margin:0'> \s\n <input type=text name=tags size=60 style='width:100%;' value='' \s\n onchange='this.form.dirty=true' %disabled%> \s\n </td><td width='1' style='border:0;padding:0;margin:0;'> \s\n <select size=1 name=taglist \s\n onchange='this.form.dirty=true; this.form.tags.value+=\s" \s"+this.value' %disabled%> \s\n <option value=''>select tags...</option> \s\n %taglist% \s\n </select> \s\n </td></tr></table> \s\n <!-- created/modified dates, author, current tiddler size --> \s\n <div style='float:right;'> \s\n created <input type=text name=created size=15 \s\n style='display:inline;;text-align:center;padding:0;' value='' \s\n onchange='this.form.dirty=true' %minoredits%> \s\n modified <input type=text name=modified size=15 \s\n style='display:inline;text-align:center;padding:0;' value='' \s\n onchange='this.form.dirty=true;' %minoredits%> \s\n by <input type=text name=author size=15 \s\n style='display:inline;padding:0;' value='' \s\n onfocus='this.select()' onchange='this.form.dirty=true' %minoredits%> \s\n <input type=text name=size size=10 \s\n style='display:inline;text-align:center;padding:0;' value='' \s\n onfocus='this.blur()' onkeydown='return false' DISABLED> \s\n </div> \s\n <!-- toggles: read-only, minor edit --> \s\n <span style='white-space:nowrap'> \s\n <input type=checkbox name=readonly \s\n style='display:inline;width:auto;margin:1px;' %readonlychk% \s\n title='do not allow tiddler changes to be saved' \s\n onclick='readOnly=config.options.chkHttpReadOnly=this.checked;saveOptionCookie(\s"chkHttpReadOnly\s"); \s\n var f=this.form; f.minoredits.disabled=f.tags.disabled=f.taglist.disabled=this.checked; \s\n f.add.disabled=f.remove.disabled=f.save.disabled=f.saveas.disabled=this.checked; \s\n f.created.disabled=f.modified.disabled=f.author.disabled=this.checked||!f.minoredits.checked;'>readonly \s\n <input type=checkbox name=minoredits \s\n style='display:inline;width:auto;margin:1px;' %disabled% %minorchk% \s\n title='check: save datestamps/author as entered, uncheck: auto-update modified/author' \s\n onclick='this.form.created.disabled=this.form.modified.disabled=this.form.author.disabled=!this.checked; \s\n config.options.chkForceMinorUpdate=this.checked;saveOptionCookie(\s"chkForceMinorUpdate\s");'>minor edits \s\n </span> \s\n <!-- tiddler preview display --> \s\n <div id='%id%_previewpanel' style='display:none;white-space:nowrap'> \s\n <div id='%id%_preview' class='viewer' style='margin:0;margin-top:.5em;height:25em;overflow:auto;white-space:normal'> \s\n &nbsp; \s\n </div> \s\n <!-- DOM and HTML viewers --> \s\n <textarea id='%id%_domview' name=domview cols=60 rows=12 wrap=off \s\n onfocus='this.select()' style='display:none;width:100%;height:16em;'></textarea><!-- \s\n --><textarea id='%id%_htmlview' name=htmlview cols=60 rows=12 wrap=off \s\n onfocus='this.select()' style='display:none;width:100%;height:16em;'></textarea> \s\n <!-- status line, preview option checkboxes, run/refresh buttons --> \s\n <table width='100%' style='border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'> \s\n <td style='border:0;padding:0;margin:0'> \s\n <input type=text '%id%_status' name=status style='padding:0;width:100%;'> \s\n </td><td style='width:1%;border:0;padding:0;margin:0;text-align:right;white-space:nowrap'> \s\n <input type=checkbox name=dom style='display:inline;width:auto;margin:1px;' \s\n title='show Document Object Model (DOM) information' \s\n onclick='config.macros.tidIDE.renderDOM(\s"%id%\s");'>DOM \s\n <input type=checkbox name=html style='display:inline;width:auto;margin:1px;' \s\n title='show rendered HTML' \s\n onclick='config.macros.tidIDE.renderHTML(\s"%id%\s");'>HTML \s\n <input type=checkbox name=freeze style='display:inline;width:auto;margin:1px;' \s\n title='do not update preview display as changes are made' \s\n onclick='var p=document.getElementById(\s"%id%_preview\s"); \s\n if (this.checked) this.form.status.value+=config.macros.tidIDE.freezeMsg; \s\n else config.macros.tidIDE.render(\s"%id%\s");'>freeze \s\n <!-- COMMENTED OUT <input type=button style='display:inline;width:auto;' value='run' \s\n title='evaluate this tiddler as a javascript \s"systemConfig\s" plugin' \s\n onclick='if (!confirm(config.macros.tidIDE.evalMsg.format([this.form.current]))) return false; \s\n var err=processConfig(this.form.content.value); \s\n if(err)displayMessage(config.messages.customConfigError.format([err,this.form.current]));'> END COMMENT --><!-- \s\n --><input type=button style='display:inline;width:auto;' value='refresh' \s\n title='update preview display' \s\n onclick='config.macros.tidIDE.render(\s"%id%\s")'><!-- \s\n --><input type=button style='display:inline;width:auto;' value='hide' \s\n title='hide preview display' \s\n onclick='document.getElementById(\s"%id%_previewpanel\s").style.display=\s"none\s"; \s\n this.form.preview.checked=false; config.macros.tidIDE.render(\s"%id%\s")'> \s\n </td></tr></table> \s\n </div> \s\n </form> \s\n </div> \s\n";\n//}}}
/***\n|''Name'' |TiddlerTemplatesMacros|\n|''Version'' |1.0|\n|''Source'' |http://www.kultofbubb.net/tiddlywiki/|\n|''Author'' |[[RichCarrillo|mailto://RichCarrillo@gmail.com]]|\n|''Type'' |Macros|\n|''Required'' |[[TiddlyWiki|http://www.tiddlywiki.com]] 2.0+|\n|''License'' ||\n|''Documentation''| TiddlerTemplatesMacrosDocumentation|\n\n!Code\n***/\n//{{{\n// Drop down indicator for pop-up menu buttons\nvar dropdownchar = (document.all?"▼":"▾") // the fat one is the only one that works in IE\n\nversion.extensions.TiddlerTemplatesMacros = {\n major: 0, minor: 9, revision: 0,\n date: new Date(2006, 2, 21), \n type: 'macro',\n source: "http://www.kultofbubb.net/tiddlywiki/index.html#TiddlerTemplatesMacros"\n};\n\n// shadow tiddler to provide basic syntax and link to full documentation\nconfig.shadowTiddlers.TiddlerTemplatesMacrosDocumentation = "[[Full Documentation|http://www.kultofbubb.net/tiddlywiki/index.html#TiddlerTemplatesMacrosDocumentation]]\sn"; \n\nconfig.macros.newFromTemplate = {}\nconfig.macros.newFromTemplatePopup = {}\nconfig.macros.newFromTemplateButton = {}\n\n// The tiddlerTemplatesMacros object just holds default settings, messages and common functions used by the other macros\nconfig.macros.tiddlerTemplatesMacros = {\n // messages\n label: "New...",\n tooltip: "Create a tiddler from a Template",\n titlePrefix: "New",\n errorNoTemplates: "No templates found! Add the tag '%0' to a tiddler you would like to use as a template",\n errorNoTemplateTiddler: "The template tiddler: '%0', could not be found.",\n errorMissingRequiredParam: "Missing a required parameter: %0 ",\n errorTiddlerAlreadyExists: "The tiddler: %0 already exists!",\n\n // default settings\n templateTag: "TiddlerTemplates",\n\n // common functions used by other macros\n myReadMacroParams: function(paramString){\n var regexpMacroParam = new\n RegExp("(?:\s\ss*)(?:(?:\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\ss][^\s"'\s\ss]*))","mg");\n var params = [];\n do {\n var match = regexpMacroParam.exec(paramString);\n if(match){\n if(match[1]) // Double quoted\n params.push(match[1]);\n else if(match[2]) // Single quoted\n params.push(match[2]);\n else if(match[3]) // Double-square-bracket quoted\n params.push(match[3]);\n else if(match[4]) // Unquoted\n params.push(match[4]);\n }\n } while(match);\n return params;\n }, // closes myReadMacroParams function definition\n\n reparseParams: function( params ) {\n var s = params.join(" ");\n var re = /([^:\ss]*):["]([^"]*)["]/g ;\n var ret = new Array() ;\n var m ;\n while( (m = re.exec( s )) != null ) ret[ m[1] ] = m[2] ;\n return ret ;\n }, // closes reparseParams function definition\n\n getTiddlerEditField: function(title,field){\n var tiddler = document.getElementById(story.idPrefix + title);\n if(tiddler != null){\n var children = tiddler.getElementsByTagName("*")\n var e = null;\n for (var t=0; t<children.length; t++){\n var c = children[t];\n if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea"){\n if(!e) {e = c;}\n if(c.getAttribute("edit") == field){e = c;}\n }\n }\n if(e){return e;}\n }\n }, // closes getTiddlerEditField function definition\n\n newFromTemplate: function(event){\n var title = this.getAttribute("templateTitle");\n if (this.getAttribute("tagToAdd")) {var tagToAdd = this.getAttribute("tagToAdd");}\n if (this.getAttribute("tagToStrip")) {var tagToStrip = this.getAttribute("tagToStrip");}\n\n // get the template and extract its info\n var template = store.getTiddler(title);\n var newTitle = config.macros.tiddlerTemplatesMacros.titlePrefix+template.title;\n var newText = template.text;\n var newTags = template.getTags();\n \n // if a tiddler by this name already exists, show an error message and quit\n if (store.getTiddler(newTitle)) {\n displayMessage(config.macros.tiddlerTemplatesMacros.errorTiddlerAlreadyExists.format([newTitle]));\n story.displayTiddler(null,newTitle,DEFAULT_VIEW_TEMPLATE);\n return;\n }\n // create new tiddler\n story.displayTiddler(null,newTitle,DEFAULT_EDIT_TEMPLATE);\n\n // grab the new Tiddlers text edit box\n var tiddlerTextArea = config.macros.tiddlerTemplatesMacros.getTiddlerEditField(newTitle,"text");\n var tiddlerTagArea = config.macros.tiddlerTemplatesMacros.getTiddlerEditField(newTitle,"tags");\n\n // Stuff template info into newly created tiddler\n tiddlerTextArea.value=newText;\n if (tagToAdd){newTags += " " + String.encodeTiddlyLink(tagToAdd);}\n tiddlerTagArea.value=newTags;\n if (tagToStrip) {story.setTiddlerTag(newTitle,tagToStrip,-1);}\n story.focusTiddler(newTitle,"title");\n return false; //why false?\n } // closes newFromTemplate function definition\n}; // closes tiddlerTemplateMacros object definition\n\nconfig.macros.newFromTemplatePopup.handler = function(place,macroName,params,wikifier,paramString,callingTiddler){\n var makeTemplateList = function(event) {\n if (!event) var event = window.event;\n var templateTag = this.getAttribute("templateTag");\n if (this.getAttribute("tagToAdd")){var tagToAdd = this.getAttribute("tagToAdd");}\n\n var templateList = store.getTaggedTiddlers(templateTag);\n var popup = Popup.create(templateButton);\n\n // pull the titles out of the tiddlers retured by getTaggedTiddlers\n var templateTitles = [];\n var li,r;\n for(r=0;r<templateList.length;r++)\n if(templateList[r].title != templateTitles){templateTitles.push(templateList[r].title);}\n\n // for each one of the titles create a new TiddlyButton in the popup\n for(r=0; r<templateTitles.length; r++){\n var templateListItem = createTiddlyButton(createTiddlyElement(popup,"li"),templateTitles[r],null,config.macros.tiddlerTemplatesMacros.newFromTemplate);\n templateListItem.setAttribute("templateTitle",templateTitles[r]);\n templateListItem.setAttribute("tagToStrip",templateTag);\n if (tagToAdd){templateListItem.setAttribute("tagToAdd",tagToAdd);}\n }\n\n Popup.show(popup,true);\n event.cancelBubble = true;\n if (event.stopPropagation) event.stopPropagation();\n return false; // why false?\n } // closes makeTemplateList function definition\n\n // process params\n var paramsToParse = params;\n var input = config.macros.tiddlerTemplatesMacros.reparseParams( paramsToParse ) ;\n var templateTag = input["templateTag"]?input["templateTag"].trim():config.macros.tiddlerTemplatesMacros.templateTag ;\n var label = input["label"]?input["label"].trim():config.macros.tiddlerTemplatesMacros.label ;\n label = label.replace(/<arrow>/g, dropdownchar) \n var tooltip = input["tooltip"]?input["tooltip"].trim():config.macros.tiddlerTemplatesMacros.tooltip ;\n\n // user can only use hereMode if callingTiddler was passed to the macro\n var hereMode; \n if (input["hereMode"] && callingTiddler) {hereMode = callingTiddler.title;}\n else {hereMode = null;}\n\n // error out if no tiddlers are tagged as templates\n var templateList = store.getTaggedTiddlers(templateTag);\n if(templateList == "") {\n createTiddlyError(place,config.messages.macroError.format([macroName]),config.macros.tiddlerTemplatesMacros.errorNoTemplates.format([templateTag]));\n return;\n }\n\n var templateButton = createTiddlyButton(place,label,tooltip,makeTemplateList);\n templateButton.setAttribute("templateTag",templateTag);\n if (hereMode){templateButton.setAttribute("tagToAdd",hereMode);}\n}; // closes newFromTemplatePopup handler definition\n\n\nconfig.macros.newFromTemplateButton.handler = function(place,macroName,params,wikifier,paramString,callingTiddler){\n\n // process params\n var paramsToParse = params;\n var input = config.macros.tiddlerTemplatesMacros.reparseParams( paramsToParse ) ;\n var templateTiddler = input["templateTiddler"]?input["templateTiddler"].trim():null ;\n var templateTag = input["templateTag"]?input["templateTag"].trim():null ;\n var label = input["label"]?input["label"].trim():config.macros.tiddlerTemplatesMacros.label ;\n var tooltip = input["tooltip"]?input["tooltip"].trim():config.macros.tiddlerTemplatesMacros.tooltip ;\n\n // user can only use hereMode if callingTiddler was passed to the macro\n var hereMode; \n if (input["hereMode"] && callingTiddler) {hereMode = callingTiddler.title;}\n else {hereMode = null;}\n\n // error out if template tiddler was not specified or if it does not exist\n if (templateTiddler == null){\n createTiddlyError(place,config.messages.macroError.format([macroName]),config.macros.tiddlerTemplatesMacros.errorMissingRequiredParam.format(["templateTiddler"]));\n return;\n } // ends if templateTiddler == null (not in params)\n\n var templateTiddlerObj = store.getTiddler(templateTiddler);\n if(templateTiddlerObj == null) {\n createTiddlyError(place,config.messages.macroError.format([macroName]),config.macros.tiddlerTemplatesMacros.errorNoTemplateTiddler.format([templateTiddler]));\n return;\n } // ends if templateTiddlerObj == null (not in store)\n\n var templateButton = createTiddlyButton(place,label,tooltip,config.macros.tiddlerTemplatesMacros.newFromTemplate);\n templateButton.setAttribute("templateTitle",templateTiddlerObj.title);\n if (hereMode){templateButton.setAttribute("tagToAdd",hereMode);}\n if (templateTag){templateButton.setAttribute("tagToStrip",templateTag);}\n\n}; // closes newFromTemplateButton handler definition\n\n// This macro only in here for backward compatibility. I'll problably drop it from the next release\nconfig.macros.newFromTemplate.handler = function(place,macroName,params,wikifier,paramString,callingTiddler){\n\n // juggle params around since this macro does NOT use named parameters and newFromTemplatePopup does\n if (params[0] != null) {paramString = 'templateTag:\s"'+paramString+'\s"';}\n var paramsToPass = paramString.readMacroParams();\n config.macros.newFromTemplatePopup.handler(place,macroName,paramsToPass, wikifier,paramString, callingTiddler);\n\n}; // closes newFromTemplate handler definition\n\n//}}}\n\n
[[Julie|http://julie.tiddlyspot.com/index.html]]\n[[Strictly Rehab|http://strictlyrehab.tiddlyspot.com/]] Tiddlyspot\n[[Strictly Rehab|http://www.gurrole.talktalk.net/]]\n\n[[TW Home|http://tiddlywiki.com/]]\n[[Google Groups: TW|http://groups.google.com/group/TiddlyWiki/topics]]\n[[TiddlyWikiTips|http://tiddlywikitips.com/]] TWC - old\n[[TW Guides|http://tiddlywikiguides.org/index.php?title=TiddlyWiki_Guides]]\n[[Tiddlytools|http://www.tiddlytools.com/]] Eric Shulman - TWC\n[[TW5 tips|http://tongerner.tiddlyspot.com/]] tongerner.tiddlyspot.com\n[[Twaddle|http://twaddle.tiddlyspot.com/#:TWaddle]]\n[[TW5magick|http://tw5magick.tiddlyspot.com/]]\n\n[[CSS Tutorial|http://www.w3schools.com/css/]] W3Schools\n\n<<section Examples\n[[Showcase|http://giffmex.tiddlyspot.com/]]\n[[Reasoning Well|http://reasoningwell.tiddlyspot.com/]]\n[[Science Matters|http://science.tiddlyspot.com/]]\n[[Lewcid|http://tw.lewcid.org/]]\n[[MPTW|http://mptw.tiddlyspot.com/]]\n[[Teaching Demo|http://post.queensu.ca/~lister/Homepage/TeachingDemo.html]]\n[[Jack's TW|http://jackparke.googlepages.com/jtw.html#SectionMacro]]\n[[abegoExtensions|http://tiddlywiki.abego-software.de/]]\n[[GTD|http://shared.snapgrid.com/index.html]]\n[[Tree-view|http://twt-treeview-executive.tiddlyspot.com/]] \n[[Tears|http://lewcid.googlepages.com/tots.html#Welcome]]>>\n\n\n[[Themes|http://tiddlythemes.com/#Home]]\n[[TW for the rest of us|http://www.giffmex.org/twfortherestofus.html]]\n[[Showcase|http://giffmex.tiddlyspot.com/]]\n[[TiddlyDoc|http://doc.tiddlywiki.org/]]\n[[TW Help|http://tiddlyspot.com/twhelp/index.html#%5B%5BCSS%20Properties%20Guide%5D%5D]]\n[[Keystrokes]]\n[[extra]]\n[[Image Converter|http://www.motobit.com/util/base64/css-images-to-base64.asp?url=http%3A%2F%2Fmurga-linux.com%2Fpuppy%2Fviewtopic.php%3Fmode%3Dattach%26id%3D90160]]\n\n!__________________________________\n____________________________________
\n/***\n!!!Usage:\nmsgArea (e.g. the "save changes" popup) disappears after 3 seconds\n!!!Created:\n2006-09-13 JOS\n!!!Code:\n***/\n//{{{\nfunction displayMessage(text,linkText)\n{\n var msgArea = document.getElementById("messageArea");\n if(!msgArea)\n {\n alert(text);\n return;\n }\n var msg;\n if(linkText)\n {\n msg = createTiddlyElement(msgArea,"div",null,null,null);\n var link = createTiddlyElement(msg,"a",null,null,text);\n link.href = linkText;\n link.target = "_blank";\n }\n else\n msg = createTiddlyElement(msgArea,"div",null,null,text);\n msgArea.style.display = "block";\n setTimeout("clearMessage();",3000);\n}\n//}}}\n
/***\n|''Name:''|ToggleElementPlugin|\n|''Description:''|toggles the visibility of the element specified|\n|''Author:''|FND|\n|''Source:''|http://devpad.tiddlyspot.com/#ToggleElementPlugin|\n|''Version:''|0.5|\n|''Date:''|2007-09-22|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.1|\n!Notes\nThis plugin was created for use with the [[overflow technique|http://cleanlayout.tiddlyspot.com/#StyleSheet]] (cf. [[[twdev] StyleSheetLayout: overflow technique|http://groups.google.at/group/TiddlyWikiDev/browse_thread/thread/b55011665c5e04d9/]]).\n!Usage\n{{{\n<<toggleElement\n [element ID]\n [button label]\n [button tooltip]\n [button class]\n [button access key]\n>>\n}}}\nAll parameters are optional.\nIn order to use the default value for a certain property, the respective parameter can either be omitted or defined as empty by using {{{""}}}.\n!!Examples\n|!Code|!Result|\n|{{{<<toggleElement>>}}}| <<toggleElement>> |\n|{{{<<toggleElement "" "" "" "" "">>}}}| <<toggleElement "" "" "" "" "">> |\n|{{{<<toggleElement "mainMenu" "Toggle MainMenu" "" "tiddlyLinkExisting">>}}}| <<toggleElement "mainMenu" "Toggle MainMenu" "" "tiddlyLinkExisting">> |\n!To Do\n* rename to [[ToggleElementMacro]]\n!Revision History\n!!v0.5 (2007-09-22)\n* initial proof-of-concept implementation\n!Code\n***/\n//{{{\nconfig.macros.toggleElement = {\n elementID: "sidebar",\n label: "Toggle Sidebar",\n prompt: "Switch sidebar on and off",\n buttonClass: "",\n accessKey: ""\n};\n\nconfig.macros.toggleElement.handler = function(place, macroName, params) {\n // process command line parameters\n var elementID = params[0] || this.elementID;\n var label = params[1] || this.label;\n var prompt = params[2] || this.prompt;\n var buttonClass = params[3] || this.buttonClass;\n var accessKey = params[4] || this.accessKey;\n // create toggle button\n createTiddlyButton(place, label, prompt,\n function() { config.macros.toggleElement.toggle(elementID); },\n buttonClass, null, accessKey\n );\n};\n\nconfig.macros.toggleElement.toggle = function(id) {\n var e = document.getElementById(id);\n if(e) {\n if(e.style.display != "none") {\n e.style.display = "none";\n } else {\n e.style.display = "";\n }\n }\n};\n//}}}
/***\n\n|Name|ToggleSideBarMacro|\n|Created by|SaqImtiaz|\n|Location|http://lewcid.googlepages.com/lewcid.html#ToggleSideBarMacro|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nProvides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.\n\n!Demo\n<<toggleSideBar "Toggle Sidebar">>\n\n!Usage:\n{{{<<toggleSideBar>>}}} <<toggleSideBar>>\nadditional options:\n{{{<<toggleSideBar label tooltip show/hide>>}}} where:\nlabel = custom label for the button,\ntooltip = custom tooltip for the button,\nshow/hide = use one or the other, determines whether the sidebar is shown at first or not.\n(default is to show the sidebar)\n\nYou can add it to your tiddler toolbar, your MainMenu, or where you like really.\nIf you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:\n{{{ .HideSideBarButton {float:right;} }}}\n\n!History\n*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. \n*20-07-06: version 0.11\n*27-04-06: version 0.1: working.\n\n!Code\n***/\n//{{{\nconfig.macros.toggleSideBar={};\n\nconfig.macros.toggleSideBar.settings={\n styleHide : "#sidebar { display: none;}\sn"+"#contentWrapper #displayArea { margin-right: 1em;}\sn"+"",\n styleShow : " ",\n arrow1: "«",\n arrow2: "»"\n};\n\nconfig.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var tooltip= params[1]||'toggle sidebar';\n var mode = (params[2] && params[2]=="hide")? "hide":"show";\n var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;\n var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;\n var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");\n if (mode == "hide")\n { \n (document.getElementById("sidebar")).setAttribute("toggle","hide");\n setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");\n }\n};\n\nconfig.macros.toggleSideBar.onToggleSideBar = function(){\n var sidebar = document.getElementById("sidebar");\n var settings = config.macros.toggleSideBar.settings;\n if (sidebar.getAttribute("toggle")=='hide')\n {\n setStylesheet(settings.styleShow,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","show");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);\n }\n else\n { \n setStylesheet(settings.styleHide,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","hide");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);\n }\n\n return false;\n}\n\nsetStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\sn","ToggleSideBarButtonStyles");\n\n//}}}
.toolbar { vertical-align: top; \n line-height: 2.0em; \n font-size: 1.2em;\n float: right; \n } \n\n.selected .toolbar {\n visibility: visible;\n}
/***\nContains the stuff you need to use Tiddlyspot\nNote you must also have UploadPlugin installed\n***/\n//{{{\n\n// edit this if you are migrating sites or retrofitting an existing TW\nconfig.tiddlyspotSiteId = 'keith';\n\n// make it so you can by default see edit controls via http\nconfig.options.chkHttpReadOnly = false;\n\n// disable autosave in d3\nif (window.location.protocol != "file:")\n config.options.chkGTDLazyAutoSave = false;\n\n// tweak shadow tiddlers to add upload button, password entry box etc\nwith (config.shadowTiddlers) {\n SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';\n SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");\n OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");\n DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n MainMenu = MainMenu.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n}\n\n// create some shadow tiddler content\nmerge(config.shadowTiddlers,{\n\n'Welcome to Tiddlyspot':[\n "This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",\n "<<tiddler TspotControls>>",\n "See also GettingStarted.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \s"save to web\s" button in the column on the right.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \s"upload\s" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."\n].join("\sn"),\n\n'TspotControls':[\n "| tiddlyspot password:|<<option pasUploadPassword>>|",\n "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",\n "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"\n].join("\sn"),\n\n'TspotSidebar':[\n "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"\n].join("\sn"),\n\n'TspotOptions':[\n "tiddlyspot password:",\n "<<option pasUploadPassword>>",\n ""\n].join("\sn")\n\n});\n//}}}\n
http://www.sauerburger.org/dona/\nhttp://www.ssc.education.ed.ac.uk/resources/vi&multi/carey00.html\nhttp://www.tsbvi.edu/Education/vmi/autism-and-vi.htm\nhttp://baxbex.com/products.html\nTalk Talk 0800 049 5050
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 13/3/2016 21:43:43 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/3/2016 22:14:9 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/4/2016 21:58:50 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/5/2016 12:44:43 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/5/2016 23:13:42 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/5/2016 22:36:13 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/6/2016 23:7:8 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 18/6/2016 20:39:39 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 18/6/2016 20:48:22 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/6/2016 12:22:6 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 27/6/2016 6:21:56 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 29/6/2016 20:30:9 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/7/2016 7:59:53 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/7/2016 21:55:21 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 14/7/2016 22:29:52 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 3/8/2016 12:44:47 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 3/8/2016 22:19:39 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 4/8/2016 12:6:8 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 4/8/2016 12:7:12 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 4/8/2016 20:52:10 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 18/8/2016 20:41:4 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 19/8/2016 12:16:18 | YourName | [[/|http://keith.tiddlyspot.com/]] | [[store.cgi|http://keith.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.5|\n|''Date:''|Oct 15, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 5, \n date: new Date(2006,9,15),\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 1}, \n date: new Date(2006,8,19)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 3, date: new Date(2006,8,30),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) \n {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n backupFileStored: "Previous file backuped in %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n passwordEmpty: "Unable to upload, your password is empty",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.toDirUrl(storeUrl, uploadDir, username)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir;\n // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n //strailer = "--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n try {\n request.open("POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent + "\snStatus: "+request.status.statusText);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n try {\n request.open("GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]) + "\snStatus: "+request.status.statusText);\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nif (document.location.toString().substr(0,4) == "http") {\n config.options.chkAutoSave = false; \n saveOptionCookie('chkAutoSave');\n}\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n\n
<!--{{{-->\n<div class='toolbar' macro='toolbar closeTiddler closeOthers fullscreen -editTiddler '></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'><span macro='view modified date [[DD MMM YYYY]]'></span> </div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n <div macro="showWhenTagged start">[[Start Toolbar]]</div>\n<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>\n<!--}}}-->\n
\n[[Volcanocafe|http://www.volcanocafe.org/]] \n[[Volcanocafe|https://volcanocafe.wordpress.com/info-on-bardarbunga/]] Abandoned Blog\n[[Volcano Hotspot|https://volcanohotspot.wordpress.com/]]\n!! Bárðarbunga / Iceland\n[[Iceland geology |http://www.jonfr.com/volcano/]] Jón Frímann\n[[3dBulge|http://baering.github.io/]] 3D display of seismic activity in Bárðarbunga\n\n[[Ijsland-enzo|http://www.ijsland-enzo.nl/ijsland/actueel_aardbeving.asp]] Map showing seismic activity\n[[National Land Survey of Iceland|http://atlas.lmi.is/kortasja_en/]] Maps\n[[Bárðarbunga Volcano|http://www.bardarbungavolcano.com/]]\n[[Institute of Earth Sciences|http://earthice.hi.is/bardarbunga_2014]] Bárðarbunga page\n[[Jarðvísindastofnun Háskólans (Institute of Earth Sciences)|https://www.facebook.com/jardvis]] Facebook page (Icelandic)\nhttp://futurevolc.vedur.is/#\n\n[[RUV|http://www.ruv.is/volcano]] Ríkisútvarpið RUV - The Icelandic National Broadcasting Service \n[[Iceland Eruptions|http://weerstationlangerak.nl/bardarbunga/webcams.html]]\n[[IMO|http://en.vedur.is/earthquakes-and-volcanism/earthquakes/vatnajokull/#view=table]] Earthquakes\nhttp://platformsthatwork.com/bardies/quakesonaplane.php\n\n!!!Webcams\n[[Mila|http://www.livefromiceland.is/webcams/jokulsarlon/]]\n[[Volcano Webcams|http://volcams.malinpebbles.com/pubweb/Iceland.htm]] Malin Pebbles (Petra Watzka) \n[[M&T|http://webcams.mogt.is/#grimsfjall1]] \n[[Volcano Discovery|http://webcams.volcanodiscovery.com/bardarbunga]] Webcams and data feeds\n[[Kverkfjoll|http://brunnur.vedur.is/myndir/webcam/]] Stills: select date\n\n[[Jokulsa River - south|http://brunnur.vedur.is/myndir/webcam/2016/08/]]\nhttp://mynd1.mogt.is/mobile1/images/right/\n[[Grimsfjall Webcam|http://vedur2.mogt.is/grimsfjall/webcam/index.php]]\n\n!!!Other\n[[Alaska|http://www.avo.alaska.edu/activity/index.php]] Alaska Volcano Observatory\nJapan\n[[Hakone : Owakudani Valley (car park)|http://www.sizenken.biodic.go.jp/live/view.php?camera_no=48]]\n[[Map|http://www.instantstreetview.com/@35.243535,139.019136,19z,0t]] Camera points to SE\n[[Aso|http://w3.vgs.kyoto-u.ac.jp/camera/crater/]] Kyoto University\n[[Index|http://www.sizenken.biodic.go.jp/live/index.php]] Webcams: National Parks and Wildlife in Japan - English page\n[[Sakurajima|http://m.ustream.tv/channel/ushine-2]] ustream\n[[Sakurajima|http://www.opentopia.com/webcam/8683?viewmode=livevideo]] opentopia\n\n[[Colima - Mexico|http://www.webcamsdemexico.com/webcam-volcan-de-colima.html]]\n[[Earthscope.org Colima page|http://www.earthscope.org/science/geo-events/colima-mexico-volcanic-eruption]]\nhttp://www.seguridad.gob.ec/volcancotopaxi/index.php/en-vivo-volcancotopaxi/\nhttp://190.214.21.185:8086/volcan/camara.jpg? Cotopaxi \n\n!!!Volcano info:\nhttp://www.geo.cornell.edu/eas/education/course/descr/EAS102/\n[[volcanodetect|http://volcanodetect.blogspot.co.uk/]]\n[[Geology.com|http://geology.com/volcanoes/]]\n[[British Geological Survey|http://www.bgs.ac.uk/research/volcanoes/home.html]] Volcanoes\n!!Minerals & Geology\n[[Mindat|http://www.mindat.org/]] Mineralogy database and reference site\n[[An Illustrated Guide to Reading a Seismogram|https://www.youtube.com/watch?v=SkfR4GBEIp8]] Youtube\n\n\n!!!Earthquakes / Seismology\n\n[[Rapid Earthquake Viewer|http://rev.seis.sc.edu/]]
This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://keith.tiddlyspot.com/controlpanel]] (your control panel username is //keith//).\n<<tiddler TspotControls>>\nSee also GettingStarted.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
! Eyes - anatomy, perception, pathology\n[[The Merck Manual|http://www.merck.com/mmhe/sec20.html ]] of medical information, second edition online. Links to section on the biology of the eye, and eye disorders.\n\n[[The Human Eye|http://biology.about.com/gi/dynamic/offsite.htm?site=http%3A%2F%2Fwww.ultranet.com%2F%7Ejkimball%2FBiologyPages%2FV%2FVision.html ]] from an online version of a biology book by Dr. John W. Kimball.\n\n[[Anatomy of the Eye|http://www.e-ophthalmology.net/anatomy.html ]] from e-ophthalmology.net. Also has section on physiology and common conditions.\n\n[[The Joy of Visual Perception|http://www.yorku.ca/eye/thejoy1.htm ]] by Peter K. Kaiser. The Joy of Visual Perception is a web book which depends a great deal more on figures and graphical representation of ideas and concepts than most books do. Many clickable text items, a table of contents, an index of subjects, images, figures, diagrams and links to interesting websites related to vision and visual perception. Unfortunately, this link is not too reliable.\n\n[[Glossary of ophthalmology|http://www.eyeglossary.net/ ]]\nCommon terms -- symptoms, tests, treatments, surgery, diseases & conditions, anatomy.\nExcerpted from Dictionary of Eye Terminology, copyright 1990-2001 by Barbara Cassin\n\n[[Anatomy, Physiology & Pathology of the Human Eye|http://tedmontgomery.com/the_eye/ ]]\n\n---\n\n!Common Eye Conditions\nThere is information on a number of common conditions available at the [[Royal College of Ophthalmologists|http://www.rcophth.ac.uk/about/public/booklets]] website.\n\n\nSome of the more widely encountered eye problems.\n\n!!!Macular Degeneration: \n\n[[Moorfields Eye Hospital|http://www.moorfields.org.uk/EyeHealth/MacularDegeneration ]] \n[[Good Hope Hospital|http://www.goodhope.org.uk/departments/eyedept/armd%20pathol.htm#Distortion%20of%20Vision ]]\n[[Macular Disease Society|http://www.maculardisease.org/]]\n[[Retina International|http://www.retina-international.org/maculardeg.htm ]]\n[[Institute of Ophthalmology|http://www.ucl.ac.uk/ioo/eyedisease/amd.htm ]]\n[[Net Doctor|http://www.netdoctor.co.uk/diseases/facts/sclerosisofretina.htm ]]\n[[College of Optometrists leaflet|http://www.college-optometrists.org/public/foresight.pdf ]]\n[[Colloptics|http://www.colloptic.co.uk/armd.shtml ]]: Also see their page on [[Eccentric Viewing Techniques |http://www.colloptic.co.uk/eccentric_viewing_tech.shtml ]]\n[[Finding New Ways|http://www.hi.se/butik/pdf/02321.pdf ]] a useful document from Sweden (in English!) aimed at elderly people with AMD.\n\n!!!Diabetes related: \n\n[[Diabetic retinopathy|http://www.diabeticretinopathy.org.uk ]]\n[[Moorfields Eye Hospital|http://www.moorfields.org.uk/EyeHealth/DiabeticRetinopathy ]]\n[[Insulin Dependent Diabetes Trust|http://www.iddtinternational.org/ ]]\n\n!!!Glaucoma: \n\n[[Glaucoma Research Foundation|http://www.glaucoma.org/ ]]\n[[Glaucoma - United Kingdom|http://www.glaucoma-association.com/nqcontent.cfm?a_id=176&=fromcfc&tt=arti ]]\n[[Glaucoma Foundation (US) Patient Guide.pdf| http://www.glaucomafoundation.org/docs/PatientGuide.pdf]] \n[[MedicineNet|http://www.medicinenet.com/glaucoma/article.htm ]]\n\n!!!Cataracts: \n\n[[All About Vision|http://www.allaboutvision.com/conditions/cataracts.htm ]]\n[[Moorfields Eye Hospital|http://www.moorfields.org.uk/EyeHealth/Cataracts ]]\n[[Health and Age.com|http://www.healthandage.com/html/well_connected/pdf/doc26.pdf ]]\n\n!!!Nystagmus:\n\n[[Nystagmus.co.uk|http://www.nystagmus.co.uk/]]\n[[The Low Vision Gateway|http://www.lowvision.org/nystagmus.htmw ]]\n[[Vision Support Guide|http://www.vsg.nlb-online.org/eyeconditions/nystagmus.php]]\n[[Nystagmus Network|http://www.nystagmusnet.org/]]\n[[RNIB|http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_rnib003659.hcsp ]]\n\n!!!Retinitis Pigmentosa:\n\n[[Understanding RP|http://www.rcophth.ac.uk/public/booklets/UnderstandingRetinitisPigmentosa.pdf ]]\n[[Retina International|http://www.retina-international.org/home.htm ]]\n[http://www.jwen.com/rp/ffb/ffb1.html Inheritance of Retinal Degeneration]\n[http://www.brps.org.uk/Home_Graphics.html British Retinitis Pigmentosa Society]\n[[Understanding visual field testing|http://www.wills-glaucoma.org/testing/vf.html]]\n\n!!!Charles Bonnet Syndrome:\n\n[[Visual hallucinatory syndromes and the anatomy of the visual brain|http://brain.oxfordjournals.org/cgi/content/full/123/10/2055 ]] Research paper - pdf file to download.\n[[Seeing is Not Believing|http://www.100megsfree4.com/farshores/nsee.htm ]] Story originally published in The Guardian - October 19 2000\n[[Charles Bonnet Syndrome RNIB|http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_rnib003641.hcsp ]] \n[[Neville Clarence Technologies Factsheet|http://www.nctec.co.za/]]\n[[Rehabilitation in Charles Bonnet syndrome|http://www.optometrists.asn.au/ceo/backissues/vol87/no3/3092 ]] pdf file
/***************************************************************************\n* Copyright (C) 2006, Paul Lutus *\n* *\n* This program is free software; you can redistribute it and/or modify *\n* it under the terms of the GNU General Public License as published by *\n* the Free Software Foundation; either version 2 of the License, or *\n* (at your option) any later version. *\n* *\n* This program is distributed in the hope that it will be useful, *\n* but WITHOUT ANY WARRANTY; without even the implied warranty of *\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *\n* GNU General Public License for more details. *\n* *\n* You should have received a copy of the GNU General Public License *\n* along with this program; if not, write to the *\n* Free Software Foundation, Inc., *\n* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *\n***************************************************************************/\n\nfunction getCookie(path)\n{\n var result = "";\n var a = document.cookie.indexOf(path);\n if(a != -1) {\n a += path.length + 1;\n var b = document.cookie.indexOf(";",a);\n if(b == -1) {\n b = document.cookie.length;\n }\n result = unescape(document.cookie.substring(a,b));\n }\n return result;\n}\n\nvar cookie_array = null;\nfunction processCookie()\n{\n var cookie = getCookie(window.location.pathname);\n if (cookie != ''){\n cookie_array = cookie.split(" ");\n }\n}\n\nfunction makeCookie() {\n var values = ((document.getElementById("ampm1").checked)?"1":"0");\n values += " " + ((document.getElementById("daylight1").checked)?"1":"0");\n var exp = new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000);\n document.cookie=window.location.pathname + "=" + values + "; expires=" + exp.toGMTString();\n}\n\nvar locations=["Samoa", "Hawaii", "Juneau","San Francisco"\n,"Denver","Chicago","New York","Caracas"\n,"Rio De Janeiro","Recife","Azores","London"\n,"Paris","Cairo","Moscow","Baku"\n,"Karachi","Dacca","Bangkok","Hong Kong"\n,"Tokyo","Sydney","Noumea","Wellington"];\n\nfunction setup()\n{\n processCookie();\n setup_disp();\n if(cookie_array) {\n document.getElementById("ampm" + cookie_array[0]).checked = true;\n document.getElementById("daylight" + cookie_array[1]).checked = true;\n }\n update_clock();\n}\n\nfunction setup_disp()\n{\n s = "<table cellpadding=\s"0\s" cellspacing=\s"0\s" border=\s"1\s" bordercolor=\s"#c0c0c0\s" bgcolor=#ffffe0>";\n s += "<tr><td class=\s"ccm\s" colspan=\s"2\s">";\n s += "<input id=\s"ampm0\s" type=\s"radio\s" name=\s"ampm\s" checked=\s"checked\s">24 Hour&nbsp;";\n s += "<input id=\s"ampm1\s" type=\s"radio\s" name=\s"ampm\s">AM/PM";\n s += "</td><td class=\s"ccm\s">";\n s += "<input id=\s"daylight0\s" type=\s"radio\s" name=\s"daylight\s" checked=\s"checked\s">Standard&nbsp;";\n s += "<input id=\s"daylight1\s" type=\s"radio\s" name=\s"daylight\s">Daylight";\n s += "</td></tr>";\n s += "<tr bgcolor=\s"#ccffcc\s"><td class=\s"ccb\s">Zone</td>";\n s += "<td class=\s"ccb\s">Place</td>";\n s += "<td class=\s"ccb\s" >Date/Time</td></tr>";\n daylight = (cookie_array && cookie_array[1] == "1")?1:0;\n offset = (new Date().getTimezoneOffset()/60) + daylight;\n for(i = 0; i < 24;i++) {\n q = "tz" + i;\n j = i-11;\n si = "" + Math.abs(j)\n if(si.length < 2) si = "0" + si;\n si = ((j < 0)?"-":"+") + si;\n mod = (i-11 == -offset)?" bgcolor=\s"#f0f0ff\s"":"";\n s += "<tr" + mod + " id=\s"row" + i + "\s"><td class=\s"cc\s">UTC" + si + "</td>";\n s += "<td class=\s"cc\s">" + locations[i] + "</td>";\n s += "<td class=\s"ccm\s" id=\s"v" + i + "\s"></td></tr>";\n }\n s += "</table>";\n document.getElementById("clock_disp").innerHTML = s;\n}\n\nfunction lz(v)\n{\n return (v < 10)?"0" + v:v;\n}\n\nfunction formatDate(d)\n{\n s = lz((d.getMonth()+1))\n + "/" + lz(d.getDate())\n + "/" + d.getFullYear() + " ";\n h = d.getHours();\n if (document.getElementById("ampm1").checked) {\n ap = (h >= 12)?"PM":"AM";\n h = (h % 12);\n if(h == 0) h = 12;\n s += lz(h)\n + ":" + lz(d.getMinutes())\n + ":" + lz(d.getSeconds())\n + " " + ap;\n }\n else {\n s += lz(h)\n + ":" + lz(d.getMinutes())\n + ":" + lz(d.getSeconds());\n }\n return s;\n}\n\nvar old_offset = -1;\nvar hour = 3600000; // one hour in milliseconds\nfunction update_clock() {\n d = new Date();\n offset = d.getTimezoneOffset()/60;\n // add daylight hour if specified\n daylight = (document.getElementById("daylight1").checked)?1:0;\n // set initial TZ to UTC-11\n offset += daylight;\n d.setTime(d.getTime() - (11 * hour) + offset * hour);\n // create time zone outputs\n for(i = -11;i <= 12;i++) {\n document.getElementById("v" + (i+11)).innerHTML = formatDate(d);\n if(old_offset != offset) {\n color=(i == -offset)?"#f0f0ff":"#ffffe0";\n document.getElementById("row" + (i+11)).style.background = color;\n }\n d.setTime(d.getTime() + hour);\n }\n old_offset = offset;\n setTimeout('update_clock()', 990);\n}\n\nwindow.onload = setup;\nwindow.onunload = makeCookie;\n\n
[[nlite|http://www.nliteos.com/]]\n[[RyanVM|http://www.ryanvm.net/msfn/]]\n[[UK keyboard layout - enhanced|http://www.personal.leeds.ac.uk/~ecl6tam/]]\n[[XPize|http://www.xpize.net/?page=about]]\n[[xdot|http://xdot.tk/]] Windows XP Post SP3 Updates - for use with nLite
/***\n===============================================================================\nAuthor : Dawn Ahukanna\nVersion : $Id: Macro_listExtension.js 435 2007-01-04 20:49:17Z dahukanna $\n===============================================================================\n----\n''Name:'' _ListMacroExtension\n''Summary:'' <<getPlugin _ListMacroExtension summary>>\n''Description:'' <<getPlugin _ListMacroExtension description>>\n''Version:'' <<getPlugin _ListMacroExtension>> \n''Date:'' <<getPlugin _ListMacroExtension date>>\n''Author:'' <<getPlugin _ListMacroExtension author>>\n''Source:'' <<getPlugin _ListMacroExtension code>>\n''Documentation:'' <<getPlugin _ListMacroExtension doc>>\n''License:'' [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]\n''Browsers:'' InternetExplorer 6.0, FireFox 1.5.x, FireFox 2.0.x\n''~CoreVersion:'' <<getPlugin _ListMacroExtension coreVersion>>\n----\n!Code\n***/\n//{{{\nversion.extensions._ListMacroExtension= {major: 2, minor: 1, revision: 0, date: new Date("Jan 2, 2007"), code: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_ListMacroExtension", doc: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_ListMacroExtensionDoc", author:"DawnAhukanna dawn[at]dahukanna[dot]net", summary:"_ListMacroExtension for TiddlyWiki version 2.1.3 or above.", description: "Creates an ordered list, sorted by tiddler attribute, of tiddlers tagged with a specific tag.", coreVersion: "2.0.4"};\n\nconfig.macros.list["tagged"] = {prompt: ""};\nconfig.macros.list.tagged.handler = function(params){\n/*\nparams[1]: tag (string)\nparams[2]: sortField (string) e.g "title". If not supplied then "title" is used by default.\n*/\n //This is displayed in the next call, URGH!!!!\n //this.prompt = "Tagged with "+ params[1]; \n return getTiddlersByTag(params[1], params[2] );\n}\n\nfunction getTiddlersByTag (tag,sortField) {\n var tagged = store.getTaggedTiddlers(tag,sortField); //Get all tiddlers with this tag.\n return tagged;\n}\n//}}}\n//----
/***\n=======================================================\nAuthor : Dawn Ahukanna\nVersion : $Id: Macro_messageLib.js 444 2007-01-25 12:17:46Z dahukanna $\n=======================================================\n----\n''Name:'' _MessageLibrary\n''Summary:'' <<getPlugin _MessageLibrary summary>>\n''Description:'' <<getPlugin _MessageLibrary description>>\n''Version:'' <<getPlugin _MessageLibrary>> \n''Date:'' <<getPlugin _MessageLibrary date>>\n''Author:'' <<getPlugin _MessageLibrary author>>\n''Source:'' <<getPlugin _MessageLibrary code>>\n''Documentation:'' <<getPlugin _MessageLibrary doc>>\n''License:'' [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]\n''TiddlyWiki:'' 2.1.x\n''Browsers:'' IE 6.0, FF 1.5.x, FF 2.0.x\n''~CoreVersion:'' <<getPlugin _MessageLibrary coreVersion>>\n----\n!Code\n***/\n//{{{\nversion.extensions._MessageLibrary= {major: 2, minor: 1, revision: 0, date: new Date("Jan 2, 2007"), code: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_MessageLibrary", doc: "http://project.dahukanna.net/tiddlywiki/twextensions.htm#_MessageLibraryDoc", author:"DawnAhukanna dawn[at]dahukanna[dot]net", summary:"_MessageLibrary for TiddlyWiki version 2.1.3 or above.", description: "Message library uses variables so that you can change the word tiddler to an alternative word like 'thought', 'note' or whatever you want your tiddlers to be called.\sn This is done once defining the alternative names in the 'messageType' object and replacing the target words throughout the TiddlyWiki document. (e.g. 'This tiddler doesn't exist' would be changed to 'This thought doesn't exist').", coreVersion: "2.1.0"};\nvar messageType = {lower: "note", lowerPlural: "notes", mixed: "Note", mixedPlural: "Notes", wikiName: "NoteBook", downloadURL: "#"};\n//Override messages in config.message text. \n// Messages\nconfig.messages.customConfigError="Error in systemConfig " + messageType.lower + " '%1' - %0";\nconfig.messages.savedSnapshotError="It appears that this " + messageType.wikiName + " has been incorrectly saved. Please see http:// " + messageType.downloadURL + " for details";\nconfig.messages.undefinedTiddlerToolTip="The " + messageType.lower + " '%0' doesn't yet exist";\nconfig.messages.shadowedTiddlerToolTip="The " + messageType.lower + " '%0' doesn't yet exist, but has a pre-defined shadow value";\nconfig.messages.noTags="There are no tagged " + messageType.lowerPlural;\nconfig.messages.notFileUrlError="You need to save this " + messageType.wikiName + " to a file before you can save changes";\nconfig.messages.cantSaveError="It's not possible to save changes. This could be because your browser doesn't support saving (instead, use FireFox if you can), or because the pathname to your " + messageType.wikiName + " file contains illegal characters";\nconfig.messages.invalidFileError="The original file '%0' does not appear to be a valid " + messageType.wikiName;\nconfig.messages.mainSaved="Main " + messageType.wikiName + " file saved";\nconfig.messages.mainFailed="Failed to save main " + messageType.wikiName + " file. Your changes have not been saved";\nconfig.messages.overwriteWarning="A " + messageType.lower + " named '%0' already exists. Choose OK to overwrite it";\nconfig.messages.unsavedChangesWarning="WARNING! There are unsaved changes in " + messageType.wikiName + "\sn\snChoose OK to save\snChoose CANCEL to discard";\nconfig.messages.confirmExit="--------------------------------\sn\snThere are unsaved changes in " + messageType.wikiName + ". If you continue you will lose those changes\sn\sn--------------------------------";\nconfig.messages.unsupportedTWFormat="Unsupported " + messageType.wikiName + " format '%0'";\nconfig.messages.tiddlerSaveError="Error when saving " + messageType.lower + " '%0'";\nconfig.messages.tiddlerLoadError="Error when loading " + messageType.lower + " '%0'";\n//Override messages in config.views text.\nconfig.views.wikified.tag.tooltip="Show " + messageType.lowerPlural + " tagged with '%0'";\nconfig.views.wikified.tag.openAllText="Open all " + messageType.lowerPlural;\nconfig.views.wikified.tag.openAllTooltip="Open all of these " + messageType.lowerPlural;\nconfig.views.wikified.tag.popupNone="No other " + messageType.lowerPlural + " tagged with '%0'";\nconfig.views.wikified.defaultText="The " + messageType.lower + " '%0' doesn't yet exist. Double-click to create it";\nconfig.views.wikified.shadowModifier="(built-in shadow " + messageType.lower + ")";\nconfig.views.editor.tagChooser.tooltip="Choose existing tags to add to this " + messageType.lower;\n//Override messages in config.commands text.\nconfig.commands.closeTiddler.tooltip="Close this " + messageType.lower;\nconfig.commands.closeOthers.tooltip="Close all other " + messageType.lowerPlural;\nconfig.commands.editTiddler.tooltip="Edit this " + messageType.lower;\nconfig.commands.editTiddler.readOnlyTooltip="View the source of this " + messageType.lower;\nconfig.commands.permalink.tooltip="Permalink for this " + messageType.lower;\nconfig.commands.references.tooltip="Show " + messageType.lowerPlural +" that link to this one";\nconfig.commands.jump.tooltip="Jump to another open " + messageType.lower;\nconfig.commands.saveTiddler.tooltip="Save changes to this " + messageType.lower;\nconfig.commands.cancelTiddler.tooltip="Undo changes to this " + messageType.lower;\nconfig.commands.cancelTiddler.readOnlyTooltip="View this " + messageType.lower + " normally";\nconfig.commands.deleteTiddler.tooltip="Delete this " + messageType.lower;\n//Override messages in config.macros text. \nconfig.macros.search.prompt="Search this " + messageType.wikiName;\nconfig.macros.search.successMsg="%0 " + messageType.lowerPlural + " found matching %1";\nconfig.macros.search.failureMsg="No " + messageType.lowerPlural + " found matching %0";\nconfig.macros.tagging.tooltip="List of " + messageType.lowerPlural + " tagged with '%0'";\nconfig.macros.allTags.tooltip="Show " + messageType.lowerPlural + " tagged with '%0'";\nconfig.macros.allTags.noTags="There are no tagged " + messageType.lowerPlural;\nconfig.macros.list.all.prompt="All " + messageType.lowerPlural + " in alphabetical order";\nconfig.macros.list.missing.prompt=messageType.mixedPlural + " that have links to them but are not defined";\nconfig.macros.list.orphans.prompt=messageType.mixedPlural + " that are not linked to from any other " + messageType.lowerPlural;\nconfig.macros.list.shadowed.prompt=messageType.mixedPlural + " shadowed with default contents";\nconfig.macros.closeAll.prompt="Close all displayed " + messageType.lowerPlural + " (except any that are being edited)";\nconfig.macros.permaview.prompt="Link to an URL that retrieves all the currently displayed " + messageType.lowerPlural;\nconfig.macros.saveChanges.prompt="Save all " + messageType.lowerPlural + " to create a new " + messageType.wikiName;\nconfig.macros.plugins.confirmDeleteText="Are you sure you want to delete these " + messageType.lowerPlural + ":\sn\sn%0";\nconfig.macros.refreshDisplay.prompt="Redraw the entire " + messageType.wikiName + " display";\nconfig.macros.importTiddlers.readOnlyWarning="You cannot import " + messageType.lowerPlural + " into a read-only " + messageType.wikiName + ". Try opening the " + messageType.wikiName + " file from a file:// URL";\nconfig.macros.importTiddlers.confirmOverwriteText="Are you sure you want to overwrite these " + messageType.lowerPlural + ":\sn\sn%0";\nconfig.macros.importTiddlers.wizardTitle="Import "+ messageType.lowerPlural + " from another tiddlywiki file";\nconfig.macros.importTiddlers.step1="Step 1: Locate the tiddlywiki file";\nconfig.macros.importTiddlers.step2="Step 2: Loading the tiddlywiki file";\nconfig.macros.importTiddlers.step3="Step 3: Choose the "+ messageType.lowerPlural + " to import";\nconfig.macros.importTiddlers.step4="%0 "+ messageType.lower + "(s) imported";\nconfig.macros.importTiddlers.listViewTemplate.actions[1].caption="Import these "+ messageType.lowerPlural;\n// Come back for new item.\nconfig.macros.newTiddler.label="new " + messageType.lower;\nconfig.macros.newTiddler.prompt="Create a new " + messageType.lower;\nconfig.macros.newTiddler.title="New " + messageType.mixed;\nconfig.macros.newJournal.label="new journal";\nconfig.macros.newJournal.prompt="Create a new " + messageType.lower + " from the current date and time";\n//Overide config.shadowTiddlers messages.\nconfig.shadowTiddlers.SideBarOptions="<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change " + messageType.wikiName + " advanced options'>>";\nconfig.shadowTiddlers.AdvancedOptions="<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\sn<<option chkOpenInNewWindow>> OpenLinksInNewWindow\sn<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\sn<<option chkToggleLinks>> Clicking on links to " + messageType.lowerPlural + " that are already open causes them to close\sn^^(override with Control or other modifier key)^^\sn<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP\sn<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\sn^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\sn<<option chkConfirmDelete>> ConfirmBeforeDeleting \sn Maximum number of lines in a " + messageType.lower + " edit box: <<option txtMaxEditRows>> \sn Folder name for backup files: <<option txtBackupFolder>> \sn<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field";\nconfig.shadowTiddlers.OptionsPanel="These InterfaceOptions for customising " + messageType.wikiName + " are saved in your browser\sn\snYour username for signing your edits. Write it as a WikiWord (eg JoeBloggs)\sn\sn<<option txtUserName>>\sn<<option chkSaveBackups>> SaveBackups\sn<<option chkAutoSave>> AutoSave\sn<<option chkRegExpSearch>> RegExpSearch\sn<<option chkCaseSensitiveSearch>> CaseSensitiveSearch\sn<<option chkAnimate>> EnableAnimations\sn\sn----\snAdvancedOptions\snPluginManager\snImportTiddlers";\nconfig.shadowTiddlers.SideBarTabs="<<tabs txtMainTab Timeline Timeline TabTimeline All 'All " + messageType.lowerPlural + "' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>";\nconfig.shadowTiddlers.TabMore="<<tabs txtMoreTab Missing 'Missing " + messageType.lowerPlural + "' TabMoreMissing Orphans 'Orphaned " + messageType.lowerPlural + "' TabMoreOrphans Shadowed 'Shadowed " + messageType.lowerPlural + "' TabMoreShadowed>>";\nconfig.shadowTiddlers.GettingStarted="To get started with this blank " + messageType.wikiName + " , you'll need to modify the following " + messageType.lowerPlural + ":\sn* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\sn* MainMenu: The menu (usually on the left)\sn* DefaultTiddlers: Contains the names of the " + messageType.lowerPlural + " that you want to appear when the " + messageType.wikiName + " is opened\snYou'll also need to enter your username for signing your edits: <<option txtUserName>>";\n//}}}\n//----
\n<<newTiddler label:"New Label" prompt:"Create new..." text: oi!\n{{store.getTiddlerText("CertainText")}} tag:"firstTag" "secondTag">>
config.options.chkHttpReadOnly = false;\nconfig.options.chkAnimate = false;\nconfig.options.chkToggleLinks = true;\n
Format to remove wikiness:\n> @@white-space:pre;<nowiki> \n> insert content here : WaterFall\n> </nowiki>@@\n\nWaterFall
/*{{{*/\n.floatbox2 {\n float: left;\n width: 16em;\n border: 2px solid #88aacc;\n border-width: 2px; \n background: #ccddff; \n padding: 2.5em 2em 2em 2em; \n } \n/*}}}*/
http://michael-prokop.at/computer/config/.ratpoisonrc\nhttp://dotfiles.org/~hermogeneshebert/.ratpoisonrc\nhttp://dotfiles.org/~chris71mach1/.ratpoisonrc\nhttp://ratpoison.antidesktop.net/cgi-bin/wiki/.ratpoisonrc\nhttp://kambing.ui.edu/gentoo-portage/x11-wm/ratpoison/files/ratpoisonrc\nRatmen\nhttp://ratpoison.antidesktop.net/cgi-bin/wiki/ratmen
/*{{{*/\n.searchBar { margin-right:1.3em; \n margin-top: -1.2em;}\n.searchBar .button {display:block; border:none; color:#11e; }\n.searchBar .button:hover{border:none; color:#eee;}\n\n.searchBar input{\n border: 1px inset #000; background:#EFDFDa; width:11em; margin:0;\n}\n\n.searchBar input:focus {\n border: 1px inset #000; background:#fff;\n}\n\n/*{{{*/
/***\n!Search Bar /% ============================================================= %/\n***/\n\n/*{{{*/\n.searchBar { margin-right:1.3em; \n margin-top: -1.em;}\n.searchBar .button {display:block; border:none; color:#fff; }\n.searchBar .button:hover{border:none; color:#eee;}\n\n.searchBar input{\n border: 1px inset #000; background:#EFDFDa; width:9em; margin:0;\n}\n\n.searchBar input:focus {\n border: 1px inset #000; background:#fff;\n}\n\n/*{{{*/\n
{{accordionEffect{\n <<slider2 Quickies... Quickies... toolsip\n>><<slider2 Footy Footy toolsip\n>><<slider2 News News toolsip>>\n}}}
<<toggleElement\n "header"\n "Toggle Header"\n "Switch header on and off"\n>>\n\n<<toggleElement\n "mainMenu"\n "Toggle MainMenu"\n "Switch MainMenu on and off"\n>>\n<<toggleElement\n "sidebar"\n "Toggle Sidebar"\n "Switch sidebar on and off"\n>>
config.options.txtUserName = ""; // default "YourName" //\nconfig.options.chkSaveBackups = false; // default true//\nconfig.options.txtBackupFolder = "archive"; // default ""//\nconfig.options.chkAnimate = false; // default true//\nconfig.options.txtMaxEditRows = "15"; // default "30"//\nconfig.views.wikified.defaultText = ""; // don't need\nmessage when a tiddler doesn't exist//\nconfig.views.editor.defaultText = ""; // don't need\nmessage when creating a new tiddler//\nconfig.commands.closeOthers.text = "-other"; // default is "close\nothers"//\nconfig.commands.permalink.text = "link"; // default is\n"permalink"//\nconfig.commands.references.text = "refs"; // default is\n"references"//