<!--{{{-->
<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]];}

#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>>
<html>\n<div style="width:425px;text-align:left" id="__ss_48624"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/bakerjudy/collaborative-open-online-learning" title="Collaborative Open Online Learning">Collaborative Open Online Learning</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=collaborative-open-online-learning-17486&stripped_title=collaborative-open-online-learning" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=collaborative-open-online-learning-17486&stripped_title=collaborative-open-online-learning" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/bakerjudy">Judy Baker</a>.</div></div>\n</html>
/%\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]]>>
>the notion that publishers shall retain exclusive copyrights to scientific information typically funded by public and third party organizations on an indefinite basis is not only absurd, but not in the best interests of the public at large. In this day and age, it is an anachronism that threatens the development of a sufficiently scientifically literate public at a time, when and understanding of scientific progress and principles are critical to the solution of numerous economic, social, educational and environmental problems.\n\n>The conduct of science itself and the positive reinforcement of science is impeded if scientific results can not be widely disseminated, understood, and applied. Publishers have by and large have attempted to unilaterally use the copyright process as a toll gate through which they have the deciding hand as to the cost of access to the scientific literature. \n\n[[full story at ars technica|http://arstechnica.com/tech-policy/news/2009/03/mit-to-make-all-faculty-publications-open-access.ars#comments-1-450008687931]]\n\n[[MIT News at MIT|http://web.mit.edu/newsoffice/2009/open-access-0320.html]]
[[Fedora Notes from Indiana|https://wiki.dlib.indiana.edu/confluence/display/INF/Fedora]]. \n\n[[List of front ends for Fedora|http://fedora-commons.org/confluence/display/DEV/Fedora+Tools]]\n\n[[Wisconsin Presentation|http://prezi.com/66109/]]
Are these good examples of useful subject pages?\n\n[[Value Based Management|http://www.valuebasedmanagement.net/]]\n[[Martin Ryder|http://carbon.cudenver.edu/~mryder/martin.html]]\n[[Intute|http://www.intute.ac.uk/]]
News / Links\n <html>\n <p>Below are some of the major happenings in the Archives world.</p>\n <ul>\n <li>\n <a href="http://www.archives.gov/news/">National Archives News </a>\n </li>\n <li>\n <a href="http://webtext.library.yale.edu/">Yale Finding Aids</a>\n </li>\n <li>\n <a href="http://dlib.nyu.edu/findingaids/?fq">NYU Finding Aids</a>\n </li>\n <li>\n <a href="http://diglib.princeton.edu/ead/">Princeton Finding Aids</a>\n </li>\n <li>\n <a href="http://www.archiveshub.ac.uk/">UK Archives Hub</a>\n </li>\n <li>\n <a href="http://www.columbia.edu/cu/lweb/archival/">Columbia\n University </a>\n </li>\n <li>\n <a href="http://discover.lib.umn.edu/cgi/f/findaid/findaid-idx?c=umfa;page=simple">Univsersity of Minnesota </a>\n </li>\n<li>\n <a href="hhttp://oac.cdlib.org/search.findingaid.html">Online Archive of California </a>\n </li>\n </ul>\n</html>\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//}}}
!!!!The Authoring Process\n[img[/filestore/uploads/learning/docbook1.png]]\n\n!!!!The Distribution Process\n[img[/filestore/uploads/learning/docbook2.png]]\n\n\n\n[[Using DocBook and XML Technologies to Create Adaptive Learning Content in Technical Domains1|http://www.tmrfindia.org/ijcsa/V3I27.pdf]]
My Tiddly Wiki Notes Site
[img[/filestore/uploads/research/09octmosNANOSCI.gif]]\n\nFrom [[Science Watch|http://sciencewatch.com/dr/rfm/mos/09octmosNANOSCI/]]
[[Maco Reference|http://www.tiddlywiki.org/wiki/Category:Macros]]
[[Send this to the Provost|http://chronicle.com/free/v55/i24/24a01501.htm]] This is about how other campuses are managing the "digital documents" that are being created on their campuses.
Which of the following is the ''third'' planet from the sun?\n* Venus\n* Jupiter\n* Saturn\n** Earth
/***\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
{{{\n|CssClass|k\n|!heading column 1|!heading column 2|\n|row 1, column 1|row 1, column 2|\n|row 2, column 1|row 2, column 2|\n|>|COLSPAN|\n|ROWSPAN| ... |\n|~| ... |\n|CssProperty:value;...| ... |\n|caption|c\n}}}\n''Annotation:''\n* The {{{>}}} marker creates a "colspan", causing the current cell to merge with the one to the right.\n* The {{{~}}} marker creates a "rowspan", causing the current cell to merge with the one above.\n<<<\n|CssClass|k\n|!heading column 1|!heading column 2|\n|row 1, column 1|row 1, column 2|\n|row 2, column 1|row 2, column 2|\n|>|COLSPAN|\n|ROWSPAN| ... |\n|~| ... |\n|CssProperty:value;...| ... |\n|caption|c\n<<<
[[Four Modes|http://boxesandarrows.com/view/four_modes_of_seeking_information_and_how_to_design_for_them]] at boxesandarrows.com\n\n* Known Item\n* Discovery\n* Don't Know\n* Find Again\n\n//I read this before but it's not all bad//
/*\n QuizPlugin\n\n*/\n\n/***\n|Name|QuizPlugin|\n|Description|A macro to generate an interactive quiz|\n|Source||\n|Documentation||\n|Version|0.1|\n|Author|Michael Mahemoff, Osmosoft|\n|''License:''|[[BSD open source license]]|\n|~CoreVersion|2.2|\n\nUsage:\n< < quiz > > (without any of the spaces)\nThe macro will look for all tiddlers tagged "Question". It will generate a question for each of them. The example question tiddlers in the demo self-document how to author question tiddlers.\n\nOf course, anyone can cheat by viewing source. But then, they'd be cheaters with their pants on fire.\n\nMore options in the future and a reset quiz button. Maybe even a secure tiddlyweb based server-side to save cheaters from themselves.\n***/\n\n/*{{{*/\nif(!version.extensions.QuizPlugin) {\n\n version.extensions.QuizPlugin = {installed:true};\n\n (function() {\n\n var $ = jQuery;\n jQuery.fn.attach = function(html) { return this.append(html).children(":last"); };\n\n config.macros.quiz = {\n\n init: function() {\n var stylesheet = store.getTiddlerText(tiddler.title + "##StyleSheet");\n config.shadowTiddlers["StyleSheetQuizPlugin"] = stylesheet;\n store.addNotification("StyleSheetQuizPlugin", refreshStyles);\n },\n\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n $(place).parents(".tiddler").find(".defaultCommand").removeClass("defaultCommand");\n var quizEl = $(createTiddlyElement(place, "div", null, "quiz"));\n $.each(shuffle(store.getTaggedTiddlers("question")), function(i, questionTiddler) {\n quizEl.append(buildQuestionEl(parseQuestion(questionTiddler.text)));\n });\n quizEl\n .append($("<button>check</button>").click(function() { checkQuiz(quizEl); }))\n .append($("<div class='quizStatus finale' />"));\n }\n\n };\n\n function parseQuestion(questionText) {\n var question = {\n challenge: wikifyStatic(trim(questionText.replace(/^\s*.*/mg, ""))),\n wrongOptions: questionText.match(/^\s* .*$/mg),\n rightOptions: questionText.match(/^\s*\s* .*$/mg),\n };\n for (i=0; i<question.wrongOptions.length; i++) {\n question.wrongOptions[i] = question.wrongOptions[i].replace(/^\s*+ /,"");\n }\n for (i=0; i<question.rightOptions.length; i++) {\n question.rightOptions[i] = question.rightOptions[i].replace(/^\s*+ /,"");\n }\n question.options = shuffle(question.wrongOptions.concat(question.rightOptions));\n return question;\n }\n\n function buildQuestionEl(question) {\n var questionEl = $("<div class='question'/>")\n // .append("<div class='challenge'>"+question.challenge+"</div>")\n // .append("<div class='choose'>Choose " + question.rightOptions.length + "</div>");\n .append("<div class='challenge'>"+question.challenge + " " +\n "<span class='choose'>(choose " + question.rightOptions.length + ")</span></div>");\n for (i=0; i<question.options.length; i++) {\n var isRight = (question.rightOptions.indexOf(question.options[i])!=-1);\n $("<div class='option'/>")\n .attach("<input type='checkbox' />")\n /*\n .click(function() {\n // console.log($(this).parent().siblings(".option"));\n if (! $(this).is(":checked")) return;\n var checksRemaining = question.rightOptions.length-1;\n $(this).parent().siblings(".option").find(":checkbox").each(function() {\n console.log(this);\n if ($(this).is(":checked")) {\n if (checksRemaining-- <= 0) $(this).attr("checked", false);\n }\n });\n })\n */\n .end()\n .addClass(isRight ? "right" : "wrong")\n .attach("<span>"+question.options[i]+"</span>")\n .click(function() { $(this).prev().click(); })\n .end()\n .appendTo(questionEl);\n }\n questionEl.append("<div class='status'></div>");\n return questionEl;\n }\n\n function checkQuiz(quizEl) {\n console.log("check");\n var tally = 0;\n quizEl.find(".question").each(function() {\n var isCorrect = true;\n var $question = $(this);\n $question.find(".option").each(function() {\n var optionIsRight = $(this).hasClass("right");\n var userSaysItsRight = $(this).find(":checkbox").is(":checked");\n if (optionIsRight!=userSaysItsRight) isCorrect = false;\n });\n if (isCorrect) tally++;\n $question.find(".status")\n .html(isCorrect ? "<span class='correct finale'>Correct</span>" :\n "<span class='incorrect finale'>Incorrect</span>");\n });\n var total = quizEl.find(".question").length;\n quizEl.find(".quizStatus")\n .empty()\n .append(tally + " of " + total + " correct. ")\n .append((tally==total) ? " Well done!" : "")\n .attach("<span class='pseudolink'>Reset</span>")\n .click(function() {\n $(quizEl).find(".finale").fadeOut(function() { $(this).empty(); });\n $(quizEl).find(":checkbox").attr("checked", false);\n })\n .end();\n console.log("*** reveal finale");\n revealFinale();\n }\n\n function revealFinale() {\n console.log("reveal finale");\n $(".right span").addClass("rightFinale");\n $(".finale").fadeIn();\n }\n\n function clearFinale() {\n $(".right span").removeClass("rightFinale");\n $(".finale").hide();\n }\n\n // adapted fro mhttp://jsfromhell.com/array/shuffle\n function shuffle(o) {\n for (var j, x, i = o.length; i;\n j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x)\n ;\n return o;\n }\n\n config.macros.quiz.init();\n\n function trim(s) { return s.replace(/^[ \sn\st]*/, "").replace(/[ \sn\st]*$/, ""); }\n\n })();\n\n\n/***\n!StyleSheet\n\n.quiz .finale { display: none; }\n.quiz .pseudolink { text-decoration: underline; color:[[ColorPalette::SecondaryDark]]; cursor: pointer; }\n.quizStatus { margin: 1em 0; font-weight: bold; }\n\n.question { margin: 1em 0; }\n.question .choose { font-style: italic; }\n.question .correct { color: #080; }\n.question .incorrect { color: #b00; }\n\n.option .rightness { margin-left: 0.5em; }\n.option span { cursor: pointer; }\n\n.rightFinale { font-weight: bold; text-decoration: underline; }\n\n!(end of StyleSheet)\n\n***/\n\n} // end of 'install only once'\n/*}}}*/\n
Any of the many related metadata standards.
/***\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 // 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
http://epsilon.slu.se/eindex.html
PageTemplate\nStyleSheet\nMainMenu\nDefaultTiddlers\n<<toggleSideBar>> \n
> I'm all for accepting that the gap between intent and practice will inevitably be quite wide, and that in that gap, all sorts of devils can find room to dance. It's just that those kinds of gaps also have thermals upon which angels fly. The mere existence of such gaps is not a reason to simply squat dully upon the status quo, or unchain the magic market mechanism to come along and sweep us to the promised land, nor is it reason to simply avoid discussion of what we ideally would like to see happen on the grounds that whatever we would like, unintended consequences will ensure that we never get it. - -[[Timothy Burke|http://weblogs.swarthmore.edu/burke]]
"becoming a site of coordination instead of a source of information"
config.macros.gadget = {};\n\nconfig.macros.gadget .handler = function(place,macroName,params, wikifier, paramString) {\n var elem = createTiddlyElement(place,"iframe",null,"greeting","");\n var p = paramString.parseParams(null, null, true);\n\n elem.src= "http://www.gmodules.com/ig/ifr?url=" + params[0] + "&" + getParam(p,"prefs","");\n elem.height = getParam(p,"height","200");\n elem.width= getParam(p,"width","300");\n elem.style.border= getParam(p,"border","1");\n \n place.appendChild(elem);\n};
It really is a /novelty/ but something that say "this is irrelevant"!
This is very cool \n\nhttp://www.sixtysymbols.com/\n\nhttp://nasaimages.org/index.html\n\n\n\n<html>\n<iframe id="widgetPreview" frameBorder="0" width="700px" height="350px" border="0px" style="border:0px solid white" src="http://nasaimages.org/luna/servlet/detail/nasaNAS~5~5~23245~127309:The-Earth-and-Moon?qvq=w4s:/where/Jet+Propulsion+Laboratory/;q:Earth;lc:NVA2~54~54,NVA2~47~47,NVA2~56~56,NVA2~51~51,NVA2~53~53,NVA2~49~49,NVA2~37~37,NVA2~41~41,NVA2~43~43,NVA2~39~39,NVA2~45~45,NVA2~38~38,NVA2~42~42,NVA2~44~44,NVA2~23~23,NVA2~26~26,NVA2~21~21,NVA2~30~30,NVA2~17~17,nasaNAS~20~20,NVA2~14~14,NVA2~28~28,nasaNAS~4~4,nasaNAS~5~5,NVA2~8~8,NVA2~16~16,nasaNAS~22~22,nasaNAS~13~13,NVA2~20~20,NVA2~25~25,nasaNAS~6~6,NVA2~1~1,NVA2~9~9,NVA2~27~27,NVA2~18~18,NVA2~13~13,nasaNAS~10~10,NVA2~22~22,nasaNAS~7~7,nasaNAS~8~8,nasaNAS~12~12,NVA2~29~29,NVA2~24~24,NVA2~15~15,NVA2~4~4,nasaNAS~9~9,NSVS~3~3,nasaNAS~2~2,nasaNAS~16~16,NVA2~19~19,NVA2~31~31,NVA2~32~32,NVA2~35~35,NVA2~33~33,NVA2~36~36,NVA2~34~34,NVA2~57~57,NVA2~52~52,NVA2~48~48,NVA2~50~50,NVA2~46~46,NVA2~55~55&mi=7&trs=2277&embedded=true&widgetFormat=javascript&widgetType=detail&controls=1&nsip=1" ></iframe>\n</html>
A knowledge base is just what is known about the world. It is made useful by links. Links \n\n* link knowledge to context (series of events)\n* link knowledge to other knowledge (relations)\n
<<showtoc>>\n!Heading One\nand some text \n\n!!Heading Three \nBut nested between them \n\n!!Heading Two\nAnd some more text \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
I'm going to steal this stuff from Wisconson\n* [[Data Dictionary|http://uwdcc.library.wisc.edu/resources/mmbib/DBDataDictionary.shtml]]\n* [[OAI Mapping|http://uwdcc.library.wisc.edu/resources/mmbib/OAIMapping.shtml]]\n* [[Electronic Facsimilies|http://uwdcc.library.wisc.edu/resources/efacs/EFacsDataDictionary.shtml]]\n\nPeter Gorman [[Beyond the tutorial|http://prezi.com/66109/]]
/***\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
TKL is still using PHP4. I'd like to move this to PHP5. Do I have the skills?\n\n[[This guy says he can do it in a day|http://devzone.zend.com/article/2387-XML-and-PHP-5]]\n\n\n
Seth Godin has written an interesting article about [[education|http://sethgodin.typepad.com/seths_blog/2009/08/education-at-the-crossroads.html]]\n\n* should it be free or expensive\n* should it be scarce or abundant\n* should it be about school or learning\n\nRead this post!
I was looking at behavioral economics and thought this is just the same as information behavior but it's not. Economics has years of economic theory and also years of recognition that man is more the just the [[Homo economicus|http://en.wikipedia.org/wiki/Homo_economicus]]\n\nGreed, fear, and herd instinct are the main movtivators of economic man. Can we find something like that in "information man?" \n\n* impact of making a decision\n* impact of not making a decision\n* what is everyone else doing\n* denying what is know because it will make what you do look bad\n
* MyMenu\n** [[Let's go to MIT|http://mit.edu]]\n** [[Or maybe just to Harvard|http://www.harvard.edu]]\n<<dropMenu>>
/***\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//}}}
[[SWAP|http://www.ukoln.ac.uk/repositories/digirep/index/Eprints_Application_Profile]] \n\nThis is what we're going for! This is an interesting concept. Can we work with this?\n\nI like this what can I do about it?
\n\n<html><a href="javascript:;" onclick="story.closeAllTiddlers();restart();">home</a></html>\n\n<html><a\n href="javascript:void(0)"\n onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"\n>Home</a></html> \n
* {{{<br>}}} forces a manual line break\n* {{{----}}} creates a horizontal ruler\n* [http://www.tiddlywiki.com/#HtmlEntities HTML entities]\n* {{{<<macroName>>}}} calls the respective [[macro|Macros]]\n* To hide text within a tiddler so that it is not displayed, it can be wrapped in {{{/%}}} and {{{%/}}}.<br/>This can be a useful trick for hiding drafts or annotating complex markup.\n* To prevent wiki markup from taking effect for a particular section, that section can be enclosed in three double quotes: e.g. {{{"""WikiWord"""}}}.
/***\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// %/
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
orignal tiddler: \n<slider Slider1> \n[ ] fake link 1 \n[ ]fake link 2 \n[ ] fake link 3 \n</slider> \n<slider Slider2> \n* fake link 1 \n* fake link 2 \n* fake link 3 \n</slider>
[img[/filestore/uploads/innovation/hypecycle]]
/***\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://kennison.name/work/notes\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://kennison.name/work/notes";\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 [/‘/g, "'"],\n [/’/g, "'"],\n [/“/g, '"'],\n [/”/g, '"'],\n [/…/g, '...'],\n [/–/g, ' -- ']\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) {\n displayMessage("Saving '"+title+"'...");\n newBody = replaceBodyCharacters(newBody);\n var tiddler = this.zw_saveTiddler(title,newTitle,newBody,modifier,modified,tags);\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
[img[/filestore/uploads/libraries/informationsystem.gif]]
/*\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
Contents
!!Hot Academic Jobs of the Future: Try These Fields\n\n\n\nBy LEE ROBERTS\n\nAt a time when the academic job market is looking bleak, we asked career experts and economic forecasters to predict where faculty job growth could come in the next decade. Many agreed that job prospects will be dim because of budget cuts and diminishing faculty pension funds that have made professors less likely to retire. In addition, the growing use of graduate students and adjuncts to teach classes means fewer jobs are available that are secure or financially rewarding.\n\nIf the past is any indication, it is difficult to make predictions about the faculty job market. Predictions in the late 1980s of a huge faculty shortage caused by retirements failed to come true. Still, the data suggest that large numbers of academic teaching jobs will open up in the future. Some are expected to be created by enrollment growth; others by the need to replace faculty members hired in the late 1960s and 70s to teach baby boomers.\n\nThe Bureau of Labor Statistics has projected that 662,000 faculty jobs will become available from 2006 to 2016 — 382,000 new slots, and 280,000 current jobs expected to open up. Community colleges and other institutions that offer career and technical education are expected to offer many of the new job opportunities.\n\nThe following list is not a bible, and it's certainly not scientific. But here are some of the academic fields our experts believe will be "hot" over the coming decade:\n\n!!!Green chemistry\n\nGreen chemistry focuses on eliminating the use of toxic chemicals in chemistry without stifling scientific progress. Paul T. Anastas, a Yale University chemist, founded the field in 1991. As it grows in importance, more institutions are expected to offer master's degrees and doctorates. Among the universities with green-chemistry programs are Carnegie Mellon and Yale Universities and the Universities of Oregon, Scranton, and Massachusetts at Lowell.\n\nTerry Collins, a chemistry professor at Carnegie Mellon who heads the university's Institute for Green Science, thinks the intellectual rationale for the field is strong. "It hasn't gotten a lot of federal support, but I think that's going to change," he says. One reason: Mr. Anastas has been nominated by President Obama to head the Environmental Protection Agency's Office of Research and Development.\n\n!!!Energy\n\nThreats to human society by the consumption of limited resources have sparked a race to find alternative energy sources that are sustainable, efficient, and safe for the environment. Among the leaders in this research mission is the Energy and Resources Group at the University of California at Berkeley. The interdisciplinary group has been devising technical and policy alternatives to unsustainable energy and resource use for the past 30 years.\n\nThe Energy Efficiency Center at the University of California at Davis identifies promising energy-efficient technologies and develops viable business ventures around them. Established in 2006 with a challenge grant from the state, the center focuses on transferring technology from academe to the marketplace.\n\nBoston University's Center for Energy and Environmental Studies, meanwhile, specializes in the fields of energy and environmental analysis.\n\n!!!Gerontology\n\nNot only are professors aging — everybody else is, too. The aging process will take on a more prominent role in society as the baby-boom generation ages, making studies like gerontology a growth area, says Arthur Levine, president of the Woodrow Wilson National Fellowship Foundation.\n\nThe oldest and largest school of gerontology in the world is the Davis School of Gerontology at the University of Southern California. It has conducted research in molecular biology, neuroscience, dem-ography, psychology, sociology, and public policy on aging since 1975.\n\nThe Universities of Kansas, Kentucky, Maryland at Baltimore, and Massachusetts at Boston are among those offering doctoral programs in the field.\n\n!!!Education\n\nThe Bureau of Labor Statistics projects that the number of postsecondary educational administrators will increase by 14 percent from 2006 to 2016.\n\n"The leadership turnover in education is going to be tremendous in the coming years," said Mark David Milliron, president and chief executive of Catalyze Learning International, an education-consulting group in Newland, N.C. "Folks are scrambling to fill the C-level pipeline; as a result, Ph.D.'s and Ed.D.'s are in high demand, and will be for some time."\n\n!!!Nanotechnology\n\nA nanometer, one billionth of a meter, is about 10,000 times narrower than a human hair. Nanotechnology is the study of the control of matter on an atomic and molecular scale. It has the potential to create materials and devices in fields as diverse as electronics, energy production, and medicine.\n\nAmong institutions that offer programs in the growing field are the Universities of Washington and North Carolina at Charlotte; the State University of New York at Albany; and Arizona State, Louisiana Tech, Pennsylvania State, and Rice Universities.\n\n!!!Health policy\n\nJust as gerontology will become more important as the population ages, health-related fields and health-care policy will remain vital in coming years. Some of the influential universities for health policy and management are Harvard, Johns Hopkins, and New York Universities.\n\n!!!Information technology\n\nHarry Lewis, a Harvard professor of computer science and one of the authors of Blown to Bits: Your Life, Liberty and Happiness After the Digital Explosion (Addison-Wesley, 2008), believes information technology will remain a growth area in the coming years. The Bureau of Labor Statistics agrees, projecting that among selected occupations requiring a doctoral degree, computer and information science will have one of the largest growth rates — 22 percent — from 2006 to 2016.\n\nSome of the better-known programs in information technology are those offered by the University of California at Berkeley, the Georgia Institute of Technology, the Massachusetts Institute of Technology, and Stanford University.\n\n!!!Engineering\n\nThere always seems to be a high demand for engineers of one kind or another, and the next decade should be no exception. Engineering comprises such a broad array of studies and competencies that it can lead to vastly different careers. In especially promising fields, the Bureau of Labor Statistics sees environmental engineering experiencing 25-percent growth between 2006 and 2016, and industrial and biomedical engineering each experiencing about 20-percent growth in that time.\n
!!!Stop Using\n* standards\n* schemas\n\n!!!Start Using\n* abstract model\n* metadata format / syntax\n* metadata vocabulary\n* application profile\n\n[[Problems in using simple dublin core|http://www.ukoln.ac.uk/repositories/digirep/index/Issues_with_current_use_of_simple_DC]]\n\n[[Overview of metadata from Austrailia|http://www.rubric.edu.au/packages/RUBRIC_Toolkit/docs/Metadata.htm]]\n\n\n[[SMPTE|http://www.smpte-ra.org/diffuser/mg-diffuser.php]]\nThis is the one for me. It organizes the elements in what appears to be a logical group and sequence\n\nhttp://www.library.unt.edu/digitalprojects/\nhttp://www.library.unt.edu/digitalprojects/metadata/quick-view\nhttp://www.smpte-ra.org/diffuser/mg-diffuser.php
* [[UNT Projects Page|http://www.library.unt.edu/digitalprojects/]]\n* [[UNT Quick Metadata|http://www.library.unt.edu/digitalprojects/metadata/quick-view]]\n* [[SMPTE|http://www.smpte-ra.org/diffuser/mg-diffuser.php]]\n* [[Esicdoc Metadata Schemas|http://metadata.mpdl.mpg.de/escidoc/metadata/schemas/0.1/]]\n* [[Standards|http://www.jiscdigitalmedia.ac.uk/crossmedia/advice/putting-things-in-order-links-to-metadata-schemas-and-related-standards/]]\n* [[OpenURL and DC|http://www.ariadne.ac.uk/issue27/metadata/]]\n* [[PBCore|http://www.pbcore.org/]]\n\nhttp://www.intute.ac.uk/publications/rdn-ltsn-ap/
>I think the more challenging problems are in how to reuse applications, how to compose a site out of different applications, how to handle auth, how to handle styling, how to make sure sites stay up without intervention, how to keep them backed up, how to deploy them and develop them, how to make them accessible to designers, how to make them hackable by new users... these more mushy issues are the big ones.
* DefaultTiddlers\n* MainMenu\n* SiteSubtitle\n* SiteTitle\n* SiteUrl
Why good data models matter.\n<html><img src="http://upload.wikimedia.org/wikipedia/commons/f/f3/3-4_Data_model_roles.jpg"></html>\n\nSource: http://en.wikipedia.org/wiki/File:3-4_Data_model_roles.jpg\n\n
!!!!Understanding your data is the most important thing!\nYou've got to be able to move your data from anywhere //TO// anywhere\n\n[[Move generic xml to fedora xml (from Austrailia)|http://rubric.edu.au/techreports/migration_toolkit.htm]]
http://weblogs.swarthmore.edu/burke/permanent-features-advice-on-academia/21st-century-college/\n\n>1) The haphazard, disconnected curricular design of both liberal arts colleges and research universities, both the range of subjects covered and the connections between areas of study. Rather than glossing over the relationship between integrative and specialized knowledge and trusting everything to turn out for the best, as most conventional liberal arts colleges do, or actively favoring specialized knowledge, as most research universities do, this curriculum proposes a much more consciously and rigorously organized relationship between integrative and specialized knowledge and between academic study and practical know-how. This is my own response to the kinds of curricular incoherence identified so expertly by Gerald Graff in his book Clueless in Academe, which I strongly recommend to both students and other academics.\n\n>2) The insular, timid and self-confirming character of a great deal of contemporary academic practice. This outline responds to this both by widening the labor pool of potential instructors and by systematically directing faculty towards communicating with wider publics while also demanding that faculty broaden their knowledge and intellectual practice rather than narrowing themselves towards more and more inward-looking forms of specialization. Rather than the laissez-faire spirit of most contemporary academic institutions, in which generalism is only one of many options for professional development and a responsibility to wider public discourse and needs is not a requirement, the 21st Century College would make these central conditions of continued employment. As part of this reorganization, this blueprint also advises the abolition of conventional academic departments and units.\n\n>3) The rise of the expensive "full-service" model of higher education coupled with the pervasive resurgence of in loco parentis, of the college or university as "nanny" determined to manage most aspects of community life and ethos. This blueprint counsels abandoning the vast majority of services provided by most colleges and universities while also maintaining a scrupulous disinterest in the private lives of students, faculty and administrators.
<tabs mytabs>\n<tab Introduction>\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc dolor elit, sollicitudin vel, suscipit vitae, pretium quis, ante. Fusce dapibus. Maecenas non eros. Fusce venenatis est ac eros. Integer vitae metus. In luctus dolor sed tortor. Nam leo. Ut dapibus vehicula tellus. Aenean laoreet pretium urna. Maecenas suscipit, velit sit amet laoreet varius, ligula mi lacinia ligula, sit amet semper ipsum nulla id arcu. Nam vel nisi. Integer at neque eget mi ullamcorper aliquet. Mauris dignissim orci. Vestibulum ornare iaculis elit. Duis eu orci nec nisl pulvinar lobortis. Nunc diam mi, porta quis, accumsan sed, dapibus id, nibh. Cras vel metus. \n</tab>\n\n<tab Links>\n[[Let's Go to MIT|http://mit.edu]]\n[[Let's Go to Harvard|http://harvard.edu]]\n</tab>\n<tab Databases for this topic>\nThis is my third tab\nwith more than one line\n</tab>\n\n<tab Reference Works for this topic>\n[[CINAHL with Full Text|http://library.wcsu.edu/cgi-bin/go_db.py?db=Cinahl]]\n\n CINAHL is an acronym for Cumulated Index to Nursing and Allied Health Literature. CINAHL with Full Text is the world's most comprehensive source of current full text (up-to-the-minute content with no embargo*) for nursing & allied health journals, providing full text for more than 600 journals indexed in CINAHL. The database is designed to meet the information needs of nursing and allied health professionals. This premier database is recommended as a first choice for nursing research.\n\nCINAHL contains more than 1,000,000 item records dating back to 1982. It provides complete coverage of English-language nursing journals and publications from the National League for Nursing and the American Nurses' Association. CINAHL covers nursing, biomedicine, health sciences librarianship, alternative/complementary medicine, consumer health and 17 allied health disciplines. Examples of titles offered in CINAHL include: AANA Journal, Gastroenterology Nursing, Maternal and Child Health Journal, Paediatric Nursing, Parents, etc.\n\nCINAHL with Full Text also includes the Pre-CINAHL dataset. Pre-CINAHL is intended to provide current awareness of new journal articles, and is a collection of records that provide basic bibliographic information before they are indexed with CINAHL Headings.\n\nIn addition, this database offers access to health care books, nursing dissertations, selected conference proceedings, standards of practice, educational software, audiovisuals and book chapters. Searchable cited references for more than 1,150 journals are also included. Full text material includes more than 70 journals plus legal cases, clinical innovations, critical paths, drug records, research instruments and clinical trials.\n</tab>\n\n</tabs>\n
{{{\n {{{\n preformatted (e.g. code)\n }}}\n}}}\n<<<\n{{{\npreformatted (e.g. code)\n}}}\n<<<\n
<html>\n <p>Here is a tabulated &quot;compare and contrast&quot; of <a href="http://dbpedia.org/resource/World_Wide_Web">Web</a> usage patterns 1.0, 2.0, and 3.0.</p> \n \n<table width="715" height="286" border="1"> \n \n <tr> \n \n <td> </td> \n \n <td><strong>Web 1.0</strong></td> \n \n <td><strong>Web 2.0</strong></td> \n \n <td><strong>Web 3.0</strong></td> \n </tr> \n \n <tr> \n \n <td><strong>Simple Definition</strong></td> \n \n <td>Interactive / Visual Web</td> \n \n <td>Programmable Web</td> \n \n <td><a href="http://dbpedia.org/resource/Linked_Data" id="link-id117a9a98">Linked Data</a> <a href="http://dbpedia.org/resource/Giant_Global_Graph" id="link-id146bcdb0">Web</a></td> \n </tr> \n \n <tr> \n \n <td><strong>Unit of Presence</strong></td> \n \n <td>Web Page</td> \n \n <td>Web Service Endpoint</td> \n \n <td><a href="http://en.wikipedia.org/wiki/Data_Spaces" id="link-id11a66c60">Data Space</a> (named structured data enclave)</td> \n </tr> \n \n <tr> \n \n <td><strong>Unit of Value Exchange</strong></td> \n \n <td>Page <a href="http://dbpedia.org/resource/Uniform_Resource_Locator" id="link-id146083f8">URL</a></td> \n \n <td>Endpoint URL for API</td> \n \n <td>Resource / <a href="http://dbpedia.org/resource/Entity" id="link-id121b2148">Entity</a> / Object <a href="http://dbpedia.org/resource/Uniform_Resource_Identifier" id="link-id1467ed00">URI</a></td> \n </tr> \n \n <tr> \n \n <td><strong>Data Granularity</strong></td> \n \n <td>Low (HTML)</td> \n \n <td>Medium (XML)</td> \n \n <td>High (RDF)</td> \n </tr> \n \n <tr> \n \n <td><strong>Defining Services</strong></td> \n \n <td>Search </td> \n \n <td>Community (Blogs to Social Networks) </td> \n \n <td>Find</td> \n </tr> \n \n <tr> \n \n <td><strong>Participation Quotient</strong></td> \n \n <td>Low</td> \n \n <td>Medium</td> \n \n <td>High</td> \n </tr> \n \n <tr> \n \n <td><strong>Serendipitous Discovery Quotient </strong></td> \n \n <td>Low</td> \n \n <td>Medium</td> \n \n <td>High</td> \n </tr> \n \n <tr> \n \n <td><strong>Data Referencability Quotient </strong></td> \n \n <td>Low (Documents)</td> \n \n <td>Medium (Documents)</td> \n \n <td>High (Documents and their constituent Data)</td> \n </tr> \n \n <tr> \n \n <td><strong>Subjectivity Quotient</strong></td> \n \n <td>High</td> \n \n <td>Medium (from A-list bloggers to select source and partner lists)</td> \n \n <td>Low (everything is discovered via URIs)</td> \n </tr> \n \n <tr> \n \n <td> \n <strong><a href="http://dbpedia.org/resource/Transclusion" id="link-id0x179b09f0">Transclusence</a> \n </strong></td> \n \n <td>Low</td> \n \n <td>Medium (Code driven Mashups)</td> \n \n <td>HIgh (Data driven Meshups)</td> \n </tr> \n \n <tr> \n \n <td><strong>What You See Is What You Prefer (WYSIWYP)</strong></td> \n \n <td>Low</td> \n \n <td>Medium </td> \n \n <td>High (negotiated representation of resource descriptions)</td> \n </tr> \n \n <tr> \n \n <td><strong>Open Data Access (Data Accessibility)</strong></td> \n \n <td>Low</td> \n \n <td>Medium (Silos)</td> \n \n <td>High (no Silos)</td> \n </tr> \n \n <tr> \n \n <td><strong>Identity Issues Handling</strong></td> \n \n <td>Low</td> \n \n <td>Medium (<a href="http://dbpedia.org/resource/OpenID" id="link-id119d77f8">OpenID</a>)</td> \n \n <td><p>High (<a href="http://esw.w3.org/topic/foaf+ssl" id="link-id135cc348">FOAF+SSL</a>)</p></td> \n </tr> \n \n <tr> \n \n <td><strong>Solution Deployment Model</strong></td> \n \n <td>Centralized</td> \n \n <td>Centralized with sprinklings of Federation</td> \n \n <td>Federated with function specific Centralization (e.g. Lookup hubs like <a href="http://community.linkeddata.org/dataspace/organization/lod#this" id="link-id1496d1d0">LOD</a> Cloud or <a href="http://dbpedia.org/resource/DBpedia" id="link-id1571f690">DBpedia</a>)</td> \n </tr> \n <tr> \n <td><strong>Data Model Orientation</strong></td> \n <td>Logical (Tree based DOM)</td> \n <td>Logical (Tree based XML)</td> \n <td>Conceptual (Graph based RDF)</td> \n </tr> \n <tr> \n <td><strong>User Interface Issues</strong></td> \n <td>Dynamically generated static interfaces</td> \n <td>Dyanically generated interafaces with semi-dynamic interfaces (courtesy of XSLT or <a href="http://dbpedia.org/resource/XQuery" id="link-id118399e8">XQuery</a>/<a href="http://dbpedia.org/resource/XPath" id="link-id14b00ba0">XPath</a>)</td> \n <td>Dynamic Interfaces (pre- and post-generation) courtesy of self-describing nature of RDF</td> \n </tr> \n <tr> \n <td><strong>Data Querying</strong></td> \n <td><a href="http://dbpedia.org/resource/Full_text_search" id="link-id14fdd948">Full Text Search</a></td> \n <td>Full Text Search</td> \n <td>Full Text Search + Structured Graph Pattern Query Language (<a href="http://dbpedia.org/resource/SPARQL" id="link-id154a9368">SPARQL</a>)</td> \n </tr> \n <tr> \n <td><strong>What Each Delivers</strong></td> \n <td>Democratized Publishing</td> \n <td>Democratized Journalism &amp; Commentary (Citizen Journalists &amp; Commentators)</td> \n <td>Democratized Analysis (Citizen Data Analysts)</td> \n </tr> \n</table> \n</html>\n\n[[http://www.openlinksw.com/blog/kidehen@openlinksw.com/blog/?id=1531|]]
[[In this article|http://www.insidehighered.com/views/2009/04/13/george]] Mary George of Princeton talks about student understanding of the research process.\n>My concern arises not from a general suspicion that students are engaging in what I call WIGWAM research (Wikipedia Internet, Google, Without Anything More), but from what students themselves have been telling me for decades. It is clear from e-mail, reference encounters, research consultations in my office, and questions that arise in library instruction sessions, that most students simply do not retain the concepts and logic involved in discovering information sources never mind the principles for evaluating the sources they do turn up. Even students whom I've counseled extensively in the past, and whose projects turned out well, seem clueless the very next semester when they face a research assignment in a different course.\n\nIf students are so bad at using systems what does it matter about what state our library systems are in. \n\n!!!Links about new media and students attention\nhttp://english.ttu.edu/KAIROS/11.2/topoi/purdy-walker/introduction/introduction.htm\nhttp://media08.wordpress.com/2008/01/17/my-article-on-hyper-and-deep-attention/
[img[filestore/uploads/libraries/minn-services.png]]\n\n[[Academic Support Services from Minnisota|http://conservancy.umn.edu/handle/5540]]\nThis could be very useful in trying to go forward. \n\n[[Eric Lease Morgan's Food for thought|http://pln.palinet.org/wiki/index.php/Future_catalogs:_food_for_thought]]\n
Is this important?\n\nWhat do we need to know about it?
[[Images|http://www.ukoln.ac.uk/repositories/digirep/index/The_Images_Application_Profile]]\n\n[[Overview|http://colab.mpdl.mpg.de/mediawiki/DC_Application_Profile]]\n\n[[From the Max Planck Digital Library|http://metadata.mpdl.mpg.de/escidoc/metadata/schemas/0.1/]]
/***\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//}}}
[img[filestore/uploads/webservices/aussie2.jpg]]\n\nFrom a word document\n\n[img[filestore/uploads/webservices/australian-model.png]]
Powered by [[TiddlyWiki|http://tiddlywiki.org]] and [[Zope|http://zope.org]]
[img[/images/getSmart.png]]\n\nThis shot comes from a paper referenced by Carl Lagoze [[What Is a Digital Library Anyway? Beyond Search and Access in the NSDL|http://www.dlib.org/dlib/november05/lagoze/11lagoze.html]] The concept is that digital objects have to be integrated into learning. Can anyone say [[Topic Maps]]?
What makes a portal a portal? The fact that information (data) from various sources is aggregated!\n\nAre we sure this is what we mean?
Why should there be more than one library?
/***\n|''Name:''|JsDoIt|\n|''Version:''|1.0.1|\n|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|\n|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|\n|''Type:''|Macro extension|\n|''Required:''|TiddlyWiki 2.0.0|\n!Description\nJsDoIt lets you execute Javascript executable codes immediately when you click on a JsDoIt macro button.\n!Syntax\n{{{<<}}}JsDoIt {label} {prompt} {jsEntity} [[jsEntity2] [jsEntity3] ... [jsEntityN]]{{{>>}}}\nparameters:\n* label - caption text of the JsDoIt button\n* prompt - tip text of the JsDoIt button\n* jsEntity - javascript that would be executed\n** javascript code - begin with ''javascript:''\n** javascript tiddler - tiddler that contains javascript code\n** external javascript source - including URIs and local files\n!Example & Demo\n* execute javascript code(s):\n<<<\n{{{<<JsDoIt 'click me!' 'execute javascript code' 'javascript:alert("Hello world!");'>>}}}\n<<JsDoIt 'click me!' 'execute javascript code' 'javascript:alert("Hello world!");'>>\n<<<\n* execute javascript tiddler(s):\n<<<\n{{{<<JsDoIt 'click me!' 'execute javascript tiddler(s)' 'code1.js' 'code2.js'>>}}}\n<<JsDoIt 'click me!' 'execute javascript tiddler(s)' 'code1.js' 'code2.js'>>\n<<<\n* execute external javascript source\n<<<\n{{{<<JsDoIt 'click me!' 'execute external javascript' 'external.js'>>}}}\n<<JsDoIt 'click me!' 'execute external javascript' 'external.js'>>\n{{{<<JsDoIt 'click me!' 'execute external javascript' 'http://aiddlywiki.sourceforge.net/external.js'>>}}}\n<<JsDoIt 'click me!' 'execute external javascript' 'http://aiddlywiki.sourceforge.net/external.js'>>\n<<<\n!Revision history\n*v1.0.1 (2006/1/6)\n**fixed for(var key in params){} problem\n*v1.0.0 (2006/1/4)\n**Initial release\n!Code\n***/\n//{{{\nconfig.macros.JsDoIt = {major: 1, minor: 0, revision: 1, date: new Date(2006,1,6)};\nconfig.macros.JsDoIt.handler = function(place,macroName,params,wikifier,allParams,tiddler){\n if(params.length<=2){ throw 'not enough parameters'; }\n var button = createTiddlyButton(place, params[0], params[1]);\n button.onclick = function(){\n for(var paramIndex=2; paramIndex<params.length; paramIndex++){\n var p=params[paramIndex];\n if(p.trim().search(/javascript:/gi)===0){\n eval(p.trim().replace(/javascript:/gi,''));\n }else{\n var t=store.getTiddler(p);\n if(t){\n eval(t.text);\n }else{\n var rs=document.createElement('script');\n rs.type = 'text/javascript';\n rs.src = p.trim();\n try{\n document.body.appendChild(rs);\n document.body.removeChild(rs);\n }catch(e){\n displayMessage('load ' + p + ' error: ' + e);\n }\n }\n }\n }\n };\n};\n//}}}
[img[filestore/uploads/webservices/client-realm.png]]\n[img[filestore/uploads/webservices/channel-realm.png]]\n[img[filestore/uploads/webservices/corporate-realm.png]]\n\n
Background: #fff\nForeground: #000\nPrimaryPale: #8cf\nPrimaryLight: #18f\nPrimaryMid: #04b\nPrimaryDark: #014\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88
\n!!!Hierachial Catalog (tufts people)\nhttp://www.dlib.org/dlib/october05/crane/10crane.html\n\n!!!How to use Zope 3 in 2 (from Plone)\nhttp://plone.org/documentation/tutorial/embrace-and-extend-the-zope-3-way/tutorial-all-pages\n\n!!! Wiki Use\nhttp://thinkubator.ccsp.sfu.ca/reg\nhttp://thinkubator.ccsp.sfu.ca/wikis/onwikis/CMS/export\nThis was interesting and he uses zwiki. His point was that if you can get people to use the wiki (low barrier, low structure) the content itself starts to shape itself. \n\n!!!Attention Structures 2009-9-22\nhttp://digitalhumanities.org/dhq/vol/3/2/000049.html ''Added:'' <<today>>\n\n\n!!!How to use the ZODB 2009-11-17\nhttp://docs.zope.org/zodb/articles/index.html
!An Example of How Applications and Repositories Work Together\n\n[img[/filestore/uploads/repositories/images/repository-apps.png]]\n\n!!!Build Your Apps First!\nYou need to build your apps first. These are what satisfies the needs of your patrons. These apps need to be pretty smart though. They have to provide:\n* ~OAI-PMH (Dublin Core)\n* ~OAI-ORE\n* ATOM\n* RDF\n* and always more\n\n!!!Repositories\nRepositories come afterward and are behind the scenes. They provide:\n* Search across applications\n* Preservation\n* Mashup Data from multiple applications\n* Content for new applications\n\n!!!Storage Solutions\nSomeday we may have to start thinking about that but not now. \n\n!!!Service Oriented Architecture\nThis really doesn't have a service orientation but rather a ''multiple'' application focus.
!!From Andy Powell ```[[Andy Powell JISC as a set of services|http://www.ukoln.ac.uk/distributed-systems/jisc-ie/arch/soa/jisc-ie-soa.pdf]]```\n\nThe following sections list the abstract services that are likely to be offered by the \nservice components shown in the JISC IE diagram above, describe each of those \nabstract services, and finally list the specific 'service bindings' associated with those \nabstract services (corresponding to the standards and protocols listed in the JISC IE \nStandards Framework). \n;In this context, an abstract service is: \n:An identifiable portion of a business process. An abstract service includes a description of its functional scope, and an abstract model of its behavior and data.\n;And a service binding is: \n:A specific instantiation of an abstract service. A service binding elaborates on an abstract service by providing all of the following which are applicable: 1) a specific data representation; 2) an Application Programming Interface (API) specification; and 3) a Web service specification. \n\n!!6.1 Mapping JISC IE service components to abstract services \nThis section lists the abstract services that are likely to be offered by each of the \nservice components shown on the JISC IE diagram above (plus one or two others). \n\n!!!Content provider / repository \nStores, manages and makes available content, metadata and/or news channels. \n* Search interface \n* Harvest interface \n* News channel \n* Deposit interface \n* Delete interface \n* Obtain interface \n\n!!!Broker \nPasses search requests on to one or more remote search interfaces (typically those \noffered by content providers / repositories) in parallel, combines the results and \nreturns them to the requester. \n* Search interface \n\n!!!Aggregator \nGathers metadata records from one or more remote harvest interfaces or news \nchannels (typically those offered by content providers / repositories) and offers \nthem for searching or harvesting by others or as an aggregated news channel. \n* Harvest interface \n* Search interface \n* News channel \n\n!!!Catalogue \nStores, manages and makes available metadata records (typically human-generated) \nabout content held elsewhere. \n* Harvest interface \n* Search interface \n* News channel \n* Metadata deposit interface \n* Delete interface \n\n!!!Index \nUses Web robots or other techniques to gather content held elsewhere and indexes it \nfor searching by others. \n* Search interface \n\n!!!OpenURL link server \nThe target of an OpenURL link. (Also known as an OpenURL resolver.) Offers links \nto content and other information based on the metadata carried on the OpenURL. \n* OpenURL interface \n\n!!!Portal \nProvides a personalised, single point of access to a range of heterogeneous network \nservices, local and remote, structured and unstructured. Portal functionality often \nincludes resource discovery, email access and online discussion fora. Portals are \nintended for (human) end-users using common Web 'standards' such as HTTP, \nHTML, Java and JavaScript. \n* None \n\n!!!VLE \nA Virtual Learning Environment. (Also known as a Learning Management System.) \nOffers a range of functionality that supports teachers, lecturers, tutors and learnings \nin their teaching and learning activities. \n* None (though VLE with integrated learning object repository may offer the \ncontent provider services above) \n\n!!!Authentication/authorisation (Athens) \nAn authentication service component determines whether the real-world individual \nwho has the rights to use it is using the digital ID being presented to a network \nservice. This is often achieved through the use of a username/password \ncombination or a digital certificate, depending on the degree of assurance required. \nAn authorisation service component indicates whether a particular real-world \nindividual has the necessary access-rights to access a particular resource. \n * Authentication service \n \n!!!Authorisation service \nThis functionality is combined in the Athens service, but this is not the case in other \nsystems such as Shibboleth. \n\n!!!Collection registry \nStores, manages and makes available descriptions of collections (i.e. the collections \nof content being made available by content providers / repositories). \n* Collection description search interface \n* Collection description harvest interface \n* News channel \n* Collection description deposit interface \n* Delete interface \n \n!!!Service registry \nStores, manages and makes available descriptions of the services being offered on \nthe network by other service components. \n* Service description search interface \n* Service description harvest interface \n* News channel \n* Service description deposit interface \n* Delete interface \nNote that the JISC IESR shared 'service registry' service component currently \ncombines Collection Registry and Service Registry functionality into a single service \ncomponent known as the IESR. \n\n!!!Metadata schema registry \nStores, manages and makes available descriptions of the metadata schemas in use by \nother service components. Typically some combination of metadata semantics and \nsyntax will be described. \n* Metadata schema search interface \n* Metadata schema harvest interface \n* News channel \n* Metadata schema deposit interface \n* Delete interface \n\n!!!Identifier service component \nStores, manages and resolves identifiers. \n* Identifier resolver \n* Identifier search interface \n* Identifier harvest interface \n* Identifier deposit interface \n* Delete interface \n\n!!!Institutional profiling service component \nStores, manages and makes available institutional profiles (descriptions institutional \npreferences such as their preferred e-journal suppliers, licensing agreements in \nplace, etc.). \n* Institutional profile search interface \n* Institutional profile harvest interface \n* News channel \n* Institutional profile deposit interface \n* Delete interface \n\n!!!Terminology service component \nStores, manages and makes available vocabularies (ontologies, classification \nschemes, thesauri and/or other controlled vocabularies) and provides terminology- \nrelated services, such as mapping a term from one controlled vocabulary to another \nor expanding terms within a thesaurus. \n* Vocabulary search interface \n* Vocabulary harvest interface \n* News channel \n* Vocabulary deposit interface \n* Delete interface \n* Terminology service \n\n!!!Ratings and annotation service component \nStores, manages and makes available user-supplied ratings and annotations about \ncontent held elsewhere. \n* Ratings search interface \n* Ratings harvest interface \n* Ratings deposit interface \n* Ratings delete interface \n* Annotations search interface \n* Annotations harvest interface \n* Annotations deposit interface \n* Delete interface \n\n!!!User preferences service component \nStores, manages and makes available user preferences (typically for the purposes of \npersonalising other service components). \n* User preferences search interface \n* User preferences harvest interface \n* User preferences deposit interface \n* Delete interface \nNote that for data protection and other operational reasons, a user preferences \nservice component is unlikely to be a suitable candidate for a 'shared service' and is \nmore likely to be offered within the confines of a single institution. \n\n!!!Terms and conditions service component \nProvides information about the terms and conditions associated with a resource. \n* Licence search interface \n* Licence harvest interface \n* Licence deposit interface \n* Delete interface \nAs noted above, this list of services is not exhaustive. There will be a wide range of \nother service developed and offered on the network, either globally, as national \nshared services or within specific institutions. Examples include automatic \ndocument classification and metadata generation services, packaging and \nunpackaging services, format conversion services, validation services, reading list \nservices, bookmarking services, etc., etc. \n
http://www.davidleeking.com/2007/07/05/basic-competencies-of-a-20-librarian/\n\nIf this is the list it's hopeless!
[[This|http://www.easybib.com/]] is pretty easy. It has lots of different formats. Check it out.
[[Current Work and Notes]]\n\nhttp://www.youtube.com/watch?v=wwAAUFFD6js&feature=related\n\n<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Q946sfGLxm4&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Q946sfGLxm4&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></html>\n\n\n>Paul Saffo often repeats this simple dictum: "Never mistake a clear view for a short distance."\n\nLibrarianship has always been about information organization and navigation, quality assessment, and facilitation of discovery and learning. These still remain but the medium (digital and web) has changed. \n\n\nLibraries must:\n* support creation of text and data (knowledge production)\n* connect communities both inside the university and out\n* curate / preserve digital objects\n\nWe need an infrastructure that will support the above. (Rick Luce)\n\nLibrary as the Accelerator of Discovery (Ways of Knowing)\n\n>the library as accelerator, where information is sought, communicated, shared, tagged, and mined \n\n>the most important educational function is the inculcation of a disposition toward technological innovation and a critical sense of how technology can serve and advance an organization's mission. \n\n>Beyond mere access, faculty also view the intelligent management of information as part of their own working practices, bringing with them concerns with repositories, privacy, copyright, and migration across time and distance. Research publications now take many forms that tax previous understandings of process and protocol. Librarianship surely has a vital function in this.\n\n> we must educate new professionals to be comfortable with technology, to be competent enough to participate in the design of new tools and services, and to have the necessary knowledge to evaluate their offerings in terms of how well they meet users' needs. \n\n(Andrew Dillion)\n\n\n>digitized material, for example, would require implementation of much more sophisticated indexing, searching, and filteringtechniques, including broad application of computational linguistic and related statistical techniques as well as sophisticated techniques for filtering based on markup and thesauri, which would relate results to discipline- based concepts and concerns. Above all, there will be growing demand for mechanisms to link search results flexibly across systems in ways that resemble but will be fundamentally different from metasearching across catalogs\n\n(Don Waters)\n\n>our visual language is evolving faster than our written or our spoken word\n\n>What we need is a culture of performance generated by a sense of shared commitment.\n\n[[As We May Think|http://www.theatlantic.com/doc/194507/bush]]\n\n[[The Use of Knowledge In Society|http://www.econlib.org/library/Essays/hykKnw1.html]]\n\n[[Transformational Times -ACRL Report|/documents/filestore/transformational_times.pdf]]\n\n[[No brief candle|http://www.clir.org/pubs/reports/pub142/pub142.pdf]]
These are the major parts of Zope. You need to understand them all to make it work. The question is can there be few parts? Undoubledly but at what cost. I saw this list and asked myself if I understood all these parts (not!0?\n\n* access control, authentication.\n* security, roles and permissions, Workflow.\n* data storage, ZODB, ZEO, SQLAdapters.\n* traversing, ZPublisher, VirtualHostMonster.\n* content types, OFS types (Old Zope), CMS Types, AT Types, Calendaring. Content Type Translations (html -> txt etc.), Version Control.\n* form handling\n* css structure, resource registry.\n* Templating, zpt, dtml, python scripts, portal_skins.\n* Editing content, stx, rest, html, kupu, ajax.\n* Data Querying, ZCatalog, SQLAdapters.\n* Language support, PlacelessTranslationService, PloneLanguageTool.\n* Mail Handling\n* Product Installation\n\nList from http://mxm-mad-science.blogspot.com/search/label/zope\n\nWhile making the bullets I thought this would make a good outline when you are composing a team. Who, and how many of these areas can you cover?\n\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//}}}
<<formTiddler MyFormTemplate>>\n\n<test>can you store brackets in here</test>\n\n<<ziddlyversion>>\n<<showData>>\n\n<script label="Click Here" show>\n var tiddlerName = story.findContainingTiddler(place).id.substr(7);\n t = store.getTiddler(tiddlerName)\n var title = t.title\n var newTitle = t.title\n var newBody = t.text\n var modifier = t.modifier\n var modified = new Date()\n var tags = t.tags\n store.saveTiddler(title, newTitle, newBody, modifier, modified, tags)\n</script><data>{"firstname":"Brian","lastname":"Kennison","email":"kennisonb@wcsu.edu","phone":"(203) 835-8847","address":"473 Weekeepeemee Road","city":"Woodbury","state":"CT","zip":"06798","country":"USA","webpage":"http://kennison.name","notes":"Can this be the end!"}</data>
* html .tiddler {height:1%;}\n\nbody {font-size: .85em; font-family:arial,helvetica; margin:0; padding:0;}\n\nh1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}\nh1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}\nh4,h5,h6 {margin-top:1em;}\nh1 {font-size:1.35em;}\nh2 {font-size:1.25em;}\nh3 {font-size:1.1em;}\nh4 {font-size:1em;}\nh5 {font-size:.9em;}\n\nhr {height:1px;}\n\na {text-decoration:none;}\n\ndt {font-weight:bold;}\n\nol {list-style-type:decimal;}\nol ol {list-style-type:lower-alpha;}\nol ol ol {list-style-type:lower-roman;}\nol ol ol ol {list-style-type:decimal;}\nol ol ol ol ol {list-style-type:lower-alpha;}\nol ol ol ol ol ol {list-style-type:lower-roman;}\nol ol ol ol ol ol ol {list-style-type:decimal;}\n\n.txtOptionInput {width:11em;}\n\n#contentWrapper .chkOptionInput {border:0;}\n\n.externalLink {text-decoration:underline;}\n\n.indent {margin-left:3em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.tiddlyLinkExisting {font-weight:bold;}\n.tiddlyLinkNonExisting {font-style:italic;}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */\na.tiddlyLinkNonExisting.shadow {font-weight:bold;}\n\n#mainMenu .tiddlyLinkExisting,\n #mainMenu .tiddlyLinkNonExisting,\n #sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}\n#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}\n\n.header {position:relative;}\n.header a:hover {background:transparent;}\n.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}\n.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}\n\n.siteTitle {font-size:3em;}\n.siteSubtitle {font-size:1.2em;}\n\n#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}\n\n#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}\n#sidebarOptions {padding-top:0.3em;}\n#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}\n#sidebarOptions input {margin:0.4em 0.5em;}\n#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}\n#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}\n#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}\n#sidebarTabs .tabContents {width:15em; overflow:hidden;}\n\n.wizard {padding:0.1em 1em 0em 2em;}\n.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}\n.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}\n.wizardStep {padding:1em 1em 1em 1em;}\n.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}\n.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}\n.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}\n.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}\n\n#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}\n.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}\n#messageArea a {text-decoration:underline;}\n\n.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}\n.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}\n\n.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}\n.popup .popupMessage {padding:0.4em;}\n.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}\n.popup li.disabled {padding:0.4em;}\n.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}\n.listBreak {font-size:1px; line-height:1px;}\n.listBreak div {margin:2px 0;}\n\n.tabset {padding:1em 0em 0em 0.5em;}\n.tab {margin:0em 0em 0em 0.25em; padding:2px;}\n.tabContents {padding:0.5em;}\n.tabContents ul, .tabContents ol {margin:0; padding:0;}\n.txtMainTab .tabContents li {list-style:none;}\n.tabContents li.listLink { margin-left:.75em;}\n\n#contentWrapper {display:block;}\n#splashScreen {display:none;}\n\n#displayArea {margin:1em 17em 0em 14em;}\n\n.toolbar {text-align:right; font-size:.9em;}\n\n.tiddler {padding:1em 1em 0em 1em;}\n\n.missing .viewer,.missing .title {font-style:italic;}\n\n.title {font-size:1.6em; font-weight:bold;}\n\n.missing .subtitle {display:none;}\n.subtitle {font-size:1.1em;}\n\n.tiddler .button {padding:0.2em 0.4em;}\n\n.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}\n.isTag .tagging {display:block;}\n.tagged {margin:0.5em; float:right;}\n.tagging, .tagged {font-size:0.9em; padding:0.25em;}\n.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}\n.tagClear {clear:both;}\n\n.footer {font-size:.9em;}\n.footer li {display:inline;}\n\n.annotation {padding:0.5em; margin:0.5em;}\n\n* html .viewer pre {width:99%; padding:0 0 1em 0;}\n.viewer {line-height:1.4em; padding-top:0.5em;}\n.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}\n.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}\n.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}\n\n.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}\n.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}\ntable.listView {font-size:0.85em; margin:0.8em 1.0em;}\ntable.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}\n\n.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}\n.viewer code {font-size:1.2em; line-height:1.4em;}\n\n.editor {font-size:1.1em;}\n.editor input, .editor textarea {display:block; width:100%; font:inherit;}\n.editorFooter {padding:0.25em 0em; font-size:.9em;}\n.editorFooter .button {padding-top:0px; padding-bottom:0px;}\n\n.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}\n\n.sparkline {line-height:1em;}\n.sparktick {outline:0;}\n\n.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}\n.zoomer div {padding:1em;}\n\n* html #backstage {width:99%;}\n* html #backstageArea {width:99%;}\n#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}\n#backstageToolbar {position:relative;}\n#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}\n#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}\n#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}\n#backstage {position:relative; width:100%; z-index:50;}\n#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}\n.backstagePanelFooter {padding-top:0.2em; float:right;}\n.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}\n#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}\n\n.whenBackstage {display:none;}\n.backstageVisible .whenBackstage {display:block;}
Six Major Sections \n*METS Header\n* Descriptive Metadata*\n* Administrative Metadata*\n* File Groups\n* Structural Map\n* Behavior Section*\n \nMay be internal to METS document as XML Schema and/or external to METS document in any format.\n\n \n\n
[[Digital Collections Unit |http://digital.lib.umn.edu/dcu-diglibs.phtml]] at the University of Minnesota. They use the software developed at Michigan but they have a pretty good handle on things.
{{{\n<?xml version="1.0" encoding="UTF-8"?><untl:metadata xmlns:untl="http://digitalprojects.library.unt.edu/">\n <untl:title qualifier="officialtitle">[Mexico]</untl:title>\n <untl:creator qualifier="aut">\n <type>per</type>\n <name>Becher, Carl Christian</name>\n </untl:creator>\n <untl:publisher>\n <name>Perthes &amp; Besser</name>\n <location>Hamburg</location>\n </untl:publisher>\n <untl:date qualifier="creation">1834</untl:date>\n <untl:date qualifier="digitized">2007-09-17</untl:date>\n <untl:language>ger</untl:language>\n <untl:description qualifier="content">The map that accompanies the book, Mexico in den ereignissvollen Jahren 1832 und 1833 und die Reise hin und zur&#252;ck ... nebst mercantilischen und statistischen Notizen.</untl:description>\n <untl:subject qualifier="LCSH">Mexico -- Description and travel.</untl:subject>\n <untl:subject qualifier="LCSH">Mexico -- History -- 1821-1861.</untl:subject>\n <untl:subject qualifier="UNTL-BS">Places - Mexico</untl:subject>\n <untl:primarySource>1</untl:primarySource>\n <untl:coverage qualifier="placeName">Mexico</untl:coverage>\n <untl:coverage qualifier="timePeriod">mex-tex</untl:coverage>\n <untl:coverage qualifier="date">1834</untl:coverage>\n <untl:coverage qualifier="sDate">1832</untl:coverage>\n <untl:coverage qualifier="eDate">1833</untl:coverage>\n <untl:relation>Map from Mexico in den ereignissvollen Jahren 1832 und 1833 und die Reise hin und zuru&#776;ck ... nebst mercantilischen und statistischen Notizen, von C. C. Becher.</untl:relation>\n <untl:collection>THC</untl:collection>\n <untl:institution>UTA</untl:institution>\n <untl:rights qualifier="access">public</untl:rights>\n <untl:rights qualifier="license">by-nc-nd</untl:rights>\n <untl:resourceType>image_map</untl:resourceType>\n <untl:format>image</untl:format>\n <untl:identifier qualifier="CALL-NO">AY 73 .N47 N4</untl:identifier>\n <untl:identifier qualifier="OCLC">6083275</untl:identifier>\n <untl:note qualifier="nonDisplay">digitalObjectCreator: Eggers, Leah\ndigitalObjectCreatorEmail: leggers@library.unt.edu\n\ncomment: dlb</untl:note>\n <untl:note qualifier="digitalPreservation">creationAppName: Adobe Photoshop\ncreationAppVersion: 7\ncreationHardware: Zeutschel OS 10000\n</untl:note>\n <untl:meta qualifier="objectMasterSize">77841464</untl:meta>\n <untl:meta qualifier="ark">ark:/67531/metapth28591</untl:meta>\n <untl:meta qualifier="meta-id">meta-pth-28591</untl:meta>\n <untl:meta qualifier="meta-id">meta-pcc-d5dc3251-6d3e-11dc-b211-001676c922db</untl:meta>\n <untl:meta qualifier="metadataCreator">mphillips</untl:meta>\n <untl:meta qualifier="metadataCreationDate">2007-09-27, 21:15:55</untl:meta>\n <untl:meta qualifier="metadataModifier">dbelden</untl:meta>\n <untl:meta qualifier="metadataModificationDate">2007-10-04, 08:52:30</untl:meta>\n <untl:meta qualifier="system">PTH</untl:meta>\n <untl:meta qualifier="TKLPath">/data/UTA</untl:meta>\n</untl:metadata>\n}}}
http://mitpress.mit.edu/books/chapters/Future_of_Learning.pdf\n\nThis is going to happen at WCSU?
Andy Powell has posted a [[piece|http://efoundations.typepad.com/efoundations/2009/10/a-couple-of-useful-dublin-core-rdf-usage-patterns.html#comments]] about how simple dublin core has progressed. It not as simple as it was but it is still not all that hard. The question is how to you produce it, using a stripped down model inside and then generating a full blown mode for exchange. You just have to make sure you have all the information there from the start.
[[Project Information Literacy|http://projectinfolit.org/]] from the University of Washington
Powered by [[ZiddlyWiki|http://ziddlywiki.com]]\n
http://icom.museum/vlmp/usa.html
On February 1, 2010 11:35:30 AM EST, brian imported 1 tiddler from\n[[http://kennison.name/notes|http://kennison.name/notes]]:\n<<<\n#[[Adding Value]] - added\n<<<\n\n----\nOn August 18, 2009 4:36:16 PM EDT, brian imported 1 tiddler from\n[[http://kennison.name/notes/|http://kennison.name/notes/]]:\n<<<\n#[[Recursively chmod directories only]] - added\n<<<\n
<script src="http://www.gmodules.com/ig/ifr?url=http://www.gingagadgets.com/redbarn/redbarn.xml&amp;up_title=Red%20Barn&amp;up_tags=red%2Cbarn&amp;up_tags_mode=all&amp;up_per_new=50&amp;up_pause=20000&amp;synd=open&amp;w=320&amp;h=280&amp;title=__UP_title__&amp;border=%23ffffff%7C0px%2C1px+solid+%23993333%7C0px%2C1px+solid+%23bb5555%7C0px%2C1px+solid+%23DD7777%7C0px%2C2px+solid+%23EE8888&amp;output=js"></script>
[[The new type of learner and why the university must change|http://www.edge.org/3rd_culture/tapscott09/tapscott09_index.html]]\n\nThe International Journal of Digital Curation \n
Basically tiddlers about build web sites.
* http://www.freewebsitetemplates.com/preview/media/ (modern but not too busy)\n* http://www.freewebsitetemplates.com/preview/architecture/\n* http://www.freewebsitetemplates.com/preview/hardwarestore/\n* http://www.freewebsitetemplates.com/preview/template28/ (interesting)\n* http://www.soros.org/initiatives (not great but a possibility)\n\nhttp://www.iriss.org.uk/ (steal this?)
The image below shows how the management of digital assets is not one monolithic software piece but made up of many components and and layers. \n\n[img[http://kennison.name/work/wiki/uploads/digilib.jpg]]\n\n!!! Beyond Search\nIf you really want to get wild think about how we can make this happen!\n\n<<tiddler "Beyond Search towards Learning" >>\n\n
[img[/filestore/images/SoaringCollegeTuitions-NYTimes-12-3-08.gif]]
<!--{{{--> \n<link rel="alternate" type="application/rss+xml" title="RSS" href="?format=xml" /> \n<!--}}}-->
*The apathy of the academic, scientific, and information communities coupled with the indifference or even active hostility of many publishers renders literature-data-driven science still inaccessible.* -Peter Murray-Rust ![1]\n*A library is thought in cold storage.* - Herbert Samuel ![2]\n\n[1] Murray-Rust P (2007) *Data-driven science-A scientist's view.* NSF/JSC Repositories Workshop. Available: http://www.sis.pitt.edu/~repwkshop/papers/murray.html Accessed 5 January 2008\n[2] http://www.bookbrowse.com/quotes/detail/index.cfm?quote_number=140 <i> I haven't found the source</i>\n\n\n>The purchaser role was described in the survey by the statement the library pays for resources I need, from academic journals to books to electronic databases, the archive role by the library serves as a repository of resources in other words, it archives, preserves, and keeps track of resources,and the gateway role by the library is a starting point or gateway for locating information for my research.\n\n>Additionally, more scholars at the largest institutions currently feel a significant level of dependence on the library than at smaller institutions, and all expect this pattern to continue into the future. -- Ithaka Study\n\n>The classroom is a model that communicates what is known; the lab, in contrast, is a model that explores what is not yet known. -- George Siemans\n\nCan we substitute library for lab?
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
!!!The Web in the beginning\n[img[/filestore/uploads/webservices/webstack1.png]]\n\n!!!The Web at 10\n[img[http://KenSall.com/big-picture/bigpix22.gif]]\n[[The big picture web page|http://KenSall.com/big-picture/bigpix22.html]]\n\n!!!Another View of Some Current Standards\n[img[http://www.cyberrealities.co.uk/assets/Services/_resampled/ResizedImage500344-W3C-Technology-Stack.png]]
>We believe that true convergence requires an acceptance of common professional values, including evidence-based and reflective practice.\n\n<<wordCount>> words
/***\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----\nPluginManager\n
{{{\n<?xml version="1.0"?>\n<!--*******************************************************************************************************************************************-->\n<!-- FOXML REFERENCE EXAMPLE OBJECT: --> <!-- This is an example\nof a FOXML encoded digital object as it would appear in the Fedora\npersistent storage area. -->\n<!--*******************************************************************************************************************************************-->\n<!-- The digitalObject root element contains the object PID, which\nuniquely identifies the Fedora object -->\n<!--*******************************************************************************************************************************************-->\n<foxml:digitalObject xmlns:foxml="info:fedora/fedora-system:def/foxml#"\nxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" PID="demo:999"\nxsi:schemaLocation="info:fedora/fedora-system:def/foxml#\nhttp://www.fedora.info/definitions/1/0/foxml1-0.xsd">\n <!---***************************************************************************************************************************************\n FEDORA OBJECT PROPERTIES : non-versionable properties of the\n digital object At ingest, the object MUST have these attributes:\n - type:(required) The object is classified as one of three\n primitive Fedora object types,\n namely FedoraObject, FedoraBDefObject, or FedoraBMechObject\n - state:(required) The object state can be Active (A),\n Inactive (I), or Deleted (D)\n\n And at ingest, it may have these optional attributes:\n - label: (optional) The object is given a user-defined\n descriptive label. - contentModel: (optional) The object\n is given user-defined content model identifier\n (to classify the pattern of\n datastreams and disseminations\n found in this object).\n\n The system will automatically assign these attributes (they\n should not be put in the ingest files, but they appear in stored\n files):\n - createdDate: (system assigned) The object creation date\n is assigned to the millisecond. - lastModifiedDate:(system\n assigned) The object creation date is assigned to the\n millisecond.\n******************************************************************************************************************************************-->\n <foxml:objectProperties>\n <foxml:property NAME="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"\n VALUE="FedoraObject"/> <foxml:property\n NAME="info:fedora/fedora-system:def/model#state" VALUE="A"/>\n <foxml:property NAME="info:fedora/fedora-system:def/model#label"\n VALUE="FOXML Reference Example"/> <foxml:property\n NAME="info:fedora/fedora-system:def/model#contentModel"\n VALUE="TEST_IMAGE"/> <foxml:property\n NAME="info:fedora/fedora-system:def/model#createdDate"\n VALUE="2004-12-10T00:21:58.000Z"/> <foxml:property\n NAME="info:fedora/fedora-system:def/view#lastModifiedDate"\n VALUE="2005-01-20T22:46:07.506Z"/> <!-- EXTENSIBLE OBJECT\n PROPERTIES --> <!-- These are optional, user-defined object\n properties, for example an OAI identifier for the object. -->\n <!-- Fedora will store these, but it will not recognize them\n or operate on them. --> <foxml:extproperty\n NAME="http://www.openarchives.org/OAI/1.1/oai-identifier.xsd"\n VALUE="oai:cornell.edu:demo:999"/>\n </foxml:objectProperties>\n <!--*******************************************************************************************************************************************\n FEDORA RESERVED DATASTREAM: DUBLIN CORE METADATA FOR OBJECT:\n This datastream is always recognized by Fedora by the\n reserved datastream identifier of "DC".\n Fedora will automatically index the DC datastream as part\n of the default repository catalog search,\n and also as part of the new RDF-based Resource Index.\n *********************************************************************************************************************************************-->\n <foxml:datastream ID="DC" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">\n <foxml:datastreamVersion ID="DC.0" MIMETYPE="text/xml"\n LABEL="Default Dublin Core Record" SIZE="488"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:xmlContent>\n <oai_dc:dc\n xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"\n xmlns:dc="http://purl.org/dc/elements/1.1/">\n <dc:title>FOXML Reference Object</dc:title> <dc:creator>Sandy\n Payette</dc:creator> <dc:subject>Fedora\n documentation</dc:subject> <dc:description>FOXML showing\n how a digital object is encoded for persistent storage\n in a Fedora repository</dc:description> <dc:publisher>Cornell\n CIS</dc:publisher> <dc:identifier>demo:999</dc:identifier>\n </oai_dc:dc>\n </foxml:xmlContent>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--*******************************************************************************************************************************************\n FEDORA RESERVED DATASTREAM: OBJECT-TO-OBJECT RELATIONSHIPS\n This datastream is always recognized by Fedora by the\n reserved datastream identifier of "RELS-EXT". The RELS-EXT\n datastream is used to make assertions about the relationship\n of this digital object to other digital objects. Assertions\n are made in RDF. Relationships can be asserted from the\n default Fedora relationship namespace or other namespaces.\n Fedora will automatically index this datastream as part of\n the new RDF-based Resource Index. The RELS-EXT datastream\n is validated by Fedora.\n *************************************************************************************************************************************************\n See the RDF Schema for the default Fedora relationships at:\n http://www.fedora.info/definitions/1/0/fedora-rels.rdfs See\n the "Fedora Relationship Metadata Guide" in the system\n documentation for specific constraints and syntax rules.\n *************************************************************************************************************************************************\n Below, the RDF <Description> element declares that the\n asserted relationships are about "this" digital object since\n its rdf:about attribute points to the Fedora URI for this\n object. (Fedora URIs are PIDs prepended with "info:fedora/").\n See system documentation for more information about Fedora\n URIs. Below, there are two relationships from the fedora\n namespace to indicate that this object is a member of two\n different collections. For each relationship assertion, the\n rdf:resource attribute must contain the URI of another\n Fedora object that this object is related to. For example,\n there exists a Fedora object known as\n "info:fedora/test:collection1" that represents a specific\n collection.\n *******************************************************************************************************************************************-->\n <foxml:datastream ID="RELS-EXT" CONTROL_GROUP="X">\n <foxml:datastreamVersion ID="RELS-EXT.0" MIMETYPE="text/xml"\n LABEL="Fedora Object-to-Object Relationship Metadata" SIZE="752"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:xmlContent>\n <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\n xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"\n xmlns:fedora="info:fedora/fedora-system:def/relations-external#"\n xmlns:myns="http://www.nsdl.org/ontologies/relationships#"\n xmlns:dc="http://purl.org/dc/elements/1.1/"\n xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/">\n <rdf:Description rdf:about="info:fedora/demo:999">\n <!-- This object ("info:fedora/demo:999") is a member\n of Collection #1 (info:fedora/test:collection1) -->\n <fedora:isMemberOfCollection\n rdf:resource="info:fedora/test:collection1"/> <!-- ...\n and it is also a member of Collection #2\n (info:fedora/test:collection2) --> <fedora:isMemberOfCollection\n rdf:resource="info:fedora/test:collection2"/> <!-- You\n can also make your own relationship assertions in your\n own namespace...--> <myns:isPartOf\n rdf:resource="info:fedora/mystuff:100"/>\n </rdf:Description>\n </rdf:RDF>\n </foxml:xmlContent>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--**************************************************************************************************************************************\n DATASTREAMS (notice the four different kinds of datastreams\n supported by Fedora)\n *******************************************************************************************************************************************\n Notice that Fedora will automatically keep track of different\n versions of a datastream. Datastreams are versioned whenever\n modifications are made via API-M\n\n At ingest, each datastream MUST have following attributes:\n - ID (required) a unique identifier\n for the datastream within this object. User can provide\n it,\n or if not provided, the system will\n assign one.\n - STATE (Required) The datastream state can be\n Active (A), Inactive (I), or Deleted (D) - CONTROL_GROUP\n (required) indicates the kind of datastream, either\n Externally Referenced Content (E),\n Redirected Content (R), Managed\n Content (M) or Inline XML (X)\n - MIME (required per version) user-assigned\n MIME type of the bytestream referred to by the\n contentLocation URL\n\n And at ingest, it may have these optional attributes:\n - LABEL (optional per version) user-assigned\n descriptive label for the datastream - ALT_IDS\n (optional per version) user-assigned set of alternative\n identifiers for the datastream,\n with the identifiers separated by\n spaces\n - FORMAT_URI (optional per version) user-assigned\n URI used to identify the media type of the bytestream\n referred to by the contentLocation\n URL (more specific than MIME type)\n - SIZE (optional per version) size of the\n bytestream referred to by the contentLocation.\n User can provide it, or Fedora can\n be configured to calculate it.\n\n The system will assign these attributes (they should not\n be put in the ingest file):\n - VERSIONABLE (system-assigned) a true/false\n indication as to whether the datastream should\n be versioned by the Fedora repository\n service. In Fedora 2.0, all\n datastreams are set to VERSIONABLE="true".\n In a future release, selective\n datastream versioning will be enabled\n and this attribute can then be\n user-assigned.\n - CREATED (system-assigned per version)\n creation date for the datastream version, to the\n millisecond\n *******************************************************************************************************************************************\n DATASTREAM (E): This datastream demonstrates "Externally\n Referenced Content" (see attribute CONTROL_GROUP=E). The\n contentLocation element points to content on a external web\n server (meaning the content is not under the custodianship\n of the Fedora repository). When repository access requests\n are made for this datastream, the content bytestream will\n be mediated by the Fedora repository service, meaning that\n Fedora will get the content and return it to the client.\n The client will not be aware of the true URL of the content.\n Notice that the datastream\n *******************************************************************************************************************************************-->\n <foxml:datastream CONTROL_GROUP="E" ID="IMAGE" STATE="A"\n VERSIONABLE="true">\n <foxml:datastreamVersion ID="IMAGE.0" MIMETYPE="image/x-mrsid-image"\n LABEL="Image of Pavilion III, University of Virginia"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:contentLocation\n REF="http://iris.lib.virginia.edu/mrsid/mrsid_images/iva/archerp01.sid"\n TYPE="URL"/>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--*******************************************************************************************************************************************\n DATASTREAM (R): This datastream demonstrates "Redirected\n Referenced Content" (see attribute CONTROL_GROUP=R). Like\n the E datastream above, the contentLocation points to content\n on a external web server. However, in this case, when\n repository access requests are made for this datastream,\n the repository will redirect the client to this URL, and\n will not mediate the streaming of the content. This is\n particularly useful when the content is a streaming media\n file, or for complex, animated web pages where streaming\n through the Fedora server may cause lossiness. (The .jpg\n image is not a great motivating example of the "R" datastream,\n but it just used in this example.)\n *******************************************************************************************************************************************-->\n <foxml:datastream CONTROL_GROUP="R" ID="DRAWING-BEST" STATE="A"\n VERSIONABLE="true">\n <foxml:datastreamVersion ID="DRAWING-BEST.0" MIMETYPE="image/jpeg"\n LABEL="Architectural Drawing Pavilion III (veryhigh res)"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:contentLocation\n REF="http://icarus.lib.virginia.edu/images/iva/archerd05high.jpg"\n TYPE="URL"/>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--*******************************************************************************************************************************************\n DATASTREAM (M): This datastream demonstrates "Managed\n Content" (see attribute CONTROL_GROUP=M). This is an\n example of a datastream whose content bytestream is under\n the direct custodianship of the Fedora repository. Notice\n that the contentLocation points to an internal identifier\n instead of a URL. The content is actually stored in the\n repository's persistent storage area. When Fedora access\n requests are made for this datastream, the repository service\n retrieves the content from its own persistent storage area.\n\n It is worth noting that prior to iingest into the repository,\n this datastream was specified with a contentLocation URL\n pointing to an external source. You can see this contentLocation\n URLs commented out below. Since this datastream is marked\n as CONTROL_GROUP=M, the repository service must store the\n bytestream inside the repository. Therefore, when this\n object was ingested, the Fedora repository service called\n back to this URL to obtain the content for local storage.\n Once the content was stored, the orignial URL was replaced\n with the Fedora internal identifier depicted below. See\n the "Fedora Ingest and Export Guide" in the system documentation\n for more details on encoding ingest files.\n *******************************************************************************************************************************************-->\n <foxml:datastream CONTROL_GROUP="M" ID="DRAWING-BETTER" STATE="A"\n VERSIONABLE="true">\n <foxml:datastreamVersion ID="DRAWING-BETTER.0" MIMETYPE="image/jpeg"\n LABEL="Architectural Drawing Pavilion III (med res)"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:contentLocation\n REF="http://icarus.lib.virginia.edu/images/iva/archerd05medium1.jpg"\n TYPE="URL"/> <!-- <foxml:contentLocation\n REF="demo:999+DRAWING-BETTER+DRAWING-BETTER.0" TYPE="INTERNAL_ID"/>\n -->\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--*******************************************************************************************************************************************\n DATASTREAM (M): (with multiple versions) This datastream\n also demonstrates "Managed Content" (see attribute\n CONTROL_GROUP=M).\n\n Notice in the example below the datastream has two versions.\n In the second version the datastream label was changed and\n an alternate identifier was added. Fedora access requests\n can be given date-time stamps to retrieve the appropriate\n version.\n *******************************************************************************************************************************************-->\n <foxml:datastream CONTROL_GROUP="M" ID="DRAWING-ICON" STATE="A"\n VERSIONABLE="true">\n <foxml:datastreamVersion ID="DRAWING-ICON.0" MIMETYPE="image/jpeg"\n LABEL="Architectural Drawing Pavilion III"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:contentLocation\n REF="http://icarus.lib.virginia.edu/images/iva/archerd05small.jpg"\n TYPE="URL"/>\n </foxml:datastreamVersion> <foxml:datastreamVersion ID="DRAWING-ICON.1"\n MIMETYPE="image/jpeg" LABEL="Architectural Drawing Pavilion III\n (thumbnail icon)" ALT_IDS="doi:10.1234/123"\n CREATED="2005-01-20T22:46:07.428Z">\n <foxml:contentLocation\n REF="http://icarus.lib.virginia.edu/images/iva/archerd05small.jpg"\n TYPE="URL"/>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--*******************************************************************************************************************************************\n DATASTREAM (X): This datastream demonstrates "Inlined XML\n Content" (see attribute CONTROL_GROUP=X). This type of\n datastream is used when it is desirable to have XML content\n "inlined" within the digital object XML wrapper itself.\n Notice that there is no contentLocation element pointing\n to a content URL; instead there is a block of XML wrapped\n by the <xmlContent> element.\n **********************************************************************************************************************************************-->\n <foxml:datastream ID="UVATECH" STATE="A" CONTROL_GROUP="X"\n VERSIONABLE="true">\n <foxml:datastreamVersion ID="UVATECH.0" MIMETYPE="text/xml"\n FORMAT_URI="info:fedora/format:xml:uvalibadmin" LABEL="UVA\n Technical Metadata Record" SIZE="556"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:xmlContent>\n <uvalibadmin:admin\n xmlns:uvalibadmin="http://virginia.lib.edu/uvalibadmin:tech">\n <uvalibadmin:technical>\n <uvalibadmin:format>image/jpeg</uvalibadmin:format>\n <uvalibadmin:compression>LZW</uvalibadmin:compression>\n <uvalibadmin:bitDepth BITS=""/> <uvalibadmin:colorSpace/>\n <uvalibadmin:colorProfile CPLOCAT="" CPFILE=""/>\n <uvalibadmin:resolution>600</uvalibadmin:resolution>\n </uvalibadmin:technical>\n </uvalibadmin:admin>\n </foxml:xmlContent>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--*******************************************************************************************************************************************\n EXPERIMENTAL DATASTREAM: FEDORA RESERVED DATASTREAM FOR\n INNER OBJECT RELATIONSHIP METADATA This datastream demonstrates\n datastream-to-datastream relationships in this object,\n expressed as RDF. The sample datastream shows how to assert\n that the "UVATECH" datastream is metadata about the "DRAWING"\n datastream. Unlike the RELS-EXT datastream, the RDF is NOT\n validated by Fedora (since RELS-INT is still experimental).\n Clients can provide a RELS-INT datastream if they want one,\n but the Fedora repository will not operate on it at this\n time.\n *******************************************************************************************************************************************-->\n <foxml:datastream ID="RELS-INT" STATE="A" CONTROL_GROUP="X"\n VERSIONABLE="false">\n <foxml:datastreamVersion ID="RELS-INT.0" MIMETYPE="text/xml"\n LABEL="Fedora Internal Object Relationship Metadata"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:xmlContent>\n <!-- Note: it is up to the object owner to ensure that\n these relationships are maintained as the object changes.-->\n <!-- Fedora does not ensure referential integrity of RELS-INT\n assertions at this time. --> <rdf:RDF\n xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\n xmlns:relsint="info:fedora/fedora-system:def/relations-internal#"\n xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">\n <relsint:Datastream rdf:about="info:fedora/demo:999/UVATECH">\n <relsint:adminMetadataFor\n rdf:resource="info:fedora/demo:999/DRAWING"/>\n </relsint:Datastream>\n </rdf:RDF>\n </foxml:xmlContent>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!--*******************************************************************************************************************************************\n SYSTEM-CONTROLLED AUDIT TRAIL DATASTREAM The Fedora repository\n system will automatically create an audit trail of changes\n made to the digital object. An audit record will be added\n for each API-M operation that changes the object.\n The system creates and updates this special audit trail\n datastream and prevents any client from modifying it.\n *******************************************************************************************************************************************-->\n <foxml:datastream CONTROL_GROUP="X" ID="AUDIT" STATE="A"\n VERSIONABLE="false">\n <foxml:datastreamVersion CREATED="2004-12-10T00:21:58.000Z"\n FORMAT_URI="info:fedora/fedora-system:format/xml.fedora.audit"\n ID="AUDIT.0" LABEL="Fedora Object Audit Trail" MIMETYPE="text/xml">\n <foxml:xmlContent>\n <audit:auditTrail\n xmlns:audit="info:fedora/fedora-system:def/audit#">\n <audit:record ID="AUDREC1"><audit:process type="Fedora\n API-M"/><audit:action>modifyDatastreamByReference</audit:action><audit:componentID>DRAWING-ICON</audit:componentID><audit:responsibility>fedoraAdmin</audit:responsibility><audit:date>2005-01-20T22:46:07.428Z</audit:date><audit:justification>changed\n the datastream label and added an alternate\n identifier.</audit:justification>/&gt;\n </audit:record>\n </audit:auditTrail>\n </foxml:xmlContent>\n </foxml:datastreamVersion>\n </foxml:datastream>\n <!---******************************************************************************************************************************************\n CUSTOM DISSEMINATORS: Note that the Fedora repository system\n provides a default disseminator for each object. The default\n disseminator is dynamically associated with every object,\n thus it does not appear explicitly in the FOXML encoding\n of the object. The <disseminator> element is used to\n specifying special-purpose disseminators that extend the\n object's default access points. See the Fedora system\n documenation for a full discussion of Disseminators and\n their utility.\n\n At ingest, each Disseminator MUST have following attributes:\n - ID (required) a unique identifier\n for the disseminatoar within this object. User can\n provide it,\n or if not provided, the system\n will assign one.\n - BDEF_CONTRACT_PID (required) - STATE (required)\n The datastream state can be Active (A), Inactive (I),\n or Deleted (D) - BMECH_SERVICE_PID (required per\n version)\n\n And, at ingest, it must have a serviceInputMap element to\n define one or more datastreams inputs to the BMECH service:\n - DATASTREAM_ID (required) the unique identifier of a\n datastream that should be an input parm to the service\n - KEY (required) the input parm name\n that the datastream should be associated with.\n (The name of this key is defined\n in the object named by the\n BMECH_SERVICE_PID.)\n - LABEL (optional) a label to describe the\n nature of the input binding - ORDER (optional)\n if there are multiple datastream inputs defined, and\n they have an intrinsic order,\n then this contains an integer\n indicating sequence number.\n\n The system will assign these attributes (they should not\n be put in the ingest file):\n - VERSIONABLE (system-assigned) true/false\n indication as to whether the datastream should be\n versioned by\n the Fedora repository service. In\n Fedora 2.0, all datastreams are set\n to VERSIONABLE="true". In a future\n release, selective datastream\n versioning will be enabled and this\n attribute can then be user-assigned.\n - CREATED (system-assigned per version)\n creation date for the datastream version, to the\n millisecond\n *******************************************************************************************************************************************\n\n DISSEMINATOR 1: Provides "virtual representations" of this\n object. A virtual representation of an object is a view\n of the object that is created by a service operation. In\n this case, different renditions of the IMAGE datastream of\n this object can be obtained at runtime by via the operations\n defined by this disseminator.\n\n Note that on the disseminator, the BDEF_CONTRACT_PID attribute\n is used to identify the desired set of extended operations\n to produce virtual representations of this object at runtime\n (requested via API-A and API-A-LITE). These operations\n have abstract definitions that are stored in a special\n Fedora digital object (in this case a FedoraBDefObject known\n as demo:8). So, the set of extended operations that produce\n "virtual representations" get associated with this digital\n object in a by-reference manner. Naming a BDEF_CONTRACT_PID\n on a disseminator is analogous to identifying a particular\n abstract service interface to be associated with this digital\n object.\n\n The BMECH_SERVICE_PID attribute (on the disseminatorVersion\n element) is used to identify a specific service that runs\n the abstract operations of the BDEF_CONTRACT_PID. The\n service binding information is stored in a special Fedora\n digital object (in this case a FedoraBMechObject know\n as demo:9). The service binding information is specified\n using the Web Service Description Language (WSDL), which\n the Fedora repository services uses to figure out how to\n dispatch requests to an external web service that will\n produce the dynamic views of this digital object. The\n BMECH_SERVICE_PID is kind of like identifying a particular\n implementation of an abstract interface.\n\n Note that the BMECH_SERVICE_PID attribute is at the\n disseminatorVersion level. This means you could modify a\n disseminator to point to a different service implementation\n (i.e., represented by a different BMECH_SERVICE_PID), and\n this information would be captured in a new version of this\n disseminator. Both versions would implement the same BDEF\n contract. A change to the BMECH_SERVICE_PID essentially\n means that the repository will use a "new" implementation\n of the service that implements the BDEF contract. Below,\n a new disseminator version is depicted below, but it is\n commented out since the new service implementation is\n hypothetical ("i.e., newservice:100").\n *******************************************************************************************************************************************-->\n <foxml:disseminator ID="DISS1" BDEF_CONTRACT_PID="demo:8" STATE="A"\n VERSIONABLE="true">\n <foxml:disseminatorVersion ID="DISS1.0" BMECH_SERVICE_PID="demo:9"\n LABEL="Disseminator to provide dynamic views of a MRSID image"\n CREATED="2004-12-10T00:21:58.000Z">\n <foxml:serviceInputMap>\n <foxml:datastreamBinding DATASTREAM_ID="IMAGE" KEY="MRSID"\n LABEL="The IMAGE datastream serves as input to the MRSID\n service" ORDER="0"/>\n </foxml:serviceInputMap>\n </foxml:disseminatorVersion> <!--\n <foxml:disseminatorVersion ID="DISS1.1"\n BMECH_SERVICE_PID="newservice:100" LABEL="Disseminator with\n a better MRSID service" CREATED="2005-01-20T22:46:08.001Z">\n <foxml:serviceInputMap>\n <foxml:datastreamBinding DATASTREAM_ID="IMAGE"\n KEY="MRSID" LABEL="The IMAGE datastream serves as\n input to the MRSID service" ORDER="0"/>\n </foxml:serviceInputMap>\n </foxml:disseminatorVersion> -->\n </foxml:disseminator>\n</foxml:digitalObject>\n}}}
>The problem they're scared of isn't falling prices, it's falling consumption. Or in an economy reliant on growth, even static consumption. So we must consume ever more. Consumption grows above income, so we have to borrow. Over time, the borrowing grows into a bubble that can never be repaid, leaving the lenders to take heavy losses. But we can't stop borrowing ever more against illusory future income, because then we stop spending, and that's the bogeyman deflation.\n
>...but there are many use cases where separating the content production from its delivery would be a very good idea. \n\nThe above is talking about Plone but I have been thinking about Zope and XML. Somethings we do can be based on XML (on the file system) and tools that index and present this data (Zebra, TKL, XSLT). But how do you create this XML. I think sometimes use Zope and it's object methods to create the XML is a good idea.\n\n
Bob Boiko (Washington Info School)\n\n>Organizations of all kinds have long grappled with the problem of implementing information systems and with buying and maintaining the information technology infrastructure. The problems have generally been twofold: first, the chief executives, Board members and senior managers have generally not risen in the organization as a result of their knowledge of information systems and computing; and, secondly, the Chief Information Officer (earlier known as the IT Director and before that as the Computer Manager) is not perceived as understanding 'the business' and, hence, is viewed as a technical advisor, rather than as a fellow businessman.\n\n>The result of this, in the worst cases, mutual incomprehension resulting from the inability of the CIO to understand the business imperatives, and the inability of the Board to understand the complexities of IT infrastructure and systems development. This book aims to resolve these differences by focusing upon the value of information for the organization and the need for an information management strategy or, as one of the those quoted on the publisher's blurb says, it's about putting the I back into IT.\n\n*Collection (what, how, storage)\n*Manage ()\n*Publish (what information to what person)\n\nWhat is the bridge between information and action? Do we care? Is ''action'' what we are after?
You can't think of a "repository" as machine or particular software but rather as a set of *services". \n\n\n\n* What "deposit" services do you provide? \n* What "management" services to you provide? \n* What "dissemination" services to you provide. \n\n[img[http://www.dlib.org/dlib/july06/lavoie/lavoie-fig2-rev.gif]]\n\n!!!!Authentication (Enter)\nAthens, Shibboleth\n!!!!User Preferences (Enter)\nLDAP, eduPerson\n!!!!Service Registry (Survey, All)\nUDDI, OAI-PMH, Z39.50, SRW, DC Collection Description schema, WSDL\n!!!!Terminology (Survey, Discover)\nZ39.50 (Zthes), SRW, VDEX, OWL, RDF, RDFS\n!!!!Search (Discover)\nZ39.50 (Bath Profile), SRW, DC, IEEE LOM, METS, IMS-CP\n!!!!Alert (Discover)\nRSS\n!!!!Metadata Schema Registry (Discover)\nZ39.50, SRW, OAI-PMH\n!!!!Harvest (Discover)\nOAI-PMH, DC, IEEE LOM, METS, IMS-CP\n!!!!Authorization (Discover, Detail, Deliver)\nAthens, Shibboleth\n!!!!Identifier Resolver (Detail)\nPURL, DOI, Handle\n!!!!Rating/Annotation (Detail)\nIMS-RLI, DC, IEEE LOM\n!!!!Link server (Detail)\nOpenURL\n!!!!Terms and Conditions (Detail)\nODRL, XrML
!Documentation for TiddlyLightBoxPlugin\n''Credits:''\nThis lightbox implementation is a derivative of Bob Denny's [[DC3.LightBox|http://solo.dc3.com/tw/index.html]] library optimized for a ~TiddlyWiki environment, with an emphasis on ease of use. It also uses some code and ideas from [[LightBox Gone Wild|http://particletree.com/features/lightbox-gone-wild/]] and [[Ibox|http://www.ibegin.com/ibox/]]. For a more feature rich and versatile option, you can't beat the ~DC3 library.\n\n\n''Concept:''\nI needed a light weight lightbox implementation for [[TiddlyThemes|http://tiddlythemes.googlepages.com/index.html]] but none of the existing options fit the bill. The ~DC3 library came closest, so I set out to rewrite it. I believe the result is a quite versatile ~TW plugin. Some of the bells and whistles have been removed though since I find them annoying (animations), and there are some features yet to be implemented, as you can read further on this document. Almost the entire library has been rewritten.\n\n\n''Installation:''\nCopy the TiddlyLightBoxPlugin tiddler to your TW, tag it with systemConfig, save and reload your TW file. You will also need to save [[this|indicator.gif]] 'loading' image to the same folder as your TW. Or you can choose one of many [[here|http://www.ajaxload.info/]]. That's it, you are ready to create some lightboxes!\n\n\n''Usage:''\nThere are 3 macros provide to facilitate setting up macros.\n1. ''{{{<<imagebox>>}}}''\nThe imagebox macro is designed to display images in the lightbox. The usage is very easy. Simply create a text or image link to an image using standard TW syntax, and follow it with {{{<<imagebox>>}}}.\nEg: {{{[img[cactus-thumb.jpg]cactus.jpg]]}}}\n\n[img[cactus-thumb.jpg][cactus.jpg]]<<imagebox>>\n\nLet's try a text link: {{{[[click me|triad.jpg]]<<imagebox>>}}}\n\n[[click me|triad.jpg]]<<imagebox>>\n\nThis macro also accepts some optional parameters in this order:\n2. description text\n3. width ( as a number, like 500)\n4. height (as a number, like 300)\nAlso, if width is passed as a word, like "bananas", then it is treated as a css class and the container for the image is given the class "bananas".\n\nLet's try one more, with a title and a custom size:\n{{{[img[cubicles-thumb.jpg][cubicles.jpg]]<<imagebox 'Office space' 300 300>>}}}\n\n[img[cubicles-thumb.jpg][cubicles.jpg]]<<imagebox 'Office space' 300 300>>\n\n----\n\n2. ''{{{<<divbox>>}}}''\nThe divbox macro lets you put the html content of any inline div into a lightbox, you just need the id of the div in question. The idea being to create a hidden div using "display:none" and then displaying it on the click of a link/button.\nYou can create such a div in any tiddler by wrapping it in html tags, but using the MarkupPostBody tiddler might be the better option.\n\nThe macro can create the button for you, or you can use an existing element to launch the lightbox. To create a button, pass the label for the button as the first parameter. To use an existing element, pass the first parameter as ' ' and place the macro immediately after the element. Eg: {{{<<tiddlerbox label>> or <<tiddlerbox ''>>}}}\n\nThe next parameter is the id of the div to display: {{{<<tiddlerbox label theID>>}}}\nThese two parameters are a must for the divbox macro. There are also 3 more optional parameters, just like the imagebox macro:\n3. description text\n4. width ( as a number, like 500) OR className\n5. height (as a number, like 300)\nAs an example, lets display this hidden div which I have written inline:\n{{{<html><div id="testDiv" style="display:none;"><div style="text-align:center;"> Lightboxes have become very cliche, but they can still be useful!</div></div></html><<divbox "Click to see it" "testDiv" "This is a test div">>}}}\n<html><div id="testDiv" style="display:none;"><div style="text-align:center"><br><br><br><br> Lightboxes have become very cliche, but they can still be useful!</div></div></html><<divbox "Click to see it" "testDiv" "This is a test div">>\n\n----\n\n3.''{{{<<tiddlerbox>>}}}''\nThis macro lets you put the wikified contents of any tiddler into a lightbox! So you can put your MainMenu and Sidebar into a lightbox for example, and have handy links to bring them up whenever you need them. (like in say the hovering menu provided by HoverMenuPlugin). It's also very useful for when you are working on something and want to refer to some reference material without having to loose your place in your work.\nThe parameters for this macro are the same as for the divbox macro, except instead of the id for the div, you use the title of the tiddler.\nLet's give it a go:\n{{{<<tiddlerbox "menu" "MainMenu" "Thats my main menu, and the links work!">>}}}\n<<tiddlerbox "menu" "MainMenu" "Thats my main menu, and the links work!">>\nor\n{{{<<tiddlerbox "menu" "Sidebar" "Thats my sidebar!" 300 500>>}}}\n<<tiddlerbox "sidebar" "Sidebar" "Thats my sidebar!" 300 500>>\n\n-----\n\n''CSS Styling:''\nThe css rules for the lightbox and its contents are in the TiddlyLightBoxStyles folder. You can edit them to your liking, but I recommend not changing the rules for ~lightBoxOverlay and lightboxprogress. But don't worry, if you break anything, just delete the tiddler. It's a shadow tiddler!\n\nI'll post a diagram showing the structure of the lightbox later, to faciliate css styling.\n\n----\n\n''Features comparison with ~DC3Lightbox:''\nMissing:\n* IE transparency filters\n* ability to create own lightbox containers\n*call back functions on closing lightbox\n\nAdded:\n*macros for TW usage\n*optimized for TW environment\n*ability to display Tiddlers in lightboxes\n*preloading of images, to avoid layout problems\n*removed need for manually creating styles tiddler and adding html markup.\n*fixed bug with regards to selects displaying over the lightbox!\n\n----\n\n''To Do''\n* fixed positioning of lightbox so it scrolls with the page!\n*possible light weight animation for images\n* optional preloading of images\n* resizing of images to fit the viewport when larger.\n* optional automatic lightboxing of all links to images.\n*grabbing description from image alt text.\n* improved support for inline html content.\n
100 Continue \n101 Switching Protocols \n200 OK \n201 Created \n202 Accepted \n203 Non-Authoritative \n204 No Content \n205 Reset Content \n206 Partial Content \n300 Multiple Choices \n301 Moved Permanently \n302 Found \n303 See Other \n304 Not Modified \n305 Use Proxy \n307 Temporary Redirect \n400 Bad Request \n401 Unauthorized \n402 Payment Required \n403 Forbidden \n404 Not Found \n405 Method Not Allowed \n406 Not Acceptable \n407 Proxy Authentication Required \n408 Request Timeout \n409 Conflict \n410 Gone \n411 Length Required \n412 Precondition Failed \n413 Request Entity Too Large \n414 Request-URI Too Long \n415 Unsupported Media Type \n416 Requested Range Not Satisfiable \n417 Expectation Failed \n500 Internal Server Error \n501 Not Implemented \n502 Bad Gateway \n503 Service Unavailable \n504 Gateway Timeout \n505 HTTP Version Not Supported
[[Transformational Times|http://www.arl.org/bm~doc/transformational-times.pdf]] a publication of the RLG.\n\n>Faculty and graduate students' academic and research behaviors suggest that libraries can provide valuable assistance with research methodologies; identifying, analyzing, and organizing information; and providing penetrating insight into the literature of unfamiliar disciplines. This will lead to new partnerships with IT, curriculum committees, education technologists, laboratories, centers, and the like.
* AdvancedOptions\n* OptionsPanel
[img[filestore/uploads/webservices/repositories_exchange.png]]\n\nfrom Madison Digital Image Database
{{{\n<?xml version="1.0"?>\n<mets:mets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \n xmlns:mods="http://www.loc.gov/mods/v3" \n xmlns:xlink="http://www.w3.org/1999/xlink" \n xmlns:mets="http://www.loc.gov/METS/" \n OBJID="oai:eprints.rclis.org:15680" \n LABEL="Eprints Item" \n xsi:schemaLocation="http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/mets.xsd http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd">\n <mets:metsHdr CREATEDATA="2009-02-14T12:20:01Z">\n <mets:agent TYPE="ORGANIZATION" ROLE="CUSTODIAN">\n <mets:name>E-LIS</mets:name>\n </mets:agent>\n </mets:metsHdr>\n <mets:dmdSec ID="DMD_oai:eprints.rclis.org:15680_mods">\n <mets:mdWrap MDTYPE="mods">\n <mets:xmlData>\n <mods:titleInfo>\n <mods:title>Interview on Open Access with Dr. Stevan Harnad</mods:title>\n </mods:titleInfo>\n <mods:name type="personal">\n <mods:namePart type="given">Stephen Michael</mods:namePart>\n <mods:namePart type="family">Kellat</mods:namePart>\n <mods:role>\n <mods:roleTerm type="text">author</mods:roleTerm>\n </mods:role>\n </mods:name>\n <mods:name type="personal">\n <mods:namePart type="given">Stevan</mods:namePart>\n <mods:namePart type="family">Harnad</mods:namePart>\n <mods:role>\n <mods:roleTerm type="text">author</mods:roleTerm>\n </mods:role>\n </mods:name>\n <mods:abstract>In light of the recent Conyers bill that would remove the NIH mandate on Open Access, LISTen (LISNews.org) talked to Dr. Harnad about Open Access so that librarians may learn more about it.</mods:abstract>\n <mods:classification authority="lcc">EB. Printing, electronic publishing, broadcasting.</mods:classification>\n <mods:classification authority="lcc">BD. Information society.</mods:classification>\n <mods:originInfo>\n <mods:dateIssued encoding="iso8061">2009-02-09</mods:dateIssued>\n </mods:originInfo>\n <mods:genre>Other</mods:genre>\n </mets:xmlData>\n </mets:mdWrap>\n </mets:dmdSec>\n <mets:amdSec ID="TMD_oai:eprints.rclis.org:15680">\n <mets:rightsMD ID="rights_oai:eprints.rclis.org:15680_mods">\n <mets:mdWrap MDTYPE="mods">\n <mets:xmlData>\n <mods:useAndReproduction>\n <p><strong>For work being deposited by its own author:</strong> \nIn self-archiving this collection of files and associated bibliographic \nmetadata, I grant E-LIS the right to store \nthem and to make them permanently available publicly for free on-line. \nI declare that this material is my own intellectual property and I \nunderstand that E-LIS does not assume any \nresponsibility if there is any breach of copyright in distributing these \nfiles or metadata. (All authors are urged to prominently assert their \ncopyright on the title page of their work.)</p>\n <p><strong>For work being deposited by someone other than its \nauthor:</strong> I hereby declare that the collection of files and \nassociated bibliographic metadata that I am archiving at \nE-LIS) is in the public domain. If this is \nnot the case, I accept full responsibility for any breach of copyright \nthat distributing these files or metadata may entail.</p>\n <p>Clicking on the deposit button indicates your agreement to these \nterms.</p>\n </mods:useAndReproduction>\n </mets:xmlData>\n </mets:mdWrap>\n </mets:rightsMD>\n </mets:amdSec>\n <mets:fileSec>\n <mets:fileGrp USE="reference">\n <mets:file SIZE="21408105" ID="oai:eprints.rclis.org:15680_11144_1" MIMETYPE="application/octet-stream" OWNERID="http://eprints.rclis.org/15680/1/Stevan_Harnad_Interview.mp3">\n <mets:FLocat LOCTYPE="URL" xlink:href="http://eprints.rclis.org/15680/1/Stevan_Harnad_Interview.mp3" xlink:type="simple"/>\n </mets:file>\n </mets:fileGrp>\n </mets:fileSec>\n <mets:structMap>\n <mets:div DMDID="DMD_oai:eprints.rclis.org:15680_mods" AMDID="TMD_oai:eprints.rclis.org:15680">\n <mets:fptr FILEID="oai:eprints.rclis.org:15680_11144_1"/>\n </mets:div>\n </mets:structMap>\n</mets:mets>\n}}}
Cyber infrastructure\n[img[/filestore/uploads/repositories/escidoc.png]]\n\n!!!Architecture\n* The Basic Layer implements a set of resource handlers. \n* Each resource handler is responsible for handling of a specific type of a resource. Each resource handler service implements the four basic operations create, retrieve, update, and delete (CRUD). Additionally, filter methods and task-oriented methods (e.g., for changing the status of an object within a content repository) are provided.\n* The most important resources are Items, Containers, and Contexts. \n\nItems are basic objects that represent content entities within the repository, e.g. articles, \nimages, or videos. \n\nContainers are aggregation objects that allow for arbitrary \ngrouping of items and other containers. Whereas the general layout of Item \nand Container resources remains the same, they can be further specialized by \ncontent types. Content types impose constraints on objects (e.g. allowed \nmetadata schemas, required metadata, allowed file types and mime types for \nthe binary content and specify a set of content type specific properties).\n\nContexts represent units of administration for a set of Items and Containers. They \nare associated with an institutional body responsible for the management of \nthe content. \n\n\n[[API's and Schemas|https://escidoc.org/JSPWiki/en/ObjectManager#section-ObjectManager-Item]]\n\n[[Metadata Schemas|http://metadata.mpdl.mpg.de/escidoc/metadata/schemas/0.1/]]
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//}}}
/***\n|Name|ImportTiddlersPlugin|\n|Source|http://www.TiddlyTools.com/#ImportTiddlersPlugin|\n|Documentation|http://www.TiddlyTools.com/#ImportTiddlersPluginInfo|\n|Version|4.5.0|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides|config.macros.importTiddlers.handler|\n|Description|interactive controls for import/export with filtering.|\nCombine tiddlers from any two TiddlyWiki documents. An interactive control panel lets you pick a source document and import selected tiddlers, with prompting for skip, rename, merge or replace actions when importing tiddlers that match existing titles. Generates a detailed report of import 'history' in ImportedTiddlers.\n!!!!!Documentation\n<<<\nsee [[ImportTiddlersPluginInfo]] for details\n<<<\n!!!!!interactive control panel:\n<<<\n<<importTiddlers inline>>\n{{clear{\n^^(see also: [[ImportTiddlers]] shadow tiddler)^^}}}\n<<<\n!!!!!Revisions\n<<<\n2009.05.04 [4.5.0] import from CSV-formatted files\n|please see [[ImportTiddlersPluginInfo]] for additional revision details|\n2005.07.20 [1.0.0] Initial Release\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.ImportTiddlersPlugin= {major: 4, minor: 5, revision: 0, date: new Date(2009,5,4)};\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.onClickImportButton=onClickImportButton;\nwindow.refreshImportList=refreshImportList;\n\n// default cookie/option values\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n\n// default shadow definition\nconfig.shadowTiddlers.ImportTiddlers='<<importTiddlers inline>>';\n\n// use shadow tiddler content in backstage panel\nif (config.tasks) config.tasks.importTask.content='<<tiddler ImportTiddlers>>' // TW2.2 or above\n//}}}\n//{{{\n// backward-compatiblity for TW2.0.x and TW1.2.x\nif (config.macros.importTiddlers==undefined) config.macros.importTiddlers={};\nif (typeof merge=='undefined') {\n function merge(dst,src,preserveExisting) {\n for(var i in src) { if(!preserveExisting || dst[i] === undefined) dst[i] = src[i]; }\n return dst;\n }\n}\nif (config.browser.isGecko===undefined)\n config.browser.isGecko=(config.userAgent.indexOf('gecko')!=-1);\n//}}}\n//{{{\nmerge(config.macros.importTiddlers,{\n $: function(id) { return document.getElementById(id); }, // abbreviation\n label: 'import tiddlers',\n prompt: 'Copy tiddlers from another document',\n openMsg: 'Opening %0',\n openErrMsg: 'Could not open %0 - error=%1',\n readMsg: 'Read %0 bytes from %1',\n foundMsg: 'Found %0 tiddlers in %1',\n filterMsg: "Filtered %0 tiddlers matching '%1'",\n summaryMsg: '%0 tiddler%1 in the list',\n summaryFilteredMsg: '%0 of %1 tiddler%2 in the list',\n plural: 's are',\n single: ' is',\n countMsg: '%0 tiddlers selected for import',\n processedMsg: 'Processed %0 tiddlers',\n importedMsg: 'Imported %0 of %1 tiddlers from %2',\n loadText: 'please load a document...',\n closeText: 'close',\n doneText: 'done',\n startText: 'import',\n stopText: 'stop',\n local: true, // default to import from local file\n src: '', // path/filename or URL of document to import (retrieved from SiteUrl)\n proxy: '', // URL for remote proxy script (retrieved from SiteProxy)\n useProxy: false, // use specific proxy script in front of remote URL\n inbound: null, // hash-indexed array of tiddlers from other document\n newTags: '', // text of tags added to imported tiddlers\n addTags: true, // add new tags to imported tiddlers\n listsize: 10, // # of lines to show in imported tiddler list\n importTags: true, // include tags from remote source document when importing a tiddler\n keepTags: true, // retain existing tags when replacing a tiddler\n sync: false, // add 'server' fields to imported tiddlers (for sync function)\n lastFilter: '', // most recent filter (URL hash) applied\n lastAction: null, // most recent collision button performed\n index: 0, // current processing index in import list\n sort: '' // sort order for imported tiddler listbox\n});\n//}}}\n//{{{\n// hijack core macro handler\nif (config.macros.importTiddlers.coreHandler==undefined)\n config.macros.importTiddlers.coreHandler=config.macros.importTiddlers.handler;\n\nconfig.macros.importTiddlers.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if (!params[0] || params[0].toLowerCase()=='core') { // default to built in\n if (config.macros.importTiddlers.coreHandler)\n config.macros.importTiddlers.coreHandler.apply(this,arguments);\n else \n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n } else if (params[0]=='link') { // show link to floating panel\n createTiddlyButton(place,params[1]||this.label,params[2]||this.prompt,onClickImportMenu);\n } else if (params[0]=='inline') {// show panel as INLINE tiddler content\n createImportPanel(place);\n this.$('importPanel').style.position='static';\n this.$('importPanel').style.display='block';\n } else if (config.macros.loadTiddlers)\n config.macros.loadTiddlers.handler(place,macroName,params); // any other params: loadtiddlers\n}\n//}}}\n//{{{\n// Handle link click to create/show/hide control panel\nfunction onClickImportMenu(e) { var e=e||window.event;\n var parent=resolveTarget(e).parentNode;\n var panel=document.getElementById('importPanel');\n if (panel==undefined || panel.parentNode!=parent) panel=createImportPanel(parent);\n var isOpen=panel.style.display=='block';\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,false,'none'));\n else\n panel.style.display=isOpen?'none':'block';\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);\n}\n//}}}\n//{{{\n// Create control panel: HTML, CSS\nfunction createImportPanel(place) {\n var cmi=config.macros.importTiddlers; // abbrev\n var panel=cmi.$('importPanel');\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(cmi.css,'importTiddlers');\n panel=createTiddlyElement(place,'span','importPanel',null,null)\n panel.innerHTML=cmi.html;\n refreshImportList();\n var siteURL=store.getTiddlerText('SiteUrl'); if (!siteURL) siteURL='';\n cmi.$('importSourceURL').value=siteURL;\n cmi.src=siteURL;\n var siteProxy=store.getTiddlerText('SiteProxy'); if (!siteProxy) siteProxy='SiteProxy';\n cmi.$('importSiteProxy').value=siteProxy;\n cmi.proxy=siteProxy;\n if (config.browser.isGecko) { // FF3 FIXUP\n cmi.$('fileImportSource').style.display='none';\n cmi.$('importLocalPanelFix').style.display='block';\n }\n cmi.$('chkSync').checked=cmi.sync;\n cmi.$('chkImportTags').checked=cmi.importTags;\n cmi.$('chkKeepTags').checked=cmi.keepTags;\n cmi.$('chkAddTags').checked=cmi.addTags;\n cmi.$('txtNewTags').value=cmi.newTags;\n cmi.$('txtNewTags').style.display=cmi.addTags?'block':'none';\n cmi.$('chkSync').checked=cmi.sync;\n cmi.$('chkImportReport').checked=config.options.chkImportReport;\n return panel;\n}\n//}}}\n//{{{\nconfig.macros.importTiddlers.css = '\s\n#importPanel {\s\n display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em;\s\n}\s\n#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel select { width:100%;margin:0px;font-size:8pt;line-height:110%;}\s\n#importPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\s\n#importPanel .box { border:1px solid #000; background-color:#eee; padding:3px 5px; margin-bottom:5px; -moz-border-radius:5px;-webkit-border-radius:5px;}\s\n#importPanel .topline { border-top:1px solid #999; padding-top:2px; margin-top:2px; }\s\n#importPanel .rad { width:auto; }\s\n#importPanel .chk { width:auto; margin:1px;border:0; }\s\n#importPanel .btn { width:auto; }\s\n#importPanel .btn1 { width:98%; }\s\n#importPanel .btn2 { width:48%; }\s\n#importPanel .btn3 { width:32%; }\s\n#importPanel .btn4 { width:23%; }\s\n#importPanel .btn5 { width:19%; }\s\n#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\s\n#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\s\n#backstagePanel #importPanel { left:10%; right:auto; }\s\n';\n//}}}\n//{{{\nconfig.macros.importTiddlers.html = '\s\n<!-- source and report -->\s\n<table><tr><td align=left>\s\n import from\s\n <input type="radio" class="rad" name="importFrom" id="importFromFile" value="file" CHECKED\s\n onclick="onClickImportButton(this,event)" title="show file controls"> local file\s\n <input type="radio" class="rad" name="importFrom" id="importFromWeb" value="http"\s\n onclick="onClickImportButton(this,event)" title="show web controls"> web server\s\n</td><td align=right>\s\n <input type=checkbox class="chk" id="chkImportReport"\s\n onClick="config.options[\s'chkImportReport\s']=this.checked;"> create report\s\n</td></tr></table>\s\n\s\n<div class="box" id="importSourcePanel" style="margin:.5em">\s\n<div id="importLocalPanel" style="display:block;margin-bottom:2px;"><!-- import from local file -->\s\nenter or browse for source path/filename<br>\s\n<input type="file" id="fileImportSource" size=57 style="width:100%"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;document.getElementById(\s'importLoad\s').onclick()">\s\n<div id="importLocalPanelFix" style="display:none"><!-- FF3 FIXUP -->\s\n <input type="text" id="fileImportSourceFix" style="width:90%"\s\n title="Enter a path/file to import"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;document.getElementById(\s'importLoad\s').onclick()">\s\n <input type="button" id="fileImportSourceFixButton" style="width:7%" value="..."\s\n title="Select a path/file to import"\s\n onClick="var r=config.macros.importTiddlers.askForFilename(this); if (!r||!r.length) return;\s\n document.getElementById(\s'fileImportSourceFix\s').value=r;\s\n config.macros.importTiddlers.src=r;\s\n document.getElementById(\s'importLoad\s').onclick()">\s\n</div><!--end FF3 FIXUP-->\s\n</div><!--end local-->\s\n<div id="importHTTPPanel" style="display:none;margin-bottom:2px;"><!-- import from http server -->\s\n<table><tr><td align=left>\s\n enter a URL or <a href="javascript:;" id="importSelectFeed"\s\n onclick="onClickImportButton(this,event)" title="select a pre-defined \s'systemServer\s' URL">\s\n select a server</a><br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="importUsePassword"\s\n onClick="config.macros.importTiddlers.usePassword=this.checked;\s\n config.macros.importTiddlers.showPanel(\s'importIDPWPanel\s',this.checked,true);">password\s\n <input type="checkbox" class="chk" id="importUseProxy"\s\n onClick="config.macros.importTiddlers.useProxy=this.checked;\s\n config.macros.importTiddlers.showPanel(\s'importSiteProxy\s',this.checked,true);">proxy\s\n</td></tr></table>\s\n<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\s\n onKeyUp="config.macros.importTiddlers.proxy=this.value"\s\n onChange="config.macros.importTiddlers.proxy=this.value;">\s\n<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n<div id="importIDPWPanel" style="text-align:center;margin-top:2px;display:none";>\s\nusername: <input type=text id="txtImportID" style="width:25%" \s\n onChange="config.options.txtRemoteUsername=this.value;">\s\n password: <input type=password id="txtImportPW" style="width:25%" \s\n onChange="config.options.txtRemotePassword=this.value;">\s\n</div><!--end idpw-->\s\n</div><!--end http-->\s\n</div><!--end source-->\s\n\s\n<div class="box" id="importSelectPanel" style="display:none;margin:.5em;">\s\n<table><tr><td align=left>\s\nselect:\s\n<a href="javascript:;" id="importSelectAll"\s\n onclick="onClickImportButton(this);return false;" title="SELECT all tiddlers">\s\n all</a>\s\n&nbsp;<a href="javascript:;" id="importSelectNew"\s\n onclick="onClickImportButton(this);return false;" title="SELECT tiddlers not already in destination document">\s\n added</a>\s\n&nbsp;<a href="javascript:;" id="importSelectChanges"\s\n onclick="onClickImportButton(this);return false;" title="SELECT tiddlers that have been updated in source document">\s\n changes</a>\s\n&nbsp;<a href="javascript:;" id="importSelectDifferences"\s\n onclick="onClickImportButton(this);return false;" title="SELECT tiddlers that have been added or are different from existing tiddlers">\s\n differences</a>\s\n</td><td align=right>\s\n<a href="javascript:;" id="importListSmaller"\s\n onclick="onClickImportButton(this);return false;" title="SHRINK list size">\s\n &nbsp;&#150;&nbsp;</a>\s\n<a href="javascript:;" id="importListLarger"\s\n onclick="onClickImportButton(this);return false;" title="GROW list size">\s\n &nbsp;+&nbsp;</a>\s\n<a href="javascript:;" id="importListMaximize"\s\n onclick="onClickImportButton(this);return false;" title="MAXIMIZE/RESTORE list size">\s\n &nbsp;=&nbsp;</a>\s\n</td></tr></table>\s\n<select id="importList" size=8 multiple\s\n onchange="setTimeout(\s'refreshImportList(\s'+this.selectedIndex+\s')\s',1)">\s\n <!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\s\n</select>\s\n<div style="text-align:center">\s\n <a href="javascript:;"\s\n title="click for help using filters..."\s\n onclick="alert(\s'A filter consists of one or more space-separated combinations of:\s\sn\s\sntiddler titles\s\sntag:[[tagvalue]]\s\sntag:[[tag expression]] (requires MatchTagsPlugin)\s\snstory:[[TiddlerName]]\s\snsearch:[[searchtext]]\s\sn\s\snUse a blank filter for all tiddlers.\s')"\s\n >filter</a>\s\n <input type="text" id="importLastFilter" style="margin-bottom:1px; width:65%"\s\n title="Enter a combination of one or more filters. Use a blank filter for all tiddlers."\s\n onfocus="this.select()" value=""\s\n onKeyUp="config.macros.importTiddlers.lastFilter=this.value"\s\n onChange="config.macros.importTiddlers.lastFilter=this.value;">\s\n <input type="button" id="importApplyFilter" style="width:20%" value="apply"\s\n title="filter list of tiddlers to include only those that match certain criteria"\s\n onclick="onClickImportButton(this)">\s\n </div>\s\n</div><!--end select-->\s\n\s\n<div class="box" id="importOptionsPanel" style="text-align:center;margin:.5em;display:none;">\s\n apply tags: <input type=checkbox class="chk" id="chkImportTags" checked\s\n onClick="config.macros.importTiddlers.importTags=this.checked;">from source&nbsp;\s\n <input type=checkbox class="chk" id="chkKeepTags" checked\s\n onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing&nbsp;\s\n <input type=checkbox class="chk" id="chkAddTags" \s\n onClick="config.macros.importTiddlers.addTags=this.checked;\s\n config.macros.importTiddlers.showPanel(\s'txtNewTags\s',this.checked,false);\s\n if (this.checked) document.getElementById(\s'txtNewTags\s').focus();">add tags<br>\s\n <input type=text id="txtNewTags" style="margin-top:4px;display:none;" size=15\s onfocus="this.select()" \s\n title="enter tags to be added to imported tiddlers" \s\n onKeyUp="config.macros.importTiddlers.newTags=this.value;\s\n document.getElementById(\s'chkAddTags\s').checked=this.value.length>0;" autocomplete=off>\s\n <nobr><input type=checkbox class="chk" id="chkSync" \s\n onClick="config.macros.importTiddlers.sync=this.checked;">\s\n link tiddlers to source document (for sync later)</nobr>\s\n</div><!--end options-->\s\n\s\n<div id="importButtonPanel" style="text-align:center">\s\n <input type=button id="importLoad" class="importButton btn3" value="open"\s\n title="load listbox with tiddlers from source document"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importOptions" class="importButton btn3" value="options..."\s\n title="set options for tags, sync, etc."\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importStart" class="importButton btn3" value="import"\s\n title="start/stop import of selected source tiddlers into current document"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importClose" class="importButton btn3" value="done"\s\n title="clear listbox or hide control panel"\s\n onclick="onClickImportButton(this)">\s\n</div>\s\n\s\n<div class="none" id="importCollisionPanel" style="display:none;margin:.5em 0 .5em .5em;">\s\n <table><tr><td style="width:65%" align="left">\s\n <table><tr><td align=left>\s\n tiddler already exists:\s\n </td><td align=right>\s\n <input type=checkbox class="chk" id="importApplyToAll" \s\n onclick="document.getElementById(\s'importRename\s').disabled=this.checked;"\s\n checked>apply to all\s\n </td></tr></table>\s\n <input type=text id="importNewTitle" size=15 autocomplete=off">\s\n </td><td style="width:34%" align="center">\s\n <input type=button id="importMerge"\s\n class="importButton" style="width:47%" value="merge"\s\n title="append the incoming tiddler to the existing tiddler"\s\n onclick="onClickImportButton(this)"><!--\s\n --><input type=button id="importSkip"\s\n class="importButton" style="width:47%" value="skip"\s\n title="do not import this tiddler"\s\n onclick="onClickImportButton(this)"><!--\s\n --><br><input type=button id="importRename"\s\n class="importButton" style="width:47%" value="rename"\s\n title="rename the incoming tiddler"\s\n onclick="onClickImportButton(this)"><!--\s\n --><input type=button id="importReplace"\s\n class="importButton" style="width:47%" value="replace"\s\n title="discard the existing tiddler"\s\n onclick="onClickImportButton(this)">\s\n </td></tr></table>\s\n</div><!--end collision-->\s\n';\n//}}}\n//{{{\n// process control interactions\nfunction onClickImportButton(which,event) {\n var cmi=config.macros.importTiddlers; // abbreviation\n var list=cmi.$('importList'); if (!list) return;\n var thePanel=cmi.$('importPanel');\n var theCollisionPanel=cmi.$('importCollisionPanel');\n var theNewTitle=cmi.$('importNewTitle');\n var count=0;\n switch (which.id)\n {\n case 'importFromFile': // show local panel\n case 'importFromWeb': // show HTTP panel\n cmi.local=(which.id=='importFromFile');\n cmi.showPanel('importLocalPanel',cmi.local);\n cmi.showPanel('importHTTPPanel',!cmi.local);\n break;\n case 'importOptions': // show/hide options panel\n cmi.showPanel('importOptionsPanel',cmi.$('importOptionsPanel').style.display=='none');\n break;\n case 'fileImportSource':\n case 'importLoad': // load import source into hidden frame\n importReport(); // if an import was in progress, generate a report\n cmi.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n if (cmi.src=='') break;\n // Load document, read it's DOM and fill the list\n cmi.loadRemoteFile(cmi.src,cmi.filterTiddlerList);\n break;\n case 'importSelectFeed': // select a pre-defined systemServer feed URL\n var p=Popup.create(which); if (!p) return;\n var tids=store.getTaggedTiddlers('systemServer');\n if (!tids.length)\n createTiddlyText(createTiddlyElement(p,'li'),'no pre-defined server feeds');\n for (var t=0; t<tids.length; t++) {\n var u=store.getTiddlerSlice(tids[t].title,'URL');\n var d=store.getTiddlerSlice(tids[t].title,'Description');\n if (!d||!d.length) d=store.getTiddlerSlice(tids[t].title,'description');\n if (!d||!d.length) d=u;\n createTiddlyButton(createTiddlyElement(p,'li'),tids[t].title,d,\n function(){\n var u=this.getAttribute('url');\n document.getElementById('importSourceURL').value=u;\n config.macros.importTiddlers.src=u;\n document.getElementById('importLoad').onclick();\n },\n null,null,null,{url:u});\n }\n Popup.show(p,false);\n event.cancelBubble = true;\n if (event.stopPropagation) event.stopPropagation();\n return(false);\n // create popup with feed list\n // onselect, insert feed URL into input field.\n break;\n case 'importSelectAll': // select all tiddler list items (i.e., not headings)\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < list.options.length; t++) {\n if (list.options[t].value=='') continue;\n list.options[t].selected=true;\n count++;\n }\n clearMessage(); displayMessage(cmi.countMsg.format([count]));\n cmi.$('importStart').disabled=!count;\n break;\n case 'importSelectNew': // select tiddlers not in current document\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < list.options.length; t++) {\n list.options[t].selected=false;\n if (list.options[t].value=='') continue;\n list.options[t].selected=!store.tiddlerExists(list.options[t].value);\n count+=list.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(cmi.countMsg.format([count]));\n cmi.$('importStart').disabled=!count;\n break;\n case 'importSelectChanges': // select tiddlers that are updated from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < list.options.length; t++) {\n list.options[t].selected=false;\n if (list.options[t].value==''||!store.tiddlerExists(list.options[t].value)) continue;\n for (var i=0; i<cmi.inbound.length; i++) // find matching inbound tiddler\n { var inbound=cmi.inbound[i]; if (inbound.title==list.options[t].value) break; }\n list.options[t].selected=(inbound.modified-store.getTiddler(list.options[t].value).modified>0); // updated tiddler\n count+=list.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(cmi.countMsg.format([count]));\n cmi.$('importStart').disabled=!count;\n break;\n case 'importSelectDifferences': // select tiddlers that are new or different from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < list.options.length; t++) {\n list.options[t].selected=false;\n if (list.options[t].value=='') continue;\n if (!store.tiddlerExists(list.options[t].value)) { list.options[t].selected=true; count++; continue; }\n for (var i=0; i<cmi.inbound.length; i++) // find matching inbound tiddler\n { var inbound=cmi.inbound[i]; if (inbound.title==list.options[t].value) break; }\n list.options[t].selected=(inbound.modified-store.getTiddler(list.options[t].value).modified!=0); // changed tiddler\n count+=list.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(cmi.countMsg.format([count]));\n cmi.$('importStart').disabled=!count;\n break;\n case 'importApplyFilter': // filter list to include only matching tiddlers\n importReport(); // if an import was in progress, generate a report\n clearMessage();\n if (!cmi.all) // no tiddlers loaded = '0 selected'\n { displayMessage(cmi.countMsg.format([0])); return false; }\n var hash=cmi.$('importLastFilter').value;\n cmi.inbound=cmi.filterByHash('#'+hash,cmi.all);\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importStart': // initiate the import processing\n importReport(); // if an import was in progress, generate a report\n cmi.$('importApplyToAll').checked=false;\n cmi.$('importStart').value=cmi.stopText;\n if (cmi.index>0) cmi.index=-1; // stop processing\n else cmi.index=importTiddlers(0); // or begin processing\n importStopped();\n break;\n case 'importClose': // unload imported tiddlers or hide the import control panel\n // if imported tiddlers not loaded, close the import control panel\n if (!cmi.inbound) { thePanel.style.display='none'; break; }\n importReport(); // if an import was in progress, generate a report\n cmi.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importSkip': // don't import the tiddler\n cmi.lastAction=which;\n var theItem = list.options[cmi.index];\n for (var j=0;j<cmi.inbound.length;j++)\n if (cmi.inbound[j].title==theItem.value) break;\n var theImported = cmi.inbound[j];\n theImported.status='skipped after asking'; // mark item as skipped\n theCollisionPanel.style.display='none';\n cmi.index=importTiddlers(cmi.index+1); // resume with NEXT item\n importStopped();\n break;\n case 'importRename': // change name of imported tiddler\n cmi.lastAction=which;\n var theItem = list.options[cmi.index];\n for (var j=0;j<cmi.inbound.length;j++)\n if (cmi.inbound[j].title==theItem.value) break;\n var theImported = cmi.inbound[j];\n theImported.status = 'renamed from '+theImported.title; // mark item as renamed\n theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title\n theItem.value = theNewTitle.value; // change the listbox item text\n theItem.text = theNewTitle.value; // change the listbox item text\n theCollisionPanel.style.display='none';\n cmi.index=importTiddlers(cmi.index); // resume with THIS item\n importStopped();\n break;\n case 'importMerge': // join existing and imported tiddler content\n cmi.lastAction=which;\n var theItem = list.options[cmi.index];\n for (var j=0;j<cmi.inbound.length;j++)\n if (cmi.inbound[j].title==theItem.value) break;\n var theImported = cmi.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n var theText = theExisting.text+'\sn----\sn^^merged from: ';\n theText +='[['+cmi.src+'#'+theItem.value+'|'+cmi.src+'#'+theItem.value+']]^^\sn';\n theText +='^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\sn'+theImported.text;\n var theDate = new Date();\n var theTags = theExisting.getTags()+' '+theImported.getTags();\n theImported.set(null,theText,null,theDate,theTags);\n theImported.status = 'merged with '+theExisting.title; // mark item as merged\n theImported.status += ' - '+theExisting.modified.formatString('MM/DD/YYYY 0hh:0mm:0ss');\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n cmi.index=importTiddlers(cmi.index); // resume with this item\n importStopped();\n break;\n case 'importReplace': // substitute imported tiddler for existing tiddler\n cmi.lastAction=which;\n var theItem = list.options[cmi.index];\n for (var j=0;j<cmi.inbound.length;j++)\n if (cmi.inbound[j].title==theItem.value) break;\n var theImported = cmi.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n theImported.status = 'replaces '+theExisting.title; // mark item for replace\n theImported.status += ' - '+theExisting.modified.formatString('MM/DD/YYYY 0hh:0mm:0ss');\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n cmi.index=importTiddlers(cmi.index); // resume with THIS item\n importStopped();\n break;\n case 'importListSmaller': // decrease current listbox size, minimum=5\n if (list.options.length==1) break;\n list.size-=(list.size>5)?1:0;\n cmi.listsize=list.size;\n break;\n case 'importListLarger': // increase current listbox size, maximum=number of items in list\n if (list.options.length==1) break;\n list.size+=(list.size<list.options.length)?1:0;\n cmi.listsize=list.size;\n break;\n case 'importListMaximize': // toggle listbox size between current and maximum\n if (list.options.length==1) break;\n list.size=(list.size==list.options.length)?cmi.listsize:list.options.length;\n break;\n }\n}\n//}}}\n//{{{\nconfig.macros.importTiddlers.showPanel=function(place,show,skipAnim) {\n if (typeof place=='string') var place=document.getElementById(place);\n if (!place||!place.style) return;\n if(!skipAnim && anim && config.options.chkAnimate) anim.startAnimating(new Slider(place,show,false,'none'));\n else place.style.display=show?'block':'none';\n}\n//}}}\n//{{{\nfunction refreshImportList(selectedIndex) {\n var cmi=config.macros.importTiddlers; // abbrev\n var list=cmi.$('importList'); if (!list) return;\n // if nothing to show, reset list content and size\n if (!cmi.inbound) {\n while (list.length > 0) { list.options[0] = null; }\n list.options[0]=new Option(cmi.loadText,'',false,false);\n list.size=cmi.listsize;\n cmi.$('importLoad').disabled=false;\n cmi.$('importLoad').style.display='inline';\n cmi.$('importStart').disabled=true;\n cmi.$('importOptions').disabled=true;\n cmi.$('importOptions').style.display='none';\n cmi.$('fileImportSource').disabled=false;\n cmi.$('importFromFile').disabled=false;\n cmi.$('importFromWeb').disabled=false;\n cmi.$('importStart').value=cmi.startText;\n cmi.$('importClose').value=cmi.doneText;\n cmi.$('importSelectPanel').style.display='none';\n cmi.$('importOptionsPanel').style.display='none';\n return;\n }\n // there are inbound tiddlers loaded...\n cmi.$('importLoad').disabled=true;\n cmi.$('importLoad').style.display='none';\n cmi.$('importOptions').style.display='inline';\n cmi.$('importOptions').disabled=false;\n cmi.$('fileImportSource').disabled=true;\n cmi.$('importFromFile').disabled=true;\n cmi.$('importFromWeb').disabled=true;\n cmi.$('importClose').value=cmi.closeText;\n if (cmi.$('importSelectPanel').style.display=='none')\n cmi.showPanel('importSelectPanel',true);\n\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) cmi.sort='title'; // heading\n if (selectedIndex==1) cmi.sort='title';\n if (selectedIndex==2) cmi.sort='modified';\n if (selectedIndex==3) cmi.sort='tags';\n if (selectedIndex>3) {\n // display selected tiddler count\n for (var t=0,count=0; t < list.options.length; t++) {\n if (!list.options[t].selected) continue;\n if (list.options[t].value!='')\n count+=1;\n else { // if heading is selected, deselect it, and then select and count all in section\n list.options[t].selected=false;\n for ( t++; t<list.options.length && list.options[t].value!=''; t++) {\n list.options[t].selected=true;\n count++;\n }\n }\n }\n clearMessage(); displayMessage(cmi.countMsg.format([count]));\n }\n cmi.$('importStart').disabled=!count;\n if (selectedIndex>3) return; // no refresh needed\n\n // get the alphasorted list of tiddlers\n var tiddlers=cmi.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // clear current list contents\n while (list.length > 0) { list.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 if (cmi.all.length==tiddlers.length)\n var summary=cmi.summaryMsg.format([tiddlers.length,(tiddlers.length!=1)?cmi.plural:cmi.single]);\n else\n var summary=cmi.summaryFilteredMsg.format([tiddlers.length,cmi.all.length,(cmi.all.length!=1)?cmi.plural:cmi.single]);\n list.options[i++]=new Option(summary,'',false,false);\n list.options[i++]=new Option(((cmi.sort=='title' )?'>':indent)+' [by title]','',false,false);\n list.options[i++]=new Option(((cmi.sort=='modified')?'>':indent)+' [by date]','',false,false);\n list.options[i++]=new Option(((cmi.sort=='tags')?'>':indent)+' [by tags]','',false,false);\n // output the tiddler list\n switch(cmi.sort) {\n case 'title':\n for(var t = 0; t < tiddlers.length; t++)\n list.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case 'modified':\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n var lastSection = '';\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = tiddler.modified.toLocaleDateString();\n if (theSection != lastSection) {\n list.options[i++] = new Option(theSection,'',false,false);\n lastSection = theSection;\n }\n list.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 list.options[i++]=new Option(theTag,'',false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n list.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n list.selectedIndex=selectedIndex; // select current control item\n if (list.size<cmi.listsize) list.size=cmi.listsize;\n if (list.size>list.options.length) list.size=list.options.length;\n}\n//}}}\n//{{{\n// re-entrant processing for handling import with interactive collision prompting\nfunction importTiddlers(startIndex) {\n var cmi=config.macros.importTiddlers; // abbrev\n if (!cmi.inbound) return -1;\n var list=cmi.$('importList'); if (!list) return;\n var t;\n // if starting new import, reset import status flags\n if (startIndex==0)\n for (var t=0;t<cmi.inbound.length;t++)\n cmi.inbound[t].status='';\n for (var i=startIndex; i<list.options.length; i++) {\n // if list item is not selected or is a heading (i.e., has no value), skip it\n if ((!list.options[i].selected) || ((t=list.options[i].value)==''))\n continue;\n for (var j=0;j<cmi.inbound.length;j++)\n if (cmi.inbound[j].title==t) break;\n var inbound = cmi.inbound[j];\n var theExisting = store.getTiddler(inbound.title);\n // avoid redundant import for tiddlers that are listed multiple times (when 'by tags')\n if (inbound.status=='added')\n continue;\n // don't import the 'ImportedTiddlers' history from the other document...\n if (inbound.title=='ImportedTiddlers')\n continue;\n // if tiddler exists and import not marked for replace or merge, stop importing\n if (theExisting && (inbound.status.substr(0,7)!='replace') && (inbound.status.substr(0,5)!='merge'))\n return i;\n // assemble tags (remote + existing + added)\n var newTags = '';\n if (cmi.importTags)\n newTags+=inbound.getTags() // import remote tags\n if (cmi.keepTags && theExisting)\n newTags+=' '+theExisting.getTags(); // keep existing tags\n if (cmi.addTags && cmi.newTags.trim().length)\n newTags+=' '+cmi.newTags; // add new tags\n inbound.set(null,null,null,null,newTags.trim());\n // set the status to 'added' (if not already set by the 'ask the user' UI)\n inbound.status=(inbound.status=='')?'added':inbound.status;\n // set sync fields\n if (cmi.sync) {\n if (!inbound.fields) inbound.fields={}; // for TW2.1.x backward-compatibility\n inbound.fields['server.page.revision']=inbound.modified.convertToYYYYMMDDHHMM();\n inbound.fields['server.type']='file';\n inbound.fields['server.host']=(cmi.local?'file://':'')+cmi.src;\n }\n // do the import!\n store.suspendNotifications();\n store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags, inbound.fields, true, inbound.created);\n store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value (needed for TW2.1.x and earlier)\n store.resumeNotifications();\n }\n return(-1); // signals that we really finished the entire list\n}\nfunction importStopped() {\n var cmi=config.macros.importTiddlers; // abbrev\n var list=cmi.$('importList'); if (!list) return;\n var theNewTitle=cmi.$('importNewTitle');\n if (cmi.index==-1){ \n cmi.$('importStart').value=cmi.startText;\n importReport(); // import finished... generate the report\n } else {\n // import collision...\n // show the collision panel and set the title edit field\n cmi.$('importStart').value=cmi.stopText;\n cmi.showPanel('importCollisionPanel',true);\n theNewTitle.value=list.options[cmi.index].value;\n if (cmi.$('importApplyToAll').checked && cmi.lastAction && cmi.lastAction.id!='importRename')\n onClickImportButton(cmi.lastAction);\n }\n}\n//}}}\n//{{{\nfunction importReport() {\n var cmi=config.macros.importTiddlers; // abbrev\n if (!cmi.inbound) return;\n // if import was not completed, the collision panel will still be open... close it now.\n var panel=cmi.$('importCollisionPanel'); if (panel) panel.style.display='none';\n // get the alphasorted list of tiddlers\n var tiddlers = cmi.inbound;\n // gather the statistics\n var count=0; var total=0;\n for (var t=0; t<tiddlers.length; t++) {\n if (!tiddlers[t].status || !tiddlers[t].status.trim().length) continue;\n if (tiddlers[t].status.substr(0,7)!='skipped') count++;\n total++;\n }\n // generate a report\n if (total) displayMessage(cmi.processedMsg.format([total]));\n if (count && config.options.chkImportReport) {\n // get/create the report tiddler\n var theReport = store.getTiddler('ImportedTiddlers');\n if (!theReport) { theReport=new Tiddler(); theReport.title='ImportedTiddlers'; theReport.text=''; }\n // format the report content\n var now = new Date();\n var newText = 'On '+now.toLocaleString()+', '+config.options.txtUserName\n newText +=' imported '+count+' tiddler'+(count==1?'':'s')+' from\sn[['+cmi.src+'|'+cmi.src+']]:\sn';\n if (cmi.addTags && cmi.newTags.trim().length)\n newText += 'imported tiddlers were tagged with: "'+cmi.newTags+'"\sn';\n newText += '<<<\sn';\n for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status)\n newText += '#[['+tiddlers[t].title+']] - '+tiddlers[t].status+'\sn';\n newText += '<<<\sn';\n // update the ImportedTiddlers content and show the tiddler\n theReport.text = newText+((theReport.text!='')?'\sn----\sn':'')+theReport.text;\n theReport.modifier = config.options.txtUserName;\n theReport.modified = new Date();\n store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags, theReport.fields);\n story.displayTiddler(null,theReport.title,1,null,null,false);\n story.refreshTiddler(theReport.title,1,true);\n }\n // reset status flags\n for (var t=0; t<cmi.inbound.length; t++) cmi.inbound[t].status='';\n // mark document as dirty and let display update as needed\n if (count) { store.setDirty(true); store.notifyAll(); }\n // always show final message when tiddlers were actually loaded\n if (count) displayMessage(cmi.importedMsg.format([count,tiddlers.length,cmi.src.replace(/%20/g,' ')]));\n}\n//}}}\n//{{{\n// // File and XMLHttpRequest I/O\nconfig.macros.importTiddlers.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 file='';\n var result='';\n if(window.Components) { // moz\n try {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');\n\n var nsIFilePicker = window.Components.interfaces.nsIFilePicker;\n var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);\n picker.init(window, msg, nsIFilePicker.modeOpen);\n var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);\n thispath.initWithPath(path);\n picker.displayDirectory=thispath;\n picker.defaultExtension='html';\n picker.defaultString=file;\n picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);\n if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;\n }\n catch(e) { alert('error during local file access: '+e.toString()) }\n }\n else { // IE\n try { // XPSP2 IE only\n var s = new ActiveXObject('UserAccounts.CommonDialog');\n s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';\n s.FilterIndex=3; // default to HTML files;\n s.InitialDir=path;\n s.FileName=file;\n if (s.showOpen()) var result=s.FileName;\n }\n catch(e) { // fallback\n var result=prompt(msg,path+file);\n }\n }\n return result;\n}\n\nconfig.macros.importTiddlers.loadRemoteFile = function(src,callback) {\n if (src==undefined || !src.length) return null; // filename is required\n var original=src; // URL as specified\n var hashpos=src.indexOf('#'); if (hashpos!=-1) src=src.substr(0,hashpos); // URL with #... suffix removed (needed for IE)\n clearMessage();\n displayMessage(this.openMsg.format([src.replace(/%20/g,' ')]));\n if (src.substr(0,5)!='http:' && src.substr(0,5)!='file:') { // if not a URL, read from local filesystem\n var txt=loadFile(src);\n if (!txt) { // file didn't load, might be relative path.. try fixup\n var pathPrefix=document.location.href; // get current document path and trim off filename\n var slashpos=pathPrefix.lastIndexOf('/'); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf('\s\s'); \n if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);\n src=pathPrefix+src;\n if (pathPrefix.substr(0,5)!='http:') src=getLocalPath(src);\n var txt=loadFile(src);\n }\n if (!txt) { // file still didn't load, report error\n displayMessage(config.macros.importTiddlers.openErrMsg.format([src.replace(/%20/g,' '),'(filesystem error)']));\n } else {\n displayMessage(config.macros.importTiddlers.readMsg.format([txt.length,src.replace(/%20/g,' ')]));\n if (callback) callback(true,original,convertUTF8ToUnicode(txt),src,null);\n }\n } else {\n var name=config.options.txtRemoteUsername; var pass=config.options.txtRemotePassword;\n var xhr=doHttp('GET',src,null,null,name,pass,callback,original,null)\n if (!xhr) displayMessage(config.macros.importTiddlers.openErrMsg.format([src,'(XMLHTTPRequest error)']));\n }\n}\n\nconfig.macros.importTiddlers.readTiddlersFromHTML=function(html)\n{\n var remoteStore=new TiddlyWiki();\n remoteStore.importTiddlyWiki(html);\n return remoteStore.getTiddlers('title'); \n}\n\nconfig.macros.importTiddlers.readTiddlersFromCSV=function(CSV) {\n var remoteStore=new TiddlyWiki();\n var lines=CSV.split('\sn'); var names=lines[0].split(','); CSV=lines.join('\sn')\n // ENCODE commas and newlines within quoted values\n var comma='!~comma~!'; var commaRE=new RegExp(comma,'g');\n var newline='!~newline~!'; var newlineRE=new RegExp(newline,'g');\n CSV=CSV.replace(/\sx22((?:[^\sx22]|\sx22\sx22)*?)\sx22/g,\n function(x){ return x.substr(1,x.length-2).replace(/\s,/g,comma).replace(/\sn/g,newline); });\n // PARSE lines\n var lines=CSV.split('\sn');\n for (var i=1; i<lines.length; i++) { if (!lines[i].length) continue;\n var values=lines[i].split(',');\n // DECODE commas, newlines and doubled-quotes within quoted values\n for (var v=0; v<values.length; v++)\n values[v]=values[v].replace(commaRE,',').replace(newlineRE,'\sn').replace(/\sx22\sx22/g,'\sx22');\n // EXTRACT tiddler values\n var title=''; var text=''; var tags=[]; var fields={};\n var created=null; var when=new Date(); var who=config.options.txtUserName;\n for (var v=0; v<values.length; v++) { var val=values[v];\n if (names[v]) switch(names[v].toLowerCase()) {\n case 'title': title=val.replace(/\s[\s]\s|/g,'_'); break;\n case 'created': created=new Date(val); break;\n case 'modified':when=new Date(val); break;\n case 'modifier':who=val; break;\n case 'text': text=val; break;\n case 'tags': tags=val.readBracketedList(); break;\n default: fields[names[v].toLowerCase()]=val; break;\n }\n }\n // CREATE tiddler in temporary store\n if (title.length) remoteStore.saveTiddler(title,title,text,who,when,tags,fields,true,created||when);\n }\n return remoteStore.getTiddlers('title'); \n}\n\nconfig.macros.importTiddlers.filterTiddlerList=function(success,params,txt,src,xhr) {\n var cmi=config.macros.importTiddlers; // abbreviation\n var src=src.replace(/%20/g,' ');\n if (!success) { displayMessage(cmi.openErrMsg.format([src,xhr.status])); return; }\n cmi.all=cmi.readTiddlersFromHTML(txt);\n if (!cmi.all||!cmi.all.length) cmi.all=cmi.readTiddlersFromCSV(txt)\n var count=cmi.all?cmi.all.length:0;\n var querypos=src.lastIndexOf('?'); if (querypos!=-1) src=src.substr(0,querypos);\n displayMessage(cmi.foundMsg.format([count,src]));\n cmi.inbound=cmi.filterByHash(params,cmi.all); // use full URL including hash (if any)\n cmi.$('importLastFilter').value=cmi.lastFilter;\n window.refreshImportList(0);\n}\n\nconfig.macros.importTiddlers.filterByHash=function(src,tiddlers)\n{\n var hashpos=src.lastIndexOf('#'); if (hashpos==-1) return tiddlers;\n var hash=src.substr(hashpos+1); if (!hash.length) return tiddlers;\n var tids=[];\n var params=hash.parseParams('anon',null,true,false,false);\n for (var p=1; p<params.length; p++) {\n switch (params[p].name) {\n case 'anon':\n case 'open':\n tids.pushUnique(params[p].value);\n break;\n case 'tag':\n if (store.getMatchingTiddlers) { // for boolean expressions - see MatchTagsPlugin\n var r=store.getMatchingTiddlers(params[p].value,null,tiddlers);\n for (var t=0; t<r.length; t++) tids.pushUnique(r[t].title);\n } else for (var t=0; t<tiddlers.length; t++)\n if (tiddlers[t].isTagged(params[p].value))\n tids.pushUnique(tiddlers[t].title);\n break;\n case 'story':\n for (var t=0; t<tiddlers.length; t++)\n if (tiddlers[t].title==params[p].value) {\n tiddlers[t].changed();\n for (var s=0; s<tiddlers[t].links.length; s++)\n tids.pushUnique(tiddlers[t].links[s]);\n break;\n }\n break;\n case 'search':\n for (var t=0; t<tiddlers.length; t++)\n if (tiddlers[t].text.indexOf(params[p].value)!=-1)\n tids.pushUnique(tiddlers[t].title);\n break;\n }\n }\n var matches=[];\n for (var t=0; t<tiddlers.length; t++)\n if (tids.contains(tiddlers[t].title))\n matches.push(tiddlers[t]);\n displayMessage(config.macros.importTiddlers.filterMsg.format([matches.length,hash]));\n config.macros.importTiddlers.lastFilter=hash;\n return matches;\n}\n//}}}
http://www.colorcombos.com/\n\n00457a Dark Blue\n5985a8 Light Blue\na37c5f Brown\nf3f3f3 Grey\n333333 Dark\nfdfdfd different grey
Formats: [[XML|?format=xml]] | [[YAML|?format=yaml]]\n
[img[filestore/uploads/repositories/unt-model.png]]\n\n{{{\n #. Take N paths to METS files and process the given files and add them to Solr\n #. Take N paths to METS files and process delete the files from the Solr instances\n+#. Take a resource id (e.g. metadc2000) and derive the location of the .mets.xml file from it\n #. Recursively walk a pairtree instance and process all `*mets.xml` files in the root of the non shorty or "object" \n directory (in case there happened to be a something.mets.xml file uploaded as a digital object in the system)\n@@ -46,4 +47,5 @@\n #. Metadata-Parsing Instructions based on Collection, Institution, System values.\n #. Number of files before commit \n+#. Filesystem location of PairTree root\n}}}\n\n(((\nhttp://digitalprojects.library.unt.edu:88/code/changeset/732/documentation/aubrey?format=diff&new=732\nhttp://digitalprojects.library.unt.edu:88/code/browser/documentation/aubrey?rev=2195 (This is really good)\n)))\n\nhttp://code.google.com/p/foresite-toolkit/ (OAI-RE) http://chronicles-of-richard.blogspot.com/
//{{{\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//}}}
http://www.ukoln.ac.uk/preservation/presentations/2006/cetis-sig/oais-introduction.pdf
http://archive.ifla.org/VII/s13/wgfrbr/FRBRoo_V9.1_PR.pdf\n\nhttp://www.w3.org/TR/owl-ref/\n\nhttp://www.dcc.ac.uk/events/cidoc-2008-glasgow/\n\n[[Everybody has to understand this|http://futurelib.pbworks.com/Framework]]
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Open options panel'>><<exportTiddlers>><<exportLink>><<importLink>><<login>>\n
[[This is from the Fedora Group | http://www.library.cornell.edu/dlit/MathArc/web/Story.html]] and is a very detailed diagram of an [[OAIS reference model|http://public.ccsds.org/publications/archive/650x0b1.pdf]]\n\n<html>\n<img src="filestore/uploads/repositories/oasis.gif" width="80%" height="52%" onClick="window.open('filestore/uploads/repositories/oasis.gif', 'OASIS Model')"/>\n</html>
[[Presentation at Stanford by the CDL people|/filestore/uploads/repositories/pasig-2009-pods.pdf
Below is a Web 2.0 Meme Map. How do you think our library does?\n\n[img[filestore/uploads/libraries/web2mememap.jpg]]
!!!What are our expectations?\nHigh end of the market (Google, LANL, CERN)\nMiddle (MIT, HARVARD)\nLowest end of the market (WCSU)
Anyone who has ever helped anybody do almost any thing knows the good feeling that comes by helping. Do we do it enough to save us?
/***\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]]}}}
http://www.hawksworx.com/journal/ \n\nGood idea about how to use Jquery plugin
/***\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 class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references revisions jump fullscreen'></div>\n\n<div class='title' macro='view title'></div>\n\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\n<div class='tagging' macro='tagging'></div>\n\n<div class='tagged' macro='tags'></div>\n\n<div class='viewer' macro='view text wikified'></div>\n\n<div class='tagClear'></div>\n\n<!--}}}-->\n\n
[img[filestore/uploads/datamodels/pearce-annex1fig.png]]
<<tagCloud>>
/***\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 = 126546973267;\nzw.username = 'Anonymous User';\nconfig.options.txtUserName = 'Anonymous User';\nzw.serverUrl = "http://kennison.name/work/notes";\nversion.extensions.ZiddlyWiki = '1';\nzw.tiddlerList = {\n"SiteSubtitle": "893.27582.25108.27528" ,"SiteTitle": "893.27581.40443.42427" ,"GettingStarted": "892.63082.60525.59801" ,"PageTemplate": "895.18070.64735.51933" ,"ViewTemplate": "896.60308.2409.52804" ,"OptionsPanel": "892.63235.9657.20138" ,"StyleSheet": "899.48243.48775.48810" ,"ColorPalette": "898.7088.22099.63590" ,"StyleSheetColors": "892.52688.26738.31914" ,"StyleSheetLayout": "892.52688.58577.41574" ,"Evaluating the OAIS Reference Model": "894.29933.30825.3908" ,"Repository as a Set of Services": "895.3240.32091.62771" ,"Mets Records": "893.27901.64349.9949" ,"Replication of Content": "891.46617.47506.3942" ,"Chaining multiple systems together for one purpose": "898.7085.22542.37546" ,"Why Good Data Models Matter": "898.7090.8855.63385" ,"Publishing Functions": "898.7090.64272.8055" ,"The Zope Framework - Major Parts": "898.7091.40667.59665" ,"EAD Repositories with Search": "892.47307.19751.30173" ,"What is a Library": "895.23762.50038.14165" ,"What is a Portal": "898.7092.37278.19797" ,"Embedded Marc Holding Information": "891.46500.34137.51763" ,"Arts and Humanities in the Digital Age": "898.7093.31911.45943" ,"DefaultTiddlers": "893.65002.7422.3447" ,"Web_Design": "891.46563.10151.46233" ,"Digital Collections": "898.7094.21335.46387" ,"Libraries": "891.48102.33717.40482" ,"HypeCycle": "898.14336.5894.26470" ,"Instructional Design": "892.51679.55532.27665" ,"Metadata": "891.53849.691.15291" ,"Scholarly Works Application Profile": "896.60359.10688.409" ,"Strategic Response": "891.55321.47433.41915" ,"Library Futures": "897.24507.56674.56422" ,"Grant Ideas": "892.58892.7501.39611" ,"Library Futures Continued": "891.59288.18756.15974" ,"Mets Record From Eprints": "898.30131.5379.1245" ,"Example Subject Pages": "898.7095.36094.23057" ,"Library Competencies": "892.57763.1076.30242" ,"Moving TKL to PHP5": "892.5548.62665.62054" ,"Readings": "892.57764.25218.6690" ,"Co-creators-Personal Learning Environments": "896.50274.4506.55398" ,"Innovation Adoption Curve": "898.14315.19470.55671" ,"Convergence of Academic Support Units": "896.7016.36754.4437" ,"Dublin Core Generator": "893.27911.44238.57582" ,"Web 1, 2 , 3": "892.42725.13742.25361" ,"What's are Ideas worth?": "893.49841.46027.32273" ,"The Revolution": "892.44350.38428.443" ,"Linking Data Concepts": "895.30620.12771.31453" ,"ToggleSideBarMacro": "892.63080.37744.11451" ,"MainMenu": "895.65413.2449.52940" ,"AdvancedOptions": "892.48826.64089.12458" ,"TaggerPlugin": "892.63082.16185.6434" ,"TopMenu": "892.48920.7925.17100" ,"AutoOpenTiddlersPlugin": "893.65010.15179.58009" ,"SinglePageModePlugin": "894.907.46370.41591" ,"TagCloudPlugin": "892.53214.40560.15820" ,"Tagcloud": "892.51644.63424.1979" ,"Library Realignment": "896.41319.26910.58999" ,"Library viewed through Web 2.0 Meme": "898.14961.9566.40038" ,"Systems at Harvard": "898.7086.3579.40925" ,"Contents": "899.56181.58392.44185" ,"Using Delicious": "893.27594.40348.47223" ,"contentFooter": "893.59410.53621.30941" ,"Information Glossary": "893.27907.10238.50039" ,"Web site to steal from": "896.64461.39802.42496" ,"Campus Wide Document Management": "893.27838.46467.56900" ,"Ontologies and Education": "892.52368.48461.54579" ,"DropDownMenuPlugin": "893.59335.64310.42410" ,"InlineTabsPlugin": "894.8311.40935.38741" ,"InlineSlidersPlugin": "894.8312.39860.11673" ,"SystemLayout": "893.4792.11304.16093" ,"SystemTiddlers": "893.4795.3585.61883" ,"SystemOptions": "893.4794.40006.24268" ,"ShadowedPages": "893.4790.18394.358" ,"Contents By Creation Date": "893.4709.21807.55705" ,"Contents By Title": "892.63077.6627.37239" ,"Formatting Headings": "892.53589.14582.63300" ,"Formating Inline Text": "892.53590.29633.46899" ,"Formatting Lists": "892.53591.42262.27374" ,"Formatting Preformatted Text": "892.53605.37065.9591" ,"Formatting Tables": "892.53596.24938.19541" ,"Formatting - Inserting Images": "892.53598.7904.29201" ,"Formatting - Hyperlinks": "893.5132.27260.19370" ,"Formatting - Special Markers": "892.53604.6067.20514" ,"Macros": "892.63086.13939.65450" ,"GoogleGadget": "893.65009.2755.58709" ,"Red Barns": "893.27909.41724.53623" ,"InlineJavascriptPlugin": "892.56010.41246.18688" ,"Libraries and IT": "893.56536.19300.13755" ,"Why?": "893.55467.9220.26982" ,"Repository Diagram": "897.24966.15152.54732" ,"x_StyleSheet": "893.1928.25542.10069" ,"MIT Faculty Vote": "892.58433.47079.50483" ,"Expected Performance": "892.58495.49996.53111" ,"Digital Libraries": "892.58841.7908.18602" ,"Script Test": "893.27589.59688.37427" ,"SimpleSearchPlugin": "894.8313.63898.8140" ,"Login": "892.63445.61926.56883" ,"Information Seeking Behvior": "893.56619.12341.29849" ,"Hawksworx": "893.2954.30723.65024" ,"Formatting Blockquotes": "893.4737.6399.24729" ,"BreadCrumbsPlugin": "893.65008.30281.20582" ,"System Configuration": "893.59333.2419.16486" ,"CookieJar": "896.21623.19770.20360" ,"Falling Consumption": "893.27592.10977.6758" ,"Knowledge Organization": "893.30456.62214.38860" ,"Knowledge Base": "893.30554.49186.31283" ,"Student Capabilities": "893.58558.53445.61576" ,"Abstraction": "893.33995.7414.42752" ,"Job Responsibilities": "895.3389.41118.40567" ,"Software": "893.40607.17157.12629" ,"ImportTiddlersPlugin": "893.53997.31366.19848" ,"Libraries and IT-Notes": "895.23752.59605.10854" ,"NestedSlidersPlugin": "893.59332.206.32955" ,"Home Button": "896.60542.958.63914" ,"DCTableOfContentsPlugin": "893.59324.7167.2321" ,"Table of Contents Example": "893.59326.6712.64307" ,"Inline Slider Example": "896.39741.64386.25224" ,"Drop Menu Test": "894.22674.23562.17373" ,"LightBox Example": "896.39863.48129.3822" ,"AccordianMenuPlugin": "893.59416.38930.28023" ,"AccordionMenuPluginDemo": "894.29723.37286.39338" ,"PartTiddlerPlugin": "893.60691.43417.45192" ,"Digital Projects": "893.61255.54772.58794" ,"Marketization of Higher Education": "893.62271.20233.20411" ,"Open Access to Research": "893.62304.54180.2764" ,"Product vs. Platform": "898.7084.57109.41796" ,"Information, Management, and IT": "893.63730.21675.30259" ,"Science of Information Behavior": "893.63754.32459.23330" ,"Information Systems with the user at the center": "898.14928.25495.63812" ,"Research Support Services": "897.50539.44506.32426" ,"Edit Tiddler Script": "894.5652.47409.16110" ,"Web Templates": "894.28337.9501.60040" ,"Environment at School": "894.13829.64086.5922" ,"Copyright Book": "894.19728.35292.23057" ,"Michael Day": "894.29879.18237.18022" ,"A Goal with out a Plan": "897.24984.13540.12373" ,"Ways of Working": "894.30128.35823.26777" ,"Repositories Must": "894.51152.27546.12151" ,"IP Address Change": "894.64238.11117.2764" ,"Fedora": "895.14905.18796.14677" ,"Metadata Standards": "895.40843.33397.56576" ,"Blended Learning": "898.14321.56473.34816" ,"Dublin Core Application Profiles": "898.6849.13660.64819" ,"Repository Services": "897.26126.52754.7406" ,"HTTP Response Codes": "895.3309.28411.52155" ,"Job Listings": "896.26892.37499.21333" ,"Topic Maps": "895.14651.3419.64989" ,"Wisconson": "895.30605.60178.30037" ,"Beyond Search towards Learning": "896.57119.20252.6246" ,"eScidDoc": "898.14323.58937.46165" ,"Semantic Web Stack Technology": "895.16036.5379.17715" ,"Changes in the Web": "898.14965.62686.40584" ,"Types of Metadata that we Need": "896.26973.10410.44834" ,"Digital Object Lifecyle": "895.16162.44209.28672" ,"Migration of Data": "895.17579.62776.56149" ,"Future of Learning": "895.17588.61743.27153" ,"FoXML": "898.54701.2876.46694" ,"Things to Read": "898.12530.6477.25446" ,"Applications and Repositories": "898.14941.57083.14574" ,"Repository Exchange": "897.50549.30612.40448" ,"Metadata Links": "897.25025.47948.27340" ,"UNT Model": "898.31950.14503.46455" ,"Apple and Planning": "896.5339.24507.34030" ,"The Future of Education": "896.5394.12759.17732" ,"Users on the Web": "896.16577.19673.46353" ,"InstantTimestampPlugin": "896.6964.34561.61815" ,"JsDoIt": "896.6971.45669.32273" ,"Color Chart": "896.7026.65016.12049" ,"Recursively chmod directories only": "896.7060.16609.12339" ,"ImportedTiddlers": "899.53571.33300.64102" ,"The Heart of an Information System": "898.14933.38189.45550" ,"Process of Web Design": "896.10913.20871.57753" ,"AWK program to Report Video Use": "896.25359.47338.62958" ,"Unintended Consequences": "896.25409.17514.5444" ,"21st Century College": "897.13226.8577.29491" ,"Staffing a Digital Library": "896.25573.5709.19933" ,"Eprints Notes": "896.27441.55425.48964" ,"Hypecycle 2": "898.14338.14044.63129" ,"Easy Bib": "896.37489.58508.36659" ,"Python XMLSchema": "896.37524.20569.49186" ,"Conversations I Can't Have": "896.41227.56928.46199" ,"Data Modeling Notation Summary": "897.50538.44068.64358" ,"Open Educational Resources": "896.47148.46246.51353" ,"Ian Bicking on what problems need to be solved": "896.48460.48607.52070" ,"Using Docbook to Create Learning Objects": "898.14985.63110.34662" ,"Questions about your web site": "896.55804.26343.4881" ,"Attention Structures": "896.56910.36381.47291" ,"Read This": "898.7957.22955.4352" ,"Digital Library Architechture": "896.57144.7794.7714" ,"Preservation Data and Content Models at Harvard": "896.57114.7081.14301" ,"QuizPlugin": "896.57177.1640.53623" ,"planets": "896.57181.55016.1126" ,"Book Quiz": "896.57181.15840.51097" ,"Charles Dickens FRBR Example": "899.39039.43441.45363" ,"Swap Application Profile": "896.60476.23429.30190" ,"Simple Music FRBR Example": "896.60347.4949.50261" ,"What is research": "896.60592.51236.19336" ,"Wonder Cabinet": "897.208.8365.38348" ,"Museums (Virtual)": "897.254.10223.30993" ,"Teams": "897.11646.32964.40482" ,"Cost of Education": "897.13227.26715.54186" ,"What is Research": "897.13246.6749.56473" ,"UNT Archictecture": "898.14987.60756.19882" ,"Library Mottos": "897.23504.6273.40362" ,"Affinity Strings": "898.14983.57280.16008" ,"OKI Interface Definitions": "897.50564.61700.39645" ,"Australian Mets Records": "897.50541.17805.49578" ,"JISC Service Model": "897.50535.36006.37120" ,"Australian Service Model": "897.50531.14713.11400" ,"What can be modeled by a concept": "897.26675.18955.54630" ,"Librarians and Teaching": "897.26687.20644.64238" ,"T.D. Wilson Information Behavior Model": "897.50568.40613.32716" ,"Map of Nano Science": "897.50527.61835.16793" ,"Global Map of Science": "897.50527.37773.53879" ,"EAD DAO": "897.46400.3797.38912" ,"Dubline Core as Linked Data": "898.7272.45568.62498" ,"Micro Curation": "897.63906.1883.39662" ,"Tim Berners-Lee": "897.64999.39071.59494" ,"Scientific Symbols": "898.2518.7772.14421" ,"JPEG 2000 by Greg Coats": "898.7089.12556.15223" ,"WCSU Colors": "899.49500.36690.50670" ,"Adding Value": "899.53571.33202.44748" ,"FormTiddlerPlugin": "899.53577.49314.41267" ,"MyFormTemplate": "899.60698.13842.44424" ,"MyForm": "899.56736.39748.58572" ,"MyForm2": "899.56852.49787.9676" ,};\n//}}}\n
[img[http://bnode.org/media/2009/07/08/semantic_web_technology_stack.png]]
''Saturday 2/28/2009''\n[[Take a look at this website|http://www.bohemiancoding.com/]] This site has some good ideas and a cool look in regard to Web Design. \n\n[[Some ideas for a Omeka site|http://www.learner.org/resources/series13.html]]\n \n\n[[Interface dot com|http://www.interfaceglobal.com/]]\n\n[[Boston University|http://www.bu.edu/]] Simple clean design\n\nhttp://JoshuaBradley.co.uk/
http://www.ad.jyu.fi/users/a/ankarjal/ITKD50/Dublin%20Core%20Metadata%20Template.htm\n\nhttp://alimanfoo.wordpress.com/2008/01/30/on-the-oais-information-model-as-a-platform-independent-model-pim-in-a-model-driven-software-architecture/\n\nhttp://www.webarchiv.cz/generator/dc.php?lang=en\n\nhttp://sourceforge.net/projects/dcmetatoolkit\n\n\n\n
http://homepage.mac.com/gregcoats/jp2/formats.html\n\nTest your browser\n\n"Greg Coats HomePage":http://homepage.mac.com/gregcoats/jp2.html\n\n
[[Home|/]] <<newTiddler label: "Add Tiddler">><<newJournal label: "Add Dated Entry">>\n[[Contents]]\n\n
<html>\n<body bgcolor="#ffffff" text="#000000"><font face="monospace">\n<font color="#8080ff"># video.awk</font><br>\n<font color="#8080ff"># 2009-08-27</font><br>\n<font color="#8080ff"># Takes dumped item data from III and formats it for the web</font><br>\n<font color="#8080ff"># Part of a pipeline that starts with the data sorted by using sort command</font><br>\n<br>\n<br>\n<font color="#ff40ff">BEGIN</font>&nbsp;{ <font color="#ff40ff">FS</font>&nbsp;= <font color="#ff6060">&quot;</font><font color="#ff40ff">\st</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">OFS</font>&nbsp;= <font color="#ff6060">&quot;</font><font color="#ff40ff">\st</font><font color="#ff6060">&quot;</font><font color="#ff40ff">;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;indexes = <font color="#ff6060">&quot;count,circs,uses&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">split</font>(indexes<font color="#ff40ff">,</font>&nbsp;cd<font color="#ff40ff">,</font>&nbsp;<font color="#ff6060">&quot;,&quot;</font>)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">split</font>(indexes<font color="#ff40ff">,</font>&nbsp;dvd<font color="#ff40ff">,</font>&nbsp;<font color="#ff6060">&quot;,&quot;</font>)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">split</font>(indexes<font color="#ff40ff">,</font>&nbsp;video<font color="#ff40ff">,</font>&nbsp;<font color="#ff6060">&quot;,&quot;</font>)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;startDtml() &gt; <font color="#ff6060">&quot;c_cds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;startTable() &gt; <font color="#ff6060">&quot;c_cds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;startDtml() &gt; <font color="#ff6060">&quot;c_dvds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;startTable() &gt; <font color="#ff6060">&quot;c_dvds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;startDtml() &gt; <font color="#ff6060">&quot;c_videos.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;startTable() &gt; <font color="#ff6060">&quot;c_videos.html&quot;</font><br>\n<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;startHtml(title) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;html&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&lt;head&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&lt;title&gt;&quot;</font>&nbsp;title <font color="#ff6060">&quot;&lt;/title&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = s&nbsp;&nbsp;<font color="#ff6060">&quot;&lt;link rel=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">stylesheet</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;type=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">text/css</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;href=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">/bk.css</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;/&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&lt;link rel=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">stylesheet</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;type=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">text/css</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;href=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">style_sheet</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;/&gt;&quot;</font>&nbsp;<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = s <font color="#ff6060">&quot;&lt;/head&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&lt;body&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&lt;img src=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">/images/2rf.gif</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;align=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">middle</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;hspace=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">10</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;&gt;&lt;h1&gt;&quot;</font>&nbsp;title <font color="#ff6060">&quot;&lt;/h1&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;endHtml() {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;/body&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&lt;/html&gt;&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;startDtml(title) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;dtml-var standard_html_header&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&lt;img src=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">/images/2rf.gif</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;align=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">middle</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;hspace=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">10</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&nbsp;&gt;&lt;h1&gt;&quot;</font>title<font color="#ff6060">&quot;&lt;/h1&gt;&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;endDtml() {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;dtml-var standard_html_footer&gt;&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;startTable() {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;table&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;endTable() {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;/table&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;printRow(count<font color="#ff40ff">,</font>&nbsp;title) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;tr&gt;&lt;td&gt;&quot;</font>count<font color="#ff6060">&quot;&lt;/td&gt;&lt;td&gt;&quot;</font>title<font color="#ff6060">&quot;&lt;/td&gt;&lt;/tr&gt;&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;commas(n) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">gsub</font>(<font color="#ff6060">/,/</font><font color="#ff40ff">,</font><font color="#ff6060">&quot;&quot;</font><font color="#ff40ff">,</font>n)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;point = <font color="#00ffff">index</font>(n<font color="#ff40ff">,</font><font color="#ff6060">&quot;.&quot;</font>) - <font color="#ff6060">1</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>if</b></font>&nbsp;(point &lt; <font color="#ff6060">0</font>) point = <font color="#00ffff">length</font>(n)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>while</b></font>&nbsp;(point &gt; <font color="#ff6060">3</font>) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point -= <font color="#ff6060">3</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = <font color="#00ffff">substr</font>(n<font color="#ff40ff">,</font><font color="#ff6060">1</font><font color="#ff40ff">,</font>point)<font color="#ff6060">&quot;,&quot;</font><font color="#00ffff">substr</font>(n<font color="#ff40ff">,</font>point + <font color="#ff6060">1</font>)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;}<br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;n<br>\n}<br>\n<br>\n<font color="#ff6060"><b>function</b></font>&nbsp;outputResults(type<font color="#ff40ff">,</font>&nbsp;counter) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;totalcnt = counter[<font color="#ff40ff">&quot;count&quot;</font>]<br>\n&nbsp;&nbsp;&nbsp;&nbsp;tc = commas(totalcnt)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;circs = counter[<font color="#ff40ff">&quot;circs&quot;</font>]<br>\n&nbsp;&nbsp;&nbsp;&nbsp;noncirccount = counter[<font color="#ff40ff">&quot;count&quot;</font>] - counter[<font color="#ff40ff">&quot;uses&quot;</font>]<br>\n&nbsp;&nbsp;&nbsp;&nbsp;noncircpercent = (noncirccount / totalcnt) * <font color="#ff6060">100</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = <font color="#ff6060">&quot;&lt;h1&gt;Report for &quot;</font>&nbsp;type <font color="#ff6060">&quot;&lt;/h1&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = s <font color="#ff6060">&quot;&lt;h3&gt;Total Item Count: &quot;</font>&nbsp;commas(totalcnt) <font color="#ff6060">&quot; &lt;/h3&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = s <font color="#ff6060">&quot;&lt;h3&gt;Count of Non Circulating Items: &quot;</font>&nbsp;commas(noncirccount) <font color="#ff6060">&quot;&lt;/h3&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = s <font color="#ff6060">&quot;&lt;h3&gt;Percent Non Circulating Items: &quot;</font>&nbsp;noncircpercent <font color="#ff6060">&quot;&lt;/h3&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;s = s <font color="#ff6060">&quot;&lt;h3&gt;Total Circs: &quot;</font>&nbsp;commas(circs) <font color="#ff6060">&quot;&lt;/h3&gt;</font><font color="#ff40ff">\sn</font><font color="#ff6060">&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>return</b></font>&nbsp;s<br>\n}<br>\n<br>\n<br>\n<font color="#ff40ff">$3</font>&nbsp;~ <font color="#ff6060">/whcd/</font>&nbsp;{<br>\n&nbsp;&nbsp;&nbsp;&nbsp;cd[<font color="#ff40ff">&quot;count&quot;</font>]++<br>\n&nbsp;&nbsp;&nbsp;&nbsp;cd[<font color="#ff40ff">&quot;circs&quot;</font>]+=<font color="#ff40ff">$2</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>if</b></font>&nbsp;(<font color="#ff40ff">$2</font>&nbsp;&gt; <font color="#ff6060">0</font>)&nbsp;&nbsp;<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd[<font color="#ff40ff">&quot;uses&quot;</font>]++ <br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;printRow(<font color="#ff40ff">$2</font><font color="#ff40ff">,</font><font color="#ff40ff">$1</font>) &gt; <font color="#ff6060">&quot;c_cds.html&quot;</font><br>\n}<br>\n<br>\n<br>\n<font color="#ff40ff">$3</font>&nbsp;~ <font color="#ff6060">/whdvd/</font>&nbsp;{<br>\n&nbsp;&nbsp;&nbsp;&nbsp;dvd[<font color="#ff40ff">&quot;count&quot;</font>]++<br>\n&nbsp;&nbsp;&nbsp;&nbsp;dvd[<font color="#ff40ff">&quot;circs&quot;</font>]+=<font color="#ff40ff">$2</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>if</b></font>&nbsp;(<font color="#ff40ff">$2</font>&nbsp;&gt; <font color="#ff6060">0</font>)&nbsp;&nbsp;<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dvd[<font color="#ff40ff">&quot;uses&quot;</font>]++ <br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;printRow(<font color="#ff40ff">$2</font><font color="#ff40ff">,</font><font color="#ff40ff">$1</font>) &gt; <font color="#ff6060">&quot;c_dvds.html&quot;</font><br>\n}<br>\n<br>\n<font color="#ff40ff">$3</font>&nbsp;~ <font color="#ff6060">/whv/</font>&nbsp;{<br>\n&nbsp;&nbsp;&nbsp;&nbsp;video[<font color="#ff40ff">&quot;count&quot;</font>]++<br>\n&nbsp;&nbsp;&nbsp;&nbsp;video[<font color="#ff40ff">&quot;circs&quot;</font>]+=<font color="#ff40ff">$2</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>if</b></font>&nbsp;(<font color="#ff40ff">$2</font>&nbsp;&gt; <font color="#ff6060">0</font>)&nbsp;&nbsp;<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;video[<font color="#ff40ff">&quot;uses&quot;</font>]++ <br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;printRow(<font color="#ff40ff">$2</font><font color="#ff40ff">,</font><font color="#ff40ff">$1</font>) &gt; <font color="#ff6060">&quot;c_videos.html&quot;</font><br>\n}<br>\n<br>\n<br>\n<font color="#ff40ff">END</font>&nbsp;{ <br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;startDtml() &gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;outputResults(<font color="#ff6060">&quot;CDs&quot;</font><font color="#ff40ff">,</font>&nbsp;cd) &gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;<font color="#ff6060">&quot;&lt;a href=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">c_cds.html</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&gt;View CD Data&lt;/a&gt;&nbsp;&nbsp;(in decending order)</font><font color="#ff40ff">\sn\sn</font><font color="#ff6060">&quot;</font>&nbsp;&gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;&nbsp;outputResults(<font color="#ff6060">&quot;DVDs&quot;</font><font color="#ff40ff">,</font>&nbsp;dvd) &gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;<font color="#ff6060">&quot;&lt;a href=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">c_dvds.html</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&gt;View DVD Data&lt;/a&gt;&nbsp;&nbsp;(in decending order)</font><font color="#ff40ff">\sn\sn</font><font color="#ff6060">&quot;</font>&nbsp;&gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;&nbsp;outputResults(<font color="#ff6060">&quot;Videos&quot;</font><font color="#ff40ff">,</font>&nbsp;video) &gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;<font color="#ff6060">&quot;&lt;a href=</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">c_videos.html</font><font color="#ff40ff">\s&quot;</font><font color="#ff6060">&gt;View Video Tape Data&lt;/a&gt;&nbsp;&nbsp;(in decending order)</font><font color="#ff40ff">\sn\sn</font><font color="#ff6060">&quot;</font>&nbsp;&gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;endDtml()&nbsp;&nbsp;&gt; <font color="#ff6060">&quot;c_summary.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;endTable() &gt; <font color="#ff6060">&quot;c_cds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;endDtml() &gt; <font color="#ff6060">&quot;c_cds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;endTable() &gt; <font color="#ff6060">&quot;c_dvds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;endDtml() &gt; <font color="#ff6060">&quot;c_dvds.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;endTable() &gt; <font color="#ff6060">&quot;c_videos.html&quot;</font><br>\n&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff6060"><b>print</b></font>&nbsp;endDtml() &gt; <font color="#ff6060">&quot;c_videos.html&quot;</font><br>\n}<br>\n&nbsp;&nbsp;&nbsp;&nbsp;<br>\n<br>\n</font></body></html>
"The world does not want to be modeled" but that is what topic maps do\n\n!!!Here's what Topic Maps could offer the library world:\n* a generic, subject-centric, associative data model;\n* a technology with pluggable ontology work (FRBR in a breeze);\n* a means and a technology to deal with serious identity control (sharing persistent identities solved);\n* tools for semantic mapping of collections (focusing on relationships rather than untyped values);\n* built-in merging and sharing of rich metadata (bringing our collection metadata out of black boxes for more diverse systems);\n* context-dependent scoping of said metadata (viewpoints, source control, authorizing, security);\n* shared global authority control (finally a model for this!);\n* integrated thesaurus and other classification schemes (including automatic mapping between LCSH and Dewey, for example);\n* communities and people (including academic circles and the open-source movement) to help with adaption and implementation;\n* and last but not least, systems based on open international standards that preserve for future generations the knowledge we ourselves put into our work.\n\n''Sunday 3/8/2009''\nCheck this out http://cidoc.ics.forth.gr/index.html\nhttp://topicmaps.bouvet.no/planet/\n\n\n\n \n\n\n\n
[[Types of things in the world|http://www.simongrant.org/pubs/web/typesofthing.html]] by Simon Grant is interesting. He calls this his "top ontology"
!!!RECEIVE, HUNT, DO ```from [[Businessweek|http://www.businessweek.com/print/technology/content/feb2008/tc20080229_131531.htm]]```\n<<<\nBut marketers are making a big mistake if they think widgets will help them build deep inroads with this demographic. To understand why, consider the mindset of the people spending time spiffing up their profiles and socializing online.\n\nThey are doing, not hunting, and you'll have a hard time reaching them when they're in this mode. There are three modes, or mindsets, people take on when they use interactive communications: receiving, hunting, and doing. You receive a phone call. You hunt for a book at the library. You take an action ”say, writing an article such as this.\n\nThe history of the Web is a transition between these phases. Back in the mid-1990s, most people were happy to "receive" information on the Web. Content (meaning Web sites) was king, and so AOL, EarthLink (ELNK), and marketers responded by trying to create "sticky" Web portals where people would spend long stretches, returning often.\n\nBy 2000, the Web expanded, and millions of Web sites meant we all got lost. So consumers entered "hunt" mode, and Google (GOOG) arose as a powerful search engine helping us rapidly find stock quotes or sneakers for sale.\n\nBut "do" is where the Web is headed in 2008. Millions of people mostly the under-35 demographic have signed up for Facebook, MySpace (NWS), and Twitter. They are leaving single Web sites behind and becoming immersed in social media. Now Internet users can create, contribute, network, edit, share, even steal online, and pass it to hundreds of friends or colleagues. Google Docs helps you edit spreadsheets; Mint.com watches your bank and credit-card balances; Twitter lets you track the thoughts of friends.\n<<<\n
[img[/filestore/uploads/libraries/frbrexample.png]]\n\n[Allyson Carlyle|http://mail.asis.org/Bulletin/Aug-07/Carlyle_Fusco.pdf]]\n\nThis is a very good article show how catalogs work when you have multiple "entities" to work with.
/***\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: "«",\n arrow2: "»"\n};\n\nconfig.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var tooltip= params[1]||'toggle sidebar';\n var mode = (params[2] && params[2]=="hide")? "hide":"show";\n var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;\n var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;\n var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");\n if (mode == "hide")\n { \n (document.getElementById("sidebar")).setAttribute("toggle","hide");\n setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");\n }\n};\n\nconfig.macros.toggleSideBar.onToggleSideBar = function(){\n var sidebar = document.getElementById("sidebar");\n var settings = config.macros.toggleSideBar.settings;\n if (sidebar.getAttribute("toggle")=='hide')\n {\n setStylesheet(settings.styleShow,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","show");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);\n }\n else\n { \n setStylesheet(settings.styleHide,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","hide");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);\n }\n\n return false;\n}\n\nsetStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\sn","ToggleSideBarButtonStyles");\n\n//}}}
[[Publication for UKOlln|http://www.ukoln.ac.uk/repositories/publications/oais-evaluation-200607/Drs-OAIS-evaluation-0.5.pdf]]\n\nI glanced at this but probably need to read it.\n\n
/***\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//}}}
/***\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: 1, //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//}}}
>Research is the process of planned inquiry
/***\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//}}}
[img[Adoption Curve|http://kennison.name/filestore/uploads/innovation/adoption_graph.gif]]
/***\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
*Menu1\n**MenuItem1\n**MenuItem2\n* Menu2\n** Menu2Item1\n** Menu2Item2\n<<accordion>>
>Engaging the broader library community in implementing leading-edge advances such as those described above and others re-sulting from programs offered by IMLS and private funders such as the Mellon Foundation. More than just a matter of disseminating information about these advances, this broader engagement will require systematic and systemic effort to help different audiences learn a new language, with faculty needing to understand issues of librarianship and librarians growing to appreciate faculty roles. Of particular interest is the challenge these changing roles will place on the future structure and content of graduate and professional school programs.\n\nThis is a interesting take on the subject
;A goal without a plan is just a wish.\n:Antoine de Saint-Exupery French writer (1900 - 1944)
/***\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> blockquote, level 1\n>> blockquote, level 2\n>>> blockquote, level 3\n\n<<<\nblockquote\n<<<\n}}}\n<<<\n> blockquote, level 1\n>> blockquote, level 2\n>>> blockquote, level 3\n\n> blockquote\n<<<
A strategic response would be well thought out and go according to plan. We have no plan and therefore our response has been been reactive and improvised.
/***\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
http://hul.harvard.edu/ois/systems/ \n\nThis is interesting on several accounts. I need to structure this here.\n\nAll you have to do is double click in an entry to edit. \n\n
<<list shadowed>>
<html>\n <h2>Dublin Core with Qualifiers</h2>\n <table width="100%" border="2" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF">\n <tr bgcolor="#CCCCCC">\n <td width="26%" valign="top"><b><font color="#000000">Element</font></b></td>\n <td width="24%" valign="top"><b><font color="#000000">Qualifier </font></b></td>\n <td width="50%" valign="top"><b><font color="#000000">Scope Note</font></b></td>\n </tr>\n <tr>\n <td width="26%" height="83" valign="top">contributor</td>\n <td width="24%" height="83" valign="top">&nbsp;</td>\n <td width="50%" height="83" valign="top"> A person, organization,\n or service responsible for the content of the resource. Catch-all\n for unspecified contributors </td>\n </tr>\n <tr>\n <td width="26%" height="46" valign="top">contributor </td>\n <td width="24%" height="46" valign="top">advisor</td>\n <td width="50%" height="46" valign="top">Use primarily for thesis\n advisor</td>\n </tr>\n <tr>\n <td width="26%" valign="top">contributor</td>\n <td width="24%" valign="top">author</td>\n <td width="50%" valign="top">&nbsp;</td>\n </tr>\n <tr>\n <td width="26%" valign="top">contributor</td>\n <td width="24%" valign="top">editor</td>\n <td width="50%" valign="top">&nbsp;</td>\n </tr>\n <tr>\n <td width="26%" valign="top">contributor</td>\n <td width="24%" valign="top">illustrator</td>\n <td width="50%" valign="top">&nbsp;</td>\n </tr>\n <tr>\n <td width="26%" valign="top">contributor</td>\n <td width="24%" valign="top">other</td>\n <td width="50%" valign="top">&nbsp;</td>\n </tr>\n <tr>\n <td width="26%" valign="top">coverage</td>\n <td width="24%" valign="top">spatial</td>\n <td width="50%" valign="top">Spatial characteristics of content</td>\n </tr>\n <tr>\n <td width="26%" valign="top">coverage </td>\n <td width="24%" valign="top">temporal</td>\n <td width="50%" valign="top"> Temporal characteristics of content</td>\n </tr>\n <tr>\n <td width="26%" valign="top">creator</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Do not use; for harvested metadata only </td>\n </tr>\n <tr>\n <td width="26%" valign="top">date</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Use qualified form if possible</td>\n </tr>\n <tr>\n <td width="26%" valign="top">date </td>\n <td width="24%" valign="top">accessioned</td>\n <td width="50%" valign="top">Date DSpace takes possession of\n item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">date</td>\n <td width="24%" valign="top">available</td>\n <td width="50%" valign="top">Date or date range item became available\n to the public</td>\n </tr>\n <tr>\n <td width="26%" valign="top">date </td>\n <td width="24%" valign="top">copyright</td>\n <td width="50%" valign="top">Date of copyright</td>\n </tr>\n <tr>\n <td width="26%" valign="top">date</td>\n <td width="24%" valign="top">created</td>\n <td width="50%" valign="top">Date of creation or manufacture\n of intellectual content if different from date.issued</td>\n </tr>\n <tr>\n <td width="26%" valign="top">date</td>\n <td width="24%" valign="top">issued</td>\n <td width="50%" valign="top">Date of publication or distribution.</td>\n </tr>\n <tr>\n <td width="26%" valign="top">date</td>\n <td width="24%" valign="top">submitted</td>\n <td width="50%" valign="top">Recommend for theses and dissertations</td>\n </tr>\n <tr>\n <td width="26%" height="117" valign="top">identifier</td>\n <td width="24%" height="117" valign="top">&nbsp;</td>\n <td width="50%" height="117" valign="top">Catch-all for unambiguous\n identifiers not defined by qualified form; use identifier.other\n for a known identifier common to a local collection instead\n of unqualified form</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">citation</td>\n <td width="50%" valign="top"> Bibliographic citation for works\n that have been published as a part of a larger work, e.g. journal\n articles, book chapters</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">govdoc</td>\n <td width="50%" valign="top"> Government document number</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">isbn</td>\n <td width="50%" valign="top">International Standard Book Number</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">issn</td>\n <td width="50%" valign="top">International Standard Serial Number</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">sici</td>\n <td width="50%" valign="top">Serial Item and Contribution Identifier</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">ismn</td>\n <td width="50%" valign="top">International Standard Music Number</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">other</td>\n <td width="50%" valign="top">A known identifier type common to\n a local collection</td>\n </tr>\n <tr>\n <td width="26%" valign="top">identifier</td>\n <td width="24%" valign="top">uri</td>\n <td width="50%" valign="top">Uniform Resource Identifier</td>\n </tr>\n <tr>\n <td width="26%" valign="top">description</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Catch-all for any description not\n defined by qualifiers</td>\n </tr>\n <tr>\n <td width="26%" valign="top">description</td>\n <td width="24%" valign="top">abstract</td>\n <td width="50%" valign="top">Abstract or summary</td>\n </tr>\n <tr>\n <td width="26%" valign="top">description</td>\n <td width="24%" valign="top">provenance</td>\n <td width="50%" valign="top">The history of custody of the item\n since its creation, including any changes successive custodians\n made to it</td>\n </tr>\n <tr>\n <td width="26%" valign="top">description</td>\n <td width="24%" valign="top">sponsorship</td>\n <td width="50%" valign="top"> Information about sponsoring agencies,\n individuals, or contractual arrangements for the item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">description</td>\n <td width="24%" valign="top">statementofresponsibility</td>\n <td width="50%" valign="top">To preserve statement of responsibility\n from MARC records</td>\n </tr>\n <tr>\n <td width="26%" valign="top">description</td>\n <td width="24%" valign="top">tableofcontents</td>\n <td width="50%" valign="top">A table of contents for this item</td>\n </tr>\n <tr>\n <td width="26%" height="2" valign="top">description</td>\n <td width="24%" height="2" valign="top">uri</td>\n <td width="50%" height="2" valign="top">Uniform Resource Identifier\n pointing to description of this item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">format</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Catch-all for any format information\n not defined by qualifiers</td>\n </tr>\n <tr>\n <td width="26%" valign="top">format</td>\n <td width="24%" valign="top">extent</td>\n <td width="50%" valign="top">Size or duration</td>\n </tr>\n <tr>\n <td width="26%" valign="top">format</td>\n <td width="24%" valign="top">medium</td>\n <td width="50%" valign="top">Physical medium</td>\n </tr>\n <tr>\n <td width="26%" valign="top">format</td>\n <td width="24%" valign="top">mimetype</td>\n <td width="50%" valign="top">Registered MIME type identifiers</td>\n </tr>\n <tr>\n <td width="26%" valign="top">language</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Catch-all for non-ISO forms of the\n language of the item, accommodating harvested values</td>\n </tr>\n <tr>\n <td width="26%" valign="top">language</td>\n <td width="24%" valign="top">iso</td>\n <td width="50%" valign="top">Current ISO standard for language\n of intellectual content, including country codes (e.g., &quot;en_US&quot;)</td>\n </tr>\n <tr>\n <td width="26%" valign="top">publisher</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top"> Entity responsible for publication,\n distribution, or imprint</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Catch-all for references to other\n related items</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">isformatof</td>\n <td width="50%" valign="top">References additional physical form</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation </td>\n <td width="24%" valign="top">ispartof</td>\n <td width="50%" valign="top">References physically or logically\n containing item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">ispartofseries</td>\n <td width="50%" valign="top">Series name and number within that\n series, if available</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation </td>\n <td width="24%" valign="top">haspart</td>\n <td width="50%" valign="top">References physically or logically\n contained item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">isversionof</td>\n <td width="50%" valign="top">References earlier version</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">hasversion</td>\n <td width="50%" valign="top">References later version</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">isbasedon</td>\n <td width="50%" valign="top">References source.</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">isreferencedby</td>\n <td width="50%" valign="top">Pointed to by referenced resource</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">requires</td>\n <td width="50%" valign="top">Reference resource is required to\n support function, delivery, or coherence of item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation </td>\n <td width="24%" valign="top">replaces</td>\n <td width="50%" valign="top">References preceeding item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">isreplacedby</td>\n <td width="50%" valign="top">References succeeding item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">relation</td>\n <td width="24%" valign="top">uri</td>\n <td width="50%" valign="top">References Uniform Resource Identifier\n for related item</td>\n </tr>\n <tr>\n <td width="26%" valign="top">rights</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Terms governing use and reproduction</td>\n </tr>\n <tr>\n <td width="26%" valign="top">rights</td>\n <td width="24%" valign="top">uri</td>\n <td width="50%" valign="top">References terms governing use and\n reproduction</td>\n </tr>\n <tr>\n <td width="26%" valign="top">source</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Do not use; for harvested metadata only</td>\n </tr>\n <tr>\n <td width="26%" valign="top">source</td>\n <td width="24%" valign="top">uri</td>\n <td width="50%" valign="top">Do not use; for harvested metadata only</td>\n </tr>\n <tr>\n <td width="26%" valign="top">subject</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Uncontrolled index term</td>\n </tr>\n <tr>\n <td width="26%" valign="top">subject</td>\n <td width="24%" valign="top">classification</td>\n <td width="50%" valign="top">Catch-all for value from local classification\n system; global classification systems will receive specific\n qualifier.</td>\n </tr>\n <tr>\n <td width="26%" valign="top">subject</td>\n <td width="24%" valign="top">ddc</td>\n <td width="50%" valign="top">Dewey Decimal Classification Number</td>\n </tr>\n <tr>\n <td width="26%" valign="top">subject</td>\n <td width="24%" valign="top">lcc</td>\n <td width="50%" valign="top">Library of Congress Classification\n Number</td>\n </tr>\n <tr>\n <td width="26%" valign="top">subject</td>\n <td width="24%" valign="top">lcsh</td>\n <td width="50%" valign="top">Library of Congress Subject Heading</td>\n </tr>\n <tr>\n <td width="26%" valign="top">subject</td>\n <td width="24%" valign="top">mesh</td>\n <td width="50%" valign="top">Medical Subject Headings</td>\n </tr>\n <tr>\n <td width="26%" valign="top">subject</td>\n <td width="24%" valign="top">other</td>\n <td width="50%" valign="top">Local controlled vocabulary</td>\n </tr>\n <tr>\n <td width="26%" valign="top">title</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Title statement/title proper</td>\n </tr>\n <tr>\n <td width="26%" valign="top">title</td>\n <td width="24%" valign="top">alternative</td>\n <td width="50%" valign="top">Varying (or substitute) form of\n title proper appearing in item, e.g., abbreviation or translation</td>\n </tr>\n <tr>\n <td width="26%" valign="top">type</td>\n <td width="24%" valign="top">&nbsp;</td>\n <td width="50%" valign="top">Nature or genre of content</td>\n </tr>\n </table>\n</html>
<<list all>>
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}\n\na {color:[[ColorPalette::PrimaryMid]];}\na:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}\na img {border:0;}\n\nh1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}\nh1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}\nh2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}\n\n.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}\n.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}\n.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}\n\n.header {background:[[ColorPalette::PrimaryMid]];}\n.headerShadow {color:[[ColorPalette::Foreground]];}\n.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}\n.headerForeground {color:[[ColorPalette::Background]];}\n.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}\n\n.tabSelected{color:[[ColorPalette::PrimaryDark]];\n background:[[ColorPalette::TertiaryPale]];\n border-left:1px solid [[ColorPalette::TertiaryLight]];\n border-top:1px solid [[ColorPalette::TertiaryLight]];\n border-right:1px solid [[ColorPalette::TertiaryLight]];\n}\n.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}\n.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}\n.tabContents .button {border:0;}\n\n#sidebar {}\n#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}\n#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}\n#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}\n#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}\n#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}\n\n.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}\n.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}\n.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}\n.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];\n border:1px solid [[ColorPalette::PrimaryMid]];}\n.wizardStep.wizardStepDone {background::[[ColorPalette::TertiaryLight]];}\n.wizardFooter {background:[[ColorPalette::PrimaryPale]];}\n.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}\n.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;\n border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}\n.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}\n.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;\n border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}\n\n#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}\n#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}\n\n.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}\n\n.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}\n.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}\n.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}\n.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}\n.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}\n.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}\n.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}\n.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}\n\n.tiddler .defaultCommand {font-weight:bold;}\n\n.shadow .title {color:[[ColorPalette::TertiaryDark]];}\n\n.title {color:[[ColorPalette::SecondaryDark]];}\n.subtitle {color:[[ColorPalette::TertiaryDark]];}\n\n.toolbar {color:[[ColorPalette::PrimaryMid]];}\n.toolbar a {color:[[ColorPalette::TertiaryLight]];}\n.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}\n.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}\n\n.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}\n.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}\n.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}\n.tagging .button, .tagged .button {border:none;}\n\n.footer {color:[[ColorPalette::TertiaryLight]];}\n.selected .footer {color:[[ColorPalette::TertiaryMid]];}\n\n.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}\n.sparktick {background:[[ColorPalette::PrimaryDark]];}\n\n.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}\n.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}\n.lowlight {background:[[ColorPalette::TertiaryLight]];}\n\n.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}\n\n.imageLink, #displayArea .imageLink {background:transparent;}\n\n.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}\n\n.viewer .listTitle {list-style-type:none; margin-left:-2em;}\n.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}\n.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}\n\n.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}\n.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}\n.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}\n\n.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}\n.viewer code {color:[[ColorPalette::SecondaryDark]];}\n.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}\n\n.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}\n\n.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}\n.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}\n.editorFooter {color:[[ColorPalette::TertiaryMid]];}\n\n#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}\n#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}\n#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }\n#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}\n#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}\n#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}\n#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}\n.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}\n.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}\n#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';\n#ZiddlyFormats,#ZiddlyPowered,#ZiddlyFormats a,#ZiddlyPowered a{color:#fff};}\n
&#8220;Toward a Scholars&#8217; Collaborative: Developing Cyberinfrastructure for Arts and Humanities Scholarship (Keynote)&#8221; (Wendy Pratt Lougee, U. of Minnesota)\n\n>Exploring the flow. Resources are distributed, digital, heterogeneous. Content is more dynamic. Increased attention to process. Project strategy at Minnesota: targeted interviews plus a massive survey of graduate students and faculty. Key questions: research practices, interdisciplinary/collaborative research, resources organization/storage, perceived role of libraries in research. Results: lots of work being done at home; archival and textual research methods predominant; interdisciplinarity oriented around literature and methodology sharing; lots of inefficiency in methodoloy. Constructing an analytic framework for this information: primitives (behavior) and tools (with iterative feedback). Behavior basics: discover (serendipitous finding, collaborate finding, structured finding, keeping current), gather (collecting, acquiring, organizing), create (annotating, analyzing, describing reviewing, writing), share (data sharing, teaching, publishing). &#8220;The Fried Egg Graphic&#8221; as a useful tool for stimulating feedback. Summary: digital resources, diversity of location/mobility, diversity of resources/interdisciplinarity, help with methodology, help with management of gathered resources, &#8230; Note: needs very literature-based, rather than people-based as in the scienc
Notes from [[James Kalbach's Designing for Information Foragers: A Behavioral Model for Information Seeking on the World Wide Web|http://www.internettg.org/newsletter/dec00/article_information_foragers.html]]\n\nThis is a pretty good article but not as good as I thought it was going to be. I got here by trying to link libraries and ''Behavioral Econonics".\n\n!!!!The old model\nThe user isn't even present\n[img[/filestore/uploads/libraries/info_retrieval.gif]]\n\n!!!!The newer model\n>New perspectives in research reversed traditional models of system design and placed the user at the center of attention, not the system. Three different, yet complementary research paradigms in particular mark this shift:\n\n>* Since 1972 Brenda Dervin (1992) has developed a needs-based model she calls sense-making. Her methodology focuses on behaviors that people exhibit in their everyday experiences by analyzing a broad spectrum of complex human activity. The model aims at understanding user situations, gaps in knowledge, and the use of information.\n\n>* Nicholas Belkin (1980) focuses on the notion that seekers, sometimes even experts in a given information system, are not able to properly formulate queries to access the information they need. He calls this "anomalous states of knowledge," or ASK for short. In his view, the failures in information retrieval lie on the system, not the seeker.\n\n>* Robert Taylor (1984, 1985) developed a value-added approach for information seeking. He places the user's problems at the center of attention and is concerned with linking problems with information traits of users. This model focuses on the perceived utility and value a user gets from a system and how this effects their decisions.\n\n>The ultimate goal is to provide users with information that could potentially help them determine the relevance of a website in relation to their specific information need.
Infrastructure Team (SysAdmins?)\nFrameWork Architecture Team / \nDevelopment Team (Data, Logic, Web [ model, view, control ]\nBuild and Test Team\nSupport Team\n\n\n//Interest Groups// form around what other stake holders want or see. \n\nDo we understand what is "below" the very top level?\n
> James Boyle's The Public Domain: Enclosing the Commons of the Mind (Yale University Press) and John Willinsky's The Access Principle: The Case for Open Access to Research and Scholarship (MIT Press).\n\nfrom Dan Cohen
Instructional design is not about ''designing'' learning but about designing opportunities for learning.
* {{{@@CssProperty:value;CssProperty:value;...@@}}}<br>''N.B.:'' CSS color definitions should use lowercase letters to prevent the inadvertent creation of WikiWords.\n* {{{{{customCssClass{...}}}}}} /% DEBUG: buggy %/\n* raw HTML can be inserted by enclosing the respective code in HTML tags: {{{<html> ... </html>}}}
[[Ideas are just a multiplier of execution|http://www.oreillynet.com/onlamp/blog/2005/08/ideas_are_just_a_multiplier_of.html]]\n\nAWFUL IDEA = -1\nWEAK IDEA = 1\nSO-SO IDEA = 5\nGOOD IDEA = 10\nGREAT IDEA = 15\nBRILLIANT IDEA = 20\nNO EXECUTION = $1\nWEAK EXECUTION = $1000\nSO-SO- EXECUTION = $10,000\nGOOD EXECUTION = $100,000\nGREAT EXECUTION = $1,000,000\nBRILLIANT EXECUTION = $10,000,000
''Work:'' @@color:#ee0000;J.S. Bach's Goldberg variations@@\n''Expression1:'' @@color:green;performance by Glen Gould in 1981 (editions, translations, performaces, etc.)@@\n''Manifestation1:'' @@color:blue;recording released on 331/3 rpm sound disc in 1982 by CBS Records@@\n''Manifestation2:'' @@color:blue;recording re-released on compact disc in 1993 by Sony@@\n''Manifestation3:'' @@color:blue;digitization of the Sony re-release as """MP3""" in 2000@@\n''Item1:'' @@color:gold;held at WCSU@@\n''Item2:'' @@color:gold;hedp at CCSU@@\n\n
<<tabs tabsClass\nLayout "Layout Templates" SystemLayout\nSystem "System Tiddlers" SystemTiddlers\nStyle "StyleSheets" StyleSheet\nOptions "Personal Preferences" SystemOptions\nPlugins "Installed Plugins" PluginManager\nShadows "Hidden System Pages" ShadowedPages\n>>
{{{\n* unordered list, level 1\n** unordered list, level 2\n*** unordered list, level 3\n\n# ordered list, level 1\n## ordered list, level 2\n### unordered list, level 3\n\n; definition list, term\n: definition list, description\n}}}\n<<<\n* unordered list, level 1\n** unordered list, level 2\n*** unordered list, level 3\n\n# ordered list, level 1\n## ordered list, level 2\n### unordered list, level 3\n\n; definition list, term\n: definition list, description\n
http://www.lib.k-state.edu/ and look at the assignment calculator from http://blog.lib.umn.edu/jveldof/calculator/
>old institutions seemed exhausted while new ones seemed untrustworthy - [[Clay Shirky|http://www.shirky.com/weblog/2009/03/newspapers-and-thinking-the-unthinkable/]]
[[Special Library Association|http://www.sla.org/pdfs/FH_PositioningSLA0113090-Notes.pdf]] paper about where we should be going. \n\nWe need to create the technical, institutional and cultural frameworks required to support such open data access.\n\n
* What is the goal of the site?\n* In other words, when it's working great, what specific outcomes will occur?\n* Who are we trying to please? If it's the boss, what does she want? Is impressing a certain kind of person important? * * Which kind?\n* How many people on your team have to be involved? At what level?\n* Who are we trying to reach? Is it everyone? Our customers? A certain kind of prospect?\n* What are the sites that this group has demonstrated they enjoy interacting with?\n* Are we trying to close sales?\n* Are we telling a story?\n* Are we earning permission to follow up?\n* Are we hoping that people will watch or learn?\n* Do we need people to spread the word using various social media tools?\n* Are we building a tribe of people who will use the site to connect with each other?\n* Do people find the site via word of mouth? Are they looking to answer a specific question?\n* Is there ongoing news and updates that need to be presented to people?\n* Is the site part of a larger suite of places online where people can find out about us, or is this our one sign post?\n* Is that information high in bandwidth or just little bits of data?\n* Do we want people to call us?\n* How many times a month would we like people to come by? For how long?\n* Who needs to update this site? How often?\n* How often can we afford to overhaul this site?\n* Does showing up in the search engines matter? If so, for what terms? At what cost? Will we be willing to compromise any of the things above in order to achieve this goal?\n* Will the site need to be universally accessible? Do issues of disability or language or browser come into it?\n* How much money do we have to spend? How much time?\nAnd finally,\n*Does the organization understand that 'everything' is not an option?
[img[filestore/uploads/libraries/wilson-model.png]]\n
> "in schools, we create artificial learning environments for our children that they know to be contrived and undeserving of their full attention and engagement.
http://www.rexx.com/~dkuhlman/#generateds-py-generate-python-data-bindings-from-xml-schema
[[Architecture of the Semantic Web 1998|http://www.w3.org/DesignIssues/Semantic.html]]
<script label="click here" title="mouseover tooltip text" key="X">\n /* javascript code goes here... */\n alert('you clicked on the link!');\n</script>
Blended learning is a continuous process, rather than just a "learning event." Providing blended solutions allows for flexibility, not only of multiple delivery methods, but for learning to take place over time.\n\nFor instance, the timeline below shows how Web-based modules can offer "pre-work" preceding a classroom training event. Online peer communities or e-mentoring can extend well past the live event, along with Web resource availability for learners.\n\n[img[/filestore/uploads/learning/blended.png]]
/*{{{*/\n/*Resources Theme for TiddlyWiki*/\n/*edited by Brian Kennison*/\n/*}}}*/\n/*{{{*/\n\n/* HTML Elements */\nbody { \n background: #FFF url(images/top.jpg) repeat-x top; \n color: #454545; \n font: .94em Arial, sans-serif; \n line-height: 1.5em; \n margin: 0; \n padding: 0; \n border-radius: 1em;\n}\na { \n background: inherit; \n color: #933b39; \n}\na:hover { \n color: #933b39; background: inherit; \n text-decoration: underline\n}\np { \n margin: 5px 0; \n}\nh1 {\n font: bold 1.8em Arial, Sans-Serif; \n letter-spacing: -1px; \n margin: 0; \n padding: 8px 0 4px 0; \n}\nh2 { \n font: bold 1.6em Arial, Sans-Serif; \n letter-spacing: -1px; \n}\nh3 { \n margin: 0; \n padding: 4px 0; \n}\nul { \n list-style: square; \n margin: 0; \n padding : 0; \n}\nimg { \n border: 0; \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.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/* Content Sections in Document Order */\n#contentWrapper { \n margin: 0px auto; \n width: 90%; \n}\n#header { \n background: transparent; \n color: #FFF;\n height: 101px; \n padding-top: 20px; \n}\n#header #icons { \n float: right; \n margin:20px 0; \n padding:0 \n}\n#header #icons img { \n padding-right: 2px; \n border: 0; \n}\n.headerShadow { \n padding: 1.4em 0 0.5em 1em;\n}\n.searchBar { \n float: right; \n font-size: 1em; \n margin-top: 1.3e;m \n position: relative; \n}\n.searchBar .button { \n color: #FFF; \n display: block \n}\n.searchBar .searchButton { \n color: #FFF; \n display: block \n}\n.searchBar .button:hover { \n border: 1px solid #fefefe; color: #4F4B45 \n}\n.searchBar .searchButton:hover { \n border: 1px solid #fefefe; color: #4F4B45 \n}\n.searchBar input { \n background-color: #fefefe; \n border: 1px solid #CCC; \n color: #830200; \n margin-right: 3px \n}\n\n.siteTitle { \n color: #FFF; \n font: bold 2em Arial, Sans-Serif; \n letter-spacing: 1px; \n margin: 0; \n padding: 8px 0 4px 0; \n}\n.siteSubtitle { \n color: #FFF; \n font: 1.0em Arial, Sans-Serif; \n letter-spacing: 0px; \n margin:0; \n padding: 0 \n}\n#topMenu { \n background: #933b39; \n height: 3ex;\n padding: 5px 5px 5px 5px;\n width: 100%;\n}\n#topMenu a, #topMenu .tiddlyLink, #topMenu .button { \n background:transparent;\n border: none !important;\n color: white; \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#topMenu a:hover, #topMenu .tiddlyLink:hover, #topMenu .button:hover, #topMenu .button:active, #topMenu .highlight {\n background: #9F1313;\n color: #FFF; \n text-decoration: none; \n}\n#topMenu br { \n display: none \n}\n#displayArea { \n margin: 0 17em 2em 0.5em; \n width: 100% \n}\n#messageArea { \n background: #fefefe; \n border: 4px solid #933b39; \n color: #555; \n font-size: 100%;\n}\n#messageArea .button { \n border: 1px solid #933b39 color: #666; \n}\n#messageArea .button:hover { \n background: #FF0000; \n border-color: #FF0000 color: #FFF \n}\n#messageArea a:hover { \n background: #f5f5f5; \n border: none \n}\n#tiddlerDisplay {\n width:100%;\n}\n\n#tiddlerContents {}\n.tiddler { \n padding-bottom: 10px; \n padding-left: 0;\n width: 100% \n}\n#contentFooter { \n background: #933b39; \n border-top: 1px solid #DCDCDC; \n clear: both; \n color:#FFF; \n margin: 5em 0 3em 0;\n text-align: center;\n}\n#contentFooter .right { \n background: #FFF; \n float: right; \n text-align: right \n}\n#contentFooter a { \n background: #FFF; text-decoration: none \n}\n\n/* Tiddler Parts */\n.toolbar { \n font-size: 85% \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.title { \n border-bottom:1px solid #FF0000; color: #933b39;; \n}\n.subtitle, .subtitle a { \n color: #830200; \n font-size: 1em; \n margin: 0.2em \n}\n\n.popup { \n background: #933b39; \n border: 1px solid #CA0000;\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\n#sidebar { background: #fefefe; border-left: 0 solid #000; display: inline; display: none float: right; line-height: 1.4em; margin-bottom: 1em; margin-bottom: 2em !important; position: relative; right: 0; width: 16em; }\n#sidebar { display: inline; float: right; position: relative; right: 0 }\n\n#sidebarOptions .sliderPanel .txtOptionInput { border: 1px solid #830200; width: 9em }\n#sidebarOptions .sliderPanel a { background-color: #eee; border-bottom: 1px dotted #333 color: #555; font-weight: normal; }\n#sidebarOptions .sliderPanel a:hover { background-color: #eee; border-bottom: 1px dotted #111 border: none; color: #111; }\n#sidebarOptions .sliderPanel input { border: 1px solid #830200 }\n#sidebarOptions .sliderPanel { background: #eee; border: 1px solid #ccc; font-size: 0.9em }\n#sidebarOptions a { color: #830200; text-decoration: none }\n#sidebarOptions a:hover, #sidebarOptions a:active { background-color: #f5f5f5; border: 1px solid #f5f5f5 color: #C00; }\n#sidebarOptions input { border: 1px solid #830200 }\n#sidebarOptions { padding-left: 0.5em; padding-top: 2em }\n\n#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active { background: #fefefe color: #C00; }\n#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button { color: #830200 }\n#sidebarTabs .tabContents .tiddlyLink:hover, #sidebarTabs .tabContents .button:hover { background: #fefefe; border: none color: #C00; text-decoration: none; }\n#sidebarTabs .tabContents { background: #fefefe }\n#sidebarTabs .tabSelected { padding-bottom: 3px }\n#sidebarTabs .tabUnselected { border-bottom: none; padding-bottom: 3px }\n#sidebarTabs .tabUnselected:hover { border-bottom: none; color: #830200 padding-bottom: 3px; }\n#sidebarTabs { font-family: arial, helvetica }\n\n\n* html .editor textarea, * html .editor input { width: 98% }\n* html .viewer pre { margin-left: 0 }\n\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: #830200 }\n.selected .toolbar a:hover { background: transparent; border: 1px solid #fff color: #333; }\n\n.shadow .title { color: #830200 }\n\n.tabContents { background: #fefefe }\n\n.tabSelected { background: #830200 color: #fefefe; }\n.tabSelected, .tabSelected:hover { background: #fefefe; border: solid 1px #ccc color: #555; }\n\n.tabUnselected { background: #eee; border: solid 1px #ccc color: #830200; }\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\n\n.viewer .button, .editorFooter .button { border: 1px solid #CA0000 color: #555; }\n.viewer .button:active, .viewer .highlight, .editorFooter .button:active, .editorFooter .highlight { background: #9F1313; border-color: #9F1313 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; }\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\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\n;/*}}}*/\n\n
cf. [[TiddlyWiki.com|http://www.tiddlywiki.com/#EmbeddedImages]]\n{{{\n[img[title|filename]]\n[img[filename]]\n[img[title|filename][link]]\n[img[filename][link]]\n}}}
>It's really, really important to figure out if your product is a platform or not, because platforms need to be marketed in a very different way to be successful. That's because a platform needs to appeal to developers first and foremost, not end users.\n\nWe (librarians) need to be platform focused so that we can build ''products/applications'' that meet our users needs. \n\nBut it is also important that we can expose our ''platform'' to the university community so that they can build ''products/applications'' that we never thought about.
/***\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
Libraries are systems for organizing objects for reuse. A digital library allows digital objects to be discovered and to be //re-used// in different contects.
We organize information by\n\n* Concepts\n* Feature lists\n* Prototypes\n* Exemplars\n* Schemas and Scripts\n* Personal theories\n\n[[Organizing Knowledge Cognitively|http://en.wikipedia.org/wiki/Organizing_Knowledge_Cognitively|]] at Wikipedia
/***\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// %/
[img[filestore/uploads/repositories/affinity.jpg]]
[img[/filestore/images/1-8-700.jpg]] ```[[Web Style Guide|http://webstyleguide.com/wsg3/1-process/7-development-process.html]]```
Work Notes\n
<!--{{{-->\n<div id='header' class='header roundedCorners'>\n<div class='headerShadow'>\n<span class='searchBar roundedCorners' macro='search'></span>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='displayArea' class="roundedCorners">\n<div id='messageArea' class="roundedCorners"></div>\n<div id='tiddlerDisplay' class="roundedCorners"></div>\n</div>\n<div id='contentFooter' refresh='content' tiddler='contentFooter' class="roundedCorners"></div>\n<!--}}}-->\n
[img[filestore/uploads/webservices/repository_OSID_interfaceDiagram.png]]
http://www.ariadne.ac.uk/issue58/nichols/\n\nThis article talks about how we need to make digital projects ''agnostic'' to use and discipline. He says he knows this should happen but it's not happening yet.
''Monday 3/2/2009''\n[[Information Glossary|http://www.noisebetweenstations.com/personal/essays/metadata_glossary/metadata_glossary.html]]
{{{\n<?xml version="1.0" encoding="UTF-8"?>\n<rdf:RDF\n xml:base="http://chroniclingamerica.loc.gov/lccn/sn83030214/1909-12-26/ed-1/seq-13"\n xmlns:dc="http://purl.org/dc/elements/1.1/"\n xmlns:dcterms="http://purl.org/dc/terms/"\n xmlns:exif="http://www.w3.org/2003/12/exif/ns#"\n xmlns:foaf="http://xmlns.com/foaf/0.1/"\n xmlns:ndnp="http://chroniclingamerica.loc.gov/terms#"\n xmlns:ore="http://www.openarchives.org/ore/terms/"\n xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\n>\n <rdf:Description rdf:about="/lccn/sn83030214/1909-12-26/ed-1/seq-13.rdf">\n <dcterms:created rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2009-07-10T12:19:24-04:00</dcterms:created>\n <rdf:type rdf:resource="http://www.openarchives.org/ore/terms/ResourceMap"/>\n <dcterms:creator rdf:resource="http://chroniclingamerica.loc.gov/awardees/dlc#awardee"/>\n <ore:describes rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13#page"/>\n <dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2009-07-10T12:19:24-04:00</dcterms:modified>\n </rdf:Description>\n <rdf:Description rdf:about="/lccn/sn83030214/1909-12-26/ed-1/seq-13.pdf">\n <dc:format>application/pdf</dc:format>\n </rdf:Description>\n <rdf:Description rdf:about="/lccn/sn83030214/1909-12-26/ed-1/seq-13#page">\n <rdf:type rdf:resource="http://chroniclingamerica.loc.gov/terms#Page"/>\n <foaf:depiction rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13/thumbnail.jpg"/>\n <ndnp:sequence rdf:datatype="http://www.w3.org/2001/XMLSchema#long">13</ndnp:sequence>\n <ore:isDescribedBy rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13.rdf"/>\n <ore:isAggregatedBy rdf:resource="/lccn/sn83030214/1909-12-26/ed-1#issue"/>\n <dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1909-12-26</dcterms:issued>\n <ore:aggregates rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13/ocr.xml"/>\n <ore:aggregates rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13/thumbnail.jpg"/>\n <ore:aggregates rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13/ocr.txt"/>\n <ore:aggregates rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13.jp2"/>\n <ore:aggregates rdf:resource="/lccn/sn83030214/1909-12-26/ed-1/seq-13.pdf"/>\n <dcterms:title>New-York tribune. - 1909-12-26 - 13</dcterms:title>\n </rdf:Description>\n <rdf:Description rdf:about="/lccn/sn83030214/1909-12-26/ed-1/seq-13/ocr.txt">\n <dc:format>text/plain</dc:format>\n </rdf:Description>\n <rdf:Description rdf:about="/lccn/sn83030214/1909-12-26/ed-1/seq-13.jp2">\n <exif:height rdf:datatype="http://www.w3.org/2001/XMLSchema#long">6347</exif:height>\n <dc:format>image/jp2</dc:format>\n <exif:width rdf:datatype="http://www.w3.org/2001/XMLSchema#long">4190</exif:width>\n </rdf:Description>\n <rdf:Description rdf:about="/lccn/sn83030214/1909-12-26/ed-1/seq-13/ocr.xml">\n <dc:format>text/xml</dc:format>\n </rdf:Description>\n <rdf:Description rdf:about="/lccn/sn83030214/1909-12-26/ed-1/seq-13/thumbnail.jpg">\n <dc:format>image/jpeg</dc:format>\n </rdf:Description>\n</rdf:RDF>\n}}}
>A real science, or any intelligent inquiry into the world, whether the study of earthquakes or the study of poetry, economics or physics, history or anthropology, art history or organic chemistry, a systematic inquiry into one's lover or a systematic inquiry into the Dutch language, must do two things. If it only does one of them it is not an inquiry into the world. It may be good in some other way, but not in the double way that we associate with good science or other good inquiries into the world, such as a detective solving a case. I am sure you will agree: An inquiry into the world must think and it must look. It must theorize and must observe. Formalize and record. Both. That's obvious and elementary. Not everyone involved in a collective intelligent inquiry into the world need do both: the detective can assign his dim-witted assistant to just observe. But the inquiry as a whole must reflect and must listen. \n[[Secret Sins of Economics|http://www.prickly-paradigm.com/paradigm4.pdf]]\n\n(Mathematics and Philosophy are pure thinking?)
>16th century 'wunderkammer' or 'wonder cabinet'. As Graziose Corrin notes (in her analysis of Mark Dion's installation work based on critique of the 'collector' mentality, and modes of museum classification) the form of the wonder cabinet allowed: "...arbitrary visual arrangements [which] seemed natural and capable of revealing knowledge that was at once empirical and metaphorical without the need for accompanying texts" (Graziose Corrin, 1997, p. 53.)\n\nhttp://www.archimuse.com/mw99/papers/kenderdine/kenderdine.html
<html>\n<style>\n.rolodex table {\nborder: 0px solid;\nbackground-color:#FFFF99;\n}\n\n.rolodex tr, .rolodex td {\nborder: 0px solid;\n}\n</style>\n<span class="rolodex">\n <table>\n <tr>\n <td align="right"><b>Firstname:</b></td>\n <td colspan="3"><input name=firstname type=text style="width:100%" /></td></tr>\n <tr>\n<tr>\n <td align="right"><b>FirstnameAgain:</b></td>\n <td colspan="3"><input name=firstname type=text style="width:100%" /></td></tr>\n <tr>\n <td align="right"><b>Lastname:</b></td>\n <td colspan="3"><input name=lastname type=text style="width:100%" /></td></tr>\n <tr>\n <td align="right"><b>Email:</b></td>\n <td colspan="3"><input name=email type=text style="width:100%" /></td></tr>\n <tr>\n <td align="right"><b>Phone:</b></td>\n <td colspan="3"><input name=phone type=text style="width:100%" /></td></tr>\n <tr>\n <td align="right" valign="top"><b>Address:</b></td>\n <td colspan="3"><textarea name=address rows="2" cols="40" style="width:100%" ></textarea></td></tr>\n <tr>\n <td align="right"><b>City:</b></td>\n <td colspan="3"><input name=city type=text style="width:100%" /></td></tr>\n <tr>\n <td align="right"><b>State/Province:</b></td>\n <td><input name=state type=text size="5" /></td>\n <td align="right"><b style="width:100%" >ZIP/Postal Code:</b></td>\n <td><input name=zip type=text size="5" style="width:100%" /></td></tr>\n <tr>\n <td align="right"><b>Country:</b></td>\n <td colspan="3"><input name=country type=text style="width:100%" /></td></tr>\n <tr>\n <td align="right"><b>Webpage:</b></td>\n <td colspan="3"><input name=webpage type=text style="width:100%" /></td></tr>\n <tr>\n <td colspan="4"><sub><b>Notes</b></sub><br>\n <textarea name=notes rows="4" cols="40" style="width:100%" ></textarea></td></tr>\n</span>\n</html>
Attention structures are cultural tools distributed across individuals, mediational means and interactional conventions that determine how cognitive and social attention are distributed in different kinds of social practices. The ways in which attention structures reinforce social structures and ideologies, and the \nkinds of interactional struggles that occur when multiple attention structures compete.
Link to a collection: <dao role="http://oac.cdlib.org/arcrole/link/search/" href="http://content.cdlib.org/search?style=oac-img&amp;sort=title&amp;relation=ark:/13030/kt9290094p" title="Online items">
!!!Department Peabody Museum\nUniversity Generic Title Systems Programmer 1\nBargaining Unit None\nJob Category Managerial & Professional\nType of Employment Full Time\nDuration Type Fixed\nIf Fixed Duration, Period 2 years from date of hire\n(Min/Max)">Salary Grade (Min/Max) (Min/Max)">24\nWork Week Standard - 37.5 hrs (M-F, 8:30-5:00)\nWork Location Central Campus\nWorksite Address 170 Whitney Ave.\nPosition General Purpose Work with faculty curators and Museum staff to provide leadership in the design, development, implementation, support and assessment of digital resources for all Museum audiences.\n!!!Essential Duties \n1. Consult with staff and faculty curators to design, develop, implement and assess multimedia interactive and other engaging web-based applications and tools for existing online resources (e.g. collections databases) that facilitate the use of these resources by different audiences. \n2. Supervise students and other temporary employees for routine web updates and interact with external vendors.\n3. Work with staff to transform existing program content to make full use of the educational potential of the digital environment and design, develop, implement and assess new multimedia, interactive products for online and gallery-based use. \n4. Work with the Museum’s senior administration and Head of Computer Systems to help define the Museum’s institutional digital strategy. Provide leadership and technical expertise for the \nongoing development of the Museum’s web site and services.\n5. Maintain an advanced working fluency with a broad range of new technologies. Track, investigate and bring to production, as appropriate, relevant emerging technologies.\n6. Collaborate closely with External Relations Department by providing technical expertise to support grant writing and other development activities for digital projects. \n7. Support the work of the University’s digital dissemination initiatives by working closely with appropriate University offices to develop, format and adapt museum content for these projects.\n!!!Education and Experience \n1. Bachelor’s Degree and two years of experience as systems programmer, or an equivalent combination of knowledge and experience.\n!!!Additional Education and Experience \n1. Advanced degree in a relevant area and three years of programming experience, or an equivalent combination of education and experience.\n2. Preferred: Experience in museum-based or other formal/informal educational setting; experience with user-oriented design, digital asset management systems and online instruction systems; demonstrated experience in developing and supporting creative and innovative digital educational products.\n!!!Skills & Abilities \n1. Skill with tools for web authoring and multimedia production and database interface development, for example, Dreamweaver, Flash, Perl, PHP, mySQL or other comparable software programs.\n2. Service-minded, self-motivated; ability to work independently and in multi-disciplinary teams with flexible and changing assignments.\n3. Forward-thinking attitude towards educational technologies. Demonstrated ability and interest in tracking, learning and applying emerging technologies (e.g., social-software and web 2.0-based technologies). Enthusiasm for and experience in developing applications and technical innovations in education.\n4. Preferred: Experience managing formal/informal education technology projects.
It's about digital things that happen in libraries
[[Ontolgy Based Education Systems|http://eprints.ecs.soton.ac.uk/7991/1/EdMediaOnto2003.pdf]]
/***\n|Name|ExportTiddlersPlugin|\n|Source|http://www.TiddlyTools.com/#ExportTiddlersPlugin|\n|Version|2.4.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|select and extract tiddlers from your ~TiddlyWiki documents and save them to a local file|\n\nWhen many people edit copies of the same TiddlyWiki document, the ability to easily copy and share these changes so they can then be redistributed to the entire group is very important. This ability is also very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\nExportTiddlersPlugin let you ''select and extract tiddlers from your ~TiddlyWiki documents and save them to a local file'' or a remote server (requires installation of compatible server-side scripting, still under development...). An interactive control panel lets you specify a destination, and then select which tiddlers to export. A convenient 'selection filter' helps you pick desired tiddlers by specifying a combination of modification dates, tags, or tiddler text to be matched or excluded. ''Tiddler data can be output as ~TiddlyWiki "storeArea ~DIVs" that can be imported into another ~TiddlyWiki or as ~RSS-compatible XML that can be published for RSS syndication.''\n\n!!!!!Inline interface (live)\n<<<\n<<exportTiddlers inline>>\n<<<\n!!!!!Usage\n<<<\nOptional "special tiddlers" used by this plugin:\n* SiteUrl^^\nURL for official server-published version of document being viewed (used in XML export)\ndefault: //none//^^\n* SiteHost^^\nhost name/address for remote server (e.g., "www.server.com" or "192.168.1.27")\ndefault: //none//^^\n* SitePost^^\nremote path/filename for submitting changes (e.g., "/cgi-bin/submit.cgi")\ndefault: //none//^^\n* SiteParams^^\narguments (if any) for server-side receiving script\ndefault: //none//^^\n* SiteNotify^^\naddresses (if any) for sending automatic server-side email notices\ndefault: //none//^^\n* SiteID^^\nusername or other authorization identifier for login-controlled access to remote server\ndefault: current TiddlyWiki username (e.g., "YourName")^^\n* SiteDate^^\nstored date/time stamp for most recent published version of document\ndefault: current document.modified value (i.e., the 'file date')^^\n<<<\n!!!!!Example\n<<<\n<<exportTiddlers>>\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''ExportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add {{{<<exportTiddlers>>}}} macro^^\n<<<\n!!!!!Revision History\n<<<\n''2007.07.16 [2.4.1]'' in exportTWHeader(), reset HTML source 'markup' so installed markup is NOT copied to new file.\n''2007.06.30 [2.4.0]'' added "select related tiddlers" feature. Recursively scans the tiddler links[] info to find all tiddlers referenced by any of the currently selected tiddler, and then selects them all (including the original tiddlers). ''//Theoretically//'', selecting all related tiddlers should ensure that the exported file contains all tiddlers needed to properly render all of the originally selected tiddlers.\n''2007.04.19 [2.3.0]'' in exportData(), pass SiteURL value as param to saveToRss(). Fixes 'undefined' appearing in tiddler link in XML output. Also, in refreshExportList(), added 'sort by tags'. Also, added 'group select'... selecting a heading (date,author,tag) auto-selects all tiddlers in that group.\n''2007.03.02 [2.2.6]'' in onClickExportButton(), when selecting open tiddlers for TW2.2, look for "storyDisplay" instead of "tiddlerDisplay" but keep fallback to "tiddlerDisplay" for TW2.1 or earlier\n''2007.03.01 [2.2.5]'' removed hijack of store.saveChanges() (was catching save on http:, but there are other solutions that do a much better job of handling save to server.\n|please see [[ExportTiddlersPluginHistory]] for additional revision details|\n''2005.10.09 [0.0.0]'' development started\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // version\n//{{{\nversion.extensions.exportTiddlers = {major: 2, minor: 4, revision: 1, date: new Date(2007,7,16)};\n//}}}\n\n// // macro handler\n//{{{\nconfig.macros.exportTiddlers = {\n label: "export tiddlers",\n prompt: "Copy selected tiddlers to an export document",\n newdefault: "export.html",\n datetimefmt: "0MM/0DD/YYYY 0hh:0mm:0ss" // for "filter date/time" edit fields\n};\n\nconfig.macros.exportTiddlers.handler = function(place,macroName,params) {\n if (params[0]!="inline")\n { createTiddlyButton(place,this.label,this.prompt,onClickExportMenu); return; }\n var panel=createExportPanel(place);\n panel.style.position="static";\n panel.style.display="block";\n}\n\nfunction createExportPanel(place) {\n var panel=document.getElementById("exportPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.exportTiddlers.css,"exportTiddlers");\n panel=createTiddlyElement(place,"span","exportPanel",null,null)\n panel.innerHTML=config.macros.exportTiddlers.html;\n exportShowPanel(document.location.protocol);\n exportInitFilter();\n refreshExportList(0);\n return panel;\n}\n\nfunction onClickExportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("exportPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createExportPanel(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") refreshExportList(0); // update list when panel is made visible\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // IE needs explicit scoping for functions called by browser events\n//{{{\nwindow.onClickExportMenu=onClickExportMenu;\nwindow.onClickExportButton=onClickExportButton;\nwindow.exportShowPanel=exportShowPanel;\nwindow.exportShowFilterFields=exportShowFilterFields;\nwindow.refreshExportList=refreshExportList;\n//}}}\n\n// // CSS for floating export control panel\n//{{{\nconfig.macros.exportTiddlers.css = '\s\n#exportPanel {\s\n display: none; position:absolute; z-index:12; width:35em; right:105%; top:6em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;\s\n}\s\n#exportPanel a, #exportPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#exportPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#exportPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#exportPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#exportPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\s\n#exportPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%; }\s\n#exportPanel textarea { width:98%;padding:0px;margin:0px;overflow:auto;font-size:8pt; }\s\n#exportPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px; }\s\n#exportPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\s\n#exportPanel .rad { width:auto;border:0 }\s\n#exportPanel .chk { width:auto;border:0 }\s\n#exportPanel .btn { width:auto; }\s\n#exportPanel .btn1 { width:98%; }\s\n#exportPanel .btn2 { width:48%; }\s\n#exportPanel .btn3 { width:32%; }\s\n#exportPanel .btn4 { width:24%; }\s\n#exportPanel .btn5 { width:19%; }\s\n';\n//}}}\n\n// // HTML for export control panel interface\n//{{{\nconfig.macros.exportTiddlers.html = '\s\n<!-- output target and format -->\s\n<table cellpadding="0" cellspacing="0"><tr><td width=50%>\s\n export to\s\n <select size=1 id="exportTo" onchange="exportShowPanel(this.value);">\s\n <option value="file:" SELECTED>this computer</option>\s\n <option value="http:">web server (http)</option>\s\n <option value="https:">secure web server (https)</option>\s\n <option value="ftp:">file server (ftp)</option>\s\n </select>\s\n</td><td width=50%>\s\n output format\s\n <select id="exportFormat" size=1>\s\n <option value="DIV">TiddlyWiki export file</option>\s\n <option value="TW">TiddlyWiki document</option>\s\n <option value="XML">RSS feed (XML)</option>\s\n </select>\s\n</td></tr></table>\s\n\s\n<!-- export to local file -->\s\n<div id="exportLocalPanel" style="margin-top:5px;">\s\nlocal path/filename<br>\s\n<input type="text" id="exportFilename" size=40 style="width:93%"><input \s\n type="button" id="exportBrowse" value="..." title="select or enter a local folder/file..." style="width:5%" \s\n onclick="this.previousSibling.value=window.promptForExportFilename(this);">\s\n<!--<input type="file" id="exportFilename" size=57 style="width:100%"><br>-->\s\n</div><!--panel-->\s\n\s\n<!-- export to http server -->\s\n<div id="exportHTTPPanel" style="display:none;margin-top:5px;">\s\n<table><tr><td align=left>\s\n server location, script, and parameters<br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="exportNotify"\s\n onClick="document.getElementById(\s'exportSetNotifyPanel\s').style.display=this.checked?\s'block\s':\s'none\s'"> notify\s\n</td></tr></table>\s\n<input type="text" id="exportHTTPServerURL" onfocus="this.select()"><br>\s\n<div id="exportSetNotifyPanel" style="display:none">\s\n send email notices to<br>\s\n <input type="text" id="exportNotifyTo" onfocus="this.select()"><br>\s\n</div>\s\n</div><!--panel-->\s\n\s\n<!-- export to ftp server -->\s\n<div id="exportFTPPanel" style="display:none;margin-top:5px;">\s\n<table cellpadding="0" cellspacing="0" width="32%"><tr valign="top"><td>\s\n host server<br>\s\n <input type="text" id="exportFTPHost" onfocus="this.select()"><br>\s\n</td><td width="32%">\s\n username<br>\s\n <input type="text" id="exportFTPID" onfocus="this.select()"><br>\s\n</td><td width="32%">\s\n password<br>\s\n <input type="password" id="exportFTPPW" onfocus="this.select()"><br>\s\n</td></tr></table>\s\nFTP path/filename<br>\s\n<input type="text" id="exportFTPFilename" onfocus="this.select()"><br>\s\n</div><!--panel-->\s\n\s\n<!-- notes -->\s\nnotes<br>\s\n<textarea id="exportNotes" rows=3 cols=40 style="height:4em;margin-bottom:5px;" onfocus="this.select()"></textarea> \s\n\s\n<!-- list of tiddlers -->\s\n<table><tr align="left"><td>\s\n select:\s\n <a href="JavaScript:;" id="exportSelectAll"\s\n onclick="onClickExportButton(this)" title="select all tiddlers">\s\n &nbsp;all&nbsp;</a>\s\n <a href="JavaScript:;" id="exportSelectChanges"\s\n onclick="onClickExportButton(this)" title="select tiddlers changed since last save">\s\n &nbsp;changes&nbsp;</a> \s\n <a href="JavaScript:;" id="exportSelectOpened"\s\n onclick="onClickExportButton(this)" title="select tiddlers currently being displayed">\s\n &nbsp;opened&nbsp;</a> \s\n <a href="JavaScript:;" id="exportSelectRelated"\s\n onclick="onClickExportButton(this)" title="select all tiddlers related (by link or transclusion) to the currently selected tiddlers">\s\n &nbsp;related&nbsp;</a> \s\n <a href="JavaScript:;" id="exportToggleFilter"\s\n onclick="onClickExportButton(this)" title="show/hide selection filter">\s\n &nbsp;filter&nbsp;</a> \s\n</td><td align="right">\s\n <a href="JavaScript:;" id="exportListSmaller"\s\n onclick="onClickExportButton(this)" title="reduce list size">\s\n &nbsp;&#150;&nbsp;</a>\s\n <a href="JavaScript:;" id="exportListLarger"\s\n onclick="onClickExportButton(this)" title="increase list size">\s\n &nbsp;+&nbsp;</a>\s\n</td></tr></table>\s\n<select id="exportList" multiple size="10" style="margin-bottom:5px;"\s\n onchange="refreshExportList(this.selectedIndex)">\s\n</select><br>\s\n</div><!--box-->\s\n\s\n<!-- selection filter -->\s\n<div id="exportFilterPanel" style="display:none">\s\n<table><tr align="left"><td>\s\n selection filter\s\n</td><td align="right">\s\n <a href="JavaScript:;" id="exportHideFilter"\s\n onclick="onClickExportButton(this)" title="hide selection filter">hide</a>\s\n</td></tr></table>\s\n<div class="box">\s\n<input type="checkbox" class="chk" id="exportFilterStart" value="1"\s\n onclick="exportShowFilterFields(this)"> starting date/time<br>\s\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\s\n <select size=1 id="exportFilterStartBy" onchange="exportShowFilterFields(this);">\s\n <option value="0">today</option>\s\n <option value="1">yesterday</option>\s\n <option value="7">a week ago</option>\s\n <option value="30">a month ago</option>\s\n <option value="site">SiteDate</option>\s\n <option value="file">file date</option>\s\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\s\n </select>\s\n</td><td width="50%">\s\n <input type="text" id="exportStartDate" onfocus="this.select()"\s\n onchange="document.getElementById(\s'exportFilterStartBy\s').value=\s'other\s';">\s\n</td></tr></table>\s\n<input type="checkbox" class="chk" id="exportFilterEnd" value="1"\s\n onclick="exportShowFilterFields(this)"> ending date/time<br>\s\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\s\n <select size=1 id="exportFilterEndBy" onchange="exportShowFilterFields(this);">\s\n <option value="0">today</option>\s\n <option value="1">yesterday</option>\s\n <option value="7">a week ago</option>\s\n <option value="30">a month ago</option>\s\n <option value="site">SiteDate</option>\s\n <option value="file">file date</option>\s\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\s\n </select>\s\n</td><td width="50%">\s\n <input type="text" id="exportEndDate" onfocus="this.select()"\s\n onchange="document.getElementById(\s'exportFilterEndBy\s').value=\s'other\s';">\s\n</td></tr></table>\s\n<input type="checkbox" class="chk" id=exportFilterTags value="1"\s\n onclick="exportShowFilterFields(this)"> match tags<br>\s\n<input type="text" id="exportTags" onfocus="this.select()">\s\n<input type="checkbox" class="chk" id=exportFilterText value="1"\s\n onclick="exportShowFilterFields(this)"> match titles/tiddler text<br>\s\n<input type="text" id="exportText" onfocus="this.select()">\s\n</div> <!--box-->\s\n</div> <!--panel-->\s\n\s\n<!-- action buttons -->\s\n<div style="text-align:center">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportFilter" value="apply filter">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportStart" value="export tiddlers">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportClose" value="close">\s\n</div><!--center-->\s\n';\n//}}}\n\n// // initialize interface\n// // exportShowPanel(which)\n//{{{\nfunction exportShowPanel(which) {\n var index=0; var panel='exportLocalPanel';\n switch (which) {\n case 'file:':\n case undefined:\n index=0; panel='exportLocalPanel'; break;\n case 'http:':\n index=1; panel='exportHTTPPanel'; break;\n case 'https:':\n index=2; panel='exportHTTPPanel'; break;\n case 'ftp:':\n index=3; panel='exportFTPPanel'; break;\n default:\n alert("Sorry, export to "+which+" is not yet available");\n break;\n }\n exportInitPanel(which);\n document.getElementById('exportTo').selectedIndex=index;\n document.getElementById('exportLocalPanel').style.display='none';\n document.getElementById('exportHTTPPanel').style.display='none';\n document.getElementById('exportFTPPanel').style.display='none';\n document.getElementById(panel).style.display='block';\n}\n//}}}\n\n// // exportInitPanel(which)\n//{{{\nfunction exportInitPanel(which) {\n switch (which) {\n case "file:": // LOCAL EXPORT PANEL: file/path:\n // ** no init - security issues in IE **\n break;\n case "http:": // WEB EXPORT PANEL\n case "https:": // SECURE WEB EXPORT PANEL\n // url\n if (store.tiddlerExists("unawiki_download")) {\n var theURL=store.getTiddlerText("unawiki_download");\n theURL=theURL.replace(/\s[\s[download\s|/,'').replace(/\s]\s]/,'');\n var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";\n var theHost=store.getTiddlerText(title);\n if (!theHost || !theHost.length) theHost=document.location.host;\n if (!theHost || !theHost.length) theHost=title;\n }\n // server script/params\n var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";\n var theHost=store.getTiddlerText(title);\n if (!theHost || !theHost.length) theHost=document.location.host;\n if (!theHost || !theHost.length) theHost=title;\n // get POST\n var title=(store.tiddlerExists("unawiki_post"))?"unawiki_post":"SitePost";\n var thePost=store.getTiddlerText(title);\n if (!thePost || !thePost.length) thePost="/"+title;\n // get PARAMS\n var title=(store.tiddlerExists("unawiki_params"))?"unawiki_params":"SiteParams";\n var theParams=store.getTiddlerText(title);\n if (!theParams|| !theParams.length) theParams=title;\n var serverURL = which+"//"+theHost+thePost+"?"+theParams;\n document.getElementById("exportHTTPServerURL").value=serverURL;\n // get NOTIFY\n var theAddresses=store.getTiddlerText("SiteNotify");\n if (!theAddresses|| !theAddresses.length) theAddresses="SiteNotify";\n document.getElementById("exportNotifyTo").value=theAddresses;\n break;\n case "ftp:": // FTP EXPORT PANEL\n // host\n var siteHost=store.getTiddlerText("SiteHost");\n if (!siteHost || !siteHost.length) siteHost=document.location.host;\n if (!siteHost || !siteHost.length) siteHost="SiteHost";\n document.getElementById("exportFTPHost").value=siteHost;\n // username\n var siteID=store.getTiddlerText("SiteID");\n if (!siteID || !siteID.length) siteID=config.options.txtUserName;\n document.getElementById("exportFTPID").value=siteID;\n // password\n document.getElementById("exportFTPPW").value="";\n // file/path\n document.getElementById("exportFTPFilename").value="";\n break;\n }\n}\n//}}}\n\n// // exportInitFilter()\n//{{{\nfunction exportInitFilter() {\n // start date\n document.getElementById("exportFilterStart").checked=false;\n document.getElementById("exportStartDate").value="";\n // end date\n document.getElementById("exportFilterEnd").checked=false;\n document.getElementById("exportEndDate").value="";\n // tags\n document.getElementById("exportFilterTags").checked=false;\n document.getElementById("exportTags").value="";\n // text\n document.getElementById("exportFilterText").checked=false;\n document.getElementById("exportText").value="";\n // show/hide filter input fields\n exportShowFilterFields();\n}\n//}}}\n\n// // exportShowFilterFields(which)\n//{{{\nfunction exportShowFilterFields(which) {\n var show;\n\n show=document.getElementById('exportFilterStart').checked;\n document.getElementById('exportFilterStartBy').style.display=show?"block":"none";\n document.getElementById('exportStartDate').style.display=show?"block":"none";\n var val=document.getElementById('exportFilterStartBy').value;\n document.getElementById('exportStartDate').value\n =getFilterDate(val,'exportStartDate').formatString(config.macros.exportTiddlers.datetimefmt);\n if (which && (which.id=='exportFilterStartBy') && (val=='other'))\n document.getElementById('exportStartDate').focus();\n\n show=document.getElementById('exportFilterEnd').checked;\n document.getElementById('exportFilterEndBy').style.display=show?"block":"none";\n document.getElementById('exportEndDate').style.display=show?"block":"none";\n var val=document.getElementById('exportFilterEndBy').value;\n document.getElementById('exportEndDate').value\n =getFilterDate(val,'exportEndDate').formatString(config.macros.exportTiddlers.datetimefmt);\n if (which && (which.id=='exportFilterEndBy') && (val=='other'))\n document.getElementById('exportEndDate').focus();\n\n show=document.getElementById('exportFilterTags').checked;\n document.getElementById('exportTags').style.display=show?"block":"none";\n\n show=document.getElementById('exportFilterText').checked;\n document.getElementById('exportText').style.display=show?"block":"none";\n}\n//}}}\n\n// // onClickExportButton(which): control interactions\n//{{{\nfunction onClickExportButton(which)\n{\n // DEBUG alert(which.id);\n var theList=document.getElementById('exportList'); if (!theList) return;\n var count = 0;\n var total = store.getTiddlers('title').length;\n switch (which.id)\n {\n case 'exportFilter':\n count=filterExportList();\n var panel=document.getElementById('exportFilterPanel');\n if (count==-1) { panel.style.display='block'; break; }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage("filtered "+formatExportMessage(count,total));\n if (count==0) { alert("No tiddlers were selected"); panel.style.display='block'; }\n break;\n case 'exportStart':\n exportTiddlers();\n break;\n case 'exportHideFilter':\n case 'exportToggleFilter':\n var panel=document.getElementById('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 document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(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 document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(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 = document.getElementById("tiddlerDisplay"); // for TW2.1-\n if (!tiddlerDisplay) tiddlerDisplay = document.getElementById("storyDisplay"); // for TW2.2+\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 document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(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 clearMessage(); displayMessage(formatExportMessage(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 document.getElementById('exportPanel').style.display='none';\n break;\n }\n}\n//}}}\n\n// // list display\n//{{{\nfunction formatExportMessage(count,total)\n{\n var txt=total+' tiddler'+((total!=1)?'s':'')+" - ";\n txt += (count==0)?"none":(count==total)?"all":count;\n txt += " selected for export";\n return txt;\n}\n\nfunction refreshExportList(selectedIndex)\n{\n var theList = document.getElementById("exportList");\n var sort;\n if (!theList) return;\n // get the sort order\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 for (var t=0,count=0; 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" button if no tiddlers selected\n document.getElementById("exportStart").disabled=(count==0);\n // show selection count\n var tiddlers = store.getTiddlers('title');\n if (theList.options.length) { clearMessage(); displayMessage(formatExportMessage(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 // output the tiddler list\n switch(sort)\n {\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 {\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 {\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}\n//}}}\n\n// // list filtering\n//{{{\nfunction getFilterDate(val,id)\n{\n var result=0;\n switch (val) {\n case 'site':\n var timestamp=store.getTiddlerText("SiteDate");\n if (!timestamp) timestamp=document.lastModified;\n result=new Date(timestamp);\n break;\n case 'file':\n result=new Date(document.lastModified);\n break;\n case 'other':\n result=new Date(document.getElementById(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 // DEBUG alert('getFilterDate('+val+','+id+')=='+result+"\snnow="+now);\n return result;\n}\n\nfunction filterExportList()\n{\n var theList = document.getElementById("exportList"); if (!theList) return -1;\n\n var filterStart=document.getElementById("exportFilterStart").checked;\n var val=document.getElementById("exportFilterStartBy").value;\n var startDate=getFilterDate(val,'exportStartDate');\n\n var filterEnd=document.getElementById("exportFilterEnd").checked;\n var val=document.getElementById("exportFilterEndBy").value;\n var endDate=getFilterDate(val,'exportEndDate');\n\n var filterTags=document.getElementById("exportFilterTags").checked;\n var tags=document.getElementById("exportTags").value;\n\n var filterText=document.getElementById("exportFilterText").checked;\n var text=document.getElementById("exportText").value;\n\n if (!(filterStart||filterEnd||filterTags||filterText)) {\n alert("Please set the selection filter");\n document.getElementById('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\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 && !matchTags(tiddler,tags))\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//}}}\n\n//{{{\nfunction matchTags(tiddler,cond)\n{\n if (!cond||!cond.trim().length) return false;\n\n // build a regex of all tags as a big-old regex that \n // OR's the tags together (tag1|tag2|tag3...) in length order\n var tgs = store.getTags();\n if ( tgs.length == 0 ) return results ;\n var tags = tgs.sort( function(a,b){return (a[0].length<b[0].length)-(a[0].length>b[0].length);});\n var exp = "(" + tags.join("|") + ")" ;\n exp = exp.replace( /(,[\sd]+)/g, "" ) ;\n var regex = new RegExp( exp, "ig" );\n\n // build a string such that an expression that looks like this: tag1 AND tag2 OR NOT tag3\n // turns into : /tag1/.test(...) && /tag2/.test(...) || ! /tag2/.test(...)\n cond = cond.replace( regex, "/$1\s\s|/.test(tiddlerTags)" );\n cond = cond.replace( /\ssand\ss/ig, " && " ) ;\n cond = cond.replace( /\ssor\ss/ig, " || " ) ;\n cond = cond.replace( /\ss?not\ss/ig, " ! " ) ;\n\n // if a boolean uses a tag that doesn't exist - it will get left alone \n // (we only turn existing tags into actual tests).\n // replace anything that wasn't found as a tag, AND, OR, or NOT with the string "false"\n // if the tag doesn't exist then /tag/.test(...) will always return false.\n cond = cond.replace( /(\ss|^)+[^\s/\s|&!][^\ss]*/g, "false" ) ;\n\n // make a string of the tags in the tiddler and eval the 'cond' string against that string \n // if it's TRUE then the tiddler qualifies!\n var tiddlerTags = (tiddler.tags?tiddler.tags.join("|"):"")+"|" ;\n try { if ( eval( cond ) ) return true; }\n catch( e ) { displayMessage("Error in tag filter '" + e + "'" ); }\n return false;\n}\n//}}}\n\n// // output data formatting\n// // exportHeader(format)\n//{{{\nfunction exportHeader(format)\n{\n switch (format) {\n case "TW": return exportTWHeader();\n case "DIV": return exportDIVHeader();\n case "XML": return exportXMLHeader();\n }\n}\n//}}}\n\n// // exportFooter(format)\n//{{{\nfunction exportFooter(format)\n{\n switch (format) {\n case "TW": return exportDIVFooter();\n case "DIV": return exportDIVFooter();\n case "XML": return exportXMLFooter();\n }\n}\n//}}}\n\n// // exportTWHeader()\n//{{{\nfunction exportTWHeader()\n{\n // Get the URL of the document\n var originalPath = document.location.href;\n // Check we were loaded from a file URL\n if(originalPath.substr(0,5) != "file:")\n { alert(config.messages.notFileUrlError); return; }\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#"); if(hashPos != -1) 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 // Load the original file\n var original = loadFile(localPath);\n if(original == null)\n { alert(config.messages.cantSaveError); return; }\n // reset existing HTML source markup\n original=updateMarkupBlock(original,"PRE-HEAD");\n original=updateMarkupBlock(original,"POST-HEAD");\n original=updateMarkupBlock(original,"PRE-BODY");\n original=updateMarkupBlock(original,"POST-BODY");\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n { alert(config.messages.invalidFileError.format([localPath])); return; }\n return original.substr(0,posOpeningDiv+startSaveArea.length)\n}\n//}}}\n\n// // exportDIVHeader()\n//{{{\nfunction exportDIVHeader()\n{\n var out=[];\n var now = new Date();\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 pver = version.extensions.exportTiddlers.major+"."\n +version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;\n out.push("<html><body>");\n out.push("<style type=\s"text/css\s">");\n out.push("#storeArea {display:block;margin:1em;}");\n out.push("#storeArea div");\n out.push("{padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}");\n out.push("#javascriptWarning");\n out.push("{width:100%;text-align:left;background-color:#eeeeee;padding:1em;}");\n out.push("</style>");\n out.push("<div id=\s"javascriptWarning\s">");\n out.push("TiddlyWiki export file<br>");\n out.push("Source"+": <b>"+convertUnicodeToUTF8(document.location.href)+"</b><br>");\n out.push("Title: <b>"+title+"</b><br>");\n out.push("Subtitle: <b>"+subtitle+"</b><br>");\n out.push("Created: <b>"+now.toLocaleString()+"</b> by <b>"+user+"</b><br>");\n out.push("TiddlyWiki "+twver+" / "+"ExportTiddlersPlugin "+pver+"<br>");\n out.push("Notes:<hr><pre>"+document.getElementById("exportNotes").value.replace(regexpNewLine,"<br>")+"</pre>");\n out.push("</div>");\n out.push("<div id=\s"storeArea\s">");\n return out;\n}\n//}}}\n\n// // exportDIVFooter()\n//{{{\nfunction exportDIVFooter()\n{\n var out=[];\n out.push("</div><!--POST-BODY-START-->\sn<!--POST-BODY-END--></body></html>");\n return out;\n}\n//}}}\n\n// // exportXMLHeader()\n//{{{\nfunction exportXMLHeader()\n{\n var out=[];\n var now = new Date();\n var u = store.getTiddlerText("SiteUrl",null);\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 pver = version.extensions.exportTiddlers.major+"."\n +version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;\n out.push("<" + "?xml version=\s"1.0\s"?" + ">");\n out.push("<rss version=\s"2.0\s">");\n out.push("<channel>");\n out.push("<title>" + title + "</title>");\n if(u) out.push("<link>" + convertUnicodeToUTF8(u.htmlEncode()) + "</link>");\n out.push("<description>" + subtitle + "</description>");\n out.push("<language>en-us</language>");\n out.push("<copyright>Copyright " + now.getFullYear() + " " + user + "</copyright>");\n out.push("<pubDate>" + now.toGMTString() + "</pubDate>");\n out.push("<lastBuildDate>" + now.toGMTString() + "</lastBuildDate>");\n out.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");\n out.push("<generator>TiddlyWiki "+twver+" plus ExportTiddlersPlugin "+pver+"</generator>");\n return out;\n}\n//}}}\n\n// // exportXMLFooter()\n//{{{\nfunction exportXMLFooter()\n{\n var out=[];\n out.push("</channel></rss>");\n return out;\n}\n//}}}\n\n// // exportData()\n//{{{\nfunction exportData(theList,theFormat)\n{\n // scan export listbox and collect DIVs or XML for selected tiddler content\n var out=[];\n for (var i=0; i<theList.options.length; i++) {\n // get item, skip non-selected items and section headings\n var opt=theList.options[i]; if (!opt.selected||(opt.value=="")) continue;\n // get tiddler, skip missing tiddlers (this should NOT happen)\n var thisTiddler=store.getTiddler(opt.value); if (!thisTiddler) continue; \n if (theFormat=="TW") out.push(convertUnicodeToUTF8(thisTiddler.saveToDiv()));\n if (theFormat=="DIV") out.push(convertUnicodeToUTF8(thisTiddler.title+"\sn"+thisTiddler.saveToDiv()));\n if (theFormat=="XML") out.push(convertUnicodeToUTF8(thisTiddler.saveToRss(store.getTiddlerText("SiteUrl",""))));\n }\n return out;\n}\n//}}}\n\n// // exportTiddlers(): output selected data to local or server\n//{{{\nfunction exportTiddlers()\n{\n var theList = document.getElementById("exportList"); if (!theList) return;\n\n // get the export settings\n var theProtocol = document.getElementById("exportTo").value;\n var theFormat = document.getElementById("exportFormat").value;\n\n // assemble output: header + tiddlers + footer\n var theData=exportData(theList,theFormat);\n var count=theData.length;\n var out=[]; var txt=out.concat(exportHeader(theFormat),theData,exportFooter(theFormat)).join("\sn");\n var msg="";\n switch (theProtocol) {\n case "file:":\n var theTarget = document.getElementById("exportFilename").value.trim();\n if (!theTarget.length) msg = "A local path/filename is required\sn";\n if (!msg && saveFile(theTarget,txt))\n msg=count+" tiddler"+((count!=1)?"s":"")+" exported to local file";\n else if (!msg)\n msg+="An error occurred while saving to "+theTarget;\n break;\n case "http:":\n case "https:":\n var theTarget = document.getElementById("exportHTTPServerURL").value.trim();\n if (!theTarget.length) msg = "A server URL is required\sn";\n if (document.getElementById('exportNotify').checked)\n theTarget+="&notify="+encodeURIComponent(document.getElementById('exportNotifyTo').value);\n if (document.getElementById('exportNotes').value.trim().length)\n theTarget+="&notes="+encodeURIComponent(document.getElementById('exportNotes').value);\n if (!msg && exportPost(theTarget+encodeURIComponent(txt)))\n msg=count+" tiddler"+((count!=1)?"s":"")+" exported to "+theProtocol+" server";\n else if (!msg)\n msg+="An error occurred while saving to "+theTarget;\n break;\n case "ftp:":\n default:\n msg="Sorry, export to "+theLocation+" is not yet available";\n break;\n }\n clearMessage(); displayMessage(msg,theTarget);\n}\n//}}}\n\n// // exportPost(url): cross-domain post uses hidden iframe to submit url and capture responses\n//{{{\nfunction exportPost(url)\n{\n var f=document.getElementById("exportFrame"); if (f) document.body.removeChild(f);\n f=document.createElement("iframe"); f.id="exportFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n d.location.replace(url);\n return true;\n}\n//}}}\n\n// // promptForFilename(msg,path,file) uses platform/browser specific functions to get local filespec\n//{{{\nfunction promptForExportFilename(here)\n{\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 file=config.macros.exportTiddlers.newdefault;\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='html';\n picker.defaultString=file;\n picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);\n if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;\n }\n catch(e) { alert('error during local file access: '+e.toString()) }\n }\n else { // IE\n try { // XP only\n var s = new ActiveXObject('UserAccounts.CommonDialog');\n s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';\n s.FilterIndex=3; // default to HTML files;\n s.InitialDir=path;\n s.FileName=file;\n if (s.showOpen()) var result=s.FileName;\n }\n catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE\n }\n return result;\n}\n//}}}
|!Option|!Syntax|!Output|\n|bold font|{{{''bold''}}}|''bold''|\n|italic type|{{{//italic//}}}|//italic//|\n|underlined text|{{{__underlined__}}}|__underlined__|\n|strikethrough text|{{{--strikethrough--}}}|--strikethrough--|\n|superscript text|{{{^^super^^script}}}|^^super^^script|\n|subscript text|{{{~~sub~~script}}}|~~sub~~script|\n|highlighted text|{{{@@highlighted@@}}}|@@highlighted@@|\n|monospaced text|{{{{{{monospaced}}}}}}|{{{monospaced}}}|
<html><p>So, what do we see as some of these &#8216;big picture&#8217; implications?:</p>\n<ul>\n<li>Linked data is surely proving the idea of a Web of Data and is bringing broader awareness about the usefulness of the semantic Web, its languages, and its standards</li>\n<li>The semantic Web does not require &#8220;reasoning&#8221; at the point of linked data publishing, only that the linked data be published in a form that <span class="double_u" style="font-style: italic">ultimately</span> supports reasoning</li>\n<li>Linked data is largely a basis for exposing and sharing instance data</li>\n<li>As instance records, linked data is about <span class="double_u">assertions</span> and attributes, not <span style="font-style: italic">provability</span> or <span style="font-style: italic">decidability</span></li>\n<li>Linked data can be guided by the constructs of description logics</li>\n<li>Linked data instance records only require a subset of RDFS to be structured sufficiently for assertions and attributes</li>\n<li>Work applied to linked data in a distributed dataset setting can be segregated and optimized</li>\n<li>This specialized work (<span style="font-style: italic">identity testing</span>, <span style="font-style: italic">disambiguation</span> or <span style="font-style: italic">full-text retrieval</span>) does not belong at the ABox level, but also can be conducted separately from standard TBox reasoning and inference</li>\n<li>Linked data has appropriately embraced RDF, but has often overstepped its natural bounds by &#8220;cherry-picking&#8221; OWL predicates without regard to actual use in an open-world knowledge base</li>\n<li>As linked data is incorporated into knowledge bases, fragments and dialects of both RDF and OWL can be applied to specific work tasks to improve scalability and computational tractability</li>\n<li><span style="font-family: monospace">owl:sameAs</span> and other <span style="font-family: monospace">owl:statements</span> within linked data instance records are being rejected by aggregation and consolidation services; let&#8217;s figure better ways to assert identities, memberships and linkages without entailing what is not being (and can not logically be) supported.</li>\n</ul></html>\n\nfrom http://www.mkbergman.com/\n\n----\n[[Semantic Web Introduction|http://infomesh.net/2001/swintro/]]\n\n
//{{{\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//}}}
[img[filestore/uploads/datamodels/dm101NotationSummary.gif]]
If you can help someone understand something thats good. Pointing out what they need to understand isn't always helpful. They can't handle what information is coming their way now. But I think this is a little like the "productivity paradox", you're too busy getting things done to learn how to do things better.
<<options>>
|>|>|!PageTemplate|\n|>|>|[[SiteTitle]] - [[SiteSubtitle]]|\n|[[MainMenu]]|[[DefaultTiddlers]]<br><br>[[ViewTemplate]]<br><br>[[EditTemplate]]|[[SideBarOptions]]|\n|~|~|[[OptionsPanel]]<br>AdvancedOptions|\n|~|~|SideBarTabs|\n|>|>|[[SiteUrl]]|
!!!DRS Data Model\n>DRS content is modeled at three levels of granularity: object, file and bitstream.\n\n>An object in the DRS is a coherent set of content that is considered a single intellectual unit for purposes of description, use and/or management: for example a particular book, web harvest, serial or photograph.\n>A file is a named and ordered sequence of bytes that is known to an operating system. A file can have zero or more bytes and has a file format, access permissions, and file system characterizations such as file size and last modification date.\nA bitstream is contiguous or non-contiguous data within a file that has meaningful properties for preservation or access purposes. @@color:red;(A file can have multiple bitstreams) -BK@@\n\n[img[/files/uploads/obj_model.png]]\n\n>DRS objects are composed of one or more files. Files are composed of zero or more bitstreams. A file can be contained by at most a single object. Files are not shared among objects. A bitstream may contain other bitstreams but can be contained by at most a single file. While DRS material is always modeled at the object and file levels, material is only modeled at the bitstream level when it is deemed meaningful for preservation or access purposes.\n\n!!!DRS Content Models\n\n>Every DRS object conforms to a single "content model". Content models define types of objects supported by the DRS. Each content model definition documents:\n\n>supported file formats\n>file and object relationships\n>file roles and other metadata\n>known delivery and rendering applications\n>associated assessments and preservation plans\n\n
/*{{{*/\n/*Haemoglobin Theme for TiddlyWiki*/\n/*Design and CSS by Saq Imtiaz*/\n/*Version 1.0*/\n/*}}}*/\n/*{{{*/\n\n#sidebarTabs {font-family:arial,helvetica;}\n\nbody\n{background:#fefefe;}\n\n#contentWrapper {\n font-family: Verdana, Arial, Tahoma, Sans-Serif;\n color: #555555;\nmargin:1.9em auto 1em ; width:800px;}\n\n#header {background:#fefefe;}\n\n.headerShadow { padding: 1.4em 0em 0.5em 1em; }\n\n.siteTitle {\n font-family: 'Trebuchet MS' sans-serif;\n font-weight: bold;\n font-size: 36px;\n color: #FF4040;\n background-color: #FFF;\n}\n\n.siteSubtitle {\n font-size: 1.0em;\n display: block;\n margin: .5em 3em; color: #999;\n}\n\n.clearAll {clear:both;}\n.tagClear {clear:none;}\n#sidebar {position:relative; float:right; display:inline; right:0;}\n\na{\ncolor:#A60000;\ntext-decoration: none; font-weight:normal;\n}\n\na:hover{\ncolor:#A60000;\nbackground-color: #fefefe;\nborder-bottom:1px solid #A60000;\n}\n\n.viewer .button, .editorFooter .button{\ncolor: #555;\nborder: 1px solid #A60000;\n}\n\n.viewer .button:hover,\n.editorFooter .button:hover{\ncolor: #fff;\nbackground: #A60000;\nborder-color: #A60000;\n}\n\n.viewer .button:active, .viewer .highlight,.editorFooter .button:active,\n.editorFooter .highlight{color:#fff;\nbackground:#9F1313;border-color:#9F1313;}\n\n#topMenu br {display:none;}\n\n#topMenu {padding:0.45em 1em; background:DarkRed;}\n\n#topMenu a, #topMenu .tiddlyLink, #topMenu .button {color:#f1f1f1;\npadding:0.3em 0.45em; margin:0\n4px;font-size:120%;font-weight:normal;font-variant: small-caps; border:none;\nbackground:#A60000; text-decoration:none; }\n\n#topMenu a:hover, #topMenu .tiddlyLink:hover, #topMenu .button:hover,\n#topMenu .button:active, #topMenu .highlight\n{color:#fff;text-decoration:none; background:#9F1313; }\n\n\n\n#displayArea{margin:0 17em 2em 0.5em; width:90%;}\n\n.tiddler {padding-left:0;}\n\n.title {color:#A60000; border-bottom:1px solid#A60000; }\n.subtitle, .subtitle a { color: #999999; font-size: 1.0em;margin:0.2em;}\n.shadow .title{color:#999;}\n\n.toolbar {font-size:85%;}\n.selected .toolbar a {color:#999999;}\n.selected .toolbar a:hover {color:#333; background:transparent;border:1px solid #fff;}\n\n.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:#333; background:transparent;border:1px solid #fff;}\n\n * html .viewer pre {\n\nmargin-left: 0em;\n}\n\n * html .editor textarea, * html .editor input {\n\nwidth: 98%;\n}\n\n/***\n!Sidebar\n***/\n#sidebar {position:relative;float:right; line-height: 1.4em; border-left:0px solid#000; display:inline; background:#fefefe; right:0; margin-bottom:2em !important; margin-bottom:1em;\nwidth: 16em;display:none;}\n\n/***\n!SidebarOptions\n***/\n#sidebarOptions {padding-left:0.5em; padding-top:2em;}\n\n#sidebarOptions a {\n color:#999;\n text-decoration: none;}\n\n#sidebarOptions a:hover, #sidebarOptions a:active {\n color:#CC0000;\n background-color:#f5f5f5;border:1px solid #f5f5f5;\n }\n\n#sidebarOptions input {border:1px solid #999; }\n\n\n\n .listTitle {color:#888;}\n\n#sidebarTabs .tabContents {background:#fefefe;}\n#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button{color:#999;}\n#sidebarTabs .tabContents .tiddlyLink:hover,#sidebarTabs .tabContents .button:hover{color:#CC0000;background:#fefefe; text-decoration:none;border:none;}\n\n#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active{color:#CC0000;background:#fefefe}\n\n\n.tabSelected{color:#fefefe; background:#999;}\n\n\n\n .tabSelected, .tabSelected:hover {\n color: #555;\n background: #fefefe;\n border: solid 1px #ccc;\n\n}\n\n#sidebarTabs .tabUnselected:hover { border-bottom: none;padding-bottom:3px;color:#999;}\n\n .tabUnselected {\n color: #999;\n background: #eee;\n border: solid 1px #ccc;\n\n}\n\n.tabUnselected:hover {text-decoration:none; border:1px solid #ccc;}\n\n#sidebarTabs .tabUnselected { border-bottom: none;padding-bottom:3px;}\n#sidebarTabs .tabSelected{padding-bottom:3px;}\n\n#sidebarOptions .sliderPanel {\n background: #eee; border:1px solid#ccc;\n font-size: .9em;\n}\n\n#sidebarOptions .sliderPanel input {border:1px solid #999;}\n#sidebarOptions .sliderPanel .txtOptionInput {border:1px solid #999;width:9em;}\n\n#sidebarOptions .sliderPanel a {font-weight:normal; color:#555;background-color: #eee; border-bottom:1px dotted #333;}\n\n\n#sidebarOptions .sliderPanel a:hover {\ncolor:#111;\nbackground-color: #eee;\nborder:none;\nborder-bottom:1px dotted #111;\n}\n\n.tabContents {background:#fefefe;}\n\n\n\n\n.tagging, .tagged {\nborder: 1px solid #eee;\nbackground-color: #F7F7F7;\n}\n\n.selected .tagging, .selected .tagged {\nbackground-color: #f7f7f7;\nborder: 1px solid #ccc;\n}\n\n.tagging .listTitle, .tagged .listTitle {\ncolor: #bbb;\n}\n\n.selected .tagging .listTitle, .selected .tagged .listTitle {\ncolor: #666;\n}\n\n.tagging .button, .tagged .button {\ncolor:#ccc;\n}\n.selected .tagging .button, .selected .tagged .button {\ncolor:#aaa;\n}\n\n.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}\n\n.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {\nborder: none; background:transparent; text-decoration:underline; color:#333;\n}\n\n.popup {\nbackground: #A60000;\nborder: 1px solid #A60000;\n}\n\n.popup li.disabled {\ncolor: #000;\n}\n\n.popup li a, .popup li a:visited {\ncolor: #eee;\nborder: none;\n}\n\n.popup li a:hover {\nbackground: #bf1717;\ncolor: #fff;\nborder: none;\n}\n\n\n\n #messageArea {\n\nborder: 4px solid #A60000;\nbackground: #fefefe;\ncolor: #555;\nfont-size:90%;\n}\n\n #messageArea a:hover { background:#f5f5f5; border:none;}\n\n\n #messageArea .button{\ncolor: #666;\nborder: 1px solid #A60000;\n}\n\n #messageArea .button:hover {\ncolor: #fff;\nbackground: #A60000;\nborder-color: #A60000;\n}\n\n #contentFooter {background:#A60000; color:#DF7D7D; clear: both; padding: 0.5em 1em; }\n\n\n#contentFooter a {\ncolor: #DF7D7D;\nborder-bottom: 1px dotted #DF7D7D; font-weight:normal;text-decoration:none;\n}\n\n\n\n#contentFooter a:hover {\ncolor: #FFFFFF;\nbackground-color:transparent;\nborder-bottom: 1px dotted #fff; text-decoration:none;\n}\n\n\n\n\n.searchBar {float:right;font-size: 1.0em;position:relative; margin-top:1.3em;}\n.searchBar .button {color:#999;display:block;}\n.searchBar .button:hover {border:1px solid #fefefe;color:#4F4B45;}\n.searchBar input { \n background-color: #fefefe;\n color: #999999;\n border: 1px solid #CCC; margin-right:3px;\n}\n\n.tiddler {padding-bottom:10px; width:100%%; \n\n.viewer blockquote {\nborder-left: 5px solid #A60000;\n}\n\n.viewer table, .viewer td {\nborder: 1px solid #A60000;\n}\n\n.viewer th, thead td {\nbackground: #A60000;\nborder: 1px solid #A60000;\ncolor: #fff;\n}\n.viewer pre {\n border: 1px solid #ccc;\n background: #f5f5f5;\n}\n\n.viewer code {\ncolor: #111; background:#f5f5f5;\n}\n\n.viewer hr {\nborder-top: dashed 1px #555;\n}\n\n.editor input {\nborder: 1px solid #888; margin-top:5px;\n}\n\n.editor textarea {\nborder: 1px solid #888;\n}\n\nh1,h2,h3,h4,h5 { color: #A60000; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif; }\nh1 {font-size:18px;}\nh2 {font-size:16px;}\nh3 {font-size: 14px;}\n/*}}}*/\n
>I started talking about programming and programmers, because my wife won't let me and I have to have these conversations with somebody```[[Raymond Lewallen |http://codebetter.com/blogs/raymond.lewallen/archive/2005/02/22/55812.aspx]]```\n\nI read this a laughed but it's true, sometimes you're just not allowed to have that conversation at home or work.
* [[WikiWords|WikiWord]] are automatically transformed to hyperlinks to the respective tiddler\n** the automatic transformation can be suppressed by preceding the respective WikiWord with a tilde ({{{~}}}): {{{~WikiWord}}}\n* [[PrettyLinks]] are enclosed in square brackets and contain the desired tiddler name: {{{[[tiddler name]]}}}\n** optionally, a custom title or description can be added, separated by a pipe character ({{{|}}}): {{{[[title|target]]}}}<br>'''N.B.:''' In this case, the target can also be any website (i.e. URL).
/***\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
If the libraries is the CSU's just license the same material from outside sources (Ebsco) why do we need 4 administrators to do this?\n\nIf the library is just a purchasing agent then we should consolidate these functions.\n\n
>they're rattling the code until they happen to get something to work
<script label="edit a tiddler">\n var title=prompt("Enter a tiddler title");\n if (!title||!title.length) return; /* cancelled by user */\n story.displayTiddler(null,title,2);\n</script>
<<timeline created >>
[[This|http://www.dragosroua.com/the-productivity-map/] is a good article from [[Dragos Roua|http://www.dragosroua.com/about/]]. Can we use this looking at our library? An important thing to remember about this map is that //productivity// is about getting **better** at what you are doing not just getting more done.\n\n[img[/filestore/uploads/learning/smartgoals.jpg]] [[Setting Goals the SMART Way|http://en.wikipedia.org/wiki/SMART_criteria]] \n\n!!!Images from the article \n\n[img[filestore/uploads/learning/productivity-map-basic.png]]\n\n[img[filestore/uploads/learning/productivity-map-meridians.png]]\n\n\n
>The library still approaches IT as a novelty. Librarians come from a background where their previous information storage technology has lasted hundreds of years (paper), and nothing that IT currently wields demonstrates a similar proven track record. The fast evolution of storage media, standards and other technology infrastructure doesn’t instill them with enough confidence that what we’re doing today will be around 5-10 years from now, let alone 100.\n\n<<notes>>
/***\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//}}}
!!!MRD + ERD + URD\n>At Apple there are three evaluations required at the inception of a product idea: a marketing requirement document, an engineering requirement document, and a user-experience requirements document. \n\n>Marketing is what people want; Engineering is what we can do; User Experience is how people like to do things.\n\n>These three documents are reviewed by a committee of executives, and if approved, the design group would get a budget, and a team leader would be assigned. At that point, the team works on expanding the three requirement documents, inserting plans on how they hope to meet the marketing, engineering, and user-experience needs--figures for the release date, ad cycle, pricing details, and the like.
/***\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//}}}
/%RGB hexadecimal 216-color "Web safe" palette %/\nSource: Paul Petterson, revised by Eric Shulman\n{{menubox{\n|bgcolor(#FFF):FFF |bgcolor(#CCC):CCC |bgcolor(#999):999 |bgcolor(#666):@@color(white):666@@ |bgcolor(#333):@@color(white):333@@ |bgcolor(#000):@@color(white):000@@ |bgcolor(#FC0):~FC0 |bgcolor(#F90):F90 |bgcolor(#F60):@@color(white):F60@@ |bgcolor(#F30):@@color(white):F30@@ |>|>|>|>|>| |\n|bgcolor(#9C0):9C0 |>|>|>| |bgcolor(#C90):C90 |bgcolor(#FC3):~FC3 |bgcolor(#FC6):~FC6 |bgcolor(#F96):F96 |bgcolor(#F63):@@color(white):F63@@ |bgcolor(#C30):@@color(white):C30@@ |>|>|>| |bgcolor(#C03):@@color(white):C03@@ |\n|bgcolor(#CF0):~CF0 |bgcolor(#CF3):~CF3 |bgcolor(#330):@@color(white):330@@ |bgcolor(#660):@@color(white):660@@ |bgcolor(#990):990 |bgcolor(#CC0):~CC0 |bgcolor(#FF0):~FF0 |bgcolor(#C93):C93 |bgcolor(#C63):@@color(white):C63@@ |bgcolor(#300):@@color(white):300@@ |bgcolor(#600):@@color(white):600@@ |bgcolor(#900):@@color(white):900@@ |bgcolor(#C00):@@color(white):C00@@ |bgcolor(#F00):@@color(white):F00@@ |bgcolor(#F36):@@color(white):F36@@ |bgcolor(#F03):@@color(white):F03@@ |\n|bgcolor(#9F0):9F0 |bgcolor(#CF6):~CF6 |bgcolor(#9C3):9C3 |bgcolor(#663):@@color(white):663@@ |bgcolor(#993):993 |bgcolor(#CC3):~CC3 |bgcolor(#FF3):~FF3 |bgcolor(#960):@@color(white):960@@ |bgcolor(#930):@@color(white):930@@ |bgcolor(#633):@@color(white):633@@ |bgcolor(#933):@@color(white):933@@ |bgcolor(#C33):@@color(white):C33@@ |bgcolor(#F33):@@color(white):F33@@ |bgcolor(#C36):@@color(white):C36@@ |bgcolor(#F69):@@color(white):F69@@ |bgcolor(#F06):@@color(white):F06@@ |\n|bgcolor(#6F0):6F0 |bgcolor(#9F6):9F6 |bgcolor(#6C3):6C3 |bgcolor(#690):690 |bgcolor(#996):996 |bgcolor(#CC6):~CC6 |bgcolor(#FF6):~FF6 |bgcolor(#963):@@color(white):963@@ |bgcolor(#630):@@color(white):630@@ |bgcolor(#966):@@color(white):966@@ |bgcolor(#C66):@@color(white):C66@@ |bgcolor(#F66):@@color(white):F66@@ |bgcolor(#903):@@color(white):903@@ |bgcolor(#C39):@@color(white):C39@@ |bgcolor(#F6C):@@color(white):~F6C@@ |bgcolor(#F09):@@color(white):F09@@ |\n|bgcolor(#3F0):3F0 |bgcolor(#6F3):6F3 |bgcolor(#390):390 |bgcolor(#6C0):6C0 |bgcolor(#9F3):9F3 |bgcolor(#CC9):~CC9 |bgcolor(#FF9):~FF9 |bgcolor(#C96):C96 |bgcolor(#C60):@@color(white):C60@@ |bgcolor(#C99):C99 |bgcolor(#F99):F99 |bgcolor(#F39):@@color(white):F39@@ |bgcolor(#C06):@@color(white):C06@@ |bgcolor(#906):@@color(white):906@@ |bgcolor(#F3C):@@color(white):~F3C@@ |bgcolor(#F0C):@@color(white):~F0C@@ |\n|bgcolor(#0C0):0C0 |bgcolor(#3C0):3C0 |bgcolor(#360):@@color(white):360@@ |bgcolor(#693):693 |bgcolor(#9C6):9C6 |bgcolor(#CF9):~CF9 |bgcolor(#FFC):FFC |bgcolor(#FC9):~FC9 |bgcolor(#F93):F93 |bgcolor(#FCC):FCC |bgcolor(#F9C):~F9C |bgcolor(#C69):@@color(white):C69@@ |bgcolor(#936):@@color(white):936@@ |bgcolor(#603):@@color(white):603@@ |bgcolor(#C09):@@color(white):C09@@ |bgcolor(#303):@@color(white):303@@ |\n|bgcolor(#3C3):3C3 |bgcolor(#6C6):6C6 |bgcolor(#0F0):0F0 |bgcolor(#3F3):3F3 |bgcolor(#6F6):6F6 |bgcolor(#9F9):9F9 |bgcolor(#CFC):CFC |>|>| |bgcolor(#C9C):~C9C |bgcolor(#969):@@color(white):969@@ |bgcolor(#939):@@color(white):939@@ |bgcolor(#909):@@color(white):909@@ |bgcolor(#636):@@color(white):636@@ |bgcolor(#606):@@color(white):606@@ |\n|bgcolor(#060):@@color(white):060@@ |bgcolor(#363):@@color(white):363@@ |bgcolor(#090):090 |bgcolor(#393):393 |bgcolor(#696):696 |bgcolor(#9C9):9C9 |>|>| |bgcolor(#FCF):FCF |bgcolor(#F9F):~F9F |bgcolor(#F6F):@@color(white):~F6F@@ |bgcolor(#F3F):@@color(white):~F3F@@ |bgcolor(#F0F):@@color(white):~F0F@@ |bgcolor(#C6C):@@color(white):~C6C@@ |bgcolor(#C3C):@@color(white):~C3C@@ |\n|bgcolor(#030):@@color(white):030@@ |bgcolor(#0C3):0C3 |bgcolor(#063):@@color(white):063@@ |bgcolor(#396):396 |bgcolor(#6C9):6C9 |bgcolor(#9FC):9FC |bgcolor(#CFF):CFF |bgcolor(#39F):39F |bgcolor(#9CF):9CF |bgcolor(#CCF):CCF |bgcolor(#C9F):~C9F |bgcolor(#96C):@@color(white):96C@@ |bgcolor(#639):@@color(white):639@@ |bgcolor(#306):@@color(white):306@@ |bgcolor(#90C):@@color(white):90C@@ |bgcolor(#C0C):@@color(white):~C0C@@ |\n|bgcolor(#0F3):0F3 |bgcolor(#3F6):3F6 |bgcolor(#093):093 |bgcolor(#0C6):0C6 |bgcolor(#3F9):3F9 |bgcolor(#9FF):9FF |bgcolor(#9CC):9CC |bgcolor(#06C):@@color(white):06C@@ |bgcolor(#69C):69C |bgcolor(#99F):99F |bgcolor(#99C):99C |bgcolor(#93F):@@color(white):93F@@ |bgcolor(#60C):@@color(white):60C@@ |bgcolor(#609):@@color(white):609@@ |bgcolor(#C3F):@@color(white):~C3F@@ |bgcolor(#C0F):@@color(white):~C0F@@ |\n|bgcolor(#0F6):0F6 |bgcolor(#6F9):6F9 |bgcolor(#3C6):3C6 |bgcolor(#096):096 |bgcolor(#6FF):6FF |bgcolor(#6CC):6CC |bgcolor(#699):699 |bgcolor(#036):@@color(white):036@@ |bgcolor(#369):@@color(white):369@@ |bgcolor(#66F):@@color(white):66F@@ |bgcolor(#66C):@@color(white):66C@@ |bgcolor(#669):@@color(white):669@@ |bgcolor(#309):@@color(white):309@@ |bgcolor(#93C):@@color(white):93C@@ |bgcolor(#C6F):@@color(white):~C6F@@ |bgcolor(#90F):@@color(white):90F@@ |\n|bgcolor(#0F9):0F9 |bgcolor(#6FC):6FC |bgcolor(#3C9):3C9 |bgcolor(#3FF):3FF |bgcolor(#3CC):3CC |bgcolor(#399):399 |bgcolor(#366):@@color(white):366@@ |bgcolor(#069):@@color(white):069@@ |bgcolor(#039):@@color(white):039@@ |bgcolor(#33F):@@color(white):33F@@ |bgcolor(#33C):@@color(white):33C@@ |bgcolor(#339):@@color(white):339@@ |bgcolor(#336):@@color(white):336@@ |bgcolor(#63C):@@color(white):63C@@ |bgcolor(#96F):@@color(white):96F@@ |bgcolor(#60F):@@color(white):60F@@ |\n|bgcolor(#0FC):0FC |bgcolor(#3FC):3FC |bgcolor(#0FF):0FF |bgcolor(#0CC):0CC |bgcolor(#099):099 |bgcolor(#066):@@color(white):066@@ |bgcolor(#033):@@color(white):033@@ |bgcolor(#39C):39C |bgcolor(#36C):@@color(white):36C@@ |bgcolor(#00F):@@color(white):00F@@ |bgcolor(#00C):@@color(white):00C@@ |bgcolor(#009):@@color(white):009@@ |bgcolor(#006):@@color(white):006@@ |bgcolor(#003):@@color(white):003@@ |bgcolor(#63F):@@color(white):63F@@ |bgcolor(#30F):@@color(white):30F@@ |\n|bgcolor(#0C9):0C9 |>|>|>| |bgcolor(#09C):09C |bgcolor(#3CF):3CF |bgcolor(#6CF):6CF |bgcolor(#69F):69F |bgcolor(#36F):@@color(white):36F@@ |bgcolor(#03C):@@color(white):03C@@ |>|>|>| |bgcolor(#30C):@@color(white):30C@@ |\n|>|>|>|>|>| |bgcolor(#0CF):0CF |bgcolor(#09F):09F |bgcolor(#06F):@@color(white):06F@@ |bgcolor(#03F):@@color(white):03F@@ |>|>|>|>|>| |\n<script>place.lastChild.style.width="95%"</script>}}}
repository must be accessible, sustainable and interoperoperable\n\nfacilitating collaboration and support for experimentation are key characteristics\n\n"Another challenge is the recommendation for "open standards and robust tools" with which data may be manipulated, examined, shared and presented. Who creates these tools? What mechanism will support a dedicated cadre of software specialists who work closely with the social scientists and humanists in creating such tools? How do these cadres share information about such work to avoid an endless reinvention of the same wheel? Does the specialist lose out because no one is available to help design a necessary but highly-specific application? These challenges are not insurmountable, but they are formidable, especially within an environment of constrained resources and limited vision, which, unfortunately, includes a vast majority of academic and cultural institutions."\n\n
!!!SWAP Application Profile\n!!!!Attributes of a ScholarlyWork\nentity type\nidentifier (URI)\ntitle\nsubject\nabstract\ncreator\nfunder\nsupervisor\naffiliated institution\ngrant number\nhas adaptation\nis expressedby\n!!!!Attributes of an Expression\nentity type\ntitle\ndescription\ndate available\nstatus\nversion number or string\nlanguage\ngenre / type\ncopyright holder\nhas version\nhas translation\nbibliographic citation\nreferences\nidentifier (URI)\n!!!!Attributes of a Manifestation\nentity type\npublisher\nformat\ndate modified\nisavailableas\nidentifier (URI)\n\n!!!!Attributes of a Copy\nentitytype\ndate available\naccess rights\nlicence\nis part of\nidentifier/locator (URI)\n\n\n!!!!Attributes of an Agent\nname\nfamily name\ngiven name\ntype of agent\nworkplace homepage\nmailbox\nhomepage\nidentifier (URI)\n\n!!!Extra Notes\nWhere existing dc:relation qualifiers have been used, the relationships being documented have been clearly defined alongside five new properties:\n\nhas adaptation\nhas translation\nis expressed as\nis manifested as\nis available as\nTo aid fulfilment of several of the functional requirements further, four vocabularies have been defined for:\n\naccess rights (Open, Restricted or Closed)\nentity type (ScholarlyWork, Expression, Manifestation, Copy or Agent)\nstatus (Peer Reviewed or Non Peer Reviewed)\nresource type
[img[http://www.digitallearning.in/aug06/images/paradigm_3.jpg]]
[img[filestore/uploads/research/09sepmosGLOBAL.gif]]\n\nFrom [[Science Watch|http://sciencewatch.com/dr/rfm/mos/09sepmosGLOBAL/]]
Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose. ...\n\nLeaky abstractions
[img[http://www.techcrunch.com/wp-content/uploads/2008/08/gartner-hype-cycle1.jpg]]
[img[http://kennison.name/work/notes/images/andsrepository]]\n\n[[Austrailia|http://www.nla.gov.au/openpublish/index.php/nlasp/article/view/1216/1501]]
<<login>>
* Allow for rapid growth and structural change\n* Establish a common language for all co-creation perspectives\n* Encourage construction of scalable, reusable structures\n* Create high-quality user experiences\n* Enable sharing of assets across boundaries\n* Enhance social dynamics, such as 2-way conversation flows\n\n
96.32.1.163\n\nchanged from 24.151,33,52
/***\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//}}}
I'm testing this out\n<<formTiddler "MyFormTemplate>>\n<<showData>>
[[Duke|http://library.duke.edu/jobs/developer.html]]\n\nYale http://publicboard.libgig.com/job/f13d3f8c6f9119c6d94f53bf85669fd2/?d=1&source=indeed\n\n\nI like this format for the web. \n\n!!!Web\nDjango\njQuery\nXHTML/CSS\n!!!Programming\nPython\nJava\nPerl\n!!!XML\nXQuery\nXSLT\nXPath\n!!!Schemas\nePub\nDocBook\nTEI\n!!!Search\nSEO\nMarkLogic\nXapian\n
http://www.col.org/SiteCollectionDocuments/Introducing_Copyright_online_edition.pdf\n\nEveryday guide
!!Headings\n{{{\n!Heading 1\n!!Heading 2\n!!!Heading 3\n!!!!Heading 4\n!!!!!Heading 5\n}}}\n<<<\n!Heading 1\n!!Heading 2\n!!!Heading 3\n!!!!Heading 4\n!!!!!Heading 5\n\n
!!!!!This is what it looks like at Stanford\n\n[img[http://www-sul.stanford.edu/depts/dlss/images/orgchart.jpg]]
How do these thing go together?\n\n!!!Types of Metadata\n* Subject metadata (classification, keywords)\n* Geospatial metadata (postcode, map references, place names)\n* Person-related metadata (people, institutions, co-workers, projects)\n* Usage-related metadata (course reading lists, comments, annotations, library borrowing records)\n* File Format metadata (definitive for preservation)\n* Factual metadata (date, time, user, software system, etc)\n* Bibliographic metadata (including citation)\n* Multilingual/translated metadata (automatic metadata translation)\n* Integrating AMG into deposit workflows (web service orchestration)\n* Useage Data (how often, by whom, etc. was this resource used)\n\n[[Annotated Bibliography on Automated Metadata Generation|http://www.intrallect.com/wiki/index.php/AMG-UC_Annotated_Bibliography]]\n\n[[Natural Language Text Processing with Python|http://www.acm.org/crossroads/xrds13-4/natural_language.html]]\n\n* Technical and Structural about the Data object itself\n* Descriptive, Administrative, Contextual\n\n!!!Metadata Functions ```[[John's JISC CETIS blog|http://blogs.cetis.ac.uk/johnr/2009/08/31/comparing-metadata-requirements-part-2/]]```\n* identify\n* find\n* select\n* use\n* cite\n* manage \n\n[img[http://blogs.cetis.ac.uk/johnr/files/2009/08/oermetadata1.jpg]]
!!!How close should the University be to the Market?\n[[University marketization: the process and its limits|http://www.portlandpress.com/pp/books/online/univmark/084/0143/0840143.pdf]]\n\nThe above is an interesting conversation. What does this mean for libraries embeded in the University?\n\nAt WCSU do we want to be closer to the market? (Producers of marketable skills and knowledge) Universities have to compete among themselves. An entity to be ''managed.''\n\n>universities to position themselves and act strategically to gain status and reputation in a competitive academic field\n\n!!!Concern about this movement\n>the crucial role of universities in the critical assessment \nof the ongoing economic, political and industrial development in our societies.
Strip manuscript management, editing, layout, financial and access models away from publishing and you find four essential functions:\n* Registration (essential for establishing priority claims in science)\n* Certification (for establishing the validity of truth claims)\n* Distribution (providing access to the literature)\n* Archiving (maintaining the record of science)\n\n"Scholarly Kitchen":http://scholarlykitchen.sspnet.org/2009/01/06/banking-on-peer-review/\n\n
{{{find . -type d -exec chmod 755 {} \s;}}}\n\nThis will recursively search your directory tree (starting at dir 'dot') and chmod 755 all directories only.\n\nSimilarly, the following will chmod all files only (and ignore the directories):\n\n{{{find . -type f -exec chmod 644 {} \s;}}}
/***\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//}}}
This is the argument that Google is just full of junk. I'm not sure I agree. [[ from Steven Bell:http://chronicle.com/weekly/v50/i24/24b01501.htm]]\n\n>James Morris, dean of the School of Computer Science at Carnegie Mellon University, has coined the term "infobesity," which nicely describes the outcome of Google-izing research: a junk-information diet, consisting of overwhelming amounts of low-quality material that is hard to digest and leads to research papers of equally low quality. The cure for infobesity may be commercially produced databases, called aggregators. Produced by companies like ProQuest and Gale, the databases use conventional features like Boolean searching but also offer specialized vocabularies and other features that give better results to searchers willing to learn how to use them. With practice, such databases -- to which most libraries already subscribe -- effectively retrieve small, precisely targeted portions of "nutritious" information.
Embedded holdings information - Holdings information may be added to an existing MARC bibliographic record rather than being in a separate linked holdings record.\nEmbedded holdings information may include the following Holdings Format fields:\n\n841 Holdings Coded Data Values\n843 Reproduction Note\n845 Terms Governing Use and Reproduction Note\n852 Location\n853 Captions and Pattern-Basic Bibliographic Unit\n854 Captions and Pattern-Supplementary Material\n855 Captions and Pattern-Indexes\n856 Electronic Location and Access\n863 Enumeration and Chronology-Basic Bibliographic Unit\n864 Enumeration and Chronology-Supplementary Material\n865 Enumeration and Chronology-Indexes\n866 Textual Holdings-Basic Bibliographic Unit\n867 Textual Holdings-Supplementary Material\n868 Textual Holdings-Indexes\n876 Item Information-Basic Bibliographic Unit\n877 Item Information-Supplementary Material\n878 Item Information-Indexes\n\n
"Delicious Subject Guides: Maintaining Subject Guides Using a Social Bookmarking Site":http://journal.lib.uoguelph.ca/index.php/perj/article/view/328/1375
<<quiz>>