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

Reply via email to