<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

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

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

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

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

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

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

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

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

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

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

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

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

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

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
CQuel development has been ongoing now for 2 months and is starting to take shape. What, you might ask, is CQuel???

CQuel takes it's name from MarkLogic's CQ utility and works in much the same way - only 50 times better! It currently works with MarkLogic's Content Management Server via either their XDBC or Xcc protocols (soon to support eXist via XMLDB). It is meant as a developer tool and has several features to make the XQuery developer's job a lot easier...
<html>
<ul>
<li>XQuery file open - execute - save</li>
<li>F5 fast execute</li>
<li>Pretty printed output</li>
</ul>
</html>
RESTRICTED source code via [[Subversion]]:
/*{{{*/
svn://wylovan.com/cquel
/*}}}*/
CQuel is a XQuery developer tool. Written in C#, CQuel runs natively in Windows, and is designed to improve developer productivity. CQuel currently supports [[MarkLogic]] and [[eXist]] Native XML Databases, and boasts several features to speed up the XQuery development process...

 First off, CQuel is a desktop clone of MarkLogic's CQ utility (thus the name), with the ability to use XPath and XQuery to query Native XML Databases in a friendly MDI environment. CQuel features a dockable interface with XQuery syntax-highlighting, pretty-print output, file management and printing capabilities.

 CQuel can connect to [[MarkLogic]] and [[eXist]] Native XML Databases via separately downloadable components (see [[CQuel Installation]]). Developers can quickly access stored XML content for analysis and development purposes. XQuery can be used to read, transform and update data within the backend database.
<html><img src="media/images/CQuelMDI.png" alt="CQuelMDI"/></html>
<html>
 <div id="baseDiv">
 <div class="intro">
 CQuel XQuery Editor currently supports connections to <a href="http://www.marklogic.com">MarkLogic</a>
 and <a href="http://exist.sourceforge.net/">eXist</a> native XML databases. The setup for CQuel consists
 of a single download, additional step my be required - depending on which XML database you are connecting to.
 </div>
 <div class="download">
 <input type="button" class="download" value="Download" onclick="window.location.href='download/setup.msi';"/>
 </div>
 </div>

</html>
CQuel works out of the box with [[eXist]], but for [[MarkLogic]] support you must download files from their website.
<html>
<ul>
 <li>
 CQuel requires <a href="http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=en">Microsoft's .NET Framework v2.0</a>
 </li>
 <li>
 <a href="http://wylovan.com:8081/download/cquel/">Download the latest CQuel Installer</a>, and run the installation program. By default CQuel will be installed to %Program Files%\Wylovan\CQuel directory.
 </li>
 <li>
 (Optional) Install MarkLogic support.
 <ol>
 <li>
 Download and install MarkLogic XCC library for .NET.
 <ol>
 <li>
 Download <a href="http://xqzone.com/download/binaries/3.2/MarkXCC.Net-3.2-1.zip">MarkLogic XCC Library</a> (Version 3.2-1 required).
 </li>
 <li>
 Unzip to CQuel installation directory (%Program Files%\Wylovan\CQuel).
 </li>
 </ol>
 <li>
 (Optional w/ existing XDBC Server) Configure a XDBC server in MarkLogic
 <ol>
 <li>
 Open your MarkLogic control panel (<a href="http://localhost:8001/">http://localhost:8001/</a>).
 </li>
 <li>
 Navigate to <span style="font-weight:bold;">Configure > Groups > Default > App Servers</span>
 </li>
 <li>
 Select the "Create XDBC" tab.
 <ol>
 <li>
 Give the new XDBC Server a name.
 </li>
 <li>
 Set the library to the path relative to the MarkLogic installation directory) where you store XQuery module files to import (<span style="font-weight:bold;">docs</span>.
 </li>
 <li>
 CQuel uses port <span style="font-weight:bold;">9090</span> by default.
 </li>
 <li>
 modules should be set to (<span style="font-weight:bold;">(file system)</span>)
 </li>
 <li>
 database should be the name of the database within MarkLogic where you store your XML documents (<span style="font-weight:bold;">Documents</span>).
 </li>
 <li>
 Everything else can be left as default.
 </li>
 </ol>
 </li>
 <li>
 Click the OK button.
 </li>
 </ol>
 </li>
 </ol>
 </li>
</ul>
</html>
<html>
<img src="media/images/cquelSettings.png" alt="CQuel settings"/>
</html>
<html>
	<div>
	"ConsolePacker" is a command line javascript compressor/obfuscator used to reduce the size of javascript files and make it difficult for people to steal proprietary javascript code. File size can be reduced by 50% or more resulting in much faster load times.
	</div><div>
	The project is based on Jesse Hansen's port of <a href="http://dean.edwards.name/packer/"  onclick="wlvds.openLink(this.href); return false;">Dean Edwards "Packer" program</a>, and is licensed under the <a href="http://creativecommons.org/licenses/by/3.0/us/" onclick="wlvds.openLink(this.href); return false;">Creative Commons Attribution License</a>. I've updated it to use .NET 2.0, and separated the compression/obfuscation algorithms from the UI.
	</div>
</html>
The source code is available via [[Subversion]] @
/*{{{*/
http://wylovan.com/svn/packer
/*}}}*/
Please contact us with any questions or comments you have.
/*{{{*/
Phone: ( 732 ) 917 - 0100
Skype: wylovan
/*}}}*/
[[Greetings]]
[[Free Tools]]
[[Open Source Projects]]
[[CQuel]] - A free XQuery editor for Windows.
[[Javascript Regular Expression Evaluator]] - A web based regex testing tool.
[[ConsolePacker]] - A javascript sourcecode packer Windows application and command line tool.
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>>
Welcome to the new home of Wylovan Data Services. We specialize in enterprise technologies consulting, bringing cost-effective solutions to industry, 
/***
|Name|LoadTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#LoadTiddlersPlugin|
|Version|3.4.8|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|macro for automated updates or one-click installations of tiddlers from remote sources|

!!!!!Usage
<<<
Syntax:
{{{<<loadTiddlers label:text prompt:text filter source quiet confirm force noreport tag tag tag...>>}}}

Example:
{{{<<loadTiddlers "label:load tiddlers from %0" example.html confirm temporary>>}}}
<<loadTiddlers "label:load tiddlers from %0" example.html confirm temporary>>

Where:
''"""label:text"""'' and ''"""prompt:text"""''
>defines link text and tooltip (prompt) that can be clicked to trigger the load tiddler processing.  If a label is NOT provided, then no link is created and the loadTiddlers function is performed whenever the containing tiddler is rendered.
''filter'' (optional) determines which tiddlers will be automatically selected for importing.  Use one of the following keywords:
>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.
>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document
>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler
>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)
>''""""tiddler:TiddlerName""""'' retrieves only the specific tiddler named in the parameter.
>''""""tag:text""""'' retrieves only the tiddlers tagged with the indicated text.
>> Note: ''if an existing tiddler is tagged with 'noReload', then it will not be overwritten'', even if the inbound tiddler has been selected by the filtering process.  This allows you to make local changes to imported tiddlers while ensuring that those changes won't be lost due to automatic tiddler updates retrieved from the import source document.
''source'' (required) is the location of the imported document.  It can be either a local document path/filename in whatever format your system requires, or a remote web location (starting with "http://" or "https://")
>use the keyword ''ask'' to prompt for a source location whenever the macro is invoked
''"quiet"'' (optional)
>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc).  Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified.  This ensures that changes to your document cannot occur without any visible indication at all.
''"confirm"'' (optional)
>adds interactive confirmation.  A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.
''"force"'' (optional)
>import all matching tiddlers, even if unchanged
''"noreport"'' (optional)
>suppress generation of [[ImportedTiddlers]] report
''"tag tag tag..."'' (optional)
>any remaining parameters are used as tag values to be added to each imported tiddler (i.e., "tag-on-import")
<<<
!!!!!Installation
<<<
copy/paste the following tiddlers into your document:
''LoadTiddlersPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.06.27 [3.4.8]'' added missing 'fields' params to saveTiddler() call. Fixes problem where importing tiddlers would lose the custom fields.
''2007.06.25 [3.4.7]'' add calls to store.suspendNotifications() and store.resumeNotifications() to eliminate redisplay overhead DURING import activities.
''2007.05.27 [3.4.6]'' in handler(),  loadRemoteFile() and doImport(), added 'noreport' flag to suppress generation of ImportedTiddlers
''2007.05.27 [3.4.5]'' in handler(),  initialize 'newTags' to [] (empty array) instead of null... fixes fatal error when loading tiddler without autotagging.
''2007.04.22 [3.4.4]'' in readTiddlersFromHTML(), for TW2.2 and above, use importTiddlyWiki() (new core functionality) to get tiddlers from remote file content.  Also, copied updated TW21Loader.prototype.internalizeTiddler() definition from TW2.2b5 so plugin can read tiddlers from TW2.2+ even when running under TW2.1.x
''2007.04.05 [3.4.3]'' in doImport(), changed this.readTiddlersFromHTML(html) to config.macros.loadTiddlers.readTiddlersFromHTML(html).  Fixes error caused when ImportTiddlersPlugin has NOT been installed along side this plugin.
''2007.03.26 [3.4.2]'' renamed import() to doImport() to fix IE load-time error ("identifier expected").  This may also cause a problem with FF1.5.0.x.... Apparently, "import" is a reserved word in some browsers...
''2007.03.22 [3.4.1]'' code cleanup: moved all functions inside object def'n, re-wrote report function
''2007.03.21 [3.4.0]'' split ImportTiddlersPlugin and LoadTiddlersPlugin functionality into separate plugins
|please see [[ImportTiddlersPluginHistory]] for additional revision details|
''2005.07.20 [1.0.0]'' Initial Release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
// // ''MACRO DEFINITION''
//{{{
// Version
version.extensions.loadTiddlers = {major: 3, minor: 4, revision: 8, date: new Date(2007,6,27)};
//{{{
config.macros.loadTiddlers = {
	label: "",
	prompt: "add/update tiddlers from '%0'",
	lockedTag: "noReload",	// if existing tiddler has this tag value, don't overwrite it, even if inbound tiddler is newer
	askMsg: "Please enter a local path/filename or a remote URL",
	openMsg: "Opening %0",
	openErrMsg: "Could not open %0 - error=%1",
	readMsg: "Read %0 bytes from %1",
	foundMsg: "Found %0 tiddlers in %1",
	nochangeMsg: "'%0' is up-to-date... skipped.",
	lockedMsg: "'%0' is tagged '%1'... skipped.",
	skippedMsg: "skipped (cancelled by user)",
	loadedMsg: "Loaded %0 of %1 tiddlers from %2",
	reportTitle: "ImportedTiddlers",
	handler: function(place,macroName,params) {
		var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;
		var prompt=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.prompt;
		var filter="updates";
		if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'
			|| params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))
			filter=params.shift();
		var src=params.shift(); if (!src || !src.length) return; // filename is required
		var quiet=(params[0]=="quiet"); if (quiet) params.shift();
		var ask=(params[0]=="confirm"); if (ask) params.shift();
		var force=(params[0]=="force"); if (force) params.shift();
		var noreport=(params[0]=="noreport"); if (noreport) params.shift();
		this.newTags=[]; if (params[0]) this.newTags=params; // any remaining params are used as "autotags"
		if (label.trim().length) {
			// link triggers load tiddlers from another file/URL and then applies filtering rules to add/replace tiddlers in the store
			createTiddlyButton(place,label.format([src.replace(/%20/g," ")]),prompt.format([src.replace(/%20/g," ")]), function() {
				if (src=="ask") src=prompt(this.askMsg);
				config.macros.loadTiddlers.loadFile(src,config.macros.loadTiddlers.doImport,{quiet:quiet,ask:ask,filter:filter,force:force,noreport:noreport});
			})
		}
		else {
			// load tiddlers from another file/URL and then apply filtering rules to add/replace tiddlers in the store
			if (src=="ask") src=prompt(this.askMsg);
			config.macros.loadTiddlers.loadFile(src,config.macros.loadTiddlers.doImport,{quiet:quiet,ask:ask,filter:filter,force:force,noreport:noreport});
		}
	},
	fileExists: function(theFile) {
		var found=false;
		// DEBUG: alert('testing fileExists('+theFile+')...');
		if(window.Components) {
			try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
			catch(e) { return false; } // security access denied
			var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
			try { file.initWithPath(theFile); }
			catch(e) { return false; } // invalid directory
			found = file.exists();
		}
		else { // use ActiveX FSO object for MSIE
			var fso = new ActiveXObject("Scripting.FileSystemObject");
			found = fso.FileExists(theFile)
		}
		// DEBUG: alert(theFile+" "+(found?"exists":"not found"));
		return found;
	},
	loadFile: function(src,callback,params) {
		var quiet=params.quiet;
		if (src==undefined || !src.length) return null; // filename is required
		if (!quiet) clearMessage();
		if (!quiet) displayMessage(this.openMsg.format([src.replace(/%20/g," ")]));
		if (src.substr(0,5)!="http:" && src.substr(0,5)!="file:") { // if src is relative (i.e., not a URL)
			if (!this.fileExists(src)) { // if file cannot be found, might be relative path.. try fixup
				var pathPrefix=document.location.href;  // get current document path and trim off filename
				var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\");
				if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
				src=pathPrefix+src;
				if (pathPrefix.substr(0,5)!="http:") src=getLocalPath(src);
			}
		}
		if (src.substr(0,4)!="http" && src.substr(0,4)!="file") { // if not a URL, read from local filesystem
			var txt=loadFile(src);
			if ((txt==null)||(txt==false)) // file didn't load
				{ if (!quiet) displayMessage(this.openErrMsg.format([src.replace(/%20/g," "),"(unknown)"])); }
			else {
				if (!quiet) displayMessage(this.readMsg.format([txt.length,src.replace(/%20/g," ")]));
				if (callback) callback(true,params,convertUTF8ToUnicode(txt),src,null);
			}
		}
		else
			loadRemoteFile(src,callback,params);
	},
	readTiddlersFromHTML: function(html) {
		// for TW2.2+
		if (TiddlyWiki.prototype.importTiddlyWiki!=undefined) {
			var remoteStore=new TiddlyWiki();
			remoteStore.importTiddlyWiki(html);
			return remoteStore.getTiddlers("title");
		}
	},
	doImport: function(status,params,html,src,xhr) {
		var quiet=params.quiet;
		var ask=params.ask;
		var filter=params.filter;
		var force=params.force;
		var noreport=params.noreport;
		var tiddlers = config.macros.loadTiddlers.readTiddlersFromHTML(html);
		var count=tiddlers?tiddlers.length:0;
		var querypos=src.lastIndexOf("?"); if (querypos!=-1) src=src.substr(0,querypos);
		if (!quiet) displayMessage(config.macros.loadTiddlers.foundMsg.format([count,src.replace(/%20/g," ")]));
		store.suspendNotifications();
		var count=0;
		if (tiddlers) for (var t=0;t<tiddlers.length;t++) {
			var inbound = tiddlers[t];
			var theExisting = store.getTiddler(inbound.title);
			if (inbound.title==config.macros.loadTiddlers.reportTitle)
				continue; // skip "ImportedTiddlers" history from the other document...
			if (theExisting && theExisting.tags.contains(config.macros.loadTiddlers.lockedTag)) {
				if (!quiet) displayMessage(config.macros.loadTiddlers.lockedMsg.format([theExisting.title,config.macros.loadTiddlers.lockedTag]));
				continue; // skip existing tiddler if tagged with 'noReload'
			}
			// apply the all/new/changes/updates filter (if any)
			if (filter && filter!="all") {
				if ((filter=="new") && theExisting) // skip existing tiddlers
					continue;
				if ((filter=="changes") && !theExisting) // skip new tiddlers
					continue;
				if ((filter.substr(0,4)=="tag:") && inbound.tags.find(filter.substr(4))==null) // must match specific tag value
					continue;
				if ((filter.substr(0,8)=="tiddler:") && inbound.title!=filter.substr(8)) // must match specific tiddler name
					continue;
				if (!force && store.tiddlerExists(inbound.title) && ((theExisting.modified.getTime()-inbound.modified.getTime())>=0))
					{ if (!quiet) displayMessage(config.macros.loadTiddlers.nochangeMsg.format([inbound.title])); continue; }
			}
			// get confirmation if required
			if (ask && !confirm((theExisting?"Update":"Add")+" tiddler '"+inbound.title+"'\nfrom "+src.replace(/%20/g," ")))
				{ tiddlers[t].status=config.macros.loadTiddlers.skippedMsg; continue; }
			// DO IT!
			var tags=Array.concat(inbound.tags,config.macros.loadTiddlers.newTags);
	                store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, tags, inbound.fields, true, inbound.created);
	                store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value - needed for TW2.1.3 or earlier
			tiddlers[t].status=theExisting?"updated":"added"
			count++;
		}
		store.resumeNotifications();
		if (count) {
			// refresh display
			store.setDirty(true); store.notifyAll();
			// generate a report
			if (!noreport) config.macros.loadTiddlers.report(src,tiddlers,count,quiet);
		}
		// always show final message when tiddlers were actually loaded
		if (!quiet||count) displayMessage(config.macros.loadTiddlers.loadedMsg.format([count,tiddlers.length,src.replace(/%20/g," ")]));
	},
	report: function(src,tiddlers,count,quiet) {
		// format the new report content
		var newText = "On "+(new Date()).toLocaleString()+", ";
		newText += config.options.txtUserName+" loaded "+count+" tiddlers ";
		newText += "from\n[["+src+"|"+src+"]]:\n";
		newText += "<<<\n";
		for (var t=0; t<tiddlers.length; t++)
			if (tiddlers[t].status)
				newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\n";
		newText += "<<<\n";
		// get current report (if any)
		var title=config.macros.loadTiddlers.reportTitle;
		var currText="";
		var theReport = store.getTiddler(title);
		if (theReport) currText=((theReport.text!="")?'\n----\n':"")+theReport.text;
		// update the ImportedTiddlers content and show the tiddler
		store.saveTiddler(title, title, newText+currText, config.options.txtUserName, new Date(), theReport?theReport.tags:null, theReport?theReport.fields:null);
		if (!quiet) { story.displayTiddler(null,title,1,null,null,false); story.refreshTiddler(title,1,true); }
	}
}
//}}}
An open source regular expression hacking tool. It has a friendly interface that makes it easy to work out tricky regular expressions...

Here are some [[Useful Regular Expressions]]

<html>
 <div id="baseDiv">
 <div>
 <div>Search text:</div>
 <textarea id="searchText" name="searchText" rows="10">god, text is good to have!</textarea>
 </div>
 <div>
 <div>Regular expression<a href="javascript:void%20window.open('http://www.regular-expressions.info/javascript.html');">(ref)</a>:</div>
 <input type="text" id="pattern" name="pattern" class="w100" value="\bgo+d\b|\btext\b|\bhave\b"></input>
 </div>
 <input type="button" value="Evaluate" onclick="ree.evaluate();"/>
 <hr />
 <div>
 <div id="resultCount">Results:</div>
 <div id="resultsDiv">&nbsp;</div>
 </div>
 </div>
 Note: Javascript does not support lookbehind.
 <img src="media/images/wiki/1px.gif" onload="ree.evaluate();"/>
</html>

The source code is available via [[Subversion]] @
/*{{{*/
svn://wylovan.com/ree
/*}}}*/
[[Greetings]]
[[Open Source Projects]]
[[Free Tools]]
<html><a href="http://blog.wylovan.com/pebble/wyatt" target="_blank">Wyatt's Blog</a></html>
<html><a href="http://marklogic.com">MarkLogic</a> is a "XML Content Server", or Native XML Database. Essentially an XML data store coupled with XQuery language support. It is incredibly fast, and offers clustering of both data storage and processing tiers for ultimate scalability. It comes at a price, you won't flinch if your developing for the enterprise, but is priced out of the range of smaller projects. They do offer a "Community License", which can be used for personal projects.</html>
<script src="http://static.getclicky.com/js" type="text/javascript"></script><script type="text/javascript">clicky.init(1530);</script><noscript><p><img alt="Clicky" width="1" height="1" src="http://static.getclicky.com/1530ns.gif" /></p></noscript><script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script><script type="text/javascript">
_uacct = "UA-498424-1";urchinTracker();</script>
<!--{{{-->
<script type="text/javascript" src="http://www.google-analytics.com/urchin.js"></script>
<script type="text/javascript" src="/ree/ree.js"></script>
<script type="text/javascript" src="wlvds.js"></script>
<link type="text/css" href="wlvTiddly.css" rel="stylesheet"/>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<!--}}}-->
<html>
<h1>MSI Axis 945GM running Ubuntu x64 desktop</h1>
<p>
    "Voodoo", as in Jimi Hendrix's "Voodoo Child", is my pet name for the shiny new development box I have built. Based on handpicked components purchased through <a href="http://www.newegg.com" target="_blank">Newegg</a>, I have managed to get 64-bit <a href="http://www.ubuntu.com" target="_blank">Ubuntu</a> up and running, and am now thoroughly impressed with the results. This is my first foray into desktop Linux and has not been without tribulation, so let me note some of the particulars...
</p>
<h2>Hardware...</h2>
<img src="media/images/axis945gm.jpg" alt="MSI Axis 945GM" style="float:right;"/>
<ul>
    <li><a href="http://global.msi.com.tw/index.php?func=proddesc&prod_no=1099&maincat_no=134#" target="_blank">MSI Axis 945GM barebone</a></li>
    <li><a href="http://processorfinder.intel.com/details.aspx?sSpec=SL9SF" target="_blank">Intel® Core™2 Duo Mobile Processor T7200</a></li>
    <li><a href="http://www.geilusa.com/products/show/id/50" target="_blank">GeIL 4GB(2 x 2GB) 240-Pin DDR2 SDRAM DDR2 667 (PC2 5300) Dual Channel</a></li>
    <li><a href="http://www.seagate.com/ww/v/index.jsp?locale=en-US&name=Barracuda_7200.10_SATA_320.3_GB&vgnextoid=2d1099f4fa74c010VgnVCM100000dd04090aRCRD&vgnextchannel=a32a2f290c5fb010VgnVCM100000dd04090aRCRD&reqPage=Model" target="_blank">2 X Barracuda 7200.10 SATA 3.0Gb/s 320-GB Hard Drive</a></li>
    <li><a href="http://us.liteonit.com/us/index.php?option=com_content&task=view&id=204&Itemid=67" target="_blank">LITEON LH-20A1H Double Layer DVD RW</a></li>
    <li><a href="http://www.chimeiusa.com/en/product_list.asp?mainclassid=4&subclassid=11&model_no=21" target="_blank">CHIMEI CMV 221D-NBC Black 22" 5ms DVI Widescreen LCD Monitor</a></li>
</ul>
<h3>Notes</h3>
<p>
The MSI Axis 945GM barebone is a particularly nice starting point. It is small, solid, easy to figure out and everything fits nicely. There are issues with the BIOS (doesn't see all 4GB of RAM, ACPI/Ubuntu), but nothing that could not be worked around, and I am hopeful that an update will address them.
</p>
<img src="media/images/chimeiCMV221D.jpg" alt="Chimei CMV-221D-Black" style="float:left"/>
</html>
Wylovan wants give back to the developer community and has released a good deal of code as open source. All projects are available via [[Subversion]]

WebWindow - A Web 2.0 DHTML window widget written in javascript and CSS developers can incorporate into their websites. WebWindow makes it easy to create dynamic cross-browser windows that open and close within a web page.

ScripTree - An AJAX enabled DHTML tree widget written in javascript and CSS developers can incorporate into their websites. ScripTree makes is easy to create a dynamic tree structure within a webpage.

[[WebSection]] - A Web 2.0 DHTML enabled container. Works well with [[Scriptaculous]]!
This is a nice example of file IO and XML creation with Python...
/*{{{*/
# convertSlists.px
#
import re
from datetime import datetime
from xml.dom.minidom import parseString

doc = parseString("<setLists/>")
t1 = datetime.now()
infile = open("C:/_projects_/slistXq/setlists.txt", "r")
lines = infile.readlines()
infile.close()
lineCount = 0
setCount = 0
fieldCount = 0
for line in lines:
 if lineCount % 12 == 0:
 setCount += 1
 fieldCount = 0
 setList = doc.createElement("setList")
 doc.documentElement.appendChild(setList)
 if len(line) > 1:
 parts = line.split(":")
 if len(parts) > 0:
 fieldName = re.sub(r"^.", lambda m: m.group(0).lower(), parts[0].strip())
 fieldValue = parts[1].strip()
 if re.match("(setListId)", fieldName):
 pass
 elif re.match(r"(showDate|venue|city|state|enteredDateTime)", fieldName):
 setList.setAttribute(fieldName, fieldValue)
 elif re.match(r"(set1|set2|set3)", fieldName):
 songs = fieldValue.split(";")
 if len(songs) > 1:
 elmSet = doc.createElement("set")
 elmSet.setAttribute("num", re.search(r".$", fieldName).group(0))
 for song in songs:
 elmSong = doc.createElement("song")
 elmSong.setAttribute("name", unicode(song.strip(), "utf8"))
 elmSet.appendChild(elmSong)
 setList.appendChild(elmSet)
 elif re.match(r"(encore|notes)", fieldName):
 if len(fieldValue) > 0:
 elm = doc.createElement(fieldName)
 elm.appendChild(doc.createTextNode(unicode(fieldValue, "utf8")))
 setList.appendChild(elm)
 else:
 elm = doc.createElement(fieldName)
 elm.appendChild(doc.createTextNode(unicode(fieldValue, "utf8")))
 setList.appendChild(elm)
 lineCount += 1
 fieldCount += 1

outfile = open("C:/_projects_/slistXq/setlists.xml", "w")
outfile.write(doc.toxml())
outfile.close()
print "Processed " + str(setCount) + " sets in " + str(datetime.now() - t1)
doc.unlink()
/*}}}*/
ScripTree is an open source, AJAX enabled DHTML tree widget written in javascript and CSS developers can incorporate into their websites. ScripTree makes is easy to create a dynamic tree structure within a webpage.

The source code is available via [[Subversion]] @
/*{{{*/
http://wylovan.com/svn/scriptree
/*}}}*/
<html><a href="http://script.aculo.us">Scriptaculous</a></html> by Thomas Fuchs is a great open source javascript library for creating dynamic web sites. With very few lines of code a developer can turn a single static lifeless page into an functioning application. Scriptaculous is built on the <html><a href="http://prototype.conio.net/">Prototype</a></html> javascript library, enabling the whole range of AJAX possibilities.
Empowering technology through creative thinking...
Wylovan
http://www.wylovan.com/
/***
Place your custom CSS here
***/
/*{{{*/
/* margins, padding, borders, position, z-index, etc... */
[[StyleSheetLayout]] /* TW shadow */
[[StyleSheetColors]] /* TW shadow */
[[StyleSheetPrint]] /* TW shadow */
[[LayoutAdjustments]]
[[FontAdjustments]]

[[Gray]]
[[BrightText]]

/* background */
body {
background-color: #000000 !important;
}
#titleLine, #sidebar {
background-color: transparent !important;
background-image: none !important;
border-color:transparent !important;
border: 0px solid #014 !important;
}
#siteTitle { color:#ace; }
#siteSubtitle { color:#0c0; }
#titleLine a { color: #ccf; }

.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #eee !important;}

*[class="TOCList"] { background-color: transparent; color:#fff; border-color:transparent !important; }

.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 { background: #def; color:#006; }

/*}}}*/
[[Subversion|http://subversion.tigris.org/]] is a free/open-source version control system. That is, Subversion manages files and directories over time. A tree of files is placed into a central repository. The repository is much like an ordinary file server, except that it remembers every change ever made to your files and directories. This allows you to recover older versions of your data, or examine the history of how your data changed. In this regard, many people think of a version control system as a sort of “time machine”.

[[Subversion|http://subversion.tigris.org/]] can access its repository across networks, which allows it to be used by people on different computers. At some level, the ability for various people to modify and manage the same set of data from their respective locations fosters collaboration. Progress can occur more quickly without a single conduit through which all modifications must occur. And because the work is versioned, you need not fear that quality is the trade-off for losing that conduit—if some incorrect change is made to the data, just undo that change.

Some version control systems are also software configuration management (SCM) systems. These systems are specifically tailored to manage trees of source code, and have many features that are specific to software development—such as natively understanding programming languages, or supplying tools for building software. Subversion, however, is not one of these systems. It is a general system that can be used to manage any collection of files. For you, those files might be source code—for others, anything from grocery shopping lists to digital video mixdowns and beyond.
File Extension...
/*{{{*/
\.[^\.]*$
/*}}}*/
Note these are somewhat MarkLogic specific!!!

Finding documents with regular expressions:
/*{{{*/
for $doc in fn:doc()[fn:matches(fn:document-uri(.), "^.*$")]
let $docURI := fn:document-uri($doc)
order by $docURI
return $docURI
/*}}}*/
WebSection is a Web 2.0 DHTML enabled container in the works.

The source code is available via [[Subversion]] @
/*{{{*/
http://wylovan.com/svn/sections
/*}}}*/
WebWindow is Web 2.0 DHTML window widget written in javascript and CSS developers can incorporate into their websites. It makes it easy to create dynamic cross-browser windows that open and close within a web page.Included is a configurable demo. This project is only partially complete, and so far is great for rendering boxes. If you are interested in contributing please [[contact us]].

The source code is available via [[Subversion]] @
/*{{{*/
http://wylovan.com/svn/webwindow
/*}}}*/