Author: michiel
Date: 2010-02-15 15:44:32 +0100 (Mon, 15 Feb 2010)
New Revision: 41003
Added:
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/javascript.jspxf
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.jspx
Log:
ported from trunk
Added:
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp
===================================================================
---
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp
(rev 0)
+++
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp
2010-02-15 14:44:32 UTC (rev 41003)
@@ -0,0 +1,168 @@
+// -*- mode: javascript; -*-
+/**
+ * Implicitely and temporary checks/uploads binaries.
+ * Based on ajax-fileupload
+ * (jquery-form is too hard to use, because it requires an entire
+ * form to be submitted).
+ */
+
+<%...@page contentType="text/javascript; charset=UTF-8"
+%><%...@taglib uri="http://www.mmbase.org/mmbase-taglib-2.0" prefix="mm"
+%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
+%><fmt:bundle basename="org.mmbase.resources.resources">
+<mm:content type="text/javascript" expires="0">
+
+
+
+function MMUploader() {
+ // Currently running uploads
+ this.uploading = {};
+ this.uploadingSize = 0;
+ this.statusElement = null;
+ this.uid = "";
+ this.transaction = null;
+ this.validator = null;
+
+}
+
+MMUploader.prototype.status = function(message, fadeout) {
+ var el = this.statusElement;
+ if (el != null) {
+ if (el.originalTextContent == null) el.originalTextContent =
el.textContent;
+ $(el).fadeTo("fast", 1);
+ $(el).empty();
+ $(el).append(message);
+ if (fadeout) {
+ var p = el;
+ $(el).fadeTo(4000, 0.1, function() {
+ $(p).empty(); $(p).append(p.originalTextContent); }
+ );
+ }
+ }
+}
+
+
+MMUploader.prototype.uploadProgress = function(fileid) {
+ if (this.statusElement != null) {
+ if (this.uploading[fileid]) {
+
$(this.statusElement).load("${mm:link('/mmbase/upload/progress.jspx')}");
+ }
+ }
+}
+
+/**
+ * Given an input[type=file], returns the node number which is represented in
it.
+ */
+MMUploader.prototype.getNodeForInput = function(input) {
+ var classesString = $(input).attr("class");
+ if (classesString != null) {
+ var classes = classesString.split(' ');
+ for (var i in classes) {
+ var cl = classes[i];
+ if (cl.indexOf("mm_n_") == 0) {
+ return cl.substring("mm_n_".length);
+ }
+ }
+ }
+ return null;
+}
+
+
+MMUploader.prototype.upload = function(fileid) {
+ var self = this;
+ if (self.uploading[fileid]) {
+ // uploading already
+ return;
+ }
+
+ var fileItem = $("#" + fileid);
+ if (fileItem.length == 0) {
+ throw "No fileitem " + fileid;
+ }
+ if (fileItem[0].type != 'file') {
+ // not a fileitem
+ return;
+ }
+ if (fileItem.val().length == 0) {
+ // no file selected;
+ return;
+ }
+
+ self.uploading[fileid] = true;
+ self.uploadingSize++;
+
+ // Remember event-handlers.
+ var events = fileItem.data('events');
+
+ var node = self.getNodeForInput(fileItem[0]);
+ var progress = function() {
+ self.uploadProgress(fileid);
+ if (self.uploading[fileid]) {
+ setTimeout(progress, 1000);
+ }
+ };
+ //progress();
+ if (self.validator != null) {
+ self.validator.removeValidationFromElement(fileItem[0]);
+ } else {
+ //console.log("Validator not set");
+ }
+
+ $.ajaxFileUpload ({
+ url: "${mm:link('/mmbase/upload/upload.jspx')}" + "?uid=" +
self.uid + "&name=" + fileItem.attr("name") + "&n=" + node + "&transaction=" +
self.transaction,
+ secureuri: false,
+ fileElementId: fileid,
+ dataType: 'xml',
+ success: function (data, status) {
+ if(typeof(data.error) != 'undefined') {
+ if(data.error != '') {
+ alert(data.error);
+ } else {
+ alert(data.msg);
+ }
+ } else {
+ try {
+ var fileItem = $("#" + fileid);
+ fileItem.val(null);
+ fileItem.prevAll(".mm_gui").remove();
+ fileItem.prevAll("input[type=hidden]").remove();
+
+ var created = $(data).find("div.fieldgui .mm_gui,
div.fieldgui input[type=hidden]");
+ fileItem.before(created);
+ var name = $(fileItem).attr("name");
+ if (! name.indexOf("MMU_") == 0) {
+ name = "MMU_" + name;
+ $(fileItem).attr("name", name);
+ }
+
+ // Rebind event handlers:
+ for (var event in events) {
+ for (var key in events[event]) {
+ $(fileItem).bind(event, events[event][key]);
+ }
+ }
+ if (self.validator != null) {
+ self.validator.addValidationForElements(fileItem);
+ }
+
+
+ } catch (e) {
+ alert(e);
+ }
+
+ }
+ delete self.uploading[fileid];
+ self.uploadingSize--;
+ self.status('<fmt:message key="uploaded" />', true);
+ },
+ error: function (data, status, e) {
+ alert(e);
+ delete self.uploading[fileid];
+ self.uploadingSize--;
+ }
+ }
+ );
+ return false;
+}
+</mm:content></fmt:bundle>
+
Added:
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/javascript.jspxf
===================================================================
---
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/javascript.jspxf
(rev 0)
+++
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/javascript.jspxf
2010-02-15 14:44:32 UTC (rev 41003)
@@ -0,0 +1,15 @@
+<jsp:root
+ version="2.0"
+ xmlns:jsp="http://java.sun.com/JSP/Page"
+ xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0" >
+ <mm:include page="/mmbase/jquery/ajaxfileupload.jspx" />
+ <mm:context>
+ <mm:import id="__javascript_validation" from="request"
externid="org.mmbase.upload" />
+ <mm:isempty referid="__javascript_validation">
+ <mm:link page="/mmbase/upload/MMUpload.js.jsp">
+ <script src="${_}" type="text/javascript"><!-- help IE --></script>
+ </mm:link>
+ <mm:write request="org.mmbase.upload" value="yes" />
+ </mm:isempty>
+ </mm:context>
+</jsp:root>
Added:
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx
===================================================================
---
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx
(rev 0)
+++
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx
2010-02-15 14:44:32 UTC (rev 41003)
@@ -0,0 +1,37 @@
+<jsp:root version="2.0"
+ xmlns:jsp="http://java.sun.com/JSP/Page"
+ xmlns:c="http://java.sun.com/jsp/jstl/core"
+ xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0"
+ >
+ <jsp:directive.page
import="java.io.*,org.mmbase.servlet.*,org.mmbase.datatypes.handlers.html.MultiPart"
/>
+ <jsp:scriptlet>
+ File dir = new File(FileServlet.getDirectory(), "uploads");
+ dir.mkdirs();
+
+ MultiPart.MMultipartRequest multipart =
MultiPart.getMultipartRequest((HttpServletRequest) pageContext.getRequest(),
+ (HttpServletResponse) pageContext.getResponse());
+
+ org.mmbase.util.SerializableInputStream is =
multipart.getInputStream(name);
+ if (uid.length() > 0) {
+ uid = "." + uid;
+ }
+ File f = new File(dir, cloud.getUser().getIdentifier() + uid + "." + n +
"." + name + "." + is.getName());
+ FileServlet.protectFile((HttpServletRequest) pageContext.getRequest(), f);
+ OutputStream o = new FileOutputStream(f);
+ org.mmbase.util.IOUtil.copy(is, o);
+ o.close();
+ pageContext.setAttribute("fileurl", f.toURL());
+ </jsp:scriptlet>
+ <mm:node number="${n}" commitonclose="false" jspvar="node">
+ <jsp:scriptlet>node.setValue(field, new
org.mmbase.util.SerializableInputStream(f, is.getName()));</jsp:scriptlet>
+ <div class="nodegui">
+ <mm:nodeinfo type="gui" />
+ </div>
+ <div class="fieldgui">
+ <mm:field name="${field}">
+ <input type="hidden" name="${name}" value="${mm:escape('text/xml',
fileurl)}" />
+ <mm:fieldinfo type="guivalue" />
+ </mm:field>
+ </div>
+ </mm:node>
+</jsp:root>
Added:
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.jspx
===================================================================
---
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.jspx
(rev 0)
+++
mmbase/branches/MMBase-1_9/base-webapp/src/main/webapp/mmbase/upload/upload.jspx
2010-02-15 14:44:32 UTC (rev 41003)
@@ -0,0 +1,27 @@
+<div
+ xmlns:jsp="http://java.sun.com/JSP/Page"
+ xmlns:c="http://java.sun.com/jsp/jstl/core"
+ xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0"
+ >
+ <mm:content type="text/html">
+ <jsp:directive.page
import="java.io.*,org.mmbase.servlet.*,org.mmbase.datatypes.handlers.html.MultiPart"
/>
+ <jsp:output omit-xml-declaration="true" />
+ <mm:cloud method="asis" jspvar="cloud">
+ <mm:import externid="uid" jspvar="uid"/>
+ <mm:import externid="name" required="true" jspvar="name"/>
+ <mm:import externid="n" required="true" jspvar="n"/>
+ <mm:import externid="field" jspvar="field">handle</mm:import>
+ <mm:import externid="transaction" />
+ <c:choose>
+ <c:when test="${empty transaction}">
+ <jsp:directive.include file="upload.body.jspx" />
+ </c:when>
+ <c:otherwise>
+ <mm:transaction commitonclose="false" name="${transaction}">
+ <jsp:directive.include file="upload.body.jspx" />
+ </mm:transaction>
+ </c:otherwise>
+ </c:choose>
+ </mm:cloud>
+ </mm:content>
+</div>
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs