Today I started this tiddly.
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\n<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkToggleLinks>> Clicking on links to tiddlers 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\nMaximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>\nFolder name for backup files: <<option txtBackupFolder>>\n<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field
*My favorite Fruit\n*Yellow\n*long\n*slippery\n
Contact\nOfficeHours\nPictures\nBio
[[Contact]]\n[[Office Hours|OfficeHours]]\n[[Pictures]]\n[[Bio]]
<<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
Last Updated: \nCopyright © \n
<!--{{{-->\n<div id='header' class='header'>\n<div class='headerShadow'>\n<span class='searchBar' macro='search'></span>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteTitle' refresh='content' tiddler='UserName'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n\n</div>\n<div id='mainMenu'>\n<span refresh='content' tiddler='MainMenu'></span>\n<span id='noticeBoard' refresh='content' tiddler='NoticeBoard'></span>\n\n</div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='MochaSideBarOptions'></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<div id='contentFooter' refresh='content' tiddler='contentFooter'></div>\n<!--}}}-->
Type the text for 'Pictures'
<<gradient vert #ffffff #ffdddd #ff8888>>gradient fill>>
Cow-orker of the first order.\n*female\n*typist\n[[Bananas]]\n
Type the text for 'SaveEmptyTemplate'
Notes that others might find helpful\n
NSCC People:
/***\n|''Name:''|SortableGridPlugin|\n|''Description:''|Provide live sorting of tables by column|\n|''Date:''|Nov 4, 2006|\n|''Source:''|[[SortableGridPlugin|http://solo.dc3.com/tw/plugins.html#SortableGridPlugin]]|\n|''Author:''|Stuart Langridge, Demian Johnson, Bob Denny|\n|''License:''|See Below|\n|''Version:''|1.1.2|\n|''~CoreVersion:''|2.0.11 and 2.1.x|\n|''Browser:''|Firefox 1.5/2.0; Internet Explorer 6.0/7.0; Safari|\n!!Description\n@@Please note that this works only with TiddlyWiki 2.0.11 and 2.1.0/1/2@@\n\nThis plugin provides live sorting of tables by clicking on a column header. To sort in reverse, click the same column header a second time. An arrow in the sort column shows the direction of sorting. \n\nIt works by trying to automatically detect the type of data in a column, then sorting by the rules for that data type. Note that the data in the first row (before sorting for the first time) is used for type detection, so if other data types exist in the column below the first row, the results will be unpredictable. If it //can// recognize the string as prticular type it //will// sort that column by that type. Moral: keep all of your data in a column the same type. The following data types are checked in the order shown (in other words the table shows the precedence of type detection):\n\n|!Type |!Description|\n|Date|Various formats for dates, specifically any string format that can be converted to a date/time by Javascript's Date.Parse() method.|\n|Currency|Any string beginning with $, £, or € followed by a numeric string (except no leading sign). Note that it does not do currency conversion, the raw currency values are sorted numerically. {{{/^[$|£|€]{1}\sd*\s.{0,1}\sd+$/}}}|\n|Numeric|Data must consist purely of digits, optional leading plus or minus sign, a single period. Javascript cannot handle the Continental virgule (comma decimal point). {{{/^[\s+|\s-]{0,1}\sd*\s.{0,1}\sd+$/}}}|\n|File Size|Numeric string (except no leading sign) with b, Kb, Mb, or Gb at the end. Sorts according to the actual value represented by the notation. {{{/^\sd*\s.{0,1}\sd+[K|M|G]{0,1}b$}}}|\n|Text|Anything that does not match the formats listed below. Text is sorted without regard to character case.|\n!!Installation\nFollow the usual procedure for installing a plugin: Edit this tiddler, copy, paste into a new tiddler in your TW, and tag it systemConfig. Close, Save, and Shift-Reload your TW's page. The table below (in Example) should have hot column headers and be sortable.\n!!Usage\nTo make a table sortable, append an {{{h}}} to the end of the first row. If the table is thus marked as sortable, the formatter will add a CSS class {{{sortable}}} to the generated {{{<table>}}} element. Thus you can use CSS to alter the appearance of the sortable table and/or its elements.\n!!Example\n|Name |Salary |Extension |Performance |File Size |Start date |h\n|Bloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |\n|Bloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |\n|Bloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |\n|Bloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |\n|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |\n|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |\n|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |\n|Shakespeare, Bill |£122000.00|3211 |6 |33.22Gb |12/11/1961 |\n|Shakespeare, Hamlet |£9000 |9005 |-8 |3Gb |01/01/2002 |\n|Fitz, Marvin |€3300.30 |5554 |+5 |4Kb |05/22/1995 |\n!!Revision History\n<<<\n''2003.11.?? [?.?.?]'' Stuart Langridge (http://www.kryogenix.org/code/browser/sorttable/) - Core code for DHTML sortable tables. Copyright and license for his code has been carried forward and applies to subsequent additions.\n''2006.02.14 [1.0.0]'' Demian Johnson - Initial release, adaptation of Langridge code to TiddlyWiki.\n''2006.09.29 [1.1.0]'' Bob Denny - Add standard-format plugin documentation, reformat and tabify code for readability, refactor references to plugin, add new "file size" detection and sorting, add sterling and euro to currency detection, allow any real numbers including optional sign and either period or comma for decimal point for numeric sorting, make RegExp matching strict for currency and numeric, clean up lint warnings, correct spelling of Hamlet's name.\n''2006.10.19 [1.1.1]'' Bob Denny - Allow use with TW 2.1.1 and 2.1.2, hijack is identical with 2.1.0.\n''2006.11.04 [1.1.2]'' Bob Denny - Oh hell, accept 2.1.x, bit again by 2.1.3 which was OK.\n<<<\n!!Code\n***/\n//{{{\n//\n// Begin SORTABLE.JS\n// This Code is:\n// Code downloaded from the Browser Experiments section of kryogenix.org is \n// licenced under the so-called MIT licence. The license is below.\n// ----------------------------------------\n// Copyright (c) 1997-date Stuart Langridge\n// ----------------------------------------\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this \n// software and associated documentation files (the "Software"), to deal in the Software \n// without restriction, including without limitation the rights to use, copy, modify, merge, \n// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons \n// to whom the Software is furnished to do so, subject to the following conditions:\n//\n// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, \n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \n// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE \n// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR \n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \n// DEALINGS IN THE SOFTWARE.\n//\n// Modified under the same aforementioned terms by Demian Johnston, 2006\n// Further modified under the same aforementioned terms by Bob Denny, 2006: \n// 1. Add flexible date/time \n// 2. Use 'this' instead of full dotted names \n// 3. Re-indent and tabify after being munged by TW/IE bu\n// 4. Add "file size" sensing and sorting. Validate with Javascript Lint \n//\nversion.extensions.PersistentForm = {\n major: 1, minor: 1, revision: 2,\n date: new Date(2006, 11, 4), \n type: 'extension',\n source: "http://solo.dc3.com/tw/plugins.html#SortableGridPlugin"\n};\n//}}}\n\n//{{{\nconfig.macros.sortableGridPlugin = { SORT_COLUMN_INDEX: 0 };\n\nconfig.macros.sortableGridPlugin.ts_makeSortable = function(table) \n{\n var firstRow;\n if (table.rows && table.rows.length > 0) {\n firstRow = table.rows[0];\n }\n if (!firstRow) return;\n \n // We have a first row: assume it's the header, and make its contents clickable links\n for (var i=0;i<firstRow.cells.length;i++) {\n var cell = firstRow.cells[i];\n var txt = config.macros.sortableGridPlugin.ts_getInnerText(cell);\n cell.innerHTML = '<a href="#" class="sortheader" onclick="config.macros.sortableGridPlugin.ts_resortTable(this);return false;">' +\n txt + '<span class="sortarrow"> </span></a>';\n }\n};\n//}}}\n\n//{{{\nconfig.macros.sortableGridPlugin.ts_getInnerText = function(el) \n{\n if (typeof el == "string") return el;\n if (typeof el == "undefined") { return el; }\n if (el.innerText) return el.innerText; //Not needed but it is faster\n var str = "";\n var cs = el.childNodes;\n var l = cs.length;\n for (var i = 0; i < l; i++) {\n switch (cs[i].nodeType) \n {\n case 1: //ELEMENT_NODE\n str += config.macros.sortableGridPlugin.ts_getInnerText(cs[i]);\n break;\n case 3: //TEXT_NODE\n str += cs[i].nodeValue;\n break;\n }\n }\n return str;\n};\n\nconfig.macros.sortableGridPlugin.getParent = function(el, pTagName) \n{\n if (el === null) \n return null;\n else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase\n return el;\n else\n return config.macros.sortableGridPlugin.getParent(el.parentNode, pTagName);\n};\n//}}}\n\n//{{{\nconfig.macros.sortableGridPlugin.ts_resortTable = function(lnk) \n{\n var M = config.macros.sortableGridPlugin;\n // get the span\n var span;\n for (var ci = 0; ci < lnk.childNodes.length; ci++) {\n if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') \n span = lnk.childNodes[ci];\n }\n var td = lnk.parentNode;\n var column = td.cellIndex;\n var table = M.getParent(td,'TABLE');\n \n // Work out a type for the column\n if (table.rows.length <= 1) return;\n var itm = M.ts_getInnerText(table.rows[1].cells[column]);\n var sortfn = M.ts_sort_caseinsensitive;\n if(!isNaN(Date.parse(itm)))\n sortfn = M.ts_sort_date;\n else if(itm.match(/^[$|£|€]{1}\sd*\s.{0,1}\sd+$/)) \n sortfn = M.ts_sort_currency;\n else if(itm.match(/^[\s+|\s-]{0,1}\sd*\s.{0,1}\sd+$/)) \n sortfn = M.ts_sort_numeric;\n else if(itm.match(/^\sd*\s.{0,1}\sd+[K|M|G]{0,1}b$/))\n sortfn = M.ts_sort_fileSize;\n M.SORT_COLUMN_INDEX = column;\n var firstRow = new Array();\n var newRows = new Array();\n for (var i = 0; i < table.rows[0].length; i++) { firstRow[i] = table.rows[0][i]; }\n for (var j = 1; j < table.rows.length; j++) { newRows[j-1] = table.rows[j]; }\n \n newRows.sort(sortfn);\n var ARROW;\n if (span.getAttribute("sortdir") == 'down') {\n ARROW = ' ↑';\n newRows.reverse();\n span.setAttribute('sortdir','up');\n } else {\n ARROW = ' ↓';\n span.setAttribute('sortdir','down');\n }\n \n // We appendChild rows that already exist to the tbody, so it moves them \n // rather than creating new ones. Don't do sortbottom rows\n for ( i=0;i<newRows.length;i++) { \n if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) \n table.tBodies[0].appendChild(newRows[i]);\n }\n // do sortbottom rows only\n for ( i=0;i<newRows.length;i++) { \n if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) \n table.tBodies[0].appendChild(newRows[i]);\n }\n \n // Delete any other arrows there may be showing\n var allspans = document.getElementsByTagName("span");\n for ( ci=0;ci<allspans.length;ci++) {\n if (allspans[ci].className == 'sortarrow') {\n if (M.getParent(allspans[ci],"table") == M.getParent(lnk,"table")) { // in the same table as us?\n allspans[ci].innerHTML = ' ';\n }\n }\n }\n \n span.innerHTML = ARROW;\n};\n//}}}\n\n//{{{\nconfig.macros.sortableGridPlugin.ts_sort_fileSize = function(a, b) \n{\n var M = config.macros.sortableGridPlugin;\n var convert = function(str)\n {\n var val;\n var i;\n if((i = str.indexOf("Kb")) != -1)\n val = 1024.0 * str.substr(0, i);\n else if((i = str.indexOf("Mb")) != -1)\n val = 1048576.0 * str.substr(0, i);\n else if((i = str.indexOf("Gb")) != -1)\n val = 1073741824.0 * str.substr(0, i);\n else\n val = 1.0 * str.substr(0, str.length - 1);\n return val;\n };\n \n var aa = M.ts_getInnerText(a.cells[M.SORT_COLUMN_INDEX]);\n var bb = M.ts_getInnerText(b.cells[M.SORT_COLUMN_INDEX]);\n var v1 = convert(aa);\n var v2 = convert(bb);\n if(v1 == v2) return 0;\n if(v1 < v2) return -1;\n return 1;\n};\n\nconfig.macros.sortableGridPlugin.ts_sort_date = function(a, b) \n{\n var M = config.macros.sortableGridPlugin;\n // Handles dates per the rules of Date.parse()\n var aa = M.ts_getInnerText(a.cells[M.SORT_COLUMN_INDEX]);\n var bb = M.ts_getInnerText(b.cells[M.SORT_COLUMN_INDEX]);\n var dt1 = Date.parse(aa);\n var dt2 = Date.parse(bb);\n if (dt1 == dt2) return 0;\n if (dt1 < dt2) return -1;\n return 1;\n};\n\nconfig.macros.sortableGridPlugin.ts_sort_currency = function(a, b) \n{ \n var M = config.macros.sortableGridPlugin;\n var aa = M.ts_getInnerText(a.cells[M.SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');\n var bb = M.ts_getInnerText(b.cells[M.SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');\n return parseFloat(aa) - parseFloat(bb);\n};\n\nconfig.macros.sortableGridPlugin.ts_sort_numeric = function(a, b) \n{ \n var M = config.macros.sortableGridPlugin;\n var aa = parseFloat(M.ts_getInnerText(a.cells[M.SORT_COLUMN_INDEX]));\n if (isNaN(aa)) aa = 0;\n var bb = parseFloat(M.ts_getInnerText(b.cells[M.SORT_COLUMN_INDEX])); \n if (isNaN(bb)) bb = 0;\n return aa-bb;\n};\n\nconfig.macros.sortableGridPlugin.ts_sort_caseinsensitive = function(a, b) \n{\n var M = config.macros.sortableGridPlugin;\n var aa = M.ts_getInnerText(a.cells[M.SORT_COLUMN_INDEX]).toLowerCase();\n var bb = M.ts_getInnerText(b.cells[M.SORT_COLUMN_INDEX]).toLowerCase();\n if (aa == bb) return 0;\n if (aa < bb) return -1;\n return 1;\n};\n\n// config.macros.sortableGridPlugin.ts_sort_default = function(a, b) \n// {\n// var M = config.macros.sortableGridPlugin;\n// var aa = M.ts_getInnerText(a.cells[M.SORT_COLUMN_INDEX]);\n// var bb = M.ts_getInnerText(b.cells[M.SORT_COLUMN_INDEX]);\n// if (aa == bb) return 0;\n// if (aa < bb) return -1;\n// return 1;\n// };\n//\n//}}}\n\n//{{{\n// end Code downloaded from the Browser Experiments section of kryogenix.org\n// end Copyright (c) 1997-date Stuart Langridge//\n// END SORTABLE.JS//\n//}}}\n\n//{{{\n//\n//\n// CORE HIJACK WARNINGS: \n// (1) Depends on the table formatter being first in the config.formatters array\n// (2) Version-specifics - test on your version before adding to the logic here!\n//\nif(version.major == 2 && version.minor === 0 && version.revision == 11)\n{\n config.formatters[0].handler = function(w)\n {\n var table = createTiddlyElement(w.output,"table");\n w.nextMatch = w.matchStart;\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n var currRowType = null, nextRowType;\n var rowContainer, rowElement;\n var prevColumns = [];\n var rowCount = 0;\n var want_sortable=0;\n do {\n lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = lookaheadRegExp.exec(w.source);\n var matched = lookaheadMatch && lookaheadMatch.index == w.nextMatch;\n if(matched)\n {\n nextRowType = lookaheadMatch[2];\n if(nextRowType != currRowType)\n rowContainer = createTiddlyElement(table,this.rowTypes[nextRowType]);\n currRowType = nextRowType;\n if(currRowType == "c")\n {\n if(rowCount === 0)\n rowContainer.setAttribute("align","top");\n else\n rowContainer.setAttribute("align","bottom");\n w.nextMatch = w.nextMatch + 1;\n w.subWikify(rowContainer,this.rowTerminator);\n table.insertBefore(rowContainer,table.firstChild);\n }\n else\n {\n var rowClass = (rowCount & 1) ? "oddRow" : "evenRow";\n rowElement = createTiddlyElement(rowContainer,"tr",null,rowClass);\n this.rowHandler(w,rowElement,prevColumns);\n }\n if(currRowType == "h") {\n want_sortable=1;\n }\n rowCount++;\n }\n } while(matched);\n if (want_sortable) {\n table.setAttribute("class","sortable");\n config.macros.sortableGridPlugin.ts_makeSortable(table);\n }\n };\n} \nelse if(version.major == 2 && version.minor == 1)\n{\n config.formatters[0].handler = function(w)\n {\n var table = createTiddlyElement(w.output,"table");\n var prevColumns = [];\n var currRowType = null;\n var rowContainer;\n var rowCount = 0;\n var want_sortable = 0;\n \n w.nextMatch = w.matchStart;\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n while(lookaheadMatch && lookaheadMatch.index == w.nextMatch)\n {\n var nextRowType = lookaheadMatch[2];\n if(nextRowType == "k")\n {\n table.className = lookaheadMatch[1];\n w.nextMatch += lookaheadMatch[0].length+1;\n }\n else\n {\n if(nextRowType != currRowType)\n {\n rowContainer = createTiddlyElement(table,this.rowTypes[nextRowType]);\n currRowType = nextRowType;\n }\n if(currRowType == "c")\n {\n // Caption\n w.nextMatch++;\n if(rowContainer != table.firstChild)\n table.insertBefore(rowContainer,table.firstChild);\n//[rbd lint warn] rowContainer.setAttribute("align",rowCount == 0?"top":"bottom");\n rowContainer.setAttribute("align",rowCount === 0?"top":"bottom");\n w.subWikifyTerm(rowContainer,this.rowTermRegExp);\n }\n else\n {\n this.rowHandler(w,createTiddlyElement(rowContainer,"tr",null,(rowCount&1)?"oddRow":"evenRow"),prevColumns);\n if(currRowType == "h") want_sortable = 1;\n rowCount++;\n }\n }\n this.lookaheadRegExp.lastIndex = w.nextMatch;\n lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n }\n if (want_sortable) {\n table.setAttribute("class","sortable");\n config.macros.sortableGridPlugin.ts_makeSortable(table);\n }\n };\n}\nelse\n alert("SortableGridPlugin works only with TiddlyWiki 2.0.11 and 2.1.x");\n \n//}}}\n
/*{{{*/\n/*Mocha TiddlyWiki Theme*/\n/*Version 1.0*/\n/*Design and CSS originally by Anthonyy, ported to TiddlyWiki by Saq Imtiaz.*/\n/*}}}*/\n/*{{{*/\n #contentWrapper{\nmargin: 0 3.4em;\n\n font-family: Lucida Grande, Tahoma, Arial, Helvetica, sans-serif; /* Lucida Grande for the Macs, Tahoma for the PCs */\nfont-size: 11px;\n line-height: 1.6em;\n color: #666;\n}\n\n.header {\n background: #fff; \n padding-top: 10px;\n clear: both;\n\nborder-bottom: 4px solid #948979;\n}\n\n.headerShadow { padding: 2.6em 0em 0.5em 0em; }\n\n.siteTitle {\n font-family: 'Trebuchet MS' sans-serif;\n font-weight: bold;\n font-size: 32px;\n color: #CC6633;\n margin-bottom: 30px;\n background-color: #FFF;\n}\n\n.siteTitle a{color:#CC6633; border-bottom:1px dotted #cc6633;}\n\n.siteSubtitle {\n font-size: 1.0em;\n display: block;\n margin: .5em 3em; color: #999999;\n}\n\n#mainMenu {\nposition:relative;\nfloat:left;\nmargin-bottom:1em;\ndisplay:inline;\ntext-align:left;\npadding: 2em 0.5em 0.5em 0em;\nwidth:13em;\nfont-size:1em;\n}\n\n#sidebar{\nposition:relative;\nfloat:right;\nmargin-bottom:1em;\npadding-top:2em;\ndisplay:inline;\n\n}\n\n#displayArea {\n margin: 0em 17em 0em 15em;\n}\n\n.tagClear {clear:none;}\n\n#contentFooter {background:#575352; color:#BFB6B3; clear: both; padding: 0.5em 1em;}\n\n \n #contentFooter a {\n color: #BFB6B3;\n border-bottom: 1px dotted #BFB6B3;\n }\n \n #contentFooter a:hover {\n color: #FFFFFF;\n background-color:#575352;\n }\n\n a,#sidebarOptions .sliderPanel a{\n color:#CC6714;\n text-decoration: none;\n }\n\n a:hover,#sidebarOptions .sliderPanel a:hover {\n color:#CC6714;\n background-color: #F5F5F5; \n }\n\n.viewer .button, .editorFooter .button{\n color: #666;\n border: 1px solid #CC6714;\n}\n\n.viewer .button:hover, \n.editorFooter .button:hover{\n color: #fff;\n background: #CC6714;\n border-color: #CC6714;\n}\n\n.viewer .button:active, .viewer .highlight,.editorFooter .button:active, .editorFooter .highlight{color:#fff; background:#575352;border-color:#575352;}\n\n\n #mainMenu a {\n display: block;\n padding: 5px;\n border-bottom: 1px solid #CCC;\n }\n\n #mainMenu a:link, #navlist a:visited {\n color:#CC6714;\n text-decoration: none;\n }\n \n #mainMenu a:hover {\n background: #000000 url(arrow.gif) 96% 50% no-repeat;\n background-color: #F5F5F5;\n color:#CC6714;\n }\n\n#mainMenu br {display:none;}\n\n#sidebarOptions a {\n color:#999;\n text-decoration: none;\n }\n\n#sidebarOptions a:hover {\n color:#4F4B45;\n background-color: #F5F5F5;border:1px solid #fff;\n }\n\n#sidebarOptions {line-height:1.4em;}\n\n .tiddler {\n padding-bottom: 40px;\n border-bottom: 1px solid #DDDDDD; \n }\n.title {color:#CC6633;}\n.subtitle, .subtitle a { color: #999999; font-size: 1.0em;margin:0.2em;}\n.shadow .title{color:#948979;}\n\n.selected .toolbar a {color:#999999;}\n.selected .toolbar a:hover {color:#4F4B45; background:transparent;border:1px solid #fff;}\n\n.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:#4F4B45; background:transparent;border:1px solid #fff;}\n\n .listLink,#sidebarTabs .tabContents {line-height:1.5em;}\n .listTitle {color:#888;}\n\n#sidebarTabs .tabContents {background:#fff;}\n#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button{color:#999;}\n#sidebarTabs .tabContents .tiddlyLink:hover,#sidebarTabs .tabContents .button:hover{color:#4F4B45;background:#fff}\n\n#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active{color:#4F4B45;background:#fff}\n\n.tabSelected{color:#fff; background:#948979;}\n\n.tabUnselected {\n background: #ccc;\n}\n\n .tabSelected, .tabSelected:hover {\n color: #fff;\n background: #948979;\n border: solid 1px #948979;\npadding-bottom:1px;\n}\n\n .tabUnselected {\n color: #999;\n background: #eee;\n border: solid 1px #ccc;\npadding-bottom:1px;\n}\n\n#sidebarTabs .tabUnselected { border-bottom: none;padding-bottom:3px;}\n#sidebarTabs .tabSelected{padding-bottom:3px;}\n\n\n#sidebarTabs .tabUnselected:hover { border-bottom: none;padding-bottom:3px;color:#4F4B45}\n\n#sidebarOptions .sliderPanel {\n background: #fff; border:none;\n font-size: .9em;\n}\n#sidebarOptions .sliderPanel a {font-weight:normal;}\n#sidebarOptions .sliderPanel input {border:1px solid #999;}\n\n.viewer blockquote {\n border-left: 3px solid #948979;\n}\n\n.viewer table {\n border: 2px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer th, thead td {\n background: #948979;\n border: 1px solid #948979;\n color: #fff;\n}\n.viewer pre {\n border: 1px solid #948979;\n background: #f5f5f5;\n}\n\n.viewer code {\n color: #2F2A29;\n}\n\n.viewer hr {\n border-top: dashed 1px #948979;\n}\n\n.editor input {\n border: 1px solid #948979;\n}\n\n.editor textarea {\n border: 1px solid #948979;\n}\n\n.popup {\n background: #948979;\n border: 1px solid #948979;\n}\n\n.popup li.disabled {\n color: #000;\n}\n\n.popup li a, .popup li a:visited {\n color: #eee;\n border: none;\n}\n\n.popup li a:hover {\n background: #575352;\n color: #fff;\n border: none;\n}\n\n.tagging, .tagged {\n border: 1px solid #eee;\n background-color: #F7F7F7;\n}\n\n.selected .tagging, .selected .tagged {\n background-color: #eee;\n border: 1px solid #BFBAB3;\n}\n\n .tagging .listTitle, .tagged .listTitle {\n color: #bbb;\n}\n\n.selected .tagging .listTitle, .selected .tagged .listTitle {\n color: #666; \n}\n\n.tagging .button, .tagged .button {\n color:#aaa;\n}\n.selected .tagging .button, .selected .tagged .button {\n color:#4F4B45;\n}\n\n.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}\n\n.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {\n border: none; background:transparent; text-decoration:underline; color:#000;\n}\n\nh1,h2,h3,h4,h5 { color: #666; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif; }\nh1 {font-size:18px;}\nh2 {font-size:16px;}\nh3 {font-size: 14px;}\n\n#messageArea {\n border: 4px solid #948979;\n background: #f5f5f5;\n color: #999;\n font-size:90%;\n}\n\n#messageArea a:hover { background:#f5f5f5;}\n\n#messageArea .button{\n color: #666;\n border: 1px solid #CC6714;\n}\n\n#messageArea .button:hover {\n color: #fff;\n background: #948979;\n border-color: #948979;\n}\n\n\n* html .viewer pre {\n margin-left: 0em;\n}\n\n* html .editor textarea, * html .editor input {\n width: 98%;\n}\n\n.searchBar {float:right;font-size: 1.0em;}\n.searchBar .button {color:#999;display:block;}\n.searchBar .button:hover {border:1px solid #fff;color:#4F4B45;}\n.searchBar input { \n background-color: #FFF;\n color: #999999;\n border: 1px solid #CCC; margin-right:3px;\n}\n\n#sidebarOptions .button:active, #sidebarOptions .highlight {background:#F5F5F5;}\n\n*html #contentFooter { padding:0.25em 1em 0.5em 1em;}\n\n#noticeBoard {font-size: 0.9em; color:#999; position:relative;display:block;background:#fff; clear: both; margin-right:0.5em; margin-top:60px; padding:5px; border-bottom: 1px dotted #CCC; border-top: 1px dotted #CCC;}\n#mainMenu #noticeBoard a,#mainMenu #noticeBoard .tiddlyLink {display:inline;border:none;padding:5px 2px;color:#DF9153 }\n#noticeBoard a:hover {border:none;} \n\n#noticeBoard br {display:inline;}\n\n#mainMenu #noticeBoard .button{\n color: #666;\n border: 1px solid #DF9153;padding:2px;\n}\n\n#mainMenu #noticeBoard .button:hover{\n color: #fff;\n background: #DF9153;\n border-color: #DF9153;\n}\n/*}}}*/
Sam Bayne
[[NSCC|http://www.northseattle.edu]]::[[Facweb|http://facweb.northseattle.edu]]::[[sbayne|http://facweb.northseattle.edu/sbayne]]
\n//{{{\n//This ensures that the footer sticks to the bottom of the screen when there are no tiddlers open. If that is not desirable, it can be deleted.\nfunction setFooter() {\n if (document.getElementById && document.getElementById("contentFooter") ) {\n var windowHeight=findWindowHeight();\n if (windowHeight>0) {\n var contentHeight= document.getElementById('mainMenu').offsetHeight + document.getElementById("header").offsetHeight + document.getElementById("contentFooter").offsetHeight;\n var menu= document.getElementById('mainMenu');\n if (windowHeight-(contentHeight)>=0) {\n menu.style.position='relative';\n menu.style.marginBottom=(windowHeight-(contentHeight))+'px';\n }\n else {\n menu.style.position='';\n menu.style.marginBottom='';\n }\n }\n }\n}\nwindow.onresize = function() {\n setFooter();\n}\n\nStory.prototype.refreshTiddler_footerhack=Story.prototype.refreshTiddler;\nStory.prototype.refreshTiddler = function (title,template,force)\n{ \nvar theTiddler = Story.prototype.refreshTiddler_footerhack.apply(this,arguments);\nsetFooter();\n return theTiddler;}\n\n//}}}
config.options.chkHttpReadOnly = true;