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