[Yanel-commits] rev 23241 -
public/yanel/trunk/src/core/java/org/wyona/yanel/servlet
josias at wyona.com
josias at wyona.com
Tue Mar 13 14:29:08 CET 2007
Author: josias
Date: 2007-03-13 14:29:06 +0100 (Tue, 13 Mar 2007)
New Revision: 23241
Modified:
public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
fix toolbar menu for IE, fix mimetype of .htc files, and fix mimetype of login/error pages for IE. see bug #5205, thanks to simon
Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java 2007-03-13 12:44:44 UTC (rev 23240)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java 2007-03-13 13:29:06 UTC (rev 23241)
@@ -71,6 +71,7 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.io.FilenameUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -211,6 +212,8 @@
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
+ String mimeType = guessMimeType(FilenameUtils.getExtension(globalFile.getName()));
+ response.setHeader("Content-Type", mimeType);
return;
} else {
log.error("No such file or directory: " + globalFile);
@@ -248,6 +251,28 @@
throw new ServletException(e.getMessage(), e);
}
}
+
+ /**
+ * Returns the mime-type according to the given file extension.
+ * Default is application/octet-stream.
+ * @param extension
+ * @return
+ */
+ private String guessMimeType(String extension) {
+ String ext = extension.toLowerCase();
+ if (ext.equals("html") || ext.equals("htm")) return "text/html";
+ if (ext.equals("css")) return "text/css";
+ if (ext.equals("txt")) return "text/plain";
+ if (ext.equals("js")) return "application/x-javascript";
+ if (ext.equals("jpg") || ext.equals("jpg")) return "image/jpeg";
+ if (ext.equals("gif")) return "image/gif";
+ if (ext.equals("pdf")) return "application/pdf";
+ if (ext.equals("zip")) return "application/zip";
+ if (ext.equals("htc")) return "text/x-component";
+ // TODO: add more mime types
+ // TODO: and move to MimeTypeUtil
+ return "application/octet-stream"; // default
+ }
/**
* Get view of resource
@@ -1539,8 +1564,8 @@
javax.xml.transform.TransformerFactory.newInstance().newTransformer().transform(new javax.xml.transform.dom.DOMSource(doc), new javax.xml.transform.stream.StreamResult(out));
out.close();
} else {
- // TODO: Use patchMimeType() !
- response.setContentType("application/xhtml+xml; charset=" + DEFAULT_ENCODING);
+ String mimeType = patchMimeType("application/xhtml+xml", request);
+ response.setContentType(mimeType + "; charset=" + DEFAULT_ENCODING);
// create identity transformer which serves as a dom-to-sax transformer
TransformerIdentityImpl transformer = new TransformerIdentityImpl();
@@ -1634,7 +1659,8 @@
javax.xml.transform.TransformerFactory.newInstance().newTransformer().transform(new javax.xml.transform.dom.DOMSource(doc), new javax.xml.transform.stream.StreamResult(out));
out.close();
} else {
- response.setContentType("application/xhtml+xml; charset=" + DEFAULT_ENCODING);
+ String mimeType = patchMimeType("application/xhtml+xml", request);
+ response.setContentType(mimeType + "; charset=" + DEFAULT_ENCODING);
response.setStatus(javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED);
Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xsltLoginScreen));
transformer.transform(new javax.xml.transform.dom.DOMSource(doc),
@@ -1714,7 +1740,7 @@
sb.append("<ul><li>");
sb.append("<h2>Edit</h2><ul>");
- sb.append("<li>Open</li>");
+ sb.append("<li>Open<ul><li>test</li></ul></li>");
sb.append("</ul></li></ul>");
sb.append("<ul><li>");
@@ -1733,7 +1759,35 @@
*/
private String getToolbarHeader(Resource resource, HttpServletRequest request) throws Exception {
String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
- return "<link type=\"text/css\" href=\"" + backToRealm + reservedPrefix + "/toolbar.css\" rel=\"stylesheet\"/>";
+ StringBuffer sb= new StringBuffer();
+
+ sb.append("<link type=\"text/css\" href=\"" + backToRealm + reservedPrefix + "/toolbar.css\" rel=\"stylesheet\"/>");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("<!--[if gte IE 6]>");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("<link rel=\"stylesheet\" href=\"" + backToRealm + reservedPrefix + "/ie6.css\" type=\"text/css\">");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("<style type=\"text/css\" media=\"screen\">");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("#menu{float:none;} /* This is required for IE to avoid positioning bug when placing content first in source. */");
+ sb.append(System.getProperty("line.separator"));
+ sb.append(" /* IE Menu CSS */");
+ sb.append(System.getProperty("line.separator"));
+ sb.append(" /* csshover.htc file version: V1.21.041022 - Available for download from: http://www.xs4all.nl/~peterned/csshover.html */");
+ sb.append(System.getProperty("line.separator"));
+ sb.append(" body{behavior:url(" + backToRealm + reservedPrefix + "/csshover.htc);");
+ sb.append(System.getProperty("line.separator"));
+ sb.append(" font-size:100%; /* to enable text resizing in IE */");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("}");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("#menu ul li{float:left;width:100%;}");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("</style>");
+ sb.append(System.getProperty("line.separator"));
+ sb.append("<![endif]-->");
+ sb.append(System.getProperty("line.separator"));
+ return sb.toString();
}
/**
More information about the Yanel-commits
mailing list