My TiddlyWiki - a reusable non-linear personal web notebook
Welcome to TiddlyWiki created by Jeremy Ruston; Copyright =C2=A9 2004-2007 = Jeremy Ruston, Copyright =C2=A9 2007-2011 UnaMesa Association
savetest
backstage = =E2=86=A9=E2=86=AA close
My TiddlyWiki  a= reusable non-linear personal web notebook
My TiddlyWiki  a= reusable non-linear personal web notebook
<= /div>
=
<= /div>
=
New Tiddler
Type tags separated = with spaces, [[use double square brackets]] if necessary, or add existingtags
GettingStarted
DitNavn, 22 December= 2012 (created 22 December 2012)
  • not tagging
  • no tags
To get started with this blank TiddlyWi= ki, you'll need to modify the following tiddlers:
  • SiteTitle & SiteSubtitle: The title and subtitle of the si= te, as shown above (after saving, they will also appear in the browser titl= e 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 a= lso need to enter your username for signing your edits:

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=3D'toolbar' macro=3D'toolbar [[ToolbarCommands::EditToolbar]]=
'></div>
<div class=3D'title' macro=3D'view title'></div>
<div class=3D'editor' macro=3D'edit title'></div>
<div macro=3D'annotations'></div>
<div class=3D'editor' macro=3D'edit text'></div>
<div class=3D'editor' macro=3D'edit tags'></div><div class=
=3D'editorFooter'><span macro=3D'message views.editor.tagPrompt'>&=
lt;/span><span macro=3D'tagChooser excludeLists'></span><=
/div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify t=
he following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site,=
 as shown above (after saving, they will also appear in the browser title b=
ar)
* [[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: <<opt=
ion txtUserName>>
<<importTiddlers>>
<!--{{{-->
<link rel=3D'alternate' type=3D'application/rss+xml' title=3D'RSS' href=
=3D'index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in=
 your browser

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

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

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class=3D'header' role=3D'banner' macro=3D'gradient vert [[ColorPale=
tte::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class=3D'headerShadow'>
<span class=3D'siteTitle' refresh=3D'content' tiddler=3D'SiteTitle'>&=
lt;/span>&nbsp;
<span class=3D'siteSubtitle' refresh=3D'content' tiddler=3D'SiteSubtitle=
'></span>
</div>
<div class=3D'headerForeground'>
<span class=3D'siteTitle' refresh=3D'content' tiddler=3D'SiteTitle'>&=
lt;/span>&nbsp;
<span class=3D'siteSubtitle' refresh=3D'content' tiddler=3D'SiteSubtitle=
'></span>
</div>
</div>
<div id=3D'mainMenu' role=3D'navigation' refresh=3D'content' tiddler=3D'=
MainMenu'></div>
<div id=3D'sidebar'>
<div id=3D'sidebarOptions' role=3D'navigation' refresh=3D'content' tiddl=
er=3D'SideBarOptions'></div>
<div id=3D'sidebarTabs' role=3D'complementary' refresh=3D'content' force=
=3D'true' tiddler=3D'SideBarTabs'></div>
</div>
<div id=3D'displayArea' role=3D'main'>
<div id=3D'messageArea'></div>
<div id=3D'tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foregr=
ound]];}

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

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

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalet=
te::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalet=
te::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalet=
te::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:[[ColorPalet=
te::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalett=
e::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::PrimaryMi=
d]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; b=
ackground:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; =
background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[Color=
Palette::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:[[Co=
lorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPale=
tte::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark=
]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[Col=
orPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[Co=
lorPalette::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:[[Colo=
rPalette::SecondaryPale]]; border:none;}

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

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::Te=
rtiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-t=
op:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorP=
alette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDar=
k]];}
.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]]; borde=
r: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[Col=
orPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[Col=
orPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPale=
tte::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]]; backgro=
und-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::Ter=
tiaryLight]]; 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:[[Colo=
rPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Se=
condaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

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

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

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPale=
tte::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 [[ColorP=
alette::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:[[ColorPalet=
te::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPal=
ette::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]]; bo=
rder:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[=
ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[C=
olorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::Te=
rtiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Backgroun=
d]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filt=
er:alpha(opacity=3D60);}
/*}}}*/
/*{{{*/
* 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 bo=
ld */
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-he=
ight: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:.85=
em;}
#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; ma=
rgin: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-sty=
le: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:point=
er;}
.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 3p=
x;}

.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; righ=
t: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%; m=
argin-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%; h=
eight: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, #backstageAr=
ea {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=3D'toolbar' role=3D'navigation' macro=3D'toolbar [[ToolbarCom=
mands::ViewToolbar]]'></div>
<div class=3D'title' macro=3D'view title'></div>
<div class=3D'subtitle'><span macro=3D'view modifier link'><=
/span>, <span macro=3D'view modified date'></span> (<span=
 macro=3D'message views.wikified.createdPrompt'></span> <span m=
acro=3D'view created date'></span>)</div>
<div class=3D'tagging' macro=3D'tagging'></div>
<div class=3D'tagged' macro=3D'tags'></div>
<div class=3D'viewer' macro=3D'view text wikified'></div>
<div class=3D'tagClear'></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify t=
he following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site,=
 as shown above (after saving, they will also appear in the browser title b=
ar)
* [[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: <<opt=
ion txtUserName>>

/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password op=
tion.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5=
BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin =3D {
	major: 1, minor: 0, revision: 2,=20
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBS=
D%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel =3D "Save this password on this =
computer";
config.macros.option.passwordInputType =3D "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this comput=
er"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc)=
;		=09
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordC=
heckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt =3D name.substr(3);
		if (config.options[opt])=20
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] =3D decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] =3D '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5=
BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin =3D {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix =3D {}; // bidix namespace
bidix.debugMode =3D false;	// true to activate both in Plugin and UploadSer=
vice
=09
//
// Upload Macro
//

config.macros.upload =3D {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
=09
config.macros.upload.label =3D {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web",=20
	saveToDisk: "save to disk",
	uploadLabel: "upload"=09
};

config.macros.upload.messages =3D {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler =3D function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) =3D=3D "http")=20
		label =3D this.label.saveLabel;
	else
		label =3D this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt =3D this.label.promptParamMacro.toString().format([this.destFile(p=
arams[0],=20
			(params[1] ? params[1]:bidix.basename(window.location.toString())), para=
ms[3])]);
	} else {
		prompt =3D this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.=
action(params);}, null, null, this.accessKey);
};

config.macros.upload.action =3D function(params)
{
		// for missing macro parameter set value from options
		if (!params) params =3D {};
		var storeUrl =3D params[0] ? params[0] : config.options.txtUploadStoreUrl=
;
		var toFilename =3D params[1] ? params[1] : config.options.txtUploadFilena=
me;
		var backupDir =3D params[2] ? params[2] : config.options.txtUploadBackupD=
ir;
		var uploadDir =3D params[3] ? params[3] : config.options.txtUploadDir;
		var username =3D params[4] ? params[4] : config.options.txtUploadUserName=
;
		var password =3D config.options.pasUploadPassword; // for security reason=
 no password as macro parameter=09
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) =3D=
=3D "http"))=20
			storeUrl =3D bidix.dirname(document.location.toString())+'/'+config.macr=
os.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) !=3D "http")
			storeUrl =3D bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename =3D bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename =3D config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir =3D config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir =3D config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !passw=
ord)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, ba=
ckupDir, username, password);=20
		return false;=20
};

config.macros.upload.destFile =3D function(storeUrl, toFilename, uploadDir)=
=20
{
	if (!storeUrl)
		return null;
		var dest =3D bidix.dirname(storeUrl);
		if (uploadDir && uploadDir !=3D '.')
			dest =3D dest + '/' + uploadDir;
		dest =3D dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions =3D {
	handler: function(place,macroName,params) {
		var wizard =3D new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList =3D wizard.getElement("markList");
		var listWrapper =3D document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) =3D=3D "http")=20
			uploadCaption =3D config.macros.upload.label.saveLabel;
		else
			uploadCaption =3D config.macros.upload.label.uploadLabel;
	=09
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOpti=
on,=20
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick:=
 this.onCancel}
			=09
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"	=09
	],
	refreshOptions: function(listWrapper) {
		var opts =3D [];
		for(i=3D0; i<this.options.length; i++) {
			var opt =3D {};
			opts.push();
			opt.option =3D "";
			n =3D this.options[i];
			opt.name =3D n;
			opt.lowlight =3D !config.optionsDesc[n];
			opt.description =3D opt.lowlight ? this.unknownDescription : config.opti=
onsDesc[n];
			opts.push(opt);
		}
		var listview =3D ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=3D0; n<opts.length; n++) {
			var type =3D opts[n].name.substr(0,3);
			var h =3D config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"=
no");
			}
		}
	=09
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
=09
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type=3D'hidden' name=3D'markList'></input>&=
lt;br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: =
'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'}=20
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload =3D {};

if (!bidix.upload.messages) bidix.upload.messages =3D {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid Ti=
ddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not =
been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges =3D function(onlyIfDirty,tiddlers,storeUrl,toFil=
ename,uploadDir,backupDir,username,password)
{
	var callback =3D function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode)=20
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's=20
		var posDiv =3D locateStoreArea(original);
		if((posDiv[0] =3D=3D -1) || (posDiv[1] =3D=3D -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
=09
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) =3D=3D "file") {
		var path =3D document.location.toString();
		var localPath =3D getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams =3D new Array(storeUrl,toFilename,uploadDir,backupDir,use=
rname,password);
	var originalPath =3D document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) =3D=3D "/")
		originalPath =3D originalPath + "index.html";
	var dest =3D config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log =3D new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]))=
;
	if (bidix.debugMode)=20
		alert("about to execute Http - GET on "+originalPath);
	var r =3D doHttp("GET",originalPath,null,null,username,password,callback,u=
ploadParams,null);
	if (typeof r =3D=3D "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss =3D function(uploadParams,original,posDiv)=20
{
	var callback =3D function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile =3D responseText.substring(responseText.indexOf("destfile:"=
)+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+des=
tfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);		=09
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath =3D uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")=
) + ".xml";
		var rssUploadParams =3D new Array(uploadParams[0],rssPath,uploadParams[2]=
,'',uploadParams[4],uploadParams[5]);
		var rssString =3D generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) !=3D "file")
			rssString =3D convertUnicodeToUTF8(rssString);=09
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadPa=
rams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain =3D function(uploadParams,original,posDiv)=20
{
	var callback =3D function(status,params,responseText,url,xhr) {
		var log =3D new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1)=
)  {
				var backupfile =3D responseText.substring(responseText.indexOf("backupf=
ile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'=
+backupfile);
			}
			var destfile =3D responseText.substring(responseText.indexOf("destfile:"=
)+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+de=
stfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");		=09
		}
	};
	// do uploadMain
	var revised =3D bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload =3D function(uploadParams,data,callback,params)
{
	var localCallback =3D function(status,params,responseText,url,xhr) {
		url =3D (url.indexOf("nocache=3D") < 0 ? url : url.substring(0,url.ind=
exOf("nocache=3D")-1));
		if (xhr.status =3D=3D 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >=3D 0 ))=
 {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >=3D 0 )
				responseText =3D responseText.substring(responseText.indexOf("\n\n")+2)=
;
		} else if (responseText.charAt(0) !=3D '0')=20
			alert(responseText);
		if (responseText.charAt(0) !=3D '0')
			status =3D null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary =3D "---------------------------"+"AaB03x";=09
	var uploadFormName =3D "UploadPlugin";
	// compose headers data
	var sheader =3D "";
	sheader +=3D "--" + boundary + "\r\nContent-disposition: form-data; name=
=3D\"";
	sheader +=3D uploadFormName +"\"\r\n\r\n";
	sheader +=3D "backupDir=3D"+uploadParams[3] +
				";user=3D" + uploadParams[4] +
				";password=3D" + uploadParams[5] +
				";uploaddir=3D" + uploadParams[2];
	if (bidix.debugMode)
		sheader +=3D ";debug=3D1";
	sheader +=3D ";;\r\n";=20
	sheader +=3D "\r\n" + "--" + boundary + "\r\n";
	sheader +=3D "Content-disposition: form-data; name=3D\"userfile\"; filenam=
e=3D\""+uploadParams[1]+"\"\r\n";
	sheader +=3D "Content-Type: text/html;charset=3DUTF-8" + "\r\n";
	sheader +=3D "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer =3D new String();
	strailer =3D "\r\n--" + boundary + "--\r\n";
	data =3D sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams=
[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r =3D doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charse=
t=3DUTF-8; boundary=3D"+boundary,uploadParams[4],uploadParams[5],localCallb=
ack,params,null);
	if (typeof r =3D=3D "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal =3D function(original, posDiv)
{
	if (!posDiv)
		posDiv =3D locateStoreArea(original);
	if((posDiv[0] =3D=3D -1) || (posDiv[1] =3D=3D -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised =3D original.substr(0,posDiv[0] + startSaveArea.length) + "\n"=
 +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle =3D getPageTitle().htmlEncode();
	revised =3D revised.replaceChunk("<title"+">","</title"+">"," =
" + newSiteTitle + " ");
	revised =3D updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised =3D updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised =3D updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised =3D updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
//=20
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog =3D function() {
	if (!config.options.chkUploadLog)=20
		return; // this.tiddler =3D null
	this.tiddler =3D store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler =3D new Tiddler();
		this.tiddler.title =3D "UploadLog";
		this.tiddler.text =3D "| !date | !user | !location | !storeUrl | !uploadD=
ir | !toFilename | !backupdir | !origin |";
		this.tiddler.created =3D new Date();
		this.tiddler.modifier =3D config.options.txtUserName;
		this.tiddler.modified =3D new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText =3D function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine =3D parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine =3D -1;
	// add text
	if (maxLine !=3D 0)=20
		this.tiddler.text =3D this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >=3D 0) {
		var textArray =3D this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text =3D textArray.join('\n');	=09
	}
	// update tiddler fields
	this.tiddler.modifier =3D config.options.txtUserName;
	this.tiddler.modified =3D new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload =3D function(storeUrl, toFilename, up=
loadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now =3D new Date();
	var text =3D "\n| ";
	var filename =3D bidix.basename(document.location.toString());
	if (!filename) filename =3D '/';
	text +=3D now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text +=3D config.options.txtUserName + " | ";
	text +=3D "[["+filename+"|"+location + "]] |";
	text +=3D " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text +=3D uploadDir + " | ";
	text +=3D "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text +=3D backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload =3D function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
//=20

bidix.checkPlugin =3D function(plugin, major, minor, revision) {
	var ext =3D version.extensions[plugin];
	if (!
		(ext  &&=20
			((ext.major > major) ||=20
			((ext.major =3D=3D major) && (ext.minor > minor))  ||
			((ext.major =3D=3D major) && (ext.minor =3D=3D minor) &&=
 (ext.revision >=3D revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + =
"." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not=
 defined"
	}
};

bidix.dirname =3D function(filePath) {
	if (!filePath)=20
		return;
	var lastpos;
	if ((lastpos =3D filePath.lastIndexOf("/")) !=3D -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename =3D function(filePath) {
	if (!filePath)=20
		return;
	var lastpos;
	if ((lastpos =3D filePath.lastIndexOf("#")) !=3D -1)=20
		filePath =3D filePath.substring(0, lastpos);
	if ((lastpos =3D filePath.lastIndexOf("/")) !=3D -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption =3D function(name,value) {
	if (!config.options[name])
		config.options[name] =3D value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {widt=
h: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)=
",
	txtUploadDir: "Relative Directory where to store the file (default: . (dow=
nloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty=
 no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload"=
, content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

  • Open in G= oogle Docs Viewer
  • Open link in new tab=
  • Open link in new window
  • Open link in new incognito window
  • Downlo= ad file
  • Copy link address
  • Edit PDF File on PDFescape.com