<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.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]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#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;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<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>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
/%\n!info\n|Name|PaletteMaker|\n|Source|http://www.TiddlyTools.com/#PaletteMaker|\n|Version|1.2.2|\n|Author|Eric Shulman|\n|License|http://www.TiddlyTools.com/#LegalStatements|\n|Type|transclusion|\n|Description|edit/create ColorPalette using interactive grid/list|\nUsage\n<<<\n{{{\n<<tiddler PaletteMaker with: PaletteName GridName noList noGrid allowOther>>\n}}}\n*''~PaletteName'' (default=ColorPalette)<br>specifies a tiddler containing {{{name:value}}} slices that assign names to color values\n*''~GridName'' (default=[[216-color 'web safe' grid|http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors]])<br>specifies a tiddler (or section) that defines a table, where each table cell contains one of:\n**a 3-digit #RGB or 6-digit #RRGGBB color value\n**an [[X11 Color Name|http://en.wikipedia.org/wiki/X11_color_names]]\n**another valid CSS attribute value (see ''allowOther'', below)\n*''noList'' //or// ''noGrid''<br>omits the palette listbox or color grid to provide a more compact layout\n*''allowOther''<br>permit non-color CSS attribute values to be entered/selected, e.g., {{{url('images/somefile.jpg')}}}\n<<<\nNotes:\n<<<\n*{{block{\nYou can use "-" as placeholders for the default values of ''~PaletteName'' and/or ''~GridName'':\n{{{\n<<tiddler PaletteMaker with: - - nogrid>>\n}}}\n}}}\n*{{block{\nThe grid/list are rendered with 'float:left' styles so content that follows will be rendered next to them. To show your content below the grid/list display, embed an //empty// 'tagClear' CSS wrapper after the PaletteMaker:\n{{{\n<<tiddler PaletteMaker ...>>{{tagClear{\n}}} \n}}}\nYou can also customize the default styles contained in [[PaletteMakerStyles]]:\n<<tiddler PaletteMaker##showcode with: styles>>\n}}}\n*The default color grid definition is:<br><<tiddler PaletteMaker##showcode with: colorgrid>>\n<<<\nExamples\n<<<\nEdit ColorPalette (allow non-color values to be entered):\n{{{<<tiddler PaletteMaker with: - - allowOther>>}}}\n<<tiddler PaletteMaker##show with: - - allowOther>>{{tagClear{\n}}}\nCreate/edit NewPalette using a 16-color 'rainbow' and/or shades of gray (no list):\n{{{<<tiddler PaletteMaker with: NewPalette PaletteMaker##grayscale noList>>}}}\n<<tiddler PaletteMaker##show with: NewPalette PaletteMaker##grayscale noList>>\n{{{<<tiddler PaletteMaker with: NewPalette PaletteMaker##rainbow noList>>}}}\n<<tiddler PaletteMaker##show with: NewPalette PaletteMaker##rainbow noList>>\n<<<\n!showcode\n<<tiddler PaletteMaker##out with: {{store.getTiddlerText('PaletteMaker##$1')}}>>\n!out\n{{{\n$1\n}}}\n!end\n\n!colorgrid\n|white || | | | | | |FC0|F90|F60|F30| | | | | | ||FFF|\n|black ||9C0| | | | |C90|FC3|FC6|F96|F63|C30| | | | |C03||EEE|\n|red ||CF0|CF3|330|660|990|CC0|FF0|C93|C63|300|600|900|C00|F00|F36|F03||DDD|\n|orange ||9F0|CF6|9C3|663|993|CC3|FF3|960|930|633|933|C33|F33|C36|F69|F06||CCC|\n|yellow ||6F0|9F6|6C3|690|996|CC6|FF6|963|630|966|C66|F66|903|C39|F6C|F09||BBB|\n|green ||3F0|6F3|390|6C0|9F3|CC9|FF9|C96|C60|C99|F99|F39|C06|906|F3C|F0C||AAA|\n|blue ||0C0|3C0|360|693|9C6|CF9|FFC|FC9|F93|FCC|F9C|C69|936|603|C09|303||999|\n|darkmagenta ||3C3|6C6|0F0|3F3|6F6|9F9|CFC| | | |C9C|969|939|909|636|606||888|\n|violet ||060|363|090|393|696|9C9| | | |FCF|F9F|F6F|F3F|F0F|C6C|C3C||777|\n|darkred ||030|0C3|063|396|6C9|9FC|CFF|39F|9CF|CCF|C9F|96C|639|306|90C|C0C||666|\n|darkorange ||0F3|3F6|093|0C6|3F9|9FF|9CC|06C|69C|99F|99C|93F|60C|609|C3F|C0F||555|\n|gold ||0F6|6F9|3C6|096|6FF|6CC|699|036|369|66F|66C|669|309|93C|C6F|90F||444|\n|darkgreen ||0F9|6FC|3C9|3FF|3CC|399|366|069|039|33F|33C|339|336|63C|96F|60F||333|\n|darkblue ||0FC|3FC|0FF|0CC|099|066|033|39C|36C|00F|00C|009|006|003|63F|30F||222|\n|indigo ||0C9| | | | |09C|3CF|6CF|69F|36F|03C| | | | |30C||111|\n|darkviolet || | | | | | |0CF|09F|06F|03F| | | | | | ||000|\n!grayscale\n|FFF|EEE|DDD|CCC|BBB|AAA|999|888|777|666|555|444|333|222|111|000|\n!rainbow\n|black|white|red|orange|yellow|green|blue|darkmagenta|violet|darkred|darkorange|gold|darkgreen|darkblue|indigo|darkviolet|\n!end\n\n!styles\n/*{{{*/\n.colorgrid table\n { float:left; margin:0 !important; border:0 !important; }\n.colorgrid table, .colorgrid tr, .colorgrid th, .colorgrid tbody\n { color:black; border:0 !important; }\n.colorgrid td\n { height:16px; width:16px; text-align:center; padding:0; line-height:100%; }\n.colorgrid select\n { float:left; margin-left:16px; font-size:80%; height:255px; }\n/*}}}*/\n!end\n\n!code\n<<tiddler {{\nconfig.shadowTiddlers.PaletteMakerStyles=store.getTiddlerText('PaletteMaker##styles');\nsetStylesheet(store.getTiddlerText('PaletteMakerStyles'),'paletteMakerStyles');\nwindow.paletteMaker = {\n getColor: function(t){ if (!t||!t.length) return null;\n var s=document.createElement('span').style;\n try { s.color='#'+t; if (s.color.length) return '#'+t; }\n catch(e) { try{ s.color=t; } catch(e){ return null; } return t; } // IE \n s.color=t; return s.color.length?t:null; // FF\n },\n getTextColor: function(t){ \n t=this.getColor(t);\n if (!t||!t.length||!t.startsWith('#')) return 'black'; // BAD COLOR or X11 COLOR NAME\n var rgb=t.substr(1).split(''); var long=t.length>=6;\n function h2d(h){return '0123456789ABCDEF'.indexOf(h?h.toUpperCase():'');};\n var r=h2d(rgb[0]); var g=h2d(rgb[long?2:1]); var b=h2d(rgb[long?4:2]);\n if (r<0||g<0||b<0||r+g+b>=15) return 'black'; // BAD RGB or BRIGHT COLOR\n return 'white'; // DARK COLOR\n },\n getPalette: function(palette) {\n var pal={};\n var slices=store.calcAllSlices(palette);\n for (var s in slices) {\n var color=slices[s].toUpperCase().replace(/#/,'');\n if (!pal[color]) pal[color]=new Array();\n pal[color].push(s);\n }\n return pal;\n },\n drawGrid: function(place,grid,palette,opts) {\n var pm=window.paletteMaker; // abbrev\n removeChildren(place);\n if (!opts.contains('NOGRID')) wikify(store.getTiddlerText(grid,''),place);\n if (!opts.contains('NOLIST')) var s=pm.drawList(place,\n { palette:palette,min:0,max:0,edit:true,callback:pm.callback,place:place,opts:opts });\n var pal=pm.getPalette(palette);\n var cells=place.getElementsByTagName('td');\n for (var i=0; i<cells.length; i++) { var td=cells[i];\n td.style.border=0;\n var txt=getPlainText(td).trim(); if (!txt.length) continue;\n var c=pm.getColor(txt); if (!c && !opts.contains('ALLOWOTHER')) continue;\n if (c) { td.style.backgroundColor=c; td.innerHTML=''; td.style.fontSize='70%'; }\n td.title=c||txt;\n td.style.cursor=c?'crosshair':'pointer';\n td.params={ palette:palette, min:0, max:15, edit:true, callback:pm.callback,\n place:place, grid:grid, opts:opts, pick:c||txt };\n if (pal[txt.toUpperCase()]) {\n td.params.names=pal[txt.toUpperCase()];\n td.title+='='+td.params.names.join(', ');\n if (c) { td.style.color=pm.getTextColor(c); td.innerHTML='&radic;'; }\n }\n td.onclick=function(ev) { ev=ev||window.event;\n var p=Popup.create(this); if(!p)return false;\n p.className+=' sticky smallform';\n var s=window.paletteMaker.drawList(p,this.params);\n s.style.fontSize='80%'; Popup.show(); s.focus();\n ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();\n return false;\n };\n }\n },\n drawList: function(here,p) {\n var pm=window.paletteMaker; // abbrev\n var s=createTiddlyElement(here,'select');\n s.params=p;\n s.options[s.length]=new Option(p.palette+':','_view');\n s.options[s.length-1].title='open '+p.palette;\n if (p.edit && p.pick!==undefined) {\n var c=pm.getColor(p.pick);\n s.options[s.length]=new Option('+Add this color...','_add');\n if (c) s.options[s.length-1].style.backgroundColor=c;\n if (c) s.options[s.length-1].style.color=pm.getTextColor(c);\n s.options[s.length-1].title=p.pick;\n }\n var colors=store.calcAllSlices(p.palette);\n for (var x in colors) {\n var c=pm.getColor(colors[x]);\n var prefix=p.names&&p.names.contains(x)?'=':'\sxA0\sxA0';\n s.options[s.length]=new Option(prefix+x,colors[x]);\n if (c) s.options[s.length-1].style.backgroundColor=c;\n if (c) s.options[s.length-1].style.color=pm.getTextColor(c)\n s.options[s.length-1].title=(!c?'other: "':'')+colors[x]+(!c?'"':'');\n }\n s.size=p.min&&s.length<p.min?p.min:p.max&&s.length>p.max?p.max:s.length;\n s.onclick=function(ev){ ev=ev||window.event;\n var name=this.options[this.selectedIndex].text.replace(/[\sxA0=]+/,'').trim();\n if (this.params.callback) this.params.callback(this,name,this.value,this.params);\n return false;\n };\n s.onkeyup=function(ev){ ev=ev||window.event;\n if (ev.keyCode==13) { this.onclick(); Popup.remove(); }\n if (ev.keyCode==27) Popup.remove();\n return false;\n };\n return s;\n },\n callback: function(here,name,val,p){\n var pm=window.paletteMaker; // abbrev\n if (!val.length) return;\n var pick=p.pick!==undefined?p.pick:val;\n if (val=='_view') {\n story.displayTiddler(story.findContainingTiddler(this.place),p.palette);\n Popup.remove();\n return false;\n } else if (val=='_add') {\n var msg='Enter a new name for "'+pick+'"';\n name=prompt(msg,'');\n var slices=store.calcAllSlices(p.palette);\n while (name && slices[name])\n name=prompt('"'+name+'" is already in use\sn'+msg,name);\n } else if (p.edit) {\n var allow=p.opts.contains('ALLOWOTHER');\n var msg='Change "'+name+'" from "'+val+'" to:';\n pick=prompt(msg,pick);\n while (pick && !pm.getColor(pick)) {\n var err='"'+pick+'" is not a recognized color\sn\sxa0';\n if (!allow) err+='Please try again\sn\sn';\n else err+='Press OK to use this value anyway\sn\sn';\n var pre=pick; pick=prompt(err+msg,pick);\n if (pre==pick && allow) break;\n }\n } else {\n // TBD: callback without editing\n Popup.remove(); return false;\n }\n here.selectedIndex=0;\n if (!name||!pick) return false;\n pm.set(p.palette,name.replace(/ /g,''),pick);\n pm.drawGrid(p.place,p.grid,p.palette,p.opts);\n Popup.remove();\n return false;\n },\n set: function(palette,name,newval) {\n var tid=store.getTiddler(palette);\n if (!tid) { var tid=new Tiddler(); tid.text=store.getTiddlerText(palette,''); }\n var oldval=store.getTiddlerSlice(palette,name)||'';\n var pattern="((?:^|\s\sn)(?:[\s\s'\s\s/]{0,2})~?(?:"\n +name.escapeRegExp()\n +")\s\s1\s\s:[\s\st\s\sx20]*)(?:"\n +oldval.escapeRegExp()\n +")([\s\st\s\sx20]*(?:\s\sn|$))";\n var t=tid.text; var match=t.match(new RegExp(pattern));\n if (match) {\n var pos=t.indexOf(match[0]);\n var newText=t.substr(0,pos)+\n match[1]+newval+match[2]+\n t.substr(pos+match[0].length);\n } else { // place new slice at top of list or start of tiddler\n var match=t.match(store.slicesRE);\n var pos=t.indexOf(match?match[0]:'');\n var newText=t.substr(0,pos)\n +name+': '+newval+(t.length?'\sn':'')\n +t.substr(pos);\n }\n var who=config.options.txtUserName; var when=new Date();\n if (config.options.chkForceMinorUpdate)\n { var who=tid.modifier; var when=tid.modified; }\n displayMessage('setting "'+palette+'::'+name+'" to "'+newval+'"');\n store.saveTiddler(palette,palette,newText,who,when,tid.tags,tid.fields);\n story.refreshTiddler(palette,null,true);\n }\n};\n'';}}>>\n!end\n\n!show\n<<tiddler {{\n var opts=[]\n var palette=('$1'!='$'+'1' && '$1'!='-')?'$1':'ColorPalette';\n var grid =('$2'!='$'+'2' && '$2'!='-')?'$2':'PaletteMaker##colorgrid';\n opts.push('$3'.toUpperCase());\n opts.push('$4'.toUpperCase());\n opts.push('$5'.toUpperCase());\n if (!place.lastChild||!hasClass(place.lastChild,'colorgrid')) {\n var wrapper=createTiddlyElement(place,'span',null,'colorgrid');\n window.paletteMaker.drawGrid(wrapper,grid,palette,opts);\n }\n'';}}>>\n!end\n\n%/<<tiddler PaletteMaker##code>>/%\n%/<<tiddler {{var src='PaletteMaker'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}\n with: [[$1]] [[$2]] [[$3]] [[$4]] [[$5]]>>
To set up Cyberduck as a file transfer client go to [[Cyberduck|https://cyberduck.io/?l=en]] and click on the appropriate download button for the type of system that you use. \n\nThe image below shows you what the download portion of your Cyberduck screen will look like: \n[img[http://archives.library.wcsu.edu/images/cao/cyberduck3.jpg]]\n\n It is not necessary to install Bonjour \n\nOnce the program is downloaded and installed double click on the duck icon on your desktop to open it.\nClick on "Open Connection" and it will give you the following prompt:\n\n[img[http://archives.library.wcsu.edu/images/cao/cyberduckImage2.jpg]]\n\nFrom the drop-down menu select "WebDAV (Web-based Distributed Authoring and Versioning)"\n\nIn the field for server type: library.wcsu.edu \nPort: 80\nYour username is your repository code \n(* If you are not sure what your repository code is [[e-mail|mailto:stevensb@wcsu.edu]] us and we'll send it to you)\nWe will provide you with your password\nclick the save password box \nat the bottom of the screen click the arrow next to "more options"\nin the box for path type: /dav/cao/[yourRepositoryCode]\n\nYour screen should look similar to the image below:\n\n[img[http://archives.library.wcsu.edu/images/cao/cyberduckImage.jpg]]\n\nclick connect.\n\nA pop-up window will ask you if you want to connect over an unsecured WebDAV (HTTP) connection, click continue.\n\nNow you have established a file transfer client. Each time that you'd like to transfer files, double click on the desktop duck icon and just drag and drop the files that you'd like to add to CAO. \n\n[img[http://archives.library.wcsu.edu/images/cao/cyberduck4.jpg]]\n\nNote: The CAO is indexed nightly so even though your upload has worked, you will not be able to see your files in the CAO until the following day. \n
/***\n|''Name''|SimpleSearchPlugin|\n|''Description''|displays search results as a simple list of matching tiddlers|\n|''Authors''|FND|\n|''Version''|0.4.0|\n|''Status''|stable|\n|''Source''|http://devpad.tiddlyspot.com/#SimpleSearchPlugin|\n|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/SimpleSearchPlugin.js|\n|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''Keywords''|search|\n!Revision History\n!!v0.2.0 (2008-08-18)\n* initial release\n!!v0.3.0 (2008-08-19)\n* added Open All button (renders Classic Search option obsolete)\n* sorting by relevance (title matches before content matches)\n!!v0.4.0 (2008-08-26)\n* added tag matching\n!To Do\n* tag matching optional\n* animations for container creation and removal\n* when clicking on search results, do not scroll to the respective tiddler (optional)\n* use template for search results\n!Code\n***/\n//{{{\nif(!version.extensions.SimpleSearchPlugin) { //# ensure that the plugin is only installed once\nversion.extensions.SimpleSearchPlugin = { installed: true };\n\nif(!plugins) { var plugins = {}; }\nplugins.SimpleSearchPlugin = {\n heading: "Search Results",\n containerId: "searchResults",\n btnCloseLabel: "close",\n btnCloseTooltip: "dismiss search results",\n btnCloseId: "search_close",\n btnOpenLabel: "Open all",\n btnOpenTooltip: "open all search results",\n btnOpenId: "search_open",\n \n displayResults: function(matches, query) {\n story.refreshAllTiddlers(true); // update highlighting within story tiddlers\n var el = document.getElementById(this.containerId);\n query = '"""' + query + '"""'; // prevent WikiLinks\n if(el) {\n removeChildren(el);\n } else { //# fallback: use displayArea as parent\n var container = document.getElementById("displayArea");\n el = document.createElement("div");\n el.setAttribute("id", this.containerId);\n el = container.insertBefore(el, container.firstChild);\n }\n var msg = "!" + this.heading + "\sn";\n if(matches.length > 0) {\n msg += "''" + config.macros.search.successMsg.format([matches.length.toString(), query]) + ":''\sn";\n this.results = [];\n for(var i = 0 ; i < matches.length; i++) {\n this.results.push(matches[i].title);\n msg += "* [[" + matches[i].title + "]]\sn";\n }\n } else {\n msg += "''" + config.macros.search.failureMsg.format([query]) + "''"; // XXX: do not use bold here!?\n }\n createTiddlyButton(el, this.btnCloseLabel, this.btnCloseTooltip, plugins.SimpleSearchPlugin.closeResults, "button", this.btnCloseId);\n wikify(msg, el);\n if(matches.length > 0) { // XXX: redundant!?\n createTiddlyButton(el, this.btnOpenLabel, this.btnOpenTooltip, plugins.SimpleSearchPlugin.openAll, "button", this.btnOpenId);\n }\n },\n\n closeResults: function() {\n var el = document.getElementById(plugins.SimpleSearchPlugin.containerId);\n removeNode(el);\n plugins.SimpleSearchPlugin.results = null;\n highlightHack = null;\n },\n\n openAll: function(ev) {\n story.displayTiddlers(null, plugins.SimpleSearchPlugin.results);\n return false;\n }\n};\n\nconfig.shadowTiddlers.StyleSheetSimpleSearch = "/*{{{*/\sn" +\n "#" + plugins.SimpleSearchPlugin.containerId + " {\sn" +\n "\stoverflow: auto;\sn" +\n "\stpadding: 5px 1em 10px;\sn" +\n "\stbackground-color: [[ColorPalette::TertiaryPale]];\sn" +\n "}\sn\sn" +\n "#" + plugins.SimpleSearchPlugin.containerId + " h1 {\sn" +\n "\stmargin-top: 0;\sn" +\n "\stborder: none;\sn" +\n "}\sn\sn" +\n "#" + plugins.SimpleSearchPlugin.containerId + " ul {\sn" +\n "\stmargin: 0.5em;\sn" +\n "\stpadding-left: 1.5em;\sn" +\n "}\sn\sn" +\n "#" + plugins.SimpleSearchPlugin.containerId + " .button {\sn" +\n "\stdisplay: block;\sn" +\n "\stborder-color: [[ColorPalette::TertiaryDark]];\sn" +\n "\stpadding: 5px;\sn" +\n "\stbackground-color: [[ColorPalette::TertiaryLight]];\sn" +\n "}\sn\sn" +\n "#" + plugins.SimpleSearchPlugin.containerId + " .button:hover {\sn" +\n "\stborder-color: [[ColorPalette::SecondaryMid]];\sn" +\n "\stbackground-color: [[ColorPalette::SecondaryLight]];\sn" +\n "}\sn\sn" +\n "#" + plugins.SimpleSearchPlugin.btnCloseId + " {\sn" +\n "\stfloat: right;\sn" +\n "\stmargin: -5px -1em 5px 5px;\sn" +\n "}\sn\sn" +\n "#" + plugins.SimpleSearchPlugin.btnOpenId + " {\sn" +\n "\stfloat: left;\sn" +\n "\stmargin-top: 5px;\sn" +\n "}\sn" +\n "/*}}}*/";\nstore.addNotification("StyleSheetSimpleSearch", refreshStyles);\n\n// override Story.search()\nStory.prototype.search = function(text, useCaseSensitive, useRegExp) {\n highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(), useCaseSensitive ? "mg" : "img");\n var matches = store.search(highlightHack, null, "excludeSearch");\n var q = useRegExp ? "/" : "'";\n plugins.SimpleSearchPlugin.displayResults(matches, q + text + q);\n};\n\n// override TiddlyWiki.search() to sort by relevance\nTiddlyWiki.prototype.search = function(searchRegExp, sortField, excludeTag, match) {\n var candidates = this.reverseLookup("tags", excludeTag, !!match);\n var primary = [];\n var secondary = [];\n var tertiary = [];\n for(var t = 0; t < candidates.length; t++) {\n if(candidates[t].title.search(searchRegExp) != -1) {\n primary.push(candidates[t]);\n } else if(candidates[t].tags.join(" ").search(searchRegExp) != -1) {\n secondary.push(candidates[t]);\n } else if(candidates[t].text.search(searchRegExp) != -1) {\n tertiary.push(candidates[t]);\n }\n }\n var results = primary.concat(secondary).concat(tertiary);\n if(sortField) {\n results.sort(function(a, b) {\n return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);\n });\n }\n return results;\n};\n\n} //# end of "install only once"\n//}}}
You probably won't want to but you probably should read all the info at [[TiddlyWiki.org|http://tiddlywiki.org]] \n\nI'm trying to set up a local site where we can keep our own documentation and build a local site of help. [[You can find it here.|http://library.wcsu.edu:8080/ZW-help]]\n\nAnother really good help site is [[twhelp.tiddlyspot.com|http://twhelp.tiddlyspot.com]].
We are pleased the Archives and Special Collections Unit at the Univiersity of Connecticut have added their finding aids to the CAO
Using the CAOs templates the Hartford History Center gets their first EAD finding aid searched by the CAO.
Wesleyan University's archives joined the CAO adding its 120+ finding aids to the search.
/***\n|''Name:''|ThemeBackstagePlugin|\n|''Description:''|Adds theme switcher to the backstage bar|\n|''Author:''|Martin Budden|\n|''Source:''|http://www.martinswiki.com/#ThemeBackstagePlugin |\n|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/plugins/ThemeBackstagePlugin.js |\n|''Version:''|0.1.3|\n|''Date:''|Jan 25, 2008|\n|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |\n|''~CoreVersion:''|2.3|\n\n!!Description\n// This plugin adds a theme switcher to the backstage bar\n\n!!Usage\n// Just include the plugin and mark it as systemConfig in the normal way.\n\n***/\n\n//{{{\n//# Ensure that the plugin is only installed once.\nif(!version.extensions.ThemeBackstagePlugin) {\nversion.extensions.ThemeBackstagePlugin = {installed:true};\n\nif(config.backstageTasks.indexOf('themes')==-1)\n config.backstageTasks.push('themes');\n\nmerge(config.tasks,{\n themes: {text: "themes", tooltip: "Switch theme", content: '<<themes>>'}\n});\n\nListView.columnTypes.Radio = {\n createItem: function(place,listObject,field,columnTemplate,col,row) {\n var e = createTiddlyCheckbox(place,null,listObject[field],ListView.columnTypes.Radio.onItemChange);\n if(config.browser.firefoxDate) //# only firefox reliably supports radio buttons\n e.setAttribute('type','radio');\n e.setAttribute('rowName',listObject[columnTemplate.rowName]);\n },\n onItemChange: function(ev) {\n //# ensure only one radio button is selected\n var view = findRelated(this,'TABLE');\n if(!view)\n return;\n var elements = view.getElementsByTagName('input');\n for(var i=0; i<elements.length; i++) {\n var e = elements[i];\n var t = e.getAttribute('type');\n if(t == 'radio' || t=='checkbox')\n e.checked = e.getAttribute('rowName')==this.getAttribute('rowname') ? true : false;\n }\n }\n};\n\nconfig.macros.themes = {};\n\nmerge(config.macros.themes,{\n wizardTitle: "Select theme",\n step1Title: "Available themes",\n step1Html: "<input type='hidden' name='markList'></input>",\n selectLabel: "select",\n selectPrompt: "Switch to the selected theme",\n listViewTemplate: {\n columns: [\n {name: 'Selected', field: 'option', rowName: 'theme', type: 'Radio'},\n {name: 'Theme', field: 'theme', title: "Theme", type: 'String'},\n {name: 'Author', field: 'author', title: "Author", type: 'String'},\n {name: 'Description', field: 'description', title: "Description", type: 'String'}\n ],\n rowClasses: [\n {className: 'lowlight', field: 'lowlight'}\n ]}\n });\n\nconfig.macros.themes.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var wizard = new Wizard();\n wizard.createWizard(place,this.wizardTitle);\n wizard.addStep(this.step1Title,this.step1Html);\n var markList = wizard.getElement('markList');\n var listView = document.createElement('div');\n markList.parentNode.insertBefore(listView,markList);\n wizard.setValue('listView',listView);\n wizard.setButtons([{caption:config.macros.themes.selectLabel, tooltip:config.macros.themes.selectPrompt, onClick:config.macros.themes.select}]);\n this.refreshOptions(listView);\n};\n\nconfig.macros.themes.refreshOptions = function(listView)\n{\n var options = [];\n var tiddlers = store.getTaggedTiddlers('systemTheme');\n var d = 'DefaultTheme';\n if(tiddlers.findByField('title',d) != -1) {\n var tiddler = new Tiddler(d);\n tiddler.text = store.getTiddlerText(d);\n tiddlers.push(tiddler);\n }\n tiddlers.sort(function(a,b) {return a.title < b.title ? -1 : +1;});\n for(var i=0; i<tiddlers.length; i++) {\n var t = tiddlers[i].title;\n var name = store.getTiddlerSlice(t,'Name') || t;\n name = name.trim();\n var theme = config.options.txtTheme || d;\n options.push({option:theme==name ? true : false,\n theme:name,\n author:store.getTiddlerSlice(t,'Author'),\n description:store.getTiddlerSlice(t,'Description')});\n }\n ListView.create(listView,options,this.listViewTemplate);\n};\n\nconfig.macros.themes.select = function(ev)\n{\n var theme = null;\n var wizard = new Wizard(this);\n var listView = wizard.getValue('listView');\n var elements = listView.getElementsByTagName('input');\n for(var i=0; i<elements.length; i++) {\n var e = elements[i];\n if(e.checked) {\n theme = e.getAttribute('rowName');\n break;\n }\n }\n if(backstage.currTabElem)\n removeClass(backstage.currTabElem,'backstageSelTab');\n backstage.hidePanel();\n story.switchTheme(theme);\n};\n\n} //# end of 'install only once'\n//}}}
[http://www.datamech.com/XMLForm/formGenerator4.html]\n\nThis is a crazy tool that you can load an xml file into and then edit in a form viewer.
Renata asked me how she could use ''special'' characters in her finding aids. There are basically three ways to do but I can't say which is easier. \n\n!!!Identifying Characters\n\nBefore we get to the three ways the first thing you need to do is identify the character you want to insert. To do this you have to use a ''code table''. I found [[this page|http://www.alanwood.net/unicode/latin_1_supplement.html>]] to be helpful in identifying my characters. (//There are others out there on the web, none of which I thought particularly better//). Latin-1 is where most of the characters are but you made need to look\nat some of the other code tables. \n\nEach row of the table has visual representation of the character, its code in both decimal and hex format, the named character entity and \na little explanation. The image below is an example.\n\n\n!!!The Three Ways\n\n!!!!!Enter the Codes Directly\nJust enter the code directly in your document like {{{&#192;}}} for decimal or {{{&#x00C0;}}}for hex in the example above. Notice the hex needs that additional x to tell it that the code is hexidecimal. This works for all XML documents but unless you do a lot of them I think it's hard to remember the numbers. \n\n!!!!!Use Named Character Entities\n You need to download this file ([[ent.zip|http://library.wcsu.edu/CSU/archives/wiki/uploads/ent.zip]]) and put it in the same place as the {{{ead.dtd}}} file and unzip it. \n This is going to put a bunch of iso-...ent files in that directory. \n\n The DTD loads all those entities for you so now you can use the ''names'' rather than the numbers. In the above example you would write {{{&Agrave;}}} rather than the numbers. IMO names are easier to remember than numbers. \n\n!!!!!Using Named Character Entities (but only a few) Along with Boiler Plate Text\nIf you're not using the DTD or you only have a few characters that you need to use you can embed them in you document like \n\n{{{\n<!DOCTYPE ead PUBLIC "+//ISBN 1-931666-00-8//DTD ead.dtd (Encoded Archival Description (EAD) Version 2002)//EN"\n "http://library.ccsu.edu/cpaaead/ead.dtd"[\n <!ENTITY Agrave "&#192">\n <!ENTITY collection "Long Name of Collection that I want to abbreviate">\n ]>\n}}}\n\nNotice that the entity declarations are wrapped in square brackets []. To use the entities you just enclose them as normal {{{&Agrave;}}}. The second is an example of using an entity for some standard text. \n
http://classic.tiddlywiki.com/
/***\n|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|\n|''Version:''|1.0.9 (2007-07-14)|\n|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.3|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Table of Content<html><a name="TOC"/></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>\n!Description<html><a name="Description"/></html>\nWith the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. \nEach part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts (e.g. {{{[[Quotes/BAX95]]}}} or {{{[[Hobbies|AboutMe/Hobbies]]}}}), use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.\n\n\n''Syntax:'' \n|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|\n|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//. <<br>>If you use a partName containing spaces you need to quote it (e.g. {{{"Major Overview"}}} or {{{[[Shortcut List]]}}}).|\n|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|\n|<html><i>any&nbsp;tiddler&nbsp;content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Applications<html><a name="Applications"/></html>\n!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>\nAssume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.\n\nNotice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Citation Index<html><a name="Citation"/></html>\nCreate a tiddler "Citations" that contains your "citations". \nWrap every citation with a part and a proper name. \n\n''Example''\n{{{\n<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// \nin //Proc. ICSM//, 1998.</part>\n\n<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// \nThesis, Uni Stuttgart, 2002.</part>\n\n<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// \nin //Proc. ICSM//, 1999.</part>\n}}}\n\nYou may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>\nYou may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list\n{{{\n* Item 1\n* Item 2\n* Item 3\n}}}\ninto a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.\n\nUsing the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.\n\n''Example''\n{{{\n|!Subject|!Items|\n|subject1|<<tiddler ./Cell1>>|\n|subject2|<<tiddler ./Cell2>>|\n\n<part Cell1 hidden>\n* Item 1\n* Item 2\n* Item 3\n</part>\n...\n}}}\n\nNotice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".\n\nBTW: The same approach can be used to create bullet lists with items that contain more than one line.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating Tabs<html><a name="Tabs"/></html>\nThe build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.\n\nWith the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.\n\n''Example''\nThe standard tabs at the sidebar are defined by the following eight tiddlers:\n* SideBarTabs\n* TabAll\n* TabMore\n* TabMoreMissing\n* TabMoreOrphans\n* TabMoreShadowed\n* TabTags\n* TabTimeline\n\nInstead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:\n{{{\n<<tabs txtMainTab \n Timeline Timeline SideBarTabs/Timeline \n All 'All tiddlers' SideBarTabs/All \n Tags 'All tags' SideBarTabs/Tags \n More 'More lists' SideBarTabs/More>>\n<part Timeline hidden><<timeline>></part>\n<part All hidden><<list all>></part>\n<part Tags hidden><<allTags>></part>\n<part More hidden><<tabs txtMoreTab \n Missing 'Missing tiddlers' SideBarTabs/Missing \n Orphans 'Orphaned tiddlers' SideBarTabs/Orphans \n Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>\n<part Missing hidden><<list missing>></part>\n<part Orphans hidden><<list orphans>></part>\n<part Shadowed hidden><<list shadowed>></part>\n}}}\n\nNotice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.\n\nE.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:\n{{{\n<<forEachTiddler \n sortBy 'tiddler.modified' descending \n write '(index < 100) ? "* [["+tiddler.title+"]]\sn":""'>>\n}}}\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Using Sliders<html><a name="Sliders"/></html>\nVery similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature\n\n''Example''\nIn a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.\n{{{\n...\n<<slider chkAboutDetails About/Details details "Click here to see more details">>\n<part Details hidden>\nTo give you a better overview ...\n</part>\n...\n}}}\n\nNotice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Revision history<html><a name="Revisions"/></html>\n* v1.0.9 (2007-07-14)\n** Bugfix: Error when using the SideBarTabs example and switching between "More" and "Shadow". Thanks to cmari for reporting the issue.\n* v1.0.8 (2007-06-16)\n** Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivière for reporting the issue.\n** Support "./partName" syntax inside <<tabs ...>> macro\n* v1.0.7 (2007-03-07)\n** Bugfix: <<tiddler "./partName">> does not always render correctly after a refresh (e.g. like it happens when using the "Include" plugin). Thanks to Morris Gray for reporting the bug.\n* v1.0.6 (2006-11-07)\n** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.\n* v1.0.5 (2006-03-02)\n** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.\n* v1.0.4 (2006-02-28)\n** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.\n* v1.0.3 (2006-02-26)\n** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.\n* v1.0.2 (2006-02-05)\n** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)\n* v1.0.1 (2006-01-27)\n** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.\n** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.\n* v1.0.0 (2006-01-25)\n** initial version\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Code<html><a name="Code"/></html>\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n//{{{\n//============================================================================\n// PartTiddlerPlugin\n\n// Ensure that the PartTiddler Plugin is only installed once.\n//\nif (!version.extensions.PartTiddlerPlugin) {\n\n\n\nversion.extensions.PartTiddlerPlugin = {\n major: 1, minor: 0, revision: 9,\n date: new Date(2007, 6, 14), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"\n};\n\nif (!window.abego) window.abego = {};\nif (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");\n\n//============================================================================\n// Common Helpers\n\n// Looks for the next newline, starting at the index-th char of text. \n//\n// If there are only whitespaces between index and the newline \n// the index behind the newline is returned, \n// otherwise (or when no newline is found) index is returned.\n//\nvar skipEmptyEndOfLine = function(text, index) {\n var re = /(\sn|[^\ss])/g;\n re.lastIndex = index;\n var result = re.exec(text);\n return (result && text.charAt(result.index) == '\sn') \n ? result.index+1\n : index;\n}\n\n\n//============================================================================\n// Constants\n\nvar partEndOrStartTagRE = /(<\s/part>)|(<part(?:\ss+)((?:[^>])+)>)/mg;\nvar partEndTagREString = "<\s\s/part>";\nvar partEndTagString = "</part>";\n\n//============================================================================\n// Plugin Specific Helpers\n\n// Parse the parameters inside a <part ...> tag and return the result.\n//\n// @return [may be null] {partName: ..., isHidden: ...}\n//\nvar parseStartTagParams = function(paramText) {\n var params = paramText.readMacroParams();\n if (params.length == 0 || params[0].length == 0) return null;\n \n var name = params[0];\n var paramsIndex = 1;\n var hidden = false;\n if (paramsIndex < params.length) {\n hidden = params[paramsIndex] == "hidden";\n paramsIndex++;\n }\n \n return {\n partName: name, \n isHidden: hidden\n };\n}\n\n// Returns the match to the next (end or start) part tag in the text, \n// starting the search at startIndex.\n// \n// When no such tag is found null is returned, otherwise a "Match" is returned:\n// [0]: full match\n// [1]: matched "end" tag (or null when no end tag match)\n// [2]: matched "start" tag (or null when no start tag match)\n// [3]: content of start tag (or null if no start tag match)\n//\nvar findNextPartEndOrStartTagMatch = function(text, startIndex) {\n var re = new RegExp(partEndOrStartTagRE);\n re.lastIndex = startIndex;\n var match = re.exec(text);\n return match;\n}\n\n//============================================================================\n// Formatter\n\n// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.\n//\n// @return true if a complete part section (including the end tag) could be processed, false otherwise.\n//\nvar handlePartSection = function(w) {\n var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);\n if (!tagMatch) return false;\n if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;\n\n // Parse the start tag parameters\n var arguments = parseStartTagParams(tagMatch[3]);\n if (!arguments) return false;\n \n // Continue processing\n var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);\n var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);\n if (endMatch && endMatch[1]) {\n if (!arguments.isHidden) {\n w.nextMatch = startTagEndIndex;\n w.subWikify(w.output,partEndTagREString);\n }\n w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);\n \n return true;\n }\n return false;\n}\n\nconfig.formatters.push( {\n name: "part",\n match: "<part\s\ss+[^>]+>",\n \n handler: function(w) {\n if (!handlePartSection(w)) {\n w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);\n }\n }\n} )\n\n//============================================================================\n// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers \n// as tiddlers.\n\nvar currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)\n\n// Return the match to the first <part ...> tag of the text that has the\n// requrest partName.\n//\n// @return [may be null]\n//\nvar findPartStartTagByName = function(text, partName) {\n var i = 0;\n \n while (true) {\n var tagMatch = findNextPartEndOrStartTagMatch(text, i);\n if (!tagMatch) return null;\n\n if (tagMatch[2]) {\n // Is start tag\n \n // Check the name\n var arguments = parseStartTagParams(tagMatch[3]);\n if (arguments && arguments.partName == partName) {\n return tagMatch;\n }\n }\n i = tagMatch.index+tagMatch[0].length;\n }\n}\n\n// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler \n// object, using fullName as the Tiddler's title. \n//\n// All remaining properties of the new Tiddler (tags etc.) are inherited from \n// the parentTiddler.\n// \n// @return [may be null]\n//\nvar getPart = function(parentTiddler, partName, fullName) {\n var text = parentTiddler.text;\n var startTag = findPartStartTagByName(text, partName);\n if (!startTag) return null;\n \n var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);\n var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);\n\n if (indexOfEndTag >= 0) {\n var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);\n var partTiddler = new Tiddler();\n partTiddler.set(\n fullName,\n partTiddlerText,\n parentTiddler.modifier,\n parentTiddler.modified,\n parentTiddler.tags,\n parentTiddler.created);\n partTiddler.abegoIsPartTiddler = true;\n return partTiddler;\n }\n \n return null;\n}\n\n// Hijack the store.fetchTiddler to recognize the "part" addresses.\n//\nvar hijackFetchTiddler = function() {\n var oldFetchTiddler = store.fetchTiddler ;\n store.fetchTiddler = function(title) {\n var result = oldFetchTiddler.apply(this, arguments);\n if (!result && title) {\n var i = title.lastIndexOf('/');\n if (i > 0) {\n var parentName = title.substring(0, i);\n var partName = title.substring(i+1);\n var parent = (parentName == ".") \n ? store.resolveTiddler(currentParent)\n : oldFetchTiddler.apply(this, [parentName]);\n if (parent) {\n return getPart(parent, partName, parent.title+"/"+partName);\n }\n }\n }\n return result; \n };\n};\n\n// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. \n// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.\n// Otherwise hijack now.\nif (!store) {\n var oldRestartFunc = restart;\n window.restart = function() {\n hijackFetchTiddler();\n oldRestartFunc.apply(this,arguments);\n };\n} else\n hijackFetchTiddler();\n\n\n\n\n// The user must not edit a readOnly/partTiddler\n//\n\nconfig.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;\n\nTiddler.prototype.isReadOnly = function() {\n // Tiddler.isReadOnly was introduced with TW 2.0.6.\n // For older version we explicitly check the global readOnly flag\n if (config.commands.editTiddler.oldIsReadOnlyFunction) {\n if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;\n } else {\n if (readOnly) return true;\n }\n\n return this.abegoIsPartTiddler;\n}\n\nconfig.commands.editTiddler.handler = function(event,src,title)\n{\n var t = store.getTiddler(title);\n // Edit the tiddler if it either is not a tiddler (but a shadowTiddler)\n // or the tiddler is not readOnly\n if(!t || !t.abegoIsPartTiddler)\n {\n clearMessage();\n story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n}\n\n// To allow the "./partName" syntax in macros we need to hijack \n// the invokeMacro to define the "currentParent" while it is running.\n// \nvar oldInvokeMacro = window.invokeMacro;\nfunction myInvokeMacro(place,macro,params,wikifier,tiddler) {\n var oldCurrentParent = currentParent;\n if (tiddler) currentParent = tiddler;\n try {\n oldInvokeMacro.apply(this, arguments);\n } finally {\n currentParent = oldCurrentParent;\n }\n}\nwindow.invokeMacro = myInvokeMacro;\n\n// To correctly support the "./partName" syntax while refreshing we need to hijack \n// the config.refreshers.tiddlers to define the "currentParent" while it is running.\n// \n(function() {\n var oldTiddlerRefresher= config.refreshers.tiddler;\n config.refreshers.tiddler = function(e,changeList) {\n var oldCurrentParent = currentParent;\n try {\n currentParent = e.getAttribute("tiddler");\n return oldTiddlerRefresher.apply(this,arguments);\n } finally {\n currentParent = oldCurrentParent;\n }\n };\n})();\n\n// Support "./partName" syntax inside <<tabs ...>> macro\n(function() {\n var extendRelativeNames = function(e, title) {\n var nodes = e.getElementsByTagName("a");\n for(var i=0; i<nodes.length; i++) {\n var node = nodes[i];\n var s = node.getAttribute("content");\n if (s && s.indexOf("./") == 0)\n node.setAttribute("content",title+s.substr(1));\n }\n };\n var oldHandler = config.macros.tabs.handler;\n config.macros.tabs.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n var result = oldHandler.apply(this,arguments);\n if (tiddler)\n extendRelativeNames(place, tiddler.title);\n return result;\n };\n})();\n\n// Scroll the anchor anchorName in the viewer of the given tiddler visible.\n// When no tiddler is defined use the tiddler of the target given event is used.\nwindow.scrollAnchorVisible = function(anchorName, tiddler, evt) {\n var tiddlerElem = null;\n if (tiddler) {\n tiddlerElem = document.getElementById(story.idPrefix + tiddler);\n }\n if (!tiddlerElem && evt) {\n var target = resolveTarget(evt);\n tiddlerElem = story.findContainingTiddler(target);\n }\n if (!tiddlerElem) return;\n\n var children = tiddlerElem.getElementsByTagName("a");\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var name = child.getAttribute("name");\n if (name == anchorName) {\n var y = findPosY(child);\n window.scrollTo(0,y);\n return;\n }\n }\n}\n\n} // of "install only once"\n//}}}\n\n/***\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n
[img[http://archives.library.wcsu.edu/images/cao/cao5.png]]\n<<tagging [[News Item]]>>
Notice in the example below the mainagencycode="US-ctdabn" \n\nThis attribute MUST be present in the eadid tag to identify which repository the finding aid is from.\n\nYou may determine whether the Library of Congress has a code for your repository by searching for the code at this link:\nhttp://www.loc.gov/marc/organizations/org-search.php\n\nYou then append to the begining of that code the following (uppercase): "US-"\n\nFor example:\n{{{\n<eadid mainagencycode="US-ctdabn" url="http://library.wcsu.edu/web/about/units/archives/findingaids/academicPrograms.xml" identifier="RG 6">academicPrograms</eadid>\n}}}\nIf the library of congress does not have a code for your repository, the CAO will establish one for your finding aids and that will need to be placed as an attribute in the eadid of all your repository's finding aids.\n\n<<tag Coding>>
/***\n|Name|TagCloudPlugin|\n|Source|http://www.TiddlyTools.com/#TagCloudPlugin|\n|Version|1.6.0|\n|Author|Eric Shulman|\n|Original Author|Clint Checketts|\n|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides||\n|Description|present a 'cloud' of tags (or links) using proportional font display|\n!Usage\n<<<\n{{{\n<<cloud type action:... limit:... tag tag tag ...>>\n<<cloud type action:... limit:... +TiddlerName>>\n<<cloud type action:... limit:... =tagvalue>>\n}}}\nwhere:\n* //type// is a keyword, one of:\n** ''tags'' (default) - displays a cloud of tags, based on frequency of use\n** ''links'' - displays a cloud of tiddlers, based on number of links //from// each tiddler\n** ''references'' - displays a cloud of tiddlers, based on number of links //to// each tiddler\n* ''action:popup'' (default) - clicking a cloud item shows a popup with links to related tiddlers<br>//or//<br> ''action:goto'' - clicking a cloud item immediately opens the tiddler corresponding to that item\n* ''limit:N'' (optional) - restricts the cloud display to only show the N most popular tags/links\n* ''tag tag tag...'' (or ''title title title'' if ''links''/''references'' is used)<br>shows all tags/links in the document //except// for those listed as macro parameters\n* ''+TiddlerName''<br>shows tags/links read from a space-separated, bracketed list stored in a separate tiddler.\n* ''=tagvalue'' (//only if type=''tags''//)<br>shows only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)\n//note: for backward-compatibility, you can also use the macro {{{<<tagCloud ...>>}}} in place of {{{<<cloud ...>>}}}//\n<<<\n!Examples\n<<<\n//all tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//\n{{{<<cloud systemConfig excludeMissing script>>}}}\n{{groupbox{<<cloud systemConfig excludeMissing script>>}}}\n//top 10 tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//\n{{{<<cloud limit:10 systemConfig excludeMissing script>>}}}\n{{groupbox{<<cloud limit:10 systemConfig excludeMissing script>>}}}\n//tags listed in// [[FavoriteTags]]\n{{{<<cloud +FavoriteTags>>}}}\n{{groupbox{<<cloud +FavoriteTags>>}}}\n//links to tiddlers tagged with 'package'//\n{{{<<cloud action:goto =package>>}}}\n{{groupbox{<<cloud action:goto =package>>}}}\n//top 20 most referenced tiddlers//\n{{{<<cloud references limit:20>>}}}\n{{groupbox{<<cloud references limit:20>>}}}\n//top 20 tiddlers that contain the most links//\n{{{<<cloud links limit:20>>}}}\n{{groupbox{<<cloud links limit:20>>}}}\n<<<\n!Revisions\n<<<\n2009.02.26 [1.6.0] added {{{action:...}}} parameter to apply popup vs. goto action when clicking cloud items\n2009.02.05 [1.5.0] added ability to show links or back-links (references) instead of tags and renamed macro to {{{<<cloud>>}}} to reflect more generalized usage.\n2008.12.16 [1.4.2] corrected group calculation to prevent 'group=0' error\n2008.12.16 [1.4.1] revised tag filtering so excluded tags don't affect calculations\n2008.12.15 [1.4.0] added {{{limit:...}}} parameter to restrict the number of tags displayed to the top N most popular\n2008.11.15 [1.3.0] added {{{+TiddlerName}}} parameter to include only tags that are listed in the indicated tiddler\n2008.09.05 [1.2.0] added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)\n2008.07.03 [1.1.0] added 'segments' property to macro object. Extensive code cleanup\n<<<\n!Code\n***/\n//{{{\nversion.extensions.TagCloudPlugin= {major: 1, minor: 6 , revision: 0, date: new Date(2009,2,26)};\n//Originally created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman\n//Currently maintained and enhanced by Eric Shulman\n//}}}\n//{{{\nconfig.macros.cloud = {\n tagstip: "%1 tiddlers tagged with '%0'",\n refslabel: " (%0 references)",\n refstip: "%1 tiddlers have links to '%0'",\n linkslabel: " (%0 links)",\n linkstip: "'%0' has links to %1 other tiddlers",\n groups: 9,\n init: function() {\n config.macros.tagCloud=config.macros.cloud; // for backward-compatibility\n config.shadowTiddlers.TagCloud='<<cloud>>';\n config.shadowTiddlers.StyleSheetTagCloud=\n '/*{{{*/\sn'\n +'.tagCloud span {line-height: 3.5em; margin:3px;}\sn'\n +'.tagCloud1{font-size: 80%;}\sn'\n +'.tagCloud2{font-size: 100%;}\sn'\n +'.tagCloud3{font-size: 120%;}\sn'\n +'.tagCloud4{font-size: 140%;}\sn'\n +'.tagCloud5{font-size: 160%;}\sn'\n +'.tagCloud6{font-size: 180%;}\sn'\n +'.tagCloud7{font-size: 200%;}\sn'\n +'.tagCloud8{font-size: 220%;}\sn'\n +'.tagCloud9{font-size: 240%;}\sn'\n +'/*}}}*/\sn';\n setStylesheet(store.getTiddlerText('StyleSheetTagCloud'),'tagCloudsStyles');\n },\n getLinks: function(tiddler) { // get list of links to existing tiddlers and shadows\n if (!tiddler.linksUpdated) tiddler.changed();\n var list=[]; for (var i=0; i<tiddler.links.length; i++) {\n var title=tiddler.links[i];\n if (store.isShadowTiddler(title)||store.tiddlerExists(title))\n list.push(title);\n }\n return list;\n },\n handler: function(place,macroName,params) {\n // unpack params\n var inc=[]; var ex=[]; var limit=0; var action='popup';\n var links=(params[0]&&params[0].toLowerCase()=='links'); if (links) params.shift();\n var refs=(params[0]&&params[0].toLowerCase()=='references'); if (refs) params.shift();\n if (params[0]&&params[0].substr(0,7).toLowerCase()=='action:')\n action=params.shift().substr(7).toLowerCase();\n if (params[0]&&params[0].substr(0,6).toLowerCase()=='limit:')\n limit=parseInt(params.shift().substr(6));\n if (params.length) {\n if (params[0].substr(0,1)=='+') { // get tag list from tiddler\n var inc=store.getTiddlerText(params[0].substr(1),'').readBracketedList();\n } else if (params[0].substr(0,1)=='=') { // get tag list using tagged tags\n var tagged=store.getTaggedTiddlers(params[0].substr(1));\n for (var t=0; t<tagged.length; t++) inc.push(tagged[t].title);\n } else ex=params; // exclude params\n }\n // get all items, include/exclude specific items\n var items=[];\n var list=(links||refs)?store.getTiddlers('title','excludeLists'):store.getTags();\n for (var t=0; t<list.length; t++) {\n var title=(links||refs)?list[t].title:list[t][0];\n if (links) var count=this.getLinks(list[t]).length;\n else if (refs) var count=store.getReferringTiddlers(title).length;\n else var count=list[t][1];\n if ((!inc.length||inc.contains(title))&&(!ex.length||!ex.contains(title)))\n items.push({ title:title, count:count });\n }\n if(!items.length) return;\n // sort by decending count, limit results (optional)\n items=items.sort(function(a,b){return(a.count==b.count)?0:(a.count>b.count?-1:1);});\n while (limit && items.length>limit) items.pop();\n // find min/max and group size\n var most=items[0].count;\n var least=items[items.length-1].count;\n var groupSize=(most-least+1)/this.groups;\n // sort by title and draw the cloud of items\n items=items.sort(function(a,b){return(a.title==b.title)?0:(a.title>b.title?1:-1);});\n var cloudWrapper = createTiddlyElement(place,'div',null,'tagCloud',null);\n for (var t=0; t<items.length; t++) {\n cloudWrapper.appendChild(document.createTextNode(' '));\n var group=Math.ceil((items[t].count-least)/groupSize)||1;\n var className='tagCloudtag tagCloud'+group;\n var tip=refs?this.refstip:links?this.linkstip:this.tagstip;\n tip=tip.format([items[t].title,items[t].count]);\n if (action=='goto') { // TAG/LINK/REFERENCES GOTO\n var btn=createTiddlyLink(cloudWrapper,items[t].title,true,className);\n btn.title=tip;\n btn.style.fontWeight='normal';\n } else if (!links&&!refs) { // TAG POPUP\n var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,onClickTag,className);\n btn.setAttribute('tag',items[t].title);\n } else { // LINK/REFERENCES POPUP\n var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,\n function(ev) { var e=ev||window.event; var cmt=config.macros.cloud;\n var popup = Popup.create(this);\n var title = this.getAttribute('tiddler');\n var count = this.getAttribute('count');\n var refs = this.getAttribute('refs')=='T';\n var links = this.getAttribute('links')=='T';\n var label = (refs?cmt.refslabel:cmt.linkslabel).format([count]);\n createTiddlyLink(popup,title,true);\n createTiddlyText(popup,label);\n createTiddlyElement(popup,'hr');\n if (refs) {\n popup.setAttribute('tiddler',title);\n config.commands.references.handlePopup(popup,title);\n }\n if (links) {\n var tiddler = store.fetchTiddler(title);\n var links=config.macros.cloud.getLinks(tiddler);\n for(var i=0;i<links.length;i++)\n createTiddlyLink(createTiddlyElement(popup,'li'),\n links[i],true);\n }\n Popup.show();\n e.cancelBubble=true; if(e.stopPropagation) e.stopPropagation();\n return false;\n }, className);\n btn.setAttribute('tiddler',items[t].title);\n btn.setAttribute('count',items[t].count);\n btn.setAttribute('refs',refs?'T':'F');\n btn.setAttribute('links',links?'T':'F');\n btn.title=tip;\n }\n }\n }\n};\n//}}}
<tabs meeting>\n<tab Agenda>\nProposed agenda for June 10th meeting at the State Archives:\n * Improved functionality\n * Moving forward... outreach blurb, discuss content and distribution\n * Promotion - NEA other venues?\n * Technical issues encountered so far\n * Encoding progress\n * Other business?\n\n</tab>\n<tab Minutes>\nProposed agenda for June 10th meeting at the State Archives:\n * Improved functionality \n- javascript provided for stylesheets that find keywords\n- File counts for each repository\n- bug fixes\n- descriptive pages added\n\n * Moving forward... outreach blurb, discuss content and distribution\n- members will make content suggestions for descriptive pages\n- venues discussed for presenting the CAO to prospective repositories.\n * Promotion - NEA other venues?\n- article discussed for publiscation in NEA - Brian and Renata\n * Technical issues encountered so far\n- discussed various ways to insure clean coding\n * Encoding progress\n- progress discussed among the CSUs and State Library with bringing more of the content into the CAO\n * Other business?\n- meet again in Sept\n</tab>\n</tabs>
/***\n|''Name:''|FootnotesPlugin|\n|''Description:''|Create automated tiddler footnotes.|\n|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|\n|''Source:''|http://tw.lewcid.org/#FootnotesPlugin|\n|''Code Repository:''|http://tw.lewcid.org/svn/plugins|\n|''Version:''|2.01|\n|''Date:''|10/25/07|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.2.2|\n\n!!Usage:\n*To create a footnote, just put the footnote text inside triple backticks.\n*Footnotes are numbered automatically, and listed at the bottom of the tiddler.\n*{{{Creating a footnote is easy. ```This is the text for my footnote```}}}\n*[[Example|FootnotesDemo]]\n***/\n// /%\n//!BEGIN-PLUGIN-CODE\nconfig.footnotesPlugin = {\n backLabel: "back",\n prompt:"show footnote"\n};\n\nconfig.formatters.unshift( {\n name: "footnotes",\n match: "```",\n lookaheadRegExp: /```((?:.|\sn)*?)```/g,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart )\n {\n var tiddler = story.findContainingTiddler(w.output);\n if (!tiddler.notes)\n tiddler.notes = [];\n var title = tiddler.getAttribute("tiddler");\n tiddler.notes.pushUnique(lookaheadMatch[1]);\n var pos = tiddler.notes.indexOf(lookaheadMatch[1]) + 1;\n createTiddlyButton(w.output,pos,config.footnotesPlugin.prompt,function(){var x = document.getElementById(title+"ftn"+pos);window.scrollTo(0,ensureVisible(x)+(ensureVisible(x)<findScrollY()?(findWindowHeight()-x.offsetHeight):0));return false;},"ftnlink",title+"ftnlink"+pos); \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n});\n\nold_footnotes_refreshTiddler = Story.prototype.refreshTiddler;\nStory.prototype.refreshTiddler = function(title,template,force)\n{\n var tiddler = old_footnotes_refreshTiddler.apply(this,arguments);\n if (tiddler.notes && tiddler.notes.length)\n {\n var holder = createTiddlyElement(null,"div",null,"footnoteholder");\n var list = createTiddlyElement(holder,"ol",title+"footnoteholder");\n for (var i=0; i<tiddler.notes.length; i++)\n {\n var ftn = createTiddlyElement(list,"li",title+"ftn"+(i+1),"footnote");\n wikify(tiddler.notes[i]+" ",ftn);\n createTiddlyButton(ftn,"["+config.footnotesPlugin.backLabel+"]",config.footnotesPlugin.backLabel,function(){window.scrollTo(0,ensureVisible(document.getElementById(this.parentNode.id.replace("ftn","ftnlink"))));return false;},"ftnbklink");\n }\n var count = tiddler.childNodes.length;\n for (var j=0; j<count; j++){\n if(hasClass(tiddler.childNodes[j],"viewer")){\n var viewer = tiddler.childNodes[j]; \n }\n }\n viewer.appendChild(holder);\n tiddler.notes = [];\n }\n return tiddler;\n};\n\nsetStylesheet(\n".tiddler a.ftnlink {vertical-align: super; font-size: 0.8em; color:red;}\sn"+\n".tiddler a.ftnlink:hover, .tiddler .footnoteholder a.ftnbklink:hover{color:#fff;background:red;}\sn"+\n".tiddler div.footnoteholder{margin:1.8em 1.0em; padding:0.1em 1.0em 0.1em 1.0em ;border-left: 1px solid #ccc;}"+\n".tiddler footnoteholder ol {font-size: 0.9em; line-height: 1.2em;}\sn"+\n".tiddler .footnoteholder li.footnote {margin: 0 0 5px 0;}\sn"+\n".tiddler .footnoteholder a.ftnbklink{color:red;}\sn","FootNotesStyles");\n//!END-PLUGIN-CODE\n// %/
CAO next steps discussed and the Connecticut Digital Archive (CTDA).
/***\n|''Name:''|Plugin: ZiddlyWiki|\n|''Description:''|Client-side component of the ZiddlyWiki server-side for TiddlyWiki|\n|''Version:''|1.0.0|\n|''Date:''|Sep 30, 2006|\n|''Source:''|http://ziddlywiki.com|\n|''Author:''|BobMcElrath|\n|''Email:''|my first name at my last name dot org|\n|''License:''|[[GPL open source license|http://www.gnu.org/licenses/gpl.html]]|\n|''~CoreVersion:''|2.1.0|\n!Description\nThis plugin is useful only in conjunction with the ZiddlyWiki server-side for\nTiddlyWiki. This plugin is automatically added to any TiddlyWiki downloaded\nfrom a ZiddlyWiki server, and should not be added by hand to your TiddlyWiki.\n\nIf you want to use the ZiddlyWiki server, install that first, and you will\nautomatically get this plugin.\n!My Server\nThis ZiddlyWiki lives at: \n{{{\n http://library.wcsu.edu/cao/about\n}}}\n!API\n{{{\n action=get\n}}}\n!Code\n***/\n//{{{\n// Place to store my junk\nif(typeof zw == "undefined") var zw = {};\nconfig.options.checkUnsavedChanges = false;\nconfig.options.confirmExit = false;\n//zw.ieurl = (navigator.appVersion.indexOf('MSIE') > -1) ? 'ie=1&' : '';\nzw.editingTiddlers = {};\nzw.dirty = false; // flag for when ZW was unable to save something\nzw.serverUrl = "http://library.wcsu.edu/cao/about";\n\nconfig.messages.loginToEdit = 'You must be logged in to make changes. Viewing source instead.';\nconfig.messages.errorDeleting = 'An error has occurred. Review your Zope error log for details.';\nconfig.messages.errorSaving = 'An error has occurred. Review your Zope error log for details. If you navigate away from this page now, you will lose your changes.';\nconfig.messages.protectedTiddler = 'You are not allowed to edit here. Click OK to view the source.';\nconfig.messages.lockedTiddler = 'This tiddler is currently being edited by %s. Please try again in a few minutes.';\nconfig.messages.lockedTiddlerYou = 'This tiddler is currently locked by you. Would you like to edit anyway?';\nconfig.messages.viewRevisionTooltip = 'View this revision.';\nconfig.messages.exportLinkLabel = 'export to file';\nconfig.messages.exportLinkPrompt = 'Export to a TiddlyWiki file';\nconfig.messages.importLinkLabel = 'import from file';\nconfig.messages.importLinkPrompt = 'Import from a TiddlyWiki file';\nconfig.messages.unsavedChangesWarning = 'Something has gone wrong and ZiddlyWiki was unable to save all changes to the server.\snIf you navigate away from this page, those changes will be lost.\snPress OK to save a backup to a local file.';\n\nconfig.views.wikified.toolbarRevisions = {text: "revisions", tooltip: "View another revision of this tiddler", popupNone: "No revisions"};\n\n// Shadow tiddlers that are protected\nconfig.protectedTiddlers = ['DefaultTiddlers', 'MainMenu'];\n\nconfig.replaceBodyCharacters = [\n \n];\n\nconfig.macros.login = {\n label: 'login',\n prompt: 'Log into the system',\n sizeTextbox: 15,\n // FIXME onmouseover, etc... do these cause a problem? Add (?!onmouseover|onmouseout...)\n innerHTMLSafe: /^<div( ([a-zA-Z0-9_]+)="[^"]*")+>[^<>]*<\s/div>$/,\n handler: function(place) {\n if(zw.loggedIn) {\n var link = createTiddlyLink(place, zw.username, true);\n if(location.protocol == "file:") {\n link.innerHTML = zw.username + ' (offline)';\n } else {\n link.innerHTML = zw.username + ' (logged in)';\n createTiddlyButton(place, "logout", "Log out of the system", this.doLogout);\n }\n } else {\n // FIXME Only make login form if cookie-based login are enabled.\n var form = document.createElement("form");\n form.action = "?action=get&title=ZiddlyStatus";\n var u = createTiddlyElement(form, "input", "zw_username");\n u.value = "YourName";\n u.onclick = this.clearInput;\n u.size = this.sizeTextbox;\n u.onkeypress = this.enterSubmit;\n u.name = "__ac_name";\n var p = createTiddlyElement(form, "input", "zw_password");\n p.value = "password";\n p.size = this.sizeTextbox;\n p.onclick = this.clearInput;\n p.onkeypress = this.enterSubmit;\n p.name = "__ac_password";\n place.appendChild(form);\n createTiddlyButton(place,this.label,this.prompt,this.doLogin);\n }\n },\n clearInput: function(e) {\n var u = document.getElementById("zw_username");\n var p = document.getElementById("zw_password");\n if((e.target == u || e.target == p) && p.type != "password") { \n u.value = ''; \n p.value=''; \n p.type = "password";\n }\n },\n enterSubmit: function(e) {\n if(e.keyCode == 13 || e.keyCode == 10) config.macros.login.doLogin(e);\n },\n doLogin: function(e) {\n clearMessage();\n displayMessage('Logging in...');\n var u = document.getElementById("zw_username");\n var p = document.getElementById("zw_password");\n zw.loggingIn = true;\n ajax.post(zw.serverUrl.replace("http://","http://"+u.value+":"+p.value+"@")\n ,zw.addTiddler,\n "action=get&title=ZiddlyStatus&__ac_name="+u.value+"&__ac_password="+p.value);\n },\n doLogout: function(e) {\n clearMessage();\n displayMessage('Logging out...');\n zw.loggingIn=false;\n // FIXME this will fail if " " is a valid username\n ajax.post(zw.serverUrl.replace("http://","http:// :@")\n ,zw.addTiddler,\n "action=get&title=ZiddlyStatus&__ac_name=&__ac_password=");\n },\n statusChange: function() {\n var oldreadOnly = readOnly;\n config.options.chkHttpReadOnly = (zw.loggedIn || zw.anonEdit || location.protocol == "file:") ? false:true;\n readOnly = !zw.loggedIn;\n // Check for new tiddlers\n var numtofetch = 0;\n var missingtiddlers = "";\n for(var t in zw.tiddlerList) {\n if(!store.fetchTiddler(t.htmlDecode())) {\n numtofetch++;\n missingtiddlers += "\sn" + t;\n }\n }\n var fetched = 0;\n this.fetchlist = [];\n if(zw.tiddlerList.length == 0) {\n clearMessage();\n } else for(var t in zw.tiddlerList) {\n if(!store.fetchTiddler(t.htmlDecode())) {\n var callback = zw.addTiddler;\n this.fetchlist.push(t);\n if(++fetched == numtofetch) \n callback = config.macros.login.addLastTiddler;\n ajax.get('?action=get&title=' + encodeURIComponent(t.htmlDecode())\n + "&" + zw.no_cache(), callback)\n }\n }\n if(oldreadOnly != readOnly || numtofetch == 0) {\n refreshDisplay(["ViewTemplate", "EditTemplate"]);\n story.refreshAllTiddlers();\n refreshAll();\n }\n },\n doneLoginout: function() {\n var evalme = store.fetchTiddler("ZiddlyStatus").text;\n window.eval(evalme);\n readOnly = !zw.loggedIn;\n store.notify(["ZiddlyStatus"], true);\n if(!zw.loggedIn && zw.loggingIn) { // still not logged in.\n clearMessage();\n displayMessage("Authentication failed. Did you type your username and password correctly?");\n }\n if(!zw.loggingIn || (zw.loggedIn && zw.loggingIn)) clearMessage();\n return true;\n },\n addLastTiddler: function(str,status) {\n zw.addTiddler(str,status);\n refreshAll(); // Just redraw everything.\n }\n};\n// This causes our doneLogin method above to be called on startup.\nstore.addNotification("ZiddlyStatus", config.macros.login.statusChange);\n\n// Dynamically load a tiddler\nzw.loadTiddler = function(t) {\n var str = ajax.gets('?action=get&title=' + encodeURIComponent(t.htmlDecode())\n + "&" + zw.no_cache());\n return zw.addTiddler(str, 200);\n}\n\nzw.addTiddler = function(str,status) {\n var tiddler = new Tiddler();\n var d = document.createElement("div");\n if(!str.match(config.macros.login.innerHTMLSafe)) { \n if(!confirm("This tiddler appears to contain HTML and may be dangerous\sn\sn"+str)) \n return tiddler;\n }\n d.innerHTML = str; // FIXME dangerous -- response could contain <script>\n var title = store.getLoader().getTitle(store, d.firstChild);\n if(status == 404) { // not found\n store.zw_removeTiddler(title);\n } else if(status == 200) { // okay\n tiddler = store.getLoader().internalizeTiddler(store, tiddler, title, d.firstChild);\n tiddler.changed();\n store.addTiddler(tiddler);\n if(typeof store.getValue(title, "oldtitle") != "undefined") {\n store.setValue(title, "renamedSubTitle", \n "(renamed from "+store.getValue(title, "oldtitle")+")");\n }\n }\n if(tiddler.title == "ZiddlyStatus")\n config.macros.login.doneLoginout();\n refreshDisplay(title);\n return tiddler;\n}\n\nTiddler.prototype.getSubtitle = function() {\n var theModifier = this.modifier;\n if(!theModifier)\n theModifier = config.messages.subtitleUnknown;\n var theModified = this.modified;\n if(theModified)\n theModified = theModified.toLocaleString();\n else\n theModified = config.messages.subtitleUnknown;\n return(config.messages.tiddlerLinkTooltip.format([this.title,theModifier,\ntheModified]));\n\n}\n\nconfig.macros.ziddlyversion = {\n handler: function(place) {\n createTiddlyElement(place,"span",null,null,version.major + "." \n + version.minor + "." + version.revision \n + (version.beta ? "(b" + version.beta + ")" : "") + "." \n + version.extensions.ZiddlyWiki);\n }\n};\n\nconfig.macros.exportLink = {\n label: config.messages.exportLinkLabel,\n prompt: config.messages.exportLinkPrompt,\n handler: function(place) { \n if(location.protocol == "file:") {\n this.label = config.macros.saveChanges.label;\n this.prompt = config.macros.saveChanges.prompt;\n this.accessKey = config.macros.saveChanges.accessKey;\n config.macros.saveChanges.handler(place);\n } else {\n createTiddlyButton(place,this.label,this.prompt,function(){\n location.href='?action=export';return false;\n });\n }\n }\n};\n\nconfig.macros.importLink = {\n label: config.messages.importLinkLabel,\n prompt: config.messages.importLinkPrompt,\n handler: function(place) {\n if(zw.loggedIn || zw.anonEdit) {\n createTiddlyButton(place,this.label,this.prompt,function(){\n displayTiddler(null, "ImportTiddlers");\n });\n }\n }\n};\n\nTiddlyWiki.prototype.zw_removeTiddler = TiddlyWiki.prototype.removeTiddler;\nTiddlyWiki.prototype.removeTiddler = function(title) {\n displayMessage("Deleting '"+title+"' on server...");\n ajax.post(zw.serverUrl, zw.addTiddler, 'action=delete&title=' + encodeURIComponent(title) + '&' + zw.no_cache());\n return true;\n};\n\nTiddlyWiki.prototype.zw_saveTiddler = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {\n displayMessage("Saving '"+title+"'...");\n newBody = replaceBodyCharacters(newBody);\n var tiddler = this.zw_saveTiddler(title,newTitle,newBody,modifier,modified,tags,fields);\n var callback = function(r,status){\n var newtiddler = zw.addTiddler(r,status);\n if(!newtiddler) {\n alert("ZiddlyWiki error: The tiddler '"+title+"' that I just tried to save\sn"\n +"doesn't exist after the save! Response ("+status+") was: \sn"+r);\n zw.dirty = true;\n } else if(newtiddler.escapeLineBreaks().htmlEncode() != tiddler.escapeLineBreaks().htmlEncode()) {\n alert("ZiddlyWiki error: Saved tiddler '"+title+"' is not the same as what was just saved."\n +"\sn-------------------before---------------------\sn"+tiddler.escapeLineBreaks().htmlEncode()\n +"\sn-------------------after----------------------\sn"+newtiddler.escapeLineBreaks().htmlEncode()\n );\n zw.dirty = true;\n }\n };\n// FIXME by using async ajax here, a reload timeout may come between the save\n// and the callback's return, which causes the tiddler to be double-rendered.\n ajax.post(zw.serverUrl, callback, 'action=save&oldtitle=' + encodeURIComponent(title) + '&title=' \n + encodeURIComponent(newTitle) + '&body=' + encodeURIComponent(newBody) + '&tags=' \n + encodeURIComponent(tags) + '&modified=' \n + encodeURIComponent((modified||store.fetchTiddler(title).modified).convertToYYYYMMDDHHMM()) \n + '&' + zw.no_cache());\n clearMessage();\n return tiddler;\n};\n\nfunction replaceBodyCharacters(body) {\n var chars = config.replaceBodyCharacters;\n for(var i=0; i<chars.length; i++) {\n body = body.replace(chars[i][0], chars[i][1]);\n }\n return body;\n};\n\nzw.no_cache = function() {return new String((new Date()).getTime())};\n\nconfig.commands.revisions = {\n text: config.views.wikified.toolbarRevisions.text,\n tooltip: config.views.wikified.toolbarRevisions.tooltip,\n popupNone: config.views.wikified.toolbarRevisions.popupNone,\n hideShadow: true,\n handler: function(event,src,title) {\n var popup = Popup.create(src);\n Popup.show(popup,false);\n var callback = function(r,status) {\n if(popup) {\n if(status != 200) {\n createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),\n config.views.wikified.toolbarRevisions.popupNone);\n } else {\n var revs = r.split('\sn');\n for(var i=0; i<revs.length; i++) {\n var parts = revs[i].split(' ');\n if(parts.length>1) {\n var modified = Date.convertFromYYYYMMDDHHMM(parts[0]);\n var key = parts[1];\n var modifier = parts[2];\n var button = createTiddlyButton(createTiddlyElement(popup,"li"), modified.toLocaleString() +" "+ modifier, \n config.messages.viewRevisionTooltip, \n function(){\n displayTiddlerRevision(this.getAttribute('tiddlerTitle'), \n this.getAttribute('revision'), this); \n return false;\n }, 'tiddlyLinkExisting tiddlyLink');\n button.setAttribute('tiddlerTitle', title);\n button.setAttribute('revision', key);\n var t = store.fetchTiddler(title);\n if(!t) alert("Attempt to find revisions for non-existant tiddler '"+title+"'!");\n if(t && (store.getValue(t, 'revision') == key))\n button.className = 'revisionCurrent';\n if(i == 0)\n this.latestRevision = key;\n }\n }\n }\n }\n };\n ajax.get('?action=get_revisions&title=' + encodeURIComponent(title.htmlDecode()) + '&' + zw.no_cache(), callback);\n event.cancelBubble = true;\n if (event.stopPropagation) event.stopPropagation();\n return true;\n }\n}\n\nfunction displayTiddlerRevision(title, revision, src, updateTimeline) {\n var tiddler = store.fetchTiddler(title);\n// We already have the latest version\n if(tiddler && store.getValue(tiddler, 'revision') == revision) return;\n displayMessage("Loading revision information for '"+title+"'...");\n revision = revision ? '&revision=' + revision : '';\n ajax.get('?action=get&title=' + encodeURIComponent(title.htmlDecode()) + revision \n + '&' + zw.no_cache(), displayTiddlerRevisionCallback)\n};\n\nfunction displayTiddlerRevisionCallback(str,status) {\n store.suspendNotifications(); // To prevent multiple redraws\n var tiddler = zw.addTiddler(str,status);\n store.setValue(tiddler.title, "historicalSubTitle", "");\n if(tiddler.tags.contains('deleted'))\n store.setValue(tiddler.title, "historicalSubTitle", \n store.getValue(tiddler.title, "historicalSubTitle")+" (deleted)");\n if(latestRevision != store.getValue(tiddler.title, "revision"))\n store.setValue(tiddler.title, "historicalSubTitle", \n store.getValue(tiddler.title, "historicalSubTitle")+" (historical revision)");\n store.setValue(tiddler.title, "latestRevision", latestRevision);\n story.refreshTiddler(tiddler.title, DEFAULT_VIEW_TEMPLATE, true);\n store.resumeNotifications();\n clearMessage();\n}\n\nTiddler.prototype.isReadOnly = function() {\n if(store.getValue(this.title, "readonly") == "true") return true;\n if(zw.isAdmin) return false;\n if(zw.loggedIn && this.modifier == zw.username) return false;\n if(location.protocol == "file:") return false;\n return isProtectedTiddler(this.title) || !(zw.anonEdit || zw.loggedIn);\n};\n\n// Add the protected tag to tiddlers in config.protectedTiddlers\nTiddler.prototype.zw_set = Tiddler.prototype.set;\nTiddler.prototype.set = function(title,text,modifier,modified,tags,created) {\n if(!tags) tags = [];\n if(typeof tags == "string") tags = tags.readBracketedList();\n if(!store.tiddlerExists(title) && store.isShadowTiddler(title)) {\n for(var i=0;i<config.protectedTiddlers.length;i++) {\n if(config.protectedTiddlers[i] == title) {\n tags.push('protected');\n break;\n }\n }\n }\n return this.zw_set(title, text, modifier, modified, tags, created);\n}\n\nconfig.commands.editTiddler.zw_handler = config.commands.editTiddler.handler;\nconfig.commands.editTiddler.handler = function(event,src,title) {\n if(readOnly) {\n this.zw_handler(event,src,title);\n } else {\n displayMessage("Loading '"+title+"'...");\n var obj = this;\n var callback = function(r,status) {\n clearMessage();\n if(status == 404) { // doesn't exist (might be a shadow tiddler)\n zw.editingTiddlers[title] = true;\n obj.zw_handler(event,src,title);\n } else if(status == 200) {\n var tiddler = zw.addTiddler(r,status);\n if(tiddler.tags.indexOf('deleted') != -1) // Remove the deleted tag on edit\n tiddler.tags.splice(tiddler.tags.indexOf('deleted'),1);\n zw.editingTiddlers[tiddler.title] = true;\n obj.zw_handler(event,src,tiddler.title);\n } else if(status == 503) { // "Temporarily Unavailable" Conflict\n if(r == zw.username) {\n if(confirm(config.messages.lockedTiddlerYou)) {\n var str = ajax.gets('?action=unlock&title=' + encodeURIComponent(title)\n + "&" + zw.no_cache());\n zw.addTiddler(str, 200);\n return obj.handler(event,src,title);\n }\n } else {\n alert(config.messages.lockedTiddler.replace(/%s/g, r));\n }\n } else if(status == 403) {\n // Lock failed, we must not be logged in, or something changed underneath us.\n zw.loggedIn = false;\n zw.isAdmin = false;\n readOnly = true;\n zw.loadTiddler("ZiddlyStatus");\n //refreshDisplay(["SideBarOptions","ViewTemplate", "EditTemplate"]);\n //story.refreshAllTiddlers();\n alert(config.messages.loginToEdit);\n config.commands.editTiddler.zw_handler(event,src,title);\n } else {\n alert("Server returned a response I don't understand:\sn\sn"+k);\n }\n };\n var rev = "";\n if(store.getValue(title, "latestRevision") != "undefined")\n rev = "revision="+store.getValue(title, "revision");\n ajax.post(zw.serverUrl, callback, 'action=lock&title=' + encodeURIComponent(title) + '&' + rev + '&' + zw.no_cache());\n }\n return false;\n};\n\nconfig.commands.saveTiddler.zw_handler = config.commands.saveTiddler.handler;\nconfig.commands.saveTiddler.handler = function(event,src,title) {\n if(zw.isAdmin \n || (zw.loggedIn || zw.anonEdit) && !isProtectedTiddler(title)\n || (isProtectedTiddler(title) && zw.loggedIn && this.modifier == zw.username)) {\n zw.editingTiddlers[title] = false;\n return this.zw_handler(event,src,title);\n } else {\n config.commands.cancelTiddler.zw_handler(null,null,title);\n }\n return false;\n};\n\nconfig.commands.deleteTiddler.zw_handler = config.commands.deleteTiddler.handler;\nconfig.commands.deleteTiddler.handler = function(event,src,title) {\n if(zw.isAdmin \n || (zw.loggedIn || zw.anonEdit) && !isProtectedTiddler(title)\n || (isProtectedTiddler(title) && zw.loggedIn && this.modifier == zw.username)) {\n zw.editingTiddlers[title] = false;\n return this.zw_handler(event,src,title);\n } else {\n config.commands.cancelTiddler.zw_handler(null,null,title);\n }\n return false;\n};\n\nconfig.commands.cancelTiddler.zw_handler = config.commands.cancelTiddler.handler;\nconfig.commands.cancelTiddler.handler = function(event,src,title) {\n if(!config.options.chkHttpReadOnly) {\n if(zw.editingTiddlers[title]) {\n var str = ajax.gets('?action=unlock&title=' + encodeURIComponent(title) + "&" + zw.no_cache());\n zw.addTiddler(str, 200);\n }\n zw.editingTiddlers[title] = false;\n }\n return this.zw_handler(event,src,title);\n};\n\nfunction isProtectedTiddler(title) {\n var tiddler = store.fetchTiddler(title);\n if(!tiddler) { // Must be a shadow\n for(var i=0;i<config.protectedTiddlers.length;i++) {\n if(config.protectedTiddlers[i] == title) return true;\n }\n }\n if(tiddler && tiddler.tags) {\n for(var i=0;i<tiddler.tags.length;i++) {\n if(tiddler.tags[i] == 'protected') return true;\n }\n }\n return false;\n};\n\nzw.refresh_count = 0;\nzw.refresh_tiddlers = function() {\n zw.refresh_count++;\n if(zw.refresh_count > 30) { // thirty minutes\n clearInterval(zw.refresh_interval_id);\n } else {\n ajax.get(zw.serverUrl + '?action=refresh&latest=' + zw.latestTiddler, zw.refresh_tiddlers_callback);\n }\n};\n\n// If there are unsaved changes, force the user to confirm before exitting\nfunction confirmExit()\n{\n hadConfirmExit = true;\n if(zw.dirty) return config.messages.confirmExit;\n}\n\n// Give the user a chance to save changes before exitting\nfunction checkUnsavedChanges()\n{\n if(zw.dirty && window.hadConfirmExit === false)\n {\n if(confirm(config.messages.unsavedChangesWarning))\n saveChanges();\n }\n}\n\nTiddler.prototype.isReadOnly = function() {\n return readOnly || store.getValue(this.title, "readonly");\n}\n\n// Receives a list of updated tiddler [timestamp, [title, modified, revision], ...]\n// If TW supports higher resolution modification stamps (currently: 1 minute) we can use\n// that as an identifier instead of revision\nzw.refresh_tiddlers_callback = function(tiddlers) {\n if(tiddlers == '') return;\n tiddlers = tiddlers.split('\sn\sn');\n zw.latestTiddler = parseInt(tiddlers[0]);\n for(var i=1; i<tiddlers.length; i++) {\n var l = tiddlers[i].split('\sn'); // [title, modified, revision]\n if(!zw.editingTiddlers[l[0]]) // FIXME if it's being edited and we just found out someone else modified it, we should issue a warning.\n displayTiddlerRevision(l[0], l[2], null, true);\n }\n};\n\nif(location.protocol != "file:")\n zw.refresh_interval_id = setInterval('zw.refresh_tiddlers()', 60000); // refresh every minute\n\n// mini/ajax.js - http://timmorgan.org/mini\n\nfunction $(e){if(typeof e=='string')e=document.getElementById(e);return e};\nfunction collect(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};\n\nvar ajax={};\najax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};\najax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);\nvar t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};\najax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText,x.status,x.statusText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};\najax.get=function(url,func){ajax.send(url,func,'GET')};\najax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};\najax.post=function(url,func,args){ajax.send(url,func,'POST',args)};\najax.posts=function(url,args){var x=ajax.x();x.open('POST',url,false);x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(args);return x.responseText};\najax.update=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f)};\najax.submit=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};\n\n//if(window.netscape && window.netscape.security && document.location.protocol.indexOf("http") == -1)\n//window.netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n//window.netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");\n//window.netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n\n//}}}\n
CT archives continue to add new collections to the CAO search nearly every day as the CAO celebrates its 5th year of operation! We now search across 6474 archival collections in the State of Connecticut.
[[Welcome]]
/***\n|''Name:''|~PopupMacro|\n|''Version:''|1.0.0 (2006-05-09)|\n|''Source:''|http://lewcid.googlepages.com/lewcid.html#PopupMacro|\n|''Author:''|Saq Imtiaz|\n|''Description:''|Create popups with custom content|\n|''Documentation:''|[[PopupMacro Documentation|PopupMacroDocs]]|\n|''~Requires:''|TW Version 2.0.8 or better|\n***/\n// /%\n{{{\nconfig.macros.popup = {};\nconfig.macros.popup.arrow = (document.all?"&#9660;":"&#9662;");\nconfig.macros.popup.handler = function(place,macroName,params,wikifier,paramString,theTiddler) {\n\n if (!params[0] || !params[1]) \n {createTiddlyError(place,'missing macro parameters','missing label or content parameter');\n return false;};\n \n var label = params[0];\n var source = (params[1]).replace(/\s$\s)\s)/g,">>"); \n var nestedId = params[2]? params[2]: 'nestedpopup'; \n\n var onclick = function(event) {\n if(!event){var event = window.event;}\n var theTarget = resolveTarget(event);\n var nested = (!isNested(theTarget));\n \n if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}\n else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};\n \n var theId = (nested==false)? "popup" : nestedId; \n var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);\n Popup.stack.push({root: button, popup: popup});\n\n wikify(source,popup);\n Popup.show(popup,true);\n event.cancelBubble = true;\n if (event.stopPropagation) event.stopPropagation();\n return false;\n }\n var button = createTiddlyButton(place, label+this.arrow,label, onclick, null);\n};\n\nwindow.isNested = function(e) {\n while (e != null) {\n var contentWrapper = document.getElementById("contentWrapper");\n if (contentWrapper == e) return true;\n e = e.parentNode;\n }\n return false;\n};\n\nsetStylesheet(\n".popup, .popup a, .popup a:visited {color: #fff;}\sn"+\n".popup a:hover {background: #014; color: #fff; border: none;}\sn"+\n".popup li , .popup ul, .popup ol {list-style:none !important; margin-left:0.3em !important; margin-right:0.3em; font-size:100%; padding-top:0.5px !important; padding:0px !important;}\sn"+\n"#nestedpopup {background:#2E5ADF; border: 1px solid #0331BF; margin-left:1em; }\sn"+\n"",\n"CustomPopupStyles");\n\nconfig.shadowTiddlers.PopupMacroDocs="The documentation is available [[here.|http://lewcid.googlepages.com/lewcid.html#PopupMacroDocs]]";\n}}}\n//%/
To get started with this blank ZiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the ZiddlyWiki is opened\n
/***\n|Name|BetterTimelineMacro|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#BetterTimelineMacro|\n|Version|0.5 beta|\n|Requires|~TW2.x|\n!!!Description:\nA replacement for the core timeline macro that offers more features:\n*list tiddlers with only specfic tag\n*exclude tiddlers with a particular tag\n*limit entries to any number of days, for example one week\n*specify a start date for the timeline, only tiddlers after that date will be listed.\n\n!!!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nEdit the ViewTemplate to add the fullscreen command to the toolbar.\n\n!!!Syntax:\n{{{<<timeline better:true>>}}}\n''the param better:true enables the advanced features, without it you will get the old timeline behaviour.''\n\nadditonal params:\n(use only the ones you want)\n{{{<<timeline better:true onlyTag:Tag1 excludeTag:Tag2 sortBy:modified/created firstDay:YYYYMMDD maxDays:7 maxEntries:30>>}}}\n\n''explanation of syntax:''\nonlyTag: only tiddlers with this tag will be listed. Default is to list all tiddlers.\nexcludeTag: tiddlers with this tag will not be listed.\nsortBy: sort tiddlers by date modified or date created. Possible values are modified or created.\nfirstDay: useful for starting timeline from a specific date. Example: 20060701 for 1st of July, 2006\nmaxDays: limits timeline to include only tiddlers from the specified number of days. If you use a value of 7 for example, only tiddlers from the last 7 days will be listed.\nmaxEntries: limit the total number of entries in the timeline.\n\n\n!!!History:\n*28-07-06: ver 0.5 beta, first release\n\n!!!Code\n***/\n//{{{\n// Return the tiddlers as a sorted array\nTiddlyWiki.prototype.getTiddlers = function(field,excludeTag,includeTag)\n{\n var results = [];\n this.forEachTiddler(function(title,tiddler)\n {\n if(excludeTag == undefined || tiddler.tags.find(excludeTag) == null)\n if(includeTag == undefined || tiddler.tags.find(includeTag)!=null)\n results.push(tiddler);\n });\n if(field)\n results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });\n return results;\n}\n\n\n\n//this function by Udo\nfunction getParam(params, name, defaultValue)\n{\n if (!params)\n return defaultValue;\n var p = params[0][name];\n return p ? p[0] : defaultValue;\n}\n\nwindow.old_timeline_handler= config.macros.timeline.handler;\nconfig.macros.timeline.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var args = paramString.parseParams("list",null,true);\n var betterMode = getParam(args, "better", "false");\n if (betterMode == 'true')\n {\n var sortBy = getParam(args,"sortBy","modified");\n var excludeTag = getParam(args,"excludeTag",undefined);\n var includeTag = getParam(args,"onlyTag",undefined);\n var tiddlers = store.getTiddlers(sortBy,excludeTag,includeTag);\n var firstDayParam = getParam(args,"firstDay",undefined);\n var firstDay = (firstDayParam!=undefined)? firstDayParam: "00010101";\n var lastDay = "";\n var field= sortBy;\n var maxDaysParam = getParam(args,"maxDays",undefined);\n var maxDays = (maxDaysParam!=undefined)? maxDaysParam*24*60*60*1000: (new Date()).getTime() ;\n var maxEntries = getParam(args,"maxEntries",undefined);\n var last = (maxEntries!=undefined) ? tiddlers.length-Math.min(tiddlers.length,parseInt(maxEntries)) : 0;\n for(var t=tiddlers.length-1; t>=last; t--)\n {\n var tiddler = tiddlers[t];\n var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);\n if ((theDay>=firstDay)&& (tiddler[field].getTime()> (new Date()).getTime() - maxDays))\n {\n if(theDay != lastDay)\n {\n var theDateList = document.createElement("ul");\n place.appendChild(theDateList);\n createTiddlyElement(theDateList,"li",null,"listTitle",tiddler[field].formatString(this.dateFormat));\n lastDay = theDay;\n }\n var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);\n theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));\n }\n }\n }\n\n else\n {\n window.old_timeline_handler.apply(this,arguments);\n }\n}\n//}}}
<<tagging Meeting>>
<<tagging Sites>>
There is a problem with the state library in the search to retrieve all the files. Not all the files are being retrieved (227 of 231). I know it's my search I'm just not sure of the fix at the moment. \n\n@@Note@@\nThis has been resolved. There were some html entities (&nbsp; etc.) that the indexer was choking on. I think we resolve all this.
/***\n|Name|TiddlerPasswordPlugin|\n|Source|http://www.TiddlyTools.com/#TiddlerPasswordPlugin|\n|Version|1.1.0|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides||\n|Description||\n\nThis plugin blocks viewing of specific tiddler content by prompting for a NON-SECURE, UNENCRYPTED password before the tiddler is displayed. If the correct password is not entered, the tiddler is automatically closed. The process does not prevent tiddler content from being viewed directly from the TiddlyWiki source file's storeArea, nor does it encrypt the tiddler content in any way. Because it is relatively simple to bypass and/or disable the password prompting process, this macro should be thought of as a "latch" rather than a "lock" on a given tiddler.\n!!!!!Usage\n<<<\n{{{<<getTiddlerPassword>>}}} \n{{{<<getTiddlerPassword password>>}}}\n{{{<<getTiddlerPassword password "prompt message">>}}}\n{{{<<getTiddlerPassword - "prompt message">>}}}\n\nPlace the {{{<<getTiddlerPassword>>}}} macro at the beginning of your tiddler content. The macro prompts for a password until either A) the correct password is entered or B) the user presses the cancel button from the prompt box, in which case the tiddler is automatically closed so it cannot be viewed. If a valid password is input, it will be remembered only until the user closes the tiddler. Each time the tiddler is opened, the password must be re-entered.\n\nThe optional ''password'' parameter provides a "user-level" password for the tiddler in which the macro occurs. If no user password is provided, then only the admin-level password (see below) will be accepted. \n\nBy default, the prompt message reads: "Please enter a password to view '%0'" (where the %0 is automatically replaced by the name of the tiddler in which the macro occurs) To change this text, enter an additional macro parameter, following the user password.\n>Note: because the prompt text is likely to contain spaces, you should always enclose it in quotes (or use {{{[[...]]}}} if it contains quotes). In addition, to enter an alternative prompt without providing a user-level password, use "-" as a //placeholder// for the password parameter.\n\nNotes:\n* You can also set a hard-coded admin password (see below) to define a "universal passkey" that will grant access to all tiddlers protected by this script, regardless of the individual password used on each protected tiddler.\n* If you embed one or more password-protected tiddlers within another tiddler (by using the {{{<<tiddler TiddlerName>>}}} macro) the user will be prompted to provide the appropriate password for the EACH protected tiddler contained in the tiddler being rendered.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''TiddlerPasswordPlugin'' (tagged with <<tag systemConfig>>)\n\n''As soon as you have installed this plugin, you should change the default admin password in [[TiddlerPasswordConfig]].'' Note: the configuration tiddler is password-protected to prevent the admin password from being viewed (and/or modified) unless the current password is provided. By default, the admin password is set to "admin".\n<<<\n!!!!!Revision History\n<<<\n''2007.02.22 [1.1.1]'' updated documentation for using custom prompt text\n''2007.01.01 [1.1.0]'' added optional param for using custom prompt text \n''2006.12.03 [1.0.1]'' handler() uses passed-in 'tiddler.title' (if any), so that title of included protected tiddlers can be correctly displayed (instead of showng title of containing tiddler)\n''2006.12.02 [1.0.0]'' initial release - converted from GetTiddlerPassword inline script\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.getTiddlerPassword= {major: 1, minor: 1, revision: 1, date: new Date(2007,2,22)};\n\nconfig.macros.getTiddlerPassword = {\n msg: "Please enter a password to view '%0'",\n defaultText: "enter password here",\n retryMsg: "'%0' is not the correct password for '%1'. Please try again:",\n cancelMsg: "Sorry, you cannot view '%0' without entering a valid password.",\n thanksMsg: "Thank you, your password has been accepted.",\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var here=story.findContainingTiddler(place); if (!here) return;\n var title=tiddler?tiddler.title:here.getAttribute("tiddler");\n var who=here.getAttribute("logID");\n var userPass=params[0]?params[0]:""; if (userPass=='-') userPass="";\n var msg=params[1]?params[1]:this.msg;\n if (who==userPass||who==this.adminPass) return; // already 'logged in'?\n var who=prompt(msg.format([title]),this.defaultText); // ask for ID\n while (who && who!=userPass && who!=this.adminPass) // not correct ID?\n who=prompt(this.retryMsg.format([who,title]),this.defaultText); // ask again\n if (who==userPass||who==this.adminPass) // correct ID? mark tiddler logged in...\n { here.setAttribute("logID",who); alert(this.thanksMsg); }\n else // incorrect ID (e.g., entry cancelled by user)...\n { story.closeTiddler(here.getAttribute("tiddler")); alert(this.cancelMsg.format([title])); }\n }\n}\n// default admin password (may be overridden in TiddlerPasswordConfig)\nif (config.macros.getTiddlerPassword.adminPass==undefined)\n config.macros.getTiddlerPassword.adminPass="admin";\n//}}}
This page powered by [[ZiddlyWiki|http://tiddlywiki.org]].
Due to recent revisions with Internet Explorer the CAO template is no longer compatible with Internet Explorer. \n\nTo ensure that you can save the finding aid that you created from your CAO Template in xml we suggest using Firefox or Chrome. To dowload either of these web browsers use the links below: \n\nChrome: https://support.google.com/chrome/answer/95346?hl=en\n\nFirefox: https://www.mozilla.org/en-US/firefox/new/\n\n[[Video for using the EAD creation template and saving the contents as EAD XML|http://archives.library.wcsu.edu/omeka/items/show/3444]]
/***\n|Name:|HideWhenPlugin|\n|Description:|Allows conditional inclusion/exclusion in templates|\n|Version:|3.1 ($Rev: 3919 $)|\n|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|\n|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|\n|Author:|Simon Baird <simon.baird@gmail.com>|\n|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|\nFor use in ViewTemplate and EditTemplate. Example usage:\n{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}\n{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}\n***/\n//{{{\n\nwindow.hideWhenLastTest = false;\n\nwindow.removeElementWhen = function(test,place) {\n window.hideWhenLastTest = test;\n if (test) {\n removeChildren(place);\n place.parentNode.removeChild(place);\n }\n};\n\n\nmerge(config.macros,{\n\n hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( eval(paramString), place);\n }},\n\n showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !eval(paramString), place);\n }},\n\n hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAny(params), place);\n }},\n\n showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAny(params), place);\n }},\n\n hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);\n }},\n\n showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);\n }},\n\n hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.title == params[0], place);\n }},\n\n showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.title != params[0], place);\n }},\n\n 'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !window.hideWhenLastTest, place);\n }}\n\n});\n\n//}}}\n
Today was the day we got off the ground.
When a user clicks on the title of record in [[CAO|/cao]] it takes the user to that finding-aid on your site. In order to help the user find the areas that she might be interested in you can have the user's search terms highlighted in you EAD presentation. \n\nIf you want to make this work on your site you need to put the following two lines into the xslt stylesheet that renders you EAD file. From then on your users should see the highlighted search terms when they visit you site. (//look at any of the WCSU files for an example//)\n\n{{{<link rel="stylesheet" type="text/css" href="http://library.wcsu.edu/cao/css/highlight.css"/>}}}\n\n{{{<script type="text/javascript" src="http://library.wcsu.edu/js/highlight.js />}}}\n\nIf there is any problem with this let me know. -- BK\n
/***\n|Name|WikifyPlugin|\n|Source|http://www.TiddlyTools.com/#WikifyPlugin|\n|Documentation|http://www.TiddlyTools.com/#WikifyPluginInfo|\n|Version|1.1.4|\n|Author|Eric Shulman|\n|License|http://www.TiddlyTools.com/#LegalStatements|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Description|substitute fields, slices, or computed values into a wiki-syntax format string and render results dynamically|\nThe {{{<<wikify>>}}} macro allows you to easily retrieve values from custom tiddler fields, tiddler slices, computed values (using javascript) or just plain old literals, and assemble them into small bits of generated wiki-syntax text content that can be rendered directly into a tiddler, or used in the ViewTemplate or EditTemplate to add dynamically-generated content to each tiddler.\n\nThe {{{<<wikiCalc>>}}} macro performs the same processing as {{{<<wikify>>}}} and, in addition, passes the assembled text content through javascript's {{{eval()}}} function before rendering the results. This allows you to, for example, construct and compute mathematical expressions that use input values extracted from tiddler fields or slices.\n!!!!!Documentation\n> see [[WikifyPluginInfo]]\n!!!!!Revisions\n<<<\n2009.03.29 [1.1.4] in handler(), pass 'tiddler' value to wikify() to fix macro errors in rendered content\n|please see [[WikifyPluginInfo]] for additional revision details|\n2007.06.22 [1.0.0] initial release\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.WikifyPlugin= {major: 1, minor: 1, revision: 4, date: new Date(2009,3,29)};\n\nconfig.macros.wikify={\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var fmt=params.shift();\n var values=[];\n var out="";\n if (!fmt.match(/\s%[0-9]/g) && params.length) // format has no markers, just join all params with spaces\n out=fmt+" "+params.join(" ");\n else { // format param has markers, get values and perform substitution\n while (p=params.shift()) values.push(this.getFieldReference(place,p));\n out=fmt.format(values);\n }\n if (macroName=="wikiCalc") out=eval(out).toString();\n wikify(out.unescapeLineBreaks(),place,null,tiddler);\n },\n getFieldReference: function(place,p) { // "slicename::tiddlername" or "fieldname@tiddlername" or "fieldname"\n if (typeof p != "string") return p; // literal non-string value... just return it...\n var parts=p.split(config.textPrimitives.sliceSeparator);\n if (parts.length==2) {// maybe a slice reference?\n var tid=parts[0]; var slice=parts[1];\n if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler\n tid=story.findContainingTiddler(place);\n if (tid) tid=tid.getAttribute("tiddler")\n else tid="SiteSlices"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)\n }\n var val=store.getTiddlerSlice(tid,slice); // get tiddler slice value\n }\n if (val==undefined) {// not a slice, or slice not found, maybe a field reference?\n var parts=p.split("@");\n var field=parts[0];\n if (!field || !field.length) field="checked"; // missing fieldname, fallback: checked@tiddlername\n var tid=parts[1];\n if (!tid || !tid.length || tid=="here") { // no target (or "here"), use containing tiddler\n tid=story.findContainingTiddler(place);\n if (tid) tid=tid.getAttribute("tiddler")\n else tid="SiteFields"; // fallback for 'non-tiddler' areas (e.g, header, sidebar, etc.)\n }\n var val=store.getValue(tid,field);\n }\n // not a slice or field, or slice/field not found... return value unchanged\n return val===undefined?p:val;\n }\n}\n//}}}\n//{{{\n// define alternative macroName for triggering pre-rendering call to eval()\nconfig.macros.wikiCalc=config.macros.wikify;\n//}}}
<!--{{{-->\n\n<link rel="alternate" type="application/rss+xml" title="RSS" href="?format=xml" />\n\n<!--}}}-->
The Connecticut Historical Society added over 40 finding aids to the CAO in this first week in April.
<tabs Introduction>\n<tab About> [img[http://archives.library.wcsu.edu/images/cao/cao5.png][http://library.wcsu.edu/cao]]\n!!!What is CAO\n\nOur goal is that we can build a site that facilitates faceted searching across all the [[EAD|http://www.loc.gov/ead]] encoded finding aids that describe the archival holdings in the State of Connecticut. Currently, we are in the midst of building a base of participating repositories and gathering their content.\n\nIf you'd like to participate, please contact [[Brian Stevens|mailto:stevensb@wcsu.edu]], WCSU Archivist and Special Collections Librarian.\n \nThe Connecticut Archives Online (CAO) is a project that aims to unify and simplify searching of archival holdings in Connecticut. CAO can bring researchers to the rich collections held in Connecticut's libraries, universities, colleges, museums and historical societies through one simple interface. \n\nThe implications for institutions that participate in CAO are that their researchers will be able to easily search that institution's collections and also be exposed to collections that they may have missed or did not know existed. Participation can also serve to enhance the profile for your collections and foster interest in Connecticut's history, its people and its institutions. \n\nCAO Repositories on the map\n<html>\n<iframe width="500" height="300" scrolling="no" frameborder="no" src="https://www.google.com/fusiontables/embedviz?q=select+col0+from+18H1cz_9Lg3ppD3_V6MugrJvpq5wMRK9nbypC8g&amp;viz=MAP&amp;h=false&amp;lat=41.507979465804965&amp;lng=-72.48538384062499&amp;t=1&amp;z=8&amp;l=col0"></iframe>\n\n\n</html>\n[img[http://archives.library.wcsu.edu/images/cao/caoLogoWithTextSmall.jpg]]\n</tab>\n\n<tab Participation> \n!!!How do I participate?\n\nFirst - Contact [[Brian Stevens|mailto:stevensb@wcsu.edu]] (phone 203-837-8992) to talk about establishing your "account" with the CAO and fill out the [[Application Form]].\n\nParticipation in CAO is ''easy and free''. An institution interested in participating need only have valid EAD finding aids for their collections. Once the CAO administrators have registered you and given you your log in information, you may add your finding aids to the thousands currently indexed by the CAO search. The only stipulation is that there are a few simple encoding guidelines in the [[Coding Conventions]] section. \n\nSee the "No EAD" tab for details if your institution does not use EAD to describe your archival collections.\n\nYour institution's workflow for publishing finding aids does not need to alter in order to participate. Your finding aids will still live in your own Web space and search results from CAO point users back to your site.\n\nInstitutions that participate in CAO are able to toggle between searching across the consortium or at a single repository.\n\n!!!I have EAD\nIf you have your finding aids marked up in EAD and are a Connecticut archival repository, use the [[Application Form]] to set up an account.\n\n[[Coding Conventions]]\n[[How To's]]\n\n1) Fill out the [[Application Form]]\n2) Wait for an email from the CAO administrator for your log in and account information\n3) Set up a Network Place for the CAO (see [[How To's|http://library.wcsu.edu/cao/about/#%5B%5BHow%20To's%5D%5D]])\n4) Drag your EAD files into the your CAO network place\n\nDONE!\n\n!!!My repository doesn't have EAD\n\nNot a problem. CAO provides an interface for creation of collection level EAD records. If you are able to fill out a form online, you will be able to generate a collection level record. If you don't have a means of displaying EAD finding aids, you may still participate; search results that are returned for your repository will direct users to contact you for more information. \n\nFollow the link below to set up a collection profile and to use the EAD Production form. [[Application Form]]. [[See the form filled out...|http://library.wcsu.edu/cao/images/caoApplicationForm.jpg]]\n\n1) Fill out the [[Application Form]]\n2) Wait for an email from the CAO administrator for your log in, account information and link to your own EAD template. [[click here to see a sample of the template|http://archives.library.wcsu.edu/cgi-bin/template/ead/testCT124]] (Internet Explorer 7 and up do not render the CAO Template correctly, please use Chrome or Firefox)\n3) Set up a Network Place for the CAO (see [[How To's]])\n4) Fill out your EAD template. Fill it out for each of your collections that you want the CAO to search\n4) After you submit your EAD Template, you'll have generated an EAD file that you save with a sensible file name and the extension "xml" - for example: myFindingAid.xml \n5) Drag your EAD file or files into the your CAO network place\n\nDONE!\n\nHere are some "movies" to walk you through these steps... \n\n*Filling out the application and submitting it to the CAO\n[[Here's a movie to show you how...|http://archives.library.wcsu.edu/cao/tutorials/caoApplication.html]] \n\n*Setting up a your "Network place" to submit your repository's EAD - see the How To's\n\n*Filling out your EAD template and dropping files in your network place\n[[Here's a movie to show you how...|http://archives.library.wcsu.edu/cao/tutorials/caoEad.html]]\n</tab>\n\n<tab Contact>\nIf you have questions about the CAO, please contact [[Brian Stevens|mailto:stevensb@wcsu.edu]], WCSU Archivist and Special Collections Librarian.\n[img[http://archives.library.wcsu.edu/images/cao/caoAcronym.png]]\n</tab>\n</tabs>
From their web site\n>The Polar Bear Expedition Digital Collections are the first example of rethinking traditional archival finding aids to provide better access to primary sources on the web. We are experimenting with different ideas for displaying archival content as well as implementing added functions so that researchers can interact with online collections using collaborative tools. \n\n[[Visit their site| http://polarbears.si.umich.edu/]]\n\nI thought it was interesting how they let you browse by subjects and how they provided links in their scope notes
<tabs meeting>\n<tab Agenda>\nProposed agenda for Sep 23rd meeting at the ECSU Library:\n\n**CAO \nMovement of the database to new server\nGrowth\nOutreach\nGeocoding and map interface\n\n**EAD\n Is there any interest in a workshop on the Archivists' Toolkit?\n Should we (Brian K) work on the Web form template?\n Any support needed in generating EAD\n\n**Digital asset management\n Who is digitizing\n What's your workflow\n</tab>\n<tab Minutes>\n**CAO \nMovement of the database to new server \n\nWe forgot to discuss this but the CAO is moving to a different server in the next few months... The implications are that participants will have to create a new network folder to submit content to the CAO.\n\nGrowth\n\nThe CAO has doubled in size over the last year with the addition of UConn and the Litchfield Historical Society. \n\nA change in the interface is order so that users may limit to repository from the default search.\n\nOutreach\n\nEach of the CSUs and State Library will be on the look out for potential participants in their respective areas of the state.\n\nGeocoding and map interface\n\nDemonstration of a map interface based on geocoding of LC geographic terms in the CAO. More investigation in this area is to come. Possible other application of this functionality discussed for digital collections - specifically for a postcard collection at SCSU.\n\n**EAD\n Is there any interest in a workshop on the Archivists' Toolkit?\n\nA workshop for staff from ECSU, CCSU and the State Library, will be held at CCSU sometime in November or December. Brian Stevens will lead the training.\n\n Should we (Brian K) work on the Web form template?\n\nBrian Kennison will attempt to finish a prototype of this collection level EAD creation tool.\n\n Any support needed in generating EAD\n\nAT and Kennison's template will be tested.\n\n**Digital asset management\n Who is digitizing\n\nEveryone is digitizing - mostly using ContentDM to display.\nDigital preservation and sustainability still a huge issue. Flikr also discussed for easy display of images.\n\n What's your workflow\n\nVarious workflows were discussed - namely the digitization project underway at CCSU of their yearbook collection.\n\n</tab>\n</tabs>
We are happy to announce that the Archives and Litchfield County Historical Society join the CAO.
For repositories that do not have finding aids in EAD we have created an easy to use template that we personalize to your institution to help your repositories easily create EAD finding aids that are hosted by WCSU and searchable on CAO. Click the link below to view a sample of this template: \n\n[[EAD Template Sample |http://archives.library.wcsu.edu/cgi-bin/template/ead/ctTownHist]]\n\nNo matter what level the materials within your repository are organized, with just a little bit of information about the materials in a collection, or your entire repository, you can create an EAD finding aid for any collection(s) you have with the push of a button. Finding aids that are rendered from the template look like this: \n\n[[Template generated finding aid | http://library.wcsu.edu/cao/ctmrhs/fish.xml]] \n\nOf course, the more information that you add to the template the more helpful the finding aid will be. \n\nDue to changes in Internet Explorer and Chrome the template may not behave as it was intended. If you experience difficulties please e-mail us and we can provide work-arounds for you.\n\n[[Video for creating EAD using the template|http://archives.library.wcsu.edu/omeka/items/show/3444]]
We need a little bit of information so that we can set up a space for you in\nCAO. \n\n[img[http://archives.library.wcsu.edu/images/cao/caoWhite_s.jpg]]\n\n<html>\n <form id="caoapp" action="mail_application_form" method="POST">\n <div>\n <fieldset>\n <legend>Repository/Institution Information</legend>\n <label for="institution">Institution</label>\n <br/>\n <input id="institution" name="institution" type="text" size="60"/>\n <br/>\n <label for="address">Address1</label>\n <br/>\n <input id="address" name="address" type="text" size="60"\s>\n <br/>\n <label for="address2">Address2</label>\n <br/>\n <input id="address2" name="address2" type="text" size="60"\s>\n <br/>\n <label for="city">City</label>\n <br/>\n <input id="city" name="city" type="text" size="60"\s>\n <br/>\n <label for="state">State</label>\n <br/>\n <input id="state" name="state" type="text" value="CT"/>\n <br/>\n <label for="zip">Zip</label>\n <br/>\n <input id="zip" name="zip" type="text" />\n <br/>\n <label for="website">Website URL</label>\n <br/>\n <input id="website" name="website" type="text" size="60"\s>\n <br/>\n <label for="phone">Phone</label>\n <br/>\n <input id="phone" name="phone" type="text" size="60"\s>\n <br/>\n <label for="code">MARC Agency Code </label><span class="code">&nbsp;<a href="http://www.loc.gov/marc/organizations/org-search.php" target="_blank">(Find your code)</a></span>\n <br/>\n <input id="code" name="code" type="text" size="60"\s>\n <br/>\n <label for="contact">Contact</label>\n <br/>\n <input id="contact" name="contact" type="text" size="60"\s>\n <br/>\n <label for="contact-email">Contact email</label>\n <br/>\n <input id="contact-email" name="contact-email" type="text" size="60"\s>\n <br/>\n </fieldset>\n </div>\n <br />\n <div>\n <fieldset>\n <legend>Use of EAD</legend>\n <input type="checkbox" id="No_EAD" name="No_EAD" value="Yes" > My repository does not have finding aids in EAD</input>\n <br /> \n <input type="checkbox" id="Help" name="Help" value="Yes"> I would like help getting started with an EAD template</input>\n <br />\n </fieldset>\n </div>\n <br />\n <div>\n <fieldset>\n <legend class="roundedCornors">About Your Collections</legend>\n <label for="why">Why are you interested in CAO?</label>\n <br/>\n <textarea id="why" name="why" cols="55" rows="3"></textarea>\n <br/>\n <label for="collection">The number of collections in your archive.</label>\n <br/>\n <input id="collection" name="collections" type="text" size="60"\s>\n <br/>\n </fieldset>\n <p align="center"><input type="submit" id="appsubmit" name="submit" value="Submit"/></p>\n </div>\n </form>\n</html>\n
/***\n|''Name:''|~TaggerPlugin|\n|''Version:''|1.0.1 (2006-06-01)|\n|''Source:''|http://tw.lewcid.org//#TaggerPlugin|\n|''Author:''|SaqImtiaz|\n|''Description:''|Provides a drop down listing current tiddler tags, and allowing toggling of tags.|\n|''Documentation:''|[[TaggerPluginDocumentation]]|\n|''Source Code:''|[[TaggerPluginSource]]|\n|''~TiddlyWiki:''|Version 2.0.8 or better|\n***/\n// /%\nconfig.tagger={defaults:{label:"Tags: ",tooltip:"Manage tiddler tags",taglist:"true",excludeTags:"",notags:"tiddler has no tags",aretags:"current tiddler tags:",toggletext:"add tags:"}};config.macros.tagger={};config.macros.tagger.arrow=(document.all?"â–Œ":"▪");config.macros.tagger.handler=function(_1,_2,_3,_4,_5,_6){var _7=config.tagger.defaults;var _8=_5.parseParams("tagman",null,true);var _9=((_8[0].label)&&(_8[0].label[0])!=".")?_8[0].label[0]+this.arrow:_7.label+this.arrow;var _a=((_8[0].tooltip)&&(_8[0].tooltip[0])!=".")?_8[0].tooltip[0]:_7.tooltip;var _b=((_8[0].taglist)&&(_8[0].taglist[0])!=".")?_8[0].taglist[0]:_7.taglist;var _c=((_8[0].exclude)&&(_8[0].exclude[0])!=".")?(_8[0].exclude[0]).readBracketedList():_7.excludeTags.readBracketedList();if((_8[0].source)&&(_8[0].source[0])!="."){var _d=_8[0].source[0];}if(_d&&!store.getTiddler(_d)){return false;}var _e=function(e){if(!e){var e=window.event;}var _11=Popup.create(this);var _12=store.getTags();var _13=new Array();for(var i=0;i<_12.length;i++){_13.push(_12[i][0]);}if(_d){var _15=store.getTiddler(_d);_13=_15.tags.sort();}var _16=_6.tags.sort();var _17=function(_18,_19,_1a){var sp=createTiddlyElement(createTiddlyElement(_11,"li"),"span",null,"tagger");var _1c=createTiddlyButton(sp,_18,_1a+" '"+_19+"'",taggerOnToggle,"button","toggleButton");_1c.setAttribute("tiddler",_6.title);_1c.setAttribute("tag",_19);insertSpacer(sp);if(window.createTagButton_orig_mptw){createTagButton_orig_mptw(sp,_19)}else{createTagButton(sp,_19);}};createTiddlyElement(_11,"li",null,"listTitle",(_6.tags.length==0?_7.notags:_7.aretags));for(var t=0;t<_16.length;t++){_17("[x]",_16[t],"remove tag ");}createTiddlyElement(createTiddlyElement(_11,"li"),"hr");if(_b!="false"){createTiddlyElement(_11,"li",null,"listTitle",_7.toggletext);for(var i=0;i<_13.length;i++){if(!_6.tags.contains(_13[i])&&!_c.contains(_13[i])){_17("[ ]",_13[i],"add tag ");}}createTiddlyElement(createTiddlyElement(_11,"li"),"hr");}var _1f=createTiddlyButton(createTiddlyElement(_11,"li"),("Create new tag"),null,taggerOnToggle);_1f.setAttribute("tiddler",_6.title);if(_d){_1f.setAttribute("source",_d);}Popup.show(_11,false);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation();}return (false);};createTiddlyButton(_1,_9,_a,_e,"button","taggerDrpBtn");};window.taggerOnToggle=function(e){var tag=this.getAttribute("tag");var _22=this.getAttribute("tiddler");var _23=store.getTiddler(_22);if(!tag){var _24=prompt("Enter new tag:","");if(_24!=""&&_24!=null){var tag=_24;if(this.getAttribute("source")){var _26=store.getTiddler(this.getAttribute("source"));_26.tags.pushUnique(_24);}}else{return false;}}if(!_23||!_23.tags){store.saveTiddler(_22,_22,"",config.options.txtUserName,new Date(),tag);}else{if(_23.tags.find(tag)==null){_23.tags.push(tag);}else{if(!_24){_23.tags.splice(_23.tags.find(tag),1);}}store.saveTiddler(_23.title,_23.title,_23.text,_23.modifier,_23.modified,_23.tags);}story.refreshTiddler(_22,null,true);if(config.options.chkAutoSave){saveChanges();}return false;};setStylesheet(".tagger a.button {font-weight: bold;display:inline; padding:0px;}\sn"+".tagger #toggleButton {padding-left:2px; padding-right:2px; margin-right:1px; font-size:110%;}\sn"+"#nestedtagger {background:#2E5ADF; border: 1px solid #0331BF;}\sn"+".popup .listTitle {color:#000;}\sn"+"","TaggerStyles");window.lewcidTiddlerSwapTag=function(_27,_28,_29){for(var i=0;i<_27.tags.length;i++){if(_27.tags[i]==_28){_27.tags[i]=_29;return true;}}return false;};window.lewcidRenameTag=function(e){var tag=this.getAttribute("tag");var _2d=prompt("Rename tag '"+tag+"' to:",tag);if((_2d==tag)||(_2d==null)){return false;}if(store.tiddlerExists(_2d)){if(confirm(config.messages.overwriteWarning.format([_2d.toString()]))){story.closeTiddler(_2d,false,false);}else{return null;}}tagged=store.getTaggedTiddlers(tag);if(tagged.length!=0){for(var j=0;j<tagged.length;j++){lewcidTiddlerSwapTag(tagged[j],tag,_2d);}}if(store.tiddlerExists(tag)){store.saveTiddler(tag,_2d);}if(document.getElementById("tiddler"+tag)){var _2f=document.getElementById(story.idPrefix+tag);var _30=story.positionTiddler(_2f);var _31=document.getElementById(story.container);story.closeTiddler(tag,false,false);story.createTiddler(_31,_30,_2d,null);story.saveTiddler(_2d);}if(config.options.chkAutoSave){saveChanges();}return false;};window.onClickTag=function(e){if(!e){var e=window.event;}var _34=resolveTarget(e);var _35=(!isNested(_34));if((Popup.stack.length>1)&&(_35==true)){Popup.removeFrom(1);}else{if(Popup.stack.length>0&&_35==false){Popup.removeFrom(0);}}var _36=(_35==false)?"popup":"nestedtagger";var _37=createTiddlyElement(document.body,"ol",_36,"popup",null);Popup.stack.push({root:this,popup:_37});var tag=this.getAttribute("tag");var _39=this.getAttribute("tiddler");if(_37&&tag){var _3a=store.getTaggedTiddlers(tag);var _3b=[];var li,r;for(r=0;r<_3a.length;r++){if(_3a[r].title!=_39){_3b.push(_3a[r].title);}}var _3d=config.views.wikified.tag;if(_3b.length>0){var _3e=createTiddlyButton(createTiddlyElement(_37,"li"),_3d.openAllText.format([tag]),_3d.openAllTooltip,onClickTagOpenAll);_3e.setAttribute("tag",tag);createTiddlyElement(createTiddlyElement(_37,"li"),"hr");for(r=0;r<_3b.length;r++){createTiddlyLink(createTiddlyElement(_37,"li"),_3b[r],true);}}else{createTiddlyText(createTiddlyElement(_37,"li",null,"disabled"),_3d.popupNone.format([tag]));}createTiddlyElement(createTiddlyElement(_37,"li"),"hr");var h=createTiddlyLink(createTiddlyElement(_37,"li"),tag,false);createTiddlyText(h,_3d.openTag.format([tag]));createTiddlyElement(createTiddlyElement(_37,"li"),"hr");var _40=createTiddlyButton(createTiddlyElement(_37,"li"),("Rename tag '"+tag+"'"),null,lewcidRenameTag);_40.setAttribute("tag",tag);}Popup.show(_37,false);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation();}return (false);};if(!window.isNested){window.isNested=function(e){while(e!=null){var _42=document.getElementById("contentWrapper");if(_42==e){return true;}e=e.parentNode;}return false;};}config.shadowTiddlers.TaggerPluginDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#TaggerPluginDocumentation]]";config.shadowTiddlers.TaggerPluginSource="The uncompressed source code is available [[here.|http://tw.lewcid.org/#TaggerPluginSource]]";\n// %/
<<option chkRegExpSearch>> ~RegExp Search\n<<option chkCaseSensitiveSearch>> Case sensitive search\n<<option chkAnimate>> Enable animations\n<<option chkOpenInNewWindow>> Open links in new window\n<<option chkToggleLinks>> Links close open tiddlers\n<<option chkConfirmDelete>> Confirm before deleting\n<<option chkForceMinorUpdate>> Preserve date/time on edit\n<<option chkInsertTabs>> Insert tab characters\n<<option txtMaxEditRows>> Maximum editor rows\n
<<tagging HowTo>>
If you want a template to create on inventory in EAD, you may want to try this tool. This site allows one to upload an Excel inventory and generate an EAD inventory. Thanks to Brian Kennison for finding this. \n[[http://steady2.herokuapp.com/]]\n\nHere's what your data will have to look like when you use the tool above tool:\n [[https://docs.google.com/spreadsheets/d/1D6B3UqsHJ7A9KR8IAINXVNcPvQimwazGtYqKT0s3ky8/edit?usp=sharing]].
/***\n|''Name:''|TiddlyLightBox|\n|''Date:''|Jan 1, 2006|\n|''Version:''|1.0 beta|\n|''Author:''|Saq Imtiaz|\n|''Location:''|http://tw.lewcid.org/#TiddlyLightBoxPlugin|\n|''Documentation:''|http://tw.lewcid.org/#TiddlyLightBoxDocs|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''Based on:''|DC3.LightBox<br>Light Box Gone Wild <br>Ibox|\n\n!!Code\n***/\n//{{{\nconfig.macros.imagebox ={};\nconfig.macros.imagebox.handler = function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var e = place.lastChild;\n e.onclick = function(){TiddlyLightBox.initBox('image',this,params[1],params[2],params[0]);return false;};\n}\n\nconfig.macros.divbox ={};\nconfig.macros.divbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)\n{\n if (params[0]!=".")\n createTiddlyButton(place,params[0],params[0],function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;});\n else\n {\n var e = place.lastChild;\n e.onclick = function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;};\n }\n}\n\nconfig.macros.tiddlerbox ={}\nconfig.macros.tiddlerbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)\n{\n config.macros.divbox.handler(place,macroName,[params[0],"tiddler:"+params[1],params[2],params[3],params[4]]);\n return false;\n}\n\nstore.addNotification("TiddlyLightBoxStyles",refreshStyles);\n\nif (!window.TiddlyLightBox)\n window.TiddlyLightBox = {};\n var loadingImage = "indicator.gif";\n window.TiddlyLightBox =\n {\n _curBox: null, // [sentinel]\n\n lightBoxHtml : '<div id="lightBoxOverlay" onclick="TiddlyLightBox.hideBox()" style="display:none"></div><div id="lightboxprogress" style="display:none;"><img src=\s''+loadingImage+'\s' alt=\s'loading\s' style="width:128px;height:128px;"></div><div class="lightBox" id="lightBox" style="display:none"><div id="lightBoxContent"></div><div id="lightBoxTitle">This is a title</div><div id="lightBoxClose"><a href:"#" onclick="TiddlyLightBox.hideBox();return false;">Click to close</a></div></div>',\n\n createBoxWrapper : function()\n {\n var wrapper = createTiddlyElement(document.getElementsByTagName("body")[0],"div","tiddlyLightBoxWrapper");\n wrapper.innerHTML = this.lightBoxHtml;\n },\n\n initBox : function(contentType,url,w,h,text)\n {\n if (this._curBox)\n return;\n this.showProgress();\n this.hideSelects("hidden");\n this.showBg();\n this._curBox = true;\n this.sizeTheBox(contentType,w,h);\n if (contentType == 'image')\n this.showImage(url,text);\n else if (contentType == 'html')\n this.showHtml(url,text);\n return false;\n },\n \n sizeTheBox : function(contentType,w,h)\n {\n var box = document.getElementById("lightBoxContent");\n if (w && isNaN(parseInt(w)))\n {\n addClass(box,w);\n }\n else if (w ||h || contentType == 'html')\n {\n box.style.width = w? w+ "px" : "450px";\n box.style.height = h? h+ "px" : "280px";\n if (contentType=='image')\n setStylesheet("#lightBoxContent img{height:100%;width:100%;}","lightBoxImageSizeHack");\n }\n },\n\n showProgress : function()\n {\n var progress = document.getElementById("lightboxprogress");\n progress.style.display='';\n this._center(progress);\n },\n \n hideProgress: function()\n {\n var progress = document.getElementById("lightboxprogress");\n progress.style.display='none';\n },\n\n //this function lifted from Lightbox Gone Wild\n hideSelects: function(visibility)\n {\n var selects = document.getElementsByTagName('select');\n for(i = 0; i < selects.length; i++)\n {\n selects[i].style.visibility = visibility;\n }\n },\n\n showBg: function()\n {\n var overlay = document.getElementById('lightBoxOverlay');\n if (config.browser.isIE)\n {\n overlay.style.height = Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);\n overlay.style.width = document.documentElement.scrollWidth;\n }\n overlay.style.display = 'block';\n },\n\n showImage: function (url,text)\n {\n imgPreloader = new Image();\n imgPreloader.onload = function ()\n {\n var lb = document.getElementById("lightBoxContent");\n lb.innerHTML = "<img src="+url+">";\n lb.onclick = function(){TiddlyLightBox.hideBox();return false;};\n TiddlyLightBox.posBox(text);\n };\n imgPreloader.src = url;\n },\n \n showHtml : function(theID,text)\n {\n var lb = document.getElementById("lightBoxContent");\n if (theID.indexOf("tiddler:")==-1)\n lb.innerHTML = document.getElementById(theID).innerHTML;\n else\n { \n wikify(store.getTiddlerText(theID.replace("tiddler:","")),lb);\n lb.className='tiddler';\n }\n lb.style.overflow = "auto";\n this.posBox(text);\n },\n\n posBox: function(text)\n {\n this.setTitle(text);\n this.hideProgress();\n var lb = document.getElementById("lightBox");\n lb.style.display = "";\n lb.style.visibilty = "hidden";\n lb.style.position = "absolute";\n this._center(lb);\n if(!TiddlyLightBox._curBox) return;\n lb.style.visibility = "visible";\n lb.style.display = "block";\n },\n\n setTitle: function(text)\n {\n document.getElementById("lightBoxTitle").innerHTML= (text==undefined)? '': text;\n },\n\n _center: function(lb)\n {\n var lbSize = new TiddlyLightBox.getElementSize(lb);\n lb.style.left = (Math.round(findWindowWidth()/2) - (lbSize.width /2) + findScrollX())+'px';\n lb.style.top = (Math.round(findWindowHeight()/2) - (lbSize.height /2) + findScrollY())+'px';\n },\n\n //this function lifted from Ibox\n getElementSize : function(elem)\n {\n this.width = elem.offsetWidth || elem.style.pixelWidth;\n this.height = elem.offsetHeight || elem.style.pixelHeight;\n },\n\n hideBox: function()\n {\n if(!this._curBox)\n return;\n document.getElementById("tiddlyLightBoxWrapper").innerHTML= this.lightBoxHtml;\n setStylesheet("","lightBoxImageSizeHack");\n this._curBox = null;\n return false;\n }\n}\n\nTiddlyLightBox.createBoxWrapper();\n\nStory.prototype.findContainingTiddler = function(e)\n{\n while(e && (!hasClass(e,"tiddler") || !e.getAttribute("tiddler")))\n e = e.parentNode;\n return(e);\n}\n\nconfig.shadowTiddlers.TiddlyLightBoxStyles="/*{{{*/\sn#lightBoxOverlay {\sn position:absolute;\sn top: 0;\sn left: 0;\sn width: 100%;\sn height: 100%;\sn z-index: 90; \sn background-color: #000;\sn -moz-opacity: 0.75;\sn opacity: .75;\sn filter: alpha(opacity=75);\sn}\sn#lightBoxOverlay[id]{ \sn position: fixed;\sn}\sn\sn#lightboxprogress { \sn margin:0;padding:0;\sn position: absolute;\sn z-index:95;\sn}\sn\sndiv.lightBox {\sn background: #fff;\sn color: #fff;\sn border: 4px solid #525252;\snpadding:20px 20px 25px 20px; position:absolute; z-index:99;\sn}\sn\sn#lightBoxClose {text-align:right; color:#000; font-size:1.0em; position:absolute; bottom:6px; right:20px;}\sn#lightBoxClose a{color:#666; border-bottom:1px solid #666;cursor:pointer;}\sn#lightBoxClose a:hover {color:#111; border-bottom:1px solid #666; cursor:pointer; background:transparent;}\sn\sn#lightBoxContent {border:1px solid #525252;color:#000; background:#fff;}\sn#lightBox .tiddler {background:#fff;}\sn\sn#lightBoxContent img {border:0;margin:0;padding:0;display:block;cursor:pointer;}\sn\sn#lightBoxTitle {padding:0px; font-weight:bold; position:absolute; left:20px;bottom:6px; font-size:1.1em; color:#000;}\sn\sn/*}}}*/";\n//}}}
config.options.chkTopOfPageMode=true;\nconfig.options.chkSinglePageMode=true;\nchkSinglePagePermalink=true;\n
/***\n|Name|SinglePageModePlugin|\n|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|\n|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|\n|Version|2.9.6|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|\n|Options|##Configuration|\n|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|\nThis plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.\n!!!!!Documentation\n>see [[SinglePageModePluginInfo]]\n!!!!!Configuration\n<<<\n<<option chkSinglePageMode>> Display one tiddler at a time\n><<option chkSinglePagePermalink>> Automatically permalink current tiddler\n><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded\n><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited\n<<option chkTopOfPageMode>> Open tiddlers at the top of the page\n<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page\n<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)\n\nNotes:\n* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.\n* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.\n* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.\n<<<\n!!!!!Revisions\n<<<\n2008.10.17 [2.9.6] changed chkSinglePageAutoScroll default to false\n| Please see [[SinglePageModePluginInfo]] for previous revision details |\n2005.08.15 [1.0.0] Initial Release. Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 6, date: new Date(2008,10,17)};\n//}}}\n//{{{\nconfig.paramifiers.SPM = { onstart: function(v) {\n config.options.chkSinglePageMode=eval(v);\n if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {\n config.lastURL = window.location.hash;\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n} };\n//}}}\n//{{{\nif (config.options.chkSinglePageMode==undefined)\n config.options.chkSinglePageMode=false;\nif (config.options.chkSinglePagePermalink==undefined)\n config.options.chkSinglePagePermalink=true;\nif (config.options.chkSinglePageKeepFoldedTiddlers==undefined)\n config.options.chkSinglePageKeepFoldedTiddlers=false;\nif (config.options.chkSinglePageKeepEditedTiddlers==undefined)\n config.options.chkSinglePageKeepEditedTiddlers=false;\nif (config.options.chkTopOfPageMode==undefined)\n config.options.chkTopOfPageMode=false;\nif (config.options.chkBottomOfPageMode==undefined)\n config.options.chkBottomOfPageMode=false;\nif (config.options.chkSinglePageAutoScroll==undefined)\n config.options.chkSinglePageAutoScroll=false;\n//}}}\n//{{{\nconfig.SPMTimer = 0;\nconfig.lastURL = window.location.hash;\nfunction checkLastURL()\n{\n if (!config.options.chkSinglePageMode)\n { window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }\n if (config.lastURL == window.location.hash) return; // no change in hash\n var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();\n if (tids.length==1) // permalink (single tiddler in URL)\n story.displayTiddler(null,tids[0]);\n else { // restore permaview or default view\n config.lastURL = window.location.hash;\n if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();\n story.closeAllTiddlers();\n story.displayTiddlers(null,tids);\n }\n}\n\n\nif (Story.prototype.SPM_coreDisplayTiddler==undefined)\n Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)\n{\n var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;\n var tiddlerElem=document.getElementById(story.idPrefix+title); // ==null unless tiddler is already displayed\n var opt=config.options;\n var single=opt.chkSinglePageMode && !startingUp;\n var top=opt.chkTopOfPageMode && !startingUp;\n var bottom=opt.chkBottomOfPageMode && !startingUp;\n if (single) {\n story.forEachTiddler(function(tid,elem) {\n // skip current tiddler and, optionally, tiddlers that are folded.\n if ( tid==title\n || (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))\n return;\n // if a tiddler is being edited, ask before closing\n if (elem.getAttribute("dirty")=="true") {\n if (opt.chkSinglePageKeepEditedTiddlers) return;\n // if tiddler to be displayed is already shown, then leave active tiddler editor as is\n // (occurs when switching between view and edit modes)\n if (tiddlerElem) return;\n // otherwise, ask for permission\n var msg="'"+tid+"' is currently being edited.\sn\sn";\n msg+="Press OK to save and close this tiddler\snor press Cancel to leave it opened";\n if (!confirm(msg)) return; else story.saveTiddler(tid);\n }\n story.closeTiddler(tid);\n });\n }\n else if (top)\n arguments[0]=null;\n else if (bottom)\n arguments[0]="bottom";\n if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {\n window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));\n config.lastURL = window.location.hash;\n document.title = wikifyPlain("SiteTitle") + " - " + title;\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering\n var isTopTiddler=(tiddlerElem.previousSibling==null);\n if (!isTopTiddler && (single || top))\n tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);\n else if (bottom)\n tiddlerElem.parentNode.insertBefore(tiddlerElem,null);\n else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler\n } else\n this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler\n var tiddlerElem=document.getElementById(story.idPrefix+title);\n if (tiddlerElem&&opt.chkSinglePageAutoScroll) {\n // scroll to top of page or top of tiddler\n var isTopTiddler=(tiddlerElem.previousSibling==null);\n var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);\n // if animating, defer scroll until after animation completes\n var delay=opt.chkAnimate?config.animDuration+10:0;\n setTimeout("window.scrollTo(0,"+yPos+")",delay); \n }\n}\n\nif (Story.prototype.SPM_coreDisplayTiddlers==undefined)\n Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;\nStory.prototype.displayTiddlers = function() {\n // suspend single/top/bottom modes when showing multiple tiddlers\n var opt=config.options;\n var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;\n var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;\n var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;\n this.SPM_coreDisplayTiddlers.apply(this,arguments);\n opt.chkBottomOfPageMode=saveBPM;\n opt.chkTopOfPageMode=saveTPM;\n opt.chkSinglePageMode=saveSPM;\n}\n//}}}
2009/06/04 -When searching "maple" and clicking show relevant containers with the search results, it finds no relevant containers. A container with the heading "Balmforth-Maple corridor" is in the inventory.\n\n2009/06/04- When searching titles of "collier's" and clicking show relevant containers, the application reports that an error occurred on the search.
Formats: [[XML|?format=xml]] | [[YAML|?format=yaml]]\n
//{{{\nconfig.formatters.unshift( {\n name: "inlinesliders",\n match: "\s\s+\s\s+\s\s+\s\s+|\s\s<slider",\n lookaheadRegExp: /(?:\s+\s+\s+\s+|<slider) (.*?)(?:>?)\sn((?:.|\sn)*?)\sn(?:====|<\s/slider>)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart )\n {\n var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\su00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");\n var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");\n panel.style.display = "none";\n wikify(lookaheadMatch[2],panel);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n },\n onClickSlider : function(e)\n {\n if(!e) var e = window.event;\n var n = this.nextSibling;\n n.style.display = (n.style.display=="none") ? "block" : "none";\n return false;\n }\n})\n//}}}
<<search>>\n<script>\nif (zw.loggedIn) {\nreturn "[[Logout|/cao/about/login/logout]]<<closeAll>><<newTiddler>><<newJournal>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Open options panel'>>";\n}\n</script>
Welcome aboard!
Archives and manuscripts are primary sources - historical records that provide detailed knowledge of the life of the era in which the material originated. The letters, diaries, reports, photographs, account books, maps and artifacts held in these collections provide raw materials that can be used to study, analyze, and interpret our history and culture.\nNot all collections housed at the Five Colleges are represented on the site. More finding aids will be added as they are available, and the institutions continue to acquire new collections. \n\nhttps://asteria.fivecolleges.edu/\n
/***\n|Name|SearchOptionsPlugin|\n|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|\n|Version|2.6.1|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides|Story.prototype.search, TiddlyWiki.prototype.search, config.macros.search.onKeyPress|\n|Description|extend core search function with additional user-configurable options|\n\nThe TiddlyWiki search function normally looks in both tiddler titles and tiddler body content ('text'). However, narrowing the search so that it examines only titles or only text, or expanding the search to include text contained in tiddler tags can be very helpful, especially when searching on common words or phrases. In addition, it is often useful for the search results to show tiddlers with matching titles before tiddlers that contain matching text or tags.\n\n!!!!!Usage\n<<<\nThis plugin adds checkboxes (see below and in AdvancedOptions) to let you selectively configure the TiddlyWiki search function to just examine any combination of tiddler titles, text, or tags. It also provides an option to switch the search results order between 'titles mixed in' (default) and 'titles shown first', as well as an option display the search results as a list of links (in an auto-generated "SearchResults" tiddler), rather than actually displaying all matching tiddlers. You can also enable/disable the "incremental search" (key-by-key searching), so that a search is only initiated when you press the ENTER key or click on the "search:" prompt text.\n<<<\n!!!!!Configuration\n<<<\nIn additional to the checkboxes in AdvancedOptions, a self-contained control panel is included here for your convenience:\n<<option chkSearchTitles>> Search in titles\n<<option chkSearchText>> Search in tiddler text\n<<option chkSearchTags>> Search in tags\n<<option chkSearchFields>> Search in data fields\n<<option chkSearchShadows>> Search shadow tiddlers\n<<option chkSearchTitlesFirst>> Show title matches first\n<<option chkSearchByDate>> Sort matching tiddlers by date\n<<option chkSearchList>> Show list of matches in [[SearchResults]]\n<<option chkSearchIncremental>> Incremental searching\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SearchOptionsPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SearchOptionsPlugin handling^^\n\nWhen installed, this plugin automatically adds checkboxes in the AdvancedOptions shadow tiddler so you can enable/disable the extended search behavior. However, if you have customized your AdvancedOptions, you will need to manually add {{{<<option chkSearchTitles>>}}}, {{{<<option chkSearchText>>}}} and {{{<<option chkSearchTitlesFirst>>}}} (with suitable prompt text) to your customized tiddler.\n<<<\n!!!!!Revision History\n<<<\n''2007.02.17 [2.6.1]'' added redefinition of config.macros.search.onKeyPress() to restore check to bypass key-by-key searching (i.e., when chkSearchIncremental==false), which had been unintentionally removed with v2.6.0\n''2007.02.13 [2.6.0]'' remove redefinition of config.macros.search.handler since core now includes handling for ENTER key.\n''2007.02.08 [2.5.1]'' include 'temporary' tag when creating SearchResults (for use with TemporaryTiddlersPlugin)\n''2007.01.29 [2.5.0]'' added support for "sort results by date". Default is to sort alphabetically (standard). When sorted by dates, most recent changes are shown first\n''2006.10.10 [2.4.0]'' added support for "search in tiddler data" (tiddler.fields) Default is to search extended data.\n''2006.04.06 [2.3.0]'' added support for "search in shadow tiddlers". Default is *not* to search in the shadows (i.e. standard TW behavior). Note: if a shadow tiddler has a 'real' counterpart, only the real tiddler is searched, since the shadow is inaccessible for viewing/editing.\n''2006.02.03 [2.2.1]'' rewrite timeout clearing code and blank search text handling to match 2.0.4 core release changes. note that core no longer permits "blank=all" searches, so neither does this plugin. To search for all, use "." with text patterns enabled.\n''2006.02.02 [2.2.0]'' in search.handler(), KeyHandler() function clears 'left over' timeout when search input is < 3 chars. Prevents searching on shorter text when shortened by rapid backspaces (<500msec)\n''2006.02.01 [2.1.9]'' in Story.prototype.search(), correct inverted logic for using/not using regular expressions when searching\nalso, blank search text now presents "No search text. Continue anyway?" confirm() message box, so search on blank can still be processed if desired by user.\n''2006.02.01 [2.1.8]'' in doSearch(), added alert/return if search text is blank\n''2006.01.20 [2.1.7]'' fixed setting of config.macros.search.reportTitle so that Tweaks can override it.\n''2006.01.19 [2.1.6]'' improved SearchResults formatting, added a "search again" form to the report (based on a suggestion from MorrisGray)\ndefine results report title using config.macros.search.reportTitle instead of hard-coding the tiddler title\n''2006.01.18 [2.1.5]'' Created separate functions for reportSearchResults(text,matches) and discardSearchResults(), so that other developers can create alternative report generators.\n''2006.01.17 [2.1.4]'' Use regExp.search() instead of regExp.test() to scan for matches. Correctd the problem where only half the matching tiddlers (the odd-numbered ones) were being reported.\n''2006.01.15 [2.1.3]'' Added information (date/time, username, search options used) to SearchResults output\n''2006.01.10 [2.1.2]'' use displayTiddlers() to render matched tiddlers. This lets you display multiple matching tiddlers, even if SinglePageModePlugin is enabled.\n''2006.01.08 [2.1.1]'' corrected invalid variable reference, "txt.value" to "text" in story.search()\n''2006.01.08 [2.1.0]'' re-write to match new store.search(), store.search.handler() and story.search() functions.\n''2005.12.30 [2.0.0]'' Upgraded to TW2.0\nwhen rendering SearchResults tiddler, closeTiddler() first to ensure display is refreshed.\n''2005.12.26 [1.4.0]'' added option to search for matching text in tiddler tags\n''2005.12.21 [1.3.7]'' use \s\s to 'escape' single quotes in tiddler titles when generating "Open all matching tiddlers" link. Also, added access key: "O", to trigger "open all" link.\nBased on a suggestion by UdoBorkowski.\n''2005.12.18 [1.3.6]'' call displayMessage() AFTER showing matching tiddlers so message is not cleared too soon\n''2005.12.17 [1.3.5]'' if no matches found, just display message and delete any existing SearchResults tiddler.\n''2005.12.17 [1.3.4]'' use {/%%/{/%%/{ and }/%%/}/%%/} to 'escape' display text in SearchResults tiddler to ensure that formatting contained in search string is not rendered \nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.3]'' tag SearchResults tiddler with 'excludeSearch' so it won't list itself in subsequent searches\nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.2]'' added "open all matching tiddlers..." link to search results output.\nBased on a suggestion by UdoBorkowski.\n''2005.12.10 [1.3.1]'' added "discard search results" link to end of search list tiddler output for quick self-removal of 'SearchResults' tiddler.\n''2005.12.01 [1.3.0]'' added chkSearchIncremental to enable/disable 'incremental' searching (i.e., search after each keystroke) (default is ENABLED).\nadded handling for Enter key so it can be used to start a search.\nBased on a suggestion by LyallPearce\n''2005.11.25 [1.2.1]'' renamed from SearchTitleOrTextPlugin to SearchOptionsPlugin\n''2005.11.25 [1.2.0]'' added chkSearchList option\nBased on a suggestion by RodneyGomes\n''2005.10.19 [1.1.0]'' added chkSearchTitlesFirst option.\nBased on a suggestion by ChristianHauck\n''2005.10.18 [1.0.0]'' Initial Release\nBased on a suggestion by LyallPearce.\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.searchOptions = {major: 2, minor: 6, revision: 1, date: new Date(2007,2,17)};\n//}}}\n\n//{{{\nif (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=true;\nif (config.options.chkSearchText==undefined) config.options.chkSearchText=true;\nif (config.options.chkSearchTags==undefined) config.options.chkSearchTags=true;\nif (config.options.chkSearchFields==undefined) config.options.chkSearchFields=true;\nif (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=false;\nif (config.options.chkSearchList==undefined) config.options.chkSearchList=false;\nif (config.options.chkSearchByDate==undefined) config.options.chkSearchByDate=false;\nif (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=true;\nif (config.options.chkSearchShadows==undefined) config.options.chkSearchShadows=false;\n\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitles>> Search in tiddler titles";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchText>> Search in tiddler text";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTags>> Search in tiddler tags";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchFields>> Search in tiddler data fields";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchShadows>> Search in shadow tiddlers";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitlesFirst>> Search results show title matches first";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchList>> Search results show list of matching tiddlers";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchByDate>> Search results sorted by modification date ";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchIncremental>> Incremental searching";\n\nif (config.macros.search.reportTitle==undefined) config.macros.search.reportTitle="SearchResults";\n//}}}\n\n//{{{\nconfig.macros.search.onKeyPress = function(e)\n{\n if(!e) var e = window.event;\n switch(e.keyCode)\n {\n case 13: // Ctrl-Enter\n case 10: // Ctrl-Enter on IE PC\n config.macros.search.doSearch(this);\n break;\n case 27: // Escape\n this.value = "";\n clearMessage();\n break;\n }\n if (config.options.chkSearchIncremental) {\n if(this.value.length > 2)\n {\n if(this.value != this.getAttribute("lastSearchText"))\n {\n if(config.macros.search.timeout)\n clearTimeout(config.macros.search.timeout);\n var txt = this;\n config.macros.search.timeout = setTimeout(function() {config.macros.search.doSearch(txt);},500);\n }\n }\n else\n {\n if(config.macros.search.timeout)\n clearTimeout(config.macros.search.timeout);\n }\n }\n}\n//}}}\n\n//{{{\nStory.prototype.search = function(text,useCaseSensitive,useRegExp)\n{\n highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");\n var matches = store.search(highlightHack,config.options.chkSearchByDate?"modified":"title","excludeSearch");\n if (config.options.chkSearchByDate) matches=matches.reverse(); // most recent changes first\n var q = useRegExp ? "/" : "'";\n clearMessage();\n if (!matches.length) {\n if (config.options.chkSearchList) discardSearchResults();\n displayMessage(config.macros.search.failureMsg.format([q+text+q]));\n } else {\n if (config.options.chkSearchList) \n reportSearchResults(text,matches);\n else {\n var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);\n this.closeAllTiddlers(); story.displayTiddlers(null,titles);\n displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));\n }\n }\n highlightHack = null;\n}\n//}}}\n\n//{{{\nTiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)\n{\n var candidates = this.reverseLookup("tags",excludeTag,false,sortField);\n\n // scan for matching titles first...\n var results = [];\n if (config.options.chkSearchTitles) {\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].title.search(searchRegExp)!=-1)\n results.push(candidates[t]);\n if (config.options.chkSearchShadows)\n for (var t in config.shadowTiddlers)\n if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))\n results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));\n }\n // then scan for matching text, tags, or field data\n for(var t=0; t<candidates.length; t++) {\n if (config.options.chkSearchText && candidates[t].text.search(searchRegExp)!=-1)\n results.pushUnique(candidates[t]);\n if (config.options.chkSearchTags && candidates[t].tags.join(" ").search(searchRegExp)!=-1)\n results.pushUnique(candidates[t]);\n if (config.options.chkSearchFields && store.forEachField!=undefined) // requires TW2.1 or above\n store.forEachField(candidates[t],\n function(tid,field,val) { if (val.search(searchRegExp)!=-1) results.pushUnique(candidates[t]); },\n true); // extended fields only\n }\n // then check for matching text in shadows\n if (config.options.chkSearchShadows)\n for (var t in config.shadowTiddlers)\n if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))\n results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));\n\n // if not 'titles first', or sorting by modification date, re-sort results to so titles, text, tag and field matches are mixed together\n if(!sortField) sortField = "title";\n var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }\n if (!config.options.chkSearchTitlesFirst || config.options.chkSearchByDate) results.sort(bySortField);\n\n return results;\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n//{{{\nif (!window.reportSearchResults) window.reportSearchResults=function(text,matches)\n{\n var title=config.macros.search.reportTitle\n var q = config.options.chkRegExpSearch ? "/" : "'";\n var body="\sn";\n\n // summary: nn tiddlers found matching '...', options used\n body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\sn";\n body+="^^//searched in:// ";\n body+=(config.options.chkSearchTitles?"''titles'' ":"");\n body+=(config.options.chkSearchText?"''text'' ":"");\n body+=(config.options.chkSearchTags?"''tags'' ":"");\n body+=(config.options.chkSearchFields?"''fields'' ":"");\n body+=(config.options.chkSearchShadows?"''shadows'' ":"");\n if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {\n body+=" //with options:// ";\n body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");\n body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");\n }\n body+="^^";\n\n // numbered list of links to matching tiddlers\n body+="\sn<<<";\n for(var t=0;t<matches.length;t++) {\n var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";\n body+="\sn# "+date+"[["+matches[t].title+"]]";\n }\n body+="\sn<<<\sn";\n\n // open all matches button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.displayTiddlers(null,["\n for(var t=0;t<matches.length;t++)\n body+="'"+matches[t].title.replace(/\s'/mg,"\s\s'")+"'"+((t<matches.length-1)?", ":"");\n body+="],1);\s" ";\n body+="accesskey=\s"O\s" ";\n body+="value=\s"open all matching tiddlers\s"></html> ";\n\n // discard search results button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"'); store.notify('"+title+"',true);\s" ";\n body+="value=\s"discard "+title+"\s"></html>";\n\n // search again\n body+="\sn\sn----\sn";\n body+="<<search \s""+text+"\s">>\sn";\n body+="<<option chkSearchTitles>>titles ";\n body+="<<option chkSearchText>>text ";\n body+="<<option chkSearchTags>>tags";\n body+="<<option chkSearchFields>>fields";\n body+="<<option chkSearchShadows>>shadows";\n body+="<<option chkCaseSensitiveSearch>>case-sensitive ";\n body+="<<option chkRegExpSearch>>text patterns";\n body+="<<option chkSearchByDate>>sort by date";\n\n // create/update the tiddler\n var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();\n tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch temporary");\n store.addTiddler(tiddler); story.closeTiddler(title);\n\n // use alternate "search again" label in <<search>> macro\n var oldprompt=config.macros.search.label;\n config.macros.search.label="search again";\n\n // render/refresh tiddler\n story.displayTiddler(null,title,1);\n store.notify(title,true);\n\n // restore standard search label\n config.macros.search.label=oldprompt;\n\n}\n\nif (!window.discardSearchResults) window.discardSearchResults=function()\n{\n // remove the tiddler\n story.closeTiddler(config.macros.search.reportTitle);\n store.deleteTiddler(config.macros.search.reportTitle);\n}\n//}}}
<<tagCloud protected systemConfig excludeSearch excludeLists excludeTimeline>>\n\n{{floatLeft{[[Contents By Creation Date]] }}} {{floatLeft{[[Contents By Title]]}}}
/***\n|''Name:''|abego.IncludePlugin|\n|''Version:''|1.0.1 (2007-04-30)|\n|''Type:''|plugin|\n|''Source:''|http://tiddlywiki.abego-software.de/#IncludePlugin|\n|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|\n|''Documentation:''|[[IncludePlugin Documentation|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]]|\n|''Community:''|([[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23IncludePlugin]]) ([[Support|http://groups.google.com/group/TiddlyWiki]])|\n|''Copyright:''|&copy; 2007 [[abego Software|http://www.abego-software.de]]|\n|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|\n|''~CoreVersion:''|2.1.3|\n|''Browser:''|Firefox 1.5.0.9 or better; Internet Explorer 6.0|\n***/\n/***\nThis plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/IncludePlugin/Plugin-Include-src.1.0.0.js]] to get the readable source code.\n***/\n///%\nif(!window.abego){window.abego={};}var invokeLater=function(_1,_2,_3){return abego.invokeLater?abego.invokeLater(_1,_2,_3):setTimeout(_1,_2);};abego.loadFile=function(_4,_5,_6){var _7=function(_8,_9,_a,_b,_c){return _8?_5(_a,_b,_9):_5(undefined,_b,_9,"Error loading %0".format([_b]));};if(_4.search(/^((http(s)?)|(file)):/)!=0){if(_4.search(/^((.\s:\s\s)|(\s\s\s\s)|(\s/))/)==0){_4="file://"+_4;}else{var _d=document.location.toString();var i=_d.lastIndexOf("/");_4=_d.substr(0,i+1)+_4;}_4=_4.replace(/\s\s/mg,"/");}loadRemoteFile(_4,_7,_6);};abego.loadTiddlyWikiStore=function(_f,_10,_11,_12){var _13=function(_14,_15){if(_12){_12(_14,"abego.loadTiddlyWikiStore",_15,_f,_11);}};var _16=function(_17,_18){var _19=_18.indexOf(startSaveArea);var _1a=_18.indexOf("<!--POST-BODY-END--"+">");var _1b=_18.lastIndexOf(endSaveArea,_1a==-1?_18.length:_1a);if((_19==-1)||(_1b==-1)){return config.messages.invalidFileError.format([_f]);}var _1c="<html><body>"+_18.substring(_19,_1b+endSaveArea.length)+"</body></html>";var _1d=document.createElement("iframe");_1d.style.display="none";document.body.appendChild(_1d);var doc=_1d.document;if(_1d.contentDocument){doc=_1d.contentDocument;}else{if(_1d.contentWindow){doc=_1d.contentWindow.document;}}doc.open();doc.writeln(_1c);doc.close();var _1f=doc.getElementById("storeArea");_17.loadFromDiv(_1f,"store");_1d.parentNode.removeChild(_1d);return null;};var _20=function(_21){_13("Error when loading %0".format([_f]),"Failed");_10(undefined,_f,_11,_21);return _21;};var _22=function(_23){_13("Loaded %0".format([_f]),"Done");_10(_23,_f,_11);return null;};var _24=function(_25,_26,_27,_28){if(_25===undefined){_20(_28);return;}_13("Processing %0".format([_f]),"Processing");var _29=config.messages.invalidFileError;config.messages.invalidFileError="The file '%0' does not appear to be a valid TiddlyWiki file";try{var _2a=new TiddlyWiki();var _2b=_16(_2a,_25);if(_2b){_20(_2b);}else{_22(_2a);}}catch(ex){_20(exceptionText(ex));}finally{config.messages.invalidFileError=_29;}};_13("Start loading %0".format([_f]),"Started");abego.loadFile(_f,_24,_11);};(function(){if(abego.TiddlyWikiIncluder){return;}var _2c="waiting";var _2d="loading";var _2e=1000;var _2f=-200;var _30=-100;var _31=-300;var _32;var _33=[];var _34={};var _35=[];var _36;var _37=[];var _38;var _39=function(){if(_32===undefined){_32=config.options.chkUseInclude===undefined||config.options.chkUseInclude;}return _32;};var _3a=function(url){return "No include specified for %0".format([url]);};var _3c=function(){var _3d=_35;_35=[];if(_3d.length){for(var i=0;i<_37.length;i++){_37[i](_3d);}}};var _3f;var _40=function(){if(_36!==undefined){clearInterval(_36);}_3f=0;var _41=function(){abego.TiddlyWikiIncluder.sendProgress("","","Done");};_36=setInterval(function(){_3f++;if(_3f<=10){return;}clearInterval(_36);_36=undefined;abego.TiddlyWikiIncluder.sendProgress("Refreshing...","","");refreshDisplay();invokeLater(_41,0,_2f);},1);};var _42=function(_43){var _44;for(var i=0;i<_33.length;i++){var _46=abego.TiddlyWikiIncluder.getStore(_33[i]);if(_46&&(_44=_43(_46,_33[i]))){return _44;}}};var _47=function(){if(!window.store){return invokeLater(_47,100);}var _48=store.fetchTiddler;store.fetchTiddler=function(_49){var t=_48.apply(this,arguments);if(t){return t;}if(config.shadowTiddlers[_49]!==undefined){return undefined;}if(_49==config.macros.newTiddler.title){return undefined;}return _42(function(_4b,url){var t=_4b.fetchTiddler(_49);if(t){t.includeURL=url;}return t;});};if(_33.length){_40();}};var _4e=function(){if(!window.store){return invokeLater(_4e,100);}var _4f=store.getTiddlerText("IncludeList");if(_4f){wikify(_4f,document.createElement("div"));}};var _50=function(_51){var _52=function(){var _53=store.forEachTiddler;var _54=function(_55){var _56={};var _57;var _58=function(_59,_5a){if(_56[_59]){return;}_56[_59]=1;if(_57){_5a.includeURL=_57;}_55.apply(this,arguments);};_53.call(store,_58);for(var n in config.shadowTiddlers){_56[n]=1;}_56[config.macros.newTiddler.title]=1;_42(function(_5c,url){_57=url;_5c.forEachTiddler(_58);});};store.forEachTiddler=_54;try{return _51.apply(this,arguments);}finally{store.forEachTiddler=_53;}};return _52;};var _5e=function(_5f,_60){return _5f[_60]=_50(_5f[_60]);};abego.TiddlyWikiIncluder={};abego.TiddlyWikiIncluder.setProgressFunction=function(_61){_38=_61;};abego.TiddlyWikiIncluder.getProgressFunction=function(_62){return _38;};abego.TiddlyWikiIncluder.sendProgress=function(_63,_64,_65){if(_38){_38.apply(this,arguments);}};abego.TiddlyWikiIncluder.onError=function(url,_67){displayMessage("Error when including '%0':\sn%1".format([url,_67]));};abego.TiddlyWikiIncluder.hasPendingIncludes=function(){for(var i=0;i<_33.length;i++){var _69=abego.TiddlyWikiIncluder.getState(_33[i]);if(_69==_2c||_69==_2d){return true;}}return false;};abego.TiddlyWikiIncluder.getIncludes=function(){return _33.slice();};abego.TiddlyWikiIncluder.getState=function(url){var s=_34[url];if(!s){return _3a(url);}return typeof s=="string"?s:null;};abego.TiddlyWikiIncluder.getStore=function(url){var s=_34[url];if(!s){return _3a(url);}return s instanceof TiddlyWiki?s:null;};abego.TiddlyWikiIncluder.include=function(url,_6f){if(!_39()||_34[url]){return;}var _70=this;_33.push(url);_34[url]=_2c;var _71=function(_72,_73,_74,_75){if(_72===undefined){_34[url]=_75;_70.onError(url,_75);return;}_34[url]=_72;_35.push(url);invokeLater(_3c);};var _76=function(){_34[url]=_2d;abego.loadTiddlyWikiStore(url,_71,null,_38);};if(_6f){invokeLater(_76,_6f);}else{_76();}};abego.TiddlyWikiIncluder.forReallyEachTiddler=function(_77){var _78=function(){store.forEachTiddler(_77);};_50(_78).call(store);};abego.TiddlyWikiIncluder.getFunctionUsingForReallyEachTiddler=_50;abego.TiddlyWikiIncluder.useForReallyEachTiddler=_5e;abego.TiddlyWikiIncluder.addListener=function(_79){_37.push(_79);};abego.TiddlyWikiIncluder.addListener(_40);if(config.options.chkUseInclude===undefined){config.options.chkUseInclude=true;}config.shadowTiddlers.AdvancedOptions+="\sn<<option chkUseInclude>> Include ~TiddlyWikis (IncludeList | IncludeState | [[help|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]])\sn^^(Reload this ~TiddlyWiki to make changes become effective)^^";config.shadowTiddlers.IncludeState="<<includeState>>";var _7a=function(e,_7c,_7d){if(!anim||!abego.ShowAnimation){e.style.display=_7c?"block":"none";return;}anim.startAnimating(new abego.ShowAnimation(e,_7c,_7d));};abego.TiddlyWikiIncluder.getDefaultProgressFunction=function(){setStylesheet(".includeProgressState{\sn"+"background-color:#FFCC00;\sn"+"position:absolute;\sn"+"right:0.2em;\sn"+"top:0.2em;\sn"+"width:7em;\sn"+"padding-left:0.2em;\sn"+"padding-right:0.2em\sn"+"}\sn","abegoInclude");var _7e=function(){var e=document.createElement("div");e.className="includeProgressState";e.style.display="none";document.body.appendChild(e);return e;};var _80=_7e();var _81=function(_82){removeChildren(_80);createTiddlyText(_80,_82);_7a(_80,true,0);};var _83=function(){invokeLater(function(){_7a(_80,false,_2e);},100,_30);};var _84=function(_85,_86,_87,url,_89){if(_87=="Done"||_87=="Failed"){_83();return;}if(_86=="abego.loadTiddlyWikiStore"){_3f=0;if(_87=="Processing"){_81("Including...");}}else{_81(_85);}};return _84;};abego.TiddlyWikiIncluder.setProgressFunction(abego.TiddlyWikiIncluder.getDefaultProgressFunction());config.macros.include={};config.macros.include.handler=function(_8a,_8b,_8c,_8d,_8e,_8f){_8c=_8e.parseParams("url",null,true,false,true);var _90=parseInt(getParam(_8c,"delay","0"));var _91=_8c[0]["url"];var _92=getFlag(_8c,"hide",false);if(!_92){createTiddlyText(createTiddlyElement(_8a,"code"),_8d.source.substring(_8d.matchStart,_8d.nextMatch));}for(var i=0;_91&&i<_91.length;i++){abego.TiddlyWikiIncluder.include(_91[i],_90);}};config.macros.includeState={};config.macros.includeState.handler=function(_94,_95,_96,_97,_98,_99){var _9a=function(){var s="";var _9c=abego.TiddlyWikiIncluder.getIncludes();if(!_9c.length){return "{{noIncludes{\snNo includes or 'include' is disabled (see AdvancedOptions)\sn}}}\sn";}s+="|!Address|!State|\sn";for(var i=0;i<_9c.length;i++){var inc=_9c[i];s+="|{{{"+inc+"}}}|";var t=abego.TiddlyWikiIncluder.getState(inc);s+=t?"{{{"+t+"}}}":"included";s+="|\sn";}s+="|includeState|k\sn";return s;};var _a0=function(){removeChildren(div);wikify(_9a(),div);if(abego.TiddlyWikiIncluder.hasPendingIncludes()){invokeLater(_a0,500,_31);}};var div=createTiddlyElement(_94,"div");invokeLater(_a0,0,_31);};var _a2=Tiddler.prototype.isReadOnly;Tiddler.prototype.isReadOnly=function(){return _a2.apply(this,arguments)||this.isIncluded();};Tiddler.prototype.isIncluded=function(){return this.includeURL!=undefined;};Tiddler.prototype.getIncludeURL=function(){return this.includeURL;};var _a3={getMissingLinks:1,getOrphans:1,getTags:1,reverseLookup:1,updateTiddlers:1};for(var n in _a3){_5e(TiddlyWiki.prototype,n);}var _a5=function(){if(abego.IntelliTagger){_5e(abego.IntelliTagger,"assistTagging");}};var _a6=function(){if(config.macros.forEachTiddler){_5e(config.macros.forEachTiddler,"findTiddlers");}};_47();invokeLater(_4e,100);invokeLater(_a5,100);invokeLater(_a6,100);})();\n//%/\n
<!--{{{-->\n\n<div macro='showWhen zw.loggedIn'>\n<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references revisions jump'> </div>\n</div>\n\n<div class='title' macro='view title'></div>\n\n<div macro='showWhen zw.loggedIn'>\n <div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[DD MMM YYYY]]'></span> (created <span macro='view created date [[DD MMM YYYY]]'></span>) <span macro='view renamedSubTitle'></span> <span macro='view historicalSubTitle'></span></div>\n</div>\n\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n\n<!--}}}-->\n\n
Brian added a counter that shows how many finding aids were indexed for the search. This will give us a way to monitor growth and to give the user an idea of the breadth their search.
/***\nThis tiddler is a special status tiddler. It is a DTML script that interrogates Zope about the status of your tiddlers. The variables below are dynamic and this tiddler is reloaded when you login. Editing this tiddler through ZiddlyWiki will break your ZiddlyWiki. (If you need to make modifications, edit it in the ZMI)\n***/\n//{{{\nif(typeof document.zw == "undefined") var zw = {};\nzw.loggedIn = false;\nzw.anonEdit = false;\nzw.isAdmin = false;\nzw.latestTiddler = 149796700617;\nzw.username = 'Anonymous User';\nconfig.options.txtUserName = 'Anonymous User';\nzw.serverUrl = "http://library.wcsu.edu/cao/about";\nversion.extensions.ZiddlyWiki = '1';\nzw.tiddlerList = {\n"SiteTitle": "894.36952.45111.33501" ,"PageTemplate": "894.20205.62044.6126" ,"StyleSheet": "896.25768.20051.43963" ,"contentFooter": "905.1559.5183.25617" ,"DefaultTiddlers": "943.58472.13311.16640" ,"Getting Help": "894.5692.53372.33194" ,"OptionsPanel": "894.8554.39111.62139" ,"SideBarOptions": "896.25787.3783.14677" ,"GettingStarted": "894.5697.22070.42632" ,"Using Diacritics and Accented Characters": "943.31146.2796.11485" ,"Welcome": "958.30084.14110.8243" ,"2008/11/12 - Prototype Launched": "906.64511.62999.19746" ,"2009/03/03 - Count of Finding Aids Displayed": "894.28232.11366.24285" ,"Meetings": "943.29761.2477.41352" ,"How To's": "958.30056.55036.3584" ,"Filenames": "960.11389.2879.46233" ,"The url attribute of the &lt;eadid&gt; tag": "905.64697.41609.55176" ,"ViewTemplate": "894.24162.49093.22203" ,"The mainagency code of the &lt;eadid&gt; tag": "906.9784.8145.9574" ,"Bugs or Issues": "943.58568.23998.8652" ,"Relevant Container Search Irregularities": "898.9680.35358.7236" ,"Highlight Search Terms on Loading of EAD": "898.9671.62747.38212" ,"Using entities in finding aids": "894.35663.29531.20189" ,"State Library Count": "898.9679.45087.54664" ,"Polar Bear Expedition Digital Collections": "943.29767.14045.102" ,"Interesting Sites": "959.31182.13153.52599" ,"News": "959.35272.3562.24456" ,"Contents": "943.29756.46811.60023" ,"Contents By Title": "905.1554.1581.45977" ,"MarkupPostHead": "905.1568.34040.22493" ,"Contents By Creation Date": "905.1556.56086.58794" ,"2010/05/19 - LCHS Joins the CAO": "906.22920.59652.62993" ,"2010/04/06 - University of Connecticut Joins CAO": "905.1574.56219.43110" ,"Maps": "947.32601.54217.1297" ,"2010/09 Meeting": "943.31148.38379.33792" ,"2010/11/19 - Yale Joins the CAO": "906.64509.42599.25958" ,"2011/04/05 - Connecticut Historical Society Joins the CAO": "914.36673.14314.60603" ,"2011/11/21 - Fairfield History Center Joins the CAO": "930.34850.17855.42905" ,"2012-10-01 - The Jewish Historical Society of Greater Hartford joins the CAO": "930.34854.32851.40960" ,"2013-11-03 - Many new finding aids in the CAO": "943.30026.58753.65348" ,"AtoM": "943.29955.6676.9557" ,"TiddlyWiki Help": "943.29795.47660.21248" ,"RIAMCO": "959.31182.61379.19336" ,"Five Colleges Archives and Manuscripts Collections": "943.29962.9763.58811" ,"2015-05-15 - Hartford History Center joins CAO": "943.30032.26378.8857" ,"2010/12/17 - Wesleyan University joins the CAO": "943.30032.40726.42257" ,"2015-02-09 - CAO presentation at CSL Conservation Connection": "943.30036.33891.2628" ,"2014-06-23 - CAO presentation at CSL Conservation Connection": "943.30039.38351.55108" ,"2015-05-09 - CAO turns 5": "943.30047.56553.59136" ,"2014-12-17 - CSU Archivists meeting @ CCSU.": "943.30066.55604.25173" ,"2014-09-02 - Historic New England Joins the CAO": "943.30071.25266.28637" ,"CAO Survey": "943.50261.55107.19524" ,"CAO EAD Creation Template": "957.4928.64581.17800" ,"Problem with Internet Explorer when using the CAO Template": "945.2546.8544.34952" ,"CTDA": "943.60089.40052.2560" ,"CHO": "943.60090.13713.11417" ,"CAO Documentation": "944.16248.41473.43349" ,"Create an inventory in EAD": "959.35271.1802.40209" ,"XML Machine": "959.31188.9008.31761" ,"Basic Finding Aid Data - &quot;Creating Finding Aids Tutorial&quot; by Leith Johnson (Wesleyan University)": "959.35261.2238.22818" ,"Create Your CAO Network Folder": "960.1250.10512.58948" ,"To transfer EAD files into your CAO folder - Cyberduck software instructions": "960.1247.42554.25292" ,"2017-03-02 - CAO presentation at CSL Conservation Connection": "959.35278.22530.35072" ,"Coding Conventions": "960.11396.50436.25753" };\n//}}}\n
The Jewish Historical Society of Greater Hartford joins the CAO.
!!!Main Menu\n[[Welcome]]\n[[Search the CAO EAD files|http://library.wcsu.edu/cao/]]\n[[Application Form]]\n----\n!!!Other Items\n[[Coding Conventions]]\n[[How To's]]\n[[Meetings]]\n[[News]]\n[[Bugs or Issues]]\n[[Interesting Sites]]\n[[Maps]]\n----\n!!!Contents\n[[Contents]]\n\n<script>\nif (!zw.loggedIn) return "[[Login to make changes|/cao/about/login]]"\n</script>
Powered by [[ZiddlyWiki|http://ziddlywiki.com]]\n
/***\n| Name:|RenameTagsPlugin|\n| Description:|Allows you to easily rename or delete tags across multiple tiddlers|\n| Version:|3.0 ($Rev: 1845 $)|\n| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|\n| Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| License|http://mptw.tiddlyspot.com/#TheBSDLicense|\nRename a tag and you will be prompted to rename it in all its tagged tiddlers.\n***/\n//{{{\nconfig.renameTags = {\n\n prompts: {\n rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",\n remove: "Remove the tag '%0' from %1 tidder%2?"\n },\n\n removeTag: function(tag,tiddlers) {\n store.suspendNotifications();\n for (var i=0;i<tiddlers.length;i++) {\n store.setTiddlerTag(tiddlers[i].title,false,tag);\n }\n store.resumeNotifications();\n store.notifyAll();\n },\n\n renameTag: function(oldTag,newTag,tiddlers) {\n store.suspendNotifications();\n for (var i=0;i<tiddlers.length;i++) {\n store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old\n store.setTiddlerTag(tiddlers[i].title,true,newTag); // add new\n }\n store.resumeNotifications();\n store.notifyAll();\n },\n\n storeMethods: {\n\n saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,\n\n saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields) {\n if (title != newTitle) {\n var tagged = this.getTaggedTiddlers(title);\n if (tagged.length > 0) {\n // then we are renaming a tag\n if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))\n config.renameTags.renameTag(title,newTitle,tagged);\n\n if (!this.tiddlerExists(title) && newBody == "")\n // dont create unwanted tiddler\n return null;\n }\n }\n return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields);\n },\n\n removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,\n\n removeTiddler: function(title) {\n var tagged = this.getTaggedTiddlers(title);\n if (tagged.length > 0)\n if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))\n config.renameTags.removeTag(title,tagged);\n return this.removeTiddler_orig_renameTags(title);\n }\n\n },\n\n init: function() {\n merge(TiddlyWiki.prototype,this.storeMethods);\n }\n}\n\nconfig.renameTags.init();\n\n//}}}
[img[http://archives.library.wcsu.edu/images/cao/caoWhite.jpg]]\n<html>\n<iframe width="500" height="300" scrolling="no" frameborder="no" src="https://www.google.com/fusiontables/embedviz?q=select+col0+from+18H1cz_9Lg3ppD3_V6MugrJvpq5wMRK9nbypC8g&amp;viz=MAP&amp;h=false&amp;lat=41.47517584414399&amp;lng=-72.83169734999996&amp;t=1&amp;z=8&amp;l=col0"></iframe>\n</html>
The value of the @url attribute of the <eadid> tag should contain the link back to the ead document on ''your'' server. \n\nSee the url attribute below points to where the repository's finding aid lives:\n{{{\n<eadid mainagencycode="US-ctdabn" url="http://library.wcsu.edu/web/about/units/archives/findingaids/academicPrograms.xml" identifier="RG 6">academicPrograms</eadid>\n}}}\nNotice the prefix of the filename and the content of the eadid are the same.\n\n\n<<tag Coding>>
/***\n\n|Name|ToggleSideBarMacro|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#ToggleSideBarMacro|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nProvides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.\n\n!Demo\n<<toggleSideBar "Toggle Sidebar">>\n\n!Usage:\n{{{<<toggleSideBar>>}}} <<toggleSideBar>>\nadditional options:\n{{{<<toggleSideBar label tooltip show/hide>>}}} where:\nlabel = custom label for the button,\ntooltip = custom tooltip for the button,\nshow/hide = use one or the other, determines whether the sidebar is shown at first or not.\n(default is to show the sidebar)\n\nYou can add it to your tiddler toolbar, your MainMenu, or where you like really.\nIf you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:\n{{{ .HideSideBarButton {float:right;} }}}\n\n!History\n*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. \n*20-07-06: version 0.11\n*27-04-06: version 0.1: working.\n\n!Code\n***/\n//{{{\nconfig.macros.toggleSideBar={};\n\nconfig.macros.toggleSideBar.settings={\n styleHide : "#sidebar { display: none;}\sn"+"#contentWrapper #displayArea { margin-right: 1em;}\sn"+"",\n styleShow : " ",\n arrow1: "&#8617;",\n arrow2: "&#8618;"\n};\n\nconfig.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var tooltip= params[1]||'toggle sidebar';\n var mode = (params[2] && params[2]=="hide")? "hide":"show";\n var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;\n var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;\n var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");\n if (mode == "hide")\n { \n (document.getElementById("sidebar")).setAttribute("toggle","hide");\n setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");\n }\n};\n\nconfig.macros.toggleSideBar.onToggleSideBar = function(){\n var sidebar = document.getElementById("sidebar");\n var settings = config.macros.toggleSideBar.settings;\n if (sidebar.getAttribute("toggle")=='hide')\n {\n setStylesheet(settings.styleShow,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","show");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);\n }\n else\n { \n setStylesheet(settings.styleHide,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","hide");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);\n }\n\n return false;\n}\n\nsetStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\sn","ToggleSideBarButtonStyles");\n\n//}}}
/***\n|Name|AutoOpenTiddlersPlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#AutoOpenTiddlersPlugin|\n|Version|0.21|\n|Requires|~TW2.x|\n!!!Description:\nOpen a user defined number of recent tiddlers automatically when the TW loads.\nYou can also specify a tag and only load tiddlers that have that tag.\nTo change the number of tiddlers automatically opened, or define a tag to use, ed the config.autoOpenTiddlers part of the code below.\n\n!!!To Do\n*add an option to exclude tiddlers with a particular tag\n\n!!!Code\n***/\n//{{{\n//edit this section to change the default settings\nconfig.autoOpenTiddlers = \n{\n count: 3, //number of tiddlers opened.\n tag: undefined //change if you want to open tiddlers with a specific tag, eg: 'DefaultTiddlers'\n}\n\n\nconfig.autoOpenTiddlers.handler = function()\n{\n if (this.tag == undefined)\n var newTiddlers = store.getTiddlers("modified");\n else\n var newTiddlers = store.getTaggedTiddlers(this.tag,"modified");\n var newTiddlers = newTiddlers.reverse();\n var max = Math.min(this.count,newTiddlers.length-1);\n for (var i=max; i>=0; i--)\n { story.displayTiddler(null,newTiddlers[i].title);} \n}\n\nwindow.old_lewcid_autoOpenTiddlers_restart = restart;\nrestart = function ()\n{\n window.old_lewcid_autoOpenTiddlers_restart();\n config.autoOpenTiddlers.handler();\n}\n//}}}
/***\n|''Name:''|DataTiddlerPlugin|\n|''Version:''|1.0.6 (2006-08-26)|\n|''Source:''|http://tiddlywiki.abego-software.de/#DataTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Description\nEnhance your tiddlers with structured data (such as strings, booleans, numbers, or even arrays and compound objects) that can be easily accessed and modified through named fields (in JavaScript code).\n\nSuch tiddler data can be used in various applications. E.g. you may create tables that collect data from various tiddlers. \n\n''//Example: "Table with all December Expenses"//''\n{{{\n<<forEachTiddler\n where\n 'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'\n write\n '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\sn"'\n>>\n}}}\n//(This assumes that expenses are stored in tiddlers tagged with "expense".)//\n<<forEachTiddler\n where\n 'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'\n write\n '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\sn"'\n>>\nFor other examples see DataTiddlerExamples.\n\n\n\n\n''Access and Modify Tiddler Data''\n\nYou can "attach" data to every tiddler by assigning a JavaScript value (such as a string, boolean, number, or even arrays and compound objects) to named fields. \n\nThese values can be accessed and modified through the following Tiddler methods:\n|!Method|!Example|!Description|\n|{{{data(field)}}}|{{{t.data("age")}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|\n|{{{data(field,defaultValue)}}}|{{{t.data("isVIP",false)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|\n|{{{data()}}}|{{{t.data()}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|\n|{{{setData(field,value)}}}|{{{t.setData("age",42)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|\n|{{{setData(field,value,defaultValue)}}}|{{{t.setData("isVIP",flag,false)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|\n\nAlternatively you may use the following functions to access and modify the data. In this case the tiddler argument is either a tiddler or the name of a tiddler.\n|!Method|!Description|\n|{{{DataTiddler.getData(tiddler,field)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|\n|{{{DataTiddler.getData(tiddler,field,defaultValue)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|\n|{{{DataTiddler.getDataObject(tiddler)}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|\n|{{{DataTiddler.setData(tiddler,field,value)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|\n|{{{DataTiddler.setData(tiddler,field,value,defaultValue)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|\n//(For details on the various functions see the detailed comments in the source code.)//\n\n\n''Data Representation in a Tiddler''\n\nThe data of a tiddler is stored as plain text in the tiddler's content/text, inside a "data" section that is framed by a {{{<data>...</data>}}} block. Inside the data section the information is stored in the [[JSON format|http://www.crockford.com/JSON/index.html]]. \n\n//''Data Section Example:''//\n{{{\n<data>{"isVIP":true,"user":"John Brown","age":34}</data>\n}}}\n\nThe data section is not displayed when viewing the tiddler (see also "The showData Macro").\n\nBeside the data section a tiddler may have all kind of other content.\n\nTypically you will not access the data section text directly but use the methods given above. Nevertheless you may retrieve the text of the data section's content through the {{{DataTiddler.getDataText(tiddler)}}} function.\n\n\n''Saving Changes''\n\nThe "setData" methods respect the "ForceMinorUpdate" and "AutoSave" configuration values. I.e. when "ForceMinorUpdate" is true changing a value using setData will not affect the "modifier" and "modified" attributes. With "AutoSave" set to true every setData will directly save the changes after a setData.\n\n\n''Notifications''\n\nNo notifications are sent when a tiddler's data value is changed through the "setData" methods. \n\n''Escape Data Section''\nIn case that you want to use the text {{{<data>}}} or {{{</data>}}} in a tiddler text you must prefix the text with a tilde ('~'). Otherwise it may be wrongly considered as the data section. The tiddler text {{{~<data>}}} is displayed as {{{<data>}}}.\n\n\n''The showData Macro''\n\nBy default the data of a tiddler (that is stored in the {{{<data>...</data>}}} section of the tiddler) is not displayed. If you want to display this data you may used the {{{<<showData ...>>}}} macro:\n\n''Syntax:'' \n|>|{{{<<}}}''showData '' [''JSON''] [//tiddlerName//] {{{>>}}}|\n|''JSON''|By default the data is rendered as a table with a "Name" and "Value" column. When defining ''JSON'' the data is rendered in JSON format|\n|//tiddlerName//|Defines the tiddler holding the data to be displayed. When no tiddler is given the tiddler containing the showData macro is used. When the tiddler name contains spaces you must quote the name (or use the {{{[[...]]}}} syntax.)|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\n\n!Revision history\n* v1.0.6 (2006-08-26) \n** Removed misleading comment\n* v1.0.5 (2006-02-27) (Internal Release Only)\n** Internal\n*** Make "JSLint" conform\n* v1.0.4 (2006-02-05)\n** Bugfix: showData fails in TiddlyWiki 2.0\n* v1.0.3 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.2 (2005-12-22)\n** Enhancements:\n*** Handle texts "<data>" or "</data>" more robust when used in a tiddler text or as a field value.\n*** Improved (JSON) error messages.\n** Bugs fixed: \n*** References are not updated when using the DataTiddler.\n*** Changes to compound objects are not always saved.\n*** "~</data>" is not rendered correctly (expected "</data>")\n* v1.0.1 (2005-12-13)\n** Features: \n*** The showData macro supports an optional "tiddlername" argument to specify the tiddler containing the data to be displayed\n** Bugs fixed: \n*** A script immediately following a data section is deleted when the data is changed. (Thanks to GeoffS for reporting.)\n* v1.0.0 (2005-12-12)\n** initial version\n\n!Code\n***/\n//{{{\n//============================================================================\n//============================================================================\n// DataTiddlerPlugin\n//============================================================================\n//============================================================================\n\n// Ensure that the DataTiddler Plugin is only installed once.\n//\nif (!version.extensions.DataTiddlerPlugin) {\n\n\n\nversion.extensions.DataTiddlerPlugin = {\n major: 1, minor: 0, revision: 6,\n date: new Date(2006, 7, 26), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#DataTiddlerPlugin"\n};\n\n// For backward compatibility with v1.2.x\n//\nif (!window.story) window.story=window; \nif (!TiddlyWiki.prototype.getTiddler) {\n TiddlyWiki.prototype.getTiddler = function(title) { \n var t = this.tiddlers[title]; \n return (t !== undefined && t instanceof Tiddler) ? t : null; \n };\n}\n\n//============================================================================\n// DataTiddler Class\n//============================================================================\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nfunction DataTiddler() {\n}\n\nDataTiddler = {\n // Function to stringify a JavaScript value, producing the text for the data section content.\n // (Must match the implementation of DataTiddler.parse.)\n //\n stringify : null,\n \n\n // Function to parse the text for the data section content, producing a JavaScript value.\n // (Must match the implementation of DataTiddler.stringify.)\n //\n parse : null\n};\n\n// Ensure access for IE\nwindow.DataTiddler = DataTiddler;\n\n// ---------------------------------------------------------------------------\n// Data Accessor and Mutator\n// ---------------------------------------------------------------------------\n\n\n// Returns the value of the given data field of the tiddler.\n// When no such field is defined or its value is undefined\n// the defaultValue is returned.\n// \n// @param tiddler either a tiddler name or a tiddler\n//\nDataTiddler.getData = function(tiddler, field, defaultValue) {\n var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;\n if (!(t instanceof Tiddler)) {\n throw "Tiddler expected. Got "+tiddler;\n }\n\n return DataTiddler.getTiddlerDataValue(t, field, defaultValue);\n};\n\n\n// Sets the value of the given data field of the tiddler to\n// the value. When the value is equal to the defaultValue\n// no value is set (and the field is removed)\n//\n// Changing data of a tiddler will not trigger notifications.\n// \n// @param tiddler either a tiddler name or a tiddler\n//\nDataTiddler.setData = function(tiddler, field, value, defaultValue) {\n var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;\n if (!(t instanceof Tiddler)) {\n throw "Tiddler expected. Got "+tiddler+ "("+t+")";\n }\n\n DataTiddler.setTiddlerDataValue(t, field, value, defaultValue);\n};\n\n\n// Returns the data object of the tiddler, with a property for every field.\n//\n// The properties of the returned data object may only be read and\n// not be modified. To modify the data use DataTiddler.setData(...) \n// or the corresponding Tiddler method.\n//\n// If no data section is defined a new (empty) object is returned.\n//\n// @param tiddler either a tiddler name or a Tiddler\n//\nDataTiddler.getDataObject = function(tiddler) {\n var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;\n if (!(t instanceof Tiddler)) {\n throw "Tiddler expected. Got "+tiddler;\n }\n\n return DataTiddler.getTiddlerDataObject(t);\n};\n\n// Returns the text of the content of the data section of the tiddler.\n//\n// When no data section is defined for the tiddler null is returned \n//\n// @param tiddler either a tiddler name or a Tiddler\n// @return [may be null]\n//\nDataTiddler.getDataText = function(tiddler) {\n var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;\n if (!(t instanceof Tiddler)) {\n throw "Tiddler expected. Got "+tiddler;\n }\n\n return DataTiddler.readDataSectionText(t);\n};\n\n\n// ---------------------------------------------------------------------------\n// Internal helper methods (must not be used by code from outside this plugin)\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// The original JSONError is not very user friendly, \n// especially it does not define a toString() method\n// Therefore we extend it here.\n//\nDataTiddler.extendJSONError = function(ex) {\n if (ex.name == 'JSONError') {\n ex.toString = function() {\n return ex.name + ": "+ex.message+" ("+ex.text+")";\n };\n }\n return ex;\n};\n\n// Internal.\n//\n// @param t a Tiddler\n//\nDataTiddler.getTiddlerDataObject = function(t) {\n if (t.dataObject === undefined) {\n var data = DataTiddler.readData(t);\n t.dataObject = (data) ? data : {};\n }\n \n return t.dataObject;\n};\n\n\n// Internal.\n//\n// @param tiddler a Tiddler\n//\nDataTiddler.getTiddlerDataValue = function(tiddler, field, defaultValue) {\n var value = DataTiddler.getTiddlerDataObject(tiddler)[field];\n return (value === undefined) ? defaultValue : value;\n};\n\n\n// Internal.\n//\n// @param tiddler a Tiddler\n//\nDataTiddler.setTiddlerDataValue = function(tiddler, field, value, defaultValue) {\n var data = DataTiddler.getTiddlerDataObject(tiddler);\n var oldValue = data[field];\n \n if (value == defaultValue) {\n if (oldValue !== undefined) {\n delete data[field];\n DataTiddler.save(tiddler);\n }\n return;\n }\n data[field] = value;\n DataTiddler.save(tiddler);\n};\n\n// Internal.\n//\n// Reads the data section from the tiddler's content and returns its text\n// (as a String).\n//\n// Returns null when no data is defined.\n//\n// @param tiddler a Tiddler\n// @return [may be null]\n//\nDataTiddler.readDataSectionText = function(tiddler) {\n var matches = DataTiddler.getDataTiddlerMatches(tiddler);\n if (matches === null || !matches[2]) {\n return null;\n }\n return matches[2];\n};\n\n// Internal.\n//\n// Reads the data section from the tiddler's content and returns it\n// (as an internalized object).\n//\n// Returns null when no data is defined.\n//\n// @param tiddler a Tiddler\n// @return [may be null]\n//\nDataTiddler.readData = function(tiddler) {\n var text = DataTiddler.readDataSectionText(tiddler);\n try {\n return text ? DataTiddler.parse(text) : null;\n } catch(ex) {\n throw DataTiddler.extendJSONError(ex);\n }\n};\n\n// Internal.\n// \n// Returns the serialized text of the data of the given tiddler, as it\n// should be stored in the data section.\n//\n// @param tiddler a Tiddler\n//\nDataTiddler.getDataTextOfTiddler = function(tiddler) {\n var data = DataTiddler.getTiddlerDataObject(tiddler);\n return DataTiddler.stringify(data);\n};\n\n\n// Internal.\n// \nDataTiddler.indexOfNonEscapedText = function(s, subString, startIndex) {\n var index = s.indexOf(subString, startIndex);\n while ((index > 0) && (s[index-1] == '~')) { \n index = s.indexOf(subString, index+1);\n }\n return index;\n};\n\n// Internal.\n//\nDataTiddler.getDataSectionInfo = function(text) {\n // Special care must be taken to handle "<data>" and "</data>" texts inside\n // a data section. \n // Also take care not to use an escaped <data> (i.e. "~<data>") as the start \n // of a data section. (Same for </data>)\n\n // NOTE: we are explicitly searching for a data section that contains a JSON\n // string, i.e. framed with braces. This way we are little bit more robust in\n // case the tiddler contains unescaped texts "<data>" or "</data>". This must\n // be changed when using a different stringifier.\n\n var startTagText = "<data>{";\n var endTagText = "}</data>";\n\n var startPos = 0;\n\n // Find the first not escaped "<data>".\n var startDataTagIndex = DataTiddler.indexOfNonEscapedText(text, startTagText, 0);\n if (startDataTagIndex < 0) {\n return null;\n }\n\n // Find the *last* not escaped "</data>".\n var endDataTagIndex = text.indexOf(endTagText, startDataTagIndex);\n if (endDataTagIndex < 0) {\n return null;\n }\n var nextEndDataTagIndex;\n while ((nextEndDataTagIndex = text.indexOf(endTagText, endDataTagIndex+1)) >= 0) {\n endDataTagIndex = nextEndDataTagIndex;\n }\n\n return {\n prefixEnd: startDataTagIndex, \n dataStart: startDataTagIndex+(startTagText.length)-1, \n dataEnd: endDataTagIndex, \n suffixStart: endDataTagIndex+(endTagText.length)\n };\n};\n\n// Internal.\n// \n// Returns the "matches" of a content of a DataTiddler on the\n// "data" regular expression. Return null when no data is defined\n// in the tiddler content.\n//\n// Group 1: text before data section (prefix)\n// Group 2: content of data section\n// Group 3: text behind data section (suffix)\n//\n// @param tiddler a Tiddler\n// @return [may be null] null when the tiddler contains no data section, otherwise see above.\n//\nDataTiddler.getDataTiddlerMatches = function(tiddler) {\n var text = tiddler.text;\n var info = DataTiddler.getDataSectionInfo(text);\n if (!info) {\n return null;\n }\n\n var prefix = text.substr(0,info.prefixEnd);\n var data = text.substr(info.dataStart, info.dataEnd-info.dataStart+1);\n var suffix = text.substr(info.suffixStart);\n \n return [text, prefix, data, suffix];\n};\n\n\n// Internal.\n//\n// Saves the data in a <data> block of the given tiddler (as a minor change). \n//\n// The "chkAutoSave" and "chkForceMinorUpdate" options are respected. \n// I.e. the TiddlyWiki *file* is only saved when AutoSave is on.\n//\n// Notifications are not send. \n//\n// This method should only be called when the data really has changed. \n//\n// @param tiddler\n// the tiddler to be saved.\n//\nDataTiddler.save = function(tiddler) {\n\n var matches = DataTiddler.getDataTiddlerMatches(tiddler);\n\n var prefix;\n var suffix;\n if (matches === null) {\n prefix = tiddler.text;\n suffix = "";\n } else {\n prefix = matches[1];\n suffix = matches[3];\n }\n\n var dataText = DataTiddler.getDataTextOfTiddler(tiddler);\n var newText = \n (dataText !== null) \n ? prefix + "<data>" + dataText + "</data>" + suffix\n : prefix + suffix;\n if (newText != tiddler.text) {\n // make the change in the tiddlers text\n \n // ... see DataTiddler.MyTiddlerChangedFunction\n tiddler.isDataTiddlerChange = true;\n \n // ... do the action change\n tiddler.set(\n tiddler.title,\n newText,\n config.options.txtUserName, \n config.options.chkForceMinorUpdate? undefined : new Date(),\n tiddler.tags);\n\n // ... see DataTiddler.MyTiddlerChangedFunction\n delete tiddler.isDataTiddlerChange;\n\n // Mark the store as dirty.\n store.dirty = true;\n\n \n // AutoSave if option is selected\n if(config.options.chkAutoSave) {\n saveChanges();\n }\n }\n};\n\n// Internal.\n//\nDataTiddler.MyTiddlerChangedFunction = function() {\n // Remove the data object from the tiddler when the tiddler is changed\n // by code other than DataTiddler code. \n //\n // This is necessary since the data object is just a "cached version" \n // of the data defined in the data section of the tiddler and the \n // "external" change may have changed the content of the data section.\n // Thus we are not sure if the data object reflects the data section \n // contents. \n // \n // By deleting the data object we ensure that the data object is \n // reconstructed the next time it is needed, with the data defined by\n // the data section in the tiddler's text.\n \n // To indicate that a change is a "DataTiddler change" a temporary\n // property "isDataTiddlerChange" is added to the tiddler.\n if (this.dataObject && !this.isDataTiddlerChange) {\n delete this.dataObject;\n }\n \n // call the original code.\n DataTiddler.originalTiddlerChangedFunction.apply(this, arguments);\n};\n\n\n//============================================================================\n// Formatters\n//============================================================================\n\n// This formatter ensures that "~<data>" is rendered as "<data>". This is used to \n// escape the "<data>" of a data section, just in case someone really wants to use\n// "<data>" as a text in a tiddler and not start a data section.\n//\n// Same for </data>.\n//\nconfig.formatters.push( {\n name: "data-escape",\n match: "~<\s\s/?data>",\n\n handler: function(w) {\n w.outputText(w.output,w.matchStart + 1,w.nextMatch);\n }\n} );\n\n\n// This formatter ensures that <data>...</data> sections are not rendered.\n//\nconfig.formatters.push( {\n name: "data",\n match: "<data>",\n\n handler: function(w) {\n var info = DataTiddler.getDataSectionInfo(w.source);\n if (info && info.prefixEnd == w.matchStart) {\n w.nextMatch = info.suffixStart;\n } else {\n w.outputText(w.output,w.matchStart,w.nextMatch);\n }\n }\n} );\n\n\n//============================================================================\n// Tiddler Class Extension\n//============================================================================\n\n// "Hijack" the changed method ---------------------------------------------------\n\nDataTiddler.originalTiddlerChangedFunction = Tiddler.prototype.changed;\nTiddler.prototype.changed = DataTiddler.MyTiddlerChangedFunction;\n\n// Define accessor methods -------------------------------------------------------\n\n// Returns the value of the given data field of the tiddler. When no such field \n// is defined or its value is undefined the defaultValue is returned.\n//\n// When field is undefined (or null) the data object is returned. (See \n// DataTiddler.getDataObject.)\n//\n// @param field [may be null, undefined]\n// @param defaultValue [may be null, undefined]\n// @return [may be null, undefined]\n//\nTiddler.prototype.data = function(field, defaultValue) {\n return (field) \n ? DataTiddler.getTiddlerDataValue(this, field, defaultValue)\n : DataTiddler.getTiddlerDataObject(this);\n};\n\n// Sets the value of the given data field of the tiddler to the value. When the \n// value is equal to the defaultValue no value is set (and the field is removed).\n//\n// @param value [may be null, undefined]\n// @param defaultValue [may be null, undefined]\n//\nTiddler.prototype.setData = function(field, value, defaultValue) {\n DataTiddler.setTiddlerDataValue(this, field, value, defaultValue);\n};\n\n\n//============================================================================\n// showData Macro\n//============================================================================\n\nconfig.macros.showData = {\n // Standard Properties\n label: "showData",\n prompt: "Display the values stored in the data section of the tiddler"\n};\n\nconfig.macros.showData.handler = function(place,macroName,params) {\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the optional "JSON"\n var showInJSONFormat = false;\n if ((i < params.length) && params[i] == "JSON") {\n i++;\n showInJSONFormat = true;\n }\n \n var tiddlerName = story.findContainingTiddler(place).id.substr(7);\n if (i < params.length) {\n tiddlerName = params[i];\n i++;\n }\n\n // --- Processing ------------------------------------------\n try {\n if (showInJSONFormat) {\n this.renderDataInJSONFormat(place, tiddlerName);\n } else {\n this.renderDataAsTable(place, tiddlerName);\n }\n } catch (e) {\n this.createErrorElement(place, e);\n }\n};\n\nconfig.macros.showData.renderDataInJSONFormat = function(place,tiddlerName) {\n var text = DataTiddler.getDataText(tiddlerName);\n if (text) {\n createTiddlyElement(place,"pre",null,null,text);\n }\n};\n\nconfig.macros.showData.renderDataAsTable = function(place,tiddlerName) {\n var text = "|!Name|!Value|\sn";\n var data = DataTiddler.getDataObject(tiddlerName);\n if (data) {\n for (var i in data) {\n var value = data[i];\n text += "|"+i+"|"+DataTiddler.stringify(value)+"|\sn";\n }\n }\n \n wikify(text, place);\n};\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.showData.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"showDataError","<<showData ...>>: "+message);\n};\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".showDataError{color: #ffffff;background-color: #880000;}",\n "showData");\n\n\n} // of "install only once"\n// Used Globals (for JSLint) ==============\n\n// ... TiddlyWiki Core\n/*global createTiddlyElement, saveChanges, store, story, wikify */\n// ... DataTiddler\n/*global DataTiddler */\n// ... JSON\n/*global JSON */\n \n\n/***\n!JSON Code, used to serialize the data\n***/\n/*\nCopyright (c) 2005 JSON.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe Software shall be used for Good, not Evil.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n/*\n The global object JSON contains two methods.\n\n JSON.stringify(value) takes a JavaScript value and produces a JSON text.\n The value must not be cyclical.\n\n JSON.parse(text) takes a JSON text and produces a JavaScript value. It will\n throw a 'JSONError' exception if there is an error.\n*/\nvar JSON = {\n copyright: '(c)2005 JSON.org',\n license: 'http://www.crockford.com/JSON/license.html',\n/*\n Stringify a JavaScript value, producing a JSON text.\n*/\n stringify: function (v) {\n var a = [];\n\n/*\n Emit a string.\n*/\n function e(s) {\n a[a.length] = s;\n }\n\n/*\n Convert a value.\n*/\n function g(x) {\n var c, i, l, v;\n\n switch (typeof x) {\n case 'object':\n if (x) {\n if (x instanceof Array) {\n e('[');\n l = a.length;\n for (i = 0; i < x.length; i += 1) {\n v = x[i];\n if (typeof v != 'undefined' &&\n typeof v != 'function') {\n if (l < a.length) {\n e(',');\n }\n g(v);\n }\n }\n e(']');\n return;\n } else if (typeof x.toString != 'undefined') {\n e('{');\n l = a.length;\n for (i in x) {\n v = x[i];\n if (x.hasOwnProperty(i) &&\n typeof v != 'undefined' &&\n typeof v != 'function') {\n if (l < a.length) {\n e(',');\n }\n g(i);\n e(':');\n g(v);\n }\n }\n return e('}');\n }\n }\n e('null');\n return;\n case 'number':\n e(isFinite(x) ? +x : 'null');\n return;\n case 'string':\n l = x.length;\n e('"');\n for (i = 0; i < l; i += 1) {\n c = x.charAt(i);\n if (c >= ' ') {\n if (c == '\s\s' || c == '"') {\n e('\s\s');\n }\n e(c);\n } else {\n switch (c) {\n case '\sb':\n e('\s\sb');\n break;\n case '\sf':\n e('\s\sf');\n break;\n case '\sn':\n e('\s\sn');\n break;\n case '\sr':\n e('\s\sr');\n break;\n case '\st':\n e('\s\st');\n break;\n default:\n c = c.charCodeAt();\n e('\s\su00' + Math.floor(c / 16).toString(16) +\n (c % 16).toString(16));\n }\n }\n }\n e('"');\n return;\n case 'boolean':\n e(String(x));\n return;\n default:\n e('null');\n return;\n }\n }\n g(v);\n return a.join('');\n },\n/*\n Parse a JSON text, producing a JavaScript value.\n*/\n parse: function (text) {\n var p = /^\ss*(([,:{}\s[\s]])|"(\s\s.|[^\sx00-\sx1f"\s\s])*"|-?\sd+(\s.\sd*)?([eE][+-]?\sd+)?|true|false|null)\ss*/,\n token,\n operator;\n\n function error(m, t) {\n throw {\n name: 'JSONError',\n message: m,\n text: t || operator || token\n };\n }\n\n function next(b) {\n if (b && b != operator) {\n error("Expected '" + b + "'");\n }\n if (text) {\n var t = p.exec(text);\n if (t) {\n if (t[2]) {\n token = null;\n operator = t[2];\n } else {\n operator = null;\n try {\n token = eval(t[1]);\n } catch (e) {\n error("Bad token", t[1]);\n }\n }\n text = text.substring(t[0].length);\n } else {\n error("Unrecognized token", text);\n }\n } else {\n token = operator = undefined;\n }\n }\n\n\n function val() {\n var k, o;\n switch (operator) {\n case '{':\n next('{');\n o = {};\n if (operator != '}') {\n for (;;) {\n if (operator || typeof token != 'string') {\n error("Missing key");\n }\n k = token;\n next();\n next(':');\n o[k] = val();\n if (operator != ',') {\n break;\n }\n next(',');\n }\n }\n next('}');\n return o;\n case '[':\n next('[');\n o = [];\n if (operator != ']') {\n for (;;) {\n o.push(val());\n if (operator != ',') {\n break;\n }\n next(',');\n }\n }\n next(']');\n return o;\n default:\n if (operator !== null) {\n error("Missing value");\n }\n k = token;\n next();\n return k;\n }\n }\n next();\n return val();\n }\n};\n\n/***\n!Setup the data serialization\n***/\n\nDataTiddler.format = "JSON";\nDataTiddler.stringify = JSON.stringify;\nDataTiddler.parse = JSON.parse;\n\n//}}}\n
/***\n|''Name:''|BreadCrumbsPlugin|\n|''Version:''|2.2.1 (05-July-2007)|\n|''Author:''|AlanHecht|\n|''Adapted By:''|[[Jack]]|\n|''Type:''|Plugin|\n!Description\nThis plugin creates an area at the top of the tiddler area that displays "breadcrumbs" of where you've been. This is especially useful for ~TWs using SinglePageMode by Eric Schulman.\n!Usage\nJust install the plugin and tag with systemConfig. Optionally position the following div in your PageTemplate to control the positioning of the breadcrumbs menu:\n{{{\n<div id='breadCrumbs'></div>\n}}}\n!Revision History\n* Original by AlanHecht\n* 2.0 Made 2.0.x compatible by [[Jack]]\n* Made 2.0.10 compatible (onstart paramifier)\n* Bugfix -> return false in onClickTiddlerLink()\n* 2.2 Made 2.2.x compatible\n!Code\n***/\n\n// // Use the following line to set the number of breadcrumbs to display before rotating them off the list.\n//{{{\nversion.extensions.breadCrumbs = {major: 2, minor: 2, revision: 1, date: new Date("Jul 5, 2007")};\nvar crumbsToShow = 7;\nvar breadCrumbs = [];\n\nonClickTiddlerLink_orig_breadCrumbs = onClickTiddlerLink;\nonClickTiddlerLink = function(e){\n onClickTiddlerLink_orig_breadCrumbs(e);\n breadcrumbsAdd(e);\n return false;\n}\n\nrestart_orig_breadCrumbs = restart;\nfunction restart() {\n invokeParamifier(params,"onstart");\n var defaultParams = store.getTiddlerText("DefaultTiddlers").parseParams("open",null,false);\n invokeParamifier(defaultParams,"onstart");\n breadCrumbs = [];\n breadcrumbsRefresh();\n window.scrollTo(0,0);\n return false;\n}\n\nfunction breadcrumbsAdd(e) {\n var uniqueCrumb = true;\n var crumbIndex = 0;\n if (!e) var e = window.event;\n var target = resolveTarget(e);\n var thisCrumb="[["+resolveTarget(e).getAttribute("tiddlyLink")+"]]";\n var lastInactiveCrumb = breadCrumbs.length -(breadCrumbs.length < crumbsToShow ? breadCrumbs.length : crumbsToShow);\n for(t=lastInactiveCrumb; t<breadCrumbs.length; t++)\n if(breadCrumbs[t] == thisCrumb) {\n uniqueCrumb = false;\n crumbIndex = t+1;\n }\n if(uniqueCrumb)\n breadCrumbs.push(thisCrumb);\n else\n breadCrumbs = breadCrumbs.slice(0,crumbIndex);\n breadcrumbsRefresh(); \n}\n\nfunction breadcrumbsRefresh() {\n \n if (!document.getElementById("breadCrumbs")) {\n // Create breadCrumbs div\n var ca = document.createElement("div");\n ca.id = "breadCrumbs";\n ca.style.visibility= "hidden";\n var targetArea = document.getElementById("tiddlerDisplay")||document.getElementById("storyDisplay");\n targetArea.parentNode.insertBefore(ca,targetArea);\n }\n\n var crumbArea = document.getElementById("breadCrumbs");\n crumbArea.style.visibility = "visible";\n removeChildren(crumbArea);\n createTiddlyButton(crumbArea,"Home",null,restart);\n crumbArea.appendChild(document.createTextNode(" > "));\n \n var crumbLine = "";\n var crumbCount = breadCrumbs.length;\n var firstCrumb = crumbCount -(crumbCount < crumbsToShow ? crumbCount : crumbsToShow);\n for(t=firstCrumb; t<crumbCount; t++) {\n if(t != firstCrumb)\n crumbLine += " > ";\n crumbLine += breadCrumbs[t];\n }\n wikify(crumbLine,crumbArea)\n}\n\n\n//}}}
[[Take a CAO survey, it takes just a minute to complete!|http://archives.library.wcsu.edu/?page_id=781&form_id=1]]
<!--{{{-->\n\n<div id='sidebar'>\n <img class='logo' src='/cao/about/images/cao_logo.jpg' alt='logo'/>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='mainmenu' refresh='content' tiddler='MainMenu'></div>\n <div id='ZiddlyFormats' refresh='content' tiddler='ZiddlyFormats'></div>\n</div>\n\n<div id='header' class='header'>\n <div class='headerShadow'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span><br />\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n</div>\n\n<div id='displayArea'>\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>\n\n<div id='contentFooter' refresh='content' tiddler='contentFooter'></div>\n\n<!--}}}-->\n\n
/***\n<<checkForDataTiddlerPlugin>>\n|''Name:''|FormTiddlerPlugin|\n|''Version:''|1.0.6 (2007-06-24)|\n|''Source:''|http://tiddlywiki.abego-software.de/#FormTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''Macros:''|formTiddler, checkForDataTiddlerPlugin, newTiddlerWithForm|\n|''Requires:''|DataTiddlerPlugin|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Description\nUse form-based tiddlers to enter your tiddler data using text fields, listboxes, checkboxes etc. (All standard HTML Form input elements supported).\n\n''Syntax:'' \n|>|{{{<<}}}''formTiddler'' //tiddlerName//{{{>>}}}|\n|//tiddlerName//|The name of the FormTemplate tiddler to be used to edit the data of the tiddler containing the macro.|\n\n|>|{{{<<}}}''newTiddlerWithForm'' //formTemplateName// //buttonLabel// [//titleExpression// [''askUser'']] {{{>>}}}|\n|//formTemplateName//|The name of the tiddler that defines the form the new tiddler should use.|\n|//buttonLabel//|The label of the button|\n|//titleExpression//|A (quoted) JavaScript String expression that defines the title (/name) of the new tiddler.|\n|''askUser''|Typically the user is not asked for the title when a title is specified (and not yet used). When ''askUser'' is given the user will be asked in any case. This may be used when the calculated title is just a suggestion that must be confirmed by the user|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nFor details and how to use the macros see the [[introduction|FormTiddler Introduction]] and the [[examples|FormTiddler Examples]].\n\n!Revision history\n* v1.0.6 (2007-06-24)\n** Fixed problem when using SELECT component in Internet Explorer (thanks to MaikBoenig for reporting)\n* v1.0.5 (2006-02-24)\n** Removed "debugger;" instruction\n* v1.0.4 (2006-02-07)\n** Bug: On IE no data is written to data section when field values changed (thanks to KenGirard for reporting)\n* v1.0.3 (2006-02-05)\n** Bug: {{{"No form template specified in <<formTiddler>>"}}} when using formTiddler macro on InternetExplorer (thanks to KenGirard for reporting)\n* v1.0.2 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.1 (2005-12-22)\n** Features: \n*** Support InternetExplorer\n*** Added newTiddlerWithForm Macro\n* v1.0.0 (2005-12-14)\n** initial version\n\n!Code\n***/\n//{{{\n\n//============================================================================\n//============================================================================\n// FormTiddlerPlugin\n//============================================================================\n//============================================================================\n\nif (!window.abego) window.abego = {};\n\nabego.getOptionsValue = function(element,i) {\n var v = element.options[i].value;\n if (!v && element.options[i].text)\n v = element.options[i].text;\n return v;\n};\n\nversion.extensions.FormTiddlerPlugin = {\n major: 1, minor: 0, revision: 5,\n date: new Date(2006, 2, 24), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#FormTiddlerPlugin"\n};\n\n// For backward compatibility with v1.2.x\n//\nif (!window.story) window.story=window; \nif (!TiddlyWiki.prototype.getTiddler) TiddlyWiki.prototype.getTiddler = function(title) { return t = this.tiddlers[title]; return (t != undefined && t instanceof Tiddler) ? t : null; } \n\n//============================================================================\n// formTiddler Macro\n//============================================================================\n\n// -------------------------------------------------------------------------------\n// Configurations and constants \n// -------------------------------------------------------------------------------\n\nconfig.macros.formTiddler = {\n // Standard Properties\n label: "formTiddler",\n version: {major: 1, minor: 0, revision: 4, date: new Date(2006, 2, 7)},\n prompt: "Edit tiddler data using forms",\n\n // Define the "setters" that set the values of INPUT elements of a given type\n // (must match the corresponding "getter")\n setter: { \n button: function(e, value) {/*contains no data */ },\n checkbox: function(e, value) {e.checked = value;},\n file: function(e, value) {try {e.value = value;} catch(e) {/* ignore, possibly security error*/}},\n hidden: function(e, value) {e.value = value;},\n password: function(e, value) {e.value = value;},\n radio: function(e, value) {e.checked = (e.value == value);},\n reset: function(e, value) {/*contains no data */ },\n "select-one": function(e, value) {config.macros.formTiddler.setSelectOneValue(e,value);},\n "select-multiple": function(e, value) {config.macros.formTiddler.setSelectMultipleValue(e,value);},\n submit: function(e, value) {/*contains no data */},\n text: function(e, value) {e.value = value;},\n textarea: function(e, value) {e.value = value;}\n },\n\n // Define the "getters" that return the value of INPUT elements of a given type\n // Return undefined to not store any data.\n getter: { \n button: function(e, value) {return undefined;},\n checkbox: function(e, value) {return e.checked;},\n file: function(e, value) {return e.value;},\n hidden: function(e, value) {return e.value;},\n password: function(e, value) {return e.value;},\n radio: function(e, value) {return e.checked ? e.value : undefined;},\n reset: function(e, value) {return undefined;},\n "select-one": function(e, value) {return config.macros.formTiddler.getSelectOneValue(e);},\n "select-multiple": function(e, value) {return config.macros.formTiddler.getSelectMultipleValue(e);},\n submit: function(e, value) {return undefined;},\n text: function(e, value) {return e.value;},\n textarea: function(e, value) {return e.value;}\n }\n};\n\n\n// -------------------------------------------------------------------------------\n// The formTiddler Macro Handler \n// -------------------------------------------------------------------------------\n\nconfig.macros.formTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if (!config.macros.formTiddler.checkForExtensions(place, macroName)) {\n return;\n }\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n\n // get the name of the form template tiddler\n var formTemplateName = undefined;\n if (i < params.length) {\n formTemplateName = params[i];\n i++;\n }\n\n if (!formTemplateName) {\n config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");\n return;\n }\n\n\n // --- Processing ------------------------------------------\n\n // Get the form template text. \n // (This contains the INPUT elements for the form.)\n var formTemplateTiddler = store.getTiddler(formTemplateName);\n if (!formTemplateTiddler) {\n config.macros.formTiddler.createErrorElement(place, "Form template '" + formTemplateName + "' not found.");\n return;\n }\n var templateText = formTemplateTiddler.text;\n if(!templateText) {\n // Shortcut: when template text is empty we do nothing.\n return;\n }\n\n // Get the name of the tiddler containing this "formTiddler" macro\n // (i.e. the tiddler, that will be edited and that contains the data)\n var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(place);\n\n // Append a "form" element. \n var formName = "form"+formTemplateName+"__"+tiddlerName;\n var e = document.createElement("form");\n e.setAttribute("name", formName);\n place.appendChild(e);\n\n // "Embed" the elements defined by the templateText (i.e. the INPUT elements) \n // into the "form" element we just created\n wikify(templateText, e);\n\n // Initialize the INPUT elements.\n config.macros.formTiddler.initValuesAndHandlersInFormElements(formName, DataTiddler.getDataObject(tiddlerName));\n}\n\n\n// -------------------------------------------------------------------------------\n// Form Data Access \n// -------------------------------------------------------------------------------\n\n// Internal.\n//\n// Initialize the INPUT elements of the form with the values of their "matching"\n// data fields in the tiddler. Also setup the onChange handler to ensure that\n// changes in the INPUT elements are stored in the tiddler's data.\n//\nconfig.macros.formTiddler.initValuesAndHandlersInFormElements = function(formName, data) {\n // config.macros.formTiddler.trace("initValuesAndHandlersInFormElements(formName="+formName+", data="+data+")");\n\n // find the form\n var form = config.macros.formTiddler.findForm(formName);\n if (!form) {\n return;\n }\n\n try {\n var elems = form.elements;\n for (var i = 0; i < elems.length; i++) {\n var c = elems[i];\n \n var setter = config.macros.formTiddler.setter[c.type];\n if (setter) {\n var value = data[c.name];\n if (value != null) {\n setter(c, value);\n }\n c.onchange = onFormTiddlerChange;\n } else {\n config.macros.formTiddler.displayFormTiddlerError("No setter defined for INPUT element of type '"+c.type+"'. (Element '"+c.name+"' in form '"+formName+"')");\n }\n }\n } catch(e) {\n config.macros.formTiddler.displayFormTiddlerError("Error when updating elements with new formData. "+e);\n }\n}\n\n\n// Internal.\n//\n// @return [may be null]\n//\nconfig.macros.formTiddler.findForm = function(formName) {\n // We must manually iterate through the document's forms, since\n // IE does not support the "document[formName]" approach\n\n var forms = window.document.forms;\n for (var i = 0; i < forms.length; i++) {\n var form = forms[i];\n if (form.name == formName) {\n return form;\n }\n }\n\n return null;\n}\n\n\n// Internal.\n//\nconfig.macros.formTiddler.setSelectOneValue = function(element,value) {\n var n = element.options.length;\n for (var i = 0; i < n; i++) {\n element.options[i].selected = abego.getOptionsValue(element,i) == value;\n }\n}\n\n// Internal.\n//\nconfig.macros.formTiddler.setSelectMultipleValue = function(element,value) {\n var values = {};\n for (var i = 0; i < value.length; i++) {\n values[value[i]] = true;\n }\n \n var n = element.length;\n for (var i = 0; i < n; i++) {\n element.options[i].selected = !(!values[abego.getOptionsValue(element,i)]);\n }\n}\n\n// Internal.\n//\nconfig.macros.formTiddler.getSelectOneValue = function(element) {\n var i = element.selectedIndex;\n return (i >= 0) ? abego.getOptionsValue(element,i) : null;\n}\n\n// Internal.\n//\nconfig.macros.formTiddler.getSelectMultipleValue = function(element) {\n var values = [];\n var n = element.length;\n for (var i = 0; i < n; i++) {\n if (element.options[i].selected) {\n values.push(abego.getOptionsValue(element,i));\n }\n }\n return values;\n}\n\n\n\n// -------------------------------------------------------------------------------\n// Helpers \n// -------------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.formTiddler.checkForExtensions = function(place,macroName) {\n if (!version.extensions.DataTiddlerPlugin) {\n config.macros.formTiddler.createErrorElement(place, "<<" + macroName + ">> requires the DataTiddlerPlugin. (You can get it from http://tiddlywiki.abego-software.de/#DataTiddlerPlugin)");\n return false;\n }\n return true;\n}\n\n// Internal.\n//\n// Displays a trace message in the "TiddlyWiki" message pane.\n// (used for debugging)\n//\nconfig.macros.formTiddler.trace = function(s) {\n displayMessage("Trace: "+s);\n}\n\n// Internal.\n//\n// Display some error message in the "TiddlyWiki" message pane.\n//\nconfig.macros.formTiddler.displayFormTiddlerError = function(s) {\n alert("FormTiddlerPlugin Error: "+s);\n}\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.formTiddler.createErrorElement = function(place, message) {\n return createTiddlyElement(place,"span",null,"formTiddlerError",message);\n}\n\n// Internal.\n//\n// Returns the name of the tiddler containing the given element.\n// \nconfig.macros.formTiddler.getContainingTiddlerName = function(element) {\n return story.findContainingTiddler(element).id.substr(7);\n}\n\n// -------------------------------------------------------------------------------\n// Event Handlers \n// -------------------------------------------------------------------------------\n\n// This function must be called by the INPUT elements whenever their\n// data changes. Typically this is done through an "onChange" handler.\n//\nfunction onFormTiddlerChange (e) {\n // config.macros.formTiddler.trace("onFormTiddlerChange "+e);\n\n if (!e) var e = window.event;\n\n var target = resolveTarget(e);\n var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(target);\n var getter = config.macros.formTiddler.getter[target.type];\n if (getter) {\n var value = getter(target);\n DataTiddler.setData(tiddlerName, target.name, value);\n } else {\n config.macros.formTiddler.displayFormTiddlerError("No getter defined for INPUT element of type '"+target.type+"'. (Element '"+target.name+"' used in tiddler '"+tiddlerName+"')");\n }\n}\n\n// ensure that the function can be used in HTML event handler\nwindow.onFormTiddlerChange = onFormTiddlerChange;\n\n\n// -------------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// -------------------------------------------------------------------------------\n\nsetStylesheet(\n ".formTiddlerError{color: #ffffff;background-color: #880000;}",\n "formTiddler");\n\n\n//============================================================================\n// checkForDataTiddlerPlugin Macro\n//============================================================================\n\nconfig.macros.checkForDataTiddlerPlugin = {\n // Standard Properties\n label: "checkForDataTiddlerPlugin",\n version: {major: 1, minor: 0, revision: 0, date: new Date(2005, 12, 14)},\n prompt: "Check if the DataTiddlerPlugin exists"\n}\n\nconfig.macros.checkForDataTiddlerPlugin.handler = function(place,macroName,params) {\n config.macros.formTiddler.checkForExtensions(place, config.macros.formTiddler.label);\n}\n\n\n\n//============================================================================\n// newTiddlerWithForm Macro\n//============================================================================\n\nconfig.macros.newTiddlerWithForm = {\n // Standard Properties\n label: "newTiddlerWithForm",\n version: {major: 1, minor: 0, revision: 1, date: new Date(2006, 1, 6)},\n prompt: "Creates a new Tiddler with a <<formTiddler ...>> macro"\n}\n\nconfig.macros.newTiddlerWithForm.handler = function(place,macroName,params) {\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n\n // get the name of the form template tiddler\n var formTemplateName = undefined;\n if (i < params.length) {\n formTemplateName = params[i];\n i++;\n }\n\n if (!formTemplateName) {\n config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");\n return;\n }\n\n // get the button label\n var buttonLabel = undefined;\n if (i < params.length) {\n buttonLabel = params[i];\n i++;\n }\n\n if (!buttonLabel) {\n config.macros.formTiddler.createErrorElement(place, "No button label specified in <<" + macroName + ">>.");\n return;\n }\n\n // get the (optional) tiddlerName script and "askUser"\n var tiddlerNameScript = undefined;\n var askUser = false;\n if (i < params.length) {\n tiddlerNameScript = params[i];\n i++;\n\n if (i < params.length && params[i] == "askUser") {\n askUser = true;\n i++;\n }\n }\n\n // --- Processing ------------------------------------------\n\n if(!readOnly) {\n var onClick = function() {\n var tiddlerName;\n if (tiddlerNameScript) {\n try {\n tiddlerName = eval(tiddlerNameScript);\n } catch (ex) {\n }\n }\n if (!tiddlerName || askUser) {\n tiddlerName = prompt("Please specify a tiddler name.", askUser ? tiddlerName : "");\n }\n while (tiddlerName && store.getTiddler(tiddlerName)) {\n tiddlerName = prompt("A tiddler named '"+tiddlerName+"' already exists.\sn\sn"+"Please specify a tiddler name.", tiddlerName);\n }\n\n // tiddlerName is either null (user canceled) or a name that is not yet in the store.\n if (tiddlerName) {\n var body = "<<formTiddler [["+formTemplateName+"]]>>";\n var tags = [];\n store.saveTiddler(tiddlerName,tiddlerName,body,config.options.txtUserName,new Date(),tags);\n story.displayTiddler(null,tiddlerName,1);\n }\n }\n\n createTiddlyButton(place,buttonLabel,buttonLabel,onClick);\n }\n}\n\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n
CAO next steps discussed and the Connecticut Digital Archive (CTDA).
For repositories that do not have finding aids Leith Johnson, from Wesleyan, created an easy to use tutorial to help your repositories easily create finding aids that are hosted by WCSU and searchable on CAO. Click the link below to view this tutorial: \n\n[[How to create a finding aid tutorial |https://drive.google.com/open?id=0B8mgQdhjv4GBNlZOaXVPY01aSXM]]
/***\n|Name|InlineJavascriptPlugin|\n|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|\n|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|\n|Version|1.9.4|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides||\n|Description|Insert Javascript executable code directly into your tiddler content.|\n''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.\n!!!!!Documentation\n>see [[InlineJavascriptPluginInfo]]\n!!!!!Revisions\n<<<\n2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax\n|please see [[InlineJavascriptPluginInfo]] for additional revision details|\n2005.11.08 [1.0.0] initial release\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 3, date: new Date(2008,6,11)};\n\nconfig.formatters.push( {\n name: "inlineJavascript",\n match: "\s\s<script",\n lookahead: "\s\s<script(?: src=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?(?: label=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?(?: title=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?(?: key=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?( show)?\s\s>((?:.|\s\sn)*?)\s\s</script\s\s>",\n\n handler: function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var src=lookaheadMatch[1];\n var label=lookaheadMatch[2];\n var tip=lookaheadMatch[3];\n var key=lookaheadMatch[4];\n var show=lookaheadMatch[5];\n var code=lookaheadMatch[6];\n if (src) { // load a script library\n // make script tag, set src, add to body to execute, then remove for cleanup\n var script = document.createElement("script"); script.src = src;\n document.body.appendChild(script); document.body.removeChild(script);\n }\n if (code) { // there is script code\n if (show) // show inline script code in tiddler output\n wikify("{{{\sn"+lookaheadMatch[0]+"\sn}}}\sn",w.output);\n if (label) { // create a link to an 'onclick' script\n // add a link, define click handler, save code in link (pass 'place'), set link attributes\n var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));\n var fixup=code.replace(/document.write\ss*\s(/gi,'place.bufferedHTML+=(');\n link.code="function _out(place){"+fixup+"\sn};_out(this);"\n link.tiddler=w.tiddler;\n link.onclick=function(){\n this.bufferedHTML="";\n try{ var r=eval(this.code);\n if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)\n var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);\n if(this.bufferedHTML.length)\n s.innerHTML=this.bufferedHTML;\n if((typeof(r)==="string")&&r.length) {\n wikify(r,s,null,this.tiddler);\n return false;\n } else return r!==undefined?r:false;\n } catch(e){alert(e.description||e.toString());return false;}\n };\n link.setAttribute("title",tip||"");\n var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';\n URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\sn/g,' ')));\n URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';\n link.setAttribute("href",URIcode);\n link.style.cursor="pointer";\n if (key) link.accessKey=key.substr(0,1); // single character only\n }\n else { // run inline script code\n var fixup=code.replace(/document.write\ss*\s(/gi,'place.innerHTML+=(');\n var c="function _out(place){"+fixup+"\sn};_out(w.output);";\n try { var out=eval(c); }\n catch(e) { out=e.description?e.description:e.toString(); }\n if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);\n }\n }\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n} )\n//}}}\n\n// // Backward-compatibility for TW2.1.x and earlier\n//{{{\nif (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {\n if(limit > 0) text = text.substr(0,limit);\n var wikifier = new Wikifier(text,formatter,null,tiddler);\n return wikifier.wikifyPlain();\n}\n//}}}\n\n// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()\n//{{{\nif (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }\n//}}}
/***\n|''Name:''|AccordionMenuPlugin|\n|''Description:''|Turn an unordered list into an accordion style menu|\n|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|\n|''Source:''|http://tw.lewcid.org/#AccordionMenuPlugin|\n|''Code Repository:''|http://tw.lewcid.org/svn/plugins|\n|''Version:''|2.0|\n|''Date:''|03/11/2007|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.2.5|\n!!Usage:\n* put {{{<<accordion>>}}} on the line after your unordered list\n\n!!Customizing:\n* customize the css via the shadow tiddler StyleSheetAccordionMenuPlugin\n* or give the list a custom class by passing the classes as parameters to the macro.\n** Eg: {{{<<accordion ClassName1 ClassName2>>}}}\n\n!!Examples:\n*[[AccordionMenuPluginDemo]]\n\n***/\n// /%\n//!BEGIN-PLUGIN-CODE\nconfig.macros.accordion={\n dropchar : " \su00BB",\n handler : function(place,macroName,params,wikifier,paramString,tiddler){\n list = findRelated(place.lastChild,"UL","tagName","previousSibling");\n if (!list)\n return;\n addClass(list,"accordion");\n if (params.length){\n addClass(list,paramString);\n }\n this.fixLinks(list.childNodes); \n },\n\n fixLinks : function(els){\n for (var i=0; i<els.length; i++){\n if(els[i].tagName.toLowerCase()=="li"){\n var link = findRelated(els[i].firstChild,"A","tagName","nextSibling");\n if(!link){\n var ih = els[i].firstChild.data;\n els[i].removeChild(els[i].firstChild);\n link = createTiddlyElement(null,"a",null,null,ih+this.dropchar,{href:"javascript:;"});\n els[i].insertBefore(link,els[i].firstChild);\n }\n else{\n link.firstChild.data = link.firstChild.data + this.dropchar;\n removeClass(link,"tiddlyLinkNonExisting");\n }\n link.onclick = this.show;\n }\n }\n },\n \n show : function(e){\n var list = this.parentNode.parentNode;\n var els = list.childNodes;\n for (var i=0; i<els.length; i++){\n removeClass(els[i],"accordion-active");\n }\n addClass(this.parentNode,"accordion-active");\n } \n};\n\nconfig.shadowTiddlers["StyleSheetAccordionMenuPlugin"] = "/*{{{*/\sn"+\n "ul.accordion, ul.accordion li, ul.accordion li ul {margin:0; padding:0; list-style-type:none;text-align:left;}\sn"+\n "ul.accordion li ul {display:none;}\sn"+\n "ul.accordion li.accordion-active ul {display:block;}\sn"+\n "\sn"+\n "ul.accordion li.accordion-active a {cursor:default;}\sn"+\n "ul.accordion li.accordion-active ul li a{cursor:pointer;}\sn"+\n "\sn"+\n "ul.accordion a {display:block; padding:0.5em;}\sn"+\n "ul.accordion li a.tiddlyLink, ul.accordion li a.tiddlyLinkNonExisting, ul.accordion li a {font-weight:bold;}\sn"+\n "ul.accordion li a {background:#0066aa; color:#FFF; border-bottom:1px solid #fff;}\sn"+\n "ul.accordion li.accordion-active a, ul.accordion li a:hover {background:#00558F;color:#FFF;}\sn"+\n "\sn"+\n "ul.accordion li ul li{display:inline-block;overflow:hidden;}\sn"+\n "ul.accordion li.accordion-active ul li {background:#eff3fa; color:#000; padding:0em;}\sn"+\n "ul.accordion li.accordion-active ul li div {padding:1em 1.5em; background:#eff3fa;}\sn"+\n "ul.accordion li.accordion-active ul a{background:#eff3fa; color:#000; padding:0.5em 0.5em 0.5em 1.0em;border:none;}\sn"+\n "ul.accordion li.accordion-active ul a:hover {background:#e0e8f5; color:#000;}\sn" +\n "/*}}}*/";\n \n store.addNotification("StyleSheetAccordionMenuPlugin",refreshStyles);\n //!END-PLUGIN-CODE\n// %/
/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.8 (2007-04-12)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|\n|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.8 (2007-04-12)\n** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)\n* v1.0.7 (2007-03-28)\n** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)\n* v1.0.6 (2006-09-16)\n** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.\n** Support "begin", "end" and "none" expressions in "write" action\n* v1.0.5 (2006-02-05)\n** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.\n** Support Firefox 1.5.0.1\n** Internal\n*** Make "JSLint" conform\n*** "Only install once"\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n \n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\n// Only install once\nif (!version.extensions.ForEachTiddlerPlugin) {\n\nif (!window.abego) window.abego = {};\n\nversion.extensions.ForEachTiddlerPlugin = {\n major: 1, minor: 0, revision: 8, \n date: new Date(2007,3,12), \n source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",\n licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",\n copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"\n};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n }\n };\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {\n major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n};\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.getContainingTiddler = function(e) {\n while(e && !hasClass(e,"tiddler"))\n e = e.parentNode;\n var title = e ? e.getAttribute("tiddler") : null; \n return title ? store.getTiddler(title) : null;\n};\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);\n\n if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n inTiddler: tiddler,\n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n};\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n};\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n};\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n};\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li");\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n};\n\nabego.parseNamedParameter = function(name, parameter, i) {\n var beginExpression = null;\n if ((i < parameter.length) && parameter[i] == name) {\n i++;\n if (i >= parameter.length) {\n throw "Missing text behind '%0'".format([name]);\n }\n \n return config.macros.forEachTiddler.paramEncode(parameter[i]);\n }\n return null;\n}\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "begin" option\n var beginExpression = abego.parseNamedParameter("begin", parameter, p);\n if (beginExpression !== null) \n p += 2;\n var endExpression = abego.parseNamedParameter("end", parameter, p);\n if (endExpression !== null) \n p += 2;\n var noneExpression = abego.parseNamedParameter("none", parameter, p);\n if (noneExpression !== null) \n p += 2;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n if (count > 0 && beginExpression)\n text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);\n \n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (count > 0 && endExpression)\n text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);\n\n if (count == 0 && noneExpression) \n text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);\n \n\n if (filename) {\n if (lineSeparator !== undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);\n }\n};\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam,\n inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.\n viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result\n };\n};\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n var lenPrefix = idPrefix.length;\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content === null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n var tiddlyWiki = new TiddlyWiki();\n\n // Starting with TW 2.2 there is a helper function to import the tiddlers\n if (tiddlyWiki.importTiddlyWiki) {\n if (!tiddlyWiki.importTiddlyWiki(content))\n throw "File '"+path+"' is not a TiddlyWiki.";\n tiddlyWiki.dirty = false;\n return tiddlyWiki;\n }\n \n // The legacy code, for TW < 2.2\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title !== "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n};\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText+";theFunction;";\n return eval(fullText);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n var i;\n for (i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n};\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n};\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n};\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n};\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n};\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n};\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n};\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n};\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n};\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n};\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n};\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n};\n\n\n} // of "install only once"\n\n// Used Globals (for JSLint) ==============\n// ... DOM\n/*global document */\n// ... TiddlyWiki Core\n/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, \n displayMessage, endSaveArea, hasClass, loadFile, saveFile, \n startSaveArea, store, wikify */\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n
<<list all>>
<tabs meeting>\n<tab Agenda>\n!!!Agenda\n1) Discuss refinements of the beta test (http://library.wcsu.edu/ctarchivists/) and discuss functionality of the search application.\n\n2) Discuss the workflow of establishment of a "network place" on local machines for !EADs to be submitted.\n\n3) Which CT repositories will be asked to participate\n\n4) "Name the database" - a game show where everybody's a winner.\n\n5) How are we doing in EAD creation\n\n6) What are our EAD Guidelines. So far we have some front matter rules:\n\n i. <eadid> - must be the filename of the EAD document. That is: for an ead document named: smith.xml, the <eadid> should be: <eadid>smith</eadid>\n\n ii. <eadid> - the mainagencycode attribute needs to be set to your repository. If you use the schema, the mainagency code must be coupled with the country code -US (in uppercase). \n \n According to LC the codes we should use are these:\n\n - WCSU=US-ctdabn\n\n - CCSU=US-ctnbt\n\n - SCSU=US-ctnhn\n\n - ECSU=US- ctwilln\n\n - State Lib=US-ct\n\n So, for example, an ead file named wcsuEphemera.xml should have an eadid like this: <eadid mainagencycode="US-ctdabn" identifier="RG008" url="http://www.whereYourEADLives/onYourServer/filename.xml">filename.xml</eadid>\n\n iii. All !EADs that are submitted to the database should be well formed and valid against the DTD OR the schema.\n\n I'm sure there are other things, too, but for now this will do.\n\n7) Do we want to be an official CONSULS committee - there are some stipulations attached to that status.\n\n8) Future funding possibilities\n\n9) Next meeting place.\n</tab>\n<tab Minutes>\n!!!This is a Best of Memory Rendition\n\nFrom stevens Wed Mar 4 13:01:47 -0500 2009\nFrom: stevens\nDate: Wed, 04 Mar 2009 13:01:47 -0500\nSubject: \nMessage-ID: <20090304130147-0500@library.wcsu.edu>\n\n 1. Discuss refinements of the beta test (http://library.wcsu.edu/ctarchivists/) and discuss functionality of the search application.\n* change language on the "search containers" and add link out to finding aid\n\n 2. Discuss the workflow of establishment of a "network place" on local machines for EADs to be submitted.\n* No problems reported... with new name of DB CT Archives Online (cao) the network place needs to be set up again.\n\n 3. Which CT repositories will be asked to participate\nUConn\nConnecticut Historical\nMystic Seaport\nNew Haven Historical\nWesleyan\nTrinity\n\n\n 4. "Name the database" - a game show where everybody's a winner.\n\nConnecticut History Online\n \n 5. How are we doing in EAD creation\n\nBrian K will circulate a version of OAI's tool for creating collection level EAD... other means discussed but still a challenge.\n 6. What are our EAD Guidelines. So far we have some front matter rules:\n\n 1. <eadid> - must be the filename of the EAD document. That is: for an ead document named: smith.xml, the <eadid> should be: <eadid>smith</eadid>\n 2. <eadid> - the mainagencycode attribute needs to be set to your repository. If you use the schema, the mainagency code must be coupled with the country code -US (in uppercase).\n\n According to LC the codes we should use are these:\n * WCSU=US-ctdabn\n * CCSU=US-ctnbt\n * SCSU=US-ctnhn\n * ECSU=US- ctwilln\n * State Lib=US-ct\n\n So, for example, an ead file named wcsuEphemera.xml should have an eadid like this: <eadid mainagencycode="US-ctdabn" identifier="RG008" url="http://www.whereYourEADLives/onYourServer/filename.xml">filename.xml</eadid>\n\n 3. All EADs that are submitted to the database should be well formed and valid against the DTD OR the schema.\n\n \n 7. Do we want to be an official CONSULS committee - there are some stipulations attached to that status.\n\nThis will be readdressed at the next meeting.\n\n 8. Future funding possibilities\nMark Jones, CT State Archivist, discussed possibilities for SNAP grants and the CT State Historical Records Advisory Board. Pursuit of grant money will be deferred until the CAO database is more developed. \n\n 9. Next meeting place.\nState Archives, Central or possibly ECSU. TBD.\n</tab>\n</tabs>
Promoting access to Connecticut's archival resources
/***\n|''Name:''|TableSortingPlugin|\n|''Description:''|Dynamically sort tables by clicking on column headers|\n|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|\n|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|\n|''Code Repository:''|http://tw.lewcid.org/svn/plugins|\n|''Version:''|2.02|\n|''Date:''|25-01-2008|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.2.3|\n!!Usage:\n* Make sure your table has a header row\n** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row \n* Give the table a class of 'sortable'\n** {{{\n|sortable|k\n|Name|Phone Number|Address|h\n}}}<br>Note the /k/ that denotes a class name being assigned to the table.\n* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header\n* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column\n** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}\n\n!!Example:\n|sortable|k\n|Name |Salary |Extension |Performance |File Size |Start date |h\n|ZBloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |\n|ABloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |\n|CBloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |\n|DBloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |\n|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |\n|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |\n|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |\n|Shakespeare, Bill |$122000.00|3211 |6 |33.22Gb |12/11/1961 |\n|Shakespeare, Hamlet |$9000 |9005 |-8 |3Gb |01/01/2002 |\n|Fitz, Marvin |$3300.30 |5554 |+5 |4Kb |05/22/1995 |\n\n***/\n// /%\n//!BEGIN-PLUGIN-CODE\nconfig.tableSorting = {\n \n darrow: "\su2193",\n \n uarrow: "\su2191",\n \n getText : function (o) {\n var p = o.cells[SORT_INDEX];\n return p.innerText || p.textContent || '';\n },\n \n sortTable : function (o,rev) {\n SORT_INDEX = o.getAttribute("index");\n var c = config.tableSorting;\n var T = findRelated(o.parentNode,"TABLE");\n if(T.tBodies[0].rows.length<=1) \n return;\n var itm = "";\n var i = 0;\n while (itm == "" && i < T.tBodies[0].rows.length) {\n itm = c.getText(T.tBodies[0].rows[i]).trim();\n i++;\n }\n if (itm == "") \n return; \n var r = [];\n var S = o.getElementsByTagName("span")[0]; \n c.fn = c.sortAlpha; \n if(!isNaN(Date.parse(itm)))\n c.fn = c.sortDate; \n else if(itm.match(/^[$|'u163'|'u20AC'|\s+|\s-]{0,1}\sd*\s.{0,1}\sd+$/)) \n c.fn = c.sortNumber; \n else if(itm.match(/^\sd*\s.{0,1}\sd+[K|M|G]{0,1}b$/)) \n c.fn = c.sortFile; \n for(i=0; i<T.tBodies[0].rows.length; i++) {\n r[i]=T.tBodies[0].rows[i]; \n } \n r.sort(c.reSort);\n if(S.firstChild.nodeValue==c.darrow || rev) {\n r.reverse();\n S.firstChild.nodeValue=c.uarrow;\n } \n else \n S.firstChild.nodeValue=c.darrow;\n var thead = T.getElementsByTagName('thead')[0]; \n var headers = thead.rows[thead.rows.length-1].cells;\n for(var k=0; k<headers.length; k++) {\n if(!hasClass(headers[k],"nosort"))\n addClass(headers[k].getElementsByTagName("span")[0],"hidden");\n }\n removeClass(S,"hidden");\n for(i=0; i<r.length; i++) { \n T.tBodies[0].appendChild(r[i]);\n c.stripe(r[i],i);\n for(var j=0; j<r[i].cells.length;j++){\n removeClass(r[i].cells[j],"sortedCol");\n }\n addClass(r[i].cells[SORT_INDEX],"sortedCol");\n }\n },\n \n stripe : function (e,i){\n var cl = ["oddRow","evenRow"];\n i&1? cl.reverse() : cl;\n removeClass(e,cl[1]);\n addClass(e,cl[0]);\n },\n \n sortNumber : function(v) {\n var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));\n return isNaN(x)? 0: x;\n },\n \n sortDate : function(v) {\n return Date.parse(this.getText(v));\n },\n\n sortAlpha : function(v) {\n return this.getText(v).toLowerCase();\n },\n \n sortFile : function(v) { \n var j, q = config.messages.sizeTemplates, s = this.getText(v);\n for (var i=0; i<q.length; i++) {\n if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\su00a0","").toLowerCase())) != -1)\n return q[i].unit * s.substr(0,j);\n }\n return parseFloat(s);\n },\n \n reSort : function(a,b){\n var c = config.tableSorting;\n var aa = c.fn(a);\n var bb = c.fn(b);\n return ((aa==bb)? 0 : ((aa<bb)? -1:1));\n }\n};\n\nStory.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;\nStory.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){\n var elem = this.tSort_refreshTiddler.apply(this,arguments);\n if(elem){\n var tables = elem.getElementsByTagName("TABLE");\n var c = config.tableSorting;\n for(var i=0; i<tables.length; i++){\n if(hasClass(tables[i],"sortable")){\n var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;\n for (var j=0; j<headers.length; j++){\n var h = headers[j];\n if (hasClass(h,"nosort"))\n continue;\n h.setAttribute("index",j);\n h.onclick = function(){c.sortTable(this); return false;};\n h.ondblclick = stopEvent;\n if(h.getElementsByTagName("span").length == 0)\n createTiddlyElement(h,"span",null,"hidden",c.uarrow); \n if(!x && hasClass(h,"autosort")) {\n x = j;\n rev = hasClass(h,"reverse");\n }\n }\n if(x)\n c.sortTable(headers[x],rev); \n }\n }\n }\n return elem; \n};\n\nsetStylesheet("table.sortable span.hidden {visibility:hidden;}\sn"+\n "table.sortable thead {cursor:pointer;}\sn"+\n "table.sortable .nosort {cursor:default;}\sn"+\n "table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");\n\nfunction stopEvent(e){\n var ev = e? e : window.event;\n ev.cancelBubble = true;\n if (ev.stopPropagation) ev.stopPropagation();\n return false; \n} \n\nconfig.macros.nosort={\n handler : function(place){\n addClass(place,"nosort");\n } \n};\n\nconfig.macros.autosort={\n handler : function(place,m,p,w,pS){\n addClass(place,"autosort"+" "+pS); \n } \n};\n//!END-PLUGIN-CODE\n// %/
/***\n|Name|DatePlugin|\n|Source|http://www.TiddlyTools.com/#DatePlugin|\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||\n|Description|formatted dates plus popup menu with 'journal' link, changes and (optional) reminders|\n\nThere are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW. While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier. This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.\n\nThis plugin display formatted dates, for the specified year, month, day using number values or mathematical expressions such as (Y+1) or (D+30). Optionally, you can create a link from the formatted output to a 'dated tiddler' for quick blogging or create a popup menu that includes the dated tiddler link plus links to changes made on that date as well as links to any pending reminders for the coming 31 days (if the RemindersPlugin is installed). This plugin also provides a public API for easily incorporating formatted date output (with or without the links/popups) into other plugins, such as calendar generators, etc.\n!!!!!Usage\n<<<\nWhen installed, this plugin defines a macro: {{{<<date [mode] [date] [format] [linkformat]>>}}}. All of the macro parameters are optional and, in it's simplest form, {{{<<date>>}}}, it is equivalent to the ~TiddlyWiki core macro, {{{<<today>>}}}.\n\nHowever, where {{{<<today>>}}} simply inserts the current date/time in a predefined format (or custom format, using {{{<<today [format]>>}}}), the {{{<<date>>}}} macro's parameters take it much further than that:\n* [mode] is either ''display'', ''link'' or ''popup''. If omitted, it defaults to ''display''. This param let's you select between simply displaying a formatted date, or creating a link to a specific 'date titled' tiddler or a popup menu containing a dated tiddler link, plus links to changes and reminders.\n* [date] lets you enter ANY date (not just today) as ''year, month, and day values or simple mathematical expressions'' using pre-defined variables, Y, M, and D for the current year, month and day, repectively. You can display the modification date of the current tiddler by using the keyword: ''tiddler'' in place of the year, month and day parameters. Use ''tiddler://name-of-tiddler//'' to display the modification date of a specific tiddler. You can also use keywords ''today'' or ''filedate'' to refer to these //dynamically changing// date/time values. \n* [format] and [linkformat] uses standard ~TiddlyWiki date formatting syntax. The default is "YYYY.0MM.0DD"\n>^^''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero^^\n>^^''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero^^\n>^^''YYYY'' - full year, ''YY'' - two digit year, ''hh'' - hours, ''mm'' - minutes, ''ss'' - seconds^^\n>^^//note: use of hh, mm or ss format codes is only supported with ''tiddler'', ''today'' or ''filedate'' values//^^\n* [linkformat] - specify an alternative date format so that the title of a 'dated tiddler' link can have a format that differs from the date's displayed format\n\nIn addition to the macro syntax, DatePlugin also provides a public javascript API so that other plugins that work with dates (such as calendar generators, etc.) can quickly incorporate date formatted links or popups into their output:\n\n''{{{showDate(place, date, mode, format, linkformat, autostyle, weekend)}}}'' \n\nNote that in addition to the parameters provided by the macro interface, the javascript API also supports two optional true/false parameters:\n* [autostyle] - when true, the font/background styles of formatted dates are automatically adjusted to show the date's status: 'today' is boxed, 'changes' are bold, 'reminders' are underlined, while weekends and holidays (as well as changes and reminders) can each have a different background color to make them more visibly distinct from each other.\n* [weekend] - true indicates a weekend, false indicates a weekday. When this parameter is omitted, the plugin uses internal defaults to automatically determine when a given date falls on a weekend.\n<<<\n!!!!!Examples\n<<<\nThe current date: <<date>>\nThe current time: <<date today "0hh:0mm:0ss">>\nToday's blog: <<date link today "DDD, MMM DDth, YYYY">>\nRecent blogs/changes/reminders: <<date popup Y M D-1 "yesterday">> <<date popup today "today">> <<date popup Y M D+1 "tomorrow">>\nThe first day of next month will be a <<date Y M+1 1 "DDD">>\nThis tiddler (DatePlugin) was last updated on: <<date tiddler "DDD, MMM DDth, YYYY">>\nThe SiteUrl was last updated on: <<date tiddler:SiteUrl "DDD, MMM DDth, YYYY">>\nThis document was last saved on <<date filedate "DDD, MMM DDth, YYYY at 0hh:0mm:0ss">>\n<<date 2006 07 24 "MMM DDth, YYYY">> will be a <<date 2006 07 24 "DDD">>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''DatePlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2007.06.20 [2.3.1]'' in onClickDatePopup(), use Popup.show() instead of deprecated ScrollToTiddlerPopup(). Fixes fatal error that prevents popups from being properly displayed\n''2007.05.31 [2.3.0]'' list "created" tiddlers in date popup. Also, force re-cache of created/modified indices when displaying current date and store.isDirty(), so that popup is kept in sync with tiddler changes.\n''2006.05.09 [2.2.1]'' added "todaybg" handling to set background color of current date. Also, honor excludeLists tag when getting lists of tiddlers. Based on suggestions by Mark Hulme.\n''2006.05.05 [2.2.0]'' added "linkedbg" handling to set background color when a 'dated tiddler' exists. Based on a suggestion by Mark Hulme.\n''2006.03.08 [2.1.2]'' add 'override leadtime' flag param in call to findTiddlersWithReminders(), and add "Enter a title" default text to new reminder handler. Thanks to Jeremy Sheeley for these additional tweaks.\n''2006.03.06 [2.1.0]'' hasReminders() nows uses window.reminderCacheForCalendar[] when present. If calendar cache is not present, indexReminders() now uses findTiddlersWithReminders() with a 90-day look ahead to check for reminders. Also, switched default background colors for autostyled dates: reminders are now greenish ("c0ffee") and holidays are now reddish ("ffaace").\n''2006.02.14 [2.0.5]'' when readOnly is set (by TW core), omit "new reminders..." popup menu item and, if a "dated tiddler" does not already exist, display the date as simple text instead of a link.\n''2006.02.05 [2.0.4]'' added var to variables that were unintentionally global. Avoids FireFox 1.5.0.1 crash bug when referencing global variables\n''2006.01.18 [2.0.3]'' In 1.2.x the tiddler editor's text area control was given an element ID=("tiddlerBody"+title), so that it was easy to locate this field and programmatically modify its content. With the addition of configuration templates in 2.x, the textarea no longer has an ID assigned. To find this control we now look through all the child nodes of the tiddler editor to locate a "textarea" control where attribute("edit") equals "text", and then append the new reminder to the contents of that control.\n''2006.01.11 [2.0.2]'' correct 'weekend' override detection logic in showDate()\n''2006.01.10 [2.0.1]'' allow custom-defined weekend days (default defined in config.macros.date.weekend[] array)\nadded flag param to showDate() API to override internal weekend[] array\n''2005.12.27 [2.0.0]'' Update for TW2.0\nAdded parameter handling for 'linkformat'\n''2005.12.21 [1.2.2]'' FF's date.getYear() function returns 105 (for the current year, 2005). When calculating a date value from Y M and D expressions, the plugin adds 1900 to the returned year value get the current year number. But IE's date.getYear() already returns 2005. As a result, plugin calculated date values on IE were incorrect (e.g., 3905 instead of 2005). Adding +1900 is now conditional so the values will be correct on both browsers.\n''2005.11.07 [1.2.1]'' added support for "tiddler" dynamic date parameter\n''2005.11.06 [1.2.0]'' added support for "tiddler:title" dynamic date parameter\n''2005.11.03 [1.1.2]'' when a reminder doesn't have a specified title parameter, use the title of the tiddler that contains the reminder as "fallback" text in the popup menu. Based on a suggestion from BenjaminKudria.\n''2005.11.03 [1.1.1]'' Temporarily bypass hasReminders() logic to avoid excessive overhead from generating the indexReminders() cache. While reminders can still appear in the popup menu, they just won't be indicated by auto-styling the date number that is displayed. This single change saves approx. 60% overhead (5 second delay reduced to under 2 seconds).\n''2005.11.01 [1.1.0]'' corrected logic in hasModifieds() and hasReminders() so caching of indexed modifieds and reminders is done just once, as intended. This should hopefully speed up calendar generators and other plugins that render multiple dates...\n''2005.10.31 [1.0.1]'' documentation and code cleanup\n''2005.10.31 [1.0.0]'' initial public release\n''2005.10.30 [0.9.0]'' pre-release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.date = {major: 2, minor: 3, revision: 1, date: new Date(2007,6,20)};\n//}}}\n\n//{{{\nconfig.macros.date = {\n format: "YYYY.0MM.0DD", // default date display format\n linkformat: "YYYY.0MM.0DD", // 'dated tiddler' link format\n linkedbg: "#babb1e", // "babble"\n todaybg: "#ffab1e", // "fable"\n weekendbg: "#c0c0c0", // "cocoa"\n holidaybg: "#ffaace", // "face"\n createdbg: "#bbeeff", // "beef"\n modifiedsbg: "#bbeeff", // "beef"\n remindersbg: "#c0ffee", // "coffee"\n holidays: [ "01/01", "07/04", "07/24", "11/24" ], // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)\n weekend: [ 1,0,0,0,0,0,1 ] // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ]\n};\n//}}}\n\n//{{{\nconfig.macros.date.handler = function(place,macroName,params)\n{\n // do we want to see a link, a popup, or just a formatted date?\n var mode="display";\n if (params[0]=="display") { mode=params[0]; params.shift(); }\n if (params[0]=="popup") { mode=params[0]; params.shift(); }\n if (params[0]=="link") { mode=params[0]; params.shift(); }\n // get the date\n var now = new Date();\n var date = now;\n if (!params[0] || params[0]=="today")\n { params.shift(); }\n else if (params[0]=="filedate")\n { date=new Date(document.lastModified); params.shift(); }\n else if (params[0]=="tiddler")\n { date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }\n else if (params[0].substr(0,8)=="tiddler:")\n { var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }\n else {\n var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));\n var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));\n var d = eval(params.shift().replace(/D/ig,now.getDate()+0));\n date = new Date(y,m-1,d);\n }\n // date format with optional custom override\n var format=this.format; if (params[0]) format=params.shift();\n var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();\n showDate(place,date,mode,format,linkformat);\n}\n//}}}\n\n//{{{\nwindow.showDate=showDate;\nfunction showDate(place,date,mode,format,linkformat,autostyle,weekend)\n{\n if (!mode) mode="display";\n if (!format) format=config.macros.date.format;\n if (!linkformat) linkformat=config.macros.date.linkformat;\n if (!autostyle) autostyle=false;\n\n // format the date output\n var title = date.formatString(format);\n var linkto = date.formatString(linkformat);\n\n // just show the formatted output\n if (mode=="display") { place.appendChild(document.createTextNode(title)); return; }\n\n // link to a 'dated tiddler'\n var link = createTiddlyLink(place, linkto, false);\n link.appendChild(document.createTextNode(title));\n link.title = linkto;\n link.date = date;\n link.format = format;\n link.linkformat = linkformat;\n\n // if using a popup menu, replace click handler for dated tiddler link\n // with handler for popup and make link text non-italic (i.e., an 'existing link' look)\n if (mode=="popup") {\n link.onclick = onClickDatePopup;\n link.style.fontStyle="normal";\n }\n\n // format the popup link to show what kind of info it contains (for use with calendar generators)\n if (!autostyle) return;\n if (hasModifieds(date)||hasCreateds(date))\n { link.style.fontStyle="normal"; link.style.fontWeight="bold"; }\n if (hasReminders(date))\n { link.style.textDecoration="underline"; }\n if(isToday(date))\n { link.style.border="1px solid black"; }\n\n if( (weekend!=undefined?weekend:isWeekend(date)) && (config.macros.date.weekendbg!="") )\n { place.style.background = config.macros.date.weekendbg; }\n if(isHoliday(date)&&(config.macros.date.holidaybg!=""))\n { place.style.background = config.macros.date.holidaybg; }\n if (hasCreateds(date)&&(config.macros.date.createdbg!=""))\n { place.style.background = config.macros.date.createdbg; }\n if (hasModifieds(date)&&(config.macros.date.modifiedsbg!=""))\n { place.style.background = config.macros.date.modifiedsbg; }\n if (store.tiddlerExists(linkto)&&(config.macros.date.linkedbg!=""))\n { place.style.background = config.macros.date.linkedbg; }\n if (hasReminders(date)&&(config.macros.date.remindersbg!=""))\n { place.style.background = config.macros.date.remindersbg; }\n if(isToday(date)&&(config.macros.date.todaybg!=""))\n { place.style.background = config.macros.date.todaybg; }\n}\n//}}}\n\n//{{{\nfunction isToday(date) // returns true if date is today\n { var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }\n\nfunction isWeekend(date) // returns true if date is a weekend\n { return (config.macros.date.weekend[date.getDay()]); }\n\nfunction isHoliday(date) // returns true if date is a holiday\n{\n var longHoliday = date.formatString("0MM/0DD/YYYY");\n var shortHoliday = date.formatString("0MM/0DD");\n for(var i = 0; i < config.macros.date.holidays.length; i++) {\n var holiday=config.macros.date.holidays[i];\n if (holiday==longHoliday||holiday==shortHoliday) return true;\n }\n return false;\n}\n//}}}\n\n//{{{\n// Event handler for clicking on a day popup\nfunction onClickDatePopup(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var popup = Popup.create(this);\n if(popup) {\n // always show dated tiddler link (or just date, if readOnly) at the top...\n if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))\n createTiddlyLink(popup,this.date.formatString(this.linkformat),true);\n else\n createTiddlyText(popup,this.date.formatString(this.linkformat));\n addCreatedsToPopup(popup,this.date,this.format);\n addModifiedsToPopup(popup,this.date,this.format);\n addRemindersToPopup(popup,this.date,this.linkformat);\n }\n Popup.show(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n//{{{\nfunction indexCreateds() // build list of tiddlers, hash indexed by creation date\n{\n var createds= { };\n var tiddlers = store.getTiddlers("title","excludeLists");\n for (var t = 0; t < tiddlers.length; t++) {\n var date = tiddlers[t].created.formatString("YYYY0MM0DD")\n if (!createds[date])\n createds[date]=new Array();\n createds[date].push(tiddlers[t].title);\n }\n return createds;\n}\nfunction hasCreateds(date) // returns true if date has created tiddlers\n{\n if (!config.macros.date.createds) config.macros.date.createds=indexCreateds();\n return (config.macros.date.createds[date.formatString("YYYY0MM0DD")]!=undefined);\n}\n\nfunction addCreatedsToPopup(popup,when,format)\n{\n var force=(store.isDirty() && when.formatString("YYYY0MM0DD")==new Date().formatString("YYYY0MM0DD"));\n if (force || !config.macros.date.createds) config.macros.date.createds=indexCreateds();\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n var createds = config.macros.date.createds[when.formatString("YYYY0MM0DD")];\n if (createds) {\n createds.sort();\n var e=createTiddlyElement(popup,"div",null,null,"created:");\n for(var t=0; t<createds.length; t++) {\n var link=createTiddlyLink(popup,createds[t],false);\n link.appendChild(document.createTextNode(indent+createds[t]));\n createTiddlyElement(popup,"br",null,null,null);\n }\n }\n}\n//}}}\n\n//{{{\nfunction indexModifieds() // build list of tiddlers, hash indexed by modification date\n{\n var modifieds= { };\n var tiddlers = store.getTiddlers("title","excludeLists");\n for (var t = 0; t < tiddlers.length; t++) {\n var date = tiddlers[t].modified.formatString("YYYY0MM0DD")\n if (!modifieds[date])\n modifieds[date]=new Array();\n modifieds[date].push(tiddlers[t].title);\n }\n return modifieds;\n}\nfunction hasModifieds(date) // returns true if date has modified tiddlers\n{\n if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();\n return (config.macros.date.modifieds[date.formatString("YYYY0MM0DD")]!=undefined);\n}\n\nfunction addModifiedsToPopup(popup,when,format)\n{\n var force=(store.isDirty() && when.formatString("YYYY0MM0DD")==new Date().formatString("YYYY0MM0DD"));\n if (force || !config.macros.date.modifieds) config.macros.date.modifieds=indexModifieds();\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n var mods = config.macros.date.modifieds[when.formatString("YYYY0MM0DD")];\n if (mods) {\n mods.sort();\n var e=createTiddlyElement(popup,"div",null,null,"changed:");\n for(var t=0; t<mods.length; t++) {\n var link=createTiddlyLink(popup,mods[t],false);\n link.appendChild(document.createTextNode(indent+mods[t]));\n createTiddlyElement(popup,"br",null,null,null);\n }\n }\n}\n//}}}\n\n//{{{\nfunction indexReminders(date,leadtime) // build list of tiddlers with reminders, hash indexed by reminder date\n{\n var reminders = { };\n if(window.findTiddlersWithReminders!=undefined) { // reminder plugin is installed\n // DEBUG var starttime=new Date();\n var t = findTiddlersWithReminders(date, [0,leadtime], null, null, 1);\n for(var i=0; i<t.length; i++) reminders[t[i].matchedDate]=true;\n // DEBUG var out="Found "+t.length+" reminders in "+((new Date())-starttime+1)+"ms\sn";\n // DEBUG out+="startdate: "+date.toLocaleDateString()+"\sn"+"leadtime: "+leadtime+" days\sn\sn";\n // DEBUG for(var i=0; i<t.length; i++) { out+=t[i].matchedDate.toLocaleDateString()+" "+t[i].params.title+"\sn"; }\n // DEBUG alert(out);\n }\n return reminders;\n}\n\nfunction hasReminders(date) // returns true if date has reminders\n{\n if (window.reminderCacheForCalendar)\n return window.reminderCacheForCalendar[date]; // use calendar cache\n if (!config.macros.date.reminders)\n config.macros.date.reminders = indexReminders(date,90); // create a 90-day leadtime reminder cache\n return (config.macros.date.reminders[date]);\n}\n\nfunction addRemindersToPopup(popup,when,format)\n{\n if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed\n\n var indent = String.fromCharCode(160)+String.fromCharCode(160);\n var reminders=findTiddlersWithReminders(when, [0,31],null,null,1);\n var e=createTiddlyElement(popup,"div",null,null,"reminders:"+(!reminders.length?" none":""));\n for(var t=0; t<reminders.length; t++) {\n link = createTiddlyLink(popup,reminders[t].tiddler,false);\n var diff=reminders[t].diff;\n diff=(diff<1)?"Today":((diff==1)?"Tomorrow":diff+" days");\n var txt=(reminders[t].params["title"])?reminders[t].params["title"]:reminders[t].tiddler;\n link.appendChild(document.createTextNode(indent+diff+" - "+txt));\n createTiddlyElement(popup,"br",null,null,null);\n }\n if (readOnly) return; // omit "new reminder..." link\n var link = createTiddlyLink(popup,indent+"new reminder...",true); createTiddlyElement(popup,"br");\n var title = when.formatString(format);\n link.title="add a reminder to '"+title+"'";\n link.onclick = function() {\n // show tiddler editor\n story.displayTiddler(null, title, 2, null, null, false, false);\n // find body 'textarea'\n var c =document.getElementById("tiddler" + title).getElementsByTagName("*");\n for (var i=0; i<c.length; i++) if ((c[i].tagName.toLowerCase()=="textarea") && (c[i].getAttribute("edit")=="text")) break;\n // append reminder macro to tiddler content\n if (i<c.length) {\n if (store.tiddlerExists(title)) c[i].value+="\sn"; else c[i].value="";\n c[i].value += "<<reminder";\n c[i].value += " day:"+when.getDate();\n c[i].value += " month:"+(when.getMonth()+1);\n c[i].value += " year:"+when.getFullYear();\n c[i].value += ' title:"Enter a title" >>';\n }\n };\n}\n//}}}\n
The following links indicate some kind of bug or issue with the system. \n\n<<tagging Issues>>\n\nWhen searching the terms: danbury industrial corporation, and clicking "show relevant containers" for State Library results, an error is reported.
The Rhode Island Archival and Manuscript Collections Online (RIAMCO) is the gateway to information about archival collections in Rhode Island. Search the finding aids to discover what historical materials are available for research and where those collections are located. The finding aids give detailed descriptions of primary source materials located at repositories across Rhode Island.\n\nhttp://www.riamco.org/
/*{{{*/\n/* CSS by Brian Kennison*/\n/*Version 1.0*/\n/*}}}*/\n/*{{{*/\n\n/* HTML Elements */\nbody { \n //background: url(/cao/about/images/bg.gif) repeat-y center;\n color:#555555;\n font-family:"Trebuchet MS", Arial, Verdana;\n font-size: .90em;\n line-height: 140%;\n margin:0;\n text-align:left;\n}\n\na:link {\n color: #191970;\n text-decoration: none;\n outline: none;\n}\n\na:visited {\n color: #A52A2A;\n text-decoration: none;\n outline: none;\n}\n \na:hover {\n background-color: #D0D0D0;\n color: #4B0082;\n text-decoration: none;\n}\n \np { \n margin: 5px 0; \n}\n\nh1 {\n font: bold 1.8em Arial, Sans-Serif; \n letter-spacing: -1px; \n margin: 0; \n padding: 8px 0 4px 0; \n}\n\nh2 { \n font: bold 1.6em Arial, Sans-Serif; \n letter-spacing: -1px; \n}\n\nh3 { \n margin: 0; \n padding: 4px 0; \n}\n\nul { \n list-style: square; \n margin: 0; \n padding : 0; \n}\n\nimg { \n border: 0; \n}\n\nhr { \n background-color: #C0C0C0; \n border-style: none; \n color: #D0D0D0; \n height: 1px; \n margin: 10px 0; \n}\n\n/* Helpers */\n.clearAll { clear: both }\n.floatLeft { \n border: thin dotted black;\n color: #5E8412;\n float:left;\n margin-right; 5px;\n padding: 5px\n}\n\n.floatLeft .tiddlyLink {\n color: #5E8412;\n -webkit-border-radius: 10px;\n -khtml-border-radius: 10px; \n -moz-border-radius: 10px;\n border-radius: 10px;\n}\n\n.externalLink {\n font-weight: bold;\n}\n\n/* Content Sections in Document Order */\n#contentWrapper { \n margin: 0px auto; \n width: 850px; \n}\n\n#header { \n background: transparent; \n color: #FFF;\n padding-top: 20px; \n width: 550px;\n}\n\n#header #icons { \n float: right; \n margin:20px 0; \n padding:0 \n}\n\n#header #icons img { \n padding-right: 2px; \n border: 0; \n}\n\n.headerShadow { \n padding: 1.4em 0 0.5em 1em;\n}\n\n.logo {\n border: 0;\n height: 110px;\n width: 145px;\n padding: 2px 2px 2px 2px;\n}\n\n.searchBar { \n float: right; \n font-size: 1em; \n margin-top: 1.3e;m \n position: relative; \n}\n\n.searchBar .button { \n color: #FFF; \n display: block \n}\n\n.searchBar .searchButton { \n color: #FFF; \n display: block \n}\n\n.searchBar .button:hover { \n border: 1px solid #fefefe; \n color: #4F4B45 \n}\n\n.searchBar .searchButton:hover { \n border: 1px solid #fefefe; \n color: #4F4B45 \n}\n\n.searchBar input { \n background-color: #fefefe; \n border: 1px solid #CCC; \n color: #736451; \n margin-right: 3px \n}\n\n.siteTitle { \n color: #736451; \n font: normal 2em "Century Gothic", "Trebuchet MS", "Arial Narrow", Arial, sans-serif; \n letter-spacing: 1px; \n margin: 0; \n padding: 8px 0 4px 0; \n text-transform:uppercase;\n}\n\n.siteSubtitle { \n border-bottom:1px solid #eeeeee;\n color:#000000;\n font: 1.0em "Century Gothic", "Trebuchet MS", "Arial Narrow", Arial, sans-serif; \n letter-spacing: 0px; \n margin:0 0 10px 0; \n padding: 5px 0 0 0\n text-align:left;\n text-transform:uppercase;\n}\n\n#topMenu { \n background: inherit; \n height: 3ex;\n overflow: hidden\n margin: 5px 5px 5px 5px;\n padding: 5px 5px 5px 5px;\n text-align: center;\n width: 550px;\n}\n\n#topMenu a, #topMenu .tiddlyLink, #topMenu .button { \n background:#222222; \n border:thin solid black; \n color: #8d8d8d; \n font-size: 110%; \n font-variant: small-caps; \n font-weight: normal; \n letter-spacing: 1px;\n margin: 0 4px; \n padding: 0.3em 0.45em ; \n text-decoration: none;\n}\n\n#topMenu a:hover, #topMenu .tiddlyLink:hover, #topMenu .button:hover, #topMenu .button:active, #topMenu .highlight {\n background: #736451;\n color: #FFF; \n text-decoration: none; \n}\n\n#topMenu br { \n display: none \n}\n\n#displayArea { \n margin: 0 17em 2em 0.5em !important; \n width: 550px; \n}\n\n#messageArea { \n background: #fefefe; \n border: 4px solid #736451; \n color: #555; \n font-size: 90% \n}\n\n#messageArea .button { \n border: 1px solid #736451 color: #666; \n}\n\n#messageArea .button:hover { \n background: #FF0000; \n border-color: #FF0000 color: #FFF \n}\n\n#messageArea a:hover { \n background: #f5f5f5; \n border: none \n}\n\n#tiddlerDisplay {}\n\n#tiddlerContents {}\n\n.tiddler { \n padding-bottom: 10px; \n padding-left: 0;\n width: 100% \n}\n\n#contentFooter { \n border-top: solid thin black;\n color: #555555;\n clear: both;\n font-size: 10px;\n text-align: center;\n padding-top: 30px;\n margin-top: 30px;\n width: 550px;\n}\n\n#contentFooter .right { \n background: #FFF; \n float: right; \n text-align: right \n}\n\n#contentFooter a { \n background: #FFF; text-decoration: none \n}\n\n/* Tiddler Parts */\n.toolbar { \n font-size: 85% \n}\n\n.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active { \n background: transparent; \n border: 1px solid #fff color: #333; \n}\n\n.title { \n border-bottom:1px solid black; \n color: #101070; \n margin: 10px 0 0 0;\n}\n\n.subtitle, .subtitle a { \n color: #736451; \n font-size: 1em; \n margin: 0.2em \n}\n\n.popup { \n background: #8D8D8D; \n border: 1px solid black;\n color: #FFF;\n}\n.popup li a, .popup li a:visited { \n border: none;\n color: #FFF; \n}\n.popup li a:hover { \n background: #F7F7F7; \n border: none \n color: #fff; \n}\n.popup li.disabled { \n color: #000 \n}\n\n#sidebar { \n position: relative;\n background: #fefefe; \n border-left: 0 solid #000; \n color: black;\n float: right;\n line-height: 1.4em; \n margin: 2px\n width: 150px;\n}\n\n#sidebarOptions .sliderPanel .txtOptionInput { \n border: 1px solid #736451; \n width: 9em \n}\n\n#sidebarOptions .sliderPanel a { \n background-color: #eee;\n border-bottom: 1px dotted #333 color: #555;\n font-weight: normal;\n}\n\n#sidebarOptions .sliderPanel a:hover { \n background-color: #eee;\n border-bottom: 1px dotted #111 border: none;\n color: #111;\n}\n\n#sidebarOptions .sliderPanel input { \n border: 1px solid #736451 \n}\n\n#sidebarOptions .sliderPanel { \n background: #eee;\n border: 1px solid #ccc;\n font-size: 0.9em \n}\n\n#sidebarOptions a { \n color: #101070;\n text-decoration: none \n}\n\n#sidebarOptions a:hover, #sidebarOptions a:active { \n background-color: #f5f5f5;\n border: 1px solid #f5f5f5 color: #C00;\n}\n\n#sidebarOptions input { \n border: 1px solid #736451 \n}\n\n#sidebarOptions { \n padding-left: 0.5em;\n padding-top: 2em \n}\n\n#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active { \n background: #fefefe color: #C00;\n}\n\n#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button { \n color: #101070;\n}\n\n#sidebarTabs .tabContents .tiddlyLink:hover, #sidebarTabs .tabContents .button:hover { background: #fefefe;\n border: none color: #C00;\n text-decoration: none;\n}\n\n#sidebarTabs .tabContents { \n background: #fefefe \n}\n\n#sidebarTabs .tabSelected { \n padding-bottom: 3px \n}\n\n#sidebarTabs .tabUnselected { \n border-bottom: none;\n padding-bottom: 3px \n}\n\n#sidebarTabs .tabUnselected:hover { \n border-bottom: none;\n color: #736451 padding-bottom: 3px;\n}\n\n#sidebarTabs { \n font-family: arial, helvetica \n}\n\nlegend {\n color: #771500;\n font-size: 120%;\n font-weight: bold;\n margin:top: 5px;\n}\n\nlabel {\n font-weight: bold;\n}\n\nform {\n width: 80%;\n margin: auto\n}\n\n* html .editor textarea, * html .editor input { width: 98% }\n* html .viewer pre { margin-left: 0 }\n\n.editor input { border: 1px solid #888; margin-top: 5px }\n.editor textarea { border: 1px solid #888 }\n\n.highlight, .marked { background: transparent; border: none; color: #111; text-decoration: underline }\n\n.listTitle { color: #888 }\n\n.selected .tagging .button, .selected .tagged .button { color: #aaa }\n.selected .tagging .listTitle, .selected .tagged .listTitle { color: #666 }\n.selected .tagging, .selected .tagged { background-color: #f7f7f7; border: 1px solid #ccc }\n.selected .toolbar a { color: #736451 }\n.selected .toolbar a:hover { background: transparent; border: 1px solid #fff color: #333; }\n\n.shadow .title { color: #736451 }\n\n.tabContents { background: #fefefe }\n\n.tabSelected { background: #736451 color: #fefefe; }\n.tabSelected, .tabSelected:hover { background: #fefefe; border: solid 1px #ccc color: #555; }\n\n.tabUnselected { background: #eee; border: solid 1px #ccc color: #736451; }\n.tabUnselected:hover { border: 1px solid #ccc text-decoration: none; }\n\n.tagClear { clear: none }\n\n.tagging .button, .tagged .button { color: #ccc }\n.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active { background: transparent; border: none; color: #333 text-decoration: underline; }\n.tagging .listTitle, .tagged .listTitle { color: #bbb }\n.tagging, .tagged { background-color: #F7F7F7 border: 1px solid #eee; }\n\n.viewer { color: #555; }\n.viewer .button, .editorFooter .button { border: 1px solid #CA0000 color: #555; }\n.viewer .button:active, .viewer .highlight, .editorFooter .button:active, .editorFooter .highlight { background: #736451; border-color: #736451 color: #fff; }\n.viewer .button:hover, .editorFooter .button:hover { background: #CA0000; border-color: #CA0000 color: #fff; }\n.viewer blockquote { border-left: 5px solid #CA0000 }\n.viewer code { background: #f5f5f5 color: #111; !important;}\n.viewer hr { border-top: dashed 1px #555 }\n.viewer pre { background: #f5f5f5 border: 1px solid #ccc; }\n.viewer table, .viewer td { border: 1px solid #CA0000 }\n.viewer th, thead td { background: #CA0000; border: 1px solid #CA0000; color: #fff }\n\n.roundedCorners { \n -webkit-border-radius: 10px;\n -khtml-border-radius: 10px; \n -moz-border-radius: 10px;\n border-radius: 10px;\n} \n\n\n#ZiddlyFormats { margin: 10px 0 0 0 }\n\n;/*}}}*/\n
/***\n|''Name:''|TiddlerNotesPlugin|\n|''Description:''|Add notes to tiddlers without modifying the original content|\n|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|\n|''Source:''|http://tw.lewcid.org/#TiddlerNotesPlugin|\n|''Code Repository:''|http://tw.lewcid.org/svn/plugins|\n|''Version:''|2.1|\n|''Date:''|26/10/07|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.2.3|\n\n!!Concept:\n*The TiddlerNotesPlugin allows you to add notes to tiddlers, without needing to edit the original tiddler. This means that your original content will remain unaltered, and if you update it in the future, you won't lose your notes. Notes are stored in separate tiddlers, but can be viewed and edited from within the original tiddler.\n*For a tiddler titled "~MySlide", the notes are by default saved in a tiddler titled "~MySlide-Notes" and is given a tag of "Notes". The suffix and tags of the notes tiddlers are customizable. You can have one or multiple notes per tiddlers. So it is possible to have for example, teacher's notes and student's notes in the same file.\n*Notes can be configured to start off blank, or pre-filled with the contents of the original tiddler.\n\n!!Usage:\n*{{{<<notes>>}}} is the simplest usage form.\n* additional optional parameters include:\n**{{{heading:}}} the heading to use for the notes box\n**{{{tag:}}} the tag to be given to the notes tiddler\n**{{{suffix:}}} the suffix to be used when naming the notes tiddler\n* a full macro call could look like: {{{<<notes heading:"My Notes" tag:"NoteTiddlers" suffix:"Comments">>}}}\n* To avoid adding {{{<<notes>>}}} to each tiddler you want notes for, you could add the macro call to the ViewTemplate\n** below the line {{{<div class='viewer' macro='view text wikified'></div>}}} add the following line: <br> {{{<div class='viewer' macro='notes'></div>}}}\n** Used in combination with the ~HideWhenPlugin or ~PublisherPlugin, you could have notes be shown only for tiddlers with specific tags. The ~PublisherPlugin would allow you for instance to only have the ~TeachersNotes visible to the teacher, and the ~StudentsNotes for the same tiddler visible to the Student.\n\n!!Configuration\n*<<option chkPrefillNotes>> Enable to pre-fill notes with the original tiddler's contents\n\n!!Demo:\n* [[MySlide]]\n\n***/\n// /%\n//!BEGIN-PLUGIN-CODE\n\nif (!config.options.chkPrefillNotes)\n config.options.chkPrefillNotes = false;\n \nfunction createTiddlyElement(theParent,theElement,theID,theClass,theText,attribs)\n{\n var e = document.createElement(theElement);\n if(theClass != null)\n e.className = theClass;\n if(theID != null)\n e.setAttribute("id",theID);\n if(theText != null)\n e.appendChild(document.createTextNode(theText));\n if(attribs){\n for(var n in attribs){\n e.setAttribute(n,attribs[n]);\n }\n }\n if(theParent != null)\n theParent.appendChild(e);\n return e;\n}\n\nfunction createTiddlyButton(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey,attribs)\n{\n var theButton = document.createElement("a");\n if(theAction) {\n theButton.onclick = theAction;\n theButton.setAttribute("href","javascript:;");\n }\n if(theTooltip)\n theButton.setAttribute("title",theTooltip);\n if(theText)\n theButton.appendChild(document.createTextNode(theText));\n if(theClass)\n theButton.className = theClass;\n else\n theButton.className = "button";\n if(theId)\n theButton.id = theId;\n if(attribs){\n for(var n in attribs){\n e.setAttribute(n,attribs[n]);\n }\n }\n if(theParent)\n theParent.appendChild(theButton);\n if(theAccessKey)\n theButton.setAttribute("accessKey",theAccessKey);\n return theButton;\n}\n\nconfig.macros.notes={\n \n cancelWarning: "Are you sure you want to abandon changes to your notes for '%0'?",\n editLabel: "edit notes",\n editTitle: "double click to edit",\n saveLabel: "save notes",\n saveTitle: "double click to save",\n cancelLabel: "cancel",\n heading: "Notes",\n suffix: "Notes",\n tag: "Notes",\n \n saveNotes: function(ev){\n e = ev? ev : window.event;\n var theTarget = resolveTarget(e);\n if (theTarget.nodeName.toLowerCase() == "textarea")\n return false;\n var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");\n story.setDirty(title,false);\n var box = document.getElementById("notesContainer"+title);\n var textarea = document.getElementById("notesTextArea"+title);\n if(textarea.getAttribute("oldText")!=textarea.value && !hasClass(theTarget,"cancelNotesButton")){\n var suffix = box.getAttribute("suffix");\n var t = store.getTiddler(title+"-"+suffix);\n store.saveTiddler(title+"-"+suffix,title+"-"+suffix,textarea.value,config.options.txtUserName,new Date(),t?t.tags:box.getAttribute("tag"),t?t.fields:{});\n }\n story.refreshTiddler(title,1,true);\n autoSaveChanges(true);\n return false;\n },\n \n editNotes: function(box,tiddler){\n removeChildren(box);\n story.setDirty(tiddler,true);\n box.title = this.saveTitle;\n box.ondblclick = this.saveNotes;\n createTiddlyButton(box,this.cancelLabel,this.cancelLabel,this.saveNotes,"cancelNotesButton");\n createTiddlyButton(box,this.saveLabel,this.saveLabel,this.saveNotes,"saveNotesButton");\n wikify("!!"+box.getAttribute("heading")+"\sn",box);\n addClass(box,"editor");\n var wrapper1 = createTiddlyElement(null,"fieldset",null,"fieldsetFix");\n var wrapper2 = createTiddlyElement(wrapper1,"div");\n var e = createTiddlyElement(wrapper2,"textarea","notesTextArea"+tiddler);\n var v = store.getValue(tiddler+"-"+box.getAttribute("suffix"),"text");\n if(!v) \n v = config.options.chkPrefillNotes? store.getValue(tiddler,"text"):'';\n e.value = v;\n e.setAttribute("oldText",v);\n var rows = 10;\n var lines = v.match(/\sn/mg);\n var maxLines = Math.max(parseInt(config.options.txtMaxEditRows),5);\n if(lines != null && lines.length > rows)\n rows = lines.length + 5;\n rows = Math.min(rows,maxLines);\n e.setAttribute("rows",rows);\n box.appendChild(wrapper1);\n },\n \n editNotesButtonOnclick: function(e){\n var title = story.findContainingTiddler(this).getAttribute("tiddler");\n var box = document.getElementById("notesContainer"+title);\n config.macros.notes.editNotes(box,title);\n return false;\n },\n \n ondblclick : function(ev){\n e = ev? ev : window.event;\n var theTarget = resolveTarget(e);\n var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");\n var box = document.getElementById("notesContainer"+title);\n config.macros.notes.editNotes(box,title);\n e.cancelBubble = true;\n if(e.stopPropagation) e.stopPropagation();\n return false;\n },\n \n handler : function(place,macroName,params,wikifier,paramString,tiddler){\n \n params = paramString.parseParams("anon",null,true,false,false);\n var heading = getParam(params,"heading",this.heading);\n var tag = getParam(params,"tag",this.tag);\n var suffix = getParam(params,"suffix",this.suffix);\n var box = createTiddlyElement(place,"div","notesContainer"+tiddler.title,"TiddlerNotes",null,{"source":tiddler.title,params:paramString,heading:heading,tag:tag,suffix:suffix});\n createTiddlyButton(box,this.editLabel,this.editLabel,this.editNotesButtonOnclick,"editNotesButton");\n wikify("!!"+heading+"\sn",box);\n box.title=this.editTitle;\n box.ondblclick = this.ondblclick;\n wikify("<<tiddler [["+tiddler.title+"-"+suffix+"]]>>",box);\n } \n};\n\nStory.prototype.old_notes_closeTiddler = Story.prototype.closeTiddler;\nStory.prototype.closeTiddler = function(title,animate,unused){\n if(story.isDirty(title)) {\n if(!confirm(config.macros.notes.cancelWarning.format([title])))\n return false;\n }\n return this.old_notes_closeTiddler.apply(this,arguments);\n}\n\nsetStylesheet(".TiddlerNotes {\sn"+ " background:#eee;\sn"+ " border:1px solid #ccc;\sn"+ " padding:10px;\sn"+ " margin:15px;\sn"+ "}\sn"+ "\sn"+ ".cancelNotesButton,.editNotesButton, .saveNotesButton {\sn"+ " float:right;\sn"+ " border:1px solid #ccc;\sn"+ " padding:2px 5px;\sn"+ "}\sn"+ "\sn"+ ".saveNotesButton{\sn"+ " margin-right:0.5em;\sn"+ "}\sn"+ "\sn"+ ".TiddlerNotes.editor textarea{\sn"+ " border:1px solid #ccc;\sn"+ "}","NotesPluginStyles");\n//!END-PLUGIN-CODE\n// %/\n
// // Excludes any tiddlers from timeline that have been tagged with ''excludeTimeline''\n/*{{{*/\nconfig.macros.timeline.handler = function(place,macroName,params)\n{\n var field = params[0] ? params[0] : "modified";\n var tiddlers = store.reverseLookup("tags","excludeTimeline",false,field);\n var lastDay = "";\n var last = params[1] ? tiddlers.length-Math.min(tiddlers.length,parseInt(params[1])) : 0;\n for(var t=tiddlers.length-1; t>=last; t--)\n {\n var tiddler = tiddlers[t];\n var theDay = tiddler[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",tiddler[field].formatString(this.dateFormat));\n lastDay = theDay;\n }\n var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink");\n theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));\n }\n}\n/*}}}*/\n
/***\n|''Name:''|DropDownMenuPlugin|\n|''Description:''|Create dropdown menus from unordered lists|\n|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|\n|''Source:''|http://tw.lewcid.org/#DropDownMenuPlugin|\n|''Code Repository:''|http://tw.lewcid.org/svn/plugins|\n|''Version:''|2.1|\n|''Date:''|11/04/2007|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|\n|''~CoreVersion:''|2.2.5|\n\n!!Usage:\n* create a two-level unordered list using wiki syntax, and place {{{<<dropMenu>>}}} on the line after it.\n* to create a vertical menu use {{{<<dropMenu vertical>>}}} instead.\n* to assign custom classes to the list, just pass them as parameters to the macro {{{<<dropMenu className1 className2 className3>>}}}\n\n!!Features:\n*Supports just a single level of drop-downs, as anything more usually provides a poor experience for the user.\n* Very light weight, about 1.5kb of JavaScript and 4kb of CSS.\n* Comes with two built in css 'themes', the default horizontal and vertical. \n\n!!Customizing:\n* to customize the appearance of the menu's, you can either add a custom class as described above or, you can edit the CSS via the StyleSheetDropDownMenu shadow tiddler.\n\n!!Examples:\n* [[DropDownMenuDemo]]\n\n***/\n// /%\n//!BEGIN-PLUGIN-CODE\nconfig.macros.dropMenu={\n\n dropdownchar: "\su25bc",\n\n handler : function(place,macroName,params,wikifier,paramString,tiddler){\n list = findRelated(place.lastChild,"UL","tagName","previousSibling");\n if (!list)\n return;\n addClass(list,"suckerfish");\n if (params.length){\n addClass(list,paramString);\n }\n this.fixLinks(list);\n },\n \n fixLinks : function(el){\n var els = el.getElementsByTagName("li");\n for(var i = 0; i < els.length; i++) {\n if(els[i].getElementsByTagName("ul").length>0){\n var link = findRelated(els[i].firstChild,"A","tagName","nextSibling");\n if(!link){\n var ih = els[i].firstChild.data;\n els[i].removeChild(els[i].firstChild);\n var d = createTiddlyElement(null,"a",null,null,ih+this.dropdownchar,{href:"javascript:;"});\n els[i].insertBefore(d,els[i].firstChild);\n }\n else{\n link.firstChild.data = link.firstChild.data + this.dropdownchar;\n removeClass(link,"tiddlyLinkNonExisting");\n }\n }\n els[i].onmouseover = function() {\n addClass(this, "sfhover");\n };\n els[i].onmouseout = function() {\n removeClass(this, "sfhover");\n };\n }\n } \n};\n\nconfig.shadowTiddlers["StyleSheetDropDownMenuPlugin"] = \n "/*{{{*/\sn"+\n "/***** LAYOUT STYLES - DO NOT EDIT! *****/\sn"+\n "ul.suckerfish, ul.suckerfish ul {\sn"+\n " margin: 0;\sn"+\n " padding: 0;\sn"+\n " list-style: none;\sn"+\n " line-height:1.4em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish li {\sn"+\n " display: inline-block; \sn"+\n " display: block;\sn"+\n " float: left; \sn"+\n "}\sn\sn"+\n "ul.suckerfish li ul {\sn"+\n " position: absolute;\sn"+\n " left: -999em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish li:hover ul, ul.suckerfish li.sfhover ul {\sn"+\n " left: auto;\sn"+\n "}\sn\sn"+\n "ul.suckerfish ul li {\sn"+\n " float: none;\sn"+\n " border-right: 0;\sn"+\n " border-left:0;\sn"+\n "}\sn\sn"+\n "ul.suckerfish a, ul.suckerfish a:hover {\sn"+\n " display: block;\sn"+\n "}\sn\sn"+\n "ul.suckerfish li a.tiddlyLink, ul.suckerfish li a, #mainMenu ul.suckerfish li a {font-weight:bold;}\sn"+\n "/**** END LAYOUT STYLES *****/\sn"+\n "\sn\sn"+\n "/**** COLORS AND APPEARANCE - DEFAULT *****/\sn"+\n "ul.suckerfish li a {\sn"+\n " padding: 0.5em 1.5em;\sn"+\n " color: #FFF;\sn"+\n " background: #0066aa;\sn"+\n " border-bottom: 0;\sn"+\n " font-weight:bold;\sn"+\n "}\sn\sn"+\n "ul.suckerfish li:hover a, ul.suckerfish li.sfhover a{\sn"+\n " background: #00558F;\sn"+\n "}\sn\sn"+\n "ul.suckerfish li:hover ul a, ul.suckerfish li.sfhover ul a{\sn"+\n " color: #000;\sn"+\n " background: #eff3fa;\sn"+\n " border-top:1px solid #FFF;\sn"+\n "}\sn\sn"+\n "ul.suckerfish ul li a:hover {\sn"+\n " background: #e0e8f5;\sn"+\n "}\sn\sn"+\n "ul.suckerfish li a{\sn"+\n " width:9em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish ul li a, ul.suckerfish ul li a:hover{\sn"+\n " display:inline-block;\sn"+\n " width:9em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish li {\sn"+\n " border-left: 1px solid #00558F;\sn"+\n "}\sn"+\n "/***** END COLORS AND APPEARANCE - DEFAULT *****/\sn"+\n "\sn\sn"+\n "/***** LAYOUT AND APPEARANCE: VERTICAL *****/\sn"+\n "ul.suckerfish.vertical li{\sn"+\n " width:10em;\sn"+\n " border-left: 0px solid #00558f;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical ul li, ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a {\sn"+\n " border-left: 0.8em solid #00558f;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a, ul.suckerfish.vertical li.sfhover a:hover{\sn"+\n " width:8em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical {\sn"+\n " width:10em; text-align:left;\sn"+\n " float:left;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical li a {\sn"+\n " padding: 0.5em 1em 0.5em 1em;\sn"+\n " border-top:1px solid #fff;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical, ul.suckerfish.vertical ul {\sn"+\n " line-height:1.4em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical li:hover ul, ul.suckerfish.vertical li.sfhover ul { \sn"+\n " margin: -2.4em 0 0 10.9em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical li:hover ul li a, ul.suckerfish.vertical li.sfhover ul li a {\sn"+\n " border: 0px solid #FFF;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a{\sn"+\n " padding-right:1.1em;\sn"+\n "}\sn\sn"+\n "ul.suckerfish.vertical li:hover ul li, ul.suckerfish.vertical li.sfhover ul li {\sn"+\n " border-bottom:1px solid #fff;\sn"+\n "}\sn\sn"+\n "/***** END LAYOUT AND APPEARANCE: VERTICAL *****/\sn"+\n "/*}}}*/";\nstore.addNotification("StyleSheetDropDownMenuPlugin",refreshStyles);\n//!END-PLUGIN-CODE\n// %/
Connecticut Archives Online
/***\n|Name|TaggedTemplateTweak|\n|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|\n|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|\n|Version|1.6.1|\n|Author|Eric Shulman|\n|License|http://www.TiddlyTools.com/#LegalStatements|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Description|use alternative ViewTemplate/EditTemplate for specific tiddlers|\nThis plugin extends the core function, story.chooseTemplateForTiddler(), so that any given tiddler can be viewed and/or edited using alternatives to the standard tiddler templates.\n!!!!!Documentation\n>see [[TaggedTemplateTweakInfo]]\n!!!!!Revisions\n<<<\n2009.09.02 [1.6.1] apply field-based template (if any) *before* tag-based template\n| please see [[TaggedTemplateTweakInfo]] for previous revision details |\n2007.06.11 [1.0.0] initial release\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.TaggedTemplateTweak= {major: 1, minor: 6, revision: 1, date: new Date(2009,9,2)};\n\nif (!config.options.txtTemplateTweakFieldname) \n config.options.txtTemplateTweakFieldname='template';\n\nStory.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler\nStory.prototype.chooseTemplateForTiddler = function(title,template)\n{\n // get core template and split into theme and template name\n var coreTemplate=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);\n var theme=""; var template=coreTemplate;\n var parts=template.split(config.textPrimitives.sectionSeparator);\n if (parts[1]) { theme=parts[0]; template=parts[1]; }\n else theme=config.options.txtTheme||""; // if theme is not specified\n theme+=config.textPrimitives.sectionSeparator;\n\n // look for template using title as prefix\n if (!store.getTaggedTiddlers(title).length) { // if tiddler is not a tag\n if (store.getTiddlerText(theme+title+template))\n { return theme+title+template; } // theme##TitleTemplate\n if (store.getTiddlerText(title+template))\n { return title+template; } // TitleTemplate\n }\n\n // look for templates using custom field value as prefix\n var v=store.getValue(title,config.options.txtTemplateTweakFieldname);\n if (store.getTiddlerText(theme+v+template))\n { return theme+v+template; } // theme##valueTemplate\n if (store.getTiddlerText(v+template))\n { return v+template; } // valueTemplate\n\n // look for template using tags as prefix\n var tiddler=store.getTiddler(title);\n if (!tiddler) return coreTemplate; // tiddler doesn't exist... use core result\n for (i=0; i<tiddler.tags.length; i++) {\n var t=tiddler.tags[i]+template; // add tag prefix to template\n var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title\n if (store.getTiddlerText(theme+t)) { return theme+t; } // theme##tagTemplate\n if (store.getTiddlerText(theme+c)) { return theme+c; } // theme##TagTemplate\n if (store.getTiddlerText(t)) { return t; } // tagTemplate\n if (store.getTiddlerText(c)) { return c; } // TagTemplate\n }\n \n // no match... use core result\n return coreTemplate;\n}\n//}}}
http://connecticuthistory.org/happy-birthday-connecticut-archives-online/
http://www.ctconservationconnection.org
/***\n|''Name:''|IntelliTaggerPlugin|\n|''Version:''|1.0.2 (2007-07-25)|\n|''Type:''|plugin|\n|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|\n|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|\n|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|\n|''~SourceCode:''|[[IntelliTaggerPlugin SourceCode]]|\n|''Licence:''|[[BSD open source license (abego Software)]]|\n|''~CoreVersion:''|2.0.8|\n|''Browser:''|Firefox 1.5.0.2 or better|\n***/\n/***\n!Version History\n* 1.0.2 (2007-07-25): \n** Feature: "Return" key may be used to accept first tag suggestion (beside "Alt-1")\n** Bugfix: Keyboard shortcuts (Alt+3 etc.) shifted\n* 1.0.1 (2007-05-18): Improvement: Speedup when using TiddlyWikis with many tags\n* 1.0.0 (2006-04-26): Initial release\n\n***/\n// /%\nif(!version.extensions.IntelliTaggerPlugin){if(!window.abego){window.abego={};}if(!abego.internal){abego.internal={};}abego.alertAndThrow=function(s){alert(s);throw s;};if(version.major<2){abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");}version.extensions.IntelliTaggerPlugin={major:1,minor:0,revision:2,date:new Date(2007,6,25),type:"plugin",source:"http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",documentation:"[[IntelliTaggerPlugin Documentation]]",sourcecode:"[[IntelliTaggerPlugin SourceCode]]",author:"Udo Borkowski (ub [at] abego-software [dot] de)",licence:"[[BSD open source license (abego Software)]]",tiddlywiki:"Version 2.0.8 or better",browser:"Firefox 1.5.0.2 or better"};abego.createEllipsis=function(_2){var e=createTiddlyElement(_2,"span");e.innerHTML="&hellip;";};abego.isPopupOpen=function(_4){return _4&&_4.parentNode==document.body;};abego.openAsPopup=function(_5){if(_5.parentNode!=document.body){document.body.appendChild(_5);}};abego.closePopup=function(_6){if(abego.isPopupOpen(_6)){document.body.removeChild(_6);}};abego.getWindowRect=function(){return {left:findScrollX(),top:findScrollY(),height:findWindowHeight(),width:findWindowWidth()};};abego.moveElement=function(_7,_8,_9){_7.style.left=_8+"px";_7.style.top=_9+"px";};abego.centerOnWindow=function(_a){if(_a.style.position!="absolute"){throw "abego.centerOnWindow: element must have absolute position";}var _b=abego.getWindowRect();abego.moveElement(_a,_b.left+(_b.width-_a.offsetWidth)/2,_b.top+(_b.height-_a.offsetHeight)/2);};abego.isDescendantOrSelf=function(_c,e){while(e){if(_c==e){return true;}e=e.parentNode;}return false;};abego.toSet=function(_e){var _f={};for(var i=0;i<_e.length;i++){_f[_e[i]]=true;}return _f;};abego.filterStrings=function(_11,_12,_13){var _14=[];for(var i=0;i<_11.length&&(_13===undefined||_14.length<_13);i++){var s=_11[i];if(s.match(_12)){_14.push(s);}}return _14;};abego.arraysAreEqual=function(a,b){if(!a){return !b;}if(!b){return false;}var n=a.length;if(n!=b.length){return false;}for(var i=0;i<n;i++){if(a[i]!=b[i]){return false;}}return true;};abego.moveBelowAndClip=function(_1b,_1c){if(!_1c){return;}var _1d=findPosX(_1c);var _1e=findPosY(_1c);var _1f=_1c.offsetHeight;var _20=_1d;var _21=_1e+_1f;var _22=findWindowWidth();if(_22<_1b.offsetWidth){_1b.style.width=(_22-100)+"px";}var _23=_1b.offsetWidth;if(_20+_23>_22){_20=_22-_23-30;}if(_20<0){_20=0;}_1b.style.left=_20+"px";_1b.style.top=_21+"px";_1b.style.display="block";};abego.compareStrings=function(a,b){return (a==b)?0:(a<b)?-1:1;};abego.sortIgnoreCase=function(arr){var _27=[];var n=arr.length;for(var i=0;i<n;i++){var s=arr[i];_27.push([s.toString().toLowerCase(),s]);}_27.sort(function(a,b){return (a[0]==b[0])?0:(a[0]<b[0])?-1:1;});for(i=0;i<n;i++){arr[i]=_27[i][1];}};abego.getTiddlerField=function(_2d,_2e,_2f){var _30=document.getElementById(_2d.idPrefix+_2e);var e=null;if(_30!=null){var _32=_30.getElementsByTagName("*");for(var t=0;t<_32.length;t++){var c=_32[t];if(c.tagName.toLowerCase()=="input"||c.tagName.toLowerCase()=="textarea"){if(!e){e=c;}if(c.getAttribute("edit")==_2f){e=c;}}}}return e;};abego.setRange=function(_35,_36,end){if(_35.setSelectionRange){_35.setSelectionRange(_36,end);var max=0+_35.scrollHeight;var len=_35.textLength;var top=max*_36/len,bot=max*end/len;_35.scrollTop=Math.min(top,(bot+top-_35.clientHeight)/2);}else{if(_35.createTextRange!=undefined){var _3b=_35.createTextRange();_3b.collapse();_3b.moveEnd("character",end);_3b.moveStart("character",_36);_3b.select();}else{_35.select();}}};abego.internal.TagManager=function(){var _3c=null;var _3d=function(){if(_3c){return;}_3c={};store.forEachTiddler(function(_3e,_3f){for(var i=0;i<_3f.tags.length;i++){var tag=_3f.tags[i];var _42=_3c[tag];if(!_42){_42=_3c[tag]={count:0,tiddlers:{}};}_42.tiddlers[_3f.title]=true;_42.count+=1;}});};var _43=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_44,_45,_46,_47,_48,_49){var _4a=this.fetchTiddler(_44);var _4b=_4a?_4a.tags:[];var _4c=(typeof _49=="string")?_49.readBracketedList():_49;_43.apply(this,arguments);if(!abego.arraysAreEqual(_4b,_4c)){abego.internal.getTagManager().reset();}};var _4d=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_4e){var _4f=this.fetchTiddler(_4e);var _50=_4f&&_4f.tags.length>0;_4d.apply(this,arguments);if(_50){abego.internal.getTagManager().reset();}};this.reset=function(){_3c=null;};this.getTiddlersWithTag=function(tag){_3d();var _52=_3c[tag];return _52?_52.tiddlers:null;};this.getAllTags=function(_53){_3d();var _54=[];for(var i in _3c){_54.push(i);}for(i=0;_53&&i<_53.length;i++){_54.pushUnique(_53[i],true);}abego.sortIgnoreCase(_54);return _54;};this.getTagInfos=function(){_3d();var _56=[];for(var _57 in _3c){_56.push([_57,_3c[_57]]);}return _56;};var _58=function(a,b){var a1=a[1];var b1=b[1];var d=b[1].count-a[1].count;return d!=0?d:abego.compareStrings(a[0].toLowerCase(),b[0].toLowerCase());};this.getSortedTagInfos=function(){_3d();var _5e=this.getTagInfos();_5e.sort(_58);return _5e;};this.getPartnerRankedTags=function(_5f){var _60={};for(var i=0;i<_5f.length;i++){var _62=this.getTiddlersWithTag(_5f[i]);for(var _63 in _62){var _64=store.getTiddler(_63);if(!(_64 instanceof Tiddler)){continue;}for(var j=0;j<_64.tags.length;j++){var tag=_64.tags[j];var c=_60[tag];_60[tag]=c?c+1:1;}}}var _68=abego.toSet(_5f);var _69=[];for(var n in _60){if(!_68[n]){_69.push(n);}}_69.sort(function(a,b){var d=_60[b]-_60[a];return d!=0?d:abego.compareStrings(a.toLowerCase(),b.toLowerCase());});return _69;};};abego.internal.getTagManager=function(){if(!abego.internal.gTagManager){abego.internal.gTagManager=new abego.internal.TagManager();}return abego.internal.gTagManager;};(function(){var _6e=2;var _6f=1;var _70=30;var _71;var _72;var _73;var _74;var _75;var _76;if(!abego.IntelliTagger){abego.IntelliTagger={};}var _77=function(){return _72;};var _78=function(tag){return _75[tag];};var _7a=function(s){var i=s.lastIndexOf(" ");return (i>=0)?s.substr(0,i):"";};var _7d=function(_7e){var s=_7e.value;var len=s.length;return (len>0&&s[len-1]!=" ");};var _81=function(_82){var s=_82.value;var len=s.length;if(len>0&&s[len-1]!=" "){_82.value+=" ";}};var _85=function(tag,_87,_88){if(_7d(_87)){_87.value=_7a(_87.value);}story.setTiddlerTag(_88.title,tag,0);_81(_87);abego.IntelliTagger.assistTagging(_87,_88);};var _89=function(n){if(_76&&_76.length>n){return _76[n];}return (_74&&_74.length>n)?_74[n]:null;};var _8b=function(n,_8d,_8e){var _8f=_89(n);if(_8f){_85(_8f,_8d,_8e);}};var _90=function(_91){var pos=_91.value.lastIndexOf(" ");var _93=(pos>=0)?_91.value.substr(++pos,_91.value.length):_91.value;return new RegExp(_93.escapeRegExp(),"i");};var _94=function(_95,_96){var _97=0;for(var i=0;i<_95.length;i++){if(_96[_95[i]]){_97++;}}return _97;};var _99=function(_9a,_9b,_9c){var _9d=1;var c=_9a[_9b];for(var i=_9b+1;i<_9a.length;i++){if(_9a[i][1].count==c){if(_9a[i][0].match(_9c)){_9d++;}}else{break;}}return _9d;};var _a0=function(_a1,_a2){var _a3=abego.internal.getTagManager().getSortedTagInfos();var _a4=[];var _a5=0;for(var i=0;i<_a3.length;i++){var c=_a3[i][1].count;if(c!=_a5){if(_a2&&(_a4.length+_99(_a3,i,_a1)>_a2)){break;}_a5=c;}if(c==1){break;}var s=_a3[i][0];if(s.match(_a1)){_a4.push(s);}}return _a4;};var _a9=function(_aa,_ab){return abego.filterStrings(abego.internal.getTagManager().getAllTags(_ab),_aa);};var _ac=function(){if(!_71){return;}var _ad=store.getTiddlerText("IntelliTaggerMainTemplate");if(!_ad){_ad="<b>Tiddler IntelliTaggerMainTemplate not found</b>";}_71.innerHTML=_ad;applyHtmlMacros(_71,null);refreshElements(_71,null);};var _ae=function(e){if(!e){var e=window.event;}var tag=this.getAttribute("tag");if(_73){_73.call(this,tag,e);}return false;};var _b2=function(_b3){createTiddlyElement(_b3,"span",null,"tagSeparator"," | ");};var _b4=function(_b5,_b6,_b7,_b8,_b9){if(!_b6){return;}var _ba=_b8?abego.toSet(_b8):{};var n=_b6.length;var c=0;for(var i=0;i<n;i++){var tag=_b6[i];if(_ba[tag]){continue;}if(c>0){_b2(_b5);}if(_b9&&c>=_b9){abego.createEllipsis(_b5);break;}c++;var _bf="";var _c0=_b5;if(_b7<10){_c0=createTiddlyElement(_b5,"span",null,"numberedSuggestion");_b7++;var key=_b7<10?""+(_b7):"0";createTiddlyElement(_c0,"span",null,"suggestionNumber",key+") ");var _c2=_b7==1?"Return or ":"";_bf=" (Shortcut: %1Alt-%0)".format([key,_c2]);}var _c3=config.views.wikified.tag.tooltip.format([tag]);var _c4=(_78(tag)?"Remove tag '%0'%1":"Add tag '%0'%1").format([tag,_bf]);var _c5="%0; Shift-Click: %1".format([_c4,_c3]);var btn=createTiddlyButton(_c0,tag,_c5,_ae,_78(tag)?"currentTag":null);btn.setAttribute("tag",tag);}};var _c7=function(){if(_71){window.scrollTo(0,ensureVisible(_71));}if(_77()){window.scrollTo(0,ensureVisible(_77()));}};var _c8=function(e){if(!e){var e=window.event;}if(!_71){return;}var _cb=resolveTarget(e);if(_cb==_77()){return;}if(abego.isDescendantOrSelf(_71,_cb)){return;}abego.IntelliTagger.close();};addEvent(document,"click",_c8);var _cc=Story.prototype.gatherSaveFields;Story.prototype.gatherSaveFields=function(e,_ce){_cc.apply(this,arguments);var _cf=_ce.tags;if(_cf){_ce.tags=_cf.trim();}};var _d0=function(_d1){story.focusTiddler(_d1,"tags");var _d2=abego.getTiddlerField(story,_d1,"tags");if(_d2){var len=_d2.value.length;abego.setRange(_d2,len,len);window.scrollTo(0,ensureVisible(_d2));}};var _d4=config.macros.edit.handler;config.macros.edit.handler=function(_d5,_d6,_d7,_d8,_d9,_da){_d4.apply(this,arguments);var _db=_d7[0];if((_da instanceof Tiddler)&&_db=="tags"){var _dc=_d5.lastChild;_dc.onfocus=function(e){abego.IntelliTagger.assistTagging(_dc,_da);setTimeout(function(){_d0(_da.title);},100);};_dc.onkeyup=function(e){if(!e){var e=window.event;}if(e.altKey&&!e.ctrlKey&&!e.metaKey&&(e.keyCode>=48&&e.keyCode<=57)){_8b(e.keyCode==48?9:e.keyCode-49,_dc,_da);}else{if(e.ctrlKey&&e.keyCode==32){_8b(0,_dc,_da);}}if(!e.ctrlKey&&(e.keyCode==13||e.keyCode==10)){_8b(0,_dc,_da);}setTimeout(function(){abego.IntelliTagger.assistTagging(_dc,_da);},100);return false;};_81(_dc);}};var _e0=function(e){if(!e){var e=window.event;}var _e3=resolveTarget(e);var _e4=_e3.getAttribute("tiddler");if(_e4){story.displayTiddler(_e3,_e4,"IntelliTaggerEditTagsTemplate",false);_d0(_e4);}return false;};var _e5=config.macros.tags.handler;config.macros.tags.handler=function(_e6,_e7,_e8,_e9,_ea,_eb){_e5.apply(this,arguments);abego.IntelliTagger.createEditTagsButton(_eb,createTiddlyElement(_e6.lastChild,"li"));};var _ec=function(){if(_71&&_72&&!abego.isDescendantOrSelf(document,_72)){abego.IntelliTagger.close();}};setInterval(_ec,100);abego.IntelliTagger.displayTagSuggestions=function(_ed,_ee,_ef,_f0,_f1){_74=_ed;_75=abego.toSet(_ee);_76=_ef;_72=_f0;_73=_f1;if(!_71){_71=createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");_71.style.position="absolute";}_ac();abego.openAsPopup(_71);if(_77()){var w=_77().offsetWidth;if(_71.offsetWidth<w){_71.style.width=(w-2*(_6e+_6f))+"px";}abego.moveBelowAndClip(_71,_77());}else{abego.centerOnWindow(_71);}_c7();};abego.IntelliTagger.assistTagging=function(_f3,_f4){var _f5=_90(_f3);var s=_f3.value;if(_7d(_f3)){s=_7a(s);}var _f7=s.readBracketedList();var _f8=_f7.length>0?abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(_f7),_f5,_70):_a0(_f5,_70);abego.IntelliTagger.displayTagSuggestions(_a9(_f5,_f7),_f7,_f8,_f3,function(tag,e){if(e.shiftKey){onClickTag.call(this,e);}else{_85(tag,_f3,_f4);}});};abego.IntelliTagger.close=function(){abego.closePopup(_71);_71=null;return false;};abego.IntelliTagger.createEditTagsButton=function(_fb,_fc,_fd,_fe,_ff,id,_101){if(!_fd){_fd="[edit]";}if(!_fe){_fe="Edit the tags";}if(!_ff){_ff="editTags";}var _102=createTiddlyButton(_fc,_fd,_fe,_e0,_ff,id,_101);_102.setAttribute("tiddler",(_fb instanceof Tiddler)?_fb.title:String(_fb));return _102;};abego.IntelliTagger.getSuggestionTagsMaxCount=function(){return 100;};config.macros.intelliTagger={label:"intelliTagger",handler:function(_103,_104,_105,_106,_107,_108){var _109=_107.parseParams("list",null,true);var _10a=_109[0]["action"];for(var i=0;_10a&&i<_10a.length;i++){var _10c=_10a[i];var _10d=config.macros.intelliTagger.subhandlers[_10c];if(!_10d){abego.alertAndThrow("Unsupported action '%0'".format([_10c]));}_10d(_103,_104,_105,_106,_107,_108);}},subhandlers:{showTags:function(_10e,_10f,_110,_111,_112,_113){_b4(_10e,_74,_76?_76.length:0,_76,abego.IntelliTagger.getSuggestionTagsMaxCount());},showFavorites:function(_114,_115,_116,_117,_118,_119){_b4(_114,_76,0);},closeButton:function(_11a,_11b,_11c,_11d,_11e,_11f){var _120=createTiddlyButton(_11a,"close","Close the suggestions",abego.IntelliTagger.close);},version:function(_121){var t="IntelliTagger %0.%1.%2".format([version.extensions.IntelliTaggerPlugin.major,version.extensions.IntelliTaggerPlugin.minor,version.extensions.IntelliTaggerPlugin.revision]);var e=createTiddlyElement(_121,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");e.innerHTML="<font color=\s"black\s" face=\s"Arial, Helvetica, sans-serif\s">"+t+"<font>";},copyright:function(_124){var e=createTiddlyElement(_124,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de");e.innerHTML="<font color=\s"black\s" face=\s"Arial, Helvetica, sans-serif\s">&copy; 2006-2007 <b><font color=\s"red\s">abego</font></b> Software<font>";}}};})();config.shadowTiddlers["IntelliTaggerStyleSheet"]="/***\sn"+"!~IntelliTagger Stylesheet\sn"+"***/\sn"+"/*{{{*/\sn"+".intelliTaggerSuggestions {\sn"+"\stposition: absolute;\sn"+"\stwidth: 600px;\sn"+"\sn"+"\stpadding: 2px;\sn"+"\stlist-style: none;\sn"+"\stmargin: 0;\sn"+"\sn"+"\stbackground: #eeeeee;\sn"+"\stborder: 1px solid DarkGray;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .currentTag {\sn"+"\stfont-weight: bold;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .suggestionNumber {\sn"+"\stcolor: #808080;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .numberedSuggestion{\sn"+"\stwhite-space: nowrap;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .intelliTaggerFooter {\sn"+"\stmargin-top: 4px;\sn"+"\stborder-top-width: thin;\sn"+"\stborder-top-style: solid;\sn"+"\stborder-top-color: #999999;\sn"+"}\sn"+".intelliTaggerSuggestions .favorites {\sn"+"\stborder-bottom-width: thin;\sn"+"\stborder-bottom-style: solid;\sn"+"\stborder-bottom-color: #999999;\sn"+"\stpadding-bottom: 2px;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .normalTags {\sn"+"\stpadding-top: 2px;\sn"+"}\sn"+"\sn"+".intelliTaggerSuggestions .intelliTaggerFooter .button {\sn"+"\stfont-size: 10px;\sn"+"\sn"+"\stpadding-left: 0.3em;\sn"+"\stpadding-right: 0.3em;\sn"+"}\sn"+"\sn"+"/*}}}*/\sn";config.shadowTiddlers["IntelliTaggerMainTemplate"]="<!--\sn"+"{{{\sn"+"-->\sn"+"<div class=\s"favorites\s" macro=\s"intelliTagger action: showFavorites\s"></div>\sn"+"<div class=\s"normalTags\s" macro=\s"intelliTagger action: showTags\s"></div>\sn"+"<!-- The Footer (with the Navigation) ============================================ -->\sn"+"<table class=\s"intelliTaggerFooter\s" border=\s"0\s" width=\s"100%\s" cellspacing=\s"0\s" cellpadding=\s"0\s"><tbody>\sn"+" <tr>\sn"+"\st<td align=\s"left\s">\sn"+"\st\st<span macro=\s"intelliTagger action: closeButton\s"></span>\sn"+"\st</td>\sn"+"\st<td align=\s"right\s">\sn"+"\st\st<span macro=\s"intelliTagger action: version\s"></span>, <span macro=\s"intelliTagger action: copyright \s"></span>\sn"+"\st</td>\sn"+" </tr>\sn"+"</tbody></table>\sn"+"<!--\sn"+"}}}\sn"+"-->\sn";config.shadowTiddlers["IntelliTaggerEditTagsTemplate"]="<!--\sn"+"{{{\sn"+"-->\sn"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\sn"+"<div class='title' macro='view title'></div>\sn"+"<div class='tagged' macro='tags'></div>\sn"+"<div class='viewer' macro='view text wikified'></div>\sn"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\sn"+"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\sn"+"<!--\sn"+"}}}\sn"+"-->\sn";config.shadowTiddlers["BSD open source license (abego Software)"]="See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";config.shadowTiddlers["IntelliTaggerPlugin Documentation"]="[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";config.shadowTiddlers["IntelliTaggerPlugin SourceCode"]="[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/archive/IntelliTaggerPlugin/Plugin-IntelliTagger-src.1.0.2.js]]\sn";(function(){var _126=restart;restart=function(){setStylesheet(store.getTiddlerText("IntelliTaggerStyleSheet"),"IntelliTaggerStyleSheet");_126.apply(this,arguments);};})();}\n// %/\n
The entity {{{&nbsp;}}} while valid in HTML is not valid in XML. This entity was found in the following files from the State Library: \n\nRG028_005.xml\nRG074_001.xml\nRG074-035.xml\nRG074-036.xml\nRG074-061.xml\nRG074-064.xml\n\nBecause these files are just for indexing (not display) I replace the non break space with {{{&#xA0;}}} , the XML version. \n\nAfter talking with Brian Stevens, it appears that if you are using the DTD and the ent.zip (// see [[Using Diacritics and Accented Characters]] page for more information//) file that is associated with it, this entity is defined in those files. It's only when I go to index it (without using those files) that it comes up invalid. This could be a problem for all character entities in use. We need to think about this a determine if it is a real problem. \n\n\n\n\n
Interesting Open Source Project\n"Providing access to memory since 2007\nAtoM stands for Access to Memory. It is a web-based, open source application for standards-based archival description and access in a multilingual, multi-repository environment." https://www.accesstomemory.org/en/
//{{{\nconfig.formatters.unshift( {\n name: "inlinetabs",\n match: "\s\s<tabs",\n lookaheadRegExp: /(?:<tabs (.*)>\sn)((?:.|\sn)*?)(?:\sn<\s/tabs>)/mg,\n handler: function(w)\n {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var cookie = lookaheadMatch[1];\n var wrapper = createTiddlyElement(null,"div",null,cookie);\n var tabset = createTiddlyElement(wrapper,"div",null,"tabset");\n tabset.setAttribute("cookie",cookie);\n var validTab = false;\n var firstTab = '';\n var tabregexp = /(?:<tab (.*)>)(?:(?:\sn)?)((?:.|\sn)*?)(?:<\s/tab>)/mg;\n while((m = tabregexp.exec(lookaheadMatch[2])) != null)\n {\n if (firstTab == '') firstTab = m[1];\n var tab = createTiddlyButton(tabset,m[1],m[1],story.onClickInlineTab,"tab tabUnselected");\n tab.setAttribute("tab",m[1]);\n tab.setAttribute("content",m[2]);\n tab.title = m[1];\n if(config.options[cookie] == m[1])\n validTab = true;\n }\n if(!validTab)\n config.options[cookie] = firstTab;\n w.output.appendChild(wrapper);\n story.switchInlineTab(tabset,config.options[cookie]);\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n }\n})\n\nStory.prototype.switchInlineTab = function(tabset,tab)\n{\n var cookie = tabset.getAttribute("cookie");\n var theTab = null\n var nodes = tabset.childNodes;\n for(var t=0; t<nodes.length; t++)\n if(nodes[t].getAttribute && nodes[t].getAttribute("tab") == tab)\n {\n theTab = nodes[t];\n theTab.className = "tab tabSelected";\n }\n else\n nodes[t].className = "tab tabUnselected"\n if(theTab)\n {\n if(tabset.nextSibling && tabset.nextSibling.className == "tabContents")\n tabset.parentNode.removeChild(tabset.nextSibling);\n var tabContent = createTiddlyElement(null,"div",null,"tabContents");\n tabset.parentNode.insertBefore(tabContent,tabset.nextSibling);\n wikify(theTab.getAttribute("content"),tabContent);\n if(cookie)\n {\n config.options[cookie] = tab;\n saveOptionCookie(cookie);\n }\n }\n}\n \nStory.prototype.onClickInlineTab = function(e)\n{\n story.switchInlineTab(this.parentNode,this.getAttribute("tab"));\n return false;\n}\n//}}}
''NOTE:'' WebDav which was utilized for creating Network Folders has compatibility issues with later Windows 7 and beyond machines. For now, if you are having trouble with your network folder, please contact [[Brian stevens|mailto:stevensb@wcsu.edu]] and we can work out a file sharing solution.\n\nOne workaround is to download a free file transfer client: we've used Cyberduck with success. [link to download|https://cyberduck.io/?l=en]\n\nDirections using Cyberduck be found here [[To transfer EAD files into your CAO folder - Cyberduck software instructions]]\n\n-\n\nThe CAO can index your files as soon as you drop them on our server. You do this by creating a network drop folder on your local machine that can connect to us. \n\nThe CAO administrators will provide you with a login and password for your drop folder after you submit your [[Application Form]].\n\nWhen you are ready to create a network or drop folder on your machine, follow the directions below:\n\n!!WINDOWS 7:\ndownload the piece to Windows that allows the creation of what they used to call a "Network Place" or a Web Dav folder.\nhttp://www.microsoft.com/downloads/details.aspx?FamilyId=17C36612-632E-4C04-9382-987622ED1D64.\n\nWith this installed...\n\n1. From the Windows Start menu, click Computer. \n2. Within the Computer window that appears, click Map network drive. \n3. Then click the link "Connect to a Web site that you can use to store your documents and pictures"\n4. Point to: http://library.wcsu.edu:80/dav/cao/[myFolderName]/\nYou will get prompted 3 times for user name and pw... \n5. Drag the shortcut to the desktop\n\n\n\n!!PRE WINDOWS 7:\nTo create your networked or drop folder (using Windows):\n\n* from the "Start" menu, choose "my networked places";\n* choose "add a network place" (left-hand menu);\n* hit the "next" button to use the wizard\n* choose another network location;\n* enter "http://library.wcsu.edu:80/dav/cao/" plus "ccsu, ecsu, scsu, statelib, uconn, etc. " in the box and then hit next - this directory name will be provided to you by the CAO administrator;\n* use the username (your name) and password (your password);\n* give this folder a reasonable name like CAO Drop so that it is easy to remember what it is.\n* it will tell you that it "Completed". Uncheck the box "open when I click finish."\n* click finish\n* click on the new folder and login with username and password\n* you should see a README file\n\nWhen you're ready to add your files simple drag them to this folder. Files are indexed every day. To remove a file or replace it just drag it out of this folder or replace it with a new version. \n\n*[[Here's a movie to show you how...|http://library.wcsu.edu/dav/cao/images/caoNetworkPlace.mp4]]\n\n\nPlease contact stevensb@wcsu.edu if there is an issue.
/***\n|Name|ImageSizePlugin|\n|Source|http://www.TiddlyTools.com/#ImageSizePlugin|\n|Version|1.2.1|\n|Author|Eric Shulman|\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,formatter|\n|Requires||\n|Overrides|'image' formatter|\n|Description|adds support for resizing images|\nThis plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.\n!!!!!Usage\n<<<\nThe extended image syntax is:\n{{{\n[img(w+,h+)[...][...]]\n}}}\nwhere ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).\n<<<\n!!!!!Examples\n<<<\n{{{\n[img(100px+,75px+)[images/meow2.jpg]]\n}}}\n[img(100px+,75px+)[images/meow2.jpg]]\n{{{\n[<img(34%+,+)[images/meow.gif]]\n[<img(21% ,+)[images/meow.gif]]\n[<img(13%+, )[images/meow.gif]]\n[<img( 8%+, )[images/meow.gif]]\n[<img( 5% , )[images/meow.gif]]\n[<img( 3% , )[images/meow.gif]]\n[<img( 2% , )[images/meow.gif]]\n[img( 1%+,+)[images/meow.gif]]\n}}}\n[<img(34%+,+)[images/meow.gif]]\n[<img(21% ,+)[images/meow.gif]]\n[<img(13%+, )[images/meow.gif]]\n[<img( 8%+, )[images/meow.gif]]\n[<img( 5% , )[images/meow.gif]]\n[<img( 3% , )[images/meow.gif]]\n[<img( 2% , )[images/meow.gif]]\n[img( 1%+,+)[images/meow.gif]]\n{{tagClear{\n}}}\n<<<\n!!!!!Revisions\n<<<\n2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing\n2009.02.22 [1.2.0] added stretchable images\n2008.01.19 [1.1.0] added evaluated width/height values\n2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation\n2008.01.17 [1.0.0] initial release\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};\n//}}}\n//{{{\nvar f=config.formatters[config.formatters.findByField("name","image")];\nf.match="\s\s[[<>]?[Ii][Mm][Gg](?:\s\s([^,]*,[^\s\s)]*\s\s))?\s\s[";\nf.lookaheadRegExp=/\s[([<]?)(>?)[Ii][Mm][Gg](?:\s(([^,]*),([^\s)]*)\s))?\s[(?:([^\s|\s]]+)\s|)?([^\s[\s]\s|]+)\s](?:\s[([^\s]]*)\s])?\s]/mg;\nf.handler=function(w) {\n this.lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = this.lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var floatLeft=lookaheadMatch[1];\n var floatRight=lookaheadMatch[2];\n var width=lookaheadMatch[3];\n var height=lookaheadMatch[4];\n var tooltip=lookaheadMatch[5];\n var src=lookaheadMatch[6];\n var link=lookaheadMatch[7];\n\n // Simple bracketted link\n var e = w.output;\n if(link) { // LINKED IMAGE\n if (config.formatterHelpers.isExternalLink(link)) {\n if (config.macros.attach && config.macros.attach.isAttachment(link)) {\n // see [[AttachFilePluginFormatters]]\n e = createExternalLink(w.output,link);\n e.href=config.macros.attach.getAttachment(link);\n e.title = config.macros.attach.linkTooltip + link;\n } else\n e = createExternalLink(w.output,link);\n } else \n e = createTiddlyLink(w.output,link,false,null,w.isStatic);\n addClass(e,"imageLink");\n }\n\n var img = createTiddlyElement(e,"img");\n if(floatLeft) img.align="left"; else if(floatRight) img.align="right";\n if(width||height) {\n var x=width.trim(); var y=height.trim();\n var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);\n var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);\n if (x.substr(0,2)=="{{")\n { try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }\n if (y.substr(0,2)=="{{")\n { try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }\n img.style.width=x.trim(); img.style.height=y.trim();\n config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);\n }\n if(tooltip) img.title = tooltip;\n\n // GET IMAGE SOURCE\n if (config.macros.attach && config.macros.attach.isAttachment(src))\n src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]\n else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]\n if (config.browser.isIE || config.browser.isSafari) {\n img.onerror=(function(){\n this.src=config.formatterHelpers.resolvePath(this.src,false);\n return false;\n });\n } else\n src=config.formatterHelpers.resolvePath(src,true);\n }\n img.src=src;\n w.nextMatch = this.lookaheadRegExp.lastIndex;\n }\n}\n\nconfig.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {\n e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')\n +'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';\n e.statusMsg='width=%0, height=%1';\n e.style.cursor='move';\n e.originalW=e.style.width;\n e.originalH=e.style.height;\n e.minW=Math.max(e.offsetWidth/20,10);\n e.minH=Math.max(e.offsetHeight/20,10);\n e.stretchW=stretchW;\n e.stretchH=stretchH;\n e.onmousedown=function(ev) { var ev=ev||window.event;\n this.sizing=true;\n this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());\n this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());\n this.startW=this.offsetWidth;\n this.startH=this.offsetHeight;\n return false;\n };\n e.onmousemove=function(ev) { var ev=ev||window.event;\n if (this.sizing) {\n var s=this.style;\n var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());\n var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());\n var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;\n var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;\n if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';\n if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';\n clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));\n }\n return false;\n };\n e.onmouseup=function(ev) { var ev=ev||window.event;\n if (ev.shiftKey) { this.style.width=this.style.height=''; }\n if (ev.ctrlKey) { this.style.width=this.originalW; this.style.height=this.originalH; }\n this.sizing=false;\n clearMessage();\n return false;\n };\n e.onmouseout=function(ev) { var ev=ev||window.event;\n this.sizing=false;\n clearMessage();\n return false;\n };\n}\n//}}}
1. The content of the EAD's eadid must be the same prefix as the filename of the EAD document. That is, an EAD file named "findingAid.xml" should have an eadid value of "findingAid".\n\nSee the example below for a file named: "findingAid.xml":\n{{{\n<eadid mainagencycode="US-ctdabn" \n url="http://library.wcsu.edu/web/about/units/archives/findingaids/findingAid.xml" \n identifier="RG6">findingAid</eadid>\n}}}\n\n\n2. Filenames should be lower case if possible, camelCase if necessary but filenames ARE case sensitive. Filenames should NOT contain any spaces and should be alpha-numeric (no hyphens, dollar signs, periods, ampersands, etc.)\n
<<timeline created >>
http://ctdigitalarchive.org/
The Connecticut State Library and Conservation ConneCTion was awarded a Sparks! grant from IMLS. The project, Connecticut's Archival Collections: Creating Finding Aids with Emerging Organizations, is a 2-part project that will provide access to hidden archival collections in mid-sized and small cultural heritage organizations. The first part of the project will provide training workshops and site visits to the target audience to make their archival collections accessible both onsite and online. Forty institutions will learn to create DACS and EAD compliant finding aids for their 5 most important collections. The participating institutions will be using the CAO's EAD creation template and will have their completed finding aids searchable in the CAO.
/***\n|Name|AliasPlugin|\n|Source|http://www.TiddlyTools.com/#AliasPlugin|\n|Documentation|http://www.TiddlyTools.com/#AliasPluginInfo|\n|Version|1.1.1|\n|Author|Eric Shulman|\n|License|http://www.TiddlyTools.com/#LegalStatements|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Description|Create text-substitution macros|\nDefine macros for abbreviations and other "aliases", and then embed them in the rest of your tiddler content to quickly insert common terms, phrases and links without a lot of repetitive typing.\n!!!!!Documentation\n> see [[AliasPluginInfo]]\n!!!!!Revisions\n<<<\n2009.09.09 1.1.1 'tiddler' arg passed to wikify() so aliases containing macros render with correct context\n| Please see [[AliasPluginInfo]] for previous revision details |\n2005.08.12 1.0.0 initial release\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.AliasPlugin= {major: 1, minor: 1, revision: 1, date: new Date(2009,9,9)};\nconfig.macros.alias= { };\nconfig.macros.alias.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n var alias=params.shift(); if (!alias) return; alias=alias.replace(/ /g,"_"); // don't allow spaces in alias\n if (config.macros[alias]==undefined) { // create new macro (as needed)\n config.macros[alias] = { };\n config.macros[alias].handler =\n function (place,macroName,params,wikifier,paramString,tiddler)\n { wikify(config.macros[macroName].text.format(params),place,null,tiddler); }\n }\n config.macros[alias].text = params[0]?params.join(' '):alias; // set alias text\n}\n//}}}
/***\n''NestedSlidersPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman\nsource: http://www.TiddlyTools.com/#NestedSlidersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''\n\nYou can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.\n\nFor more details, please click on a section headline below:\n++++!!!!![Configuration]>\nDebugging messages for 'lazy sliders' deferred rendering:\n<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering\n<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered\n===\n++++!!!!![Usage]>\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater (with optional CSS width value)\n*mouse auto rollover\n*custom label/tooltip/accesskey\n*automatic blockquote\n*deferred rendering\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^width^*[label=key|tooltip]>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^\nmarks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^\n* {{{(cookiename)}}}^^\nsaves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^\n* {{{!}}} through {{{!!!!!}}}^^\ndisplays the slider label using a formatted headline (Hn) style instead of a button/link style^^\n* {{{^width^}}} (or just {{{^}}})^^\nmakes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)^^\n* {{{*}}}^^\nautomatically opens/closes slider on "rollover" as well as when clicked^^\n* {{{[label=key|tooltip]}}}^^\nuses custom label/tooltip/accesskey. {{{=key}}} and {{{|tooltip}}} are optional. 'key' is must be a ''single letter only''. Default labels/tootips are: ">" (more) and "<" (less), with no default access key assignment.^^\n* {{{">"}}} //(without the quotes)//^^\nautomatically adds blockquote formatting to slider content^^\n* {{{"..."}}} //(without the quotes)//^^\ndefers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^\n\n//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//\n===\n++++!!!!![Examples]>\nsimple in-line slider: \n{{{\n+++\n content\n===\n}}}\n+++\n content\n===\n----\nuse a custom label and tooltip: \n{{{\n+++[label|tooltip]\n content\n===\n}}}\n+++[label|tooltip]\n content\n===\n----\ncontent automatically blockquoted: \n{{{\n+++>\n content\n===\n}}}\n+++>\n content\n===\n----\nall options combined //(default open, cookie, heading, sized floater, rollover, label/tooltip/key, blockquoted, deferred)//\n{{{\n++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...\n content\n===\n}}}\n++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...\n content\n===\n----\ncomplex nesting example:\n{{{\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n}}}\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n----\nnested floaters\n>menu: <<tiddler NestedSlidersExample>>\n(see [[NestedSlidersExample]] for definition)\n----\n===\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.05.11 - 1.9.0'' added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label\n''2006.05.09 - 1.8.0'' in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element\n''2006.04.24 - 1.7.8'' in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position\n''2006.02.16 - 1.7.7'' corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie\n''2006.02.15 - 1.7.6'' in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)\n''2006.02.04 - 1.7.5'' add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2006.01.18 - 1.7.4'' only define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.\n''2006.01.16 - 1.7.3'' added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.\n''2006.01.16 - 1.7.2'' added button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n''2006.01.14 - 1.7.1'' added optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.\n''2006.01.14 - 1.7.0'' added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)\n''2006.01.03 - 1.6.2'' When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)\n''2005.12.15 - 1.6.1'' added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders\nremoved checkbox option for 'global' application of lazy sliders\n''2005.11.25 - 1.6.0'' added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)\n''2005.11.21 - 1.5.1'' revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.\n''2005.11.20 - 1.5.0'' added (cookiename) syntax for optional tracking and restoring of slider open/close state\n''2005.11.11 - 1.4.0'' added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style\n''2005.11.07 - 1.3.0'' removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other\nformatting extensions) and simplified/improved regular expressions to trim multiple excess newlines\n''2005.11.05 - 1.2.1'' changed name to NestedSlidersPlugin\nmore documentation\n''2005.11.04 - 1.2.0'' added alternative character-mode syntax {{{(((}}} and {{{)))}}}\ntweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax\n''2005.11.03 - 1.1.1'' fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used\ncode cleanup, added documentation\n''2005.11.03 - 1.1.0'' changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}\nchanged name to EasySlidersPlugin\n''2005.11.03 - 1.0.0'' initial public release\n<<<\n!!!!!Credits\n<<<\nThis feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.nestedSliders = {major: 1, minor: 9, revision: 0, date: new Date(2006,5,11)};\n//}}}\n\n//{{{\n// options for deferred rendering of sliders that are not initially displayed\nif (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;\nif (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;\n\n// default styles for 'floating' class\nsetStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \s\n background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "nestedSliders",\n match: "\s\sn?\s\s+{3}",\n terminator: "\s\ss*\s\s={3}\s\sn?",\n lookahead: "\s\sn?\s\s+{3}(\s\s+)?(\s\s([^\s\s)]*\s\s))?(\s\s!*)?(\s\s^(?:[^\s\s^\s\s*\s\s[\s\s>]*\s\s^)?)?(\s\s*)?(\s\s[[^\s\s]]*\s\s])?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie, no accesskey\n var show="none"; var title=">"; var tooltip="show"; var cookie=""; var key="";\n\n // extra "+", default to open\n if (lookaheadMatch[1])\n { show="block"; title="<"; tooltip="hide"; }\n\n // cookie, use saved open/closed state\n if (lookaheadMatch[2]) {\n cookie=lookaheadMatch[2].trim().slice(1,-1);\n cookie="chkSlider"+cookie;\n if (config.options[cookie]==undefined)\n { config.options[cookie] = (show=="block") }\n if (config.options[cookie])\n { show="block"; title="<"; tooltip="hide"; }\n else\n { show="none"; title=">"; tooltip="show"; }\n }\n\n // parse custom label/tooltip/accesskey: [label=X|tooltip]\n if (lookaheadMatch[6]) {\n title = lookaheadMatch[6].trim().slice(1,-1);\n var pos=title.indexOf("|");\n if (pos!=-1) { tooltip = title.substr(pos+1,title.length); title=title.substr(0,pos); }\n if (title.substr(title.length-2,1)=="=") { key=title.substr(title.length-1,1); title=title.slice(0,-2); }\n if (pos==-1) tooltip += " "+title; // default tooltip: "show/hide <title>"\n }\n\n // create the button\n if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link\n var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;\n var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,null,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);\n btn.sliderCookie = cookie; // save the cookiename (if any) in the button object\n btn.keyparam=key; // save the access key letter ("" if none)\n if (key.length) {\n btn.setAttribute("accessKey",key); // init access key\n btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus\n }\n\n // "non-click" MouseOver open/close slider\n if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panel=createTiddlyElement(place,"div",null,panelClass,null);\n panel.style.display = show;\n if (lookaheadMatch[4] && lookaheadMatch[4].length>2) panel.style.width=lookaheadMatch[4].slice(1,-1); // custom width\n panel.button = btn; // so the slider panel know which button it belongs to\n btn.sliderPanel=panel;\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if ((show=="block")||!lookaheadMatch[8]) {\n // render now if panel is supposed to be shown or NOT deferred rendering\n w.subWikify(lookaheadMatch[7]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align slider/floater position with button\n adjustSliderPos(place,btn,panel,panelClass);\n }\n else {\n var src = w.source.substr(w.nextMatch);\n var endpos=findMatchingDelimiter(src,"+++","===");\n panel.setAttribute("raw",src.substr(0,endpos));\n panel.setAttribute("blockquote",lookaheadMatch[7]?"true":"false");\n panel.setAttribute("rendered","false");\n w.nextMatch += endpos+3;\n if (w.source.substr(w.nextMatch,1)=="\sn") w.nextMatch++;\n if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\sn\sn"+panel.getAttribute("raw"));\n }\n }\n }\n }\n)\n\n// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)\nfunction findMatchingDelimiter(src,starttext,endtext) {\n var startpos = 0;\n var endpos = src.indexOf(endtext);\n // check for nested delimiters\n while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {\n // count number of nested 'starts'\n var startcount=0;\n var temp = src.substring(startpos,endpos-1);\n var pos=temp.indexOf(starttext);\n while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }\n // set up to check for additional 'starts' after adjusting endpos\n startpos=endpos+endtext.length;\n // find endpos for corresponding number of matching 'ends'\n while (startcount && endpos!=-1) {\n endpos = src.indexOf(endtext,endpos+endtext.length);\n startcount--;\n }\n }\n return (endpos==-1)?src.length:endpos;\n}\n//}}}\n\n//{{{\nwindow.onClickNestedSlider=function(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLabel = theTarget.firstChild.data;\n var theSlider = theTarget.sliderPanel\n var isOpen = theSlider.style.display!="none";\n // if using default button labels, toggle labels\n if (theLabel==">") theTarget.firstChild.data = "<";\n else if (theLabel=="<") theTarget.firstChild.data = ">";\n // if using default tooltips, toggle tooltips\n if (theTarget.getAttribute("title")=="show")\n theTarget.setAttribute("title","hide");\n else if (theTarget.getAttribute("title")=="hide")\n theTarget.setAttribute("title","show");\n if (theTarget.getAttribute("title")=="show "+theLabel)\n theTarget.setAttribute("title","hide "+theLabel);\n else if (theTarget.getAttribute("title")=="hide "+theLabel)\n theTarget.setAttribute("title","show "+theLabel);\n // deferred rendering (if needed)\n if (theSlider.getAttribute("rendered")=="false") {\n if (config.options.chkDebugLazySliderRender)\n alert("rendering '"+theLabel+"':\sn\sn"+theSlider.getAttribute("raw"));\n var place=theSlider;\n if (theSlider.getAttribute("blockquote")=="true")\n place=createTiddlyElement(place,"blockquote");\n wikify(theSlider.getAttribute("raw"),place);\n theSlider.setAttribute("rendered","true");\n }\n // show/hide the slider\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n theSlider.style.display = isOpen ? "none" : "block";\n // 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" || t=="textarea" || t=="select")\n { ctrls[c].focus(); break; }\n }\n }\n if (this.sliderCookie && this.sliderCookie.length)\n { config.options[this.sliderCookie]=!isOpen; saveOptionCookie(this.sliderCookie); }\n // align slider/floater position with target button\n adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);\n return false;\n}\n\n// hijack animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }\n\n// adjust panel position based on button position\nif (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {\n if (panelClass=="floatingPanel") {\n var left=0;\n var top=btn.offsetHeight; \n if (place.style.position!="relative") {\n var left=findPosX(btn);\n var top=findPosY(btn)+btn.offsetHeight;\n var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;\n if (p) { left-=findPosX(p); top-=findPosY(p); }\n }\n if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth-10;\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n}\n\nfunction getWindowWidth() {\n if(document.width!=undefined)\n return document.width; // moz (FF)\n if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )\n return document.documentElement.clientWidth; // IE6\n if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )\n return document.body.clientWidth; // IE4\n if(window.innerWidth!=undefined)\n return window.innerWidth; // IE - general\n return 0; // unknown\n}\n//}}}
The CAO welcomes the Fairfield Museum and History Center who will be added in more content in the coming weeks.
http://www.ctconservationconnection.org \n\n
''Archival records or holdings'' - Materials created or received by a person, family, or organization, public or private, in the conduct of their affairs that are preserved because of the enduring value contained in the information they contain or as evidence of the functions and responsibilities of their creator. -http://archivists.org/glossary/terms/a/archival-records \n\n''EAD'' - Encoded Archival Description - http://www.loc.gov/ead/tglib/\n\n''Finding Aid'' - 1. A tool that facilitates discovery of information within a collection of records. - 2. A description of records that gives the repository physical and intellectual control over the materials and that assists users to gain access to and understand the materials. - http://archivists.org/glossary/terms/f/finding-aid \n\n''Repository'' - Used throughout this work to refer to any type of organization that holds documents, including business, institutional, and government archives, manuscript collections, libraries, museums, and historical societies, and in any form, including manuscripts, photographs, moving image and sound materials, and their electronic equivalents. - http://archivists.org/glossary/terms/r/repository\n\n''Web DAV'' - stands for "Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers. - http://www.webdav.org/\n\n''XML'' - Abbreviation of Extensible Markup Language, XML is shouldered by a set of essential technologies such as the infoset and namespaces. They address issues when using XML in specific applications contexts. - http://www.w3.org/standards/xml/\n\n
/***\n|''Name''|EditTemplateFieldsPlugin|\n|''Version''|0.3.3|\n|''Status''|beta|\n|''Author''|Jon Robson|\n|''Description''|Provides editing of custom fields|\n|''Requires''||\n|''Source''||\n!Usage\nput {{{<div macro="editFields"></div>}}} into your EditTemplate.\n!Todo\nSupport newlines in input boxes.\n!Code\n***/\n//{{{\n(function($) {\nvar editFields = config.macros.editFields = {\n handler: function(place, macroName, params, wikifier, paramString, tiddler) {\n var options = {\n fields: params\n };\n this.createInterface(place, tiddler, options);\n },\n createInterface: function(place, tiddler, options) {\n var whitelisted = ["changecount"];\n var fieldContainer = $("<div class='tiddlerCustomFields' />").appendTo(place);\n var included = [];\n if(tiddler) {\n for(var i in tiddler.fields) {\n var val = tiddler.fields[i];\n if(i.indexOf("server.") !== 0 && i.indexOf("_") !== 0 && typeof(val) == "string" && !whitelisted.contains(i)) {\n this.addNewField(fieldContainer, i, val);\n included.push(i);\n }\n }\n }\n for(var j = 0; j < options.fields.length; j++) {\n var field = options.fields[j];\n if(!included.contains(field)) {\n this.addNewField(fieldContainer, field, "");\n }\n }\n $("<button />").text("add new field").click(function() {\n editFields.addNewField(fieldContainer, "", "");\n }).appendTo(place);\n },\n addNewField: function(place, name, value) {\n var container = $("<div />").appendTo(place);\n var type = value.indexOf("\sn") > -1 ? "textarea" : "text";\n var valueInput = type == "text" ? $("<input type='text' />") : $("<textarea />");\n\n valueInput.attr("edit", name).val(value).appendTo(container);\n $("<button class='delete' />").text("delete").click(function(ev) {\n var answer = confirm("Are you sure you want to remove this field?");\n if(answer) {\n var attr = $(this).attr("field");\n $(this).parent().remove();\n }\n }).appendTo(container);\n var nameInput = $("<input class='fieldName' type='text' />").val(name).\n change(function(ev) {\n var el = $(ev.target);\n valueInput.attr("edit", el.val());\n }).prependTo(container);\n }\n}\n})(jQuery);\n//}}}
http://www.cthistoryonline.org/
/***\n|Name|FullScreenPlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#FullScreenPlugin|\n|Version|1.1|\n|Requires|~TW2.x|\n!Description:\nToggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.\n\n!Demo:\nClick the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nEdit the ViewTemplate to add the fullscreen command to the toolbar.\n\n!History:\n*25-07-06: ver 1.1\n*20-07-06: ver 1.0\n\n!Code\n***/\n//{{{\nvar lewcidFullScreen = false;\n\nconfig.commands.fullscreen =\n{\n text:" ↕ ",\n tooltip:"Fullscreen mode"\n};\n\nconfig.commands.fullscreen.handler = function (event,src,title)\n{\n if (lewcidFullScreen == false)\n {\n lewcidFullScreen = true;\n setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important; width: 100%}',"lewcidFullScreenStyle");\n }\n else\n {\n lewcidFullScreen = false;\n setStylesheet(' ',"lewcidFullScreenStyle");\n }\n}\n\nconfig.macros.fullscreen={};\nconfig.macros.fullscreen.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var label = params[0]||" ↕ ";\n var tooltip = params[1]||"Fullscreen mode";\n createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);\n}\n\nvar lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;\nStory.prototype.closeTiddler =function(title,animate,slowly)\n{\n lewcid_fullscreen_closeTiddler.apply(this,arguments);\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n\n\nSlider.prototype.lewcidStop = Slider.prototype.stop;\nSlider.prototype.stop = function()\n{\n this.lewcidStop();\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n//}}}
Yale joins the CAO with its 4000+ archival collections. The following Yale repositories have collections that are now ready to be searched:\n \n * Beinecke Rare Book and Manuscript Library\n * Divinity School Library\n * Irving S. Gilmore Music Library\n * Manuscripts and Archives\n * Medical Historical Library\n * Robert B. Haas Family Arts Library\n * Visual Resources Collection\n * Yale Center for British Art\n
/*\n TiddlyWiki Comments Plugin - Online demo at http://tiddlyguv.org/CommentsPlugin.html\n\n TODO:\n - Support Cascade comment delete when the top-level tiddler is deleted\n - Support more than one < <comments> > per tiddler. This will probably entail creating an invisible root tiddler to\n hold all the comments for a macro together. The user will need to provide an ID for this tiddler.\n - Don't use global "macro" var (use "macro" param a la jquery)\n\n*/\n\n/***\n|Name|CommentsPlugin|\n|Description|Macro for nested comments, where each comment is a separate tiddler.|\n|Source|http://tiddlyguv.org/CommentsPlugin.html#CommentsPlugin|\n|Documentation|http://tiddlyguv.org/CommentsPlugin.html#CommentsPluginInfo|\n|Version|0.1|\n|Author|Michael Mahemoff, Osmosoft|\n|''License:''|[[BSD open source license]]|\n|~CoreVersion|2.2|\n***/\n\n/*{{{*/\nif(!version.extensions.CommentsPlugin) {\n\n version.extensions.CommentsPlugin = {installed:true};\n\n (function(plugin) {\n\n var cmacro = config.macros.comments = {\n\n\n\ninit: function() {\n var stylesheet = store.getTiddlerText(tiddler.title + "##StyleSheet");\n if (stylesheet) { // check necessary because it happens more than once for some reason\n config.shadowTiddlers["StyleSheetCommentsPlugin"] = stylesheet;\n store.addNotification("StyleSheetCommentsPlugin", refreshStyles);\n }\n if (!version.extensions.CommentsPlugin.retainViewTemplate) cmacro.enhanceViewTemplate();\n},\n\nenhanceViewTemplate: function() {\n var template = config.shadowTiddlers.ViewTemplate;\n if ((/commentBreadcrumb/g).test(template)) return; // already enhanced\n var TITLE_DIV = "<div class='title' macro='view title'></div>";\n var commentsDiv = "<div class='commentBreadcrumb' macro='commentBreadcrumb'></div>";\n config.shadowTiddlers.ViewTemplate = template.replace(TITLE_DIV,commentsDiv+"\sn"+TITLE_DIV);\n},\n\nhandler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var macroParams = paramString.parseParams();\n var tiddlerParam = getParam(macroParams, "tiddler");\n tiddler = tiddlerParam ? store.getTiddler(tiddlerParam) : tiddler;\n if (!tiddler || !store.getTiddler(tiddler.title)) return;\n cmacro.buildCommentsArea(tiddler, place, macroParams);\n // cmacro.refreshCommentsFromRoot(story.getTiddler(tiddler.title).commentsEl, tiddler, macroParams);\n cmacro.refreshCommentsFromRoot(place.commentsEl, tiddler, macroParams);\n},\n\n\nbuildCommentsArea: function(rootTiddler, place, macroParams) {\n var commentsArea = createTiddlyElement(place, "div", null, "comments");\n var heading = getParam(macroParams, "heading");\n if (heading) createTiddlyElement(commentsArea, "h1", null, null, heading);\n var comments = createTiddlyElement(commentsArea, "div", null, "");\n place.commentsEl = comments;\n\n if (cmacro.editable(macroParams)) {\n var newCommentArea = createTiddlyElement(commentsArea, "div", null, "newCommentArea", "New comment:");\n cmacro.forceLoginIfRequired(params, newCommentArea, function() {\n var newCommentEl = cmacro.makeTextArea(newCommentArea, macroParams);\n // var addComment = createTiddlyElement(newCommentArea, "button", null, "addComment button", "Add Comment");\n var addComment = createTiddlyButton(newCommentArea, "Add Comment", null, function() {\n var comment = cmacro.createComment(newCommentEl.value, rootTiddler, macroParams); \n newCommentEl.value = "";\n cmacro.refreshCommentsFromRoot(comments, rootTiddler, macroParams);\n }, "addComment button");\n });\n }\n\n},\n\n\nmakeTextArea: function(container, macroParams) {\n var textArea = createTiddlyElement(container, "textarea");\n textArea.rows = getParam(macroParams, "textRows") || 4;\n textArea.cols = getParam(macroParams, "textCols") || 20;\n textArea.value = getParam(macroParams, "text") || "";\n return textArea;\n},\n\nrefreshCommentsFromRoot: function(rootCommentsEl, rootTiddler, macroParams) {\n cmacro.treeifyComments(rootTiddler);\n cmacro.refreshComments(rootCommentsEl, rootTiddler, macroParams);\n},\n\nrefreshComments: function(daddyCommentsEl, tiddler, macroParams) {\n // cmacro.log("refreshComments - root", rootCommentsEl, "daddy", daddyCommentsEl,\n // "tiddler ", tiddler, "macroParams ", macroParams);\n // cmacro.log("refreshComments", arguments);\n\n var commentsEl;\n if (tiddler.fields.daddy) {\n var commentEl = cmacro.buildCommentEl(daddyCommentsEl, tiddler, macroParams);\n daddyCommentsEl.appendChild(commentEl);\n commentsEl = commentEl.commentsEl;\n } else { // root element\n removeChildren(daddyCommentsEl);\n // refreshedEl = story.getTiddler(tiddler.title);\n commentsEl = daddyCommentsEl;\n }\n\n for (var child = tiddler.firstChild; child; child = child.next) {\n cmacro.refreshComments(commentsEl, child, macroParams);\n }\n\n},\n\ntreeifyComments: function(rootTiddler) {\n\n var comments = cmacro.findCommentsFromRoot(rootTiddler);\n\n cmacro.forEach(comments, function(comment) {\n var prev = comment.fields.prev;\n var daddy = comment.fields.daddy;\n if (prev) {\n store.getTiddler(prev).next = comment;\n } else {\n store.getTiddler(daddy).firstChild = comment;\n }\n });\n\n},\n\nlogComments: function(comments) {\n for (var i=0; i<comments.length; i++) {\n var comment = comments[i];\n }\n},\n\nfindCommentsFromRoot: function(rootTiddler) {\n var comments = [];\n store.forEachTiddler(function(title,tiddler) {\n if (tiddler.fields.root==rootTiddler.title) comments.push(tiddler);\n });\n return comments;\n},\n\nfindChildren: function(daddyTiddler) {\n var comments = [];\n store.forEachTiddler(function(title,tiddler) {\n if (tiddler.fields.daddy==daddyTiddler.title) comments.push(tiddler);\n });\n return comments;\n},\n\nbuildCommentEl: function(daddyCommentsEl, comment, macroParams) {\n\n // COMMENT ELEMENT\n var commentEl = document.createElement("div");\n commentEl.className = "comment";\n\n // HEADING <- METAINFO AND DELETE\n var headingEl = createTiddlyElement(commentEl, "div", null, "heading");\n\n var metaInfoEl = createTiddlyElement(headingEl, "div", null, "commentTitle", comment.modifier + '@' + comment.modified.formatString(getParam(macroParams,"dateFormat") || "DDD, MMM DDth, YYYY hh12:0mm:0ss am"));\n metaInfoEl.onclick = function() { \n // story.closeAllTiddlers();\n story.displayTiddler("top", comment.title, null, true);\n // document.location.hash = "#" + comment.title;\n };\n\n var deleteEl = createTiddlyElement(headingEl, "div", null, "deleteComment", "X");\n deleteEl.onclick = function() {\n if (true || confirm("Delete this comment and all of its replies?")) {\n cmacro.deleteTiddlerAndDescendents(comment);\n commentEl.parentNode.removeChild(commentEl);\n }\n };\n\n // TEXT\n commentEl.text = createTiddlyElement(commentEl, "div", null, "commentText");\n wikify(comment.text, commentEl.text);\n\n // REPLY LINK\n if (cmacro.editable(macroParams)) {\n var replyLinkZone = createTiddlyElement(commentEl, "div", null, "replyLinkZone");\n var replyLink = createTiddlyElement(replyLinkZone, "span", null, "replyLink", "reply to this comment");\n replyLink.onclick = function() { cmacro.openReplyLink(comment, commentEl, replyLink, macroParams); };\n }\n\n // var clearance = createTiddlyElement(commentEl, "clearance", null, "clearance");\n // clearance.innerHTML = "&nbsp;";\n\n // COMMENTS AREA\n commentEl.commentsEl = createTiddlyElement(commentEl, "div", null, "comments");\n\n // RETURN\n return commentEl;\n\n},\n\nopenReplyLink: function(commentTiddler, commentEl, replyLink, macroParams) {\n if (commentEl.replyEl) {\n commentEl.replyEl.style.display = "block";\n return;\n }\n\n commentEl.replyEl = document.createElement("div");\n commentEl.replyEl.className = "reply";\n\n replyLink.style.display = "none";\n var newReplyHeading = createTiddlyElement(commentEl.replyEl, "div", null, "newReply");\n createTiddlyElement(newReplyHeading, "div", null, "newReplyLabel", "New Reply:");\n var closeNewReply = createTiddlyElement(newReplyHeading, "div", null, "closeNewReply", "close");\n closeNewReply.onclick = function() {\n commentEl.replyEl.style.display = "none";\n replyLink.style.display = "block";\n };\n\n cmacro.forceLoginIfRequired(params, commentEl.replyEl, function() {\n var replyText = cmacro.makeTextArea(commentEl.replyEl, macroParams);\n var submitReply = createTiddlyButton(commentEl.replyEl, "Reply", null, function() {\n var newComment = cmacro.createComment(replyText.value, commentTiddler, macroParams);\n replyText.value = "";\n closeNewReply.onclick();\n cmacro.refreshComments(commentEl.commentsEl, newComment, macroParams);\n });\n });\n\n commentEl.insertBefore(commentEl.replyEl, commentEl.commentsEl);\n},\n\n\ncreateComment: function(text, daddy, macroParams) {\n\n var rootTitle = daddy.fields.root ? daddy.fields.root : daddy.title;\n // second case is the situation where daddy *is* root\n var newComment = cmacro.createCommentTiddler(macroParams, rootTitle);\n var fieldsParam = getParam(macroParams, "fields") || "";\n var fields = fieldsParam.decodeHashMap();\n var inheritedFields = (getParam(macroParams, "inheritedFields") || "").split(",");\n cmacro.forEach(inheritedFields, function(field) {\n if (field!="") fields[field] = daddy.fields[field];\n });\n var tagsParam = getParam(macroParams, "tags") || "comment";\n var now = new Date();\n newComment.set(null, text, config.options.txtUserName, now, tagsParam.split(","), now, fields);\n\n var youngestSibling = cmacro.findYoungestChild(daddy)\n if (youngestSibling) newComment.fields.prev = youngestSibling.title;\n newComment.fields.daddy = daddy.title;\n newComment.fields.root = rootTitle;\n\n cmacro.saveTiddler(newComment.title);\n autoSaveChanges(false);\n return newComment;\n},\n\nfindYoungestChild: function(daddy) {\n\n var siblingCount = 0;\n var elderSiblings = cmacro.mapize(cmacro.selectTiddlers(function(tiddler) {\n isChild = (tiddler.fields.daddy==daddy.title);\n if (isChild) siblingCount++;\n return isChild;\n }));\n if (!siblingCount) return null;\n\n // Find the only sibling that doesn't have a prev pointing at it\n var youngestSiblings = cmacro.clone(elderSiblings) // as a starting point\n cmacro.forEachMap(elderSiblings, function(tiddler) {\n delete youngestSiblings[tiddler.fields.prev];\n });\n\n for (title in youngestSiblings) { return youngestSiblings[title]; }\n\n},\n\n// The recursive delete is run by a separate function (nested inside\n// this one, for encapsulation purposes).\ndeleteTiddlerAndDescendents: function(tiddler) {\n\n function deleteRecursively(tiddler) {\n for (var child = tiddler.firstChild; child; child = child.next) {\n deleteRecursively(child);\n }\n store.removeTiddler(tiddler.title);\n }\n\n cmacro.treeifyComments(store.getTiddler(tiddler.fields.root));\n\n // save some info prior to deleting\n var prev = tiddler.fields.prev;\n var next = tiddler.next;\n\n deleteRecursively(tiddler);\n\n // used saved info\n if (next) {\n next.fields.prev = prev;\n cmacro.saveTiddler(next.title);\n }\n\n autoSaveChanges(false);\n\n},\n\n\nforEach: function(list, visitor) { for (var i=0; i<list.length; i++) visitor(list[i]); },\nforEachMap: function(map, visitor) { for (var key in map) visitor(map[key]); },\nselect: function(list, selector) { \n var selection = [];\n cmacro.forEach(list, function(currentItem) {\n if (selector(currentItem)) { selection.push(currentItem); }\n });\n return selection;\n},\nselectTiddlers: function(selector) { \n var tiddlers = [];\n store.forEachTiddler(function(title, tiddler) {\n var wanted = selector(tiddler);\n if (wanted) tiddlers.push(tiddler);\n });\n return tiddlers;\n},\nmap: function(list, mapper) { \n var mapped = [];\n cmacro.forEach(list, function(currentItem) { mapped.push(mapper(currentItem)); });\n return mapped;\n},\nremove: function(list, unwantedItem) {\n return cmacro.select(list,\n function(currentItem) { return currentItem!=unwantedItem; });\n},\nmapize: function(tiddlerList) {\n var map = {};\n cmacro.forEach(tiddlerList, function(tiddler) { map[tiddler.title] = tiddler; });\n return map;\n},\nclone: function(map) { return merge({}, map); },\n\n\neditable: function(params) {\n var editable = getParam(params, "editable");\n return (!editable || editable!="false");\n},\n\nneedsLogin: function(params) {\n var loginCheck = getParam(params, "loginCheck");\n return loginCheck && !window[loginCheck]();\n},\n\nforceLoginIfRequired: function(params, loginPromptContainer, authenticatedBlock) {\n if (cmacro.needsLogin(params)) wikify("<<"+getParam(macroParams, "loginPrompt")+">>", loginPromptContainer);\n else authenticatedBlock();\n},\n\n\nmergeReadOnly: function(first, second) {\n var merged = {};\n for (var field in first) { merged[field] = first[field]; }\n for (var field in second) { merged[field] = second[field]; }\n return merged;\n},\n\n// callers may replace this with their own ID generation algorithm\ncreateCommentTiddler: function(macroParams, rootTitle) {\n // var titleFormat = getParam(macroParams, "titleFormat") || "%root%Comment"; \n var prefix = rootTitle+"Comment"; // was "_comment"\n if (!store.createGuidTiddler) return store.createTiddler(prefix+((new Date()).getTime()));\n return store.createGuidTiddler(prefix);\n},\nsaveTiddler: function(tiddler) {\n var tiddler = (typeof(tiddler)=="string") ? store.getTiddler(tiddler) : tiddler; \n store.saveTiddler(tiddler.title, tiddler.title, tiddler.text, tiddler.modifier, tiddler.modified, tiddler.tags, cmacro.mergeReadOnly(config.defaultCustomFields, tiddler.fields), false, tiddler.created)\n},\nlog: function() { if (console && console.firebug) console.log.apply(console, arguments); },\nassert: function() { if (console && console.firebug) console.assert.apply(console, arguments); },\n\n\ncopyFields: function(fromTiddler, toTiddler, field1, field2, fieldN) {\n for (var i=2; i<arguments.length; i++) {\n fieldKey = arguments[i];\n if (fromTiddler.fields[fieldKey]) toTiddler.fields[fieldKey] = fromTiddler.fields[fieldKey];\n }\n}\n}\n\nconfig.macros.commentsCount = {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var count = 0;\n if (tiddler && store.getTiddler(tiddler.title)) {\n var rootTiddler = paramString.length ? paramString : tiddler.title;\n count = config.macros.comments.findCommentsFromRoot(store.getTiddler(rootTiddler)).length;\n }\n createTiddlyText(place, count);\n }\n},\n\nconfig.macros.commentBreadcrumb = {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if (!tiddler.fields.root) return;\n var rootLink = createTiddlyElement(place, "span", null, null);\n createTiddlyLink(rootLink, tiddler.fields.root, true);\n\n var rootIsParent = tiddler.fields.daddy==tiddler.fields.root;\n var rootIsGrandparent = (store.getTiddler(tiddler.fields.daddy)).fields.daddy==tiddler.fields.root;\n\n if (!rootIsParent) {\n if (!rootIsGrandparent) createTiddlyElement(place, "span", null, null, " > ... ");\n createTiddlyElement(place, "span", null, null, " > ");\n var daddyLink = createTiddlyElement(place, "span", null, null);\n createTiddlyLink(daddyLink, tiddler.fields.daddy, true);\n }\n\n createTiddlyElement(place, "span", null, null, " > ");\n\n // place.appendChild(createTiddlyLink(tiddler.fields.root));\n }\n}\n\nconfig.macros.tiddlyWebComments = {};\nconfig.macros.tiddlyWebComments.handler =\n function(place,macroName,params,wikifier,paramString,tiddler) {\n paramString = "fields:'server.workspace:bags/comments' inheritedFields:'server.host,server.type'";\n config.macros.comments.handler(place,macroName,params,wikifier, paramString,tiddler);\n };\n\nfunction log() { if (console && console.firebug) console.log.apply(console, arguments); }\n\n})(version.extensions.CommentsPlugin);\n\n\n/***\n!StyleSheet\n\n.comments h1 { margin-bottom: 0; padding-bottom: 0; }\n.comments { padding: 0; }\n.comment .comments { margin-left: 1em; }\n\n.comment { padding: 0; margin: 1em 0 0; }\n.comment .comment { margin 0; }\n.comment .toolbar .button { border: 0; color: #9a4; }\n.comment .heading { background: [[ColorPalette::PrimaryPale]]; color: [[ColorPalette::PrimaryDark]]; border-bottom: 1px solid [[ColorPalette::PrimaryLight]]; border-right: 1px solid [[ColorPalette::PrimaryLight]]; padding: 0.5em; height: 1.3em; }\n.commentTitle { float: left; }\n.commentTitle:hover { text-decoration: underline; cursor: pointer; }\n.commentText { clear: both; padding: 1em 1em; }\n.deleteComment { float: right; cursor: pointer; text-decoration:underline; color:[[ColorPalette::SecondaryDark]]; padding-right: 0.3em; }\n.comment .reply { margin-left: 1em; }\n.comment .replyLink { color:[[ColorPalette::SecondaryDark]]; font-style: italic; \n cursor: pointer; text-decoration: underline; margin: 0 1em; }\n.comment .created { }\n.comment .newReply { color:[[ColorPalette::SecondaryDark]]; margin-top: 1em; }\n.newReplyLabel { float: left; }\n.closeNewReply { cursor: pointer; float: right; text-decoration: underline; }\n.comments textarea { width: 100%; padding: 0.3em; margin-bottom: 0.6em; }\n.newCommentArea { margin-top: 0.5em; }\n\n.clearance { clear: both; }\n\n\n!(end of StyleSheet)\n\n***/\n\n config.macros.comments.init();\n\n} // end of 'install only once'\n/*}}}*/\n\n// function log() { if (console && console.firebug) console.log.apply(console, arguments); }\n
/***\n|Name|ExportTiddlersPlugin|\n|Source|http://www.TiddlyTools.com/#ExportTiddlersPlugin|\n|Documentation|http://www.TiddlyTools.com/#ExportTiddlersPluginInfo|\n|Version|2.9.6|\n|Author|Eric Shulman|\n|License|http://www.TiddlyTools.com/#LegalStatements|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Description|interactively select/export tiddlers to a separate file|\n!!!!!Documentation\n>see [[ExportTiddlersPluginInfo]]\n!!!!!Inline control panel (live):\n><<exportTiddlers inline>>\n!!!!!Revisions\n<<<\n2011.02.14 2.9.6 fix OSX error: use picker.file.path\n2010.02.25 2.9.5 added merge checkbox option and improved 'merge' status message\n|please see [[ExportTiddlersPluginInfo]] for additional revision details|\n2005.10.09 0.0.0 development started\n<<<\n!!!!!Code\n***/\n//{{{\n// version\nversion.extensions.ExportTiddlersPlugin= {major: 2, minor: 9, revision: 6, date: new Date(2011,2,14)};\n\n// default shadow definition\nconfig.shadowTiddlers.ExportTiddlers='<<exportTiddlers inline>>';\n\n// add 'export' backstage task (following built-in import task)\nif (config.tasks) { // TW2.2 or above\n config.tasks.exportTask = {\n text:'export',\n tooltip:'Export selected tiddlers to another file',\n content:'<<exportTiddlers inline>>'\n }\n config.backstageTasks.splice(config.backstageTasks.indexOf('importTask')+1,0,'exportTask');\n}\n\nconfig.macros.exportTiddlers = {\n $: function(id) { return document.getElementById(id); }, // abbreviation\n label: 'export tiddlers',\n prompt: 'Copy selected tiddlers to an export document',\n okmsg: '%0 tiddler%1 written to %2',\n failmsg: 'An error occurred while creating %1',\n overwriteprompt: '%0\sncontains %1 tiddler%2 that will be discarded or replaced',\n mergestatus: '%0 tiddler%1 added, %2 tiddler%3 updated, %4 tiddler%5 unchanged',\n statusmsg: '%0 tiddler%1 - %2 selected for export',\n newdefault: 'export.html',\n datetimefmt: '0MM/0DD/YYYY 0hh:0mm:0ss', // for 'filter date/time' edit fields\n type_TW: "tw", type_PS: "ps", type_TX: "tx", type_CS: "cs", type_NF: "nf", // file type tokens\n type_map: { // maps type param to token values\n tiddlywiki:"tw", tw:"tw", wiki: "tw",\n purestore: "ps", ps:"ps", store:"ps",\n plaintext: "tx", tx:"tx", text: "tx",\n comma: "cs", cs:"cs", csv: "cs",\n newsfeed: "nf", nf:"nf", xml: "nf", rss:"nf"\n },\n handler: function(place,macroName,params) {\n if (params[0]!='inline')\n { createTiddlyButton(place,this.label,this.prompt,this.togglePanel); return; }\n var panel=this.createPanel(place);\n panel.style.position='static';\n panel.style.display='block';\n },\n createPanel: function(place) {\n var panel=this.$('exportPanel');\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(store.getTiddlerText('ExportTiddlersPlugin##css',''),'exportTiddlers');\n panel=createTiddlyElement(place,'span','exportPanel',null,null)\n panel.innerHTML=store.getTiddlerText('ExportTiddlersPlugin##html','');\n this.initFilter();\n this.refreshList(0);\n var fn=this.$('exportFilename');\n if (window.location.protocol=='file:' && !fn.value.length) {\n // get new target path/filename\n var newPath=getLocalPath(window.location.href);\n var slashpos=newPath.lastIndexOf('/'); if (slashpos==-1) slashpos=newPath.lastIndexOf('\s\s'); \n if (slashpos!=-1) newPath=newPath.substr(0,slashpos+1); // trim filename\n fn.value=newPath+this.newdefault;\n }\n return panel;\n },\n togglePanel: function(e) { var e=e||window.event;\n var cme=config.macros.exportTiddlers; // abbrev\n var parent=resolveTarget(e).parentNode;\n var panel=cme.$('exportPanel');\n if (panel==undefined || panel.parentNode!=parent)\n panel=cme.createPanel(parent);\n var isOpen=panel.style.display=='block';\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,'none'));\n else\n panel.style.display=isOpen?'none':'block' ;\n if (panel.style.display!='none') {\n cme.refreshList(0);\n cme.$('exportFilename').focus(); \n cme.$('exportFilename').select();\n }\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);\n },\n process: function(which) { // process panel control interactions\n var theList=this.$('exportList'); if (!theList) return false;\n var count = 0;\n var total = store.getTiddlers('title').length;\n switch (which.id) {\n case 'exportFilter':\n count=this.filterExportList();\n var panel=this.$('exportFilterPanel');\n if (count==-1) { panel.style.display='block'; break; }\n this.$('exportStart').disabled=(count==0);\n this.$('exportDelete').disabled=(count==0);\n this.displayStatus(count,total);\n if (count==0) { alert('No tiddlers were selected'); panel.style.display='block'; }\n break;\n case 'exportStart':\n this.go();\n break;\n case 'exportDelete':\n this.deleteTiddlers();\n break;\n case 'exportHideFilter':\n case 'exportToggleFilter':\n var panel=this.$('exportFilterPanel')\n panel.style.display=(panel.style.display=='block')?'none':'block';\n break;\n case 'exportSelectChanges':\n var lastmod=new Date(document.lastModified);\n for (var t = 0; t < theList.options.length; t++) {\n if (theList.options[t].value=='') continue;\n var tiddler=store.getTiddler(theList.options[t].value); if (!tiddler) continue;\n theList.options[t].selected=(tiddler.modified>lastmod);\n count += (tiddler.modified>lastmod)?1:0;\n }\n this.$('exportStart').disabled=(count==0);\n this.$('exportDelete').disabled=(count==0);\n this.displayStatus(count,total);\n if (count==0) alert('There are no unsaved changes');\n break;\n case 'exportSelectAll':\n for (var t = 0; t < theList.options.length; t++) {\n if (theList.options[t].value=='') continue;\n theList.options[t].selected=true;\n count += 1;\n }\n this.$('exportStart').disabled=(count==0);\n this.$('exportDelete').disabled=(count==0);\n this.displayStatus(count,count);\n break;\n case 'exportSelectOpened':\n for (var t=0; t<theList.options.length; t++) theList.options[t].selected=false;\n var tiddlerDisplay=this.$('tiddlerDisplay');\n for (var t=0; t<tiddlerDisplay.childNodes.length;t++) {\n var tiddler=tiddlerDisplay.childNodes[t].id.substr(7);\n for (var i=0; i<theList.options.length; i++) {\n if (theList.options[i].value!=tiddler) continue;\n theList.options[i].selected=true; count++; break;\n }\n }\n this.$('exportStart').disabled=(count==0);\n this.$('exportDelete').disabled=(count==0);\n this.displayStatus(count,total);\n if (count==0) alert('There are no tiddlers currently opened');\n break;\n case 'exportSelectRelated':\n // recursively build list of related tiddlers\n function getRelatedTiddlers(tid,tids) {\n var t=store.getTiddler(tid); if (!t || tids.contains(tid)) return tids;\n tids.push(t.title);\n if (!t.linksUpdated) t.changed();\n for (var i=0; i<t.links.length; i++)\n if (t.links[i]!=tid) tids=getRelatedTiddlers(t.links[i],tids);\n return tids;\n }\n // for all currently selected tiddlers, gather up the related tiddlers (including self) and select them as well\n var tids=[];\n for (var i=0; i<theList.options.length; i++)\n if (theList.options[i].selected) tids=getRelatedTiddlers(theList.options[i].value,tids);\n // select related tiddlers (includes original selected tiddlers)\n for (var i=0; i<theList.options.length; i++)\n theList.options[i].selected=tids.contains(theList.options[i].value);\n this.displayStatus(tids.length,total);\n break;\n case 'exportListSmaller': // decrease current listbox size\n var min=5;\n theList.size-=(theList.size>min)?1:0;\n break;\n case 'exportListLarger': // increase current listbox size\n var max=(theList.options.length>25)?theList.options.length:25;\n theList.size+=(theList.size<max)?1:0;\n break;\n case 'exportClose':\n this.$('exportPanel').style.display='none';\n break;\n }\n return false;\n },\n displayStatus: function(count,total) {\n var txt=this.statusmsg.format([total,total!=1?'s':'',!count?'none':count==total?'all':count]);\n clearMessage(); displayMessage(txt);\n return txt;\n },\n refreshList: function(selectedIndex) {\n var theList = this.$('exportList'); if (!theList) return;\n // get the sort order\n var sort;\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) sort='modified';\n if (selectedIndex==1) sort='title';\n if (selectedIndex==2) sort='modified';\n if (selectedIndex==3) sort='modifier';\n if (selectedIndex==4) sort='tags';\n\n // unselect headings and count number of tiddlers actually selected\n var count=0;\n for (var t=5; t < theList.options.length; t++) {\n if (!theList.options[t].selected) continue;\n if (theList.options[t].value!='')\n count++;\n else { // if heading is selected, deselect it, and then select and count all in section\n theList.options[t].selected=false;\n for ( t++; t<theList.options.length && theList.options[t].value!=''; t++) {\n theList.options[t].selected=true;\n count++;\n }\n }\n }\n\n // disable 'export' and 'delete' buttons if no tiddlers selected\n this.$('exportStart').disabled=(count==0);\n this.$('exportDelete').disabled=(count==0);\n\n // show selection count\n var tiddlers = store.getTiddlers('title');\n if (theList.options.length) this.displayStatus(count,tiddlers.length);\n\n // if a [command] item, reload list... otherwise, no further refresh needed\n if (selectedIndex>4) return;\n\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=\n new Option(tiddlers.length+' tiddlers in document', '',false,false);\n theList.options[i++]=\n new Option(((sort=='title' )?'>':indent)+' [by title]', '',false,false);\n theList.options[i++]=\n new Option(((sort=='modified')?'>':indent)+' [by date]', '',false,false);\n theList.options[i++]=\n new Option(((sort=='modifier')?'>':indent)+' [by author]', '',false,false);\n theList.options[i++]=\n new Option(((sort=='tags' )?'>':indent)+' [by tags]', '',false,false);\n\n // output the tiddler list\n switch(sort) {\n case 'title':\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case 'modifier':\n case 'modified':\n var tiddlers = store.getTiddlers(sort);\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a[sort] == b[sort]) return(0); else return (a[sort] > b[sort]) ? -1 : +1; });\n var lastSection = '';\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = '';\n if (sort=='modified') theSection=tiddler.modified.toLocaleDateString();\n if (sort=='modifier') theSection=tiddler.modifier;\n if (theSection != lastSection) {\n theList.options[i++] = new Option(theSection,'',false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n case 'tags':\n var theTitles = {}; // all tiddler titles, hash indexed by tag value\n var theTags = new Array();\n for(var t=0; t<tiddlers.length; t++) {\n var title=tiddlers[t].title;\n var tags=tiddlers[t].tags;\n if (!tags || !tags.length) {\n if (theTitles['untagged']==undefined) { theTags.push('untagged'); theTitles['untagged']=new Array(); }\n theTitles['untagged'].push(title);\n }\n else for(var s=0; s<tags.length; s++) {\n if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }\n theTitles[tags[s]].push(title);\n }\n }\n theTags.sort();\n for(var tagindex=0; tagindex<theTags.length; tagindex++) {\n var theTag=theTags[tagindex];\n theList.options[i++]=new Option(theTag,'',false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n this.$('exportStart').disabled=true;\n this.$('exportDelete').disabled=true;\n this.displayStatus(0,tiddlers.length);\n },\n askForFilename: function(here) {\n var msg=here.title; // use tooltip as dialog box message\n var path=getLocalPath(document.location.href);\n var slashpos=path.lastIndexOf('/'); if (slashpos==-1) slashpos=path.lastIndexOf('\s\s'); \n if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash\n var filetype=this.$('exportFormat').value.toLowerCase();\n var defext='html';\n if (filetype==this.type_TX) defext='txt';\n if (filetype==this.type_CS) defext='csv';\n if (filetype==this.type_NF) defext='xml';\n var file=this.newdefault.replace(/html$/,defext);\n var result='';\n if(window.Components) { // moz\n try {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');\n var nsIFilePicker = window.Components.interfaces.nsIFilePicker;\n var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);\n picker.init(window, msg, nsIFilePicker.modeSave);\n var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);\n thispath.initWithPath(path);\n picker.displayDirectory=thispath;\n picker.defaultExtension=defext;\n picker.defaultString=file;\n picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);\n if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.path;\n }\n catch(e) { alert('error during local file access: '+e.toString()) }\n }\n else { // IE\n try { // XPSP2 IE only\n var s = new ActiveXObject('UserAccounts.CommonDialog');\n s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|XML files|*.xml|';\n s.FilterIndex=defext=='txt'?2:'html'?3:'xml'?4:1;\n s.InitialDir=path;\n s.FileName=file;\n if (s.showOpen()) var result=s.FileName;\n }\n catch(e) { // fallback\n var result=prompt(msg,path+file);\n }\n }\n return result;\n },\n initFilter: function() {\n this.$('exportFilterStart').checked=false; this.$('exportStartDate').value='';\n this.$('exportFilterEnd').checked=false; this.$('exportEndDate').value='';\n this.$('exportFilterTags').checked=false; this.$('exportTags').value='';\n this.$('exportFilterText').checked=false; this.$('exportText').value='';\n this.showFilterFields();\n },\n showFilterFields: function(which) {\n var show=this.$('exportFilterStart').checked;\n this.$('exportFilterStartBy').style.display=show?'block':'none';\n this.$('exportStartDate').style.display=show?'block':'none';\n var val=this.$('exportFilterStartBy').value;\n this.$('exportStartDate').value\n =this.getFilterDate(val,'exportStartDate').formatString(this.datetimefmt);\n if (which && (which.id=='exportFilterStartBy') && (val=='other'))\n this.$('exportStartDate').focus();\n\n var show=this.$('exportFilterEnd').checked;\n this.$('exportFilterEndBy').style.display=show?'block':'none';\n this.$('exportEndDate').style.display=show?'block':'none';\n var val=this.$('exportFilterEndBy').value;\n this.$('exportEndDate').value\n =this.getFilterDate(val,'exportEndDate').formatString(this.datetimefmt);\n if (which && (which.id=='exportFilterEndBy') && (val=='other'))\n this.$('exportEndDate').focus();\n\n var show=this.$('exportFilterTags').checked;\n this.$('exportTags').style.display=show?'block':'none';\n\n var show=this.$('exportFilterText').checked;\n this.$('exportText').style.display=show?'block':'none';\n },\n getFilterDate: function(val,id) {\n var result=0;\n switch (val) {\n case 'file':\n result=new Date(document.lastModified);\n break;\n case 'other':\n result=new Date(this.$(id).value);\n break;\n default: // today=0, yesterday=1, one week=7, two weeks=14, a month=31\n var now=new Date(); var tz=now.getTimezoneOffset()*60000; now-=tz;\n var oneday=86400000;\n if (id=='exportStartDate')\n result=new Date((Math.floor(now/oneday)-val)*oneday+tz);\n else\n result=new Date((Math.floor(now/oneday)-val+1)*oneday+tz-1);\n break;\n }\n return result;\n },\n filterExportList: function() {\n var theList = this.$('exportList'); if (!theList) return -1;\n var filterStart=this.$('exportFilterStart').checked;\n var val=this.$('exportFilterStartBy').value;\n var startDate=config.macros.exportTiddlers.getFilterDate(val,'exportStartDate');\n var filterEnd=this.$('exportFilterEnd').checked;\n var val=this.$('exportFilterEndBy').value;\n var endDate=config.macros.exportTiddlers.getFilterDate(val,'exportEndDate');\n var filterTags=this.$('exportFilterTags').checked;\n var tags=this.$('exportTags').value;\n var filterText=this.$('exportFilterText').checked;\n var text=this.$('exportText').value;\n if (!(filterStart||filterEnd||filterTags||filterText)) {\n alert('Please set the selection filter');\n this.$('exportFilterPanel').style.display='block';\n return -1;\n }\n if (filterStart&&filterEnd&&(startDate>endDate)) {\n var msg='starting date/time:\sn'\n msg+=startDate.toLocaleString()+'\sn';\n msg+='is later than ending date/time:\sn'\n msg+=endDate.toLocaleString()\n alert(msg);\n return -1;\n }\n // if filter by tags, get list of matching tiddlers\n // use getMatchingTiddlers() (if MatchTagsPlugin is installed) for full boolean expressions\n // otherwise use getTaggedTiddlers() for simple tag matching\n if (filterTags) {\n var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;\n var t=fn.apply(store,[tags]);\n var tagged=[];\n for (var i=0; i<t.length; i++) tagged.push(t[i].title);\n }\n // scan list and select tiddlers that match all applicable criteria\n var total=0;\n var count=0;\n for (var i=0; i<theList.options.length; i++) {\n // get item, skip non-tiddler list items (section headings)\n var opt=theList.options[i]; if (opt.value=='') continue;\n // get tiddler, skip missing tiddlers (this should NOT happen)\n var tiddler=store.getTiddler(opt.value); if (!tiddler) continue; \n var sel=true;\n if ( (filterStart && tiddler.modified<startDate)\n || (filterEnd && tiddler.modified>endDate)\n || (filterTags && !tagged.contains(tiddler.title))\n || (filterText && (tiddler.text.indexOf(text)==-1) && (tiddler.title.indexOf(text)==-1)))\n sel=false;\n opt.selected=sel;\n count+=sel?1:0;\n total++;\n }\n return count;\n },\n deleteTiddlers: function() {\n var list=this.$('exportList'); if (!list) return;\n var tids=[];\n for (i=0;i<list.length;i++)\n if (list.options[i].selected && list.options[i].value.length)\n tids.push(list.options[i].value);\n if (!confirm('Are you sure you want to delete these tiddlers:\sn\sn'+tids.join(', '))) return;\n store.suspendNotifications();\n for (t=0;t<tids.length;t++) {\n var tid=store.getTiddler(tids[t]); if (!tid) continue;\n var msg="'"+tid.title+"' is tagged with 'systemConfig'.\sn\sn";\n msg+='Removing this tiddler may cause unexpected results. Are you sure?'\n if (tid.tags.contains('systemConfig') && !confirm(msg)) continue;\n store.removeTiddler(tid.title);\n story.closeTiddler(tid.title);\n }\n store.resumeNotifications();\n alert(tids.length+' tiddlers deleted');\n this.refreshList(0); // reload listbox\n store.notifyAll(); // update page display\n },\n go: function() {\n if (window.location.protocol!='file:') // make sure we are local\n { displayMessage(config.messages.notFileUrlError); return; }\n // get selected tidders, target filename, target type, and notes\n var list=this.$('exportList'); if (!list) return;\n var tids=[]; for (var i=0; i<list.options.length; i++) {\n var opt=list.options[i]; if (!opt.selected||!opt.value.length) continue;\n var tid=store.getTiddler(opt.value); if (!tid) continue;\n tids.push(tid);\n }\n if (!tids.length) return; // no tiddlers selected\n var target=this.$('exportFilename').value.trim();\n if (!target.length) {\n displayMessage('A local target path/filename is required',target);\n return;\n }\n var merge=this.$('exportMerge').checked;\n var filetype=this.$('exportFormat').value.toLowerCase();\n var notes=this.$('exportNotes').value.replace(/\sn/g,'<br>');\n var total={val:0};\n var out=this.assembleFile(target,filetype,tids,notes,total,merge);\n if (!total.val) return; // cancelled file overwrite\n var link='file:///'+target.replace(/\s\s/g,'/');\n var samefile=link==decodeURIComponent(window.location.href);\n var p=getLocalPath(document.location.href);\n if (samefile) {\n if (config.options.chkSaveBackups) { var t=loadOriginal(p);if(t)saveBackup(p,t); }\n if (config.options.chkGenerateAnRssFeed && saveRss instanceof Function) saveRss(p);\n }\n var ok=saveFile(target,out);\n displayMessage((ok?this.okmsg:this.failmsg).format([total.val,total.val!=1?'s':'',target]),link);\n },\n plainTextHeader:\n 'Source:\sn\st%0\sn'\n +'Title:\sn\st%1\sn'\n +'Subtitle:\sn\st%2\sn'\n +'Created:\sn\st%3 by %4\sn'\n +'Application:\sn\stTiddlyWiki %5 / %6 %7\sn\sn',\n plainTextTiddler:\n '- - - - - - - - - - - - - - -\sn'\n +'| title: %0\sn'\n +'| created: %1\sn'\n +'| modified: %2\sn'\n +'| edited by: %3\sn'\n +'| tags: %4\sn'\n +'- - - - - - - - - - - - - - -\sn'\n +'%5\sn',\n plainTextFooter:\n '',\n newsFeedHeader:\n '<'+'?xml version="1.0"?'+'>\sn'\n +'<rss version="2.0">\sn'\n +'<channel>\sn'\n +'<title>%1</title>\sn'\n +'<link>%0</link>\sn'\n +'<description>%2</description>\sn'\n +'<language>en-us</language>\sn'\n +'<copyright>Copyright '+(new Date().getFullYear())+' %4</copyright>\sn'\n +'<pubDate>%3</pubDate>\sn'\n +'<lastBuildDate>%3</lastBuildDate>\sn'\n +'<docs>http://blogs.law.harvard.edu/tech/rss</docs>\sn'\n +'<generator>TiddlyWiki %5 / %6 %7</generator>\sn',\n newsFeedTiddler:\n '\sn%0\sn',\n newsFeedFooter:\n '</channel></rss>',\n pureStoreHeader:\n '<html><body>'\n +'<style type="text/css">'\n +' #storeArea {display:block;margin:1em;}'\n +' #storeArea div {padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}'\n +' #pureStoreHeading {width:100%;text-align:left;background-color:#eeeeee;padding:1em;}'\n +'</style>'\n +'<div id="pureStoreHeading">'\n +' TiddlyWiki "PureStore" export file<br>'\n +' Source'+': <b>%0</b><br>'\n +' Title: <b>%1</b><br>'\n +' Subtitle: <b>%2</b><br>'\n +' Created: <b>%3</b> by <b>%4</b><br>'\n +' TiddlyWiki %5 / %6 %7<br>'\n +' Notes:<hr><pre>%8</pre>'\n +'</div>'\n +'<div id="storeArea">',\n pureStoreTiddler:\n '%0\sn%1',\n pureStoreFooter:\n '</div><!--POST-BODY-START-->\sn<!--POST-BODY-END--></body></html>',\n assembleFile: function(target,filetype,tids,notes,total,merge) {\n var revised='';\n var now = new Date().toLocaleString();\n var src=convertUnicodeToUTF8(document.location.href);\n var title = convertUnicodeToUTF8(wikifyPlain('SiteTitle').htmlEncode());\n var subtitle = convertUnicodeToUTF8(wikifyPlain('SiteSubtitle').htmlEncode());\n var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());\n var twver = version.major+'.'+version.minor+'.'+version.revision;\n var v=version.extensions.ExportTiddlersPlugin; var pver = v.major+'.'+v.minor+'.'+v.revision;\n var headerargs=[src,title,subtitle,now,user,twver,'ExportTiddlersPlugin',pver,notes];\n switch (filetype) {\n case this.type_TX: // plain text\n var header=this.plainTextHeader.format(headerargs);\n var footer=this.plainTextFooter;\n break;\n case this.type_CS: // comma-separated\n var fields={};\n for (var i=0; i<tids.length; i++) for (var f in tids[i].fields) fields[f]=f;\n var names=['title','created','modified','modifier','tags','text'];\n for (var f in fields) names.push(f);\n var header=names.join(',')+'\sn';\n var footer='';\n break;\n case this.type_NF: // news feed (XML)\n headerargs[0]=store.getTiddlerText('SiteUrl','');\n var header=this.newsFeedHeader.format(headerargs);\n var footer=this.newsFeedFooter;\n break;\n case this.type_PS: // PureStore (no code)\n var header=this.pureStoreHeader.format(headerargs);\n var footer=this.pureStoreFooter;\n break;\n case this.type_TW: // full TiddlyWiki\n default:\n var currPath=getLocalPath(window.location.href);\n var original=loadFile(currPath);\n if (!original) { displayMessage(config.messages.cantSaveError); return; }\n var posDiv = locateStoreArea(original);\n if (!posDiv) { displayMessage(config.messages.invalidFileError.format([currPath])); return; }\n var header = original.substr(0,posDiv[0]+startSaveArea.length)+'\sn';\n var footer = '\sn'+original.substr(posDiv[1]);\n break;\n }\n var out=this.getData(target,filetype,tids,fields,merge);\n var revised = header+convertUnicodeToUTF8(out.join('\sn'))+footer;\n // if full TW, insert page title and language attr, and reset all MARKUP blocks...\n if (filetype==this.type_TW) {\n var newSiteTitle=convertUnicodeToUTF8(getPageTitle()).htmlEncode();\n revised=revised.replaceChunk('<title'+'>','</title'+'>',' ' + newSiteTitle + ' ');\n revised=updateLanguageAttribute(revised);\n var titles=[]; for (var i=0; i<tids.length; i++) titles.push(tids[i].title);\n revised=updateMarkupBlock(revised,'PRE-HEAD',\n titles.contains('MarkupPreHead')? 'MarkupPreHead' :null);\n revised=updateMarkupBlock(revised,'POST-HEAD',\n titles.contains('MarkupPostHead')?'MarkupPostHead':null);\n revised=updateMarkupBlock(revised,'PRE-BODY',\n titles.contains('MarkupPreBody')? 'MarkupPreBody' :null);\n revised=updateMarkupBlock(revised,'POST-SCRIPT',\n titles.contains('MarkupPostBody')?'MarkupPostBody':null);\n }\n total.val=out.length;\n return revised;\n },\n getData: function(target,filetype,tids,fields,merge) {\n // output selected tiddlers and gather list of titles (for use with merge)\n var out=[]; var titles=[];\n var url=store.getTiddlerText('SiteUrl','');\n for (var i=0; i<tids.length; i++) {\n out.push(this.formatItem(store,filetype,tids[i],url,fields));\n titles.push(tids[i].title);\n }\n // if TW or PureStore format, ask to merge with existing tiddlers (if any)\n if (filetype==this.type_TW || filetype==this.type_PS) {\n var txt=loadFile(target);\n if (txt && txt.length) {\n var remoteStore=new TiddlyWiki();\n if (version.major+version.minor*.1+version.revision*.01<2.52) txt=convertUTF8ToUnicode(txt);\n if (remoteStore.importTiddlyWiki(txt)) {\n var existing=remoteStore.getTiddlers('title');\n var msg=this.overwriteprompt.format([target,existing.length,existing.length!=1?'s':'']);\n if (merge) {\n var added=titles.length; var updated=0; var kept=0;\n for (var i=0; i<existing.length; i++)\n if (titles.contains(existing[i].title)) {\n added--; updated++;\n } else {\n out.push(this.formatItem(remoteStore,filetype,existing[i],url));\n kept++;\n }\n displayMessage(this.mergestatus.format(\n [added,added!=1?'s':'',updated,updated!=1?'s':'',kept,kept!=1?'s':'',]));\n }\n else if (!confirm(msg)) out=[]; // empty the list = don't write file\n }\n }\n }\n return out;\n },\n formatItem: function(s,f,t,u,fields) {\n if (f==this.type_TW)\n var r=s.getSaver().externalizeTiddler(s,t);\n if (f==this.type_PS)\n var r=this.pureStoreTiddler.format([t.title,s.getSaver().externalizeTiddler(s,t)]);\n if (f==this.type_NF)\n var r=this.newsFeedTiddler.format([t.saveToRss(u)]);\n if (f==this.type_TX)\n var r=this.plainTextTiddler.format([t.title, t.created.toLocaleString(), t.modified.toLocaleString(),\n t.modifier, String.encodeTiddlyLinkList(t.tags), t.text]);\n if (f==this.type_CS) {\n function toCSV(t) { return '"'+t.replace(/"/g,'""')+'"'; } // always encode CSV\n var out=[ toCSV(t.title), toCSV(t.created.toLocaleString()), toCSV(t.modified.toLocaleString()),\n toCSV(t.modifier), toCSV(String.encodeTiddlyLinkList(t.tags)), toCSV(t.text) ];\n for (var f in fields) out.push(toCSV(t.fields[f]||''));\n var r=out.join(',');\n }\n return r||"";\n }\n}\n//}}}\n/***\n!!!Control panel CSS\n//{{{\n!css\n#exportPanel {\n display: none; position:absolute; z-index:12; width:35em; right:105%; top:6em;\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\n padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em;\n}\n#exportPanel a, #exportPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\n#exportPanel table {\n width:100%; border:0px; padding:0px; margin:0px;\n font-size:8pt; line-height:110%; background:transparent;\n}\n#exportPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\n#exportPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\n#exportPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\n#exportPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%; }\n#exportPanel textarea { width:98%;padding:0px;margin:0px;overflow:auto;font-size:8pt; }\n#exportPanel .box {\n border:1px solid black; padding:3px; margin-bottom:5px;\n background:#f8f8f8; -moz-border-radius:5px;-webkit-border-radius:5px; }\n#exportPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\n#exportPanel .rad { width:auto;border:0 }\n#exportPanel .chk { width:auto;border:0 }\n#exportPanel .btn { width:auto; }\n#exportPanel .btn1 { width:98%; }\n#exportPanel .btn2 { width:48%; }\n#exportPanel .btn3 { width:32%; }\n#exportPanel .btn4 { width:24%; }\n#exportPanel .btn5 { width:19%; }\n!end\n//}}}\n!!!Control panel HTML\n//{{{\n!html\n<!-- target path/file -->\n<div>\n<div style="float:right;padding-right:.5em">\n<input type="checkbox" style="width:auto" id="exportMerge" CHECKED\n title="combine selected tiddlers with existing tiddlers (if any) in export file"> merge\n</div>\nexport to:<br>\n<input type="text" id="exportFilename" size=40 style="width:93%"><input \n type="button" id="exportBrowse" value="..." title="select or enter a local folder/file..." style="width:5%" \n onclick="var fn=config.macros.exportTiddlers.askForFilename(this); if (fn.length) this.previousSibling.value=fn; ">\n</div>\n\n<!-- output format -->\n<div>\nformat:\n<select id="exportFormat" size=1>\n <option value="TW">TiddlyWiki HTML document (includes core code)</option>\n <option value="PS">TiddlyWiki "PureStore" HTML file (tiddler data only)</option>\n <option value="TX">TiddlyWiki plain text TXT file (tiddler source listing)</option>\n <option value="CS">Comma-Separated Value (CSV) data file</option>\n <option value="NF">RSS NewsFeed XML file</option>\n</select>\n</div>\n\n<!-- notes -->\n<div>\nnotes:<br>\n<textarea id="exportNotes" rows=3 cols=40 style="height:4em;margin-bottom:5px;" onfocus="this.select()"></textarea> \n</div>\n\n<!-- list of tiddlers -->\n<table><tr align="left"><td>\n select:\n <a href="JavaScript:;" id="exportSelectAll"\n onclick="return config.macros.exportTiddlers.process(this)" title="select all tiddlers">\n &nbsp;all&nbsp;</a>\n <a href="JavaScript:;" id="exportSelectChanges"\n onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers changed since last save">\n &nbsp;changes&nbsp;</a>\n <a href="JavaScript:;" id="exportSelectOpened"\n onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers currently being displayed">\n &nbsp;opened&nbsp;</a>\n <a href="JavaScript:;" id="exportSelectRelated"\n onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers related to the currently selected tiddlers">\n &nbsp;related&nbsp;</a>\n <a href="JavaScript:;" id="exportToggleFilter"\n onclick="return config.macros.exportTiddlers.process(this)" title="show/hide selection filter">\n &nbsp;filter&nbsp;</a>\n</td><td align="right">\n <a href="JavaScript:;" id="exportListSmaller"\n onclick="return config.macros.exportTiddlers.process(this)" title="reduce list size">\n &nbsp;&#150;&nbsp;</a>\n <a href="JavaScript:;" id="exportListLarger"\n onclick="return config.macros.exportTiddlers.process(this)" title="increase list size">\n &nbsp;+&nbsp;</a>\n</td></tr></table>\n<select id="exportList" multiple size="10" style="margin-bottom:5px;"\n onchange="config.macros.exportTiddlers.refreshList(this.selectedIndex)">\n</select><br>\n\n<!-- selection filter -->\n<div id="exportFilterPanel" style="display:none">\n<table><tr align="left"><td>\n selection filter\n</td><td align="right">\n <a href="JavaScript:;" id="exportHideFilter"\n onclick="return config.macros.exportTiddlers.process(this)" title="hide selection filter">hide</a>\n</td></tr></table>\n<div class="box">\n\n<input type="checkbox" class="chk" id="exportFilterStart" value="1"\n onclick="config.macros.exportTiddlers.showFilterFields(this)"> starting date/time<br>\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\n <select size=1 id="exportFilterStartBy"\n onchange="config.macros.exportTiddlers.showFilterFields(this);">\n <option value="0">today</option>\n <option value="1">yesterday</option>\n <option value="7">a week ago</option>\n <option value="30">a month ago</option>\n <option value="file">file date</option>\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\n </select>\n</td><td width="50%">\n <input type="text" id="exportStartDate" onfocus="this.select()"\n onchange="config.macros.exportTiddlers.$('exportFilterStartBy').value='other';">\n</td></tr></table>\n\n<input type="checkbox" class="chk" id="exportFilterEnd" value="1"\n onclick="config.macros.exportTiddlers.showFilterFields(this)"> ending date/time<br>\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\n <select size=1 id="exportFilterEndBy"\n onchange="config.macros.exportTiddlers.showFilterFields(this);">\n <option value="0">today</option>\n <option value="1">yesterday</option>\n <option value="7">a week ago</option>\n <option value="30">a month ago</option>\n <option value="file">file date</option>\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\n </select>\n</td><td width="50%">\n <input type="text" id="exportEndDate" onfocus="this.select()"\n onchange="config.macros.exportTiddlers.$('exportFilterEndBy').value='other';">\n</td></tr></table>\n\n<input type="checkbox" class="chk" id=exportFilterTags value="1"\n onclick="config.macros.exportTiddlers.showFilterFields(this)"> match tags<br>\n<input type="text" id="exportTags" onfocus="this.select()">\n\n<input type="checkbox" class="chk" id=exportFilterText value="1"\n onclick="config.macros.exportTiddlers.showFilterFields(this)"> match titles/tiddler text<br>\n<input type="text" id="exportText" onfocus="this.select()">\n\n</div> <!--box-->\n</div> <!--panel-->\n\n<!-- action buttons -->\n<div style="text-align:center">\n<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"\n id="exportFilter" value="apply filter">\n<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"\n id="exportStart" value="export tiddlers">\n<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"\n id="exportDelete" value="delete tiddlers">\n<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"\n id="exportClose" value="close">\n</div><!--center-->\n!end\n//}}}\n***/\n
merge(config.macros,{\n wordCount: {\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n createTiddlyText(place,tiddler&&tiddler.text?tiddler.text.match(/\sw+/g).length:"0");\n }\n }\n});\n
/***\n|Name:|InstantTimestampPlugin|\n|Source|http://instanttimestamp.tiddlyspot.com/|\n|Documentation|TBA|\n|Version|1.0.5 (17-Jan-2007)|\n|Author|SimonBaird|\n|License|Creative Commons Attribution-ShareAlike 2.5 License|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires|NA|\n|Overrides|NA|\n|Description|Date Stamp|\n!Description\nIf you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list:\n{{{\n* {ts} or {t} -> timestamp\n* {ds} or {d} -> datestamp\n* !ts or !t at start of line -> !!timestamp\n* !ds or !d at start of line -> !!datestamp\n}}}\n(I added the extra ! since that's how I like it. Remove it from translations below if required)\n!Notes\n* Change the timeFormat and dateFormat below to suit your preference.\n* See also AutoCorrectPlugin\n!History\n* 17-Jan-07, version 1.0.5\n** added fields param to saveTiddler method needed in TW 2.1+\n* 06-Apr-06, version 1.0.4\n** removed the AutoCorrect stuff and put it in AutoCorrectPlugin\n* 05-Apr-06, version 1.0.3\n** now have exclusion by tag and tiddler name, probably less important here than in AutoCorrectPlugin\n* 05-Apr-06, version 1.0.2\n** put matches into array to and eval them to allow generic substitutions\n* 05-Apr-06, version 1.0.1\n** added ds for datestamp as suggested by DanielBaird\n** made case insensitive\n** Added translation for !t at start of line\n* 05-Apr-06, version 1.0.0\n** written after suggestion by Achim Wessling \n!Code\n***/\n//{{{\n\nconfig.InstantTimestamp = {\n\n // adjust to suit\n timeFormat: '0DD.0MM.YY 0hh:0mm',\n dateFormat: '0DD.0MM.YY',\n\n translations: [\n [/^!ts?$/img, "'!!'+now.formatString(config.InstantTimestamp.timeFormat)"],\n [/^!ds?$/img, "'!!'+now.formatString(config.InstantTimestamp.dateFormat)"],\n [/\s{ts?\s}/ig, "now.formatString(config.InstantTimestamp.timeFormat)"],\n [/\s{ds?\s}/ig, "now.formatString(config.InstantTimestamp.dateFormat)"]\n ],\n\n excludeTags: [\n "noAutoCorrect",\n "html",\n "CSS",\n "css",\n "systemConfig",\n "zsystemConfig",\n "Plugins",\n "Plugin",\n "plugins",\n "plugin",\n "javascript",\n "code"\n ],\n\n excludeTiddlers: [\n "StyleSheet",\n "StyleSheetLayout",\n "StyleSheetColors",\n "StyleSheetPrint"\n ]\n\n}; \n\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item) {\n return (this.find(item) != null);\n };\n\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items) {\n for (var i=0;i<items.length;i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n\nTiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {\n\n tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;\n var conf = config.InstantTimestamp;\n\n if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {\n\n var now = new Date();\n var trans = config.InstantTimestamp.translations;\n for (var i=0;i<trans.length;i++) {\n newBody = newBody.replace(trans[i][0], eval(trans[i][1]));\n }\n }\n\n return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields);\n}\n\n//}}}
/***\n|Name|DcTableOfContentsPlugin|\n|Author|[[Doug Compton|http://www.zagware.com/tw/plugins.html#DcTableOfContentsPlugin]]|\n|Contributors|[[Lewcid|http://lewcid.org]], [[FND|http://devpad.tiddlyspot.com]], [[ELS|http://www.tiddlytools.com]]|\n|Source|[[FND's DevPad|http://devpad.tiddlyspot.com#DcTableOfContentsPlugin]]|\n|Version|0.4.1|\n|~CoreVersion|2.2|\n<<showtoc>>\n!Description\nThis macro will insert a table of contents reflecting the headings that are used in a tiddler and will be automatically updated when you make changes. Each item in the table of contents can be clicked on to jump to that heading. It can be used either inside of select tiddlers or inside a system wide template.\n\nA parameter can be used to show the table of contents of a seperate tiddler, &lt;<showtoc tiddlerTitle>&gt;\n\nIt will also place a link beside each header which will jump the screen to the top of the current tiddler. This will only be displayed if the current tiddler is using the &lt;<showtoc>&gt; macro.\n\nThe appearance of the table of contents and the link to jump to the top can be modified using CSS. An example of this is given below.\n\n!Usage\n!!Only in select tiddlers\nThe table of contents above is an example of how to use this macro in a tiddler. Just insert &lt;<showtoc>&gt; in a tiddler on a line by itself.\n\nIt can also display the table of contents of another tiddler by using the macro with a parameter, &lt;<showtoc tiddlerTitle>&gt;\n!!On every tiddler\nIt can also be used in a template to have it show on every tiddler. An example ViewTemplate is shown below.\n\n//{{{\n<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'>Created <span macro='view created date DD-MM-YY'></span>, updated <span macro='view modified date DD-MM-YY'></span></div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class="toc" macro='showtoc'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n//}}}\n\n!Examples\nIf you had a tiddler with the following headings:\n{{{\n!Heading1a\n!!Heading2a\n!!Heading2b\n!!!Heading3\n!Heading1b\n}}}\nthis table of contents would be automatically generated:\n* Heading1a\n** Heading2a\n** Heading2b\n*** Heading3\n* Heading1b\n!Changing how it looks\nTo modifiy the appearance, you can use CSS similiar to the below.\n//{{{\n.dcTOC ul {\n color: red;\n list-style-type: lower-roman;\n}\n.dcTOC a {\n color: green;\n border: none;\n}\n\n.dcTOC a:hover {\n background: white;\n border: solid 1px;\n}\n.dcTOCTop {\n font-size: 2em;\n color: green;\n}\n//}}}\n\n!Revision History\n!!v0.1.0 (2006-04-07)\n* initial release\n!!v0.2.0 (2006-04-10)\n* added the [top] link on headings to jump to the top of the current tiddler\n* appearance can now be customized using CSS\n* all event handlers now return false\n!!v0.3.0 (2006-04-12)\n* added the ability to show the table of contents of a seperate tiddler\n* fixed an error when a heading had a ~WikiLink in it\n!!v0.3.5 (2007-10-16)\n* updated formatter object for compatibility with TiddlyWiki v2.2 (by Lewcid)\n!!v0.4.0 (2007-11-14)\n* added toggle button for collapsing/expanding table of contents element\n* refactored documentation\n!To Do\n* code sanitizing/rewrite\n* documentation refactoring\n* use shadow tiddler for styles\n!Code\n***/\n//{{{\n\nversion.extensions.DcTableOfContentsPlugin= {\n major: 0, minor: 4, revision: 0,\n type: "macro",\n source: "http://devpad.tiddlyspot.com#DcTableOfContentsPlugin"\n};\n\n// Replace heading formatter with our own\nfor (var n=0; n<config.formatters.length; n++) {\n var format = config.formatters[n];\n if (format.name == 'heading') {\n format.handler = function(w) {\n // following two lines is the default handler\n var e = createTiddlyElement(w.output, "h" + w.matchLength);\n w.subWikifyTerm(e, this.termRegExp); //updated for TW 2.2+\n\n // Only show [top] if current tiddler is using showtoc\n if (w.tiddler && w.tiddler.isTOCInTiddler == 1) {\n // Create a container for the default CSS values\n var c = createTiddlyElement(e, "div");\n c.setAttribute("style", "font-size: 0.5em; color: blue;");\n // Create the link to jump to the top\n createTiddlyButton(c, " [top]", "Go to top of tiddler", window.scrollToTop, "dcTOCTop", null, null);\n }\n }\n break;\n }\n}\n\nconfig.macros.showtoc = {\n handler: function(place, macroName, params, wikifier, paramString, tiddler) {\n var text = "";\n var title = "";\n var myTiddler = null;\n\n // Did they pass in a tiddler?\n if (params.length) {\n title = params[0];\n myTiddler = store.getTiddler(title);\n } else {\n myTiddler = tiddler;\n }\n\n if (myTiddler == null) {\n wikify("ERROR: Could not find " + title, place);\n return;\n }\n\n var lines = myTiddler .text.split("\sn");\n myTiddler.isTOCInTiddler = 1;\n\n // Create a parent container so the TOC can be customized using CSS\n var r = createTiddlyElement(place, "div", null, "dcTOC");\n // create toggle button\n createTiddlyButton(r, "toggle", "show/collapse table of contents",\n function() { config.macros.showtoc.toggleElement(this.nextSibling); },\n "toggleButton")\n // Create a container so the TOC can be customized using CSS\n var c = createTiddlyElement(r, "div");\n\n if (lines != null) {\n for (var x=0; x<lines.length; x++) {\n var line = lines[x];\n if (line.substr(0,1) == "!") {\n // Find first non ! char\n for (var i=0; i<line.length; i++) {\n if (line.substr(i, 1) != "!") {\n break;\n }\n }\n var desc = line.substring(i);\n // Remove WikiLinks\n desc = desc.replace(/\s[\s[/g, "");\n desc = desc.replace(/\s]\s]/g, "");\n\n text += line.substr(0, i).replace(/[!]/g, '*');\n text += '<html><a href="javascript:;" onClick="window.scrollToHeading(\s'' + title + '\s', \s'' + desc+ '\s', event)">' + desc+ '</a></html>\sn';\n }\n }\n }\n wikify(text, c);\n }\n}\n\nconfig.macros.showtoc.toggleElement = function(e) {\n if(e) {\n if(e.style.display != "none") {\n e.style.display = "none";\n } else {\n e.style.display = "";\n }\n }\n};\n\nwindow.scrollToTop = function(evt) {\n if (! evt)\n var evt = window.event;\n\n var target = resolveTarget(evt);\n var tiddler = story.findContainingTiddler(target);\n\n if (! tiddler)\n return false;\n\n window.scrollTo(0, ensureVisible(tiddler));\n\n return false;\n};\n\nwindow.scrollToHeading = function(title, anchorName, evt) {\n var tiddler = null;\n\n if (! evt)\n var evt = window.event;\n\n if (title) {\n story.displayTiddler(store.getTiddler(title), title, null, false);\n tiddler = document.getElementById(story.idPrefix + title);\n } else {\n var target = resolveTarget(evt);\n tiddler = story.findContainingTiddler(target);\n }\n\n if (tiddler == null)\n return false;\n \n var children1 = tiddler.getElementsByTagName("h1");\n var children2 = tiddler.getElementsByTagName("h2");\n var children3 = tiddler.getElementsByTagName("h3");\n var children4 = tiddler.getElementsByTagName("h4");\n var children5 = tiddler.getElementsByTagName("h5");\n\n var children = new Array();\n children = children.concat(children1, children2, children3, children4, children5);\n\n for (var i = 0; i < children.length; i++) {\n for (var j = 0; j < children[i].length; j++) {\n var heading = children[i][j].innerHTML;\n\n // Remove all HTML tags\n while (heading.indexOf("<") >= 0) {\n heading = heading.substring(0, heading.indexOf("<")) + heading.substring(heading.indexOf(">") + 1);\n }\n\n // Cut off the code added in showtoc for TOP\n heading = heading.substr(0, heading.length-6);\n\n if (heading == anchorName) {\n var y = findPosY(children[i][j]);\n window.scrollTo(0,y);\n return false;\n }\n }\n }\n return false\n};\n//}}}
Click here for [[CAO Documentation |https://docs.google.com/document/d/1ugDbSj9a6dT8quM0LYV5_n641YVEbDJOmehKAUJR0Ok/edit?usp=sharing]] in Google Docs.
!!!!Thanks for submitting your application info.\nWe have received you application information and we will be getting in touch as soon as we can. Thanks for you interest in CAO.
The CAO has a few simple required coding conventions for the EAD finding aids that it searches.\n\n1) EADs that are indexed in CAO must be valid (either against the schema or the DTD) and well-formed.\n\nTo conform to the CAO search application the following conventions MUST be followed in your EAD's <eadid> tag.\n\nIn general, to ensure that your finding aids are indexed correctly, XML documents should be clean of unnecessary spaces and line breaks, especially within tags. This is not an issue if you are using a tool like the Archivists' Toolkit, Archon, ArchivesSpace, etc. to generate your EAD. If you are encoding by hand with a text editor, HTML Tidy [http://tidy.sourceforge.net/] can help to clean-up files before they are indexed by CAO. \n\nIf you use the CAO's template, you should not have an issue with unnecessary spaces and line breaks.\n\n2) In order for the "Show containers" functionality to function, the content of the <eadid> tag must be the same as the prefix of the filename of the EAD document. That is a finding aid file named: "alexander.xml", must have an <eadid> value of "alexander".\n\n<<tagging Coding>>