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

#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 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 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:0em 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 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 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 0em;}
.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 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 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 0em 14em;}

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

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

.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:0em 0.25em; padding:0em 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 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 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 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 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 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<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 closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></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 +saveTiddler -cancelTiddler deleteTiddler'></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'></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>>
Background: #fff
Foreground: #444
PrimaryPale: #8cf
PrimaryLight: #333
PrimaryMid: #000
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #667
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
[[Getting Started with TeamTasks]]
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>>
[[Getting Started with TeamTasks]]
[[Release Notes]]

<<slider chkSliderOptionsPanel UserDefinitions 'Users »' 'A list of users'>>
<<slider chkSliderOptionsPanel TaskViews 'Task views »' 'A selection of task views'>>
<<slider chkSliderOptionsPanel TaskDefinitions 'Task definitions »' 'The definitions that drive the task management'>>

----
[[modify this menu|MainMenu]]|[[options|OptionsPanel]]|[[about|About TeamTasks]]
----
[[download|index.html]]
<!--{{{-->
<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='controlsContainer' refresh='content' tiddler='ControlsContainer'></div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
a simple extensible task management tool (v0.3)
~TeamTasks
http://www.hawksworx.com/playground/TeamTasks
/*{{{*/

/* flag dev version */
body {border-top:solid 3px #000; }

#sidebar {display:none;}

.flaggedMandatory { background-color:#c99;}
.txtOptionInput { border:1px solid #ddd; border-top:1px solid #999; margin:4px;}
a.tiddlyLink { padding:0.1em 0.2em; }
a.tiddlyLink:hover { background-color:#ccd; color:#000; }

#mainMenu { width:15em; }
#displayArea { margin:1em 1em 1em 15em; }
#tiddlerDisplay { margin:0 5em 2em 5em; }
	
#controlsContainer { background-color:#ddd; border-top:solid 1px #fff;  border-bottom:solid 1px #aaa; }
#controlsContainer a.button { padding:0.4em 1em; border:solid 0 #000; color:#333; font-size:1em; line-height:2em; border-right:solid 1px #ccc;}
#controlsContainer a.button:hover { background-color:#ccc; color:#000; }
#controlsContainer div.sliderPanel { background-color:#333; border-top:solid 1px #aaa;}
#controlsContainer  .txtOptionInput { margin: 0; font-size:0.9em; padding:2px; border-right:solid 1px #ccc;}

#controlsContainer div.txtMainTab {  }
#controlsContainer div.txtMainTab div.tabset { background-color:#ccd; color:#ccc; float:left; padding:0; height:200px; width:150px; border-right:solid 1px #aaa; }
#controlsContainer div.txtMainTab div.tabset a.tab { display:block; padding:0.5em 1em; text-align:right; background-color:#ccd; border-bottom:solid 1px #aaa; margin:0;}
#controlsContainer div.txtMainTab div.tabset a.tabSelected {background-color:#bbc; border-top:solid 0px #aaa; color:#fff; }
#controlsContainer div.txtMainTab div.tabset a.tab:hover {background-color:#bbc; }
 
#controlsContainer div.tabContents {float:left; height:200px; width:350px; background-color: transparent; overflow:auto; border:solid 0px #aaa; border-right:solid 1px #aaa; padding:0;}

#controlsContainer div.sliderPanel div.txtMainTab ul { list-style:none; margin:0; padding:0.5em 0; }
#controlsContainer div.sliderPanel div.txtMainTab ul li { padding:0 20px;}
#controlsContainer div.sliderPanel div.txtMainTab ul li a { font-weight:normal; line-height:1.3em; margin:0.2em 0; }
#controlsContainer div.sliderPanel div.txtMainTab ul li.listTitle { border-top:solid 1px #bbc; padding:0.5em 0 0.2em 20px; font-size:1.5em; color:#bbc; }
#controlsContainer div.sliderPanel div.txtMainTab ul li.listLink { margin:0; }
#controlsContainer div.sliderPanel div.txtMainTab ul:first-child li.listTitle { border: solid 0 #ccc;  }

#popup { border:solid 1px [[ColorPalette::Subtle]]; border-bottom:solid 1px [[ColorPalette::LessSubtle]]; border-right:solid 1px [[ColorPalette::LessSubtle]]; background-color:[[ColorPalette::Background]]; padding:1px 0 0 0;}
#popup li a { background-color:[[ColorPalette::SubtleSuperLight]]; color:[[ColorPalette::MuchLessSubtle]]; text-align:left;}
#popup li a:hover { background-color:[[ColorPalette::SubtleLight]]; color:[[ColorPalette::MuchLessSubtle]];}
#popup li.listBreak div {border-bottom:solid 1px [[ColorPalette::Background]]; border-top:solid 1px [[ColorPalette::SubtleLight]]; margin:0;}

#controlsContainer div.topOptions {float:left; background-color:#bbc; width:400px; }

div.tiddler div.viewer { padding:1em 0 3em 0; border-bottom:solid 1px #ccc;}
h1,h2,h3,h4 { border-style:none; }
div.tiddler div.viewer > img {width:100%;}


div.tiddler div.task { border:solid 1px #aaa; background-color:#f2f2f2; position:relative; overflow:auto; clear:both; zoom:1;}
div.tiddler div.task div.taskBody { float:left; display:block; padding:1em 1em 1em 1em;}
div.tiddler div.task div.viewer { border-style:none; }
div.tiddler div.task div.taskControls {float:right; border-left:solid 1px #aaa; width:21em;  background-color:#ccd; padding:0; white-space:nowrap; }
div.tiddler div.task div.taskControls div.toolbar a { display:block; padding:0.5em 1em; text-align:right; background-color:#ccd; border-style:none; font-size:1.2em; color:#fff; text-align:left; border-bottom:solid 1px #aaa; margin:0;}
div.tiddler div.task div.taskControls div.toolbar a:hover {background-color:#bbc; }
div.tiddler div.task div.taskControls div.metacontrols { padding:1em; }
div.tiddler div.task div.taskControls div.metacontrols select {width: 150px; border:solid 1px #aaa; font-size:0.9em; padding:0.2em;}
div.tiddler div.task div.taskControls div.metacontrols table {border-style:none; margin:0;}
div.tiddler div.task div.taskControls div.metacontrols table tr {border-style:none;}
div.tiddler div.task div.taskControls div.metacontrols table td {border-style:none;}

#createTeamTaskUserForm { background-color:#f0f0f0; padding:1em; border:solid 1px #ccc;}
#createTeamTaskUserForm label { margin-bottom:10px; display:block; clear:left; font-size:0.9em;}
#createTeamTaskUserForm label input {float:left; border:1px solid #ddd; border-top:1px solid #999; padding:2px 4px; font-size:1em; width:30em;}


/*}}}*/
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div macro='view modified date'></div> 
<div class='title' macro='view title'></div>
<div class='subtitle'>Modified by<span macro='view modifier link'></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>
<!--}}}-->
/***
|Name|FullScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FullScreenPlugin|
|Version|1.1|
|Requires|~TW2.x|
!Description:
Toggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.

!Demo:
Click the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Edit the ViewTemplate to add the fullscreen command to the toolbar.

!History:
*25-07-06: ver 1.1
*20-07-06: ver 1.0

!Code
***/
//{{{
var lewcidFullScreen = false;

config.commands.fullscreen =
{
            text:" ↕ ",
            tooltip:"Fullscreen mode"
};

config.commands.fullscreen.handler = function (event,src,title)
{
            if (lewcidFullScreen == false)
               {
                lewcidFullScreen = true;
                setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");
               }
            else
               {
                lewcidFullScreen = false;
                setStylesheet(' ',"lewcidFullScreenStyle");
               }
}

config.macros.fullscreen={};
config.macros.fullscreen.handler =  function(place,macroName,params,wikifier,paramString,tiddler)
{
        var label = params[0]||" ↕ ";
        var tooltip = params[1]||"Fullscreen mode";
        createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);
}

var lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler =function(title,animate,slowly)
{
           lewcid_fullscreen_closeTiddler.apply(this,arguments);
           if (story.isEmpty() && lewcidFullScreen == true)
              config.commands.fullscreen.handler();
}


Slider.prototype.lewcidStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{
           this.lewcidStop();
           if (story.isEmpty() && lewcidFullScreen == true)
              config.commands.fullscreen.handler();
}
//}}}
/***
|''Name:''|NewUserWizardPlugin|
|''Description:''|Create a new user for the TeamTasks system |
|''Version:''|0.1|
|''Date:''|22 Oct, 2007|
|''Source:''|http://www.hawksworx.com/playground/TeamTasks/#NewUserWizardPlugin|
|''Author:''|PhilHawksworth (phawksworth (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.2|
***/

//{{{
// Ensure that this Plugin is only installed once.
if(!version.extensions.newUserWizard) 
{
	version.extensions.newUserWizard = {installed:true};
	config.macros.newUserWizard = {
	
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			createTiddlyButton(place, 'Create user', false, this.onClickNewUser);
		},
		
		onClickNewUser : function(e) {
			
			//get data from the form
			var form = document.getElementById('createTeamTaskUserForm');
			var inputs = form.getElementsByTagName('input');
			var userData = [];
			var mandatoryFields = [];
			var f;
			for (var i=0; i < inputs.length; i++) {
				f = inputs[i];
				if(f.getAttribute('mandatory') && f.getAttribute('mandatory') =='true') mandatoryFields.push(f);
				if(f.value.length > 0) userData[f.name] = f.value;
			};
			
			// stop if we are missing anything mandatory
			var missingValues = false;
 			missingValues = config.macros.newUserWizard.checkMandatory(mandatoryFields);
			if(missingValues) return false;
		
			//build a properly formatted username
			userData['fname'] = userData['fname'].toLowerCase().substring(0,1).toUpperCase() + userData['fname'].substring(1);
			userData['lname'] = userData['lname'].toLowerCase().substring(0,1).toUpperCase() + userData['lname'].substring(1);
			userData['username'] = userData['fname'] + userData['lname'];
			
			//Check for dupes
			var existingTiddler = store.getTiddler(userData['username']);
			if(existingTiddler != null) {
				displayMessage('A user called '+ userData['username'] +' already exists');
				return false;
			}
			
			//add user to UserDefinitions
			var body = store.getTiddlerText('UserDefinitions') + '\n' + userData['username'];
			store.saveTiddler('UserDefinitions','UserDefinitions',body,config.options.txtUserName);
			
			//TODO: Replace the vCard creation from HTML insertion to nice TW DOM methods.
			//create a tiddler for the user with an hCard for the contact details.
			var homeTiddlerBody = [];
			homeTiddlerBody.push('<html>');
			homeTiddlerBody.push('<div class="vcard">');
			homeTiddlerBody.push('<a class="url fn n" href="'+ userData['blog'] +'"><span class="given-name">'+ userData['fname'] +'</span><span class="family-name">'+ userData['lname'] +'</span></a>');
			if(userData['company'])homeTiddlerBody.push('<div class="org"><span class="organization-name">'+ userData['company']  +'</span></div>');
			if(userData['email'])homeTiddlerBody.push('<div class="email"><span><a href="mailto:'+ userData['email']  +'">'+ userData['email']  +'</a></span></div>');
			if(userData['blog'])homeTiddlerBody.push('<div class="blog"><span><a href="'+ userData['blog']  +'">'+ userData['blog']  +'</a></span></div>');
			if(userData['photos'])homeTiddlerBody.push('<div class="photos"><span><a href="'+ userData['photos']  +'">'+ userData['photos']  +'</a></span></div>');
			if(userData['twitter'])homeTiddlerBody.push('<div class="twitter"><span><a href="'+ userData['twitter']  +'">'+ userData['twitter']  +'</a></span></div>');
			homeTiddlerBody.push('</div></html>');
			
			//Create some simple TaskListViews.
			//Task list index template.
			var body;
			body = store.getTiddlerText('SampleTaskListTemplate');
			homeTiddlerBody.push(body.replace(/UserName/g,userData['username']));
			
			store.saveTiddler(userData['username'],userData['username'],homeTiddlerBody.join('\n'),config.options.txtUserName);
			
			//TODO: automate the generation of these views from some templates and the index
			//create the task views
			var body_array = [];
			body_array.push('<<TaskViewBuilder UserDefinitions='+ userData['username'] +' PriorityDefinitions='+ userData['username'] +' !StatusDefinitions=Complete>>');
			store.saveTiddler(userData['username'] +'OpenTasks', userData['username'] +'OpenTasks',body_array.join('\n'),config.options.txtUserName);
			body = '<<TaskViewBuilder UserDefinitions='+ userData['username'] +' StatusDefinitions=InProgress>>';
			store.saveTiddler(userData['username'] +'InProgressTasks', userData['username'] +'InProgressTasks',body,config.options.txtUserName);
			body = '<<TaskViewBuilder UserDefinitions='+ userData['username'] +' StatusDefinitions=Next>>';
			store.saveTiddler(userData['username'] +'NextTasks', userData['username'] +'NextTasks',body,config.options.txtUserName);
			body = '<<TaskViewBuilder UserDefinitions='+ userData['username'] +' StatusDefinitions=Complete>>';
			store.saveTiddler(userData['username'] +'CompletedTasks', userData['username'] +'CompletedTasks',body,config.options.txtUserName);
			
			//open the new user tiddler
			story.displayTiddlers(this,[userData['username']]);
		},
		
		checkMandatory : function(things) {
			var flag = false;
			var v = "";
			var ele;
			for (var i=0; i < things.length; i++) {
				if(typeof(things[i])=='string') {
					ele = document.getElementById(things[i]);
				}
				else if(typeof(things[i]) == 'object') {
					ele = things[i];
				}
				else return false;
				v = ele.value;
				removeClass(ele, 'flaggedMandatory');
				if(v.length == 0){
					addClass(ele, 'flaggedMandatory');
					flag = true;
				}	
			};
			if(flag == true) return true;
			else return false;
		}
	};
}
//}}}
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.chooseTemplateForTiddler()|
|Description|use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values|

The core function, "story.chooseTemplateForTiddler(title,template)" is essentially a "pass-thru" that returns the same template it was given, and is provided by the core so that plugins can customize the template selection logic to select alternative templates, based on whatever programmatic criteria is appropriate.  This tweak extends story.chooseTemplateForTiddler() so that ''whenever a tiddler is marked with a specific tag value, it can be viewed and/or edited using alternatives to the standard tiddler templates.'' 
!!!!!Usage
<<<
Each alternative template is associated with a specific tiddler tag value by using that tag value as a prefix added to the standard TiddlyWiki template titles, [[ViewTemplate]] and [[EditTemplate]].

For example, any tiddlers that are tagged with ''<<tag media>>'' will look for alternative templates named [[mediaViewTemplate]] and [[mediaEditTemplate]].  Additionally, in order to find templates that have proper WikiWord tiddler titles (e.g., [[MediaViewTemplate]] and [[MediaEditTemplate]]), the plugin will also attempt to use a capitalized form of the tag value (e.g., ''Media'') as a prefix.  //This capitalization is for comparison purposes only and will not alter the actual tag values that are stored in the tiddler.//

If no matching alternative template can be found by using //any// of the tiddler's tags (either "as-is" or capitalized), the tiddler defaults to using the appropriate standard [[ViewTemplate]] or [[EditTemplate]] definition.

''To add your own custom templates:''
>First, decide upon a suitable tag keyword to uniquely identify your custom templates and create custom view and/or edit templates using that keyword as a prefix (e.g., "KeywordViewTemplate" and "KeywordEditTemplate").  Then, simply create a tiddler and tag it with your chosen keyword... that's it!  As long as the tiddler is tagged with your keyword, it will be displayed using the corresponding alternative templates.  If you remove the tag or rename/delete the alternative templates, the tiddler will revert to using the standard viewing and editing templates.
<<<
!!!!!Examples
<<<
|Sample tiddler| tag | view template | edit template |
|[[MediaSample - QuickTime]]| <<tag media>> | [[MediaViewTemplate]] | [[MediaEditTemplate]] |
|[[MediaSample - Windows]]| <<tag media>> | [[MediaViewTemplate]] | [[MediaEditTemplate]] |
|[[CDSample]]| <<tag CD>> | [[CDViewTemplate]] | [[CDEditTemplate]] |
|<<newTiddler label:"create new task..." title:SampleTask tag:task text:"Type some text and then press DONE to view the task controls">> | <<tag task>> | [[TaskViewTemplate]] | [[EditTemplate]] |

//(note: if these samples are not present in your document, please visit// http://www.TiddlyTools.com/ //to view these sample tiddlers on-line)//
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
[[TaggedTemplateTweak]]
<<<
!!!!!Revision History
<<<
''2007.06.23 [1.1.0]'' re-written to use automatic 'tag prefix' search instead of hard coded check for each tag.  Allows new custom tags to be used without requiring code changes to this plugin.
''2007.06.11 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by Eric L Shulman / ELS Design Studios
<<<
!!!!!Code
***/
//{{{
version.extensions.taggedTemplate= {major: 1, minor: 1, revision: 0, date: new Date(2007,6,18)};
Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
	// get default template from core
	var template=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);

	// if the tiddler to be rendered doesn't exist yet, just return core result
	var tiddler=store.getTiddler(title); if (!tiddler) return template;

	// look for template whose prefix matches a tag on this tiddler
	for (t=0; t<tiddler.tags.length; t++) {
		var tag=tiddler.tags[t];
		if (store.tiddlerExists(tag+template)) { template=tag+template; break; }
		// try capitalized tag (to match WikiWord template titles)
		var cap=tag.substr(0,1).toUpperCase()+tag.substr(1);
		if (store.tiddlerExists(cap+template)) { template=cap+template; break; }
	}

	return template;
}
//}}}
/***
|''Name:''|TaskViewBuilderPlugin |
|''Description:''|Allow a user to generate a custom aggregate view of tasks based on extended fields |
|''Version:''|0.0.2 |
|''Date:''|Sep 25, 2007 |
|''Source:''|http://www.hawksworx.com/playground/TeamTasks/#ValueTogglerPlugin |
|''Author:''|PhilHawksworth (phawksworth (at) gmail (dot) com) |
|''License:''|[[BSD open source license]] |
|''CoreVersion:''|2.2|
***/

//{{{
// Ensure that this Plugin is only installed once.
if(!version.extensions.TaskViewBuilder) 
{
	version.extensions.TaskViewBuilder = {installed:true};
	config.macros.TaskViewBuilder = {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var tiddlers = store.getTaggedTiddlers('task');		
			var tasks = [];
			var excludedTasks = [];
			
			if(params.length == 0) {
				tasks = tiddlers;
			}
			else {
				var tag;
				for (var i=0; i < params.length; i++) {
					tag = params[i];
					if(tag[0] == '!') {
						tag = tag.substr(1);
						excludedTasks = this.findFlaggedTiddlers(tiddlers, tag);
						if(params.length == 1) {
							tasks = tiddlers;
						}
					}
					else {
						if(i==0) {
							tasks = this.findFlaggedTiddlers(tiddlers, tag);
						}
						else {
							tasks = this.findFlaggedTiddlers(tasks, tag);
						}
					}
				}
			}

			for (var i=0; i < tasks.length; i++) {
				if(excludedTasks.find(tasks[i]) === null) {			
					createTiddlyLink(place,tasks[i].title,true);
					createTiddlyElement(place,'br',null,null, null);	
				}		
			}
		},
		
		findFlaggedTiddlers : function(tiddlers, flag) {
			var flagElements = flag.split('=');
			var attr = flagElements[0];
			var val = flagElements[1];
			var flaggedTiddlers = [];
			for (var i=0; i < tiddlers.length; i++) {			
				if(store.getValue(tiddlers[i], attr) == val) {
					flaggedTiddlers.push(tiddlers[i]);
				}
			}
			return flaggedTiddlers;
		}
	};
}
//}}}
/***
|''Name:''|ValueSwitcherPlugin|
|''Description:''|Gather values from a definition tiddler, and present the user with a UI for setting a value from those available options as an extende field |
|''Version:''|0.1|
|''Date:''|25 Sept, 2007|
|''Source:''|http://www.hawksworx.com/playground/TeamTasks/#ValueTogglerPlugin|
|''Author:''|PhilHawksworth (phawksworth (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.2|
***/

//{{{
// Ensure that this Plugin is only installed once.
if(!version.extensions.ValueSwitcher) 
{
	version.extensions.ValueSwitcher = {installed:true};
	config.macros.ValueSwitcher = {
	
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		
			var taskTiddler = story.findContainingTiddler(place);
			if(!(taskTiddler && taskTiddler != 'undefined')) {
				return;
			}
			
			var ctrlType = params[0];
			var valueSrc = params[1];
			var id = taskTiddler.id;
			var title = id.substr(7);
			var tiddler = store.getTiddler(title);
			
			// build a drop down control
			if(ctrlType == 'dropdown') {
				var selected = valueSrc + '_' + store.getValue(tiddler,valueSrc);
				var values = this.getDefValues(valueSrc);
				var options = [];
				options.push({'caption': 'Please select', 'name': null});
				for (var i=0; i < values.length; i++) {
					options.push({'caption': values[i], 'name': valueSrc + '_' + values[i]});
				}
				createTiddlyDropDown(place,this.setDropDownMetaData,options,selected);	
			}
			//build a date control
			else if(ctrlType == 'date'){
				//TODO: Build in deadline support
			}
		},
		
		getDefValues: function(src) {
			var text = store.getTiddlerText(src);
			return (text.split('\n'));	
		},
		
		setDropDownMetaData: function(e) {
			var taskTiddler = story.findContainingTiddler(this);
			if(taskTiddler && taskTiddler != 'undefined') {
				var id = taskTiddler.id;
				var title = id.substr(7);
				var tiddler =  store.getTiddler(title);
				var option = this[this.selectedIndex].value.split('_');
				var extField = option[0];
				var extFieldVal = option[1];
				store.setValue(tiddler,extField,extFieldVal);
				story.saveTiddler(title);
			}
		}
	};
}
//}}}
A quick start guide is provided in the [[Getting Started with TeamTasks]] tiddler.

This application has been built using TiddlyWiki and requires several plugins to function.  For an up-to-date list of the plugins used, and other building blocks required to build TeamTasks, take a look at the [[Release Notes]].

TeamTasks also require some definitions, which you can modify and add to as required:
UserDefinitions
PriorityDefinitions
ScopeDefinitions
StatusDefinitions
<<TaskViewBuilder>>
This is a list of all of the incomplete tasks ordered alphanumerically
<<TaskViewBuilder !StatusDefinitions_Complete>> 
This is a list of all of the tasks ordered alphanumerically
<<TaskViewBuilder>> 
This is a list of all of the tasks ordered by priority
!!!High Priority
<<TaskViewBuilder PriorityDefinitions_High >>
!!!Medium Priority
<<TaskViewBuilder PriorityDefinitions_Medium>>
!!!Low Priority
<<TaskViewBuilder PriorityDefinitions_Low>>
<html>
<div class="vcard">
<a class="url fn n" href="undefined"><span class="given-name">Anne</span><span class="family-name">Other</span></a>
<div class="email"><span><a href="mailto:anneother@nowhere.com">anneother@nowhere.com</a></span></div>
</div></html>
| !In any project |
|[[Open tasks|AnneOtherOpenTasks]] |
|[[Current tasks|AnneOtherInProgressTasks]] |
|[[Next tasks|AnneOtherNextTasks]] |
|[[Completed tasks|AnneOtherCompletedTasks]] |
<<TaskViewBuilder UserDefinitions=AnneOther StatusDefinitions=Complete>>
<<TaskViewBuilder UserDefinitions=AnneOther StatusDefinitions=InProgress>>
<<TaskViewBuilder UserDefinitions=AnneOther StatusDefinitions=Next>>
<<TaskViewBuilder UserDefinitions=AnneOther PriorityDefinitions=AnneOther !StatusDefinitions=Complete>>
<<TaskViewBuilder StatusDefinitions=Complete>>
<<fullscreen>><<search>><<newTiddler label:"new task" title:NewTask tag:task text:"Type some text and then press DONE to view the task controls" >><<newTiddler>><<closeAll>><<permaview>><<slider chkSliderOptionsPanel Listings "Listings »" "View the full tiddler listings">>
You can create your own custom views of the tasks using the TaskViewBuilderPlugin.


The general form form for calling the plugin is like this:
{{{
<<TaskViewBuilder DefinitionTiddler=Value>>
}}}
For example:
{{{
<<TaskViewBuilder StatusDefinitions=Pending>>
}}}

The TaskViewBuilderPlugin also supports mulitple arguments, so you can be more specific. 
For example:
{{{
<<TaskViewBuilder StatusDefinitions=Pending UserDefinitions=PhilHawksworth>>
}}}
and can also exclude tasks with a given argument using this syntax:
{{{
<<TaskViewBuilder PriorityDefinitions=High !StatusDefinitions=Complete>>
}}}
You can create your own custom views of the tasks using the TaskViewBuilderPlugin.


The general form form for calling the plugin is like this:
{{{
<<TaskViewBuilder DefinitionTiddler=Value>>
}}}
For example:
{{{
<<TaskViewBuilder StatusDefinitions=Pending>>
}}}

The TaskViewBuilderPlugin also supports mulitple arguments, so you can be more specific. 
For example:
{{{
<<TaskViewBuilder StatusDefinitions=Pending UserDefinitions=PhilHawksworth>>
}}}
and can also exclude tasks with a given argument using this syntax:
{{{
<<TaskViewBuilder PriorityDefinitions=High !StatusDefinitions=Complete>>
}}}
Creating a task is easy. Any tiddler that you tag with the word 'task' will become a task tiddler. When you exit edit mode of a task tiddler, you will see that it is presented as a task and has controls on it to allow you to set some of your [[pre-defined|TaskDefinitions]] values on it.

Alternatively, you can create a new task by clicking the <<newTiddler label:"new task" title:NewTask tag:task text:"Type some text and then press DONE to view the task controls">> button in the control bar towards the top of the screen.  
To make it easy to organise tasks by the appropriate projects, products or whatever sensible unit best fits your needs, you can define a set of 'Scopes' in the ScopeDefinitions tiddler. This works in the same way as [[defining users|DefineUsers]].
In TeamTasks, you can assign tasks to users. If you are using TeamTasks individually and don't need to have different users set up, you can easily remove this functionality to make things appear even simpler in the user interface.

Defining a user is really simple. All you need to do is add user's names to the UserDefinitions tiddler.  Each name should occupy a single line in the tiddler.  All of the names in the UserDefinitions tiddler will be available for you to assign a task to.

There is also a [[wizard to help you create these users|UserSetupWizard]] to help you create users quickly should you need a slightly more complex setup. The wizard will help by creating a 'Home Tiddler' for each user which hold their contact details and quick access to a default set of [[TaskListViews|TaskListView]] which they can customise.
TeamTasks is intended to support you in managing your task lists.  It can be heavily customised to be used in many different ways, but I am presuming that most users will want to do the following to get up and running quickly:
*[[Define some users|DefineUsers]]
*[[Define some projects or tasks|DefineScopes]]
*[[Start creating Tasks|CreatingTasks]]
*[[Build some task views|CreatingTaskListViews]]
and then may wish to make further customisations by editing the [[TaskDefinition|TaskDefinitions]] tiddlers

[[More information|About TeamTasks]] about what components go into TeamTasks. 
<<gradient vert #f9f9f9 #ffffff #ffffff #f9f9f9  #eeeeee'>><<tabs txtMainTab "Timeline" "Timeline" TabTimeline "A - Z" "All tiddlers in alphabetical order" TabAll "Tags" "All tags" TabTags "Missing" "Missing tiddlers" TabMoreMissing "Shadowed" "Shadowed tiddlers" TabMoreShadowed>>
<<TaskViewBuilder !StatusDefinitions=Complete>>
!!!High Priority
<<TaskViewBuilder PriorityDefinitions=High !StatusDefinitions=Complete>>
!!!Medium Priority
<<TaskViewBuilder PriorityDefinitions=Medium !StatusDefinitions=Complete>>
!!!Low Priority
<<TaskViewBuilder PriorityDefinitions=Low !StatusDefinitions=Complete>>
<html>
<div class="vcard">
<a class="url fn n" href=""><span class="given-name">Phil</span><span class="family-name">Hawksworth</span></a>
<div class="org"><span class="organization-name">Osmosoft</span></div>
<div><span><a href="http://www.hawksworx.com">www.hawksworx.com</a></span></div>
<div class="email"><span><a href="mailto:ph@osmosoft.com">ph@osmosoft.com</a></span></div>
<div class="photos"><span><a href="http://flickr/photos/philhawksworth">flickr/photos/philhawksworth</a></span></div>
<div class="twitter"><span><a href="http://twitter.com/philhawksworx.com">twitter.com/philhawksworth</a></span></div>
</div></html>
| !In any project |
|[[Open tasks|PhilHawksworthOpenTasks]] |
|[[Current tasks|PhilHawksworthInProgressTasks]] |
|[[Next tasks|PhilHawksworthNextTasks]] |
|[[Completed tasks|PhilHawksworthCompletedTasks]] |
<<TaskViewBuilder UserDefinitions=PhilHawksworth StatusDefinitions=Complete>>
<<TaskViewBuilder UserDefinitions=PhilHawksworth StatusDefinitions=InProgress>>
<<TaskViewBuilder UserDefinitions=PhilHawksworth StatusDefinitions=Next>>
<<TaskViewBuilder UserDefinitions=PhilHawksworth PriorityDefinitions=PhilHawksworth !StatusDefinitions=Complete>>
High
Medium
Low
!Version 0.3
!!!Comments
*Lots more documentation and help is evolving
*Introduction of UserSetupWizard which speeds up the setting up of users and automates some associated tasks.
!!!Plugins
|FullScreenPlugin |by SaqImtiaz |http://tw.lewcid.org/#FullScreenPlugin |
|TaggedTemplateTweak |by EricShulman |http://www.TiddlyTools.com/#TaggedTemplateTweak |
|TaskViewBuilderPlugin |by PhilHawksworth |http://www.hawksworx.com/playground/TeamTasks/#TaskViewBuilderPlugin |
|ValueSwitcherPlugin |by PhilHawksworth |http://www.hawksworx.com/playground/TeamTasks/#ValueSwitcherPlugin |
|NewUserWizardPlugin|by PhilHawksworth |http://www.hawksworx.com/playground/TeamTasks/#NewUserWizardPlugin |
!!Tiddlers providing UI styling
PageTemplate
StyleSheet
ColorPalette
ViewTemplate
TaskViewTemplate
!!Tiddlers providing other functionality
ControlsContainer
[[Listings]]
TaskTiddlerControls
SampleTaskListTemplate
UserDetailsTemplate
UserSetupWizard
!!Tiddlers providing documentation
[[About TeamTasks]]
CreatingTaskListViews
CreatingTasks
DefineScopes
DefineUsers
[[Getting Started with TeamTasks]]
[[Release Notes]]
TaskListView
TeamTasks
!Version 0.2
!!!Comments
*Task visualisation improved
*TaskViewBuilderPlugin syntax employs {{{ = }}} rather than {{{ _ }}}
!!!Plugins
|FullScreenPlugin |by SaqImtiaz |http://tw.lewcid.org/#FullScreenPlugin |
|TaggedTemplateTweak |by EricShulman |http://www.TiddlyTools.com/#TaggedTemplateTweak |
|TaskViewBuilderPlugin |by PhilHawksworth |http://www.hawksworx.com/playground/TeamTasks/#TaskViewBuilderPlugin |
|ValueSwitcherPlugin |by PhilHawksworth |http://www.hawksworx.com/playground/TeamTasks/#ValueSwitcherPlugin |
!!Tiddlers providing UI styling
PageTemplate
StyleSheet
ColorPalette
ViewTemplate
TaskViewTemplate
!!Tiddlers providing other functionality
ControlsContainer
[[Listings]]
TaskTiddlerControls

!Version 0.1
!!!Comments
*Basic UI structure established
*Task generation using tagging mechanism
*Basic task list views.
!!!Plugins
|FullScreenPlugin |by SaqImtiaz |http://tw.lewcid.org/#FullScreenPlugin |
|TaskViewBuilderPlugin |by PhilHawksworth |http://www.hawksworx.com/playground/TeamTasks/#TaskViewBuilderPlugin |
|ValueSwitcherPlugin |by PhilHawksworth |http://www.hawksworx.com/playground/TeamTasks/#ValueSwitcherPlugin |
!!Tiddlers providing UI styling
PageTemplate
StyleSheet
ColorPalette
ViewTemplate
!!Tiddlers providing other functionality
ControlsContainer
[[Listings]]
| !In any project |
|[[Open tasks|UserNameOpenTasks]] |
|[[Current tasks|UserNameInProgressTasks]] |
|[[Next tasks|UserNameNextTasks]] |
|[[Completed tasks|UserNameCompletedTasks]] |
Work
Play
Pending
InProgress
OnHold
Complete
ScopeDefinitions
UserDefinitions
PriorityDefinitions
StatusDefinitions
Tagging any tiddler that contain a task list view created with the TaskViewBuilderPlugin will make it easier to keep track of the views.
|scope |<<ValueSwitcher dropdown ScopeDefinitions>> |
|priority |<<ValueSwitcher dropdown PriorityDefinitions>> |
|assigned to |<<ValueSwitcher dropdown UserDefinitions>> |
|status |<<ValueSwitcher dropdown StatusDefinitions>> |
<!--{{{-->
<div class='task'>
	<div class='taskBody'>
		<div class='title' macro='view title'></div>
		<div class='viewer' macro='view text wikified'></div>
	</div>
	<div class='taskControls'>
		<div class='toolbar' macro='toolbar +editTiddler closeTiddler closeOthers'></div>
		<div class='metacontrols' macro='tiddler TaskTiddlerControls'></div>
	</div>
</div>
<!--}}}-->
[[All tasks]]
[[Closed tasks]]
[[Open tasks]]
[[Open tasks by priority]]
[[(create your own task view)|CreatingTaskListViews]]
The TeamTasks TiddlyWiki is an edition of TiddlyWiki which has been modified by including various plugins to provide a simple task management system.

It is flexible and extensible and can be heavily customised for your needs. For more information about how TeamTasks has been constructed take a look at the [[about|About TeamTasks]] section.

Comments and suggestions are very welcome and should be directed to phawksworth [at] gmail.com
TiddlyWiki is a website on a stick! In one single HTML file, TiddlyWiki gives you the ability to publish and organize information in a whole manner of different ways. If you can't do what you want to, you can write plugins to change the way TiddlyWiki works. A thriving community of developers have generated huge number of plugins that turn TiddlyWiki into a number of different things, from a CD organizer to an online collaboration tool.

TiddlyWiki is a piece of open source software created by Jeremy Ruston. The copyright is now owned by the not-for-profit organisation [[UnaMesa|http://www.unamesa.com]]. TiddlyWiki has always been free and open source and will remain free and open source. Edit mode.
PhilHawksworth
AnneOther
<html>
<form id="createTeamTaskUserForm" action='return false;'>
	<h3>Create a new user</h2>
	<label>First name * <input type='text' name='fname' mandatory='true'  /></label><br />
	<label>Last name * <input type='text' name='lname' mandatory='true'  /></label><br />
	<label>Company <input type='text' name='company' /></label><br />
	<label>Email * <input type='text' name='email' mandatory='true' /></label><br />
	<label>Mobile <input type='text' name='mobile'  /></label><br />
	<label>URL <input type='text' name='url' /></label><br />
	<label>Photos <input type='text' name='photos' /></label><br />
	<label>Twitter <input type='text' name='twitter' /></label><br />
<label>( * required )</label>
</form>
</html>
This wizard will help you to quickly create a user in TeamTasks.  This is what it will do for you:
#Add your new user to the UserDefinitions tiddler so that you will be able to assign them tasks
#Create a 'home tiddler' for the user that contains 
**their contact details in hCard format. (you can change what contact details are required by editting UserDetailsTemplate)
**a sample list of 'task list views' to help get them started. (you can change the sample list by editting SampleTaskListTemplate)
Please complete the form below to create a new user.

<<tiddler UserDetailsTemplate>>
<<newUserWizard>>
A sample high priority task
LowPriorityTasks
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
[[Getting Started with TeamTasks]]
[[Getting Started with TeamTasks]]
[[Release Notes]]
[[Roadmap and known bugs|http://www.hawksworx.com/playground/TeamTasks/roadmap.html]]

<<slider chkSliderOptionsPanel UserDefinitions 'Users »' 'A list of users'>>
<<slider chkSliderOptionsPanel TaskViews 'Task views »' 'A selection of task views'>>
<<slider chkSliderOptionsPanel TaskDefinitions 'Task definitions »' 'The definitions that drive the task management'>>

----
[[modify this menu|MainMenu]]|[[options|OptionsPanel]]|[[about|About TeamTasks]]
----
[[download|index.html]]
/*{{{*/

/* flag dev version */
body {border-top:solid 3px #c44; }

#sidebar {display:none;}

.flaggedMandatory { background-color:#c99;}
.txtOptionInput { border:1px solid #ddd; border-top:1px solid #999; margin:4px;}
a.tiddlyLink { padding:0.1em 0.2em; }
a.tiddlyLink:hover { background-color:#ccd; color:#000; }

#mainMenu { width:15em; }
#displayArea { margin:1em 1em 1em 15em; }
#tiddlerDisplay { margin:0 5em 2em 5em; }
	
#controlsContainer { background-color:#ddd; border-top:solid 1px #fff;  border-bottom:solid 1px #aaa; }
#controlsContainer a.button { padding:0.4em 1em; border:solid 0 #000; color:#333; font-size:1em; line-height:2em; border-right:solid 1px #ccc;}
#controlsContainer a.button:hover { background-color:#ccc; color:#000; }
#controlsContainer div.sliderPanel { background-color:#333; border-top:solid 1px #aaa;}
#controlsContainer  .txtOptionInput { margin: 0; font-size:0.9em; padding:2px; border-right:solid 1px #ccc;}

#controlsContainer div.txtMainTab {  }
#controlsContainer div.txtMainTab div.tabset { background-color:#ccd; color:#ccc; float:left; padding:0; height:200px; width:150px; border-right:solid 1px #aaa; }
#controlsContainer div.txtMainTab div.tabset a.tab { display:block; padding:0.5em 1em; text-align:right; background-color:#ccd; border-bottom:solid 1px #aaa; margin:0;}
#controlsContainer div.txtMainTab div.tabset a.tabSelected {background-color:#bbc; border-top:solid 0px #aaa; color:#fff; }
#controlsContainer div.txtMainTab div.tabset a.tab:hover {background-color:#bbc; }
 
#controlsContainer div.tabContents {float:left; height:200px; width:350px; background-color: transparent; overflow:auto; border:solid 0px #aaa; border-right:solid 1px #aaa; padding:0;}

#controlsContainer div.sliderPanel div.txtMainTab ul { list-style:none; margin:0; padding:0.5em 0; }
#controlsContainer div.sliderPanel div.txtMainTab ul li { padding:0 20px;}
#controlsContainer div.sliderPanel div.txtMainTab ul li a { font-weight:normal; line-height:1.3em; margin:0.2em 0; }
#controlsContainer div.sliderPanel div.txtMainTab ul li.listTitle { border-top:solid 1px #bbc; padding:0.5em 0 0.2em 20px; font-size:1.5em; color:#bbc; }
#controlsContainer div.sliderPanel div.txtMainTab ul li.listLink { margin:0; }
#controlsContainer div.sliderPanel div.txtMainTab ul:first-child li.listTitle { border: solid 0 #ccc;  }

#popup { border:solid 1px [[ColorPalette::Subtle]]; border-bottom:solid 1px [[ColorPalette::LessSubtle]]; border-right:solid 1px [[ColorPalette::LessSubtle]]; background-color:[[ColorPalette::Background]]; padding:1px 0 0 0;}
#popup li a { background-color:[[ColorPalette::SubtleSuperLight]]; color:[[ColorPalette::MuchLessSubtle]]; text-align:left;}
#popup li a:hover { background-color:[[ColorPalette::SubtleLight]]; color:[[ColorPalette::MuchLessSubtle]];}
#popup li.listBreak div {border-bottom:solid 1px [[ColorPalette::Background]]; border-top:solid 1px [[ColorPalette::SubtleLight]]; margin:0;}

#controlsContainer div.topOptions {float:left; background-color:#bbc; width:400px; }

div.tiddler div.viewer { padding:1em 0 3em 0; border-bottom:solid 1px #ccc;}
h1,h2,h3,h4 { border-style:none; }
div.tiddler div.viewer > img {width:100%;}


div.tiddler div.task { border:solid 1px #aaa; background-color:#f2f2f2; position:relative; overflow:auto; clear:both; zoom:1;}
div.tiddler div.task div.taskBody { float:left; display:block; padding:1em 1em 1em 1em;}
div.tiddler div.task div.viewer { border-style:none; }
div.tiddler div.task div.taskControls {float:right; border-left:solid 1px #aaa; width:21em;  background-color:#ccd; padding:0; white-space:nowrap; }
div.tiddler div.task div.taskControls div.toolbar a { display:block; padding:0.5em 1em; text-align:right; background-color:#ccd; border-style:none; font-size:1.2em; color:#fff; text-align:left; border-bottom:solid 1px #aaa; margin:0;}
div.tiddler div.task div.taskControls div.toolbar a:hover {background-color:#bbc; }
div.tiddler div.task div.taskControls div.metacontrols { padding:1em; }
div.tiddler div.task div.taskControls div.metacontrols select {width: 150px; border:solid 1px #aaa; font-size:0.9em; padding:0.2em;}
div.tiddler div.task div.taskControls div.metacontrols table {border-style:none; margin:0;}
div.tiddler div.task div.taskControls div.metacontrols table tr {border-style:none;}
div.tiddler div.task div.taskControls div.metacontrols table td {border-style:none;}

#createTeamTaskUserForm { background-color:#f0f0f0; padding:1em; border:solid 1px #ccc;}
#createTeamTaskUserForm label { margin-bottom:10px; display:block; clear:left; font-size:0.9em;}
#createTeamTaskUserForm label input {float:left; border:1px solid #ddd; border-top:1px solid #999; padding:2px 4px; font-size:1em; width:30em;}


/*}}}*/
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto 'namespace'
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be=Array();
	var len=Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i]=((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str='';
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex='0123456789ABCDEF';
	var str='';
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	function add32(a,b)
	{
		var lsw=(a&0xFFFF)+(b&0xFFFF);
		var msw=(a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	}
	function AA(a,b,c,d,e)
	{
		b=(b>>>27)|(b<<5);
		var lsw=(a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw=(a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	}
	function RR(w,j)
	{
		var n=w[j-3]^w[j-8]^w[j-14]^w[j-16];
		return (n>>>31)|(n<<1);
	}
	
	var len=blen*8;
	x[len>>5] |= 0x80 << (24-len%32);
	x[((len+64>>9)<<4)+15]=len;
	var w=Array(80);

	var k1=0x5A827999;
	var k2=0x6ED9EBA1;
	var k3=0x8F1BBCDC;
	var k4=0xCA62C1D6;

	var h0=0x67452301;
	var h1=0xEFCDAB89;
	var h2=0x98BADCFE;
	var h3=0x10325476;
	var h4=0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j=0;
		var t;
		var a=h0;
		var b=h1;
		var c=h2;
		var d=h3;
		var e=h4;
		while(j<16) {
			w[j]=x[i+j];
			t=AA(e,a,d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a=t; j++;
		}
		while(j<20) {
			w[j]=RR(w,j);
			t=AA(e,a,d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a=t; j++;
		}
		while(j<40) {
			w[j]=RR(w,j);
			t=AA(e,a,b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a=t; j++;
		}
		while(j<60) {
			w[j]=RR(w,j);
			t=AA(e,a,(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a=t; j++;
		}
		while(j<80) {
			w[j]=RR(w,j);
			t=AA(e,a,b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a=t; j++;
		}
		h0=add32(h0,a);
		h1=add32(h1,b);
		h2=add32(h2,c);
		h3=add32(h3,d);
		h4=add32(h4,e);
	}
	return [h0,h1,h2,h3,h4];
};


}
//}}}
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}