You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-commits@incubator.apache.org by xa...@apache.org on 2007/03/27 07:08:51 UTC
svn commit: r522796 - in /incubator/ivy/core/trunk: build-release.xml
build.properties build.xml doc/toc.json doc/xooki/xooki.js
Author: xavier
Date: Tue Mar 27 00:08:50 2007
New Revision: 522796
URL: http://svn.apache.org/viewvc?view=rev&rev=522796
Log:
review release management:
- extract in a separate build file (build-release.xml)
- upgrade xooki version (featuring batch generation)
- include doc batch generation
- review what is packaged in distributions (src and bin)
Added:
incubator/ivy/core/trunk/build-release.xml
Modified:
incubator/ivy/core/trunk/build.properties
incubator/ivy/core/trunk/build.xml
incubator/ivy/core/trunk/doc/toc.json
incubator/ivy/core/trunk/doc/xooki/xooki.js
Added: incubator/ivy/core/trunk/build-release.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build-release.xml?view=auto&rev=522796
==============================================================================
--- incubator/ivy/core/trunk/build-release.xml (added)
+++ incubator/ivy/core/trunk/build-release.xml Tue Mar 27 00:08:50 2007
@@ -0,0 +1,134 @@
+<project name="IvyRelease" default="snapshot" xmlns:ivy="antlib:fr.jayasoft.ivy.ant">
+ <import file="build.xml"/>
+
+ <target name="generate-doc">
+ <!-- requires java 6 jdk in path and Apache Ant 1.7 -->
+ <copy todir="${doc.build.dir}">
+ <fileset dir="${doc.src.dir}" includes="images/**,style/**,samples/**" />
+ </copy>
+ <script language="javascript"><![CDATA[
+ importClass(java.io.File);
+
+ fs = project.createDataType("fileset");
+ fs.setDir( new File(project.getProperty("doc.src.dir")) );
+ fs.setIncludes("**/*.html");
+ fs.setExcludes("template.html,"
+ +"*Template.html,"
+ +"conflict-solving-algo.html,"
+ +"doc/use.html,"
+ +"doc/reference.html,"
+ +"samples/**,"
+ +"reports/**,"
+ +"xooki/**,"
+ +"presentations/**,"
+ +"test/**");
+
+ // Get the files (array) of that fileset
+ ds = fs.getDirectoryScanner(project);
+ srcFiles = ds.getIncludedFiles();
+
+ // iterate over that array
+ 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);
+
+ exec = project.createTask("exec");
+ exec.setDir(new File(basedir));
+ exec.setExecutable("jrunscript");
+ exec.createArg().setValue(project.getProperty("doc.src.dir")+"/xooki/xooki.js");
+ exec.createArg().setValue("-noddtree");
+ exec.createArg().setValue(filename);
+ exec.createArg().setValue(project.getProperty("doc.build.dir")+"/"+filepath);
+ exec.perform();
+ }
+ ]]></script>
+ </target>
+
+ <target name="all-doc" depends="javadoc, generate-doc" />
+
+ <target name="snapshot-src" depends="default-version,all-doc">
+ <mkdir dir="${distrib.dir}"/>
+ <zip destfile="${distrib.dir}/ivy-${build.version}-src.zip">
+ <zipfileset dir="${doc.build.dir}" prefix="ivy-${build.version}/doc"/>
+ <zipfileset dir="${src.dir}" prefix="ivy-${build.version}/src/java"/>
+ <zipfileset dir="${basedir}/src/example" prefix="ivy-${build.version}/src/example"/>
+ <zipfileset dir="${test.dir}" prefix="ivy-${build.version}/test/java"/>
+ <zipfileset dir="${basedir}/test/repositories" prefix="ivy-${build.version}/test/repositories"/>
+ <zipfileset dir="${basedir}/test/buildlist" prefix="ivy-${build.version}/test/buildlist"/>
+ <zipfileset dir="${basedir}/test/triggers" prefix="ivy-${build.version}/test/triggers"/>
+ <zipfileset dir="${basedir}/test/xsl" prefix="ivy-${build.version}/test/xsl"/>
+ <zipfileset dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" fullpath="ivy-${build.version}/ivy.xsd"/>
+ <zipfileset dir="${basedir}" includes="DISCLAIMER" fullpath="ivy-${build.version}/DISCLAIMER"/>
+ <zipfileset dir="${basedir}" includes="LICENSE" fullpath="ivy-${build.version}/LICENSE"/>
+ <zipfileset dir="${basedir}" includes="CHANGES.txt" fullpath="ivy-${build.version}/CHANGES.txt"/>
+ <zipfileset dir="${basedir}" includes="RELEASE_NOTES" fullpath="ivy-${build.version}/RELEASE_NOTES"/>
+ <zipfileset dir="${basedir}" includes="ivysettings.xml" fullpath="ivy-${build.version}/ivysettings.xml"/>
+ <zipfileset dir="${basedir}" includes="build.properties" fullpath="ivy-${build.version}/build.properties"/>
+ <zipfileset dir="${basedir}" includes="ivy.xml" fullpath="ivy-${build.version}/ivy.xml"/>
+
+ <zipfileset dir="${basedir}" includes="build.xml" fullpath="ivy-${build.version}/build.xml"/>
+ </zip>
+ </target>
+
+ <target name="snapshot-bin" depends="default-version, jar, all-doc">
+ <mkdir dir="${distrib.dir}"/>
+ <ivy:deliver
+ deliverpattern="${distrib.dir}/ivy.xml"
+ pubrevision="${build.version}"
+ pubdate="${pubdate}"
+ status="${status}"/>
+ <zip destfile="${distrib.dir}/ivy-${build.version}-bin.zip">
+ <zipfileset dir="${doc.build.dir}" prefix="ivy-${build.version}/doc"/>
+ <zipfileset dir="${basedir}/src/example" prefix="ivy-${build.version}/src/example"/>
+ <zipfileset dir="${basedir}" includes="DISCLAIMER" fullpath="ivy-${build.version}/DISCLAIMER"/>
+ <zipfileset dir="${basedir}" includes="LICENSE" fullpath="ivy-${build.version}/LICENSE"/>
+ <zipfileset dir="${basedir}" includes="CHANGES.txt" fullpath="ivy-${build.version}/CHANGES.txt"/>
+ <zipfileset dir="${basedir}" includes="RELEASE_NOTES" fullpath="ivy-${build.version}/RELEASE_NOTES"/>
+ <zipfileset dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" fullpath="ivy-${build.version}/ivy.xsd"/>
+ <zipfileset dir="${distrib.dir}" includes="ivy.xml" fullpath="ivy-${build.version}/ivy.xml"/>
+
+ <zipfileset dir="${artifacts.build.dir}" includes="${final.name}" fullpath="ivy-${build.version}/ivy-${build.version}.jar"/>
+ <zipfileset dir="${artifacts.build.dir}" includes="${final.core.name}" fullpath="ivy-${build.version}/ivy-core-${build.version}.jar"/>
+ </zip>
+ <copy file="${basedir}/DISCLAIMER" todir="${distrib.dir}" />
+ <copy file="${basedir}/LICENSE" todir="${distrib.dir}" />
+ <copy file="${basedir}/CHANGES.txt" todir="${distrib.dir}" />
+ <copy file="${basedir}/RELEASE_NOTES" todir="${distrib.dir}" />
+ <copy file="${artifacts.build.dir}/${final.name}" todir="${distrib.dir}" />
+ <copy file="${artifacts.build.dir}/${final.core.name}" todir="${distrib.dir}" />
+ <copy file="${src.dir}/org/apache/ivy/plugins/parser/xml/ivy.xsd" todir="${distrib.dir}" />
+ </target>
+
+ <target name="snapshot-version">
+ <property name="version.prefix" value="${target.ivy.version}-dev-"/>
+ </target>
+
+ <target name="release-version">
+ <input message="please enter version: " addproperty="build.version"/>
+ <input message="please enter status: (integration,milestone,release)" addproperty="status"/>
+ </target>
+
+ <target name="snapshot" depends="clean, snapshot-version, coverage-report, snapshot-src, snapshot-bin" description="used for nightly and integration builds"/>
+ <target name="release" depends="release-version, snapshot" description="make a new release of Ivy"/>
+
+ <!--
+ publication on ivy web site
+ requires to be logged in on people.apache.org
+ -->
+ <available property="loggedin" file="/www/incubator.apache.org/ivy/index.html"/>
+ <target name="publish-latest" if="loggedin" description="publishes the last snapshot done to ivy web site">
+ <property name="html.dir" value="/www/incubator.apache.org/ivy/downloads/latest/"/>
+ <delete>
+ <fileset dir="${html.dir}"/>
+ </delete>
+ <copy todir="${html.dir}">
+ <fileset dir="${distrib.dir}"/>
+ </copy>
+ </target>
+
+</project>
\ No newline at end of file
Modified: incubator/ivy/core/trunk/build.properties
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.properties?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/build.properties (original)
+++ incubator/ivy/core/trunk/build.properties Tue Mar 27 00:08:50 2007
@@ -24,13 +24,13 @@
test.build.dir=${basedir}/build/test
artifacts.build.dir=${basedir}/build/artifact
distrib.dir=${basedir}/build/distrib
-doc.build.dir=${basedir}/doc/reports
+doc.build.dir=${basedir}/build/doc
+reports.dir=${doc.build.dir}/reports
test.xml.dir=${build.dir}/test-report
-test.report.dir=${doc.build.dir}/test
-javadoc.build.dir=${doc.build.dir}/api
-doc.src.dir=${basedir}/src/doc
-dxml.doc.file=${doc.src.dir}/ivy-book.xml
-raw.dxml.doc.file=${doc.src.dir}/ivy-raw-book.xml
+test.report.dir=${reports.dir}/test
+coverage.report.dir=${reports.dir}/coverage
+javadoc.build.dir=${reports.dir}/api
+doc.src.dir=${basedir}/doc
ivy.minimum.javaversion=1.4
debug.mode=on
Modified: incubator/ivy/core/trunk/build.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.xml?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/build.xml (original)
+++ incubator/ivy/core/trunk/build.xml Tue Mar 27 00:08:50 2007
@@ -110,6 +110,13 @@
<property name="offline" value="true" />
</target>
+ <target name="default-version">
+ <tstamp>
+ <format property="pubdate" pattern="yyyyMMddHHmmss"/>
+ </tstamp>
+ <property name="version.prefix" value="${target.ivy.version}-local-"/>
+ <property name="build.version" value="${version.prefix}${pubdate}"/>
+ </target>
<!-- =================================================================
DEPENDENCY MNGT, COMPILATION AND JAR
@@ -291,15 +298,15 @@
<target name="coverage-report" depends="emma, test-report" unless="skip.test"
description="run tests with instrumentation and generate coverage report">
- <mkdir dir="${doc.build.dir}/coverage" />
+ <mkdir dir="${coverage.report.dir}" />
<emma>
<report sourcepath="${src.dir}" >
<fileset dir="${coverage.dir}" >
<include name="*.emma" />
</fileset>
- <txt outfile="${doc.build.dir}/coverage/coverage.txt" />
- <html outfile="${doc.build.dir}/coverage/coverage.html" />
+ <txt outfile="${coverage.report.dir}/coverage.txt" />
+ <html outfile="${coverage.report.dir}/coverage.html" />
</report>
</emma>
</target>
@@ -308,97 +315,6 @@
<javadoc destdir="${javadoc.build.dir}">
<fileset dir="${src.dir}"/>
</javadoc>
- </target>
-
- <!-- =================================================================
- DISTRIBUTION
- ================================================================= -->
- <target name="zip-doc" depends="default-version" description="zip the documentation">
- <zip basedir="${basedir}/doc" destfile="${distrib.dir}/ivy-${build.version}-doc.zip"/>
- </target>
-
- <target name="snapshot-src" depends="default-version">
- <mkdir dir="${distrib.dir}"/>
- <zip destfile="${distrib.dir}/ivy-${build.version}-src.zip">
- <zipfileset dir="${src.dir}" prefix="ivy-${build.version}/src/java"/>
- <zipfileset dir="${basedir}/src/example" prefix="ivy-${build.version}/src/example"/>
- <zipfileset dir="${test.dir}" prefix="ivy-${build.version}/test/java"/>
- <zipfileset dir="${basedir}/test/repositories" prefix="ivy-${build.version}/test/repositories"/>
- <zipfileset dir="${basedir}/test/buildlist" prefix="ivy-${build.version}/test/buildlist"/>
- <zipfileset dir="${basedir}/test/triggers" prefix="ivy-${build.version}/test/triggers"/>
- <zipfileset dir="${basedir}/test/xsl" prefix="ivy-${build.version}/test/xsl"/>
- <zipfileset dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" fullpath="ivy-${build.version}/ivy.xsd"/>
- <zipfileset dir="${basedir}" includes="DISCLAIMER" fullpath="ivy-${build.version}/DISCLAIMER"/>
- <zipfileset dir="${basedir}" includes="LICENSE" fullpath="ivy-${build.version}/LICENSE"/>
- <zipfileset dir="${basedir}" includes="CHANGES.txt" fullpath="ivy-${build.version}/CHANGES.txt"/>
- <zipfileset dir="${basedir}" includes="ivysettings.xml" fullpath="ivy-${build.version}/ivysettings.xml"/>
- <zipfileset dir="${basedir}" includes="build.properties" fullpath="ivy-${build.version}/build.properties"/>
- <zipfileset dir="${basedir}" includes="ivy.xml" fullpath="ivy-${build.version}/ivy.xml"/>
-
- <zipfileset dir="${basedir}" includes="build.xml" fullpath="ivy-${build.version}/build.xml"/>
- </zip>
- </target>
-
- <target name="snapshot-bin" depends="default-version, jar">
- <mkdir dir="${distrib.dir}"/>
- <ivy:deliver
- deliverpattern="${distrib.dir}/ivy.xml"
- pubrevision="${build.version}"
- pubdate="${pubdate}"
- status="${status}"/>
- <zip destfile="${distrib.dir}/ivy-${build.version}-bin.zip">
- <zipfileset dir="${basedir}/src/example" prefix="ivy-${build.version}/src/example"/>
- <zipfileset dir="${basedir}" includes="DISCLAIMER" fullpath="ivy-${build.version}/DISCLAIMER"/>
- <zipfileset dir="${basedir}" includes="LICENSE" fullpath="ivy-${build.version}/LICENSE"/>
- <zipfileset dir="${basedir}" includes="CHANGES.txt" fullpath="ivy-${build.version}/CHANGES.txt"/>
- <zipfileset dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" fullpath="ivy-${build.version}/ivy.xsd"/>
- <zipfileset dir="${distrib.dir}" includes="ivy.xml" fullpath="ivy-${build.version}/ivy.xml"/>
-
- <zipfileset dir="${lib.dir}" prefix="ivy-${build.version}/lib" excludes="junit*.jar,ant*.jar" />
- <zipfileset dir="${artifacts.build.dir}" includes="${final.name}" fullpath="ivy-${build.version}/ivy-${build.version}.jar"/>
- <zipfileset dir="${artifacts.build.dir}" includes="${final.core.name}" fullpath="ivy-${build.version}/ivy-core-${build.version}.jar"/>
- </zip>
- <copy file="${basedir}/DISCLAIMER" todir="${distrib.dir}" />
- <copy file="${basedir}/LICENSE" todir="${distrib.dir}" />
- <copy file="${basedir}/CHANGES.txt" todir="${distrib.dir}" />
- <copy file="${artifacts.build.dir}/${final.name}" todir="${distrib.dir}" />
- <copy file="${artifacts.build.dir}/${final.core.name}" todir="${distrib.dir}" />
- <copy file="${src.dir}/org/apache/ivy/plugins/parser/xml/ivy.xsd" todir="${distrib.dir}" />
- </target>
-
- <target name="default-version">
- <tstamp>
- <format property="pubdate" pattern="yyyyMMddHHmmss"/>
- </tstamp>
- <property name="version.prefix" value="${target.ivy.version}-local-"/>
- <property name="build.version" value="${version.prefix}${pubdate}"/>
- </target>
-
- <target name="snapshot-version">
- <property name="version.prefix" value="${target.ivy.version}-dev-"/>
- </target>
-
- <target name="release-version">
- <input message="please enter version: " addproperty="build.version"/>
- <input message="please enter status: (integration,milestone,release)" addproperty="status"/>
- </target>
-
- <target name="snapshot" depends="clean, snapshot-version, coverage-report, snapshot-src, snapshot-bin, javadoc, zip-doc" description="used for nightly and integration builds"/>
- <target name="release" depends="release-version, snapshot" description="make a new release of Ivy"/>
-
- <!--
- publication on ivy web site
- requires to be logged in on people.apache.org
- -->
- <available property="loggedin" file="/www/incubator.apache.org/ivy/index.html"/>
- <target name="publish-latest" if="loggedin" description="publishes the last snapshot done to ivy web site">
- <property name="html.dir" value="/www/incubator.apache.org/ivy/downloads/latest/"/>
- <delete>
- <fileset dir="${html.dir}"/>
- </delete>
- <copy todir="${html.dir}">
- <fileset dir="${distrib.dir}"/>
- </copy>
</target>
Modified: incubator/ivy/core/trunk/doc/toc.json
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/doc/toc.json?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/doc/toc.json (original)
+++ incubator/ivy/core/trunk/doc/toc.json Tue Mar 27 00:08:50 2007
@@ -130,7 +130,7 @@
{
"id":"doc/releasenotes/older",
"title":"older versions",
- "abstract":true,
+ "isAbstract":true,
"children": [
{
"id":"doc/releasenotes/1.1",
Modified: incubator/ivy/core/trunk/doc/xooki/xooki.js
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/doc/xooki/xooki.js?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/doc/xooki/xooki.js (original)
+++ incubator/ivy/core/trunk/doc/xooki/xooki.js Tue Mar 27 00:08:50 2007
@@ -17,8 +17,19 @@
Some code is largely inspired by code found in the dojo toolkit,
see http://dojotoolkit.org/ for more information.
*/
+
+/*
+This script can be either embedded in a xooki page for in browser processing, or used in batch using rhino or java 6 javascript tool:
+jrunscript path/to/xooki.js [-noddtree] inputFileFromXookiSite.html [path/to/dir/to/put/generated/file]
+
+Be sure to be in the directory where the html input to process is when running this command.
+ */
+var batchMode = (typeof arguments != 'undefined');
+
var xooki = {};
xooki.console = ""; // used for debugging purpose only, and only when the debug div is not yet created
+xooki.config = {};
+xooki.c = xooki.config;
function t(msg) {
// returns the internationalized version of the message, or the message if no translation is available
@@ -47,7 +58,11 @@
function u(path) {
// convert a path relative to the root to a full URL
// u stands for Url
- return xooki.c.root + path;
+ if (batchMode) {
+ return xooki.c.relativeRoot+path;
+ } else {
+ return xooki.c.root + path;
+ }
}
function cu(urlCfgProp) {
// get a path from a configuration path and convert it to an URL
@@ -161,13 +176,13 @@
document.write('<' + 'script');
document.write(' language="javascript"');
document.write(' type="text/javascript"');
- document.write(' src="' + script_filename + '">');
+ document.write(' src="' + xooki.u(script_filename) + '">');
document.write('</' + 'script' + '>');
},
action: function(action) {
// returns the url for an action on the same page
- loc = window.location.toString();
+ loc = batchMode?'':xooki.pageURL;
if (loc.indexOf("#") != -1) {
loc = loc.substring(0, loc.indexOf("#"));
}
@@ -363,7 +378,7 @@
}
xooki.debug = function(message) {
- var console = document.getElementById('xooki-console');
+ var console = typeof document == 'undefined' ? false : document.getElementById('xooki-console');
if (console) {
console.value += message + "\n";
} else {
@@ -372,7 +387,7 @@
}
xooki.debugShowDetail = function (message) {
- var detail = document.getElementById('xooki-debug-detail');
+ var detail = typeof document == 'undefined' ? false : document.getElementById('xooki-debug-detail');
if (detail) {
detail.value=message;
} else {
@@ -391,12 +406,22 @@
},
pageLink: function(page) {
- if (page.abstract) {
+ if (page.isAbstract) {
return page.title;
} else {
return '<a href="'+pu(page.id)+'" '+(page.id == xooki.page.id?'class="current"':'')+'>'+page.title+'</a>';
}
- }
+ },
+
+ // insert the given header in the html head
+ // can be used only when the browser is still in the head !
+ addHeader: function(/* string */ head) {
+ document.write(head);
+ },
+
+ setBody: function( /* string */ body) {
+ document.body.innerHTML = body;
+ }
};
xooki.component = {
@@ -421,14 +446,16 @@
menu += '<li id="xooki-'+page.children[i].id+'">'+xooki.html.pageLink(page.children[i]);
smenu = arguments.callee(page.children[i]);
if (smenu != '') {
- menu += '<ul ';
if (smenu.indexOf('id="xooki-'+xooki.page.id+'"') != -1
|| page.children[i].id == xooki.page.id) {
// either a descendant or the node processed is the current page node
// we specify that the menu must be opened by default
- menu += 'rel="open"';
- }
- menu += '>'+smenu+'</ul>';
+ menu += '<ul rel="open"';
+ menu += '>'+smenu+'</ul>';
+ } else if (xooki.c.useddtree) {
+ menu += '<ul ';
+ menu += '>'+smenu+'</ul>';
+ }
}
menu += '</li>';
}
@@ -534,12 +561,14 @@
+ xooki.c.debugPanel;
}
- document.body.innerHTML = xooki.string.processTemplate(xooki.template.body, xooki.c);
+ xooki.html.setBody(xooki.string.processTemplate(xooki.template.body, xooki.c));
xooki.input.applyChanges();
- // enable dynamic tree menu
- ddtreemenu.createTree(css("treemenu"), false);
+ if (xooki.c.useddtree) {
+ // enable dynamic tree menu
+ ddtreemenu.createTree(css("treemenu"), false);
+ }
};
xooki.render.main = function() {
@@ -554,7 +583,7 @@
xooki.input = {
source: function() {
- if (document.getElementById('xooki-source') != null) {
+ if (typeof document != 'undefined' && document.getElementById('xooki-source') != null) {
this._source = document.getElementById('xooki-source').value;
}
return this._source;
@@ -582,6 +611,7 @@
}
filters = this.getInputFilters(format);
for (var i in filters) {
+ xooki.debug('processing filter '+filters[i]);
f = xooki.input.filters[filters[i]];
if (typeof f == "function") {
try {
@@ -718,6 +748,131 @@
window.onkeypress = keyCtrl;
};
+
+if (typeof xooki.io == "undefined") {
+ xooki.io = {};
+}
+
+if (batchMode) {
+ importPackage(java.io);
+
+ xooki.io.loadFile = function( url ) {
+ var str = '';
+ var r = new BufferedReader(new FileReader(url));
+ line = r.readLine();
+ while (line != null) {
+ str += line + '\n';
+ line = r.readLine();
+ }
+ r.close();
+ return str;
+ };
+
+ xooki.io.saveFile = function (fileUrl, content) {
+ p = new File(fileUrl).getParentFile();
+ if (p != null) {
+ p.mkdirs();
+ }
+ pw = new PrintWriter(new FileWriter(fileUrl));
+ pw.write(content);
+ pw.close();
+ return true;
+ }
+
+ xooki.url.loadURL = function( url ) {
+ return xooki.io.loadFile(url);
+ };
+
+ xooki.html.addHeader = function (head) {
+ xooki.pageContent = xooki.pageContent.replace(/<\/head>/, head+'\n</head>');
+ };
+
+ xooki.html.setBody = function(body) {
+ xooki.pageContent = xooki.pageContent.replace(/<body>(.|[^,])*<\/body>/gm, '<body>'+body+'</body>');
+ }
+
+ xooki.url.include = function(script_filename) {
+ xooki.html.addHeader('<script language="javascript" type="text/javascript" src="'+xooki.c.relativeRoot+'xooki/'+script_filename+'"></script>');
+ };
+
+ xooki.input.source = function() {
+ if (typeof this._source == 'undefined') {
+ xooki.debug('searching source');
+ var beg = xooki.pageContent.indexOf('<textarea id="xooki-source">');
+ beg += '<textarea id="xooki-source">'.length;
+ var end = xooki.pageContent.lastIndexOf('</textarea>');
+ this._source = xooki.pageContent.substring(beg, end);
+ xooki.debug('source found');
+ }
+ return this._source;
+ }
+
+ xooki.render.page = function() {
+ // realize all components available
+ xooki.debug('realizing components');
+ for (var k in xooki.component) {
+ xooki.c[k] = xooki.component[k]();
+ }
+
+ xooki.debug('processing body');
+ xooki.c.body = xooki.input.processed();
+
+ xooki.debug('updating body');
+ var body = xooki.string.processTemplate(xooki.template.body, xooki.c);
+ if (xooki.c.useddtree) {
+ body += '<script language="javascript" type="text/javascript">ddtreemenu.createTree("'+css("treemenu")+'", false);</script>';
+ }
+ xooki.html.setBody(body);
+ };
+
+ xooki.display = function(message, background) {
+ print(message);
+ };
+
+ xooki.debug = function (message) {
+ if (xooki.c.debug) {
+ print(message+'\n');
+ }
+ };
+ var i=0;
+ if (arguments.length > i && arguments[0] == '-noddtree') {
+ xooki.c.useddtree = false;
+ i++;
+ }
+
+ if (arguments.length > i && arguments[0] == '-debug') {
+ xooki.c.debug = true;
+ i++;
+ } else {
+ xooki.c.debug = false;
+ }
+
+ var file = 'index.html';
+ if (arguments.length > i) {
+ file = arguments[i];
+ i++;
+ }
+ var generateToDir = "gen";
+ if (arguments.length > i) {
+ generateToDir = arguments[i];
+ i++;
+ }
+
+ print('processing '+file+'...\n');
+ xooki.pageContent = xooki.io.loadFile(file);
+
+ var m = /var xookiConfig = {.*};/.exec(xooki.pageContent);
+ if (typeof m != 'undefined' && m != null) {
+ eval(m[0]);
+ }
+}
+
+if (batchMode) {
+ xooki.pageURL = new File(file).toURL().toExternalForm();
+} else {
+ xooki.pageURL = window.location.toString();
+}
+
// init xooki engine
(function() {
////////////////////////////////////////////////////////////////////////////
@@ -734,19 +889,26 @@
}
}
};
- xooki.config = {};
- xooki.c = xooki.config;
if (typeof xookiConfig != "undefined") {xooki.util.mix(xookiConfig, xooki.config);}
xooki.c.initProperty = initConfigProperty;
xooki.c.initProperty("level", 0);
xooki.c.initProperty("root", function() {
- root = window.location.toString();
+ root = xooki.pageURL;
// remove trailing parts of the URL to go the root depending on level
for (var i=0; i < xooki.c.level + 1; i++) {
root = root.substring(0, root.lastIndexOf('/'));
}
return root + '/';
});
+ xooki.c.initProperty("relativeRoot", function() {
+ relativeRoot = '';
+ for (var i=0; i < xooki.c.level; i++) {
+ relativeRoot += '../';
+ }
+ return relativeRoot;
+ });
+
+ xooki.c.initProperty("useddtree", true);
var globalConfig = xooki.json.loadURL(u("config.json"));
if (globalConfig != null) {
@@ -755,7 +917,7 @@
xooki.c.initProperty("defaultInputFormat", "xooki");
xooki.c.initProperty("xookiInputFormat", ["xooki"]);
- xooki.c.initProperty("allowEdit", document.location.toString().substr(0,5) == "file:");
+ xooki.c.initProperty("allowEdit", !batchMode && xooki.pageURL.substr(0,5) == "file:");
xooki.input.format.define("xooki", ["code", "shortcuts", "url", "xookiLinks", "jira", "lineBreak"]);
@@ -772,13 +934,15 @@
xooki.c.css = (typeof xooki.c.css != "undefined")?xooki.c.css:{};
xooki.c.messages = xooki.json.loadURL(cu("messages"));
- xooki.c.browser = {
- NS: (window.Event) ? 1 : 0
- };
-
- // action
- // TODO: better handle action extraction
- xooki.c.action = window.location.search == '?action=print'?'print':xooki.c.action;
+ if (!batchMode) {
+ xooki.c.browser = {
+ NS: (window.Event) ? 1 : 0
+ };
+
+ // action
+ // TODO: better handle action extraction
+ xooki.c.action = window.location.search == '?action=print'?'print':xooki.c.action;
+ }
////////////////////////////////////////////////////////////////////////////
////////////////// TOC init
@@ -833,7 +997,7 @@
}
};
- var match = new RegExp("^.*\\/((?:.*\\/){"+xooki.config.level+"}[^\\/]*)(?:\\.\\w+)(?:\\?.+)?$", "g").exec(window.location.toString());
+ var match = new RegExp("^.*\\/((?:.*\\/){"+xooki.config.level+"}[^\\/]*)(?:\\.\\w+)(?:\\?.+)?$", "g").exec(xooki.pageURL);
var curPageId;
if (match == null || match[1] == '') {
curPageId = "index";
@@ -858,26 +1022,30 @@
xooki.template.source = xooki.url.loadURL(xooki.c.action == "print"?cu("printTemplate"):cu("template"));
if(xooki.template.source != null) {
xooki.template.head = xooki.template.source.match(/<head>([^§]*)<\/head>/im)[1];
+ var root = batchMode?xooki.c.relativeRoot:xooki.c.root;
var head = xooki.string.processTemplate(xooki.template.head, xooki.config);
- head = head.replace(/href="([^\\$:"]+)"/g, 'href="'+xooki.c.root+'$1"');
- document.write(head);
+ head = head.replace(/href="([^\\$:"]+)"/g, 'href="'+root+'$1"');
+ xooki.html.addHeader(head);
var body = xooki.template.source.match(/<body>([^§]*)<\/body>/im)[1];
- body = body.replace(/href="([^\\$:"]+)"/g, 'href="'+xooki.c.root+'$1"');
- xooki.template.body = body.replace(/src="([^\\$:"]+)"/g, 'src="'+xooki.c.root+'$1"');
+ body = body.replace(/href="([^\\$:"]+)"/g, 'href="'+root+'$1"');
+ xooki.template.body = body.replace(/src="([^\\$:"]+)"/g, 'src="'+root+'$1"');
}
////////////////////////////////////////////////////////////////////////////
////////////////// includes
////////////////////////////////////////////////////////////////////////////
- xooki.url.include(xooki.u("tree/simpletreemenu.js"));
+ if (batchMode) {
+ xooki.html.addHeader('<script language="javascript" type="text/javascript">xooki = {u: function(url) {return "'+xooki.c.relativeRoot+'xooki/"+url;}};</script>');
+ }
+ xooki.url.include("tree/simpletreemenu.js");
if (xooki.c.useTrimPath) {
- xooki.url.include(xooki.u("trimpath/template.js"));
+ xooki.url.include("trimpath/template.js");
}
if (xooki.c.allowEdit) {
- xooki.url.include(xooki.u("xookiEdit.js"));
+ xooki.url.include("xookiEdit.js");
}
for (var k in xooki.c) {
@@ -920,3 +1088,13 @@
return false;
}
}
+
+if (batchMode) {
+ xooki.pageContent = xooki.pageContent.replace(/<script type="text\/javascript" src="[^"]*xooki.js"><\/script>/g, '');
+
+ xooki.render.page();
+
+ print('generating to '+generateToDir+'/'+file);
+ xooki.io.saveFile(generateToDir+'/'+file, xooki.pageContent);
+}
+