001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2005 Danet GmbH (www.danet.de), BU BTS.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: HtmlLinkCssStylesheetRenderer.java,v 1.3 2006/11/01 16:15:32 mlipp Exp $
021: *
022: * $Log: HtmlLinkCssStylesheetRenderer.java,v $
023: * Revision 1.3 2006/11/01 16:15:32 mlipp
024: * Make our JSF components depend on tomahawk only.
025: *
026: * Revision 1.2 2006/09/29 12:32:09 drmlipp
027: * Consistently using WfMOpen as projct name now.
028: *
029: * Revision 1.1 2006/09/14 13:34:12 drmlipp
030: * Component for linking stylesheet added.
031: *
032: */
033: package de.danet.an.util.jsf.taglib;
034:
035: import java.io.IOException;
036: import java.util.Map;
037:
038: import javax.faces.component.UIComponent;
039: import javax.faces.context.FacesContext;
040: import javax.faces.context.ResponseWriter;
041: import javax.faces.render.Renderer;
042:
043: import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
044:
045: /**
046: * This class provides a renderer for the HtmlLinkCssStylesheet component.
047: *
048: * @author Michael Lipp
049: */
050: public class HtmlLinkCssStylesheetRenderer extends Renderer {
051:
052: private static String SCRIPT_RENDERED = HtmlLinkCssStylesheetRenderer.class
053: .getName()
054: + "_SCRIPT_RENDERED";
055:
056: /* (non-Javadoc)
057: * @see javax.faces.render.Renderer#encodeEnd(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
058: */
059: public void encodeEnd(FacesContext context, UIComponent component)
060: throws IOException {
061: super .encodeEnd(context, component);
062: HtmlLinkCssStylesheet comp = (HtmlLinkCssStylesheet) component;
063: ResponseWriter writer = context.getResponseWriter();
064: Map requestMap = context.getExternalContext().getRequestMap();
065: if (!requestMap.containsKey(SCRIPT_RENDERED)) {
066: writer.startElement(HTML.SCRIPT_ELEM, null);
067: writer.writeAttribute(HTML.SCRIPT_TYPE_ATTR,
068: HTML.SCRIPT_TYPE_TEXT_JAVASCRIPT, null);
069: writer
070: .write("function de_danet_an_util_jsf_taglib_condAddStyle (uri) {\n");
071: writer
072: .write(" if (!document.getElementsByTagName(\"head\")) {\n");
073: writer.write(" return;\n");
074: writer.write(" }\n");
075: writer
076: .write(" var head = document.getElementsByTagName(\"head\")[0];\n");
077: writer
078: .write(" var links = head.getElementsByTagName(\"link\");\n");
079: writer.write(" var found = false;\n");
080: writer.write(" for (i = 0; i < links.length; i++) {\n");
081: writer.write(" var child = links[i];\n");
082: writer
083: .write(" if (child.nodeType == 1 "
084: + "&& child.getAttribute(\"rel\") == \"stylesheet\" "
085: + "&& child.getAttribute(\"type\") == \"text/css\" "
086: + "&& child.getAttribute(\"src\") == uri) {\n");
087: writer.write(" found = true;\n");
088: writer.write(" break;\n");
089: writer.write(" }\n");
090: writer.write(" }\n");
091: writer.write(" if(!found) {\n");
092: writer
093: .write(" var styleRef = document.createElement(\"link\");\n");
094: writer
095: .write(" styleRef.setAttribute (\"rel\", \"stylesheet\");\n");
096: writer
097: .write(" styleRef.setAttribute (\"type\", \"text/css\");\n");
098: writer
099: .write(" styleRef.setAttribute (\"href\", uri);\n");
100: writer.write(" head.appendChild (styleRef);\n");
101: writer.write(" }\n");
102: writer.write("}\n");
103: writer.endElement(HTML.SCRIPT_ELEM);
104: requestMap.put(SCRIPT_RENDERED, Boolean.TRUE);
105: }
106: String stylesheet = (String) comp.getStylesheet();
107: String uri = context.getApplication().getViewHandler()
108: .getResourceURL(context, stylesheet);
109: uri = context.getExternalContext().encodeResourceURL(uri);
110: writer.startElement(HTML.SCRIPT_ELEM, null);
111: writer.writeAttribute(HTML.SCRIPT_TYPE_ATTR,
112: HTML.SCRIPT_TYPE_TEXT_JAVASCRIPT, null);
113: writer.write("de_danet_an_util_jsf_taglib_condAddStyle(\""
114: + uri + "\");\n");
115: writer.endElement(HTML.SCRIPT_ELEM);
116: }
117:
118: }
|