incubator-easyant-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jlboud...@apache.org
Subject svn commit: r1078591 [2/3] - in /incubator/easyant/site: ./ production/ sources/ sources/images/ sources/js/ sources/style/ sources/xooki/ sources/xooki/images/ sources/xooki/tiddly/ sources/xooki/trimpath/ staging/
Date Sun, 06 Mar 2011 21:48:22 GMT
Added: incubator/easyant/site/sources/style/style.css
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/style/style.css?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/style/style.css (added)
+++ incubator/easyant/site/sources/style/style.css Sun Mar  6 21:48:20 2011
@@ -0,0 +1,338 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+/*
+Design by Free CSS Templates
+http://www.freecsstemplates.org
+Released for free under a Creative Commons Attribution 2.5 License
+*/
+body {
+    background: #FFFFFF url(../images/img01.gif) repeat-x;
+    font: normal small Arial, Helvetica, sans-serif;
+    color: #6c6c6c;
+    padding: 0;
+    margin: 0;
+}
+
+h1, h2, h3 {
+    margin: 0;
+    color: #11A6D4;
+}
+
+pre {
+  background-color: #eee;
+  border: 1px solid #ddd;
+}
+
+a {
+    color: #EA672E;
+}
+
+a:hover {
+    text-decoration: none;
+    color: #11A6D4;
+}
+
+img {
+    border: none;
+}
+
+thead {
+    background-color: #eeeeee;
+    color: #FFFFFF;
+    
+}
+
+table, sortable {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 1px solid #CCCCCC;
+    background-color: #F7F7F7;
+     
+
+}
+
+#mandatory {
+    background-color: #CCFFFF;
+}
+
+
+/* Header */
+
+#header {
+    height: 130px;
+    margin: 0 auto;
+    padding: 0;
+    background: url(../images/img02.jpg) no-repeat;
+}
+
+/* Header > Logo */
+
+#logo {
+    float: left;
+    padding: 65px 0 0 0;
+}
+
+#logo h1 {
+    text-transform: uppercase;
+    font-size: 2em;
+}
+
+#logo h2 {
+    margin: 0;
+    text-transform: uppercase;
+    font-size: 1.2em;
+}
+
+#logo a {
+    text-decoration: none;
+    color: #FFFFFF;
+}
+
+/* Header > Top Menu */
+
+#topmenu {
+    float: right;
+}
+
+#topmenu ul {
+    margin: 0;
+    padding: 100px 15px 0 0;
+    list-style: none;
+    line-height: normal;
+}
+
+#topmenu li {
+    display: inline
+}
+
+#topmenu a {
+    display: block;
+    float: left;
+    margin: 0 0 0 20px;
+    padding: 0 0 0 15px;
+    text-transform: uppercase;
+    text-decoration: none;
+    font-size: x-small;
+    font-weight: bold;
+    color: #FFFFFF;
+}
+
+#topmenu a:hover {
+    text-decoration: underline
+}
+
+#topmenu1 {
+    background: url(../images/img03.gif) no-repeat left center;
+}
+
+#topmenu2 {
+    background: url(../images/img04.gif) no-repeat left center;
+}
+
+#topmenu3 {
+    background: url(../images/img05.gif) no-repeat left center;
+}
+
+/* Menu */
+
+#menu {
+    
+    height: 40px;
+    margin: 0 auto;
+}
+
+#menu ul {
+    margin: 0;
+    list-style: none;
+    line-height: normal;
+}
+
+#menu li {
+    display: inline;
+}
+
+#menu a {
+    display: block;
+    float: left;
+    height: 26px;
+    padding: 14px 18px 0 20px;
+    background: url(../images/img06.gif) no-repeat;
+    text-transform: uppercase;
+    text-decoration: none;
+    font-weight: bold;
+}
+
+#menu a:hover {
+    text-decoration: underline;
+}
+
+#menu .first a {
+    padding-left: 0;
+    background: none;
+}
+
+/* Content */
+
+#content {
+    margin: 0 auto;
+    width: 95%;
+    padding: 20px 20px;
+}
+
+/* Footer */
+
+#footer {
+    clear: both;
+    width: 95%;
+    margin: 0 auto 2em auto;
+    background: #F7F7F7 url(../images/img07.gif) repeat-x;
+    border: 1px solid #CCCCCC;
+}
+
+/* Footer > Legal */
+
+#legal {
+    margin: 0;
+    padding: 8px;
+    text-align: center;
+    color: #FFFFFF;
+}
+
+#legal a {
+    font-weight: bold;
+    color: #FFFFFF;
+}
+
+/* Boxed Style */
+
+.boxed {
+    margin-bottom: 1em;
+    background: #F7F7F7 url(../images/img07.gif) repeat-x;
+    border: 1px solid #CCCCCC;
+}
+
+.boxed .title {
+    height: 29px;
+    padding: 11px 0 0 27px;
+    background: url(../images/img08.gif) no-repeat 10px 50%;
+    text-transform: uppercase;
+    font-size: 1.2em;
+    color: #FFFFFF;
+}
+
+.boxed .content {
+    padding: 10px;
+}
+
+/* Posts */
+
+#posts {
+    float: left;
+    width: 75%;
+}
+
+/* Links */
+
+#links {
+    
+    padding-left: 10px;
+    background-repeat: no-repeat; 
+    /* background: url(../images/img05.gif) repeat-y;*/
+}
+
+#links ul {
+    margin: 0;
+    padding: 0;
+    background-repeat: no-repeat; 
+    list-style: none; 
+}
+
+#links li {
+    background-repeat: no-repeat; 
+}
+
+#links li a {
+    text-decoration: none;
+}
+
+#links li a:hover {
+    text-decoration: underline;
+}
+
+#links li i {
+    font-style: normal;
+    font-size: 14px;
+}
+
+#links li h2 {
+    font-size: 14px;
+}
+
+
+/* Content > Sidebar */
+
+#sidebar {
+    float: right;
+    width: 23%;
+}
+
+td.spacer {
+    border-top: none;
+    background-color: #f5f5f5;
+}
+
+header-row, thead  {
+    font-weight: bold;
+    color: #EA672E;
+}
+
+.odd {background-color:#f6f7f8;}
+.even {background-color: #fff;}
+
+.phase-name {
+    font-weight: bold;
+}
+
+span.bold {
+    font-weight: bold;
+}
+
+span.defaultValue, span.buildTypeValue {
+    font-style: italic;
+
+}
+
+
+#buildtype-phases, td.phase-row {
+    vertical-align:top;
+    border-spacing:0px;
+    border-top: 1px solid black;
+}
+
+#note {
+    background-image: url('../images/info.gif');
+    background-repeat: no-repeat;
+    background-color: #eeeeee;
+    min-height:48px; 
+    margin-top: 5px;
+    margin-bottom: 5px;
+    padding-left: 50px;
+    padding-top : 12px;
+    border: 1px solid #dddddd;
+
+}

Added: incubator/easyant/site/sources/style/tree.css
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/style/tree.css?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/style/tree.css (added)
+++ incubator/easyant/site/sources/style/tree.css Sun Mar  6 21:48:20 2011
@@ -0,0 +1,47 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+.treeview ul{ 
+margin: 0;
+padding: 0;
+}
+
+.treeview li{ 
+background: url(../images/bullet.gif) no-repeat left center;
+list-style-type: none;
+padding-left: 22px;
+margin-bottom: 3px;
+}
+
+.treeview li.submenu{ 
+background: url(../images/closed.gif) no-repeat left 1px;
+cursor: hand !important;
+cursor: pointer !important;
+}
+
+.treeview li.collapsable, .treeview li.open { 
+background: white url(../images/open.gif) no-repeat left 1px;
+}
+
+
+.treeview ul.closed { 
+display: none; 
+}
+
+.treeview .submenu ul li{
+cursor: default;
+}

Added: incubator/easyant/site/sources/template.html
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/template.html?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/template.html (added)
+++ incubator/easyant/site/sources/template.html Sun Mar  6 21:48:20 2011
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<html>
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+  <title>${title}</title>
+  <meta name="keywords" content="" />
+  <meta name="description" content="" />
+  <link rel="stylesheet" type="text/css" href="style/style.css" media="screen"/>
+  <!-- for tree, see if it would better go in xooki.js -->
+  <link rel="stylesheet" type="text/css" href="style/tree.css" />
+  <script type="text/javascript" src="sortable.js"></script>
+</head>
+<body>
+<div id="header">
+    <div id="topmenu">
+        <ul>
+            <li><a href="index.html" id="topmenu1" accesskey="1" title="">Home</a></li>
+            <li><a href="contact.html" id="topmenu2" accesskey="2" title="">Contact</a></li>
+        </ul>
+    </div>
+</div>
+<!-- end #header -->
+<div id="menu">
+    <ul>
+        <li class="first"><a href="index.html" accesskey="1" title="">Home</a></li>
+        <li><a href="#" title="">License</a></li>
+        <li><a href="tutorials.html" title="">Tutorials</a></li>
+        <li><a href="reference.html" title="">References</a></li>
+    </ul>
+</div>
+<!-- end #menu -->
+<div id="content">
+    <div id="posts">
+        ${body}
+    </div>
+    <!-- end #posts -->
+    <div id="sidebar" class="boxed">
+        <h2 class="title">EasyAnt Menu</h2>
+        <div id="links">
+                ${menu}
+        </div>
+    </div>
+    <!-- end #links -->
+    <div style="clear: both;">&nbsp;</div>
+</div>
+<!-- end #content -->
+<div id="footer">
+    <p id="legal">Copyright &copy; 2008-2010 EasyAnt project. Designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a></p>
+</div>
+<!-- end #footer -->
+</body>
+</html>

Added: incubator/easyant/site/sources/toc.json
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/toc.json?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/toc.json (added)
+++ incubator/easyant/site/sources/toc.json Sun Mar  6 21:48:20 2011
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+{
+  "children": [
+      {
+        "id":"index",
+        "title":"Documentation",
+        "children": [
+          ]
+      },
+      {
+        "id":"features",
+        "title":"Features",
+        "children": [
+          ]
+       },
+       {
+         "id":"faq",
+         "title":"FAQ",
+         "children": [
+          ]
+       },
+       {
+         "id":"contact",
+         "title":"Contact",
+         "children": [
+          ]
+       }
+   ]
+}

Added: incubator/easyant/site/sources/xooki/antlib.xml
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/antlib.xml?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/xooki/antlib.xml (added)
+++ incubator/easyant/site/sources/xooki/antlib.xml Sun Mar  6 21:48:20 2011
@@ -0,0 +1,114 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<antlib>
+    <scriptdef name="generate" language="javascript">
+        <element name="fileset" type="fileset"/>
+        <attribute name="destDir"/>
+        <attribute name="checkUpToDate"/>
+        <attribute name="printerFriendly"/>
+        <![CDATA[
+            print('Target Dir: ' + attributes.get("destdir"));
+            importClass(java.io.File);
+
+            fs = elements.get("fileset").get(0);
+            srcDir = elements.get("fileset").get(0).getDir(project);
+
+            // Get the files (array) of that fileset
+            ds = fs.getDirectoryScanner(project);
+            srcFiles = ds.getIncludedFiles();
+
+            // iterate over that array
+            print('processing '+srcFiles.length+' source files...');
+            for (i=0; i<srcFiles.length; i++) {
+
+                // get the values via Java API
+                var file = new File(fs.getDir(project), srcFiles[i]);
+
+                var basedir = file.getParent();
+                var filename = file.getName();
+                var filepath = srcFiles[i].substring(0, srcFiles[i].lastIndexOf(project.getProperty("file.separator"))+1);
+
+                if (attributes.get("checkuptodate") == "true") {
+                    p = "xooki."+file.getAbsolutePath().replace(' ','_')+".uptodate";
+                    upToDate = project.createTask("uptodate");
+                    upToDate.setProperty(p);
+                    upToDate.setSrcfile(file);
+                    upToDate.setTargetFile(new File(attributes.get("destdir")+"/"+filepath+"/"+filename));
+                    upToDate.perform();
+                    if (project.getProperty(p) != null) {
+                        self.log(srcFiles[i]+" is up to date", 3);
+                        continue;
+                    }
+                }
+
+                exec = project.createTask("exec");
+                exec.setDir(new File(basedir));
+                exec.setExecutable("jrunscript");
+                exec.setTaskName("generate");
+                exec.createArg().setValue(srcDir+"/xooki/xooki.js");
+                exec.createArg().setValue(filename);
+                exec.createArg().setValue(attributes.get("destdir")+"/"+filepath);
+                if (attributes.get("printerfriendly") == "true") {
+                    exec.createArg().setValue("print");
+                }
+                exec.perform();
+            }
+        ]]>
+    </scriptdef>
+    <scriptdef name="print" language="javascript">
+        <attribute name="src"/>
+        <attribute name="dest"/>
+        <attribute name="checkUpToDate"/>
+        <![CDATA[
+            importClass(java.io.File);
+
+          var file = new File(attributes.get("src"));
+          var destFile = new File(attributes.get("dest"));
+
+      var basedir = file.getParent();
+      var filename = file.getName();
+
+      var perform = true;
+
+            if (attributes.get("checkuptodate") == "true") {
+                p = "xooki."+file.getAbsolutePath().replace(' ','_')+".uptodate";
+                upToDate = project.createTask("uptodate");
+                upToDate.setProperty(p);
+                upToDate.setSrcfile(file);
+                upToDate.setTargetFile(destFile);
+                upToDate.perform();
+                if (project.getProperty(p) != null) {
+                    self.log(file+" is up to date", 3);
+                    perform = false;
+                }
+            }
+
+            if (perform) {
+            exec = project.createTask("exec");
+            exec.setDir(new File(basedir));
+            exec.setExecutable("jrunscript");
+            exec.setTaskName("print");
+            exec.createArg().setValue(project.getProperty("basedir")+"/xooki/xooki.js");
+            exec.createArg().setValue(filename);
+            exec.createArg().setValue(destFile);
+            exec.createArg().setValue("print");
+            exec.perform();
+          }
+        ]]>
+    </scriptdef>
+</antlib>

Added: incubator/easyant/site/sources/xooki/blankPageTpl.html
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/blankPageTpl.html?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/xooki/blankPageTpl.html (added)
+++ incubator/easyant/site/sources/xooki/blankPageTpl.html Sun Mar  6 21:48:20 2011
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<html>
+<head>
+    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
+    <script type="text/javascript">var xookiConfig = {level: ${level}};</script>    
+    <script type="text/javascript" src="${relroot}xooki/xooki.js"></script>
+</head>
+<body>
+    <textarea id="xooki-source">
+    </textarea>
+<script type="text/javascript">xooki.postProcess();</script>
+</body>
+</html>

Added: incubator/easyant/site/sources/xooki/images/addchild.gif
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/images/addchild.gif?rev=1078591&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/easyant/site/sources/xooki/images/addchild.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/easyant/site/sources/xooki/images/debug.gif
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/images/debug.gif?rev=1078591&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/easyant/site/sources/xooki/images/debug.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/easyant/site/sources/xooki/images/delete.gif
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/images/delete.gif?rev=1078591&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/easyant/site/sources/xooki/images/delete.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/easyant/site/sources/xooki/images/down.gif
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/images/down.gif?rev=1078591&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/easyant/site/sources/xooki/images/down.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/easyant/site/sources/xooki/images/edit.gif
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/images/edit.gif?rev=1078591&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/easyant/site/sources/xooki/images/edit.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/easyant/site/sources/xooki/images/save.gif
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/images/save.gif?rev=1078591&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/easyant/site/sources/xooki/images/save.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/easyant/site/sources/xooki/images/up.gif
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/images/up.gif?rev=1078591&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/easyant/site/sources/xooki/images/up.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/easyant/site/sources/xooki/messages.json
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/messages.json?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/xooki/messages.json (added)
+++ incubator/easyant/site/sources/xooki/messages.json Sun Mar  6 21:48:20 2011
@@ -0,0 +1,21 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+{
+            "Impossible to save changes to ${0}": "Impossible to save changes to ${0}.
+ This could be because your browser doesn't support saving (instead, use FireFox if you can), or because the pathname to your Xooki file contains illegal characters"
+}

Added: incubator/easyant/site/sources/xooki/tiddly/util.js
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/tiddly/util.js?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/xooki/tiddly/util.js (added)
+++ incubator/easyant/site/sources/xooki/tiddly/util.js Sun Mar  6 21:48:20 2011
@@ -0,0 +1,182 @@
+// utility functions borrowed from tiddly wiki: http://www.tiddlywiki.com/
+// Tiddly Wiki License:
+/*
+TiddlyWiki 2.1.3 by Jeremy Ruston, (jeremy [at] osmosoft [dot] com)
+
+Copyright (c) Osmosoft Limited 2004-2006
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this
+list of conditions and the following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+Neither the name of the Osmosoft Limited nor the names of its contributors may be
+used to endorse or promote products derived from this software without specific
+prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+*/
+
+if (typeof xooki.io == "undefined") {
+    xooki.io = {};
+}
+
+xooki.io.saveFile = function (fileUrl, content) {
+    var r = null;
+    if((r == null) || (r == false))
+        r = mozillaSaveFile(fileUrl, content);
+    if((r == null) || (r == false))
+        r = ieSaveFile(fileUrl, content);
+    return(r);
+}
+
+xooki.io.loadFile = function (fileUrl) {
+    var r = null;
+    if((r == null) || (r == false))
+        r = mozillaLoadFile(fileUrl);
+    if((r == null) || (r == false))
+        r = ieLoadFile(fileUrl);
+    return(r);
+}
+
+xooki.io.getLocalPath = function (originalPath) {
+    // Remove any location or query part of the URL
+    var argPos = originalPath.indexOf("?");
+    if(argPos != -1)
+        originalPath = originalPath.substr(0,argPos);
+    var hashPos = originalPath.indexOf("#");
+    if(hashPos != -1)
+        originalPath = originalPath.substr(0,hashPos);
+    // Convert file://localhost/ to file:///
+    if(originalPath.indexOf("file://localhost/") == 0)
+        originalPath = "file://" + originalPath.substr(16);
+    // Convert to a native file format assuming
+    // "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
+    // "file://///server/share/path/path/path..." - FireFox pc network file --> "\server\share\path\path\path..."
+    // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
+    // "file://server/share/path/path/path..." - pc network file --> "\server\share\path\path\path..."
+    var localPath;
+    if(originalPath.charAt(9) == ":") // pc local file
+        localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\");
+    else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file
+        localPath = "\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\");
+    else if(originalPath.indexOf("file:///") == 0) // mac/unix local file
+        localPath = unescape(originalPath.substr(7));
+    else if(originalPath.indexOf("file:/") == 0) // mac/unix local file
+        localPath = unescape(originalPath.substr(5));
+    else // pc network file
+        localPath = "\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\");
+    return localPath;
+}
+
+
+// Returns null if it can't do it, false if there's an error, true if it saved OK
+function ieSaveFile(filePath, content)
+{
+    try
+        {
+        var fso = new ActiveXObject("Scripting.FileSystemObject");
+        }
+    catch(e)
+        {
+        //alert("Exception while attempting to save
+
+" + e.toString());
+        return(null);
+        }
+    var file = fso.OpenTextFile(filePath,2,-1,0);
+    file.Write(content);
+    file.Close();
+    return(true);
+}
+
+// Returns null if it can't do it, false if there's an error, or a string of the content if successful
+function ieLoadFile(filePath)
+{
+    try
+        {
+        var fso = new ActiveXObject("Scripting.FileSystemObject");
+        var file = fso.OpenTextFile(filePath,1);
+        var content = file.ReadAll();
+        file.Close();
+        }
+    catch(e)
+        {
+        //alert("Exception while attempting to load
+
+" + e.toString());
+        return(null);
+        }
+    return(content);
+}
+
+// Returns null if it can't do it, false if there's an error, true if it saved OK
+function mozillaSaveFile(filePath, content)
+{
+    if(window.Components)
+        try
+            {
+            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+            var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+            file.initWithPath(filePath);
+            if (!file.exists())
+                file.create(0, 0664);
+            var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
+            out.init(file, 0x20 | 0x02, 00004,null);
+            out.write(content, content.length);
+            out.flush();
+            out.close();
+            return(true);
+            }
+        catch(e)
+            {
+            //alert("Exception while attempting to save
+
+" + e);
+            return(false);
+            }
+    return(null);
+}
+
+// Returns null if it can't do it, false if there's an error, or a string of the content if successful
+function mozillaLoadFile(filePath)
+{
+    if(window.Components)
+        try
+            {
+            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+            var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+            file.initWithPath(filePath);
+            if (!file.exists())
+                return(null);
+            var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
+            inputStream.init(file, 0x01, 00004, null);
+            var sInputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
+            sInputStream.init(inputStream);
+            return(sInputStream.read(sInputStream.available()));
+            }
+        catch(e)
+            {
+            //alert("Exception while attempting to load
+
+" + e);
+            return(false);
+            }
+    return(null);
+}
+
+// end tiddly wiki borrowed code

Added: incubator/easyant/site/sources/xooki/trimpath/template.js
URL: http://svn.apache.org/viewvc/incubator/easyant/site/sources/xooki/trimpath/template.js?rev=1078591&view=auto
==============================================================================
--- incubator/easyant/site/sources/xooki/trimpath/template.js (added)
+++ incubator/easyant/site/sources/xooki/trimpath/template.js Sun Mar  6 21:48:20 2011
@@ -0,0 +1,397 @@
+/**
+ * TrimPath Template. Release 1.0.38.
+ * Copyright (C) 2004, 2005 Metaha.
+ * 
+ * TrimPath Template is licensed under the GNU General Public License
+ * and the Apache License, Version 2.0, as follows:
+ *
+ * This program is free software; you can redistribute it and/or 
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed WITHOUT ANY WARRANTY; without even the 
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+ * See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var TrimPath;
+
+// TODO: Debugging mode vs stop-on-error mode - runtime flag.
+// TODO: Handle || (or) characters and backslashes.
+// TODO: Add more modifiers.
+
+(function() {               // Using a closure to keep global namespace clean.
+    if (TrimPath == null)
+        TrimPath = new Object();
+    if (TrimPath.evalEx == null)
+        TrimPath.evalEx = function(src) { return eval(src); };
+
+    var UNDEFINED;
+    if (Array.prototype.pop == null)  // IE 5.x fix from Igor Poteryaev.
+        Array.prototype.pop = function() {
+            if (this.length === 0) {return UNDEFINED;}
+            return this[--this.length];
+        };
+    if (Array.prototype.push == null) // IE 5.x fix from Igor Poteryaev.
+        Array.prototype.push = function() {
+            for (var i = 0; i < arguments.length; ++i) {this[this.length] = arguments[i];}
+            return this.length;
+        };
+
+    TrimPath.parseTemplate = function(tmplContent, optTmplName, optEtc) {
+        if (optEtc == null)
+            optEtc = TrimPath.parseTemplate_etc;
+        var funcSrc = parse(tmplContent, optTmplName, optEtc);
+        var func = TrimPath.evalEx(funcSrc, optTmplName, 1);
+        if (func != null)
+            return new optEtc.Template(optTmplName, tmplContent, funcSrc, func, optEtc);
+        return null;
+    }
+    
+    try {
+        String.prototype.process = function(context, optFlags) {
+            var template = TrimPath.parseTemplate(this, null);
+            if (template != null)
+                return template.process(context, optFlags);
+            return this;
+        }
+    } catch (e) { // Swallow exception, such as when String.prototype is sealed.
+    }
+    
+    TrimPath.parseTemplate_etc = {};            // Exposed for extensibility.
+    TrimPath.parseTemplate_etc.statementTag = "forelse|for|if|elseif|else|var|macro";
+    TrimPath.parseTemplate_etc.statementDef = { // Lookup table for statement tags.
+        "if"     : { delta:  1, prefix: "if (", suffix: ") {", paramMin: 1 },
+        "else"   : { delta:  0, prefix: "} else {" },
+        "elseif" : { delta:  0, prefix: "} else if (", suffix: ") {", paramDefault: "true" },
+        "/if"    : { delta: -1, prefix: "}" },
+        "for"    : { delta:  1, paramMin: 3, 
+                     prefixFunc : function(stmtParts, state, tmplName, etc) {
+                        if (stmtParts[2] != "in")
+                            throw new etc.ParseError(tmplName, state.line, "bad for loop statement: " + stmtParts.join(' '));
+                        var iterVar = stmtParts[1];
+                        var listVar = "__LIST__" + iterVar;
+                        return [ "var ", listVar, " = ", stmtParts[3], ";",
+                             // Fix from Ross Shaull for hash looping, make sure that we have an array of loop lengths to treat like a stack.
+                             "var __LENGTH_STACK__;",
+                             "if (typeof(__LENGTH_STACK__) == 'undefined' || !__LENGTH_STACK__.length) __LENGTH_STACK__ = new Array();", 
+                             "__LENGTH_STACK__[__LENGTH_STACK__.length] = 0;", // Push a new for-loop onto the stack of loop lengths.
+                             "if ((", listVar, ") != null) { ",
+                             "var ", iterVar, "_ct = 0;",       // iterVar_ct variable, added by B. Bittman     
+                             "for (var ", iterVar, "_index in ", listVar, ") { ",
+                             iterVar, "_ct++;",
+                             "if (typeof(", listVar, "[", iterVar, "_index]) == 'function') {continue;}", // IE 5.x fix from Igor Poteryaev.
+                             "__LENGTH_STACK__[__LENGTH_STACK__.length - 1]++;",
+                             "var ", iterVar, " = ", listVar, "[", iterVar, "_index];" ].join("");
+                     } },
+        "forelse" : { delta:  0, prefix: "} } if (__LENGTH_STACK__[__LENGTH_STACK__.length - 1] == 0) { if (", suffix: ") {", paramDefault: "true" },
+        "/for"    : { delta: -1, prefix: "} }; delete __LENGTH_STACK__[__LENGTH_STACK__.length - 1];" }, // Remove the just-finished for-loop from the stack of loop lengths.
+        "var"     : { delta:  0, prefix: "var ", suffix: ";" },
+        "macro"   : { delta:  1, 
+                      prefixFunc : function(stmtParts, state, tmplName, etc) {
+                          var macroName = stmtParts[1].split('(')[0];
+                          return [ "var ", macroName, " = function", 
+                                   stmtParts.slice(1).join(' ').substring(macroName.length),
+                                   "{ var _OUT_arr = []; var _OUT = { write: function(m) { if (m) _OUT_arr.push(m); } }; " ].join('');
+                     } }, 
+        "/macro"  : { delta: -1, prefix: " return _OUT_arr.join(''); };" }
+    }
+    TrimPath.parseTemplate_etc.modifierDef = {
+        "eat"        : function(v)    { return ""; },
+        "escape"     : function(s)    { return String(s).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"); },
+        "capitalize" : function(s)    { return String(s).toUpperCase(); },
+        "default"    : function(s, d) { return s != null ? s : d; }
+    }
+    TrimPath.parseTemplate_etc.modifierDef.h = TrimPath.parseTemplate_etc.modifierDef.escape;
+
+    TrimPath.parseTemplate_etc.Template = function(tmplName, tmplContent, funcSrc, func, etc) {
+        this.process = function(context, flags) {
+            if (context == null)
+                context = {};
+            if (context._MODIFIERS == null)
+                context._MODIFIERS = {};
+            if (context.defined == null)
+                context.defined = function(str) { return (context[str] != undefined); };
+            for (var k in etc.modifierDef) {
+                if (context._MODIFIERS[k] == null)
+                    context._MODIFIERS[k] = etc.modifierDef[k];
+            }
+            if (flags == null)
+                flags = {};
+            var resultArr = [];
+            var resultOut = { write: function(m) { resultArr.push(m); } };
+            try {
+                func(resultOut, context, flags);
+            } catch (e) {
+                if (flags.throwExceptions == true)
+                    throw e;
+                var result = new String(resultArr.join("") + "[ERROR: " + e.toString() + (e.message ? '; ' + e.message : '') + "]");
+                result["exception"] = e;
+                return result;
+            }
+            return resultArr.join("");
+        }
+        this.name       = tmplName;
+        this.source     = tmplContent; 
+        this.sourceFunc = funcSrc;
+        this.toString   = function() { return "TrimPath.Template [" + tmplName + "]"; }
+    }
+    TrimPath.parseTemplate_etc.ParseError = function(name, line, message) {
+        this.name    = name;
+        this.line    = line;
+        this.message = message;
+    }
+    TrimPath.parseTemplate_etc.ParseError.prototype.toString = function() { 
+        return ("TrimPath template ParseError in " + this.name + ": line " + this.line + ", " + this.message);
+    }
+    
+    var parse = function(body, tmplName, etc) {
+        body = cleanWhiteSpace(body);
+        var funcText = [ "var TrimPath_Template_TEMP = function(_OUT, _CONTEXT, _FLAGS) { with (_CONTEXT) {" ];
+        var state    = { stack: [], line: 1 };                              // TODO: Fix line number counting.
+        var endStmtPrev = -1;
+        while (endStmtPrev + 1 < body.length) {
+            var begStmt = endStmtPrev;
+            // Scan until we find some statement markup.
+            begStmt = body.indexOf("{", begStmt + 1);
+            while (begStmt >= 0) {
+                var endStmt = body.indexOf('}', begStmt + 1);
+                var stmt = body.substring(begStmt, endStmt);
+                var blockrx = stmt.match(/^\{(cdata|minify|eval)/); // From B. Bittman, minify/eval/cdata implementation.
+                if (blockrx) {
+                    var blockType = blockrx[1]; 
+                    var blockMarkerBeg = begStmt + blockType.length + 1;
+                    var blockMarkerEnd = body.indexOf('}', blockMarkerBeg);
+                    if (blockMarkerEnd >= 0) {
+                        var blockMarker;
+                        if( blockMarkerEnd - blockMarkerBeg <= 0 ) {
+                            blockMarker = "{/" + blockType + "}";
+                        } else {
+                            blockMarker = body.substring(blockMarkerBeg + 1, blockMarkerEnd);
+                        }                        
+                        
+                        var blockEnd = body.indexOf(blockMarker, blockMarkerEnd + 1);
+                        if (blockEnd >= 0) {                            
+                            emitSectionText(body.substring(endStmtPrev + 1, begStmt), funcText);
+                            
+                            var blockText = body.substring(blockMarkerEnd + 1, blockEnd);
+                            if (blockType == 'cdata') {
+                                emitText(blockText, funcText);
+                            } else if (blockType == 'minify') {
+                                emitText(scrubWhiteSpace(blockText), funcText);
+                            } else if (blockType == 'eval') {
+                                if (blockText != null && blockText.length > 0) // From B. Bittman, eval should not execute until process().
+                                    funcText.push('_OUT.write( (function() { ' + blockText + ' })() );');
+                            }
+                            begStmt = endStmtPrev = blockEnd + blockMarker.length - 1;
+                        }
+                    }                        
+                } else if (body.charAt(begStmt - 1) != '$' &&               // Not an expression or backslashed,
+                           body.charAt(begStmt - 1) != '\\') {              // so check if it is a statement tag.
+                    var offset = (body.charAt(begStmt + 1) == '/' ? 2 : 1); // Close tags offset of 2 skips '/'.
+                                                                            // 10 is larger than maximum statement tag length.
+                    if (body.substring(begStmt + offset, begStmt + 10 + offset).search(TrimPath.parseTemplate_etc.statementTag) == 0) 
+                        break;                                              // Found a match.
+                }
+                begStmt = body.indexOf("{", begStmt + 1);
+            }
+            if (begStmt < 0)                              // In "a{for}c", begStmt will be 1.
+                break;
+            var endStmt = body.indexOf("}", begStmt + 1); // In "a{for}c", endStmt will be 5.
+            if (endStmt < 0)
+                break;
+            emitSectionText(body.substring(endStmtPrev + 1, begStmt), funcText);
+            emitStatement(body.substring(begStmt, endStmt + 1), state, funcText, tmplName, etc);
+            endStmtPrev = endStmt;
+        }
+        emitSectionText(body.substring(endStmtPrev + 1), funcText);
+        if (state.stack.length != 0)
+            throw new etc.ParseError(tmplName, state.line, "unclosed, unmatched statement(s): " + state.stack.join(","));
+        funcText.push("}}; TrimPath_Template_TEMP");
+        return funcText.join("");
+    }
+    
+    var emitStatement = function(stmtStr, state, funcText, tmplName, etc) {
+        var parts = stmtStr.slice(1, -1).split(' ');
+        var stmt = etc.statementDef[parts[0]]; // Here, parts[0] == for/if/else/...
+        if (stmt == null) {                    // Not a real statement.
+            emitSectionText(stmtStr, funcText);
+            return;
+        }
+        if (stmt.delta < 0) {
+            if (state.stack.length <= 0)
+                throw new etc.ParseError(tmplName, state.line, "close tag does not match any previous statement: " + stmtStr);
+            state.stack.pop();
+        } 
+        if (stmt.delta > 0)
+            state.stack.push(stmtStr);
+
+        if (stmt.paramMin != null &&
+            stmt.paramMin >= parts.length)
+            throw new etc.ParseError(tmplName, state.line, "statement needs more parameters: " + stmtStr);
+        if (stmt.prefixFunc != null)
+            funcText.push(stmt.prefixFunc(parts, state, tmplName, etc));
+        else 
+            funcText.push(stmt.prefix);
+        if (stmt.suffix != null) {
+            if (parts.length <= 1) {
+                if (stmt.paramDefault != null)
+                    funcText.push(stmt.paramDefault);
+            } else {
+                for (var i = 1; i < parts.length; i++) {
+                    if (i > 1)
+                        funcText.push(' ');
+                    funcText.push(parts[i]);
+                }
+            }
+            funcText.push(stmt.suffix);
+        }
+    }
+
+    var emitSectionText = function(text, funcText) {
+        if (text.length <= 0)
+            return;
+        var nlPrefix = 0;               // Index to first non-newline in prefix.
+        var nlSuffix = text.length - 1; // Index to first non-space/tab in suffix.
+        while (nlPrefix < text.length && (text.charAt(nlPrefix) == '\n'))
+            nlPrefix++;
+        while (nlSuffix >= 0 && (text.charAt(nlSuffix) == ' ' || text.charAt(nlSuffix) == '\t'))
+            nlSuffix--;
+        if (nlSuffix < nlPrefix)
+            nlSuffix = nlPrefix;
+        if (nlPrefix > 0) {
+            funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');
+            var s = text.substring(0, nlPrefix).replace('\n', '\\n'); // A macro IE fix from BJessen.
+            if (s.charAt(s.length - 1) == '\n')
+            	s = s.substring(0, s.length - 1);
+            funcText.push(s);
+            funcText.push('");');
+        }
+        var lines = text.substring(nlPrefix, nlSuffix + 1).split('\n');
+        for (var i = 0; i < lines.length; i++) {
+            emitSectionTextLine(lines[i], funcText);
+            if (i < lines.length - 1)
+                funcText.push('_OUT.write("\\n");\n');
+        }
+        if (nlSuffix + 1 < text.length) {
+            funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');
+            var s = text.substring(nlSuffix + 1).replace('\n', '\\n');
+            if (s.charAt(s.length - 1) == '\n')
+            	s = s.substring(0, s.length - 1);
+            funcText.push(s);
+            funcText.push('");');
+        }
+    }
+    
+    var emitSectionTextLine = function(line, funcText) {
+        var endMarkPrev = '}';
+        var endExprPrev = -1;
+        while (endExprPrev + endMarkPrev.length < line.length) {
+            var begMark = "${", endMark = "}";
+            var begExpr = line.indexOf(begMark, endExprPrev + endMarkPrev.length); // In "a${b}c", begExpr == 1
+            if (begExpr < 0)
+                break;
+            if (line.charAt(begExpr + 2) == '%') {
+                begMark = "${%";
+                endMark = "%}";
+            }
+            var endExpr = line.indexOf(endMark, begExpr + begMark.length);         // In "a${b}c", endExpr == 4;
+            if (endExpr < 0)
+                break;
+            emitText(line.substring(endExprPrev + endMarkPrev.length, begExpr), funcText);                
+            // Example: exprs == 'firstName|default:"John Doe"|capitalize'.split('|')
+            var exprArr = line.substring(begExpr + begMark.length, endExpr).replace(/\|\|/g, "#@@#").split('|');
+            for (var k in exprArr) {
+                if (exprArr[k].replace) // IE 5.x fix from Igor Poteryaev.
+                    exprArr[k] = exprArr[k].replace(/#@@#/g, '||');
+            }
+            funcText.push('_OUT.write(');
+            emitExpression(exprArr, exprArr.length - 1, funcText); 
+            funcText.push(');');
+            endExprPrev = endExpr;
+            endMarkPrev = endMark;
+        }
+        emitText(line.substring(endExprPrev + endMarkPrev.length), funcText); 
+    }
+    
+    var emitText = function(text, funcText) {
+        if (text == null ||
+            text.length <= 0)
+            return;
+        text = text.replace(/\\/g, '\\\\');
+        text = text.replace(/\n/g, '\\n');
+        text = text.replace(/"/g,  '\\"');
+        funcText.push('_OUT.write("');
+        funcText.push(text);
+        funcText.push('");');
+    }
+    
+    var emitExpression = function(exprArr, index, funcText) {
+        // Ex: foo|a:x|b:y1,y2|c:z1,z2 is emitted as c(b(a(foo,x),y1,y2),z1,z2)
+        var expr = exprArr[index]; // Ex: exprArr == [firstName,capitalize,default:"John Doe"]
+        if (index <= 0) {          // Ex: expr    == 'default:"John Doe"'
+            funcText.push(expr);
+            return;
+        }
+        var parts = expr.split(':');
+        funcText.push('_MODIFIERS["');
+        funcText.push(parts[0]); // The parts[0] is a modifier function name, like capitalize.
+        funcText.push('"](');
+        emitExpression(exprArr, index - 1, funcText);
+        if (parts.length > 1) {
+            funcText.push(',');
+            funcText.push(parts[1]);
+        }
+        funcText.push(')');
+    }
+
+    var cleanWhiteSpace = function(result) {
+        result = result.replace(/\t/g,   "    ");
+        result = result.replace(/\r\n/g, "\n");
+        result = result.replace(/\r/g,   "\n");
+        result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1'); // Right trim by Igor Poteryaev.
+        return result;
+    }
+
+    var scrubWhiteSpace = function(result) {
+        result = result.replace(/^\s+/g,   "");
+        result = result.replace(/\s+$/g,   "");
+        result = result.replace(/\s+/g,   " ");
+        result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1'); // Right trim by Igor Poteryaev.
+        return result;
+    }
+
+    // The DOM helper functions depend on DOM/DHTML, so they only work in a browser.
+    // However, these are not considered core to the engine.
+    //
+    TrimPath.parseDOMTemplate = function(elementId, optDocument, optEtc) {
+        if (optDocument == null)
+            optDocument = document;
+        var element = optDocument.getElementById(elementId);
+        var content = element.value;     // Like textarea.value.
+        if (content == null)
+            content = element.innerHTML; // Like textarea.innerHTML.
+        content = content.replace(/&lt;/g, "<").replace(/&gt;/g, ">");
+        return TrimPath.parseTemplate(content, elementId, optEtc);
+    }
+
+    TrimPath.processDOMTemplate = function(elementId, context, optFlags, optDocument, optEtc) {
+        return TrimPath.parseDOMTemplate(elementId, optDocument, optEtc).process(context, optFlags);
+    }
+}) ();



Mime
View raw message