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
<!--{{{--> <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>>
<<importTiddlers>>
<!--{{{--> <link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' /> <!--}}}-->
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]]
<!--{{{--> <div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'> <div class='headerShadow'> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> </div> <div class='headerForeground'> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> </div> </div> <div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div> <div id='sidebar'> <div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div> <div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div> </div> <div id='displayArea' role='main'> <div id='messageArea'></div> <div id='tiddlerDisplay'></div> </div> <!--}}}-->
/*{{{*/ 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]];} .error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];} .warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];} .lowlight {background:[[ColorPalette::TertiaryLight]];} .zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];} .imageLink, #displayArea .imageLink {background:transparent;} .annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];} .viewer .listTitle {list-style-type:none; margin-left:-2em;} .viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];} .viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];} .viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];} .viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];} .viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];} .viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];} .viewer code {color:[[ColorPalette::SecondaryDark]];} .viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];} .highlight, .marked {background:[[ColorPalette::SecondaryLight]];} .editor input {border:1px solid [[ColorPalette::PrimaryMid]];} .editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;} .editorFooter {color:[[ColorPalette::TertiaryMid]];} .readOnly {background:[[ColorPalette::TertiaryPale]];} #backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];} #backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} #backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; } #backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} #backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;} #backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} #backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];} .backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];} .backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];} #backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);} /*}}}*/
/*{{{*/ * html .tiddler {height:1%;} body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;} h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;} h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;} h4,h5,h6 {margin-top:1em;} h1 {font-size:1.35em;} h2 {font-size:1.25em;} h3 {font-size:1.1em;} h4 {font-size:1em;} h5 {font-size:.9em;} hr {height:1px;} a {text-decoration:none;} dt {font-weight:bold;} ol {list-style-type:decimal;} ol ol {list-style-type:lower-alpha;} ol ol ol {list-style-type:lower-roman;} ol ol ol ol {list-style-type:decimal;} ol ol ol ol ol {list-style-type:lower-alpha;} ol ol ol ol ol ol {list-style-type:lower-roman;} ol ol ol ol ol ol ol {list-style-type:decimal;} .txtOptionInput {width:11em;} #contentWrapper .chkOptionInput {border:0;} .externalLink {text-decoration:underline;} .indent {margin-left:3em;} .outdent {margin-left:3em; text-indent:-3em;} code.escaped {white-space:nowrap;} .tiddlyLinkExisting {font-weight:bold;} .tiddlyLinkNonExisting {font-style:italic;} /* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */ a.tiddlyLinkNonExisting.shadow {font-weight:bold;} #mainMenu .tiddlyLinkExisting, #mainMenu .tiddlyLinkNonExisting, #sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;} #sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;} .header {position:relative;} .header a:hover {background:transparent;} .headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;} .headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;} .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:0 3px 0 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:0; padding-bottom:0;} .fieldsetFix {border:0; padding:0; margin:1px 0px;} .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='toolbar' role='navigation' 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> <!--}}}-->
!Tiddler von ExtendedBrain <<forEachTiddler where 'tiddler.tags.contains("ExtendedBrain")' sortBy 'tiddler.title' ascending script ' function writeLine(tiddler) { var line = ""; line = line + "|" + "[[" + tiddler.title + "]]"; line = line + "|" + "[["+ tiddler.fields.version; line = line + "|\n"; return line; } ' write 'writeLine(tiddler)' begin '"|!Name|!Version|\n"' >> <<autoRefresh>>
/*** |!Filename |ExtendedBrainConfiguration.js| |!Usage |The following code is used as configuration of ExtendedBrainPlugin, a plugin for TiddlyWikiClassic. It has to be added as tiddler named ExtendedBrainConfiguration and tagged as systemConfig. | |!Version |0.2 | !History !!0.2 / 2014-04-07 / Reto Stauss Values of extendedBrainDisplayDateWeekFormat and extendedBrainDisplayDateMonthFormat changed !!0.1 / 2014-03-14 / Reto Stauss Long time ago developped but now under version control !Configuration Values ***/ // // Zeitstempel im Titel von historischen Tiddlern //{{{ config.options.extendedBrainTitleTimestamp = "YYYY-0MM-0DD 0hh:0mm /"; //}}} // // Format des Zeitstempels zur Erzeugung einer eindeutigen Identifkation //{{{ config.options.extendedBrainFormatUniqueId = "YYYY0MM0DD0hh0mm0ss"; //}}} // // First day of a week is Sunday? //{{{ config.options.extendedBrainFirstDayOfWeekSunday = false; //}}} // // Format of internal dates //{{{ config.options.extendedBrainDateFormat = "YYYY-0MM-0DD"; config.options.extendedBrainDateWeekFormat = "YYYY-KW0WW"; config.options.extendedBrainDateMonthFormat = "YYYY-0MM"; //}}} // // Format of displayed dates //{{{ config.options.extendedBrainDisplayDateFormat = "DDD, DD. MMM YYYY"; config.options.extendedBrainDisplayDateWeekFormat = "KW0WW YYYY"; config.options.extendedBrainDisplayDateMonthFormat = "MMM YYYY"; //}}} // // Verschiedene Texte //{{{ config.options.extendedBrainDateField = "Feld"; config.options.extendedBrainDateIsUndefined = "ist undefiniert"; config.options.extendedBrainDateNoTiddlerFoundUniqueId = "Kein Tiddler gefunden mit der Unique ID ="; config.options.extendedBrainDateNoTiddlerFoundTitle = "Kein Tiddler gefunden mit dem Titel ="; config.options.extendedBrainDateEmpty = ""; //}}} // // Status //{{{ config.options.extendedBrainStatusOpenString = "Offen"; config.options.extendedBrainStatusOpenValue = 1; config.options.extendedBrainStatusPausedString = "Wartend"; config.options.extendedBrainStatusPausedValue = 2; config.options.extendedBrainStatusDoneString = "Erledigt"; config.options.extendedBrainStatusDoneValue = 3; //}}}
/*** |''Name''|ExtendedBrainPlugin| |''Description''|<...>| |''Icon''|<...>| |''Author''|Reto Stauss| |''Contributors''|<...>| |''Version''|0.3| |''Date''|<...>| |''Status''|@@experimental@@| |''Source''|<...>| |''CodeRepository''|<...>| |''Copyright''|<...>| |''License''|<...>| |''CoreVersion''|<...>| |''Requires''|<...>| |''Overrides''|<...>| |''Feedback''|<...>| |''Documentation''|<...>| |''Keywords''|<...>| !Description <...> !Notes <...> !History !!V0.3 / 03-07-2013 * addOffsetToDateOfPeriodToShow was replaced by addOffsetToDate, which allows to pass the field as argument that holds the date * New macro showDateField !Usage of calculateTimeEffort {{{ <<calculateTimeEffort tiddler:[TIDDLER_TITLE]>> }}} !!Parameters [TIDDLER_TITLE]: title of the work tiddler !!Example <<showTemplate tiddler:"ExtendedBrainPlugin">> !Usage of showTemplate {{{ <<showTemplate template:[TEMPLATE] tiddler:[TIDDLER_TITLE]>> }}} !!Parameters [TEMPLATE]: template to show, to be found in a tiddler with this name [TIDDLER_TITLE]: title of the work tiddler !!Example <<showTemplate template:"WorkHeader" tiddler:"ExtendedBrainPlugin">> !Usage of showWorkHeader {{{ <<showWorkHeader tiddler:[TIDDLER_TITLE]>> }}} !!Parameters [TIDDLER_TITLE]: title of the work tiddler !!Example <<showWorkHeader tiddler:"ExtendedBrainPlugin">> !Usage of showTitleOfField {{{ <<showTitleOfField tiddler:[TIDDLER_TITLE] fieldname:[NAME_OF_FIELD]>> }}} !!Parameters [NAME_OF_FIELD]: name of the field which contains a unique id of another tiddler [TIDDLER_TITLE]: title of the tiddler which contains the field !!Examples <<showTitleOfField title:"ExtendedBrainPlugin" fieldname:"ref_to_origin_of_work">> !Usage of showDateField {{{ <<showDateField tiddler:[TIDDLER] fieldname:[NAME_OF_FIELD] format:[DATE_FORMAT]>> }}} !!Parameters [TIDDLER]: title of the tiddler which contains the field [NAME_OF_FIELD]: name of the field which contains a unique id of another tiddler [DATE_FORMAT]: a TiddlyWiki date format, e.g. "YYYY-0MM-0DD" !!Examples <<showDateField title:"ExtendedBrainPlugin" fieldname:"date">> !Configuration Options See [[ExtendedBrainConfiguration]]. !Unit tests * [[Test checkUniqueId]] * [[Test generateUniqueId]] * [[Test addOffsetToDate]] * [[Test getDaysOfWeek]] * [[Test getRefToOriginOfWork]] * [[Test getTitleOfUniqueId]] !Revision History !!v0.1 (2010-10-09) * Initial Version !To Do * !Code ***/ //{{{ if(!version.extensions.ExtendedBrainPlugin) { //# ensure that the plugin is only installed once version.extensions.ExtendedBrainPlugin = { installed: true }; if(!config.extensions) { config.extensions = {}; } //# obsolete from v2.4.2 } //# end of "install only once" function calculateTimeEffort(uniqueId) { var sum = new Number(0); /* Calculates the hours worked for a work tiddler */ /* Lookup: */ /* 1. Get all tiddlers with the field 'ref_to_work' equal to the unique id of the passed tiddler */ /* 2. Sum the field 'time_effort' of the tiddlers tagged with 'Report' */ var tids=store.reverseLookup("ref_to_work", uniqueId, true); /* Loop through the tiddlers */ for (var t=0; t<tids.length; t++) { if(tids[t].tags.contains("Report") && tids[t].fields.ref_to_work) { sum += Number(store.getValue(tids[t].title, "time_effort")); } } return(sum.toFixed(1)); }; config.macros.calculateRestEffort= {}; config.macros.calculateRestEffort.handler = function(place, macroName, params, wikifier, paramString, tiddler) { var parameters = paramString.parseParams(null, null, true); var title= getParam(parameters, "tiddler"); var estimated_effort = new Number(0); var rest = new Number(0); var sum = new Number(0); /* Calculates the estimated effort minus the hours worked for a work tiddler*/ /* Lookup: */ /* 1. Get all tiddlers with the field 'ref_to_work' equal to the unique id of the passed tiddler */ /* 2. Sum the field 'time_effort' of the tiddlers tagged with 'Report' */ var tids=store.reverseLookup("ref_to_work", store.getValue(title, "unique_id"),true); /* Loop through the tiddlers */ for (var t=0; t<tids.length; t++) { if(tids[t].tags.contains("Report")) { sum += Number(store.getValue(tids[t].title, "time_effort")); } } estimated_effort = Number(store.getValue(title, "estimated_time_effort")); rest = estimated_effort - sum; wikify(rest.toFixed(1), place, null, tiddler); }; config.macros.calculateTimeEffort= {}; config.macros.calculateTimeEffort.handler = function(place, macroName, params, wikifier, paramString, tiddler) { var parameters = paramString.parseParams(null, null, true); var title= getParam(parameters, "tiddler"); var sum = new Number(0); /* Calculates the hours worked for a work tiddler */ /* Lookup: */ /* 1. Get all tiddlers with the field 'ref_to_work' equal to the unique id of the passed tiddler */ /* 2. Sum the field 'time_effort' of the tiddlers tagged with 'Report' */ var tids=store.reverseLookup("ref_to_work", store.getValue(title, "unique_id"),true); /* Loop through the tiddlers */ for (var t=0; t<tids.length; t++) { if(tids[t].tags.contains("Report")) { sum += Number(store.getValue(tids[t].title, "time_effort")); } } wikify(sum.toFixed(1), place, null, tiddler); }; config.macros.showTemplate= {}; config.macros.showTemplate.handler = function(place, macroName, params, wikifier, paramString, tiddler) { var parameters = paramString.parseParams(null, null, true); var title = getParam(parameters, "tiddler"); var template = getParam(parameters, "template"); var returnValue = ""; if(!store.tiddlerExists(title)) { wikify(config.options.extendedBrainDateNoTiddlerFoundTitle + " " + title, place, null, tiddler); } else { returnValue = store.getTiddlerText(template); wikify(returnValue, place, null, tiddler); } }; config.macros.showWorkHeader= {}; config.macros.showWorkHeader.handler = function(place, macroName, params, wikifier, paramString, tiddler) { var parameters = paramString.parseParams(null, null, true); var title = getParam(parameters, "tiddler"); var returnValue = ""; if(!store.tiddlerExists(title)) { wikify(config.options.extendedBrainDateNoTiddlerFoundTitle + " " + title, place, null, tiddler); } else { returnValue = store.getTiddlerText("WorkHeader"); //alert(returnValue); wikify(returnValue, place, null, tiddler); //return returnValue; } }; config.macros.showTitleOfField= {}; config.macros.showTitleOfField.handler = function showTitleOfField(place, macroName, params, wikifier, paramString, tiddler) { var parameters = paramString.parseParams(null, null, true); var title = getParam(parameters, "tiddler"); var fieldname = getParam(parameters, "fieldname"); var returnValue = ""; if(!store.tiddlerExists(title)) { wikify(config.options.extendedBrainDateNoTiddlerFoundTitle + " " + title, place); } else { if(store.getValue(title, fieldname) == undefined) { // Check if field is defined wikify(config.options.extendedBrainDateField + " {{{" + fieldname + "}}} " + config.options.extendedBrainDateIsUndefined, place, null, tiddler); } else { // Field is defined, find tiddler var tids=store.reverseLookup("unique_id", store.getValue(title, fieldname),true); for (var t=0; t<tids.length; t++) { returnValue = returnValue + "[[" + tids[t].title + "]]"; } if(returnValue != "") { // Tiddler found wikify(returnValue, place); } else { // No tiddler with the unique id in the passed field found wikify(config.options.extendedBrainDateNoTiddlerFoundUniqueId + " " + store.getValue(title, fieldname), place, null, tiddler); } } } }; config.macros.showDateField= {}; config.macros.showDateField.handler = function showDateField(place, macroName, params, wikifier, paramString, tiddler) { var parameters = paramString.parseParams(null, null, true); var title = getParam(parameters, "tiddler"); var fieldname = getParam(parameters, "fieldname"); var format = getParam(parameters, "format"); var returnValue = ""; if(!store.tiddlerExists(title)) { wikify(config.options.extendedBrainDateNoTiddlerFoundTitle + " " + title, place); } else { // Check if field is defined if(store.getValue(title, fieldname) == undefined) { wikify(config.options.extendedBrainDateField + " {{{" + fieldname + "}}} " + config.options.extendedBrainDateIsUndefined, place, null, tiddler); } else { // Field is defined returnValue = store.getValue(title, fieldname); if(returnValue != "") { // Tiddler found returnValue = new Date(returnValue).formatString(format); wikify(returnValue, place); } else { // Field is empty wikify(config.options.extendedBrainDateEmpty); } } } }; function generateUniqueId(uniqueId) { /* Returns a unique number based on date and time */ /* If the passed value is 0 then the function generates a new unique id */ /* If the passed value is not 0 then the function checks if the value ist unique */ // var uniqueId = 0; var notUnique= 0; /* Generate the unique number */ if(uniqueId == 0) { uniqueId = new Date().formatString(config.options.extendedBrainFormatUniqueId); } /* check if not already in use */ do { if(checkUniqueId(uniqueId)) { //alert(uniqueId + " is not unique"); uniqueId = parseInt(uniqueId) + 1; notUnique = 1; } else { //alert(uniqueId + " is unique"); notUnique = 0; } } while(notUnique); return uniqueId; }; function checkUniqueId(candidate) { /* Checks whether the passed number is unique */ var isInUse = 0; var tids=store.getTiddlers("title"); /* Loop through all tiddlers */ for (var t=0; t<tids.length; t++) { /* Check whether the candidate is in use */ if (store.getValue(tids[t].title,"unique_id") == candidate.toString()) { /* Uhoh, is in use */ t = tids.length; // Leave the for loop and check again isInUse = 1; } } return isInUse; }; function getTitleOfUniqueId(uniqueId) { /* Get the title of the tiddler having the passed unique id */ var title = new String(); var tids=store.getTiddlers("title"); /* Loop through all tiddlers */ for (var t=0; t<tids.length; t++) { /* Check whether the candidate has the passed unique id */ if (store.getValue(tids[t].title,"unique_id") == uniqueId.toString()) { /* Gotcha */ title = tids[t].title; t = tids.length; // Leave the for loop } } return title; }; function addOffsetToDate(tiddler, field, offset) { /* Adds the offset to the date in the passed field of the passed tiddler */ var valid = new Boolean(false); date = new Date(store.getValue(tiddler.title, field)); if(isNaN(offset)) { /* Offset is not numeric */ if(offset == "+1w") { /* Offset is +1 week */ valid = true; date.setDate(date.getDate() + 7); } else if(offset == "-1w") { /* Offset is -1 week */ valid = true; date.setDate(date.getDate() - 7); } else if(offset == "+1m") { /* Offset is +1 month */ valid = true; date.setMonth(date.getMonth() + 1); } else if(offset == "-1m") { /* Offset is -1 month */ valid = true; date.setMonth(date.getMonth() - 1); } else if(offset == "+1d") { /* Offset is +1 day */ valid = true; date.setDate(date.getDate() + 1); } else if(offset == "-1d") { /* Offset is -1 day */ valid = true; date.setDate(date.getDate() - 1); } else { /* Unknown offset */ valid = false; } } else { /* Offset is numeric */ valid = true; date.setDate(date.getDate() + offset); } if(valid) { /* If the offset was valid set the field to the new date */ store.setValue(tiddler.title, field, new Date(date).formatString("YYYY-0MM-0DD")); } }; function getDaysOfWeek(date) { /* Returns a list of the days of the week the passed date is part of */ if(date == 0) { // use current date date = new Date(); } else { // use passed date } var days = "("; var day = 1; // Day of month var dayOfWeek = 0; // Offset for first day of the week if(config.options.extendedBrainFirstDayOfWeekSunday) { // First day of week set to Sunday offset = 0; dayOfWeek = date.getDay(); } else { // First day of week set to Monday offset = 1; dayOfWeek = date.getDay() - 1; if(dayOfWeek == -1) { dayOfWeek = 6; } } // First day of week of passed date //day = date.getDate() - date.getDay() + offset; // getDate => returns day of month, getDay => returns day of week, + 1 because first day of getDay is sunday day = date.getDate() - dayOfWeek; // getDate => returns day of month, getDay => returns day of week, + 1 because first day of getDay is sunday date.setDate(day); days = days + date.formatString(config.options.extendedBrainDateFormat); //Following days for(i=1;i<7;i++) { date.setDate(day+i); days = days + "|" + date.formatString(config.options.extendedBrainDateFormat); } days = days + ")"; return(days); }; function getRefToOriginOfWork(tiddler2) { /* Returns the unique id of the origin of work */ /* Lookup: */ /* 1. If the passed tiddler has a field 'ref_to_origin_of_work' and it is set => the value of the field is taken */ /* 2. If it has no field 'ref_to_origin_of_work' that it is itself an origin of work => the value of the field 'unique_id' is taken */ var returnValue = ""; var refToOriginOfWork = store.getValue(tiddler2.title, "ref_to_origin_of_work"); if( refToOriginOfWork == undefined || refToOriginOfWork == "") { /* The passed tiddler is the origin of work */ returnValue = store.getValue(tiddler2.title, "unique_id"); } else { /* The passed tiddler is not itself the origin of work */ returnValue = store.getValue(tiddler2.title, "ref_to_origin_of_work"); } return returnValue; }; //}}}