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/01/06 08:13:42 UTC
svn commit: r493433 - /incubator/ivy/trunk/doc/xooki/xooki.js
Author: xavier
Date: Sat Jan 6 00:13:41 2007
New Revision: 493433
URL: http://svn.apache.org/viewvc?view=rev&rev=493433
Log:
use async loading for printer friendly version
Modified:
incubator/ivy/trunk/doc/xooki/xooki.js
Modified: incubator/ivy/trunk/doc/xooki/xooki.js
URL: http://svn.apache.org/viewvc/incubator/ivy/trunk/doc/xooki/xooki.js?view=diff&rev=493433&r1=493432&r2=493433
==============================================================================
--- incubator/ivy/trunk/doc/xooki/xooki.js (original)
+++ incubator/ivy/trunk/doc/xooki/xooki.js Sat Jan 6 00:13:41 2007
@@ -1,5 +1,6 @@
/*
Copyright (c) 2006-2007, The Xooki project
+ http://xooki.sourceforge.net/
All Rights Reserved.
Licensed under the Apache License version 2.0.
@@ -130,6 +131,25 @@
}
return null;
},
+
+ asyncLoadURL: function( url, callback, obj ) {
+ var req = this.newXmlHttpRequest();
+ if(req) {
+ try {
+ req.open("GET", url, true);
+ req.onreadystatechange=function() {
+ if (req.readyState == 4) {
+ if (req.status == 200) {
+ callback(req.responseText, obj);
+ }
+ }
+ };
+ req.send("");
+ } catch (e) {
+ xooki.error(e, t("problem while loading URL ${0}", url));
+ }
+ }
+ },
include: function(script_filename) {
document.write('<' + 'script');
@@ -422,33 +442,45 @@
};
xooki.render = {};
+xooki.render.printerFriendlyAsyncLoader = function(source, arr) {
+ var root = arr[0];
+ var page = arr[1];
+ if (source == null) {
+ return;
+ }
+ var level = page.meta.level - root.meta.level + 1;
+
+ // compute printer friendly block
+ var beginIndex = source.indexOf('<textarea id="xooki-source">');
+ beginIndex += '<textarea id="xooki-source">'.length;
+ var endIndex = source.lastIndexOf('</textarea>');
+ source = source.substring(beginIndex, endIndex);
+
+ var printerFriendly = "<h"+level+">"+page.title+"</h"+level+">";
+ printerFriendly += xooki.input.format.main(source) + "<hr/>";
+ // inject block in page
+ var pf = document.getElementById('xooki-printerFriendly');
+ pf.innerHTML += printerFriendly;
+
+ // continue recursive loading
+ var nextPage = xooki.toc.getNextPage(page, root);
+ if (nextPage != null) {
+ xooki.url.asyncLoadURL(pu(nextPage.id), xooki.render.printerFriendlyAsyncLoader, [root, nextPage]);
+ }
+};
xooki.render.printerFriendly = function() {
for (var k in xooki.component) {
xooki.c[k] = xooki.component[k]();
}
xooki.c.body = xooki.c.messages
- + (function (page, level) {
- var source = xooki.url.loadURL(pu(page.id));
- if (source == null) {
- return "";
- }
- var beginIndex = source.indexOf('<textarea id="xooki-source">');
- beginIndex += '<textarea id="xooki-source">'.length;
- var endIndex = source.lastIndexOf('</textarea>');
- source = source.substring(beginIndex, endIndex);
-
- var printerFriendly = "<h"+level+">"+page.title+"</h"+level+">";
- printerFriendly += xooki.input.format.main(source);
- for (var i=0; i <page.children.length; i++) {
- printerFriendly += "<hr/>";
- printerFriendly += arguments.callee(page.children[i], level+1);
- }
- return printerFriendly;
- })(xooki.page, 1)
+ + "<div id='xooki-printerFriendly'></div>" // div where printer friendly content will be put
+ xooki.c.debugPanel;
document.body.innerHTML = xooki.string.processTemplate(xooki.template.body, xooki.c);
+
+ // start async loading of content
+ xooki.url.asyncLoadURL(pu(xooki.page.id), xooki.render.printerFriendlyAsyncLoader, [xooki.page, xooki.page]);
};
xooki.render.page = function() {
@@ -694,21 +726,52 @@
xooki.toc = xooki.json.loadURL(cu("toc"));
xooki.toc.pages = {}; // to store a by id map of pages objects
- (function(page, parent, index) {
+ // populate meta data
+ (function(page, parent, index, level) {
xooki.toc.pages[page.id] = page;
page.meta = {
parent: parent,
- index: index
+ index: index,
+ level: level
};
if (typeof page.children == 'undefined') {
page.children = [];
} else {
for (var i=0; i<page.children.length; i++) {
- arguments.callee(page.children[i], page, i); // recurse
+ arguments.callee(page.children[i], page, i, level+1); // recurse
}
}
- })(xooki.toc, null, 0);
+ })(xooki.toc, null, 0, -1);
+
+ xooki.toc.getNextPage = function(page, root) {
+ if (page.children.length > 0) {
+ return page.children[0];
+ } else if (page.meta.parent != null) {
+ var cur = page;
+ var next = xooki.toc.getNextSibling(cur);
+ while (next == null) {
+ cur = cur.meta.parent;
+ if (cur == null || cur == root) {
+ return null;
+ }
+ next = xooki.toc.getNextSibling(cur);
+ }
+ return next;
+ } else {
+ return null;
+ }
+ };
+ xooki.toc.getNextSibling = function(page) {
+ if (page.meta.parent == null) {
+ return null;
+ }
+ if (page.meta.parent.children.length > page.meta.index) {
+ return page.meta.parent.children[page.meta.index+1];
+ } else {
+ return null;
+ }
+ };
var match = new RegExp("^.*\\/((?:.*\\/){"+xooki.config.level+"}[^\\/]*)(?:\\.\\w+)(?:\\?.+)?$", "g").exec(window.location.toString());
var curPageId;