Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
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 use a logographic writing system and 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;}
.htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton {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>
<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' 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
Aenean eros arcu, condimentum nec, dapibus ut, tincidunt sit amet, urna. Quisque viverra, eros sed imperdiet iaculis, est risus facilisis quam, id malesuada arcu nulla luctus urna. Nullam et est. Vestibulum velit sem, faucibus cursus, dapibus vestibulum, pellentesque et, urna. Donec luctus. Donec lectus. Aliquam eget eros facilisis tortor feugiat sollicitudin. Integer lobortis vulputate sapien. Sed iaculis erat ac nunc. Etiam eu enim. Mauris ipsum urna, rhoncus at, bibendum sit amet, euismod eget, dolor. Mauris fermentum quam vitae ligula. Vestibulum in libero feugiat justo dictum consectetuer. Vestibulum euismod purus eget elit. Nunc sed massa porta elit bibendum posuere. Nunc pulvinar justo sit amet odio. In sed est. Phasellus ornare elementum nulla. Nulla ipsum neque, cursus a, viverra a, imperdiet at, enim. Quisque facilisis, diam sed accumsan suscipit, odio arcu hendrerit dolor, quis aliquet massa nulla nec sem.
!heading 1
!!heading 2
!!!heading3
----
<<tag button>>
This is a link to a [[StyleSheet]] tiddler.
> This is a blockquote
> This is a blockquote
> This is a blockquote
Jaxer is a new web server and framework which allows web and Ajax web applications to be written in Javascript both on the server and client. The initial public release, version 0.9, was released in late January 2008. It allows for Javascript, HTML, CSS, and the DOM on the server. This means that existing client-side libraries such as ~JQuery and Prototype, etc. may be used on the server as well as the client. Jaxer also makes it really easy to communicate between the client and the server using traditional Javascript function calls.
http://www.aptana.com/jaxer/
I will be interested in using Jaxer for client-focused development and server-focused development in addition to Jaxer's described usage. I would like to see tools for Jaxer similar to ~CouchDB or Persevere. Additionally I may also be interested in using Jaxer with ~JQuery even when not creating AJAX focused apps.
I prepared ~GearsORM to run within Jaxer and this adapation is up at: http://code.google.com/p/js-orm/source/browse/trunk/src
I also have a basic Linux installation of Jaxer hosted and running here: http://www.philmaker.com:8080/aptana/
Soon I plan to post some Jaxer examples and the source using ~CodePress. Client-side Javascript editors are quite nice - remember that Javascript is indeed a dynamic language.
Background: #ffffff
Foreground: #000000
PrimaryPale: #e5edf4
PrimaryLight: #679DC2
PrimaryMid: #005B99
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #FFA02F
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
MainAccent: #ec5200
MainAccentLight: #ff6600
SecondAccent: #5bbf21
SecondAccentLight: #9DD97B
SecondAccentSuperLight: #E7F6DF
MuchLessSubtle: #666;
LessSubtle: #999;
Subtle: #ccc
SubtleLight: #ddd
SubtleSuperLight: #eee
Welcome
RecentProjects
ResumeTool
<!--{{{-->
<div class='title' macro='view title'></div>
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></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>
<!--}}}-->
philip at philmaker dot com
http://www.extjs.com/
http://extjs.com/deploy/dev/examples/
http://extjs.com/deploy/dev/docs/
[[Copyright]]
<<slider chkSliderOptionsPanel SiteMap "site index »" >>
<<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
http://www.ronpaul2008.com/
http://www.barackobama.com/
Aenean eros arcu, condimentum nec, dapibus ut, tincidunt sit amet, urna. Quisque viverra, eros sed imperdiet iaculis, est risus facilisis quam, id malesuada arcu nulla luctus urna. Nullam et est. Vestibulum velit sem, faucibus cursus, dapibus vestibulum, pellentesque et, urna. Donec luctus. Donec lectus. Aliquam eget eros facilisis tortor feugiat sollicitudin. Integer lobortis vulputate sapien. Sed iaculis erat ac nunc. Etiam eu enim. Mauris ipsum urna, rhoncus at, bibendum sit amet, euismod eget, dolor. Mauris fermentum quam vitae ligula. Vestibulum in libero feugiat justo dictum consectetuer. Vestibulum euismod purus eget elit. Nunc sed massa porta elit bibendum posuere. Nunc pulvinar justo sit amet odio. In sed est. Phasellus ornare elementum nulla. Nulla ipsum neque, cursus a, viverra a, imperdiet at, enim. Quisque facilisis, diam sed accumsan suscipit, odio arcu hendrerit dolor, quis aliquet massa nulla nec sem.
!heading 1
!!heading 2
!!!heading3
----
<<tag button>>
This is a link to a [[StyleSheet]] tiddler.
> This is a blockquote
> This is a blockquote
> This is a blockquote
|>|>| !This is a header |h
|column1|column2|column3|
|row2| row2 |row2|
|column1|column2|column3|
|row2| row2 |row2|
|column1|column2|column3|
|row2| row2 |row2|
* AptanaJaxer
* TiddlyWiki
* ExtJS
* ServerSideJavascript
* WebHosting
* [[Quotations]]
* RecentProjects
* ViewPortfolio
* ViewResume
* [[Email]]
* PrivatePage
<<search>>
* PageTemplate
* StyleSheet
* ColorPalette
* ViewTemplate
* EditTemplate
* ViewPortfolio
<<search>>
setup a separate private protected TiddlyWiki page for my own personal notes and brainstorming.
These interface options for customising TiddlyWiki are saved in your browser
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations
Also see AdvancedOptions
<!--{{{-->
<div class='header'>
<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='topMenu' refresh='content' tiddler='TopMenu'></div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='footer' refresh='content' force='true' tiddler='Footer'></div>
<!--}}}-->
<<newTiddler>>
* [[TopMenu]]
* [[MainMenu]]
* [[TopMenuOrig]]
* [[MainMenuOrig]]
* [[MyNotes]]
Nothing in the world can take the place of Persistence.
Talent will not; nothing is more common than unsuccessful men with talent.
Genius will not; unrewarded genius is almost a proverb.
Education will not; the world is full of educated derelicts.
Persistence and determination alone are omnipotent.
- Calvin Coolidge
* Simple sample code browser for Jaxer. This is currently missing some important functionality - implemented using ~ExtJS and ~CodePress and the Jaxer File API.
** http://philmaker.com:8080/browser/?project=jsorm
** http://philmaker.com:8080/browser/?project=browser
* converting Gears ORM to run within Jaxer
** http://code.google.com/p/js-orm/source/browse/trunk/src
* Reggie, graphical regular expression composer
A few years ago I discovered a tool named XML Resume Library. This tool allows you to store your resume data as XML and generate your resume in a variety of formats and also will allow the user to create targeted resumes. It's a really neat idea but unfortunately its not very easy to tailor and it has no UI.
I'm in the midst of rewriting my resume and I decided I'd work on a similar tool using web technologies. I'm happy to say that I now have something simple up and running which I'm using to generate my own resume and keep the data separate from the presentation. My primary goals are to allow for plugging resume data into any resume template - and also to allow for the targeting of the resume data when necessary. I hope to spend some more time making this more generally usable by myself and others. Let me know if you are interested.
http://www.philmaker.com/resume/tool/
http://www.aptana.com/jaxer/
http://www.helma.org/
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
Nothing in the world can take the place of Persistence.
Talent will not; nothing is more common than unsuccessful men with talent.
Genius will not; unrewarded genius is almost a proverb.
Education will not; the world is full of educated derelicts.
Persistence and determination alone are omnipotent.
- Calvin Coolidge
/*{{{*/
body { text-align:center; background:#fff url(bg_top.png) repeat-x top left; }
#contentWrapper { width:750px; text-align:left; margin-left:auto; margin-right:auto; position:relative; overflow:hidden; clear:both; }
div.header { display:block; height:80px; background-color:[[ColorPalette::Foreground]]; overflow:hidden; clear:both; position:relative; }
div.header div.headerForeground { padding-top:2em; }
div.header div.headerForeground span.siteTitle h1 { position:absolute; margin:0; padding:0; top:10px; left:8px;}
div.header div.headerShadow { display:none; }
#topMenu ul { margin:0; padding:0; list-style:none; width:100%; overflow:hidden; clear:both; }
#topMenu ul li { float:left; margin:0; padding:0; }
#topMenu ul li a { height:18px; vertical-align: middle; text-decoration:none; display:block; float:left; font-size:12px; font-weight:bold; color:[[ColorPalette::Background]]; margin:0 20px 0 0; padding:5px 8px 5px 8px }
#topMenu ul li a:hover { background-color:[[ColorPalette::MainAccentLight]]; }
#topMenu a.button { float:right; margin:0.8em 0 0 1.5em; color:[[ColorPalette::MainAccentLight]]; border-width:0;}
#topMenu a.button:hover { color:[[ColorPalette::MainAccent]]; background-color:[[ColorPalette::Background]];}
#mainMenu { margin:30px 0 4em 0; padding:0; width:160px; text-align:left; line-height:1em; overflow:hidden; clear:both; float:left; position: inherit;}
#mainMenu ul { list-style:none; margin:0; padding:0; }
#mainMenu ul li {margin:0; padding:0;}
#mainMenu ul li a.tiddlyLink {margin:0; padding:6px 8px; display:block; text-decoration:none; font-size:1.1em; font-weight:bold; color:[[ColorPalette::Foreground]]; text-align:left; clear:left; }
#mainMenu ul li a.tiddlyLink:hover { color:[[ColorPalette::Background]]; background-color:[[ColorPalette::Foreground]]; }
#mainMenu a.button {margin-left:8px; color:[[ColorPalette::MainAccentLight]]; border-width:0px; }
#mainMenu a.button:hover { color:[[ColorPalette::MainAccent]]; background-color:[[ColorPalette::Background]];}
#mainMenu input.txtOptionInput {border:solid 1px #ddd; border-top:solid 1px #aaa; border-bottom:solid 1px #eee; margin:4px 0 0 8px; padding:2px 4px; color:[[ColorPalette::LessSubtle]]; background:transparent url(./images/bg_search.png) repeat-x top left;}
#sidebar { top:120px; right:0; overflow:hidden; clear:both;}
#displayArea { float:right; margin:30px 0 4em 10px;}
#tiddlerDisplay { float:left; margin:0; width:570px;}
#footer { margin-top:40px; border-top:solid 1px [[ColorPalette::Subtle]]; padding:20px 0; color:[[ColorPalette::Subtle]]; overflow:hidden; clear:both}
#footer a.button { color:[[ColorPalette::MainAccent]]; border-width:0;}
#footer a.button:hover { color:[[ColorPalette::MainAccentLight]]; background-color:[[ColorPalette::Background]];}
div.tiddler { margin:0em 0 4em 0; padding-top:0em; }
div.tiddler div.title { font-size:2em; margin-left:0; color:[[ColorPalette::MainAccent]]; display:inline;}
div.tiddler div.viewer { font-size:1.2em; margin-left:0px; width:450px;}
div.tiddler div.subtitle { display:none; }
div.tiddler div.toolbar { text-align:left; margin-left:0.5em; display:inline;}
div.tiddler div.toolbar > a.button { color:[[ColorPalette::Subtle]]; border-width:0;}
div.tiddler div.toolbar > a.button:hover { color:[[ColorPalette::LessSubtle]]; background:[[ColorPalette::Background]];}
div.tiddler div.tagged { background-color:[[ColorPalette::Background]]; border-width:0; margin:0 0 2em 0;}
div.tiddler div.tagged ul li.listTitle { display:none; }
div.tiddler div.tagged ul li a { font-size:1em; display:block; border:solid 1px [[ColorPalette::Background]]; margin-bottom:2px; padding:3px 3px 3px 20px; text-decoration:none; background:transparent url(tags_matrix.png) no-repeat top left; color:[[ColorPalette::SecondAccent]]; }
div.tiddler div.tagged ul li a:hover { border-color:[[ColorPalette::SecondAccentLight]]; background:[[ColorPalette::SecondAccentLight]] url(tags_matrix.png) no-repeat 0 -59px; background-position: 0 -59px; color:[[ColorPalette::SecondAccent]];}
div.tiddler div.tagging { float:none; border:solid 1px [[ColorPalette::SubtleLight]]; padding:3px; background-color:[[ColorPalette::SubtleSuperLight]]; overflow:hidden; clear:both; zoom:1;}
div.tiddler div.tagging ul li { float:left; margin:0 1.5em 0 0; color:[[ColorPalette::LessSubtle]]; }
div.tiddler div.tagging ul li a { color:[[ColorPalette::MainAccentLight]]; }
div.tiddler div.tagging ul li a:hover { color:[[ColorPalette::MainAccent]]; background-color:[[ColorPalette::SubtleSuperLight]];}
div.tiddler div.viewer img { float:left; clear:left; margin:0 1em 1em 0;}
div.tiddler table {margin:0; border-width:0px; }
div.tiddler table tr { border-width:0px; }
div.tiddler table tr td { border-width:0px; vertical-align:top; }
div.tiddler table tr td * { float:left; clear:left; }
.viewer pre { font-size:0.85em; }
#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;}
form.wizard {font-size:0.8em;}
h1, h2, h3, h4, h5 { color:[[ColorPalette::MainAccentLight]] }
/*}}}*/
/*{{{*/
* 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;}
/*}}}*/
TiddlyWiki is a lightweight wiki which is presented in a single webpage and is focused on micro-content. This site is hosted using TiddlyWiki and when I edit changes are persisted using ~WebDav. You can also use TiddlyWiki locally and save as a file.
http://www.tiddlywiki.com/
http://www.tiddlythemes.com/
http://www.tiddlyspot.com/
http://www.giffmex.org/twfortherestofus.html
http://www.tiddlywiki.org
http://www.tiddlytools.com/
* [[Welcome]]
* [[MainMenu]]
<<saveChanges>><<permaview>><<closeAll>>
* [[TopMenu]]
* [[MainMenu]]
* [[DefaultTiddlers]]
<<closeAll>><<permaview>><<saveChanges>>
Those who cite oil as the reason for the Iraq war are likely thinking about cars and not tanks. The US military is the biggest purchaser of oil in the world. However, I did cast a ballot for Mr. Paul.
http://www.energybulletin.net/13199.html
This will be a link to my portfolio.
* Reggie
* Task Edit
* Sun Project Alameda
* Sun Software Update Service
This will be a link to my resume.
* Apple, Inc. 1995 - 2003, Systems & Support
* Sun Microsystems, 2004 - 2005, Java Developer, UI
* Consulting 2005 - 2007
<!--{{{-->
<div class='title' macro='view title'></div>
<div class='toolbar' macro='toolbar closeTiddler
+editTiddler'></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>
<!--}}}-->
/***
|''Name:''|WebDAVSavingPlugin|
|''Description:''|Saves on a WebDAV server without the need of any ServerSide script.<br>When TiddlyWiki is accessed over http, this plugin permits to save back to the server, using http PUT.|
|''Version:''|0.2.1|
|''Date:''|Apr 21, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#WebDAVSavingPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.WebDAVSavingPlugin = {
major: 0, minor: 2, revision: 1,
date: new Date("Apr 21, 2007"),
source: 'http://tiddlywiki.bidix.info/#WebDAVSavingPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
coreVersion: '2.2.0 (Beta 5)'
};
if (!window.bidix) window.bidix = {};
bidix.WebDAVSaving = {
orig_saveChanges: saveChanges,
defaultFilename: 'index.html',
messages: {
loadOriginalHttpDavError: "Original file can't be loaded",
optionsMethodError: "The OPTIONS method can't be used on this ressource : %0",
webDavNotEnabled: "WebDAV is not enabled on this ressource : %0",
notHTTPUrlError: "WebDAV saving can be used for http viewed TiddlyWiki only",
aboutToSaveOnHttpDav: 'About to save on %0 ...' ,
folderCreated: "Remote folder '%0' created"
}
};
// Save this tiddlywiki with the pending changes
saveChanges = function(onlyIfDirty,tiddlers)
{
var originalPath = document.location.toString();
if (originalPath.substr(0,5) == "file:")
return bidix.WebDAVSaving.orig_saveChanges(onlyIfDirty,tiddlers);
else
return bidix.WebDAVSaving.saveChanges(onlyIfDirty,tiddlers);
}
bidix.WebDAVSaving.saveChanges = function(onlyIfDirty,tiddlers)
{
var callback = function(status,params,original,url,xhr) {
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
if (!status)
displayMessage(bidix.WebDAVSaving.messages.optionsMethodError.format([url]));
else {
if (!xhr.getResponseHeader("DAV"))
alert(bidix.WebDAVSaving.messages.webDavNotEnabled.format([url]));
else
bidix.WebDAVSaving.doSaveChanges();
}
}
if(onlyIfDirty && !store.isDirty())
return;
clearMessage();
var originalPath = document.location.toString();
// Check we were loaded from a HTTP or HTTPS URL
if(originalPath.substr(0,4) != "http") {
alert(bidix.WebDAVSaving.messages.notHTTPUrlError);
return;
}
// is the server WebDAV enabled ?
var r = doHttp("OPTIONS",originalPath,null,null,null,null,callback,null,null);
if (typeof r == "string")
alert(r);
}
bidix.WebDAVSaving.doSaveChanges = function()
{
var callback = function(status,params,original,url,xhr) {
if (!status) {
alert(config.messages.loadOriginalHttpDavError);
return;
}
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
// Locate the storeArea div's
var posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
bidix.WebDAVSaving.mkbackupfolder(null,null,params,original,posDiv);
};
// get original
var originalPath = document.location.toString();
if (originalPath.charAt(originalPath.length-1) == "/")
originalPath = originalPath + bidix.WebDAVSaving.defaultFilename;
displayMessage(bidix.WebDAVSaving.messages.aboutToSaveOnHttpDav.format([originalPath]));
doHttp("GET",originalPath,null,null,null,null,callback,originalPath,null);
};
bidix.WebDAVSaving.mkbackupfolder = function(root,dirs,url,original,posDiv) {
if (!root || !dirs) {
root = bidix.dirname(url);
if (config.options.txtBackupFolder == "")
dirs = null;
else
dirs = config.options.txtBackupFolder.split('/');
}
if (config.options.chkSaveBackups && dirs && (dirs.length > 0))
bidix.WebDAVSaving.mkdir(root,dirs.shift(),dirs,url,original,posDiv);
else
bidix.WebDAVSaving.saveBackup(url,original,posDiv);
};
bidix.WebDAVSaving.saveBackup = function(url,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if (!status) {
alert(config.messages.backupFailed);
return;
}
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
displayMessage(config.messages.backupSaved,url);
bidix.WebDAVSaving.saveRss(params[0],params[1],params[2]);
};
if(config.options.chkSaveBackups) {
var backupPath = getBackupPath(url);
bidix.httpPut(backupPath,original,callback,Array(url,original,posDiv));
} else {
bidix.WebDAVSaving.saveRss(url,original,posDiv);
}
}
bidix.WebDAVSaving.saveRss = function(url,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if (!status) {
alert(config.messages.rssFailed);
return;
}
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
displayMessage(config.messages.rssSaved,url);
bidix.WebDAVSaving.saveEmpty(params[0],params[1],params[2]);
};
if(config.options.chkGenerateAnRssFeed) {
var rssPath = url.substr(0,url.lastIndexOf(".")) + ".xml";
bidix.httpPut(rssPath,convertUnicodeToUTF8(generateRss()),callback,Array(url,original,posDiv));
} else {
bidix.WebDAVSaving.saveEmpty(url,original,posDiv);
}
}
bidix.WebDAVSaving.saveEmpty = function(url,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if (!status) {
alert(config.messages.emptyFailed);
return;
}
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
displayMessage(config.messages.emptySaved,url);
bidix.WebDAVSaving.saveMain(params[0],params[1],params[2]);
};
if(config.options.chkSaveEmptyTemplate) {
var emptyPath,p;
if((p = url.lastIndexOf("/")) != -1)
emptyPath = url.substr(0,p) + "/empty.html";
else
emptyPath = url + ".empty.html";
var empty = original.substr(0,posDiv[0] + startSaveArea.length) + original.substr(posDiv[1]);
bidix.httpPut(emptyPath,empty,callback,Array(url,original,posDiv));
} else {
bidix.WebDAVSaving.saveMain(url,original,posDiv);
}
}
bidix.WebDAVSaving.saveMain = function(url,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if(status) {
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
displayMessage(config.messages.mainSaved,url);
store.setDirty(false);
} else
alert(config.messages.mainFailed);
};
// Save new file
var revised = updateOriginal(original,posDiv);
bidix.httpPut(url,revised,callback,null);
}
// asynchronous mkdir
bidix.WebDAVSaving.mkdir = function(root,dir,dirs,url,original,posDiv) {
var callback = function(status,params,responseText,url,xhr) {
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
if (status == null) {
alert("Error in mkdir");
return;
}
if (xhr.status == httpStatus.ContentCreated) {
displayMessage(bidix.WebDAVSaving.messages.folderCreated.format([url]),url);
bidix.WebDAVSaving.mkbackupfolder(url,params[1],params[2],params[3],params[4]);
} else {
if (xhr.status == httpStatus.NotFound)
bidix.http('MKCOL',url,null,callback,params);
else
bidix.WebDAVSaving.mkbackupfolder(url,params[1],params[2],params[3],params[4]);
}
};
if (root.charAt(root.length) != '/')
root = root +'/';
bidix.http('HEAD',root+dir,null,callback,Array(root,dirs,url,original,posDiv));
}
bidix.httpPut = function(url,data,callback,params)
{
return bidix.http("PUT",url,data,callback,params);
}
bidix.http = function(type,url,data,callback,params)
{
var r = doHttp(type,url,data,null,null,null,callback,params,null);
if (typeof r == "string")
alert(r);
return r;
}
bidix.dirname = function (filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(0, lastpos);
} else {
return filePath.substring(0, filePath.lastIndexOf("\\"));
}
};
//}}}
http://www.silverrack.com/
http://www.slicehost.com/
Welcome to my personal blog/wiki. I'm using TiddlyWiki. I'm also ramping up with Aptana Jaxer. Thanks for visiting!