<#@ page import='com.caucho.web.* com.caucho.vfs.* com.caucho.server.http.*' #> <#@ page import='javax.servlet.jsp.*' #> <#@ page import='javax.servlet.*' #> <#@ page import='javax.servlet.http.*' #> <#@ cache #> <#! String top = "/"; String title = null; Navigation nav = null; String topnav(Object a, Object b, Object c) { return ""; } void initNavigation(XslWriter out) throws Exception { PageContext page = (PageContext) out.getProperty("caucho.page.context"); ServletContext app = page.getServletContext(); HttpServletRequest req = (HttpServletRequest) page.getRequest(); String url = req.getRequestURI(); int p = url.lastIndexOf('/'); String base = url.substring(0, p); ArrayList paths = new ArrayList(); while (p >= 0) { String prefix = url.substring(0, p + 1); CauchoApplication subapp = (CauchoApplication) app.getContext(prefix); String rel = prefix.substring(subapp.getContextPath().length()); String realPath = subapp.getRealPath(rel); Path path = ((Path) out.getProperty("caucho.pwd")).lookupNative(realPath); paths.add(path); if (path.lookup("toc.xml").exists()) out.addCacheDepend(path.lookup("toc.xml")); p = url.lastIndexOf('/', p - 1); } nav = Navigation.createNested(paths, base); if (nav == null) nav = new Navigation(); top = req.getContextPath(); if (! top.endsWith("/")) top = top + "/"; } void writeThreaded(XslWriter out, boolean allowComments) throws IOException, SAXException { PageContext page = out.getPage(); HttpServletRequest req = (HttpServletRequest) page.getRequest(); NavItem item = nav.findURL(req.getRequestURI()); if (item == null) return; out.pushElement("table"); out.setAttribute("border", "0"); out.setAttribute("cellspacing", "0"); out.setAttribute("width", "100%"); out.pushElement("tr"); out.pushElement("td"); NavItem prev = item.getPreviousPreorder(); if (prev == null) out.print(" "); else { out.pushElement("a"); out.setAttribute("href", prev.getLink()); out.print(prev.getTitle()); out.popElement(); } out.popElement(); if (item.getParent() != null) { NavItem parent = item.getParent(); out.pushElement("td"); out.setAttribute("width", "100%"); out.pushElement("center"); out.pushElement("a"); out.setAttribute("href", parent.getLink()); out.print(parent.getTitle()); out.popElement(); out.popElement(); out.popElement(); } else { out.pushElement("td"); out.setAttribute("width", "100%"); out.print(" "); out.popElement(); } out.pushElement("td"); out.setAttribute("align", "right"); NavItem next = item.getNextPreorder(); if (next == null) out.print(" "); else { out.pushElement("a"); out.setAttribute("href", next.getLink()); out.print(next.getTitle()); out.popElement(); } out.popElement(); out.popElement(); out.popElement(); } void writeFamilyNavigation(XslWriter out) throws IOException, SAXException { PageContext page = (PageContext) out.getProperty("caucho.page.context"); HttpServletRequest req = (HttpServletRequest) page.getRequest(); NavItem item = nav.findURL(req.getRequestURI()); ArrayList list = null; if (item != null) list = item.familyNavigation(); if (list == null || list.size() == 0) return; for (int i = 0; i < list.size(); i++) { NavItem child = (NavItem) list.get(i); if (child == null) { out.pushElement("tr"); out.pushElement("td"); out.pushElement("hr"); out.popElement(); out.popElement(); out.popElement(); } else { out.pushElement("tr"); out.pushElement("td"); String link = child.getLink(); out.pushElement("a"); out.setAttribute("class", "leftnav"); out.setAttribute("href", link); out.println(child.getTitle()); out.popElement(); out.popElement(); out.popElement(); } } } void topnav(XslWriter out, String name, String href) throws IOException, SAXException { out.pushElement("img"); out.setAttribute("name", name); out.setAttribute("src", "/images/pixel.gif"); out.setAttribute("alt", ""); out.setAttribute("width", "8"); out.setAttribute("height", "8"); out.popElement(); out.println(" "); out.pushElement("a"); out.setAttribute("class", "topnav"); out.setAttribute("href", top + href); out.println(name); out.popElement(); } void printDescription(XslWriter out, Node node, int count) throws IOException, SAXException, XPathException { CharBuffer cb = CharBuffer.allocate(); Iterator iter = XPath.select(".//text()|.//resin|.//resintm", node); while (iter.hasNext()) { Node subnode = (Node) iter.next(); if (subnode.getNodeName().equals("#text")) { String str = subnode.getNodeValue(); for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch == '<') cb.append("&"); else if (ch != '"' && ch != '\'') cb.append(ch); } } else if (subnode.getNodeName().equals("resin")) cb.append("Resin"); else if (subnode.getNodeName().equals("resintm")) cb.append("Resin(tm)"); if (cb.length() >= count) break; } if (cb.length() > count) cb.setLength(count); if (cb.length() > 0) { out.pushElement("meta"); out.setAttribute("name", "description"); out.setAttribute("content", cb.close()); out.popElement(); } } #> html << <# initNavigation(out); title = XPath.evalString("head/title", node); if (title == null) title = ""; #> $(head/title/@section)<#= title #> /css/default.css $if (head/title/@description) << >> $else $if (head/meta[@name="description"]) << >> $else << <# printDescription(out, XPath.find("/html/body", node), 256); #> >> $for-each(head/meta) << $copy() << $apply-templates(@*|node()); >> >> >> html/body << /images/background.gif
<# writeFamilyNavigation(out); #>
caucho /images/caucho.gif
/images/pixel.gif top navigation
/images/hbleed.gif  
      <{.}>

      By <{.}>
/images/pixel.gif
<# if (nav != null && nav.getAttribute("threaded").equals("true")) { writeThreaded(out, false); out.pushElement("hr"); out.popElement(); } #>
<# if (nav != null && nav.getAttribute("threaded").equals("true")) writeThreaded(out, true); #>
Copyright © 1998-2002 Caucho Technology. All rights reserved.
Copyright © 1998-2002 Caucho Technology, Inc. All rights reserved.
Resin® is a registered trademark, and HardCoretm and Quercustm are trademarks of Caucho Technology, Inc.
/images/logo.gif
>>