Background: #fff\nForeground: #000\nPrimaryPale: #8cf\nPrimaryLight: #18f\nPrimaryMid: #04b\nPrimaryDark: #014\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88
<!--{{{-->\n<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>\n<div class='title' macro='view title'></div>\n<div class='editor' macro='edit title'></div>\n<div macro='annotations'></div>\n<div class='editor' macro='edit text'></div>\n<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened\nYou'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser\n\nYour username for signing your edits. Write it as a WikiWord (eg JoeBloggs)\n\n<<option txtUserName>>\n<<option chkSaveBackups>> SaveBackups\n<<option chkAutoSave>> AutoSave\n<<option chkRegExpSearch>> RegExpSearch\n<<option chkCaseSensitiveSearch>> CaseSensitiveSearch\n<<option chkAnimate>> EnableAnimations\n\n----\nAlso see AdvancedOptions
<!--{{{-->\n<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\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<!--}}}-->
/*{{{*/\nbody {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}\n\na {color:[[ColorPalette::PrimaryMid]];}\na:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}\na img {border:0;}\n\nh1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}\nh1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}\nh2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}\n\n.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}\n.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}\n.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}\n\n.header {background:[[ColorPalette::PrimaryMid]];}\n.headerShadow {color:[[ColorPalette::Foreground]];}\n.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}\n.headerForeground {color:[[ColorPalette::Background]];}\n.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}\n\n.tabSelected{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.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}\n.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}\n.tabContents .button {border:0;}\n\n#sidebar {}\n#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}\n#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}\n#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}\n#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}\n#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}\n\n.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}\n.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}\n.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}\n.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];\n border:1px solid [[ColorPalette::PrimaryMid]];}\n.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}\n.wizardFooter {background:[[ColorPalette::PrimaryPale]];}\n.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}\n.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;\n border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}\n.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}\n.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;\n border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}\n\n#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}\n#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}\n\n.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}\n\n.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}\n.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}\n.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}\n.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}\n.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}\n.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}\n.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}\n.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}\n\n.tiddler .defaultCommand {font-weight:bold;}\n\n.shadow .title {color:[[ColorPalette::TertiaryDark]];}\n\n.title {color:[[ColorPalette::SecondaryDark]];}\n.subtitle {color:[[ColorPalette::TertiaryDark]];}\n\n.toolbar {color:[[ColorPalette::PrimaryMid]];}\n.toolbar a {color:[[ColorPalette::TertiaryLight]];}\n.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}\n.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}\n\n.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}\n.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}\n.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}\n.tagging .button, .tagged .button {border:none;}\n\n.footer {color:[[ColorPalette::TertiaryLight]];}\n.selected .footer {color:[[ColorPalette::TertiaryMid]];}\n\n.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}\n.sparktick {background:[[ColorPalette::PrimaryDark]];}\n\n.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}\n.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}\n.lowlight {background:[[ColorPalette::TertiaryLight]];}\n\n.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}\n\n.imageLink, #displayArea .imageLink {background:transparent;}\n\n.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}\n\n.viewer .listTitle {list-style-type:none; margin-left:-2em;}\n.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}\n.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}\n\n.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}\n.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}\n.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}\n\n.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}\n.viewer code {color:[[ColorPalette::SecondaryDark]];}\n.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}\n\n.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}\n\n.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}\n.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}\n.editorFooter {color:[[ColorPalette::TertiaryMid]];}\n\n#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}\n#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}\n#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }\n#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}\n#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}\n#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}\n#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}\n.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}\n.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}\n#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}\n/*}}}*/
/*{{{*/\n* html .tiddler {height:1%;}\n\nbody {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}\n\nh1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}\nh1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}\nh4,h5,h6 {margin-top:1em;}\nh1 {font-size:1.35em;}\nh2 {font-size:1.25em;}\nh3 {font-size:1.1em;}\nh4 {font-size:1em;}\nh5 {font-size:.9em;}\n\nhr {height:1px;}\n\na {text-decoration:none;}\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 {width:11em;}\n\n#contentWrapper .chkOptionInput {border:0;}\n\n.externalLink {text-decoration:underline;}\n\n.indent {margin-left:3em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.tiddlyLinkExisting {font-weight:bold;}\n.tiddlyLinkNonExisting {font-style:italic;}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */\na.tiddlyLinkNonExisting.shadow {font-weight:bold;}\n\n#mainMenu .tiddlyLinkExisting,\n #mainMenu .tiddlyLinkNonExisting,\n #sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}\n#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}\n\n.header {position:relative;}\n.header a:hover {background:transparent;}\n.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}\n.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}\n\n.siteTitle {font-size:3em;}\n.siteSubtitle {font-size:1.2em;}\n\n#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}\n\n#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}\n#sidebarOptions {padding-top:0.3em;}\n#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}\n#sidebarOptions input {margin:0.4em 0.5em;}\n#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}\n#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}\n#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}\n#sidebarTabs .tabContents {width:15em; overflow:hidden;}\n\n.wizard {padding:0.1em 1em 0em 2em;}\n.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}\n.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}\n.wizardStep {padding:1em 1em 1em 1em;}\n.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}\n.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}\n.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}\n.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}\n\n#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}\n.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}\n#messageArea a {text-decoration:underline;}\n\n.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}\n.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}\n\n.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}\n.popup .popupMessage {padding:0.4em;}\n.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}\n.popup li.disabled {padding:0.4em;}\n.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}\n.listBreak {font-size:1px; line-height:1px;}\n.listBreak div {margin:2px 0;}\n\n.tabset {padding:1em 0em 0em 0.5em;}\n.tab {margin:0em 0em 0em 0.25em; padding:2px;}\n.tabContents {padding:0.5em;}\n.tabContents ul, .tabContents ol {margin:0; padding:0;}\n.txtMainTab .tabContents li {list-style:none;}\n.tabContents li.listLink { margin-left:.75em;}\n\n#contentWrapper {display:block;}\n#splashScreen {display:none;}\n\n#displayArea {margin:1em 17em 0em 14em;}\n\n.toolbar {text-align:right; font-size:.9em;}\n\n.tiddler {padding:1em 1em 0em 1em;}\n\n.missing .viewer,.missing .title {font-style:italic;}\n\n.title {font-size:1.6em; font-weight:bold;}\n\n.missing .subtitle {display:none;}\n.subtitle {font-size:1.1em;}\n\n.tiddler .button {padding:0.2em 0.4em;}\n\n.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}\n.isTag .tagging {display:block;}\n.tagged {margin:0.5em; float:right;}\n.tagging, .tagged {font-size:0.9em; padding:0.25em;}\n.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}\n.tagClear {clear:both;}\n\n.footer {font-size:.9em;}\n.footer li {display:inline;}\n\n.annotation {padding:0.5em; margin:0.5em;}\n\n* html .viewer pre {width:99%; padding:0 0 1em 0;}\n.viewer {line-height:1.4em; padding-top:0.5em;}\n.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}\n.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}\n.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}\n\n.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}\n.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}\ntable.listView {font-size:0.85em; margin:0.8em 1.0em;}\ntable.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}\n\n.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}\n.viewer code {font-size:1.2em; line-height:1.4em;}\n\n.editor {font-size:1.1em;}\n.editor input, .editor textarea {display:block; width:100%; font:inherit;}\n.editorFooter {padding:0.25em 0em; font-size:.9em;}\n.editorFooter .button {padding-top:0px; padding-bottom:0px;}\n\n.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}\n\n.sparkline {line-height:1em;}\n.sparktick {outline:0;}\n\n.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}\n.zoomer div {padding:1em;}\n\n* html #backstage {width:99%;}\n* html #backstageArea {width:99%;}\n#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}\n#backstageToolbar {position:relative;}\n#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}\n#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}\n#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}\n#backstage {position:relative; width:100%; z-index:50;}\n#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}\n.backstagePanelFooter {padding-top:0.2em; float:right;}\n.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}\n#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}\n\n.whenBackstage {display:none;}\n.backstageVisible .whenBackstage {display:block;}\n/*}}}*/
/***\nStyleSheet for use when a translation requires any css style changes.\nThis StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which use a logographic writing system and need larger font sizes.\n***/\n\n/*{{{*/\nbody {font-size:0.8em;}\n.headerShadow {position:relative; padding:3.5em 0em 1em 1em; left:-1px; top:-1px;}\n.headerForeground {position:absolute; padding:3.5em 0em 1em 1em; left:0px; top:0px;}\n\n#sidebarOptions {font-size:1.05em;}\n#sidebarOptions a {font-style:normal;}\n#sidebarOptions .sliderPanel {font-size:0.95em;}\n\n.subtitle {font-size:0.8em;}\n\n.viewer table.listView {font-size:1em;}\n\n.htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;}\n/*}}}*/
/*{{{*/\n@media print {\n#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}\n#displayArea {margin: 1em 1em 0em 1em;}\n/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */\nnoscript {display:none;}\n}\n/*}}}*/
<!--{{{-->\n<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<!--}}}-->
/***\n!Metadata:\n|''Name:''|ArchivedTimeline|\n|''Description:''|Timeline archived monthly.|\n|''Version:''|0.7.0|\n|''Date:''|Aug 25, 2007|\n|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|\n|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.0.11|\n|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|\n\n!Syntax:\n{{{<<timeline [modified|created [maxentries [dateFormate]]]>>}}}\n!Examples:\n{{{<<timeline>>}}}\n{{{<<timeline created 10>>}}}\n{{{<<timeline modified 10 "MMM DD, YYYY">>}}}\n\n!Revision History:\n|''Version''|''Date''|''Note''|\n|0.7.0|Jul 25, 2006|Accept a date format parameter|\n|0.6.3|Jan 14, 2007|Cleaned codes, Removed config.macros.timeline.slider and config.macros.timeline.onClickSlider|\n|0.6.2|Dec 10, 2006|Add monthFormat to display month format for Chinese|\n|0.6.1|Aug 12, 2006|A great effect on config.macros.timeline.slider for Firefox, thanks Bob McElrath|\n|0.6.0|Jul 25, 2006|Runs compatibly with TW 2.1.0 (rev #403+)|\n|0.5.2|Jun 21, 2006|Fixed bugs for dateFormat of TW 2.1|\n|~|~|Change default dateFormat to "0DD MMM, YYYY"|\n|0.5.1|Jun 04, 2006|Added config.macros.archivedTimeline.orderBy for localization|\n|0.5.0|Apr 19, 2006|Fixed bug for twice records of the same date ()|\n|~|~|Added Date.prototype.convertToLocalYYYYMMDDHHMM<<br>>in order to backward compatible with 2.0.6-|\n|0.4.0|Apr 03, 2006|Added new parameter, {{{<<timeline [sortfield] [maxentries]>>}}}|\n|~|~|Added config.options.txtTimelineMaxentries|\n|0.3.1|Feb 04, 2006|JSLint checked|\n|0.3.0|Feb 04, 2006|Fixed several missing variable declarations|\n|0.2.0|Dec 26, 2005|changed for the new feature of Macro timeline of TW 2.0.0 beta 6|\n|0.1.0|Nov 3, 2005|Initial release|\n\n!Code section:\n***/\n//{{{\nversion.extensions.archivedTimeline = {major: 0, minor: 7, revision: 0,\n date: new Date("Aug 26, 2007"),\n name: "ArchivedTimeline",\n type: "Macro",\n author: "BramChen",\n source: "http://sourceforge.net/project/showfiles.php?group_id=150646"\n};\nconfig.options.txtTimelineMaxentries=0;\nconfig.macros.archivedTimeline = {\n tooltips: "Archives sorted by ",\n orderBy:{modified: "modified", created: "created"},\n monthFormat: "0DD MMM YYYY",\n dateFormat: "0DD MMM YYYY"\n};\nconfig.macros.timeline = config.macros.archivedTimeline;\n\nconfig.macros.timeline.handler = function(place,macroName,params) {\n var field = params[0] ? params[0] : "modified";\n\n place.appendChild(document.createTextNode(this.tooltips + this.orderBy[field]));\n var tiddlers = store.reverseLookup("tags","excludeLists",false,field);\n var lastMonth = ""; var lastDay = ""; var theText = "----\sn"; var i = 0;\n var last = (params[1])?params[1]:config.options.txtTimelineMaxentries;\n last = (isNaN(last)||last<1) ? 0:tiddlers.length-Math.min(tiddlers.length,parseInt(last));\n var dateFormat = params[2] ? params[2] : this.dateFormat;\n var cookie; var archives;\n for (var t=tiddlers.length-1; t>=last; t--) {\n var tiddler = tiddlers[t];\n var theMonth = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,6);\n var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);\n if(theMonth != lastMonth) {\n if (lastMonth === "") {\n lastMonth = theMonth;\n }\n else {\n place.appendChild(document.createElement('hr'));\n cookie = 'chktimeline'+(i++);\n archives = this.formatString(this.monthFormat, lastMonth);\n var panel = config.macros.slider.createSlider(place,cookie,archives,this.tooltips + archives);\n wikify(theText,panel);\n lastMonth = theMonth; theText = '----\sn';\n }\n }\n if(theDay != lastDay){\n theText += tiddler[field].formatString(dateFormat) + '\sn';\n lastDay = theDay; \n }\n theText += '* [[' + tiddler.title + ']]\sn';\n }\n place.appendChild(document.createElement('hr'));\n cookie = 'chktimeline'+(i++);\n archives = this.formatString(this.monthFormat, lastMonth);\n var panel = config.macros.slider.createSlider(place,cookie,archives,this.tooltips + archives);\n wikify(theText,panel);\n place.appendChild(document.createElement('hr'));\n};\n\nconfig.macros.timeline.formatString = function(template, yyyymm)\n{\n var dateString = new Date(yyyymm.substr(0,4)+'/'+yyyymm.substr(4,2)+'/01');\n template = template.replace(/DDD|0DD|DD/g,'');\n return dateString.formatString(template);\n};\nif (!Date.prototype.convertToLocalYYYYMMDDHHMM){\n Date.prototype.convertToLocalYYYYMMDDHHMM = function(){\n return(String.zeroPad(this.getFullYear(),4) + String.zeroPad(this.getMonth()+1,2) + String.zeroPad(this.getDate(),2) + String.zeroPad(this.getHours(),2) + String.zeroPad(this.getMinutes(),2));\n }\n}\n//}}}\n
/***\n''Name:'' GenRssPlugin\n''Source:'' http://www.sourceforge.net/projects/ptw/\n''Author:'' BramChen\n''Type:'' Plugin\n''Description:''\n<<<\n*This plugin add a "xml-stylesheet" processing to the rss file generated by TW.\n*Required: \n** rssfeed.xsl\n** rssfeed.css\n** xsl.css\n*if 'config.options.txtGenRssTags' is empty then the outputs limited to 'config.numRssItems' except tiddlers taged with 'excludeLists'.\n*you can add the macro {{{<<option txtGenRssTags>>}}} to some configure tiddler, eg 'AdvancedOptions' for changing the tag list,\n*and add {{{<<option txtRssItems>>}}} to change number of rsfeed item.\n<<<\n''Revision History:''\n<<<\nv0.2.0 (Mar 30 2006)\n* add a new feature that rssfeed limited to tiddlers taged with the tag list specified in 'config.options.txtGenRssTags'.\n* add config.options.txtRssItems.\n* if it's empty then the outputs limited to 'config.numRssItems' except tiddlers taged with 'excludeLists'.\n* you can add the macro {{{<<option txtGenRssTags>>}}} to some configure tiddler, eg 'AdvancedOptions' for changing the tag list.\nv0.1.1 (Feb 04 2006)\n* JSLint checked\nv0.1.0 (Feb 1, 2006) \n* initial release\n<<<\n***/\n// //''Code section:''\n//{{{\nversion.extensions.genRss = {major: 0, minor: 2, revision: 0,\n date: new Date("Mar 30, 2006"),\n info: {\n type: "Macro",\n name: "GenRssPlugin",\n author: "BramChen",\n source: "http://sourceforge.net/project/showfiles.php?group_id=150646"\n }\n};\n\nwindow.generateRss_ori = window.generateRss;\n\nconfig.options.txtGenRssTags = "";\nconfig.options.txtRssItems = "20";\n\nwindow.generateRss = function () {\n var rssTags = config.options.txtGenRssTags.readBracketedList();\n var numRssItems = config.options.txtRssItems;\n var s = [];\n var d = new Date();\n var u = store.getTiddlerText("SiteUrl",null);\n // Assemble the header\n s.push("<" + "?xml version=\s"1.0\s" encoding=\s"utf-8\s"?" + ">");\n s.push("<" + "?xml-stylesheet type=\s"text/xsl\s" href=\s"rss/rssfeed.xsl\s"?" +">");\n s.push("<" + "?xml-stylesheet type=\s"text/css\s" href=\s"rss/rssfeed.css\s"?" +">");\n s.push("<" + "rss version=\s"2.0\s">");\n s.push("<channel>");\n s.push("<title>" + wikifyPlain("SiteTitle").htmlEncode() + "</title>");\n if(u)\n s.push("<link>" + u.htmlEncode() + "</link>");\n s.push("<description>" + wikifyPlain("SiteSubtitle").htmlEncode() + "</description>");\n s.push("<language>en-us</language>");\n s.push("<copyright>Copyright " + d.getFullYear() + " " + config.options.txtUserName.htmlEncode() + "</copyright>");\n s.push("<pubDate>" + d.toGMTString() + "</pubDate>");\n s.push("<lastBuildDate>" + d.toGMTString() + "</lastBuildDate>");\n s.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");\n s.push("<generator>TiddlyWiki " + version.major + "." + version.minor + "." + version.revision + "</generator>");\n // The body\n var tiddlers = store.getTiddlers("modified","excludeLists");\n var n = numRssItems > tiddlers.length ? 0 : tiddlers.length-numRssItems;\n for (var t=tiddlers.length-1; t>=n; t--){\n var f=(rssTags.length===0);\n for (var i = 0; i<rssTags.length; i++){\n if (tiddlers[t].tags.find(rssTags[i])!=null){f=true;break;}\n }\n if (f){s.push(tiddlers[t].saveToRss(u));}\n }\n // And footer\n s.push("</channel>");\n s.push("</rss>");\n // Save it all\n return s.join("\sn");\n};\n//}}}
/***\n|''Name:''|LoadExtPlugin|\n|''Description:''|LoadExtPlugin allows you to load external extensions from the file lists (named .js) within those tiddlers taged with "ExtList".|\n|''Version:''|1.8.0|\n|''Date:''|Apr 30, 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+; InternetExplorer 6.0|\n\n+++!^[Revision History:]\nv1.8.0 (Apr 30 2007)\n*config.macros.loadExt support to load singgle external script by using {{{<<loadExt '/pathto/scriptfile.js'>>}}}\n*Ensure LoadExtPlugin loading itself and/or loadling scripts after core has been loaded with external core js and itself|\nv1.7.2 (Sep 28 2006)\n*Fixed bugs on IE\nv1.7.1 (30 Aug 2006)\n* Changed rule check of ExtList\nv1.7.0 (20 Jul 2006)\n* Runs compatibly with TW 2.1.0 (rev #403+)\nv1.6.0 (13 Jul 2006)\n* Fixed bugs in refreshCode and config.macros.loadExt.loadScripts on IE\n* Runs compatibly with TW 2.1.0 (rev #359+)\nv1.5.2 (21 Jun 2006)\n* minor changes for XHTML compliant\nv1.5.1 (26 Feb 2006)\n* JSLint checked\nv1.5.0 (02 Feb 2006)\n* add new function config.macros.loadExt.LoadScripts(), keep all variables to be local, thanks Udo.\n* Fixed several missing variable declarations\nv1.4.0 (20 Jan 2006)\n* refreshCode() improved.\nv1.3.0 (14 Jan 2006) \n* strip startup error massage for IE\nv1.2.0 (13 Jan 2006) \n* TiddlyWiki version 2.0.0 or above required.\n* refreshCode() improved.\nv1.1.0 (10 Jan 2006)\n* To make the extensions list handling more robust, thanks Udo.\n* Fix bugs for multi-tiddlers tagged with ExtList\nv1.0.0 (07 Jan 2006) \n* Combine the RefreshExt code and LoadExtPlugin, and also make TW 1.2 to be backward compatible, thanks Udo.\n* Globle function refreshCode() added, and reserve the refreshExt macro.\n* Fix a minor bug for variable "scriptfile".\nv0.3.0 (29 Dec 2005)\n* macro refreshExt modified to refresh formatter\nv0.2.0 (24 Nov 2005)\n* macro refreshExt modified for TW 1.2.39 beta 2 and above\nv0.1.0 (25 Sep 2005) \n* initial release\n===\n\n!''Code section:''\n***/\n//{{{\nversion.extensions.loadExt = {major: 1, minor: 8, revision: 0,\n date: new Date("Apr 30, 2007"),\n name: "LoadExtPlugin",\n type: "Plugin",\n author: "BramChen",\n source: "http://sourceforge.net/project/showfiles.php?group_id=150646"\n};\n\nconfig.macros.loadExt = {};\nconfig.macros.loadExt.handler = function(place,macroName,params){\n if (params[0])\n this.loadScriptFile(params[0]);\n else\n this.loadScripts();\n};\n\nconfig.macros.loadExt.loadScriptFile = function(scriptfile){\n var scriptfile = scriptfile.trim();\n if (scriptfile.length < 2 || scriptfile.substr(0,2) == "//" || scriptfile.indexOf(".js") == -1){\n return;\n }\n // displayMessage("loaded: "+ scriptfile);\n var n = document.createElement("script");\n n.type = "text/javascript";\n n.src = scriptfile;\n document.getElementsByTagName("head")[0].appendChild(n);\n};\n\nconfig.macros.loadExt.loadScripts = function() {\n var extTag = "ExtList";\n var str = ""; var scripts = [];\n var tiddlers = store.getTaggedTiddlers(extTag);\n for(var s=0 ; s<tiddlers.length; s++){\n str += store.getRecursiveTiddlerText(tiddlers[s].title)+"\sn";\n }\n scripts = str.replace(/[;\sr]/mg,"\sn").split("\sn");\n for (var i=0; i<scripts.length-1; i++) {\n this.loadScriptFile(scripts[i]);\n }\n\n if (config.browser.isIE){\n// setTimeout(function(){window.refreshCode();return false;},500);\n var lerInterval = setInterval(function(){if(formatter) {clearInterval(lerInterval); window.refreshCode();};},100);\n }\n else {\n var theCodes = "//<![CDATA[\snwindow.refreshCode();//]]>";\n n = document.createElement("script");\n n.type = "text/javascript";\n n.appendChild(document.createTextNode(theCodes));\n document.getElementsByTagName("head")[0].appendChild(n);\n this.refreshCodeInserted = true;\n }\n};\n\nwindow.refreshCode = function (){\n formatter = new Formatter(config.formatters);\n story.forEachTiddler(function(title,e){story.refreshTiddler(title,DEFAULT_VIEW_TEMPLATE,true);});\n refreshDisplay();\n return false;\n}\n\n// setTimeout(function(){config.macros.loadExt.loadScripts();return false;},500);\nvar loadextpluginInterval = setInterval(function(){if(formatter) {clearInterval(loadextpluginInterval); if(!config.macros.loadExt.refreshCodeInserted) config.macros.loadExt.loadScripts();}},100);\n//}}}
/***\n|Name|NestedSlidersPlugin|\n|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|\n|Version|2.3.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|Slider.prototype.stop|\n|Description|show content in nest-able 'slider' or 'floating' panels, without needing to create separate tiddlers for each panel|\n\n!!!!!Configuration\n<<<\nEnable animation for slider panels\n<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing\n>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:\n><<option chkAnimate>> enable animations (entire document)\n>For slider animation to occur, you must also allow animation in general.\n\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\n<<<\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.\n\nAdditional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater (with optional CSS width value)\n*transient display (clicking elsewhere closes panel)\n*custom class/label/tooltip/accesskey\n*alternate label/tooltip (displayed when panel is open)\n*panelID (for later use with {{{<<DOM>>}}} macro. See [[DOMTweaksPlugin]])\n*automatic blockquote style on panel\n*deferred rendering of panel content\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}<br>marks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.\n* {{{(cookiename)}}}<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.\n* {{{!}}} through {{{!!!!!}}}<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style\n* {{{^width^}}} (or just {{{^}}})<br>makes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)\n* {{{"*"}}} //(without the quotes)//<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed. This is useful for creating 'pulldown menus' that automatically go away after they are used.\n* """{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""<br>uses label/tooltip/accesskey. """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional. 'class' is any valid CSS class name, used to style the slider label text. 'key' must be a ''single letter only''. altlabel/alttooltip specifiy alternative label/tooltip for use when slider/floating panel is displayed.\n* {{{#panelID:}}}<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content. This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.\n* {{{">"}}} //(without the quotes)//<br>automatically adds blockquote formatting to slider content\n* {{{"..."}}} //(without the quotes)//<br>defers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//\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\n<<<\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, transient, 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,\n plus a floating panel with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could in turn contain a transient panel,\n perhaps 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,\n plus a floating panel with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could in turn contain a transient panel,\n perhaps 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''2007.07.26 - 2.3.1'' in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed. Fixes "IE click disease", whereby nearly every mouse click causes a page transition.\n''2007.07.20 - 2.3.0'' added syntax for setting panel ID (#panelID:). This allows individual slider panels to be repositioned within tiddler content simply by giving them a unique ID and then moving them to the desired location using the {{{<<DOM move id>>}}} macro.\n''2007.07.19 - 2.2.0'' added syntax for alttext and alttip (button label and tooltip to be displayed when panel is open)\n''2007.07.14 - 2.1.2'' corrected use of 'transient' attribute in IE to prevent (non-recursive) infinite loop\n''2007.07.12 - 2.1.0'' replaced use of "*" for 'open/close on rollover' (which didn't work too well). "*" now indicates 'transient' panels that are automatically closed if a click occurs somewhere else in the document. This permits use of nested sliders to create nested "pulldown menus" that automatically disappear after interaction with them has been completed. Also, in onClickNestedSlider(), use "theTarget.sliderCookie", instead of "this.sliderCookie" to correct cookie state tracking when automatically dismissing transient panels.\n''2007.06.10 - 2.0.5'' add check to ensure that window.adjustSliderPanel() is defined before calling it (prevents error on shutdown when mouse event handlers are still defined)\n''2007.05.31 - 2.0.4'' add handling to invoke adjustSliderPanel() for onmouseover events on slider button and panel. This allows the panel position to be re-synced when the button position shifts due to changes in unrelated content above it on the page. (thanks to Harsha for bug report)\n''2007.03.30 - 2.0.3'' added chkFloatingSlidersAnimate (default to FALSE), so that slider animation can be disabled independent of the overall document animation setting (avoids strange rendering and focus problems in floating panels)\n''2007.03.01 - 2.0.2'' for TW2.2+, hijack Morpher.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n''2007.03.01 - 2.0.1'' in hijack for Slider.prototype.stop, use apply() to pass params to core function\n|please see [[NestedSlidersPluginHistory]] for additional revision details|\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: 3, revision: 1, date: new Date(2007,7,26)};\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;\nif (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=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[[^\s\s]]*\s\s])?(?:\s\s}{3})?(\s\s#[^:]*\s\s:)?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\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 // var defopen=lookaheadMatch[1]\n // var cookiename=lookaheadMatch[2]\n // var header=lookaheadMatch[3]\n // var panelwidth=lookaheadMatch[4]\n // var transient=lookaheadMatch[5]\n // var class=lookaheadMatch[6]\n // var label=lookaheadMatch[7]\n // var openlabel=lookaheadMatch[8]\n // var panelID=lookaheadMatch[9]\n // var blockquote=lookaheadMatch[10]\n // var deferred=lookaheadMatch[11]\n\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie, no accesskey, no alternate text/tip\n var show="none"; var cookie=""; var key="";\n var closedtext=">"; var closedtip="";\n var openedtext="<"; var openedtip="";\n\n // extra "+", default to open\n if (lookaheadMatch[1]) show="block";\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 show=config.options[cookie]?"block":"none";\n }\n\n // parse label/tooltip/accesskey: [label=X|tooltip]\n if (lookaheadMatch[7]) {\n var parts=lookaheadMatch[7].trim().slice(1,-1).split("|");\n closedtext=parts.shift();\n if (closedtext.substr(closedtext.length-2,1)=="=") \n { key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }\n openedtext=closedtext;\n if (parts.length) closedtip=openedtip=parts.join("|");\n else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }\n }\n\n // parse alternate label/tooltip: [label|tooltip]\n if (lookaheadMatch[8]) {\n var parts=lookaheadMatch[8].trim().slice(1,-1).split("|");\n openedtext=parts.shift();\n if (parts.length) openedtip=parts.join("|");\n else openedtip="hide "+openedtext;\n }\n\n var title=show=='block'?openedtext:closedtext;\n var tooltip=show=='block'?openedtip:closedtip;\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 btn.innerHTML=title; // enables use of HTML entities in label\n\n // set extra button attributes\n btn.setAttribute("closedtext",closedtext);\n btn.setAttribute("closedtip",closedtip);\n btn.setAttribute("openedtext",openedtext);\n btn.setAttribute("openedtip",openedtip);\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 btn.onmouseover=function(event) // mouseover on button aligns floater position with button\n { if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel,this.sliderPanel.className); }\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panelID=lookaheadMatch[9]; if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters\n var panel=createTiddlyElement(place,"div",panelID,panelClass,null);\n panel.button = btn; // so the slider panel know which button it belongs to\n btn.sliderPanel=panel; // so the button knows which slider panel it belongs to\n panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):"";\n panel.setAttribute("transient",lookaheadMatch[5]=="*"?"true":"false");\n panel.style.display = show;\n panel.style.width=panel.defaultPanelWidth;\n panel.onmouseover=function(event) // mouseover on panel aligns floater position with button\n { if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this,this.className); }\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if ((show=="block")||!lookaheadMatch[11]) {\n // render now if panel is supposed to be shown or NOT deferred rendering\n w.subWikify(lookaheadMatch[10]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align floater position with button\n if (window.adjustSliderPos) window.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[10]?"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\n // toggle label\n theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");\n // toggle tooltip\n theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));\n\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 && (theSlider.className!='floatingPanel' || config.options.chkFloatingSlidersAnimate))\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 floater panel position with target button\n if (!isOpen && window.adjustSliderPos) window.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 var cookie=theTarget.sliderCookie;\n if (cookie && cookie.length) {\n config.options[cookie]=!isOpen;\n if (config.options[cookie]!=theTarget.defOpen)\n saveOptionCookie(cookie);\n else { // remove cookie if slider is in default display state\n var ex=new Date(); ex.setTime(ex.getTime()-1000);\n document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();\n }\n }\n return false;\n}\n//}}}\n\n//{{{\n// click in document background closes transient panels \ndocument.nestedSliders_savedOnClick=document.onclick;\ndocument.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);\n // call original click handler\n if (document.nestedSliders_savedOnClick)\n var retval=document.nestedSliders_savedOnClick.apply(this,arguments);\n // if click was inside transient panel (or something contained by a transient panel)... leave it alone\n var p=target;\n while (p)\n if ((p.className=="floatingPanel"||p.className=="sliderPanel")&&p.getAttribute("transient")=="true") break;\n else p=p.parentNode;\n if (p) return retval;\n // otherwise, find and close all transient panels...\n var all=document.all?document.all:document.getElementsByTagName("DIV");\n for (var i=0; i<all.length; i++) {\n // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.\n if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;\n // otherwise, if the panel is currently visible, close it by clicking it's button\n if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button}) \n }\n return retval;\n};\n//}}}\n\n//{{{\n// adjust floating 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 (findPosX(btn)+panel.offsetWidth > getWindowWidth()) // adjust position to stay inside right window edge\n left-=findPosX(btn)+panel.offsetWidth-getWindowWidth()+15; // add extra 15px 'fudge factor'\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\n//{{{\n// TW2.1 and earlier:\n// hijack Slider animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function()\n { this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }\n\n// TW2.2+\n// hijack Morpher animation handler 'stop' handler so overflow is visible after animation has completed\nif (version.major+.1*version.minor+.01*version.revision>=2.2) {\n Morpher.prototype.coreStop = Morpher.prototype.stop;\n Morpher.prototype.stop = function()\n { this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }\n}\n//}}}
/***\n\n''This plugin was previously called StyleChooser.''\n\n|Name|SelectThemePlugin|\n|Created by|SimonBaird and SaqImtiaz|\n|Location|http://tw.lewcid.org/#SelectThemePlugin|\n|Version|1.2.5|\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*20-Dec-06, v 1.2.5, fixed horizontal rules for IE (thanks Clint), compatibility fix with HoverMenuPlugin\n* 08-Sept-06, v1.2.4, fixed bug with TW2.1\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: 5, date: new Date(2006,12,20),\n source: "http://tw.lewcid.org/#SelectThemePlugin"\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 zz in things) {\n // make sure we have a value\n if (!config.options[things[zz].cookie])\n config.options[things[zz].cookie] = things[zz].theDefault;\n\n // remove core notify\n store.removeNotification(things[zz].theDefault,things[zz].notify);\n\n // and add our one\n store.addNotification(config.options[things[zz].cookie],things[zz].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 if (oldStyleElement) 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\nif (config.hoverMenu)\n {\n old_hovermenu_makeActiveTheme = TiddlyWiki.prototype.makeActiveTheme;\n TiddlyWiki.prototype.makeActiveTheme = function(what,title,alsoCheckOtherThing)\n {\n old_hovermenu_makeActiveTheme.apply(this,arguments);\n if (!alsoCheckOtherThing)\n config.hoverMenu.handler();\n };\n }\n\nconfig.shadowTiddlers.NoStyleSheet = config.shadowTiddlers.StyleSheet;\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 createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");\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!Metadata:\n|''Name:''|XMLReader|\n|''Description:''||\n|''Version:''|2.2.0|\n|''Date:''|May 19, 2007|\n|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|\n|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|\n|''~CoreVersion:''|2.2.0|\n|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|\n|''Required:''|As the param "asHtml" is used, [[NestedSlidersPlugin|http://www.tiddlytools.com/#NestedSlidersPlugin]] should be installed|\n!Syntax:\n{{{<<rssfeed withDesc|noDesc|asHtml rssfeed.xml|http://www.example.com/rssfeed.rdf>>}}}\n!Revision History:\n|''Version''|''Date''|''Note''|\n|2.2.0|May 19, 2007|Atom feeds suppported|\n|2.1.1|May 15, 2007|Fixed cache bug|\n|2.1.0|May 10, 2007|Fixed bugs:<br>1.missing parameter 'responseText' of processResponse<br>2.Caches failed|\n|2.0.0|Mar 08, 2007|Required TW 2.2.0+|\n|1.5.0|Mar 04, 2007|Codes reworked, more easier reused|\n|1.2.0|Jul 20, 2006|Runs compatibly with TW 2.1.0 (rev #403+)|\n|1.1.0|Jul 10, 2006)|change xmlhttp.send(null)/send() to xmlhttp.send("") for more compatibility for some browsers|\n|1.0.0|Mar 11, 2006|Initial release|\n|~|~|This macro is reworked from RssNewsMacro, but it can be easy to extended to support different structure of xml document from rss feeds|\n|~|~|You could uninstall the RssNewsMacro, but still use the original syntax,<<br>>{{{<<rssfeed withDesc|noDesc|asHtml "rssfeed.xml"|"http://www.example.com/rssfeed.rdf">>}}}|\n\n!Code section:\n***/\n//{{{\nversion.extensions.xmlreader = {major: 2, minor: 2, revision: 0,\n date: new Date("May 19, 2007"),\n name: "XMLReader",\n type: "Macro",\n author: "BramChen",\n source: "http://sourceforge.net/project/showfiles.php?group_id=150646"\n};\n\nconfig.messages.XmlReader = {\n fromCache: "^^(//from cache//)^^",\n errorInDataRetriveing: "Problem retrieving XML data: %0",\n invalidXML: "Invalid XML retrieved from: %0",\n urlNotAccessible: "Access to %0 is not allowed,\snPlease check the setting of your browser:\sn1.For Gecko based, you should set the 'signed.applets.codebase_principal_support' to be true, in about:config.\sn2.For IE, you should add this web site to your trust list."\n};\n\nfunction XmlReader(place,withDesc,xmlURL) {\n this.xmlhttp = null;\n this.place = place;\n this.xmlURL = xmlURL;\n this.withDesc = withDesc;\n this.itemStructure = {title:'Title',link:'Link',pubDate:'PubDate',description:'Desc'};\n this.atomStructure = {title:'Title',id:'Link',updated:'Updated',summary:'Desc'};\n// this.rsTemplate = function(){var t='';for (var i in itemStructure){t+='_'+itemStructure[i]}};\n this.rsTemplate = '_pubDate\sn**[[_title|_link]]_description';\n this.items = {Elm: "%0Elm", Text: "_%0"};\n this.keyItem = "item";\n this.dateFormat = "DDD, DD MMM YYYY";\n this.groupBy = null;\n return this;\n};\n\nXmlReader.prototype.asyncGet = function(xmlURL,callback){\n if(window.Components && window.netscape && window.netscape.security && this.isCrossSite(xmlURL)){\n try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");}\n catch (e) {displayMessage(e.description?e.description:e.toString());}\n }\n return doHttp("GET",xmlURL,null,'text/xml',null,null,callback,null,null)\n};\n\nXmlReader.prototype.genLists = function(xml){\n var itemStructure;\n if (xml.lastChild.nodeName == 'feed'){\n this.keyItem = 'entry';\n itemStructure = this.atomStructure;\n }\n else {\n itemStructure = this.itemStructure;\n }\n var itemList = xml.getElementsByTagName(this.keyItem);\n var items = this.items;\n var rsLists='', rssItem; this.groupBy='';\n for (var i=0; i<itemList.length; i++){\n var itemElms=[],itemTexts=[];\n var rsTemplate=this.rsTemplate;\n for (var j in itemStructure){\n var itemElm = items.Elm.format([j]);\n var itemText = items.Text.format([j]);\n itemElms[itemElm] = itemList[i].getElementsByTagName(j).item(0);\n if(itemElms[itemElm]){\n var theTitle = itemStructure[j];\n var theText = (itemElms[itemElm].firstChild)?itemElms[itemElm].firstChild.nodeValue:'';\n rsTemplate=this.convertTemplate(rsTemplate,j,theText);\n }\n else {\n rsTemplate = rsTemplate.replace('_'+j, '');\n }\n }\n rsLists += rsTemplate;\n }\n return rsLists;\n};\n \nXmlReader.prototype.convertTemplate = function(rsTemplate,j,theText){\n switch (j){\n case 'title':\n rsTemplate = rsTemplate.replace(/_title/,theText.replace(/\s[|\s]/g,''));\n break;\n case 'id':\n j = 'link';\n case 'link' || 'id':\n rsTemplate = rsTemplate.replace('_'+j, theText);\n break;\n case 'updated':\n j = 'pubDate'\n case 'pubDate':\n theText = this.dateFormatString(this.dateFormat, theText);\n if (this.groupBy == theText){\n rsTemplate = rsTemplate.replace('_'+j, '');\n }\n else{\n rsTemplate = rsTemplate.replace('_'+j, '\sn* '+theText);\n this.groupBy = theText;\n }\n break;\n case 'summary':\n j = 'description';\n case 'description':\n var regexpDesc = new RegExp("withDesc|asHtml","g");\n if (regexpDesc.exec(this.withDesc) && theText){\n var _description = theText.replace(/\sn/g,' ');\n _description =_description.replace(/<br \s/>/ig,'\sn'); \n if (version.extensions.nestedSliders){\n _description = ((this.withDesc == "asHtml")?"<html>"+_description+"</html>":_description);\n rsTemplate = rsTemplate.replace('_'+j,'+++[...]'+_description+'\sn===\sn');\n }\n else {\n rsTemplate = rsTemplate.replace('_'+j,_description+'\sn');\n }\n }\n else {\n rsTemplate = rsTemplate.replace('_'+j,'');\n }\n break;\n }\n return (rsTemplate);\n};\n\nXmlReader.prototype.dateFormatString = function(template, theDate){\n theDate = theDate.replace(/-/g,'/').replace(/T.*UT|T.*Z/ ,'');\n var dateString = new Date(theDate);\n template = template.replace(/hh|mm|ss/g,'');\n return dateString.formatString(template);\n};\n\nXmlReader.prototype.isCrossSite = function (url){\n var result = false;\n var curLoc = document.location;\n if (url.indexOf(":") != -1 && curLoc.protocol.indexOf("http") != -1) {\n var re=/(\sw+):\s/\s/([^/:]+)(:\sd*)?([^# ]*)/;\n var rsURL=url.match(re);\n for (var i=0; i<rsURL.length; i++){\n rsURL[i]=(typeof rsURL[i] == 'undefined')?'':rsURL[i];\n }\n result = (curLoc.protocol == rsURL[1] && curLoc.host == rsURL[2] && curLoc.port == rsURL[3]);\n }\n return (!result);\n};\n//}}}\n/***\n!Macro rssfeed\n***/\n//{{{\nconfig.macros.rssfeed = {\n cache: {},\n dateFormat: "YYYY/0MM/0DD"\n};\n\nconfig.macros.rssfeed.handler = function(place,macroName,params){\n var withDesc = params[0];\n var xmlURL = params[1];\n var rss = new XmlReader(place,withDesc,xmlURL);\n rss.dateFormat = this.dateFormat;\n var processResponse = function(status,params,responseText,xmlURL,x){\n if (window.netscape){\n if (rss.isCrossSite(xmlURL)){\n try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");}\n catch (e) { displayMessage(e.description?e.description:e.toString()); }\n }\n }\n if (x.responseXML){\n xmlURL = xmlURL.replace(/[\s?|\s&]nocache.*/,'');\n config.macros.rssfeed.cache[xmlURL] = x;\n wikify(rss.genLists(x.responseXML),place);\n }\n else {\n wikify("<html>"+ x.responseText+"</html>", place);\n displayMessage(config.messages.XmlReader.invalidXML.format([xmlURL]));\n }\n };\n if (this.cache[xmlURL]) {\n wikify(config.messages.XmlReader.fromCache,place);\n var status = false;\n var x=this.cache[xmlURL];\n processResponse(status,null,x.responseText,xmlURL,x);\n }\n else {\n rss.xmlhttp = rss.asyncGet(xmlURL, processResponse);\n }\n};\n//}}}
/***\n|''Name:''|WikiBar|\n|''Version:''|2.0.0 beta3|\n|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|\n|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|\n|''Type:''|toolbar macro command extension|\n|''Required:''|TiddlyWiki 2.0.0 beta6|\n!Description\nWikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.\nBesides, with WikiBar-addons, users can extend the power of WikiBar.\n!Support browser\n*Firefox 1.5\n!Revision history\n*v2.0.0 beta3 (2005/12/30)\n** remove macros (replaced by TWMacro addon)\n** add wikibar command in toolbar automatically\n** rename DOIT to HANDLER\n** rename TIP to TOOLTIP\n*v2.0.0 beta2 (2005/12/21)\n** re-design Wikibar addon framework\n*v2.0.0 beta1 (2005/12/14)\n** Note:\n*** WikiBarPlugin is renamed to WikiBar\n** New Features:\n*** support TiddlyWiki 2.0.0 template mechanism\n*** new wikibar data structure\n*** new wikibar-addon framework for developers\n**** support dynamic popup menu generator\n*** support most new macros added in TiddlyWiki 2.0.0\n*** multi-level popup menu\n*** fix wikibar tab stop\n*** remove paletteSelector\n** Known Bugs:\n*** popup-menu and color-picker can't be closed correctly\n*** some macros can't be displayed correctly in previewer\n*** text in previewer will be displayed italic\n*v1.2.0 (2005/11/21)\n**New Features:\n***User defined color palettes supported\n####Get color palettes from [[ColorZilla Palettes|http://www.iosart.com/firefox/colorzilla/palettes.html]].\n####Save the palette file(*.gpl) as a new tiddler and tag it with 'ColorPalettes', then you can use it in WikiBar.\n***WikiBar style sheet supported\n***Click on document to close current colorPicker, paletteSelector or aboutWikibar\n*v1.1.1 (2005/11/03)\n**Bugs fixed:\n***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'\n*v1.1.0 (2005/11/01)\n**Bugs fixed:\n***WikiBar overruns (reported by by GeoffS <gslocock@yahoo.co.uk>)\n**New features:\n***Insert a color code at the cursor. (Thanks to RunningUtes <RunningUtes@gmail.com>)\n***Enable gradient macro. (Thanks to RunningUtes <RunningUtes@gmail.com>)\n***Insert tiddler comment tags {{{/% ... %/}}}. (new feature supported by TiddlyWiki 1.2.37)\n***Insert DateFormatString for {{{<<today>>}}} macro. (new feature supported by TiddlyWiki 1.2.37)\n**Enhanced:\n***Allow optional parameters in syntax.\n**Bugs:\n***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'\n*v1.0.0 (2005/10/30)\n**Initial release\n!Code\n***/\n//{{{\nconfig.macros.wikibar = {major: 2, minor: 0, revision: 0, beta: 3, date: new Date(2005,12,30)};\nconfig.macros.wikibar.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n if(!(tiddler instanceof Tiddler)) {return;}\n story.setDirty(tiddler.title,true);\n place.id = 'wikibar'+tiddler.title;\n place.className = 'toolbar wikibar';\n};\nfunction wikibar_install(){\n config.commands.wikibar = {\n text: 'wikibar',\n tooltip: 'wikibar on/off',\n handler: function(e,src,title) {\n if(!e){ e = window.event; }\n var theButton = resolveTarget(e);\n theButton.id = 'wikibarButton'+title;\n wikibarPopup.remove();\n wikibar_installAddons(theButton, title);\n wikibar_createWikibar(title);\n return(false);\n }\n };\n config.shadowTiddlers['EditTemplate'] = wikibar_addWikibarCommand(config.shadowTiddlers['EditTemplate']);\n var tiddler = store.getTiddler('EditTemplate');\n if(tiddler){\n tiddler.text = wikibar_addWikibarCommand(tiddler.text);\n }\n}\nfunction wikibar_installAddons(theButton, title){\n var tiddlers = store.getTaggedTiddlers('wikibarAddons');\n if(!tiddlers) { return; }\n theButton.addons=[];\n for(var i=0; i<tiddlers.length; i++){\n try{\n eval(tiddlers[i].text);\n try{\n wikibar_addonInstall(title);\n wikibar_addonInstall = null;\n theButton.addons.push({ok:true, name:tiddlers[i].title});\n }catch(ex){\n theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});\n }\n }catch(ex){\n theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});\n }\n }\n}\nfunction wikibar_addWikibarCommand(tiddlerText){\n var div = document.createElement('div');\n div.style.display = 'none';\n div.innerHTML = tiddlerText;\n for(var i=0; i<div.childNodes.length; i++){\n var o=div.childNodes[i];\n if(o.tagName==='DIV'){\n if(o.className=='toolbar'){\n var macroText = o.getAttribute('macro').trim();\n if(macroText.search('wikibar')<=0){\n macroText += ' wikibar';\n o.setAttribute('macro', macroText);\n }\n break;\n }\n }\n }\n return div.innerHTML.replace(/\s"/g, "\s'");\n}\nfunction wikibar_processSyntaxParams(theSyntax, params){\n try{\n var pcr = 'AplWikibarPcr';\n var rx=null;\n var allParams=null;\n if(params){\n if(typeof(params)=='object'){\n for(var i=0; i<params.length; i++){\n if(params[i]){\n params[i] = params[i].replace(new RegExp('%','g'), pcr).trim();\n rx = '(\s\s[%'+(i+1)+'\s\s])' + '|' + '(%'+(i+1)+')';\n theSyntax = theSyntax.replace(new RegExp(rx,'g'), params[i] );\n }\n }\n allParams = params.join(' ').trim();\n }else{\n allParams = params.replace(new RegExp('%','g'), pcr).trim();\n rx = /(\s[%1{1}\s])|(%1{1})/g;\n theSyntax = theSyntax.replace(rx, allParams);\n }\n }\n if(allParams){\n theSyntax = theSyntax.replace(new RegExp('%N{1}','g'), allParams);\n }\n rx=/\s[%(([1-9]{1,}[0-9]{0,})|(N{1}))\s]/g;\n theSyntax = theSyntax.replace(rx, '');\n rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;\n if( theSyntax.match(rx) ){\n throw 'Not enough parameters! ' + theSyntax;\n }\n theSyntax=theSyntax.replace(new RegExp(pcr,'g'), '%');\n return theSyntax;\n } catch(ex){\n return null;\n }\n}\nfunction wikibar_resolveEditItem(tiddlerWrapper, itemName){\n if(tiddlerWrapper.hasChildNodes()){\n var c=tiddlerWrapper.childNodes;\n for(var i=0; i<c.length; i++){\n var txt=wikibar_resolveEditItem(c[i], itemName);\n if(!txt){\n continue;\n }else{\n return txt;\n }\n }\n }\n return ((tiddlerWrapper.getAttribute && tiddlerWrapper.getAttribute('edit')==itemName)? tiddlerWrapper : null);\n}\nfunction wikibar_resolveEditItemValue(tiddlerWrapper, itemName){\n var o = wikibar_resolveEditItem(tiddlerWrapper, itemName);\n return (o? o.value.replace(/\sr/mg,'') : null);\n}\nfunction wikibar_resolveTiddlerEditorWrapper(obj){\n if(obj.id=='tiddlerDisplay'){return null;}\n if((obj.getAttribute && obj.getAttribute('macro')=='edit text')){return obj;}\n return wikibar_resolveTiddlerEditorWrapper(obj.parentNode);\n}\nfunction wikibar_resolveTiddlerEditor(obj){\n if(obj.hasChildNodes()){\n var c = obj.childNodes;\n for(var i=0; i<c.length; i++){\n var o=wikibar_resolveTiddlerEditor(c[i]);\n if(o){ return o;}\n }\n }\n return ((obj.getAttribute && obj.getAttribute('edit')=='text')? obj : null);\n}\nfunction wikibar_resolveTargetButton(obj){\n if(obj.id && obj.id.substring(0,7)=='wikibar'){ return null; }\n if(obj.tiddlerTitle){\n return obj;\n }else{\n return wikibar_resolveTargetButton(obj.parentNode);\n }\n}\nfunction wikibar_isValidMenuItem(tool){\n if(!tool){ return false; }\n if(tool.TYPE=='MENU' || tool.TYPE=='MAIN_MENU'){\n for(var key in tool){\n if(key.substring(0,8)=='DYNAITEM'){ return true; }\n if(wikibar_isValidMenuItem(tool[key])){ return true; }\n }\n return false;\n }else{\n return (tool.HANDLER? true : false);\n }\n}\nfunction wikibar_editFormat(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByWord(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){return;}\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n if(!( fullText.charAt(ss-1).match(/\sW/gi) || fullText.charAt(ss).match(/\sW/gi) )){\n var m = frontText.match(/\sW/gi);\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{\n ss = 0;\n }\n m = endText.match(/\sW/gi);\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{\n se = fullText.length;\n }\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n selText = fullText.substring(ss,se);\n }\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByCursor(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByLine(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n if(this.byBlock){\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n else{\n se = ss;\n }\n }\n if(ss===0 && (se===0 || se == fullText.length) ){\n var m=fullText.match(/(\sn|\sr)/g);\n if(m){\n se = fullText.indexOf(m[0]);\n }else{\n se = fullText.length;\n }\n selText = fullText.substring(0, se);\n endText = fullText.substring(se, fullText.length);\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n m = frontText.match(/(\sn|\sr)/g);\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{\n ss = 0;\n }\n m = endText.match(/(\sn|\sr)/g);\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{\n se = fullText.length;\n }\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n if(this.byBlock){\n if( (frontText.charAt(frontText.length-1)!='\sn') && ss>0 ){\n repText = '\sn' + repText;\n }\n if( (endText.charAt(0)!='\sn') || se==fullText.length){\n repText += '\sn';\n }\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByTableCell(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(ss===0 || ss==fullText.length){\n throw 'not valid cell!';\n }\n se=ss;\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n i=frontText.lastIndexOf('\sn');\n j=frontText.lastIndexOf('|');\n if(i>j || j<0){\n throw 'not valid cell!';\n }\n ss = j+1;\n i=endText.indexOf('\sn');\n j=endText.indexOf('|');\n if(i<j || j<0){\n throw 'not valid cell!';\n }\n se += j;\n frontText = fullText.substring(0, ss-1);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se+1, fullText.length);\n if(this.key.substring(0,5)=='align'){\n selText = selText.trim();\n if( selText=='>' || selText=='~' || selText.substring(0,8)=='bgcolor(') {return; }\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length - 2;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editSelectAll(param){\n var editor = param.button.editor;\n editor.selectionStart = 0;\n editor.selectionEnd = editor.value.length;\n editor.scrollTop = 0;\n editor.focus();\n}\nfunction wikibar_doPreview(param){\n var theButton = param.button;\n var editor = param.button.editor;\n var wikibar = theButton.parentNode;\n if(!wikibar) { return; }\n title = theButton.tiddlerTitle;\n var editorWrapper = wikibar_resolveTiddlerEditorWrapper(editor);\n var tiddlerWrapper = editorWrapper.parentNode;\n var previewer = document.getElementById('previewer'+title);\n if(previewer){\n previewer.parentNode.removeChild(previewer);\n editorWrapper.style.display = 'block';\n visible=true;\n }else{\n previewer = document.createElement('div');\n previewer.id = 'previewer'+title;\n previewer.className = 'viewer previewer';\n previewer.style.height = (editor.offsetHeight) + 'px';\n wikify(editor.value, previewer);\n tiddlerWrapper.insertBefore(previewer, editorWrapper);\n editorWrapper.style.display = 'none';\n visible=false;\n }\n var pv=null;\n for(var i=0; i<wikibar.childNodes.length; i++){\n try{\n var btn = wikibar.childNodes[i];\n if(btn.toolItem.key == 'preview'){ pv=btn; }\n if(btn.toolItem.key != 'preview'){\n btn.style.display = visible ? '': 'none';\n }\n }catch(ex){}\n }\n if(!pv) { return; }\n if(visible){\n pv.innerHTML = '<font face=\s"verdana\s">&infin;</font>';\n pv.title = 'preview current tiddler';\n }\n else{\n pv.innerHTML = '<font face=\s"verdana\s">&larr;</font>';\n pv.title = 'back to editor';\n }\n}\nfunction wikibar_doListAddons(param){\n clearMessage();\n var title = param.button.tiddlerTitle;\n var wikibarButton = document.getElementById('wikibarButton'+title);\n var ok=0, fail=0;\n for(var i=0; i<wikibarButton.addons.length; i++){\n var addon=wikibarButton.addons[i];\n if(addon.ok){\n displayMessage('[ o ] '+addon.name);\n ok++;\n }\n else{\n displayMessage('[ x ] '+addon.name + ': ' + addon.error);\n fail++;\n }\n }\n displayMessage('---------------------------------');\n displayMessage(ok + ' ok ; ' + fail + ' failed');\n}\nfunction wikibar_getColorCode(param){\n var cbOnPickColor = function(colorCode, param){\n param.params = colorCode;\n param.button.toolItem.doMore(param);\n };\n wikibarColorTool.openColorPicker(param.button, cbOnPickColor, param);\n}\nfunction wikibar_getLinkUrl(param){\n var url= prompt('Please enter the link target', (this.param? this.param : ''));\n if (url && url.trim().length>0){\n param.params = url;\n this.doMore(param);\n }\n}\nfunction wikibar_getTableRowCol(param){\n var rc= prompt('Please enter (rows x cols) of the table', '2 x 3');\n if (!rc || (rc.trim()).length<=0){ return; }\n var arr = rc.toUpperCase().split('X');\n if(arr.length != 2) { return; }\n for(var i=0; i<arr.length; i++){\n if(isNaN(arr[i].trim())) { return; }\n }\n var rows = parseInt(arr[0].trim(), 10);\n var cols = parseInt(arr[1].trim(), 10);\n var txtTable='';\n for(var r=0; r<rows; r++){\n for(var c=0; c<=cols; c++){\n if(c===0){\n txtTable += '|';\n }else{\n txtTable += ' |';\n }\n }\n txtTable += '\sn';\n }\n if(txtTable.trim().length>0){\n param.params = txtTable.trim();\n this.doMore(param);\n }\n}\nfunction wikibar_getMacroParam(param){\n var p = prompt('Please enter the parameters of macro \s"' + this.key + '\s":' +\n '\snSyntax: ' + this.syntax +\n '\sn\snNote: '+\n '\sn%1,%2,... - parameter needed'+\n '\sn[%1] - optional parameter'+\n '\sn%N - more than one parameter(1~n)'+\n '\sn[%N] - any number of parameters(0~n)'+\n '\sn\snPS:'+\n '\sn1. Parameters should be seperated with space character'+\n '\sn2. Use \s" to wrap the parameter that includes space character, ex: \s"hello world\s"'+\n '\sn3. Input the word(null) for the optional parameter ignored',\n (this.param? this.param : '') );\n if(!p) { return; }\n p=p.readMacroParams();\n for(var i=0; i<p.length; i++){\n var s=p[i].trim();\n if(s.indexOf(' ')>0){ p[i]="'"+s+"'"; }\n if(s.toLowerCase()=='null'){ p[i]=null; }\n }\n param.params = p;\n this.doMore(param);\n}\nfunction wikibar_getMorePalette(unused){\n clearMessage();\n displayMessage('Get more color palettes(*.gpl) from ColorZilla Palettes site', 'http:\s/\s/www.iosart.com/firefox/colorzilla/palettes.html');\n displayMessage('Save it as a new tiddler with \s"ColorPalettes\s" tag');\n}\nfunction wikibar_createWikibar(title){\n var theWikibar = document.getElementById('wikibar' + title);\n if(theWikibar){\n if(theWikibar.hasChildNodes()){\n theWikibar.style.display = (theWikibar.style.display=='block'? 'none':'block');\n return;\n }\n }\n var tiddlerWrapper = document.getElementById('tiddler'+title);\n var theTextarea = wikibar_resolveTiddlerEditor(tiddlerWrapper);\n if(!theTextarea){\n clearMessage();\n displayMessage('WikiBar only works in tiddler edit mode now');\n return;\n }else{\n if(!theTextarea.id){ theTextarea.id = 'editor'+title; }\n if(!theTextarea.parentNode.id){ theTextarea.parentNode.id='editorWrapper'+title; }\n }\n if(theWikibar){\n theWikibar = document.getElementById('wikibar'+title);\n }else{\n var editorWrapper = wikibar_resolveTiddlerEditorWrapper(theTextarea);\n theWikibar = createTiddlyElement(tiddlerWrapper, 'div', 'wikibar'+title, 'toolbar');\n addClass(theWikibar, 'wikibar');\n var previewer = document.getElementById('previewer'+title);\n if(previewer){\n tiddlerWrapper.insertBefore(theWikibar, previewer);\n }else{\n tiddlerWrapper.insertBefore(theWikibar, editorWrapper);\n }\n }\n wikibar_createMenu(theWikibar,wikibarStore,title,theTextarea);\n if(config.options['chkWikibarSetEditorHeight'] && config.options['txtWikibarEditorRows']){\n theTextarea.rows = config.options['txtWikibarEditorRows'];\n }\n setStylesheet(\n '.wikibar{text-align:left;visibility:visible;margin:2px;padding:1px;}.previewer{overflow:auto;display:block;border:1px solid;}#colorPicker{position:absolute;display:none;z-index:10;margin:0px;padding:0px;}#colorPicker table{margin:0px;padding:0px;border:2px solid #000;border-spacing:0px;border-collapse:collapse;}#colorPicker td{margin:0px;padding:0px;border:1px solid;font-size:11px;text-align:center;cursor:auto;}#colorPicker .header{background-color:#fff;}#colorPicker .button{background-color:#fff;cursor:pointer;cursor:hand;}#colorPicker .button:hover{padding-top:3px;padding-bottom:3px;color:#fff;background-color:#136;}#colorPicker .cell{padding:4px;font-size:7px;cursor:crosshair;}#colorPicker .cell:hover{padding:10px;}.wikibarPopup{position:absolute;z-index:10;border:1px solid #014;color:#014;background-color:#cef;}.wikibarPopup table{margin:0;padding:0;border:0;border-spacing:0;border-collapse:collapse;}.wikibarPopup .button:hover{color:#eee;background-color:#014;}.wikibarPopup .disabled{color:#888;}.wikibarPopup .disabled:hover{color:#888;background-color:#cef;}.wikibarPopup tr .seperator hr{margin:0;padding:0;background-color:#cef;width:100%;border:0;border-top:1px dashed #014;}.wikibarPopup tr .icon{font-family:verdana;font-weight:bolder;}.wikibarPopup tr .marker{font-family:verdana;font-weight:bolder;}.wikibarPopup td{font-size:0.9em;padding:2px;}.wikibarPopup input{border:0;border-bottom:1px solid #014;margin:0;padding:0;font-family:arial;font-size:100%;background-color:#fff;}',\n 'WikiBarStyleSheet');\n}\nfunction wikibar_createMenu(place,toolset,title,editor){\n if(!wikibar_isValidMenuItem(toolset)){return;}\n if(!(toolset.TYPE=='MAIN_MENU' || toolset.TYPE=='MENU')){ return; }\n for(var key in toolset){\n if(key.substring(0,9)=='SEPERATOR'){\n wikibar_createMenuSeperator(place);\n continue;\n }\n if(key.substring(0,8)=='DYNAITEM'){\n var dynaTools = toolset[key](title,editor);\n if(dynaTools.TYPE && dynaTools.TYPE=='MENU'){\n wikibar_createMenuItem(place,dynaTools,null,editor,title);\n }else{\n dynaTools.TYPE = 'MENU';\n wikibar_createMenu(place, dynaTools, title, editor);\n }\n continue;\n }\n if((toolset[key].TYPE!='MENU' && toolset[key].TYPE!='MAIN_MENU') && !toolset[key].HANDLER){continue;}\n wikibar_createMenuItem(place,toolset,key,editor,title);\n }\n}\nfunction wikibar_createMenuItem(place,toolset,key,editor,title){\n if(!key){\n var tool = toolset;\n }else{\n tool = toolset[key];\n tool.key = key;\n }\n if(!wikibar_isValidMenuItem(tool)){return;}\n var toolIsOnMainMenu = (toolset.TYPE=='MAIN_MENU');\n var toolIsMenu = (tool.TYPE=='MENU');\n var theButton;\n if(toolIsOnMainMenu){\n theButton = createTiddlyButton(\n place,\n '',\n (tool.TOOLTIP? tool.TOOLTIP : ''),\n (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem),\n 'button');\n theButton.innerHTML = (tool.CAPTION? tool.CAPTION : key);\n theButton.isOnMainMenu = true;\n addClass(theButton, (toolIsMenu? 'menu' : 'item'));\n place.appendChild( document.createTextNode('\sn') );\n if(!toolIsMenu){\n if(config.options['chkWikibarPopmenuOnMouseOver']){\n theButton.onmouseover = function(e){ wikibarPopup.remove(); };\n }\n }\n }else{\n theButton=createTiddlyElement(place, 'tr',key,'button');\n theButton.title = (tool.TOOLTIP? tool.TOOLTIP : '');\n theButton.onclick = (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem);\n var tdL = createTiddlyElement(theButton, 'td','','marker');\n var td = createTiddlyElement(theButton, 'td');\n var tdR = createTiddlyElement(theButton, 'td','','marker');\n td.innerHTML = (tool.CAPTION? tool.CAPTION : key);\n if(toolIsMenu){\n tdR.innerHTML='&nbsp;&nbsp;&rsaquo;';\n }\n if(tool.SELECTED){\n tdL.innerHTML = '&radic; ';\n addClass(theButton, 'selected');\n }\n if(tool.DISABLED){\n addClass(theButton, 'disabled');\n }\n }\n theButton.tiddlerTitle = title;\n theButton.toolItem = tool;\n theButton.editor = editor;\n theButton.tabIndex = 999;\n if(toolIsMenu){\n if(config.options['chkWikibarPopmenuOnMouseOver']){\n theButton.onmouseover = wikibar_onClickMenuItem;\n }\n }\n}\nfunction wikibar_createMenuSeperator(place){\n if(place.id.substring(0,7)=='wikibar') { return; }\n var onclickSeperator=function(e){\n if(!e){ e = window.event; }\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return(false);\n };\n var theButton=createTiddlyElement(place,'tr','','seperator');\n var td = createTiddlyElement(theButton, 'td','','seperator');\n td.colSpan=3;\n theButton.onclick=onclickSeperator;\n td.innerHTML = '<hr>';\n}\nfunction wikibar_genWikibarAbout(){\n var toolset={};\n toolset.version = {\n CAPTION: '<center>WikiBar ' +\n config.macros.wikibar.major + '.' +\n config.macros.wikibar.minor + '.' +\n config.macros.wikibar.revision +\n (config.macros.wikibar.beta? ' beta '+config.macros.wikibar.beta : '') +\n '</center>',\n HANDLER: function(){}\n };\n toolset.SEPERATOR = {};\n toolset.author = {\n CAPTION: '<center>Arphen Lin<br>arphenlin@gmail.com</center>',\n TOOLTIP: 'send mail to the author',\n HANDLER: function(){ window.open('mailto:arphenlin@gmail.com'); }\n };\n toolset.website = {\n CAPTION: '<center>aiddlywiki.sourceforge.net</center>',\n TOOLTIP: 'go to the web site of WikiBar',\n HANDLER: function(){ window.open('http:\s/\s/aiddlywiki.sourceforge.net/'); }\n };\n return toolset;\n}\nfunction wikibar_genWikibarOptions(title, editor){\n var toolset={};\n toolset.popOnMouseOver = {\n CAPTION:'popup menu on mouse over',\n SELECTED: config.options['chkWikibarPopmenuOnMouseOver'],\n HANDLER: function(param){\n config.options['chkWikibarPopmenuOnMouseOver'] = !config.options['chkWikibarPopmenuOnMouseOver'];\n saveOptionCookie('chkWikibarPopmenuOnMouseOver');\n var title = param.button.tiddlerTitle;\n var wikibar = document.getElementById('wikibar'+title);\n if(wikibar){ wikibar.parentNode.removeChild(wikibar); }\n wikibar_createWikibar(title);\n }\n };\n toolset.setEditorSize = {\n CAPTION:'set editor height: <input id=\s"txtWikibarEditorRows\s" type=text size=1 MAXLENGTH=3 value=\s"' +\n (config.options['txtWikibarEditorRows']? config.options['txtWikibarEditorRows']:editor.rows) + '\s"> ok',\n HANDLER: function(param){\n var input = document.getElementById('txtWikibarEditorRows');\n if(input){\n var rows = parseInt(input.value, 10);\n if(!isNaN(rows)){\n var editor = param.button.editor;\n editor.rows = rows;\n }else{\n rows=config.maxEditRows;\n }\n config.options['txtWikibarEditorRows'] = rows;\n saveOptionCookie('txtWikibarEditorRows');\n config.maxEditRows = rows;\n }\n }\n };\n toolset.setEditorSizeOnLoadingWikibar = {\n CAPTION:'set editor height on loading wikibar',\n SELECTED: config.options['chkWikibarSetEditorHeight'],\n HANDLER: function(param){\n config.options['chkWikibarSetEditorHeight'] = !config.options['chkWikibarSetEditorHeight'];\n saveOptionCookie('chkWikibarSetEditorHeight');\n if(config.options['chkWikibarSetEditorHeight']){\n var rows = config.options['txtWikibarEditorRows'];\n if(!isNaN(rows)){ rows = 15; }\n var editor = param.button.editor;\n editor.rows = rows;\n config.options['txtWikibarEditorRows'] = rows;\n saveOptionCookie('txtWikibarEditorRows');\n }\n }\n };\n toolset.SEPERATOR = {};\n toolset.update = {\n CAPTION: 'check for updates',\n DISABLED: true,\n HANDLER: function(){}\n };\n return toolset;\n}\nfunction wikibar_genPaletteSelector(){\n try{\n var cpTiddlers = store.getTaggedTiddlers('ColorPalettes');\n if(!cpTiddlers) { return; }\n var palettes=[];\n palettes.push(wikibarColorTool.defaultPaletteName);\n for(var i=0; i<cpTiddlers.length; i++){\n palettes.push(cpTiddlers[i].title.trim());\n }\n var toolset={};\n for(i=0; i<palettes.length; i++){\n toolset[palettes[i]] = {\n TOOLTIP: palettes[i],\n SELECTED: (palettes[i]==wikibarColorTool.paletteName),\n HANDLER: wikibar_doSelectPalette\n };\n }\n return toolset;\n }catch(ex){ return null; }\n}\nfunction wikibar_onClickItem(e){\n if(!e){ e = window.event; }\n var theTarget = resolveTarget(e);\n if(theTarget.tagName=='INPUT'){\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return;\n }\n var theButton = wikibar_resolveTargetButton(theTarget);\n if(!theButton){ return(false); }\n var o = theButton.toolItem;\n if(!o) { return; }\n var param = {\n event: e,\n button: theButton\n };\n if(o.HANDLER){ o.HANDLER(param); }\n if(o.DISABLED){\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n }\n return(false);\n}\nfunction wikibar_onClickMenuItem(e){\n if(!e){ e = window.event; }\n var theButton = wikibar_resolveTargetButton(resolveTarget(e));\n if(!theButton){ return(false); }\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n var title = theButton.tiddlerTitle;\n var editor = theButton.editor;\n var tool = theButton.toolItem;\n if(!tool) { return; }\n var popup = wikibarPopup.create(this);\n if(popup){\n wikibar_createMenu(popup,tool,title,editor);\n if(!popup.hasChildNodes()){\n wikibarPopup.remove();\n }else{\n wikibarPopup.show(popup, false);\n }\n }\n return(false);\n}\nvar wikibarColorTool = {\n defaultPaletteName : 'default',\n defaultColumns : 16,\n defaultPalette : [\n '#FFF','#DDD','#CCC','#BBB','#AAA','#999','#666','#333','#111','#000','#FC0','#F90','#F60','#F30','#C30','#C03',\n '#9C0','#9D0','#9E0','#E90','#D90','#C90','#FC3','#FC6','#F96','#F63','#600','#900','#C00','#F00','#F36','#F03',\n '#CF0','#CF3','#330','#660','#990','#CC0','#FF0','#C93','#C63','#300','#933','#C33','#F33','#C36','#F69','#F06',\n '#9F0','#CF6','#9C3','#663','#993','#CC3','#FF3','#960','#930','#633','#C66','#F66','#903','#C39','#F6C','#F09',\n '#6F0','#9F6','#6C3','#690','#996','#CC6','#FF6','#963','#630','#966','#F99','#F39','#C06','#906','#F3C','#F0C',\n '#3F0','#6F3','#390','#6C0','#9F3','#CC9','#FF9','#C96','#C60','#C99','#F9C','#C69','#936','#603','#C09','#303',\n '#0C0','#3C0','#360','#693','#9C6','#CF9','#FFC','#FC9','#F93','#FCC','#C9C','#969','#939','#909','#636','#606',\n '#060','#3C3','#6C6','#0F0','#3F3','#6F6','#9F9','#CFC','#9CF','#FCF','#F9F','#F6F','#F3F','#F0F','#C6C','#C3C',\n '#030','#363','#090','#393','#696','#9C9','#CFF','#39F','#69C','#CCF','#C9F','#96C','#639','#306','#90C','#C0C',\n '#0F3','#0C3','#063','#396','#6C9','#9FC','#9CC','#06C','#369','#99F','#99C','#93F','#60C','#609','#C3F','#C0F',\n '#0F6','#3F6','#093','#0C6','#3F9','#9FF','#699','#036','#039','#66F','#66C','#669','#309','#93C','#C6F','#90F',\n '#0F9','#6F9','#3C6','#096','#6FF','#6CC','#366','#069','#36C','#33F','#33C','#339','#336','#63C','#96F','#60F',\n '#0FC','#6FC','#3C9','#3FF','#3CC','#399','#033','#39C','#69F','#00F','#00C','#009','#006','#003','#63F','#30F',\n '#0C9','#3FC','#0FF','#0CC','#099','#066','#3CF','#6CF','#09C','#36F','#0CF','#09F','#06F','#03F','#03C','#30C'\n ],\n colorPicker : null,\n pickColorHandler: null,\n userData: null\n};\nwikibarColorTool.paletteName = wikibarColorTool.defaultPaletteName;\nwikibarColorTool.columns = wikibarColorTool.defaultColumns;\nwikibarColorTool.palette = wikibarColorTool.defaultPalette;\nwikibarColorTool.onPickColor = function(e){\n if (!e){ e = window.event; }\n var theCell = resolveTarget(e);\n if(!theCell){ return(false); }\n color = theCell.bgColor.toLowerCase();\n if(!color) { return; }\n wikibarColorTool.displayColorPicker(false);\n if(wikibarColorTool.pickColorHandler){\n wikibarColorTool.pickColorHandler(color, wikibarColorTool.userData);\n }\n return(false);\n};\nwikibarColorTool.onMouseOver = function(e){\n if (!e){ e = window.event; }\n var theButton = resolveTarget(e);\n if(!theButton){ return(false); }\n if(!wikibarColorTool) { return; }\n color = theButton.bgColor.toUpperCase();\n if(!color) { return; }\n td=document.getElementById('colorPickerInfo');\n if(!td) { return; }\n td.bgColor = color;\n td.innerHTML = '<span style=\s"color:#000;\s">'+color+'</span>&nbsp;&nbsp;&nbsp;' +\n '<span style=\s"color:#fff;\s">'+color+'</span>';\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return(false);\n};\nwikibarColorTool.openColorPicker = function(theTarget, pickColorHandler, userData){\n wikibarColorTool.skipClickDocumentEvent = true;\n wikibarColorTool.pickColorHandler = pickColorHandler;\n wikibarColorTool.userData = userData;\n wikibarColorTool.moveColorPicker(theTarget);\n};\nwikibarColorTool.convert3to6HexColor = function(c){\n c=c.trim();\n var rx=/^\s#(\sd|[a-f])(\sd|[a-f])(\sd|[a-f])$/gi;\n return (rx.test(c)? c.replace(rx, '#$1$1$2$2$3$3') : c);\n};\nwikibarColorTool.numToHexColor = function (n){\n if(typeof(n)=='number' && (n>=0 && n<=255)) {\n s = n.toString(16).toLowerCase();\n return ((s.length==1)? '0'+s : s);\n }else{\n return null;\n }\n};\nwikibarColorTool.renderColorPalette = function(){\n if(wikibarColorTool.paletteName==wikibarColorTool.defaultPaletteName){\n wikibarColorTool.palette=wikibarColorTool.defaultPalette;\n wikibarColorTool.columns=wikibarColorTool.defaultColumns;\n return;\n }\n tiddlerText = (store.getTiddlerText(wikibarColorTool.paletteName, '')).trim();\n if(tiddlerText.length<=0) { return; }\n var cpContents = tiddlerText.split('\sn');\n var colors=[];\n columns = wikibarColorTool.defaultColumns;\n var tmpArray=null;\n errCount=0;\n for(var i=0; i<cpContents.length; i++){\n cpLine=cpContents[i].trim();\n if( (!cpLine) || (cpLine.length<=0) || (cpLine.charAt(0) == '#') ){ continue; }\n if(cpLine.substring(0,8).toLowerCase()=='columns:'){\n tmpArray = cpLine.split(':');\n try{\n columns = parseInt(tmpArray[1],10);\n }catch(ex){\n columns = wikibarColorTool.defaultColumns;\n }\n }else{\n tmpArray = cpLine.replace('\st', ' ').split(/[ ]{1,}/);\n try{\n color='';\n for(var j=0; j<3; j++){\n c=parseInt(tmpArray[j].trim(), 10);\n if(isNaN(c)){\n break;\n }else{\n c=wikibarColorTool.numToHexColor(c);\n if(!c) {break;}\n color+=c;\n }\n }\n if(color.length==6){\n colors.push('#'+color);\n } else {\n throw 'error';\n }\n }catch(ex){\n }\n }\n }\n if(colors.length>0){\n wikibarColorTool.palette = colors;\n wikibarColorTool.columns = columns;\n }else{\n throw 'renderColorPalette(): No color defined in the palette.';\n }\n};\nwikibarColorTool.displayColorPicker = function(visible){\n if(wikibarColorTool.colorPicker){\n wikibarColorTool.colorPicker.style.display = (visible? 'block' : 'none');\n }\n};\nwikibarColorTool.moveColorPicker = function(theTarget){\n if(!wikibarColorTool.colorPicker){\n wikibarColorTool.createColorPicker();\n }\n var cp = wikibarColorTool.colorPicker;\n var rootLeft = findPosX(theTarget);\n var rootTop = findPosY(theTarget);\n var popupLeft = rootLeft;\n var popupTop = rootTop;\n var popupWidth = cp.offsetWidth;\n var winWidth = findWindowWidth();\n if(popupLeft + popupWidth > winWidth){\n popupLeft = winWidth - popupWidth;\n }\n cp.style.left = popupLeft + 'px';\n cp.style.top = popupTop + 'px';\n wikibarColorTool.displayColorPicker(true);\n};\nwikibarColorTool.createColorPicker = function(unused, palette){\n if(palette){ wikibarColorTool.paletteName=palette; }\n wikibarColorTool.renderColorPalette();\n wikibarColorTool.colorPicker = document.createElement('div');\n wikibarColorTool.colorPicker.id = 'colorPicker';\n document.body.appendChild(wikibarColorTool.colorPicker);\n var theTable = document.createElement('table');\n wikibarColorTool.colorPicker.appendChild(theTable);\n var theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n var theTD = document.createElement('td');\n theTD.className = 'header';\n theTD.colSpan = wikibarColorTool.columns;\n theTD.innerHTML = wikibarColorTool.paletteName;\n theTR.appendChild(theTD);\n for(var i=0; i<wikibarColorTool.palette.length; i++){\n if((i%wikibarColorTool.columns)===0){\n theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n }\n theTD = document.createElement('td');\n theTD.className = 'cell';\n theTD.bgColor = wikibarColorTool.convert3to6HexColor(wikibarColorTool.palette[i]);\n theTD.onclick = wikibarColorTool.onPickColor;\n theTD.onmouseover = wikibarColorTool.onMouseOver;\n theTR.appendChild(theTD);\n }\n rest = wikibarColorTool.palette.length % wikibarColorTool.columns;\n if(rest>0){\n theTD = document.createElement('td');\n theTD.colSpan = wikibarColorTool.columns-rest;\n theTD.bgColor = '#000000';\n theTR.appendChild(theTD);\n }\n theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n theTD = document.createElement('td');\n theTD.colSpan = wikibarColorTool.columns;\n theTD.id = 'colorPickerInfo';\n theTR.appendChild(theTD);\n};\nwikibarColorTool.onDocumentClick = function(e){\n if (!e){ e = window.event; }\n if(wikibarColorTool.skipClickDocumentEvent) {\n wikibarColorTool.skipClickDocumentEvent = false;\n return true;\n }\n if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){\n wikibarColorTool.displayColorPicker(false);\n }\n return true;\n};\nfunction wikibar_doSelectPalette(param){\n clearMessage();\n var theButton = param.button;\n if(!theButton.toolItem.key) { return; }\n var palette = theButton.toolItem.key;\n var oldPaletteName = wikibarColorTool.paletteName;\n if(oldPaletteName != palette){\n try{\n wikibarColorTool.createColorPicker(theButton, palette);\n displayMessage('Palette \s"'+palette+'\s" ('+ wikibarColorTool.palette.length +' colors) is selected');\n }catch(ex){\n errMsg = ex;\n if(errMsg.substring(0,18)=='renderColorPalette'){\n displayMessage('Invalid palette \s"' + palette + '\s", please check it out!');\n wikibarColorTool.createColorPicker(theButton, oldPaletteName);\n }\n }\n }\n}\nvar wikibarPopup = {\n skipClickDocumentEvent: false,\n stack: []\n};\nwikibarPopup.resolveRootPopup = function(o){\n if(o.isOnMainMenu){ return null; }\n if(o.className.substring(0,12)=='wikibarPopup'){ return o;}\n return wikibarPopup.resolveRootPopup(o.parentNode);\n};\nwikibarPopup.create = function(root){\n for(var i=0; i<wikibarPopup.stack.length; i++){\n var p=wikibarPopup.stack[i];\n if(p.root==root){\n wikibarPopup.removeFrom(i+1);\n return null;\n }\n }\n var rootPopup = wikibarPopup.resolveRootPopup(root);\n if(!rootPopup){\n wikibarPopup.remove();\n }else{\n wikibarPopup.removeFromRootPopup(rootPopup);\n }\n var popup = createTiddlyElement(document.body,'div','wikibarPopup'+root.toolItem.key,'wikibarPopup');\n var pop = createTiddlyElement(popup,'table','','');\n wikibarPopup.stack.push({rootPopup: rootPopup, root: root, popup: popup});\n return pop;\n};\nwikibarPopup.show = function(unused,slowly){\n var curr = wikibarPopup.stack[wikibarPopup.stack.length-1];\n var overlayWidth = 1;\n var rootLeft, rootTop, rootWidth, rootHeight, popupLeft, popupTop, popupWidth;\n if(curr.rootPopup){\n rootLeft = findPosX(curr.rootPopup);\n rootTop = findPosY(curr.root);\n rootWidth = curr.rootPopup.offsetWidth;\n popupLeft = rootLeft + rootWidth - overlayWidth;\n popupTop = rootTop;\n }else{\n rootLeft = findPosX(curr.root);\n rootTop = findPosY(curr.root);\n rootHeight = curr.root.offsetHeight;\n popupLeft = rootLeft;\n popupTop = rootTop + rootHeight;\n }\n var winWidth = findWindowWidth();\n popupWidth = curr.popup.offsetWidth;\n if(popupLeft + popupWidth > winWidth){\n popupLeft = rootLeft - popupWidth + overlayWidth;\n }\n curr.popup.style.left = popupLeft + 'px';\n curr.popup.style.top = popupTop + 'px';\n curr.popup.style.display = 'block';\n addClass(curr.root, 'highlight');\n if(config.options.chkAnimate){\n anim.startAnimating(new Scroller(curr.popup,slowly));\n }else{\n window.scrollTo(0,ensureVisible(curr.popup));\n }\n};\nwikibarPopup.remove = function(){\n if(wikibarPopup.stack.length > 0){\n wikibarPopup.removeFrom(0);\n }\n};\nwikibarPopup.removeFrom = function(from){\n for(var t=wikibarPopup.stack.length-1; t>=from; t--){\n var p = wikibarPopup.stack[t];\n removeClass(p.root,'highlight');\n p.popup.parentNode.removeChild(p.popup);\n }\n wikibarPopup.stack = wikibarPopup.stack.slice(0,from);\n};\nwikibarPopup.removeFromRootPopup = function(from){\n for(var t=0; t<wikibarPopup.stack.length; t++){\n var p = wikibarPopup.stack[t];\n if(p.rootPopup==from){\n wikibarPopup.removeFrom(t);\n break;\n }\n }\n};\nwikibarPopup.onDocumentClick = function(e){\n if (!e){ e = window.event; }\n if(wikibarPopup.skipClickDocumentEvent){\n wikibarPopup.skipClickDocumentEvent=false;\n return true;\n }\n if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){\n wikibarPopup.remove();\n }\n return true;\n};\nvar wikibarStore = {\n TYPE: 'MAIN_MENU',\n help:{\n TYPE:'MENU',\n CAPTION: '<font face=\s"verdana\s">?</font>',\n TOOLTIP: 'about WikiBar',\n options:{\n TYPE:'MENU',\n DYNAITEM: wikibar_genWikibarOptions\n },\n about:{\n TYPE:'MENU',\n DYNAITEM: wikibar_genWikibarAbout\n }\n },\n preview:{\n TOOLTIP: 'preview this tiddler',\n CAPTION: '<font face=\s"verdana\s">&infin;</font>',\n HANDLER: wikibar_doPreview\n },\n line:{\n TOOLTIP: 'horizontal line',\n CAPTION: '<font face=\s"verdana\s">&mdash;</font>',\n syntax: '\sn----\sn',\n HANDLER: wikibar_editFormatByCursor\n },\n crlf:{\n TOOLTIP: 'new line',\n CAPTION: '<font face=\s"verdana\s">&para;</font>',\n syntax: '\sn',\n HANDLER: wikibar_editFormatByCursor\n },\n selectAll:{\n TOOLTIP: 'select all',\n CAPTION: '<font face=\s"verdana\s">&sect;</font>',\n HANDLER: wikibar_editSelectAll\n },\n deleteSelected:{\n TOOLTIP: 'delete selected',\n CAPTION: '<font face=\s"verdana\s">&times;</font>',\n syntax: '',\n HANDLER: wikibar_editFormat\n },\n textFormat:{\n TYPE: 'MENU',\n CAPTION: 'text',\n TOOLTIP: 'text formatters',\n ignore:{\n TOOLTIP: 'ignore wiki word',\n CAPTION: 'ignore wikiWord',\n syntax: '~user_text',\n hint: 'wiki_word',\n HANDLER: wikibar_editFormatByWord\n },\n bolder:{\n TOOLTIP: 'bolder text',\n CAPTION: '<strong>bolder</strong>',\n syntax: "''user_text''",\n hint: 'bold_text',\n HANDLER: wikibar_editFormatByWord\n },\n italic:{\n TOOLTIP: 'italic text',\n CAPTION: '<em>italic</em>',\n syntax: '\s/\s/user_text\s/\s/',\n hint: 'italic_text',\n HANDLER: wikibar_editFormatByWord\n },\n underline:{\n TOOLTIP: 'underline text',\n CAPTION: '<u>underline</u>',\n syntax: '__user_text__',\n hint: 'underline_text',\n HANDLER: wikibar_editFormatByWord\n },\n strikethrough:{\n TOOLTIP: 'strikethrough text',\n CAPTION: '<strike>strikethrough</strike>',\n syntax: '==user_text==',\n hint: 'strikethrough_text',\n HANDLER: wikibar_editFormatByWord\n },\n superscript:{\n TOOLTIP: 'superscript text',\n CAPTION: 'X<sup>superscript</sup>',\n syntax: '^^user_text^^',\n hint: 'superscript_text',\n HANDLER: wikibar_editFormatByWord\n },\n subscript:{\n TOOLTIP: 'subscript text',\n CAPTION: 'X<sub>subscript</sub>',\n syntax: '~~user_text~~',\n hint: 'subscript_text',\n HANDLER: wikibar_editFormatByWord\n },\n comment:{\n TOOLTIP: 'comment text',\n CAPTION: 'comment text',\n syntax: '/%user_text%/',\n hint: 'comment_text',\n HANDLER: wikibar_editFormatByWord\n },\n monospaced:{\n TOOLTIP: 'monospaced text',\n CAPTION: '<code>monospaced</code>',\n syntax: '{{{user_text}}}',\n hint: 'monospaced_text',\n HANDLER: wikibar_editFormatByWord\n }\n },\n paragraph:{\n TYPE: 'MENU',\n TOOLTIP: 'paragarph formatters',\n list:{\n TYPE: 'MENU',\n TOOLTIP: 'list tools',\n bullet:{\n TOOLTIP: 'bullet point',\n syntax: '*user_text',\n hint: 'bullet_text',\n HANDLER: wikibar_editFormatByLine\n },\n numbered:{\n TOOLTIP: 'numbered list',\n syntax: '#user_text',\n hint: 'numbered_text',\n HANDLER: wikibar_editFormatByLine\n }\n },\n heading:{\n TYPE: 'MENU',\n heading1:{\n CAPTION:'<h1>Heading 1</h1>',\n TOOLTIP: 'Heading 1',\n syntax: '!user_text',\n hint: 'heading_1',\n HANDLER: wikibar_editFormatByLine\n },\n heading2:{\n CAPTION:'<h2>Heading 2<h2>',\n TOOLTIP: 'Heading 2',\n syntax: '!!user_text',\n hint: 'heading_2',\n HANDLER: wikibar_editFormatByLine\n },\n heading3:{\n CAPTION:'<h3>Heading 3</h3>',\n TOOLTIP: 'Heading 3',\n syntax: '!!!user_text',\n hint: 'heading_3',\n HANDLER: wikibar_editFormatByLine\n },\n heading4:{\n CAPTION:'<h4>Heading 4</h4>',\n TOOLTIP: 'Heading 4',\n syntax: '!!!!user_text',\n hint: 'heading_4',\n HANDLER: wikibar_editFormatByLine\n },\n heading5:{\n CAPTION:'<h5>Heading 5</h5>',\n TOOLTIP: 'Heading 5',\n syntax: '!!!!!user_text',\n hint: 'heading_5',\n HANDLER: wikibar_editFormatByLine\n }\n },\n comment:{\n TYPE: 'MENU',\n commentByLine:{\n CAPTION:'comment by line',\n TOOLTIP: 'line comment',\n syntax: '/%user_text%/',\n hint: 'comment_text',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION:'comment by block',\n TOOLTIP: 'block comment',\n syntax: '/%\snuser_text\sn%/',\n hint: 'comment_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n monospaced:{\n TYPE: 'MENU',\n monosByLine:{\n CAPTION: 'monospaced by line',\n TOOLTIP: 'line monospaced',\n syntax: '{{{\snuser_text\sn}}}',\n hint: 'monospaced_text',\n HANDLER: wikibar_editFormatByLine\n },\n monosByBlock:{\n CAPTION: 'monospaced by block',\n TOOLTIP: 'block monospaced',\n syntax: '{{{\snuser_text\sn}}}',\n hint: 'monospaced_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n quote:{\n TYPE: 'MENU',\n quoteByLine:{\n CAPTION: 'quote by line',\n TOOLTIP: 'line quote',\n syntax: '>user_text',\n hint: 'quote_text',\n HANDLER: wikibar_editFormatByLine\n },\n quoteByBlcok:{\n CAPTION: 'quote by block',\n TOOLTIP: 'block quote',\n syntax: '<<<\snuser_text\sn<<<',\n hint: 'quote_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n plugin:{\n TYPE: 'MENU',\n code:{\n CAPTION: 'code area',\n TOOLTIP: 'block monospaced for plugin',\n syntax: '\sn\s/\s/{{{\snuser_text\sn\s/\s/}}}\sn',\n hint: 'monospaced_plugin_code',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n },\n commentByLine:{\n CAPTION: 'comment by line',\n TOOLTIP: 'line comment',\n syntax: '\s/\s/user_text',\n hint: 'plugin_comment',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION: 'comment by block',\n TOOLTIP: 'block comment',\n syntax: '\s/\s***\snuser_text\sn***\s/',\n hint: 'plugin_comment',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n css:{\n TYPE: 'MENU',\n code:{\n CAPTION: 'code area',\n TOOLTIP: 'block monospaced for css',\n syntax: '\sn\snuser_text\sn\sn',\n hint: 'monospaced_css_code',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n },\n commentByLine:{\n CAPTION: 'comment by line',\n TOOLTIP: 'line comment',\n syntax: '',\n hint: 'css_comment',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION: 'comment by block',\n TOOLTIP: 'block comment',\n syntax: '',\n hint: 'css_comment',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n }\n },\n color:{\n TYPE: 'MENU',\n TOOLTIP: 'color tools',\n highlight:{\n CAPTION:'highlight text',\n TOOLTIP: 'highlight text',\n syntax: '@@user_text@@',\n hint: 'highlight_text',\n HANDLER: wikibar_editFormatByWord\n },\n color:{\n CAPTION:'text color',\n TOOLTIP: 'text color',\n hint: 'your_text',\n syntax: '@@color(%1):user_text@@',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByWord\n },\n bgcolor:{\n CAPTION:'background color',\n TOOLTIP: 'background color',\n hint: 'your_text',\n syntax: '@@bgcolor(%1):user_text@@',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByWord\n },\n colorcode:{\n CAPTION:'color code',\n TOOLTIP: 'insert color code',\n syntax: '%1',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByCursor\n },\n 'color palette':{\n TYPE:'MENU',\n DYNAITEM: wikibar_genPaletteSelector,\n SEPERATOR:{},\n morePalette:{\n CAPTION:'more palettes',\n TOOLTIP:'get more palettes',\n HANDLER: wikibar_getMorePalette\n }\n }\n },\n link:{\n TYPE: 'MENU',\n TOOLTIP: 'insert link',\n wiki:{\n CAPTION:'wiki link',\n TOOLTIP: 'wiki link',\n syntax: '[[user_text]]',\n hint: 'wiki_word',\n HANDLER: wikibar_editFormatByWord\n },\n pretty:{\n CAPTION: 'pretty link',\n TOOLTIP: 'pretty link',\n syntax: '[[user_text|%1]]',\n hint: 'pretty_word',\n param: 'PrettyLink Target',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n },\n url:{\n TOOLTIP: 'url link',\n syntax: '[[user_text|%1]]',\n hint: 'your_text',\n param: 'http:\s/\s/...',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n },\n image:{\n TOOLTIP: 'image link',\n syntax: '[img[user_text|%1]]',\n hint: 'alt_text',\n param: 'image/icon.jpg',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n }\n },\n macro:{},\n more:{\n TYPE: 'MENU',\n TOOLTIP: 'more tools',\n table:{\n TYPE: 'MENU',\n TOOLTIP: 'table',\n table:{\n CAPTION:'create table',\n TOOLTIP: 'create a new table',\n syntax: '\sn%1\sn',\n HANDLER: wikibar_getTableRowCol,\n doMore: wikibar_editFormatByWord\n },\n header:{\n TOOLTIP: 'table header text',\n syntax: '|user_text|c',\n hint: 'table_header',\n HANDLER: wikibar_editFormatByWord\n },\n cell:{\n TOOLTIP: 'create a tabel cell',\n syntax: '|user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByWord\n },\n columnHeader:{\n CAPTION:'column header',\n TOOLTIP: 'create a column header cell',\n syntax: '|!user_text|',\n hint: 'column_header',\n HANDLER: wikibar_editFormatByWord\n },\n cell:{\n TYPE: 'MENU',\n CAPTION: 'cell options',\n bgcolor:{\n CAPTION: 'background color',\n TOOLTIP: 'cell bgcolor',\n syntax: '|bgcolor(%1):user_text|',\n hint: 'your_text',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByTableCell\n },\n alignLeft:{\n CAPTION: 'align left',\n TOOLTIP: 'left align cell text',\n syntax: '|user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n },\n alignCenter:{\n CAPTION: 'align center',\n TOOLTIP: 'center align cell text',\n syntax: '| user_text |',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n },\n alignRight:{\n CAPTION: 'align right',\n TOOLTIP: 'right align cell text',\n syntax: '| user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n }\n }\n },\n html:{\n TYPE: 'MENU',\n html:{\n CAPTION: '&lt;html&gt;',\n TOOLTIP: 'html tag',\n syntax: '<html>\snuser_text\sn</html>',\n hint: 'html_content',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n }\n },\n addon:{\n TYPE: 'MENU',\n TOOLTIP:'3rd party tools',\n 'about addons':{\n TOOLTIP: 'list loaded addons',\n HANDLER: wikibar_doListAddons\n },\n SEPERATOR:{}\n }\n};\naddEvent(document, 'click', wikibarColorTool.onDocumentClick);\naddEvent(document, 'click', wikibarPopup.onDocumentClick);\nwikibar_install();\n//}}}\n\n\n
/***\n!Metadata:\n|''Name:''|RecentTiddlersPlugin|\n|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|\n|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|\n|''Version:''|1.1.1|\n|''Date:''|Aug 28, 2007|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.1.0|\n|''Description:''|Display DefaultTiddlers and recently modified tiddlers at startup.|\n|''Browser:''|Firefox 1.5+; InternetExplorer 6.0; Opera|\n!Usage:\n>Just to set the options by changing the slice values in RecentTiddlersOptions, if needed.\n!Revision History:\n|''Version''|''Date''|''Note''|\n|1.1.1|Aug 28, 2007|No more hijeck core restart()|\n|1.1.0|Aug 25, 2007|Easy to change the options by using tiddler slices, defined in RecentTiddlersOptions|\n|1.0.0|Apr 18, 2007|Initial release, codes reworked from Tim Morgan's RecentPlugin |\n!Code section:\n***/\n//{{{\nversion.extensions.recentTiddlers = {major: 1, minor: 1, revision: 1, date: new Date("Aug 28, 2007")};\n\nconfig.recentTiddlers = {\n maxNums: 5,\n includeTags: ['*'],\n excludeTags: ['systemConfig','systemTiddlers', 'excludeLists']\n};\n\nconfig.shadowTiddlers.RecentTiddlersOptions = 'maxNums: 5\snincludeTags: *\snexcludeTags: systemConfig,systemTiddlers,excludeLists';\n\nconfig.recentTiddlers.getRecents = function (){\n var c = store.getTiddlerSlices('RecentTiddlersOptions',['maxNums','includeTags','excludeTags']);\n var maxNums = (c.maxNums) ? parseInt(c.maxNums) : config.recentTiddlers.maxNums;\n var includeTags = (c.includeTags) ? c.includeTags.split(',') : config.recentTiddlers.includeTags;\n var excludeTags = (c.excludeTags) ? c.excludeTags.split(',') : config.recentTiddlers.excludeTags;\n var CPlingo = (config.CommentPlugin !== undefined)?config.CommentPlugin.CPlingo:null;\n var rs = store.getTiddlerText("DefaultTiddlers").readBracketedList();\n var tiddlers = store.getTiddlers("modified");\n var n = tiddlers.length -1 - maxNums;\n\n for (var t=tiddlers.length-1; t>n && t>0; t--){\n if(CPlingo !== null && tiddlers[t].isTagged(CPlingo.comments)) {\n var tt = tiddlers[t].title.split(CPlingo.CommentInTitle)[0];\n if(store.tiddlerExists(tt))\n rs.pushUnique(tt);\n }\n else {\n if (tiddlers[t].tags.containsAny(excludeTags))\n n--;\n else {\n if (includeTags.length == 0 || includeTags[0] == '*' || tiddlers[t].tags.containsAny(includeTags))\n rs.pushUnique(tiddlers[t].title);\n }\n }\n }\n return rs;\n};\n\nif(!window.location.hash)\n var recentInterval = setInterval(function(){if(story) {clearInterval(recentInterval); story.closeAllTiddlers();story.displayTiddlers(null,config.recentTiddlers.getRecents());};},100);\n\n//}}}
Science Center FAQ
your most frequently asked questions!
[[Welcome]]
Welcome to the ''Frequently Asked Questions'' list for the Clark Science Center. \n''Note '' that, for administrative questions and building-related issues, take a look at the [[Director's Office FAQs|http://www.science.smith.edu/departments/director/]]\n\nClick on a general topic in the menu on the left to see the relevant questions\nor enter a word or two in the Search box on the right.\n\nIf your question isn't answered here, send us an email - cats at email.smith.edu - or give us a call\n* Eric Jensen - x3868\n* Kelly Huard - x4409\n* Eric Brewer - x3847\n* Tony Caldanaro - x3719\n\nWant to know more about [[why we exist|http://www.science.smith.edu/resources/cts/cats.html]], outside of central ITS?\n\nBy the way, to stay up to date on the latest ITS news, you might want to consider subscribing to the [[MacUser|http://sophia.smith.edu/blog/macuser]] or [[WinBlog|http://sophia.smith.edu/blog/winblog]].
[[Science Center Home|http://science.smith.edu]]\n[[Who, What, Where]]\n[[New Faculty & Staff]]\n[[General Questions]]\n[[E-Mail]]\n[[Passwords]]\n[[Printing]]\n[[Backup]]\n[[Web Stuff]]\n[[Teaching/Classrooms]]\n[[Problem Solving]]\n[[Security, Viruses,...]]\n[[Home Computing]]\n
''- Who are we, Where are we, etc. for visitors - ''\n[[What & Where is the Clark Science Center?]] (quicklink to [[campus map|http://www.smith.edu/map/]])\n[[What & Where is Smith College?]] (quicklink to [[directions|http://www.smith.edu/about_visit_directions.php]])\n[[How do I contact the Clark Science Center?]]\n[[Who do I contact for info at Smith?]] (quicklink to [[admissions|http://www.smith.edu/admission/]])
The Clark Science Center is the center for the sciences, engineering, and mathematics at Smith College, Northampton Massachusetts. The academic departments and programs listed on the [[home page|http://www.science.smith.edu]] are housed in the Science Center. Physically, we comprise Burton Hall, ~Sabin-Reed Hall, ~McConnell Hall, Bass Hall, the Young Science Library, and (soon) Ford Hall.\nAll the buildings except Ford Hall are located in a cluster, between College Lane and the Neilson Library. Ford Hall, currently under construction and due to open in Fall of 2009, is across Green Street, next to the Mendenhall Center for the Performing Arts.\nHere's an interactive [[campus map|http://www.smith.edu/map/]] for a bird's eye view.
Smith College is the largest all women's liberal arts institution in the United States. We also now have the first engineering program of it's kind here at Smith. We're located in Northampton, Massachusetts in the heart of the Pioneer Valley. \nYou can find lots more info on the college on the main [[Smith website|http://www.smith.edu]] and also some [[directions|http://www.smith.edu/about_visit_directions.php]]to campus.
The administrative offices of the Science Center are in Burton Hall 115, phone: 413-585-3804.\nYou can find many other contact phone numbers on our [[Administrative Contacts|http://www.science.smith.edu/contacts.html]] page.
Since you're here, you probably weren't just looking for the [[Admissions|http://www.smith.edu/admission/]] office. So, maybe what you want is the page with all the various [[Offices|http://www.smith.edu/offices.php]] or the general college [[directory|http://www.smith.edu/global_campusdirectory.php]].
'' - Answers to questions specifically of interest to new faculty and staff -''\n[[Where do I look for electronic help, besides this web page?]]\n[[Who provides support for computing?]]\n[[How do I get a computer?]]\n[[How do I get an account?]]\n[[What will I get with an account]]\n[[What is the Novell account used for?]]\n[[How do I log into my Novell account from Windows?]]\n[[How do I log into my Novell account from a Macintosh?]]\n[[How do I log into my Novell account from off campus?]]\n[[How do I change my Novell password?]]\n[[How do I change my Groupwise password?]]\n[[What software is available to me, and how do I get it?]]\n[[How 'bout a phone?]]\n[[How do I give/receive files to/from other people on campus?]]\n[[How do I share files with others in my department?]]\n[[How do I share files with others in my research group or lab?]]\n[[But I want to use Linux!]]\n[[How can I read my email while away from campus?]]\n[[What if I don't like Groupwise?]]\n[[Where do I go for more info on Groupwise or other campus-wide software and systems?]]\n
ITS has a document server called TARA that has lots of stuff, from documentation on how the network works to available training. Take a look at http://www.smith.edu/its/tara It's definitely worth a look!\n\nThe Library's help page at http://www.smith.edu/libraries/help/ has lots of help and research guides, as well as direct IM/Chat with reference librarians during extended hours!
Science Center CATS (Computing and Tech Services) Provide frontline support for computers in the Science Center, including classroom computers, lab computers, and departmental clusters. While we don't provide hardware and software for faculty/staff office computers, you might want to call us with questions on most computing topics anyway.To reach us by e-mail, it is best to send to cats at email.smith.edu which will deliver to all of us. Whomever is best able to respond will do so as quickly as possible We are:\n\n* Eric Brewer - x3847 - Head computer geek\n* Eric Jensen - x3868 - Unix, Linux, Windows Server, Web servers, Security issues\n* Kelly Huard- x4409 - classroom support, Windows and applications support\n* Tony Caldanaro - x3719 - Macintosh support\n\nITS Help Desk - Call 4ITS with questions on generally supported software such as Microsoft Office, web browsers, etc. and hardware problems. Their phone number is, naturally, 4its (x4487)\n\nTom Laughner is the Director of Educational Technology in ITS. He's at x3079.\n\nAnd there are a whole host of other [[ITS folks|http://www.smith.edu/its/about_its/staff_directory.html]] ready to assist.
Faculty and most staff receive office computers through ITS - call 4ITS for assistance if no one has arranged this for you yet. Departmental employees are supposed to get computers from their department. If you need an older, recycled PC or Mac for your lab, contact us - we may be able to help, depending upon the time of year and stock available. Send a note to cats at email.smith.edu
Apply for an account through the User Support Center (second floor of Stoddard Hall) and they'll let us know when the paperwork is done. We'll actually create the accounts if your account is within "Division III" (the sciences, engineering, math & statistics, exercise & sport studies).\n\nBy default, you'll get Novell and Groupwise accounts but there's lots of other systems here, many of which are keyed off your Novell/Groupwise username and password.\n\nYou can save some time by printing and completing the ITS [[Account Request Form|http://www.smith.edu/tara/account_forms.html]].
* A username such as trogers. Usernames are usually 1st initial plus first seven letters of your last name.\n* A Novell password, which you will be prompted to change immediately upon loggin in. You will also be forced to change your password every few months, for the sake of security.\n* A Groupwise email account. Groupwise is the email system used at Smith College. Your email address will be your username (eg trogers) followed by @email.smith.edu AND/OR @smith.edu The two addresses are equivalent - some prefer one and some prefer to use the other. Your Groupwise password is your Novell password.\n* There are other alternatives than Groupwise for reading your mail, just read further down in this FAQ.\n* There is also a separate Linux server for Math, Chemistry, Astronomy, and Computer Science, named SciNix. Give us a call if you need an account it.\n
Your Novell account is necessary to access the Novell servers - where we store most shared programs and documents. A Novell login is also necessary to route any documents to most of the shared printers that are scattered around. You have your own directory (folder) on the Science server that only you can access (except system administrators, of course). Your home directory is backed up every night, so it's an ideal place to store critical documents and papers you are working on. Windows users will find this folder mapped to a virtual Drive H: (for Home) for convenience. Mac users will find all their home folders on the Datavol volume of Science. See below for login instructions on both computers...
Actually, there are several ways. After you've logged in once, you can create an alias on your desktop that points to your home folder on the network. That will make it much faster in the future.\n\nIn the top menu, click ''Go'', then ''Connect to Server''... In the dialog box, enter //science.smith.edu// and click ''Connect'', then enter your username and password.
Assuming your computer is connected to the network and has had the Novell "client" installed, it should request a login as it boots up. The first time you log in, you may need to set your "context" in the dialog box. Your context tells the network where to find your username in the "tree" of users here at Smith. Virtually all faculty and staff in the Science Center will be in the context "''div3.fac.ac.sc''" (In case you are curious, that stands for Division III (the sciences, etc.) in the Faculty branch of the Academic branch of the Smith College tree.)\n\nFollowing your Novell authentication, you will see ANOTHER login screen with the username "smith" (or "user" or some other generic name) filled in. Unless you change the password to this LOCAL account, there is NO password required here - just hit Enter to continue logging in.\n\nOnce you're logged in, some network drives will be created for you as shortcuts to common destinations. For instance, H: will be mapped to your personal Home directory, where you can store your "stuff." You can also get to the same location using so-called UNC paths: \s\sscience\sdatavol\shome\strogers for instance.\n\n//The following is optional info at this point//... The implication is that students and faculty in other departments outside the sciences will have a different context. So, if you are logging into a different computer, you can tell it your username and context in one fell swoop by starting with a period, then your username, another period, and your context (eg .trogers.div3.fac.ac.sc ) Yeah, we know, it's way too complicated... Once you've logged in, the icon Science Apps on your desktop can lead you to useful locations on the server. Your home folder and other tools will also be available through My Computer.
The preferred method is to use Net Storage. See http://www.science.smith.edu/resources/cts/novell/ for more info on Net Storage and how it works. \n\nMacintosh users can log in using the same [[process |How do I log into my Novell account from a Macintosh?]]as they use ON campus, surprisingly enough. \n\nYou can also use secure FTP. Secure FTP is available as part of the SSH package, already installed on most Windows machines on campus, by using ~CoreFTP on Windows, or with Fugu on the Macintosh.
The simplest and least confusing method for changing your Novell password is to [[change your Groupwise email password|How do I change my Groupwise password?]]! They are the same thing.
Using the Groupwise Web client (connect to Groupwise Web at http://gwweb.smith.edu ), click on the ''Options ''icon at the top of the window.\n\nUsing the other Groupwise clients:\n* Windows - go to the Tools menu and choose Options, then look on the Security tab.\n* Macintosh or Linux - go to the Groupwise menu and choose Preferences, then click on Security.
* Standard Smith software packages come pre-installed on your computer. These include Microsoft Office and other tools provided by ITS.\n* The Science Center has some software available. Check on this webpage, in the menu under Resources, Software - http://www.science.smith.edu/resources/downloads/ \n* The Committee on Educational Technology makes some software available, especially in support of teaching. Take a look at http://www.smith.edu/cet/cet_tech_sw.html for more info. (Most of it is probably already installed on your computer, under the label &quot;key software&quot; or something similar)\n* The computer classrooms in the Science Center have quite a few programs available for student use. If you are teaching a class that uses that software, you should have it installed on your computer, too. Contact us (cats at email.smith.edu) and we'll see what we can do.\n* Some departments have software funds available - speak to your department chair.\n* The Provost's office has a limited amount of money available for faculty research software requests.\n
Sorry, we don't do phones. Contact 4ITS (x4487) and they'll put you in touch with the right folks.
You can use "dropboxes" which are one-way file portals. You can copy a file to someone's dropbox, but you can't see into their dropbox. They have full read/write privileges to their own dropbox. You'll find dropboxes for Science Center folks, as well as links to dropboxes on the rest of campus, in:\n* Science Apps on your desktop if you are a Windows user (or visit \s\sscience\sdatavol\sdropbox in Windows explorer)\n* Mac on Science:Datavol if you are a Macintosh user\n''NOTE: Dropboxes are NOT backed up!''
Each department has a folder/directory that is accessible by all members of that department. They are located in:\n* Windows Users - Shared Folders in Science Apps on your desktop (or visit \s\sscience\sdatavol\sshared in Windows Explorer.)\n* Mac Users - the Shared folder in Science:Datavol.\n
We can create a lab account for you. That will create a new home directory with a username like rogerlab that your students can log into as necessary. You and any post-docs or lab assistants who have regular Science Center accounts will have full access to that directory, of course. Just send us a request (cats at email.smith.edu).
That's fine!. You might want to consider dual-booting to Windows so you can access some of the Windows-only stuff on campus, but that's up to you. However, we do NOT want you to bring up a new Linux box on our network without contacting our Unix/Linux administrator (Eric Jensen, x3868, ejensen at email.smith.edu) so he can review your computer's security with you!
You can use the Groupwise ~Web-Access client from any web browser. It's available at http://gwwebs.smith.edu. If you have a fast connection from home, you might want to consider installing the full Groupwise client on your home computer. Contact 4ITS or us for more info.
Well, you'll largely be on your own. While you can use any POP or IMAP compatible mailer with our Groupwise servers, we recommend the Mac Mail client or Thunderbird (http://www.mozilla.com/thunderbird/) as being the most likely to be compatible. They both support POP and IMAP, and all those other acronyms that make your head swim.\n\nIMAP access your mail on the server and leaves it there. POP downloads the mail from the server to your computer and deletes it from the server. \n\nWe strongly recommend setting them up in IMAP mode unless you have a good reason not to.\n\nIf setting up your own mail client, you need to set the outgoing mail to go to the server ''smtp.smith.edu'' and you want to pick up your incoming mail from the server ''popimap.smith.edu''. If you don't know what that means, you probably shouldn't be trying to set up your own mail client... Also, see http://www.smith.edu/its/tara/groupwise.html#selecting for more info.
ITS has a document server called TARA that has lots of stuff, including a complete introductory book on Groupwise online. Take a look at http://www.smith.edu/its/tara/
''Mostly technical questions, but kind of a catch-all category''\n\n[[How do I change my Novell password?]]\n[[Where should I store my files?]]\n[[I want to buy a PC for my lab - help please?]]\n[[I want to buy a Gateway (or xxx) PC. Can I?]]\n[[I want to buy a PC for home. Can you help?]]\n[[How do I log into my Novell account from off campus?]]\n[[I think I have a virus/I'm worried about viruses -- what do I do?]]\n[[How do I connect to the library catalog system?]]\n[[Where do I find on-line forms?]]\n[[How do I share files with others in my research group or lab?]]\n[[I need a piece of software for my research -- how do I get it?]]\n[[How do I get training for xxx?]]\n[[I need to use xxx software occasionally -- is it available anywhere?]]\n[[What's a Sandbox and what's in it?]]\n[[Are there other color printers available? Can my students use it/them?]]\n
Give us a call and we can discuss what you need. We're glad to offer assistance (though we can't help with funding). In fact, if you can make do with an older "recycled" classroom computer, we might be able to give you one for free. Send email to cats at email.smith.edu or call us (Kelly G., x4409; Eric J., x3868, Eric B., x3847, Tony C., x3719).
Anywhere you like, but if you want US to take care of backing them up, they need to be stored on the network, usually in your home directory. Division III faculty have, by default, 3000 megabytes (3 gigabytes) of disk space on the network to work with. If you need more, just let us know.\n\nNotice that the 3000 megabytes is calculated for files owned (created) by you. So, if you put a 30 megabyte file into someone's dropbox, it is still YOUR file until they DO something to it. So, do your neighbors a favor and don't leave files in your dropbox!
If it's really your money, of course. If it's through the college, maybe. Technically, all computer purchases have to be approved by ITS. They (and we) will STRONGLY discourage purchasing computers that are not either Apple or Dell. ITS has a staff that knows these machines and is factory-authorized to perform repairs on them. They have the parts on hand or can get them quickly. In other words, don't buy anything else unless you've got a VERY good reason. Call us and we'll discuss it.
Sure, we love to give advice on spending someone elses money! Call or drop by and we'll talk. The [[Computer Store|http://www.smith.edu/its/computerstore/]] can also be an excellent source of help. The store sells Dell PCs and Macintoshes and often has special package deals.
Well, why didn't you have the automatic virus scanner installed? You can find installers for McAfee Anti-Virus (and other College-provided software) at http://www.smith.edu/smithsoftware\n\nAlso, take a look at the FAQ menu for Security, Viruses,... for more hints.
Point your web browser to http://www.smith.edu/libraries/ To get directly to the Science Library, go to http://www.smith.edu/libraries/libs/young/ And to go straight to the ~Five-College library catalog, go to http://fcaw.library.umass.edu:8991/F/
If you mean Science Center forms, you'll find most of them at http://www.science.smith.edu/resources/documents/
Research software is tricky - there's more money available for teaching software. You DID say you also use it for teaching, didn't you? OK, here are some possibilities...\n* The Science Center has some software available. Windows users should look in Science Apps on their desktop. Macintosh users should look in Software in the Mac folder on Science:Datavol. And follow the menus on the home page to Resources, Software.\n* The Committee on Educational Technology makes some software available, especially in support of teaching. Take a look at CET for more info.\n* The computer classrooms in the Science Center have quite a few programs available for student use. If you are teaching a class that uses that software, you should have it installed on your computer, too. Contact us (cats at email.smith.edu) and we'll see what we can do.\n* Some departments have software funds available - speak to your department chair.\n* The Provost's office has a limited amount of money available for faculty research software requests.\n
First, take a look and see if ITS is offering training. Look on their document server, TARA, and see what's coming up. TARA is at http://www.smith.edu/its/tara/
That's hard to say without knowing what you need. Maybe... Give us a call and we'll try to locate it. Many programs are available for faculty/staff/student use in the [[Sandbox|What's a Sandbox and what's in it?]].
Bass 105. Faculty and staff can get keys from the stockroom and it is usually open during working hours for faculty, staff, and students. The Sandbox is for preparing teaching materials, research materials, presentations, experimenting, etc. All that stuff that you need only occasionally so it's not worth spending several thousand dollars just for you.\n\nThere are currently two Macintosh and a bunch of Windows computers available, along with several flatbed scanners. There's a 35 mm slide scanner available on each platform, as well CD and DVD read and write. There's a black-and-white laser printer with duplexing and there's also a color laser printer with duplexing. Adobe PhotoShop and Illustrator are there, along with some statistical programs and other miscellaneous things. If what you need isn't there, maybe we can add it - contact us.
There is an excellent HP color laser printer in the Xerox room in Sabin-Reed Hall. It's accessible on the network for faculty/staff/student printing needs, but you'll need to have the Pharos print client installed to use it. Please try to use it for color printing only - the materials are relatively expensive. It has four paper trays. Tray 2 really is standard paper, while tray 3 is for transparencies. tray 4 has 11" X 17" paper. What happened to tray 1? It's the front-load chute and it's taped closed so you can't use it! To get print drivers for this printer, click Print Drivers on the home page.\n\nThere's also color lasers available in the Seelye computer resource center.\nAnd Central Services now has high quality color printing, which is accessible through the network or by sending them the file to print. Contact Central Services for more info.
'' - The Stuff that's Not Spam -''\n[[What Groupwise server is my mail actually stored on?]]\n[[How do I connect the Groupwise client from off-campus]]\n[[Where do I go for more info on Groupwise or other campus-wide software and systems?]]\n[[How can I read my email while away from campus?]]\n[[What if I don't like Groupwise?]]\n[[How do I change my Groupwise password?]]\n[[How do I manage the size of my Groupwise Mailbox?]]\n[[My email client wants to use an LDAP server for its Address Book...]]\n[[How do I take my mail with me if/when I leave the college? ]]\n
Since Groupwise is an ITS thing, we'll let them answer. Please visit http://www.smith.edu/its/tara/groupwise/managing_email.html. You also have the option of archiving your mail, which moves it off the Groupwise mail server and onto your hard disk or network space, BUT leaves it in a Groupwise format (meaning it is encrypted and can only be read by a GW client). For more info on archiving, see http://www.smith.edu/its/tara/groupwise/archiving.html.
You can point an LDAP client, such as Mac OS X's or Linux KDE's Address Book, to ldap.smith.edu for LDAP queries. Sorry if that's cryptic, but we don't officially support LDAP in email clients.
Another version of this question is, "How do I get my mail OUT of Groupwise and store it in a non-encrypted directory?"\n\nOkay, prepare for a little work. First, you'll need to get another mail client, like ''Thunderbird ''(available from http://www.mozilla.com/thunderbird/) or Eudora (unsupported). Now we have several possible ways to go:\n# Configure Thunderbird in IMAP mode. IMAP accesses the mail on the server and leaves it there; the Groupwise server is compatible with IMAP. You can set the properties for any mail folder to be available for offline use. That means it re-creates your folder structure on your computer and downloads the mail to your PC so it can be read while you are out of contact with the IMAP server (ideal for laptops or people with dialup connections). The mail is not encrypted and can be copied to a CD or other media.\n# A similar procedure, but configure the mail client in POP mode. POP downloads the mail from the server to your PC and is usually set to delete the mail from the server after downloading. You could set the client to leave the mail on the server, then go back and delete all the older mail from Groupwise as a separate step.\n# Configure Thunderbird in IMAP mode to see your Groupwise folders and ALSO configure it to support the mail server at your new location, either IMAP or POP. Then drag some or all of your mail from your Smith folders into your NEW folder structure.\n# And lots of variations on these themes...\n\n''Note'': Most mail clients will store mail locally in [for Windows users: c:\sDocuments and Settings\s(username)\sApplication Data\s(mail client name)] or [for Mac users: in a folder named for the mail client in your Library folder] and you can copy it from there to wherever you like.
''How's and Why's of Novell, Groupwise, Banner, and other Passwords''\n\n[[How do I change my Novell password?]]\n[[How do I change my Groupwise password?]]\n[[How do I change my Moodle password?]]\n[[How do I change my Scinix password?]]\n[[How do I change my password to print to Pharos, the campus pay-for-print system?]]\n[[How do I change my password to access the campus wireless Internet?]]\n[[How do I change my BannerWeb password?]]\n[[How do I change my Banner password?]]\n[[Why should passwords be a minimum of 8 characters long?]]\n[[What makes a good password?]]\n[[Why do passwords expire so often?]]
Moodle actually uses the SAME password as Novell and Groupwise, so follow [[these instructions.|How do I change my Groupwise password?]]
Pharos actually uses the SAME password as Novell and Groupwise, so follow [[these instructions.|How do I change my Groupwise password?]]
The campus wireless networking system actually uses the SAME password as Novell and Groupwise, so follow [[these instructions.|How do I change my Groupwise password?]]
We don't "do" Banner - that's a question for ITS. But take a look at this page on their TARA website:\nhttp://www.smith.edu/tara/passwords/banner_admin.html
* Log into BannerWeb using your "99 Number"\n* Click on Personal Information\n* Click on Change PIN\n* NOTE: It must be EXACTLY 6 characters long and they MUST be numbers!\n
They actually would, ideally, be much much longer than 8 characters, but some platforms will not accept long passwords. If you can use more, do!\n\nLess than 8 characters is considered insecure because it's relatively easy for a "cracking" program to generate. See [[What makes a good password?]] and [[Why do passwords expire so often?]] for more info.
The perfect password contains both upper and lower case characters, including one or more letters and numbers, and ideally another "oddball" character (such as the shifted characters on your number keys.)\n\nOne way to create a good but memorable password is to use the first letters of a unique sentence, eg My father's Ford never went over 65. That might translate to //''MfFnwo65''// (okay, so we left out an oddball character like # - so sue us!)
It's a security thing and it is required by the College's auditors to keep things safe. \n\nProblem is, there are hacking/cracking attempts going on all the time. The longer an account goes unused or with the same password, the more likely it will be hacked. And, if a password IS compromised somewhere, constantly changing passwords MIGHT just help a little tiny bit. \n\nSorry 'bout that.
''Black and white or color shared laser printers, transparencies, etc.''\n\n[[How do I print two-sided (duplex) documents?]]\n[[How do I print to the shared laser printer down the hall/upstairs/wherever?]]\n[[I'd like to print to the shared color laser printer from my office. How do I do it?]]\n[[How does the Pharos Uniprint Pay for Print system work?]]\n[[What printers are metered by the Pharos Uniprint system?]]\n[[Which printers are best for what media (transparencies, glossy/photo quality paper)?]]\n[[What printers are available in the Sandbox?]]\n[[How do I get a poster printed?]]\n
''What do YOU backup, what should I backup?''\n\n[[Are my network files backed up?]]\n[[How should I back up my own files?]]\n[[Can you help back up all the research data?]]
You can install iPrint drivers (for shared faculty/research printers) by following the instructions at http://www.science.smith.edu/resources/cts/novell/printers/ (i.e., click the button labeled Print Drivers at the top of the Science Center home page.)
You'll need the Pharos Uniprint client installed on your computer, which handles pay-for-print on campus. You can install the Pharos drivers by following the instructions at http://www.science.smith.edu/resources/cts/novell/printers/ (i.e. click the button labeled Print Drivers at the top of the Science Center home page.)
The system charges student OneCard accounts for each page printed ($0.05/page for black and white and $0.75/page for color). When a student prints a job, a window pops up asking for the Novell username and password, for authentication purposes.\n\nIn the computer resource centers and the library, students then literally swipe their OneCards to release their print jobs at the printer. In classrooms and lab spaces, they instead see another window describing the total cost of their print job and the amount they have remaining in their OneCard account.\n\nFaculty/staff who print in the same computer spaces ALSO have to authenticate with their Novell username/password, but it won't debit your OneCard account if you have one (some faculty use OneCards in the vending machines). It WILL still keep accurate totals of your printing.\n\nBecause they are used by faculty, staff, AND students, the shared printers in the Xerox room and Bass 105 (the HP color laser and HP black and white) and almost all our other color laser printers are on this system. Any computers that need to print to those printers will need the Pharos client installed.\n\nNote: it is our understanding at this time that students "should" have to pay for printing at ALL times, whether it's during class/lab time or not. That makes it consistent among foreign language classes who meet in CFLAC computer labs, Computer Science classes in computer classrooms, physics labs, etc. It is viewed almost as a way of charging a lab fee that is specific to printing.\n\nBackground: Printing has increased dramatically as teaching has shifted from the use of expensive textbooks to Moodle, CD-ROM, and other electronic media. And, as always, there are a few people who take advantage of the system to waste vast quantities of paper and toner. The idea is to shift the legitimate printing expense back to students, replacing the cost of textbooks, and to make each student responsible for monitoring her own potential wastefulness.
These printers are currently under UniPrint:\n* Bass -- 102, B-2 Stat Lab, 103 Spatial Analysis Lab, 105 [[Sandbox |What's a Sandbox and what's in it?]](mono & color)\n* Burton -- B01, B17, 2nd Floor Hall - Color, 209, 301, 302, 303 Color, Forum\n* Engineering -- 203, 205\n* ~McConnell -- 104, 209, 209 Color, Physics Lab, 317\n* ~Sabin-Reed -- 102, 114, 130, 222, Xerox Rm Color, 2nd 3rd & 4th Hall Color, 426\n\n''Note:'' All of these printers have duplexing capability.
Transparencies can be used in any black and white laser printer, just be SURE you have transparencies that were designed for laser printer or copier use. \n\nColor transparencies should be printed on the shared color laser in the xerox room. \n\nTransparencies are always loaded in their own, dedicated, paper trays in the Xerox room shared color laser AND in the Bass 105 "Sandbox" monochrome printer, so select Transparencies in your print configuration and they will come out correctly.\n\nThe Xerox room shared color laser printer can also take high-quality paper in the manual feed tray - just be sure to select glossy/photo quality paper in your print configuration.
An Okidata color laser printer is located in the xerox room in Sabin-Reed, capable of printing tabloid-size pages (11 X 17, equal to two pages side-by-side). In the [[Sandbox |What's a Sandbox and what's in it?]](Bass 105), there is a black and white laser printer that can do duplexing (two-sided printing) and another color laser that can do duplexing.
In a word, ''yes''.\n\nFiles in your home directory (the so-called "H: Drive") are backed up nightly. Same for files in the departments' Shared folders AND the "Lab" folders (eg rogerslab).\n\n''Files in the dropboxes are NOT backed up!'' Dropboxes are not just an extended storage system - they exist specifically for moving files between people.\n
Critical text files and other files that aren't TOO big are most easily backed up by storing them in your home directory on the Science server (your H: drive, for Windows users). Most users are initially given 3 Gigabytes of storage space on the server (but if you run out of space, just ask us for more!) \n\nThere isn't enough room to store massive data files, graphics, or video, but the Science server IS reliable. The Science server backup schedule runs every night, so data stored there should be safe. \n\nOf course, we recommend burning a CD or DVD to archive files and data that you need to maintain for long periods of time. The drive in your office computer, and likely the drives in any lab computers you have, are capable of "burning" DVD's, which have approximately 5 gigabytes of capacity.\n
Many of you store very large files on your workstations. Some of that may be frivolous stuff (music files, video clips, ...) but it could also be your life's research. Client Backup is a service that works for Windows, Macintosh, or Linux systems (desktops or laptops) and backs up, on a rotating basis, systems throughout the Science Center. It currently is configured to back up the _entire_ computer, not just the good stuff. Fortunately, it is smart enough to know that your copy of Microsoft Word is the same as Sally's copy of Microsoft Word and that 98% of your data today is the same as it was yesterday. In other words, it only copies the new and/or changed stuff. \n\nIf you'd like your office or lab computer backed up to our Client Backup system, send a note to the CATS (cats at email.smith.edu).\n\nWe won't absolutely GUARANTEE that we can get your lost data back with Client Backup - there are just too many variables to contend with (slow or unreliable network connections, hardware problems, etc.) but we've had good luck to date. Note that this is NOT an archiving system. We'll get your data back to where it was a week or two ago, but we can't get back data that was there a year ago, sorry.
/***\n|''Name:''|CommentPlugin|\n|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|\n|''Author:''|Tim Morgan (modified by Bram Chen|\n|''Version:''|1.0.0|\n|''Date:''|Aug 25, 2007|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.0.11|\n|''Description:''|Adds "comments" to any TiddlyWiki or adaptation.|\n|~|Used in conjunction with the RecentPlugin, one can have a decent forum environment.|\n\n''Translation sample 1:''\n{{{\nconfig.CommentPlugin.CPlingo = {\n dateFormat: "YYYY年0MM月0DD日 0hh:0mm:0ss",\n CommentInTitle: " 迴響 ",\n comments:"迴響",\n add:"回應 »",\n edit:"編輯",\n tooltips:"發表關於此文的相關意見",\n Title: "%0 迴響 %1",\n CommenteditTemplate: {yourName: "請簽名:", nickName: "(中英文暱稱)", comments: "留言內容:"}\n};\n}}}\n''Translation sample 2:''\n{{{\nconfig.CommentPlugin = {\n CPlingo:{\n dateFormat: "DD MMM YYYY 0hh:0mm:0ss",\n CommentInTitle: " Comment ",\n comments: "comments",\n add: "New Comment Here...",\n edit: "Edit",\n tooltips:" Create a new comment tiddler associated with this tiddler",\n Title: "%0 Comment %1",\n CommenteditTemplate: {yourName: "Your Name: ", nickName: "(nick name)", comments: "Comment: "}\n };\n}}}\n\n''Revision history:''\n* v1.0.0\n** Fixed bug, those tiddlers tagging with some other tiddlers and not tagged with only_on_tags would also be created a comment links with count 0.\n* v0.8.0 (Jan 17, 2007)\n** Some minor changes and bugs fixed (Bram)\n* v0.7.0 (Nov 09, 2006)\n** Minor changes, more easier to be translated (Bram)\n* v0.6.0 (Nov 09, 2006)\n** Runs compatibly with TW 2.1.0+ (Bram)\n* v0.5.0 (Jun 15, 2006)\n** Fixed bug for feature of CommentEditTemplate (bug reported by MilchFlasche, fixed by Bram)\n** Fixed bug in redefined TiddlyWiki.prototype.saveTiddler (Bram)\n* v0.4.0 (Jun 03, 2006) Added CommentEditTemplate (Bram)\n* v0.3.0 (Jun 01, 2006) Some minor changes for readOnly mode (Bram)\n* v0.2.0 (Apr 04, 2006) Fixed bug for only_on_tags (Bram)\n* v0.1.0 (Mar 13, 2006) Modified by Bram Chen.\n***/\n// //''Code section:''\n//{{{\nconfig.CommentPlugin = {\n CPlingo:{\n dateFormat: "DD MMM YYYY 0hh:0mm:0ss",\n CommentInTitle: " Comment ",\n comments: "comments",\n add: "New Comment Here...",\n edit: "Edit",\n tooltips: "Create a new comment tiddler associated with this tiddler",\n Title: "%0 Comment %1",\n CommenteditTemplate: {yourName: "Your Name: ", nickName: "(nick name)", comments: "Comment: "}\n },\n only_on_tags: ['Public'],\n not_on_tags: ['about'],\n // "true" or "false"...\n fold_comments: true,\n default_fold: true,\n max_comment_count: 500\n};\n\nvar CPlingo = config.CommentPlugin.CPlingo;\nconfig.CommentPlugin.only_on_tags.push(CPlingo.comments);\n\nfunction get_parent(tiddler){\n while(tiddler.isTagged(CPlingo.comments)){\n tiddler=store.fetchTiddler(tiddler.tags[0]);\n }\n return tiddler\n};\n\nfunction count_comments(title){\n var tagged=store.getTaggedTiddlers(title);\n var count=0;\n for(var i=0;i<tagged.length;i++){\n if(tagged[i].tags.contains(CPlingo.comments)){\n count+=count_comments(tagged[i].title)+1;\n }\n }\n return count\n};\nconfig.shadowTiddlers.ViewTemplate += "\sn<div class='comments' macro='comments'></div>";\n\nconfig.shadowTiddlers.CommentEditTemplate="<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler wikibar'></div><div class='title' macro='view title'></div><div class='editor' macro='edit tags' style='display:none;'></div><div class='GuestSign' >" + CPlingo.CommenteditTemplate.yourName + "<span macro='option txtUserName'></span>" + CPlingo.CommenteditTemplate.nickName + "<br />" + CPlingo.CommenteditTemplate.comments + "</div><div class='editor' macro='edit text'></div>";\nconfig.tiddlerTemplates[3]="CommentEditTemplate"; \nvar COMMENT_EDIT_TEMPLATE = 3;\n\nconfig.shadowTiddlers.CommentPluginStyle = '\sn/*{{{*/\sn.commentTags ul {list-style:none; padding-left:0px; margin: 0 0 3px 0;}\sn.commentTags li {display:inline; color:#999;}\sn.commentTags li a.button {color:#999;}\sn.comment {border-left:1px solid #ccc; margin-top:10px; margin-left:10px; padding:5px;}\sn.newCommentLink {padding-top:10px}\sn.tagging, .selected .tagging, .tiddler .tagging {display:none;}\sn.comment a.button {padding:0px; font-size:smaller; background-color:lightgray;}\sn.comments a.button {background-color:lightgray;}\sn/*}}}*/';\nconfig.shadowTiddlers.StyleSheet += '\sn[[CommentPluginStyle]]';\nconfig.macros.newCommentLink = {\n label: CPlingo.add,\n prompt: CPlingo.tooltips,\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler && store.tiddlerExists(tiddler.title) && !readOnly && (!window.zw || zw.loggedIn || zw.anonEdit)) {\n if(tiddler.tags.containsAny(config.CommentPlugin.not_on_tags) || !tiddler.tags.containsAny(config.CommentPlugin.only_on_tags))\n return;\n var onclick = function(e) {\n var e = (e)?e:window.event;\n var theTarget = resolveTarget(e);\n var tagxs = tiddler.title.split(CPlingo.CommentInTitle);\n var title = (tiddler.title.indexOf(CPlingo.CommentInTitle)!=-1)? tagxs[0] : tiddler.title;\n title = CPlingo.Title.format([title,(new Date()).formatString(CPlingo.dateFormat)]);\n var comment = store.createTiddler(title);\n comment.text = '';\n comment.tags = [tiddler.title, CPlingo.comments,'excludeLists'];\n readOnly = false;\n story.displayTiddler(theTarget, title, COMMENT_EDIT_TEMPLATE);\n readOnly = (window.location.protocol == "file:") ? false : config.options.chkHttpReadOnly;\n story.focusTiddler(title,"text");\n return false;\n }\n createTiddlyButton(place, this.label, this.prompt, onclick);\n }\n }\n};\nconfig.macros.comments = {\n dateFormat: CPlingo.dateFormat,\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler.title==CPlingo.comments) return;\n var comments = store.getTaggedTiddlers(tiddler.title, 'created');\n var count = count_comments(tiddler.title);\n if(count>0 && !tiddler.tags.contains(CPlingo.comments) && config.CommentPlugin.fold_comments) {\n var show = createTiddlyElement(place, 'p');\n show.innerHTML = '<a href="#" onclick="var e=document.getElementById(\s'comments'+tiddler.title+'\s');e.style.display=e.style.display==\s'block\s'?\s'none\s':\s'block\s';return false;">' + CPlingo.comments +'('+count+') »</a>';\n }\n var place = createTiddlyElement(place, 'div', 'comments'+tiddler.title, 'comments');\n if(count>0 && !tiddler.tags.contains(CPlingo.comments) && config.CommentPlugin.fold_comments && config.CommentPlugin.default_fold)\n place.style.display = 'none';\n else\n place.style.display = 'block';\n for(var i=0; i<comments.length; i++) {\n if(!comments[i].tags.contains(CPlingo.comments))continue;\n var container = createTiddlyElement(place, 'div', null, 'comment');\n var title = createTiddlyElement(container, 'strong');\n var link = createTiddlyLink(title, comments[i].modifier, true);\n createTiddlyElement(title, 'span', null, null, ', '+comments[i].created.formatString(this.dateFormat));\n/* ## remove editable option for security concern\n if(comments[i].modifier == config.options.txtUserName) {\n createTiddlyElement(title, 'span', null, null, ' (');\n var edit = createTiddlyLink(title, comments[i].title);\n edit.innerHTML = CPlingo.edit;\n createTiddlyElement(title, 'span', null, null, ')');\n }\n*/\n wikify('\sn'+comments[i].text+'\sn',container);\n config.macros.comments.handler(container,null,null,null,null,comments[i]);\n }\n readOnly = false;\n config.macros.newCommentLink.handler(place,null,null,null,null,tiddler);\n// wikify('<'+'<newCommentLink>>',place);\n readOnly = (window.location.protocol == "file:") ? false : config.options.chkHttpReadOnly;\n }\n};\nvar CPCloseTiddlers = [];\nTiddlyWiki.prototype.CommentPlugin_saveTiddler = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n tags=(!window.zw && typeof tags == "string") ? tags.readBracketedList() : tags;\n if(tags.contains(CPlingo.comments)){\n newBody=newBody.htmlDecode(); // comment this line, for working with HTMLAreaPackage\n newBody=newBody.substr(0,config.CommentPlugin.max_comment_count);\n newBody=newBody.htmlEncode(); // comment this line, for working with HTMLAreaPackage\n }\n var t = this.CommentPlugin_saveTiddler(title,newTitle,newBody,modifier,modified,tags);\n if(tags.contains(CPlingo.comments)) {\n var original = config.CommentPlugin.default_fold;\n config.CommentPlugin.default_fold = false;\n// story.refreshTiddler(get_parent(t).title, DEFAULT_VIEW_TEMPLATE, true);\n story.refreshTiddler(t.tags[0].split(CPlingo.CommentInTitle)[0], DEFAULT_VIEW_TEMPLATE, true);\n config.CommentPlugin.default_fold = original;\n CPCloseTiddlers.push(newTitle);\n setTimeout("story.closeTiddler(CPCloseTiddlers.pop(), true)", 500);\n }\n return t;\n};\nStory.prototype.chooseTemplateForTiddler = function(title,template)\n{\n if(!template)\n template = DEFAULT_VIEW_TEMPLATE;\n if(template == DEFAULT_VIEW_TEMPLATE\n || template == DEFAULT_EDIT_TEMPLATE\n || template == COMMENT_EDIT_TEMPLATE)\n template = config.tiddlerTemplates[template];\n return template;\n};\n//}}}
''What do I do to create a web page here?''\n\n[[What web servers can/do I use?]]\n[[How do I get a web account?]]\n[[Who is in charge of the website?]]\n[[How do I post pages to the site?]]\n[[How do I edit my web pages?]]\n[[I need to set up a CGI program. Can I do that?]]\n[[Can I use a database?]]
ITS runs web servers that host pages for most of the campus. You can use them if you wish - contact ITS for more information on those.\n\nBut most Division III people put their web pages on one of our web servers. \n\nIf you have an Linux account on Scinix (most common only for the Math and Computer Science people), then you already have a web account there, via your public-html directory. Math and C.S. departmental pages are also hosted on Scinix, in different directory structures.\n\nAnd Websci serves all the rest of our pages. That's the server that hosts http://www.science.smith.edu and all the other departmental pages. When you get an account on Websci, you'll get your own public_html directory. But if you need to publish a departmental page, you'll need the same thing. \n\nOf course, Moodle is also a form of web server, though it's closed to those outside of academic classes, but we don't have anything to do with that.
Simple - just contact us - cats at email.smith.edu. \nYou need to be a faculty or staff member of Division III (math, engineering, the sciences).
For Websci and Scinix, it's Eric Jensen, ejensen at science.smith.edu, x-3786, Bass 108. \n\nBut you can send requests to cats at email.smith.edu, which all three of us read.\n\n''Important:'' http://www.science.smith.edu is the science center's web site, and is not managed by ITS. Conversely, we cannot help you with any issues with http://www.smith.edu, you must call the ITS help desk(x-4487), for support on the campus web server.
All web servers on campus require the use of secure ftp or secure copy (scp). Dreamweaver and most similar web editors now support secure ftp. Or, if you prefer to code by hand, the secure ftp client embedded with ssh (for Windows) and Fugu (for OSX) will work just fine.
Dreamweaver and Macromedia contribute are [[supported |http://www.smith.edu/its/tara/web_dev/web_software.html]] and available campuswide for faculty and staff.
The short answer is no! But the long answer is that we do allow them but they only run from the /cgi-bin area of the web site. You'll need to contact the CATS if you want to install one there.
Yes. We have MySQL, which is a open source product, on the server.
''Using technology for teaching in the Science Center''\n\n[[I'd like to use a computer while lecturing -- how do I do that?]]\n[[What software is installed on the technology lecterns?]]\n[[There is a problem with the lectern in my classroom - who do I call?]]\n[[I'd like to teach in a computer classroom -- how do I do that?]]\n[[How are the computer classrooms equipped?]]\n[[How do I report a problem with a computer in a computer classroom?]]\n[[What software is installed on the computer classroom machines?]]\n[[I need a piece of software for my teaching -- how do I get it?]]\n[[I'd like to develop a web page for my teaching -- what's involved?]]\n[[What's Moodle and what can it do for my teaching?]]\n[[How do I make a podcast or online video of a lecture?]]\n[[How do I use the VideoDidact system in Burton 302 or Green Box 203?]]\n[[During what hours are the computer classrooms/labs available for use?]]
Most of the classrooms now have a "technology lectern" of some kind, though seminar rooms are still lacking. Even the seminar rooms are slowly gaining built-in projection.\n\nEach technology lectern houses either a Macintosh and a PC or (more commonly) a Macintosh that can also run Windows, as well as a projector and network hookup for your laptop. The computer classrooms, Burton B01, B17, 209, 301, and 302; Bass 102; and Engineering 203 have a number of computers for student use and one computer for the lecturer. This computer is hooked up to a projector and, in most cases, will also allow use of a laptop. Note that Burton 301/302 are generally used for math classes only and Burton B01 is a Computer Science-only room. \n\nYou can get specific instructions on the lecterns in ~McConnell 103, B-5, and B-15 at http://www.science.smith.edu/resources/classroom/lecterns/ \nYou can request a projector (and laptop, if need be) to use in the few regular classrooms where they aren't already installed. See the ITS [[Classroom Support web page|http://www.smith.edu/its/class_support/index.html]] for more information. \nThe registrar can also assist you in finding other computer-equipped classrooms and lecture halls on campus.
At a minimum, each lectern computer will have installed all the campus standard software. If you have special software needs for teaching, let us know ''WELL IN ADVANCE''! If it's software the college already owns, we'll get it installed for you as quickly as possible. If it needs to be acquired, YOU are responsible for purchasing/acquiring a legal copy.\n\nThe campus standard software package currently includes:\n* Adobe Acrobat\n* Adobe Dreamweaver\n* Adobe Flash\n* Adobe Illustrator\n* Adobe ~InDesign (Mac only)\n* Adobe ~PhotoShop\n* Adobe Contribute (Mac only)\n* Stata\n* Chemdraw\n* Kaleidagraph\n* Mathematica\n* Matlab\n* Microsoft Office\n* SPSS\n* ~Write-N-Cite\n
You can contact the [[registrar |http://www.smith.edu/registrar/]]to schedule your class and at that time specify your computer needs as well as specify a particular classroom preference.
* All the classrooms have a projector.\n* Burton B01 and B17 have 10 Windows computers. (B17 is reserved for Computer Science.)\n* Burton 209 has 15 Macintosh computers that can also boot into Windows or Linux.\n* Burton 301 has 12 Macintosh computers that also run Windows (usually for Math only).\n* Burton 302 has 12 Windows computers (usually for Math only)\n* Bass 102 has 10 Macintosh computers that can also boot into Windows or Linux.\n* Engineering 203 has 23 Windows computers. \n\n
ITS' Classroom Support group can be called any time and they will attempt to have somebody run over to help immediately, if needed. They are at extension ''3474'' (or by email: ''classhelp at smith.edu''. \n\nAs backup, the Science Center CATS group (Computer and Technical Services) located in Bass are sometimes able to come to the rescue. Among other things, they are responsible for the computers in the computer classrooms.
To report a problem, either use the [[online form|http://www.science.smith.edu/resources/classroom/classform.html]] or give one of us a call. Please be ready to tell us ''WHICH'' computer has the problem and as much as possible about the problem.
Software varies somewhat by computer classroom, but we try to standardize as much as possible. This way students' individual study habits and preferences can be accomodated and faculty room changes cause less disruption.\n\nWe also believe that it helps to have a variety of software applications at hand, rather than only the software for a particular discipline. We would like students to see statistics or 3-d visualization as helpful tools for the study of science, not just something they are required to use in one class.\n\nIf you have special software requirements, we need to know about them as early as possible, preferably BEFORE the semester begins. We'll try to accomodate all software requests, but we cannot make MAJOR changes once the semester has begun, since we can't risk causing interactions with software already in use by other faculty. If you need software the college already owns, we'll get it installed for you as quickly as possible. If it needs to be acquired, YOU are ultimately responsible for purchasing/acquiring legal copies.\n\nAt an absolute minimum, you can expect the campus standard software to be installed:\n* Adobe Acrobat\n* Adobe Dreamweaver\n* Adobe Flash\n* Adobe Illustrator\n* Adobe ~InDesign \n* Adobe ~PhotoShop\n* Adobe Contribute (Mac only)\n* Stata\n* Chemdraw\n* Kaleidagraph\n* Mathematica\n* Matlab\n* Microsoft Office\n* SPSS\n* ~Write-N-Cite\n\n[[Departmental Programs Windows list 2009-2010]]\n\n\n\n\n
* The Science Center has some software available. Windows users should look in Science Apps on their desktop. Macintosh users should look in Software in the Mac folder on the Science server.\n* The Committee on Educational Technology makes some software available, especially in support of teaching. They also accept requests for funding of innovative initiatives. Take a look at http://www.smith.edu/cet/ for more info. \n* The computer classrooms in the Science Center have quite a few programs available for student use. See "[[What software is installed on the computer classroom machines?]]" for more info. If you are teaching a class that uses that software, you should have it installed on your computer, too. Contact us (cats at science.smith.edu) and we'll see what we can do.\n* Some departments have software funds available - speak to your department chair.\n* Tom Laughner, Director of Educational Technology in ITS, may have some money available for faculty software requests.\n
If you'd like it hosted on THIS webserver, see the "Web Stuff" section of the FAQ for help and information on creating a web page on the science center web server. You could also use [[Moodle|http://moodon.smith.edu]].
Moodle is a web-based course management system that faculty can use to put teaching material on the web, to foster communication, and to allow assessments. For further information, see http://moodon.smith.edu and the Teaching and Learning Support page at http://www.smith.edu/its/tls/index.htm
Contact Jeff Heath at Center for Media Production, ext. 2955. There are three parts to the job:\n# Recording - you can borrow equipment to do yourself or get help to hire a contractor\n# Editing (putting on titles) - you can do it yourself, pay the contractor to do it, or Jeff may have student staff that can help\n# Hosting - Kate Lee in ETS is the contact for the Smith media server; Jeff can help you get it set up (much more info is available at: http://www.smith.edu/multimedia.php). As an end product, you will get a link that you can post on your own web site.
''My network-connected framinigle won't see the yuwee server!''\n\n[[My computer doesn't work right -- what do I do?]]\n[[I think the server or email or ... went down. what should I do?]]\n[[Where do I go for more info on Groupwise or other software?]]\n[[Who knows something about xxx, the Microsoft product?]]\n[[How do I use Banner?]]\n[[Something happened with the network and now I can't print, get to the internet or to my files on the Science server.]]\n[[It's after-hours (or the weekend) and things aren't working - now what?]]\n
Kinda depends on what doesn't work. If you are sure it's a hardware problem, you can call the ITS folks at 4its (x 4487) and report it. You can also ask the 4ITS people for help with configuration problems. They may or may not be able to help, but they can refer the question on to someone who can. \n\nBut you can also contact one of us and give us the details. ''Write down everything you know about the problem and when it occurs.'' Then send an email (if you can) to cats at email.smith.edu or call one of us: Kelly Huard, x4409; Eric Jensen, X3868; Eric Brewer, x3847; Tony Caldanaro, x3719.
* First, if you can, check our home page and look at the Network Status box in the upper-right corner. Then, follow the link to check [[ITS's server status page|http://www.smith.edu/its/cgi-bin/status.cgi]] to see if your resource is down. If we know about it, it will be posted.\n* Next, if it's not posted, be sure it is that resource and not your machine that is giving you the problem. Reboot your machine and try accessing the resource again. \n* Call one of the cats if your problem is with a Science Center server and x4ITS if it is with email or another campus resource.\n* If it's after hours or on a weekend, [[check out this...|It's after-hours (or the weekend) and things aren't working - now what?]] in the FAQ.\n\nNaturally, not all problems are immediately repairable, but we'll do our best to get the systems up and functioning as quickly as possible.
Okay, you've noticed a problem and it isn't noted in either the [[Network Status Box|I think the server or email or ... went down. what should I do?]] in the upper-right corner of the Science Center web page OR on the [[ITS server status page|http://www.smith.edu/its/cgi-bin/status.cgi]]...\n\nWhile not too many people know about it, there IS a procedure to follow. No matter which server is down (Science, the science web server, administrative servers, campus mail, campus web, ...), the protocol is the same - call Campus Security and report it to them.\n\nCampus Security calls the I.T.S. director on-call for that week, who figures out what is broken and calls the appropriate person. If it's a server in the Science Center, he or she calls OUR person on call (Kelly Huard, Eric Jensen, or Eric Brewer) and we try to figure out what can be done to repair the problem right away.
''Practice safe computing!''\n\n[[Should I be worried about viruses and patches and "bad internet sites"?]]\n[[Where do I get an installer for an anti-virus utility?]]\n[[I have VirusScan/Virex. Should I be worried that I don't have the latest update?]]\n[[How do I scan for viruses on my home system?]]\n[[Are file swapping programs, like Morpheus and Kazaa safe?]]
* First, try ''rebooting''. \n* If that doesn't work, and you are sure things are ''plugged in correctly'', then the network port in your new office is probably not live. \n* Before you panic, try to remember if your ''network connection might have been moved accidentally'', either by you or by a custodian. \n* If not, contact the CATS(cats at email.smith.edu):\n** Kelly Huard - x4409\n** Eric Jensen - x3868\n** Tony Caldanaro - x3719\n** Eric Brewer - x3847\n
ITS has a document server called TARA that has lots of stuff, including a complete introductory book on Groupwise online. Take a look at http://www.smith.edu/its/tara/
* First try calling 4ITS if it's a Microsoft Office program. They really do have Word and Excel experts there. \n* We might be able to help - send us a query at cats at email.smith.edu. \n* And, of course, there's Microsoft themselves. Try them at http://support.microsoft.com
We haven't a clue. Look on the ITS document server for help at http://www.smith.edu/its/tara/, then call 4ITS if you still have questions.
Yes, absolutely!! It's a dangerous world out there!\n\nThe Internet has changed - the hackers aren't just being funny or proving that they know how to get into your system. They're after ''YOUR MACHINE'' and the intent is to ''MAKE MONEY'' by either stealing yours or using your machine to do evil.\n
Go to the Smith Software page at http://www.smith.edu/smithsoftware/\nIt will require a login using your Novell/Groupwise username and password.
Yes!! New viruses get created all the time. If your protection is not up to date, your machine will be vulnerable to attack.
Our license for ~McAfee ~VirusScan and Virex now ''INCLUDES home computers'' for faculty and staff. ITS's User Support Center has CD-ROM's with installers for these or (better) just download them directly: http://www.smith.edu/smithsoftware/
Peer-to-peer file swapping networks have been growing in popularity ever since Napster emerged and disappeared, with Morpheus, Gnutella, and Kazaa being just some of the options in use today.\n\nIn addition to the copyright issues and bandwidth problems these programs often cause, they can introduce numerous security risks. Morpheus popped up in the news again recently, after a attack against its network. In at least one case, encrypted messages that changed registry settings were sent to Morpheus users.\n\nAny user connected to a file-sharing network is vulnerable to attack, whether in the form of information pilfering, session hijacking, or ~DoS (Denial of Service) attacks. Additionally, some files available for download are pre-infected with viruses.
''Support for that OTHER computer in your life. ''\n\n[[I want to buy a PC for home. Can you help?]]\n[[How do I scan for viruses on my home system?]]\n[[How do I get Internet access from home?]]\n[[Can I access my computer or network files from home?]]\n[[How can I read my email while away from campus?]]\n[[I need Microsoft Office at home -- can I get a copy?]]\n[[I have a cable modem/DSL connection. How do I protect myself from hackers?]]\n
I'm afraid you are on your own - the college doesn't sponsor home connections. Try your cable provider (probably Comcast or Charter in this area) or Verizon for DSL if you're within 3 miles of your town's central office.
You CAN access your Novell network files from home - just follow the FAQ link for [[How do I log into my Novell account from off campus?]]\n\nBut you can NOT access files that are on your office computer itself without some special diddling, which may make your machine vulnerable to hacking.
Provided you are a staff or faculty member, you can get obtain several Microsoft products, including MS Office, for a minimal charge. Visit the campus [[Computer Store|http://www.smith.edu/its/computerstore/]] for more information.
Typically, broadband connections at home are "always on" and always at the same address, which may make them targets of opportunity. Once penetrated, they become a hazard to their neighbors. As their numbers increase, they become a threat to the health of the entire net. And, of course, it could be a threat to your bank account!\n\nWhile no single security mechanism is sufficient to protect you from all attacks and while all have limitations, many are efficient. Applied in combination, they can be very effective. The mechanism of first choice is the hardware firewall appliance, usually found built into a broadband router. These devices cost in the neighborhood of $50. While you don't need a router at home unless you are connecting more than one computer we STRONGLY advise purchasing one. The campus [[Computer Store|http://www.smith.edu/its/computerstore/]] sells several models.\n\nThey effectively hide your system from the internet. While the firewall/router will still have a persistent address, it will not respond to scans from the network. It will resist most attacks except those in which the user cooperates and clearly takes a system out of the target of opportunity population. Their function is bound at manufacturing time and most will effectively resist later change. They are easy to install, easy to configure, and provide other non-security [connectivity] benefits. \n\nTheir limitations include that, by default, they do not warn about attacks in progress and they do not protect the network from systems that are penetrated through user cooperation, i.e., through viruses and bait programs, or other means. Therefore, they are best used in combination with anti-virus software and with software personal firewalls that are configured to resist and warn the user of outgoing attacks, i.e., to alert you that you have been penetrated by a program that is now trying to attack others from your system. \n\nWhile anti-virus programs cannot protect a system from all novel viruses, used pervasively they protect the network and kill off most viruses within weeks. You can get the latest anti-virus software for both Windows and OS X from the Smith Software page at http://www.smith.edu/smithsoftware/ \n\nSoftware personal firewalls are useful for and can be configured to resist outgoing attacks. They range in cost from free to about $70. Like anti-virus software, they must be kept current. Their limitations include that they are vulnerable to interference from other programs running on the same system. However, even by themselves they may be sufficient to take a system out of the target of opportunity population. Used wisely these measures will protect most systems from most attacks and will go a long way toward protecting the network. \n\n''Even in combination, these measures are not sufficient to protect a system whose user "takes the bait," so you still need to be careful!''
First be aware that your scinix password is the same one you use for groupwise and logging onto Mac's and Windows around campus. So that means you can change it like described above for Novell and Groupwise.\n\nYou can also type ''passwd ''on linux and change it there.
If this isn't science/engineering/math related, you might want to talk to Dan Bridgman in Hillyer Hall about printing on their system - they're set up to work with a wider range of clients, including student organizations.\n\nThe Science Center large-format printers can print up to 42" wide posters, but we only stock 36" paper at this time. You'll be charged $5 per linear foot for heavy coated paper or $8 per linear foot for gloss. While gloss looks "right" for photos, note that heavy coated stock will actually produce a poster that is easier to read.\n\nTake a look at http://www.science.smith.edu/resources/poster_printing/ for all the details, but VERY briefly:\n* Start well in advance - your poster won't be printed on time if you delay!\n* Create your poster in whatever software you like. (We recommend using ~PowerPoint or Adobe Illustrator). \n* If you've used anything except ~PowerPoint, print the poster to Adobe Acrobat to create a PDF file. \n* Recommended: print a test from the same file on another Postscript printer - the shared color laser in the Xerox room can print on 11" X 17" paper, which is excellent for a trial run. \n* Fill out a [[Poster Request Form|http://www.science.smith.edu/resources/poster_printing/docs/Poster_Req_Form.pdf]]\n* Work with your department's [[Printing Liaison|http://www.science.smith.edu/resources/poster_printing/]] to print your poster
~VideoDidact is a computer video "routing" system. The idea in a nutshell is that you can take the display from ANY computer in the room, running either Windows or Linux, and mirror it to anywhere else.\n\nThis example happens to be the console from Engineering, but there are always 3 simple steps (IN THIS ORDER!):\n# Reset everything to start (ie. press Video Off)\n# Select your source (eg press the Instructor's button)\n# Select the destination (eg press the Screen Projector button)\nHere's how to set up the standard configuration, used 99% of the time:\n[img[Controller|http://www.science.smith.edu/resources/classroom/videodidact/egr_vd1.jpg]]\nYou can do lots of other things using the same 3 steps. For example:\n* Blank everyone's screen so they'll stop doing email and listen!\n# Press Video Off to reset everything\n# Press Blank as the source\n# Press All as the destination\n\n* Send your screen to ALL the students so they can see what you are doing without moving to see the projector.\n# Press Video Off to reset everything\n# Press Instructor as the source\n# Press All as the destination\n\n* Choose a student's screen and send it to the projector for all to share.\n# Press Video Off to reset everything\n# Select a particular workstation\n# Press Screen Proj as the destination\n
The standard policies apply to most rooms, including: \n* Burton B-1 (Windows & Linux)\n* Burton 209 (Windows & Linux)\n* Burton 301 (OSX & Windows)\n* Burton 302 (Windows & Linux)\n* Bass 102 (OSX & Windows & Linux)\n* ~McConnell 104 (Computer Science only)\n* ~McConnell 209 (Computer Science only)\n\n7:30am to 11:00pm ~Mon-Fri\n7:30am to 10:00pm Saturday\n8:00am to 10:00pm Sunday\nStudents may remain in the room after hours as long as they are not alone (following the Science Center "buddy policy") but doors will be locked and should be closed when you leave.\nBe aware that rooms may be reserved for TA sessions and such (does not apply to ~McConnell 104 and 209).\n\nThe Computer Science classroom in Burton B-17 MAY follow that schedule, depending upon the semester.\n\nThe Sandbox, Bass 105, is open for general business (faculty/staff/students) during "normal working hours." Again, students may remain at lockup time if they are working. Faculty and staff may get their own key from the Stockroom for use at other times.\n\nPolicies for departmental computer spaces are set by the department. \n\nAny of these spaces may be pulled off-line during the summer and during January break to allow us to rebuild the machines as necessary.\n\n
''General Software''\nAutocad\nGoogle Earth\nGroupwise\nLogger Pro \nLuna Imaging \nMiktex\nNovell\nOpen Office\nRefworks\nSPSS \n\n''Astronomy''\nAst225\nStarry Night Pro 6 \n\n''Biology''\n~ImageJ\nMega (Bass 105 only)\nRDP (Bass 105 only)\n\n''Chemistry''\nChemdraw \nIsis Draw 2.5\nmdlcommander\nSpartan \n~SwissPDBViewer\n\n''Computer Science''\nBlender\n~CS354 Sound Apps\nCsound\nDr Java\nEclipse\nEmacs\nGamemaker (MC 104 & Burton B17)\n~GhostScript \n~GSView\nJogl\n~POV-Ray \n~PureData \nRobolab \n~TortoiseSVN\n\n''Geology''\nVisual Modflow\n\n''Engineering''\nAlternatiff\nComsol \nParallax Propeller\nSolidworks & Cosmos \nVideopoint\nWest Point Bridge Designer \n\n''Mathematics & Statistics''\nFathom \nMinitab \nR \nStata \n\n''Physics''\nEnergy Plus\nEnergy Plus Google Plug-in \nVideopoint\n\n''Psychology''\nBrain Explorer\n\n''Programming Tools''\nGlut\n~NumPy\nPoseray\nPython 2.5 & 2.6 & 3.0\n~PyGame\n~PyOpenGL\n~PyQT \n~PyWin32\nQT \n~SciPy\nSun Java SDK \nVisual Studio C++ 2005\n\n''Internet Tools''\n~CoreftpLe\nFirefox\nInternet Explorer\nSSH\n\n''Multimedia Apps''\nCD Burning Software\n~DivX\nMedia Player \n~PowerDVD\nQuicktime\nVLC\n\n''Utilities''\nIrfanview\nMcafee\nMcafee Antispyware\n~NotePad+\n
/***\n|''Name:''|CommentTabPlugin|\n|''Source:''|[[TiddlyWiki-zh|http://tiddlywiki-zh.googlecode.com/svn/trunk/contributors/BramChen/locales/plugins/]]|\n|''Requires:''|[[CommentPlugin|http://sourceforge.net/project/showfiles.php?group_id=150646]]|\n|''Descriptions:''|Breaks the Timeline tab into "Tiddlers" and "Comments".|\n***/\n//{{{\nfunction in_array(item, arr){for(var i=0;i<arr.length;i++)if(item==arr[i])return true};\nfunction get_parent(tiddler){while(tiddler && in_array(config.CommentPlugin.CPlingo.comments, tiddler.tags)) tiddler=store.fetchTiddler(tiddler.tags[0]);return tiddler};\nconfig.options.txtTimelineTab = 'timelineTab'; // huh?\nconfig.shadowTiddlers.TabTimelineTiddlers = config.shadowTiddlers.TabTimeline;\nconfig.shadowTiddlers.TabTimeline = "<<tabs txtTimelineTab Tiddlers Tiddlers TabTimelineTiddlers "+ config.CommentPlugin.CPlingo.comments + config.CommentPlugin.CPlingo.CommentInTitle + " TabTimelineComments>>";\nconfig.shadowTiddlers.TabTimelineComments = "<<tiddlerComments>>";\n\nconfig.macros.tiddlerComments = {\n dateFormat: 'DD MMM YYYY',\n handler: function(place,macroName,params)\n {\n var field = params[0] ? params[0] : "modified";\n var comments = store.reverseLookup("tags",CPlingo.comments,true,field);\n var lastDay = "";\n for (var c=comments.length-1; c>=0; c--)\n {\n if(comments[c].tags.length == 0) continue;\n var tiddler = get_parent(comments[c]);\n if(!tiddler) continue;\n var theDay = comments[c][field].convertToLocalYYYYMMDDHHMM().substr(0,8);\n if(theDay != lastDay)\n {\n var theDateList = document.createElement("ul");\n place.appendChild(theDateList);\n createTiddlyElement(theDateList,"li",null,"listTitle",comments[c][field].formatString(this.dateFormat));\n lastDay = theDay;\n }\n var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);\n var link = createTiddlyLink(place,comments[c].title);\n link.innerHTML = comments[c].modifier + ' on ' + tiddler.title;\n link.setAttribute("tiddlyLink",tiddler.title);\n theDateListItem.appendChild(link);\n }\n }\n};\n//}}}
Duplexing (printing on both sides of a page) is built into virtually all printers in the Science Center now. Note that it is controlled from the client - your Windows or Macintosh computer - not by a default setting on the printer. \n\nNo matter what the printer defaults to, your client settings will override the printer and print on either one or two sides, as the client requests.\n!Windows\nWindows systems can easily be set to default to duplex. If you configure your machine this way, any individual document (such as a Word file) can still print single-sided by changing the print properties within the program.\n\nTo set duplexing as the default for a printer:\n* Go to Start, Settings, Printers and Faxes\n* Right click on your printer and select Properties\n* On the General tab, click Printing Preferences...\n* The location of the duplexing setting varies by printer manufacturer --\n* ''Okidata Printers:''\n** On the Layout tab, in the "Print on Both Sides" area, select "Flip on Long Edge"\n** Click OK\n* ''HP Printers:''\n** Go to the Finishing tab and click the box for Print On Both Sides\n** Click OK \nNOTE: For some printers, notably HP, you may have to tell the print driver that the printer\nis actually capable of printing duplex:\n* Go to Start, Settings, Printers and Faxes\n* Right click on the printer and select Properties\n* Select the Device Settings tab and look for an Installable Options section\n* Change the Duplex Unit setting to Installed and click OK\n!Macintosh\nIt seems you cannot set duplexing (long-edge binding) as a default on OS X. Rather you create a "Preset" in the Printing dialog window that remembers duplexing or long-edge binding. \nIt will work on all printers in the printer list. You will still have to choose the "Duplex" preset for ''EACH ''application you print from.\n\nSetting duplex printing as a default:\n* Open an application such as Word and go to File > Print.\n* In the window, click on Copies & Pages and a drop-down list will appear. Select Layout.\n* Under Two Sided Printing, check Long Edge Binding (for normal duplexing) or Short Edge Binding.\n* Click on the Presets pull-down menu and select Save As. In the window, type a name, such as Duplex, to name the settings that you are saving.\n* Click OK.\n* From now on, the printer will print duplex until the setting is changed.\nTo print single-sided again, click on the Presets pull-down menu and select Standard.\n\nTo change it back to duplex, click on the Presets pull-down menu and select the name of the settings you saved, e.g. Duplex.\n
Currently, MOST Div 3 users have their mail stored on ''scipo.smith.edu''\n\nBut this is changing. We are transitioning to a new post office server, named ''gwdiv3po.smith.edu''\nSome of the accounts have already moved and soon, all Division 3 accounts will be on gwdiv3po.
The client needs four things to connect:\n* Your username - it's the same one you always use\n* Your password - ditto\n* The Groupwise post office where your mail is stored. Currently, most Division 3 users have their mail stored on ''scipo.smith.edu'' but we are transitioning to a new server named ''gwdiv3po.smith.edu'' \n* Port number - leave this as it defaults, to port 1677