Author: michiel
Date: 2010-01-25 16:12:21 +0100 (Mon, 25 Jan 2010)
New Revision: 40719

Added:
   mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp
   mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx
   mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.jspx
Log:
generalized some upload functionality from S&R to here

Added: mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp
===================================================================
--- mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp      
                        (rev 0)
+++ mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/MMUpload.js.jsp      
2010-01-25 15:12:21 UTC (rev 40719)
@@ -0,0 +1,133 @@
+// -*- mode: javascript; -*-
+<%...@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;
+}
+
+
+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 classes = $(input).attr("class").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;
+    }
+
+    self.uploading[fileid] = true;
+    self.uploadingSize++;
+    var fileItem = $("#" + fileid);
+
+    // 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();
+
+    $.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]);
+                            }
+                        }
+
+                    } 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/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx
===================================================================
--- mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx     
                        (rev 0)
+++ mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.body.jspx     
2010-01-25 15:12:21 UTC (rev 40719)
@@ -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 + "." + 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>

Copied: mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.jspx 
(from rev 40710, 
mmbase/trunk/applications/searchrelate/src/main/webapp/mmbase/searchrelate/list/upload.body.jspx)
===================================================================
--- mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.jspx          
                (rev 0)
+++ mmbase/trunk/base-webapp/src/main/webapp/mmbase/upload/upload.jspx  
2010-01-25 15:12:21 UTC (rev 40719)
@@ -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