Author: konstantin.mishin
Date: 2010-12-06 10:35:45 -0500 (Mon, 06 Dec 2010)
New Revision: 20406
Added:
trunk/examples/input-demo/src/main/java/org/richfaces/demo/FileUploadBean.java
trunk/examples/input-demo/src/main/webapp/examples/fileupload.xhtml
trunk/ui/input/api/src/main/java/org/richfaces/event/FileUploadListener.java
trunk/ui/input/api/src/main/java/org/richfaces/event/UploadEvent.java
trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractFileUpload.java
trunk/ui/input/ui/src/main/java/org/richfaces/context/
trunk/ui/input/ui/src/main/java/org/richfaces/exception/
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/FileUploadRendererBase.java
trunk/ui/input/ui/src/main/java/org/richfaces/request/
trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/FileUploadHandler.java
trunk/ui/input/ui/src/main/resources/META-INF/fileupload.faces-config.xml
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.ecss
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.js
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-add-dis.gif
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-add.gif
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-clr.gif
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-upl.gif
trunk/ui/input/ui/src/main/templates/fileupload.template.xml
Modified:
trunk/examples/input-demo/pom.xml
trunk/examples/input-demo/src/main/webapp/WEB-INF/faces-config.xml
trunk/examples/input-demo/src/main/webapp/WEB-INF/web.xml
trunk/examples/input-demo/src/main/webapp/templates/template.xhtml
trunk/ui/input/ui/src/main/resources/META-INF/richfaces/resource-mappings.properties
Log:
RF-9927
Modified: trunk/examples/input-demo/pom.xml
===================================================================
--- trunk/examples/input-demo/pom.xml 2010-12-06 15:27:17 UTC (rev 20405)
+++ trunk/examples/input-demo/pom.xml 2010-12-06 15:35:45 UTC (rev 20406)
@@ -108,6 +108,10 @@
<artifactId>richfaces-ui-input-ui</artifactId>
</dependency>
<dependency>
+ <groupId>org.richfaces.ui.output</groupId>
+ <artifactId>richfaces-ui-output-ui</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.richfaces.ui.core</groupId>
<artifactId>richfaces-ui-core-ui</artifactId>
</dependency>
Copied: trunk/examples/input-demo/src/main/java/org/richfaces/demo/FileUploadBean.java
(from rev 20389,
trunk/examples/misc-demo/src/main/java/org/richfaces/demo/FileUploadBean.java)
===================================================================
--- trunk/examples/input-demo/src/main/java/org/richfaces/demo/FileUploadBean.java
(rev 0)
+++
trunk/examples/input-demo/src/main/java/org/richfaces/demo/FileUploadBean.java 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.demo;
+
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.SessionScoped;
+import javax.faces.component.UIComponent;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.AjaxBehaviorEvent;
+
+import org.richfaces.event.UploadEvent;
+import org.richfaces.model.UploadItem;
+
+/**
+ * @author Konstantin Mishin
+ *
+ */
+@ManagedBean
+@SessionScoped
+public class FileUploadBean {
+
+ private String acceptedTypes;
+ private boolean enabled = true;
+ private boolean noDuplicate = false;
+ private UploadItem item;
+
+ public UploadItem getItem() {
+ return item;
+ }
+
+// public void paint(OutputStream stream, Object object) throws IOException {
+// stream.write(item.getData());
+// }
+
+ public void listener(UploadEvent event) throws Exception {
+ item = event.getUploadItem();
+ if (item != null) {
+ item.getFile().delete();
+ }
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setNoDuplicate(boolean noDuplicate) {
+ this.noDuplicate = noDuplicate;
+ }
+
+ public boolean isNoDuplicate() {
+ return noDuplicate;
+ }
+
+ public void setAcceptedTypes(String acceptedTypes) {
+ this.acceptedTypes = acceptedTypes;
+ }
+
+ public String getAcceptedTypes() {
+ return acceptedTypes;
+ }
+
+ public void updateAttribute(AjaxBehaviorEvent event) throws AbortProcessingException
{
+ UIComponent component = (UIComponent) event.getSource();
+ String attributeName = (String)
component.findComponent("name").getAttributes().get("value");
+ Object attributeValue =
component.findComponent("value").getAttributes().get("value");
+ component.findComponent("fu").getAttributes().put(attributeName,
attributeValue);
+ }
+}
Modified: trunk/examples/input-demo/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- trunk/examples/input-demo/src/main/webapp/WEB-INF/faces-config.xml 2010-12-06 15:27:17
UTC (rev 20405)
+++ trunk/examples/input-demo/src/main/webapp/WEB-INF/faces-config.xml 2010-12-06 15:35:45
UTC (rev 20406)
@@ -31,6 +31,10 @@
<from-outcome>calendar</from-outcome>
<to-view-id>/examples/calendar.xhtml</to-view-id>
</navigation-case>
+ <navigation-case>
+ <from-outcome>fileUpload</from-outcome>
+ <to-view-id>/examples/fileupload.xhtml</to-view-id>
+ </navigation-case>
<!-- QUnit -->
Modified: trunk/examples/input-demo/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/examples/input-demo/src/main/webapp/WEB-INF/web.xml 2010-12-06 15:27:17 UTC (rev
20405)
+++ trunk/examples/input-demo/src/main/webapp/WEB-INF/web.xml 2010-12-06 15:35:45 UTC (rev
20406)
@@ -39,6 +39,10 @@
<display-name></display-name>
<description></description>
<context-param>
+ <param-name>org.richfaces.fileUpload.maxRequestSize</param-name>
+ <param-value>268435456</param-value>
+ </context-param>
+ <context-param>
<param-name>org.richfaces.skin</param-name>
<param-value>#{skinBean.skin}</param-value>
</context-param>
Copied: trunk/examples/input-demo/src/main/webapp/examples/fileupload.xhtml (from rev
20389, trunk/examples/misc-demo/src/main/webapp/pages/fileupload.xhtml)
===================================================================
--- trunk/examples/input-demo/src/main/webapp/examples/fileupload.xhtml
(rev 0)
+++ trunk/examples/input-demo/src/main/webapp/examples/fileupload.xhtml 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,101 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml"
+
xmlns:h="http://java.sun.com/jsf/html"
+
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:ui="http://java.sun.com/jsf/facelets"
+
xmlns:a4j="http://richfaces.org/a4j"
+
xmlns:fu="http://richfaces.org/input">
+<!--
+JBoss, Home of Professional Open Source
+Copyright ${year}, Red Hat, Inc. and individual contributors
+by the @authors tag. See the copyright.txt in the distribution for a
+full listing of individual contributors.
+
+
+This is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation; either version 2.1 of
+the License, or (at your option) any later version.
+
+
+This software is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+
+You should have received a copy of the GNU Lesser General Public
+License along with this software; if not, write to the Free
+Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+-->
+ <h:head>
+ <title>Richfaces FileUpload Demo</title>
+ <style>
+ <!--
+ .fu .rf-fu-lst {
+ height: 500px;
+ }
+ -->
+ </style>
+ </h:head>
+ <h:body>
+ <h:form id="form">
+ <h:outputText value="Skin: "/>
+ <h:selectOneMenu value="#{skinBean.skin}"
onchange="submit();">
+ <f:selectItems value="#{skinBean.skins}"/>
+ </h:selectOneMenu>
+ <br />
+ <script type="text/javascript">
+ <!--
+ var onfilesubmit = function (event) {
+ var data = event.rf.data;
+ RichFaces.log.info(jQuery("<span><b>onfilesubmit: </b>" +
data.name + " " + data.state + "</span>"));
+ };
+
+ var onuploadcomplete = function (event) {
+ var data = event.rf.data;
+ var str = "";
+ RichFaces.log.info(jQuery("<b>onuploadcomplete:</b>"));
+ for (var i in data) {
+ var item = data[i];
+ RichFaces.log.info(" " + item.name + " " + item.state);
+ }
+ };
+ //-->
+ </script>
+ <fu:fileUpload id="fu"
acceptedTypes="#{fileUploadBean.acceptedTypes}"
enabled="#{fileUploadBean.enabled}"
+ fileUploadListener="#{fileUploadBean.listener}"
noDuplicate="#{fileUploadBean.noDuplicate}"
+ onfilesubmit="onfilesubmit(event)"
onuploadcomplete="onuploadcomplete(event)"/>
+ <h:outputText value="File name:" />
+ <a4j:outputPanel
ajaxRendered="true">#{fileUploadBean.item.fileName}</a4j:outputPanel>
+ <br />
+ <h:outputText value="Attribute name: "/>
+ <h:inputText id="name"/>
+ <h:outputText value="Attribute value: "/>
+ <h:inputText id="value"/>
+ <h:commandButton value="Update attribute">
+ <f:ajax render="fu" execute="name value"
listener="#{fileUploadBean.updateAttribute}"/>
+ </h:commandButton>
+ <br />
+ <h:outputText value="AcceptedTypes: " />
+ <h:inputText value="#{fileUploadBean.acceptedTypes}">
+ <f:ajax render="fu"/>
+ </h:inputText>
+ <br />
+ <h:outputText value="Enabled: " />
+ <h:selectBooleanCheckbox value="#{fileUploadBean.enabled}">
+ <f:ajax render="fu"/>
+ </h:selectBooleanCheckbox>
+ <br />
+ <h:outputText value="NoDuplicate: " />
+ <h:selectBooleanCheckbox
value="#{fileUploadBean.noDuplicate}">
+ <f:ajax render="fu"/>
+ </h:selectBooleanCheckbox>
+ <br />
+ <input type="submit" />
+ <a4j:log />
+ </h:form>
+ </h:body>
+</html>
Modified: trunk/examples/input-demo/src/main/webapp/templates/template.xhtml
===================================================================
--- trunk/examples/input-demo/src/main/webapp/templates/template.xhtml 2010-12-06 15:27:17
UTC (rev 20405)
+++ trunk/examples/input-demo/src/main/webapp/templates/template.xhtml 2010-12-06 15:35:45
UTC (rev 20406)
@@ -37,6 +37,7 @@
<li><h:commandLink value="rich:inputNumberSlider"
action="inputNumberSlider" /></li>
<li><h:commandLink value="rich:inputNumberSpinner"
action="inputNumberSpinner" /></li>
<li><h:commandLink value="rich:autocomplete"
action="autocomplete" /></li>
+ <li><h:commandLink value="rich:fileUpload"
action="fileUpload" /></li>
</ul>
<h:panelGrid columns="3">
Copied: trunk/ui/input/api/src/main/java/org/richfaces/event/FileUploadListener.java (from
rev 20379, trunk/ui/misc/api/src/main/java/org/richfaces/event/FileUploadListener.java)
===================================================================
--- trunk/ui/input/api/src/main/java/org/richfaces/event/FileUploadListener.java
(rev 0)
+++
trunk/ui/input/api/src/main/java/org/richfaces/event/FileUploadListener.java 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,29 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.event;
+
+import javax.faces.event.FacesListener;
+
+public interface FileUploadListener extends FacesListener {
+
+ public void processUpload(UploadEvent event);
+}
Copied: trunk/ui/input/api/src/main/java/org/richfaces/event/UploadEvent.java (from rev
20379, trunk/ui/misc/api/src/main/java/org/richfaces/event/UploadEvent.java)
===================================================================
--- trunk/ui/input/api/src/main/java/org/richfaces/event/UploadEvent.java
(rev 0)
+++ trunk/ui/input/api/src/main/java/org/richfaces/event/UploadEvent.java 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,80 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+package org.richfaces.event;
+
+import java.util.List;
+
+import javax.faces.component.UIComponent;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.FacesListener;
+
+import org.richfaces.model.UploadItem;
+
+public class UploadEvent extends FacesEvent {
+
+ private static final long serialVersionUID = -7645197191376210068L;
+ private List<UploadItem> uploadItems = null;
+
+ public UploadEvent(UIComponent component, List<UploadItem> uploadItems) {
+ super(component);
+ this.uploadItems = uploadItems;
+ }
+
+ public boolean isAppropriateListener(FacesListener listener) {
+ return listener instanceof FileUploadListener;
+ }
+
+ public void processListener(FacesListener listener) {
+ ((FileUploadListener) listener).processUpload(this);
+ }
+
+ /**
+ * Returns UploadItem instance. Returns first element of list of UploadItems in case
of multiple upload.
+ *
+ * @return the uploadItem
+ */
+ public UploadItem getUploadItem() {
+ if (uploadItems != null && uploadItems.size() > 0) {
+ return uploadItems.get(0);
+ }
+ return null;
+ }
+
+ /**
+ * Return list of UploadItems
+ *
+ * @return the uploadItem
+ * @since 3.2.2
+ */
+ public List<UploadItem> getUploadItems() {
+ return uploadItems;
+ }
+
+ /**
+ * Return true if multiple files were uploaded with form
+ *
+ * @return boolean
+ * @since 3.2.2
+ */
+ public boolean isMultiUpload() {
+ return uploadItems != null && uploadItems.size() > 1;
+ }
+}
Copied: trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractFileUpload.java
(from rev 20389,
trunk/ui/misc/ui/src/main/java/org/richfaces/component/AbstractFileUpload.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractFileUpload.java
(rev 0)
+++
trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractFileUpload.java 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,128 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.component;
+
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.ListenerFor;
+import javax.faces.event.PostAddToViewEvent;
+
+import org.richfaces.cdk.annotations.Attribute;
+import org.richfaces.cdk.annotations.EventName;
+import org.richfaces.cdk.annotations.JsfComponent;
+import org.richfaces.cdk.annotations.JsfRenderer;
+import org.richfaces.cdk.annotations.Tag;
+import org.richfaces.context.FileUploadPartialViewContextFactory;
+import org.richfaces.event.FileUploadListener;
+import org.richfaces.request.MultipartRequest;
+
+/**
+ * @author Konstantin Mishin
+ *
+ */
+@JsfComponent(tag = @Tag(handler =
"org.richfaces.view.facelets.FileUploadHandler"),
+ renderer = @JsfRenderer(type = "org.richfaces.FileUploadRenderer"),
+ attributes = {"events-props.xml", "core-props.xml",
"i18n-props.xml"})
+@ListenerFor(systemEventClass = PostAddToViewEvent.class)
+public abstract class AbstractFileUpload extends UIComponentBase {
+
+ @Attribute
+ public abstract String getAcceptedTypes();
+
+ @Attribute(defaultValue = "true")
+ public abstract boolean isEnabled();
+
+ @Attribute(defaultValue = "false")
+ public abstract boolean isNoDuplicate();
+
+ @Attribute(events = @EventName("filesubmit"))
+ public abstract String getOnfilesubmit();
+
+ @Attribute(events = @EventName("uploadcomplete"))
+ public abstract String getOnuploadcomplete();
+
+ @Override
+ public void processEvent(ComponentSystemEvent event) throws AbortProcessingException
{
+ super.processEvent(event);
+ FacesContext context = getFacesContext();
+ Map<String, UIComponent> facets = getFacets();
+ UIComponent component = facets.get("progress");
+ if (component == null) {
+ try {
+ component = context.getApplication().createComponent(context,
"org.richfaces.ProgressBar",
+ "org.richfaces.ProgressBarRenderer");
+ } catch (FacesException e) {
+ // To work without ProgressBar.
+ }
+ if (component != null) {
+ component.setId(getId() + "_pb");
+ facets.put("progress", component);
+ }
+ }
+ if (component != null) {
+ component.setValueExpression("value",
context.getApplication().getExpressionFactory()
+ .createValueExpression(context.getELContext(),
+ "#{" + MultipartRequest.PERCENT_BEAN_NAME +
"[param['"
+ + FileUploadPartialViewContextFactory.UID_KEY + "']]}",
Integer.class));
+ }
+ }
+
+ /**
+ * <p>Add a new {@link FileUploadListener} to the set of listeners
+ * interested in being notified when {@link UploadEvent}s occur.</p>
+ *
+ * @param listener The {@link FileUploadListener} to be added
+ * @throws NullPointerException if <code>listener</code>
+ * is <code>null</code>
+ */
+ public void addFileUploadListener(FileUploadListener listener) {
+ addFacesListener(listener);
+ }
+
+ /**
+ * <p>Return the set of registered {@link FileUploadListener}s for this
+ * {@link AbstractFileUpload} instance. If there are no registered listeners,
+ * a zero-length array is returned.</p>
+ */
+ public FileUploadListener[] getFileUploadListeners() {
+ return (FileUploadListener[]) getFacesListeners(FileUploadListener.class);
+ }
+
+ /**
+ * <p>Remove an existing {@link FileUploadListener} (if any) from the
+ * set of listeners interested in being notified when
+ * {@link FileUploadListener}s occur.</p>
+ *
+ * @param listener The {@link FileUploadListener} to be removed
+ * @throws NullPointerException if <code>listener</code>
+ * is <code>null</code>
+ */
+ public void removeFileUploadListener(FileUploadListener listener) {
+ removeFacesListener(listener);
+ }
+}
\ No newline at end of file
Copied: trunk/ui/input/ui/src/main/java/org/richfaces/context (from rev 20389,
trunk/ui/misc/ui/src/main/java/org/richfaces/context)
Copied: trunk/ui/input/ui/src/main/java/org/richfaces/exception (from rev 20382,
trunk/ui/misc/ui/src/main/java/org/richfaces/exception)
Copied:
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/FileUploadRendererBase.java (from
rev 20383,
trunk/ui/misc/ui/src/main/java/org/richfaces/renderkit/FileUploadRendererBase.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/FileUploadRendererBase.java
(rev 0)
+++
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/FileUploadRendererBase.java 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,46 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.renderkit;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+import org.richfaces.event.UploadEvent;
+import org.richfaces.request.MultipartRequest;
+
+/**
+ * @author Konstantin Mishin
+ *
+ */
+public class FileUploadRendererBase extends RendererBase {
+
+ @Override
+ protected void doDecode(FacesContext context, UIComponent component) {
+ ExternalContext externalContext = context.getExternalContext();
+ Object request = externalContext.getRequest();
+ if (request instanceof MultipartRequest
+ &&
externalContext.getRequestParameterMap().containsKey(component.getClientId(context))) {
+ component.queueEvent(new UploadEvent(component, ((MultipartRequest)
request).getUploadItems()));
+ }
+ }
+}
Copied: trunk/ui/input/ui/src/main/java/org/richfaces/request (from rev 20386,
trunk/ui/misc/ui/src/main/java/org/richfaces/request)
Copied: trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/FileUploadHandler.java
(from rev 20386,
trunk/ui/misc/ui/src/main/java/org/richfaces/view/facelets/FileUploadHandler.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/FileUploadHandler.java
(rev 0)
+++
trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/FileUploadHandler.java 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,75 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.view.facelets;
+
+import javax.el.MethodExpression;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.MetaRule;
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.Metadata;
+import javax.faces.view.facelets.MetadataTarget;
+import javax.faces.view.facelets.TagAttribute;
+
+import org.richfaces.component.AbstractFileUpload;
+import org.richfaces.event.FileUploadListener;
+import org.richfaces.event.UploadEvent;
+
+/**
+ * @author Konstantin Mishin
+ *
+ */
+public class FileUploadHandler extends ComponentHandler {
+
+ public FileUploadHandler(ComponentConfig config) {
+ super(config);
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ protected MetaRuleset createMetaRuleset(Class type) {
+ MetaRuleset metaRuleset = super.createMetaRuleset(type);
+ metaRuleset.addRule(new MetaRule() {
+ @Override
+ public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget
meta) {
+ if (meta.isTargetInstanceOf(AbstractFileUpload.class)) {
+ if ("fileUploadListener".equals(name)) {
+ return new MethodMetadata(attribute, UploadEvent.class) {
+ @Override
+ public void applyMetadata(final FaceletContext ctx, Object
instance) {
+ final MethodExpression expression =
getMethodExpression(ctx);
+ ((AbstractFileUpload) instance).addFileUploadListener(new
FileUploadListener(){
+ public void processUpload(UploadEvent event) {
+
expression.invoke(ctx.getFacesContext().getELContext(), new Object[] {event});
+ }
+ });
+ }
+ };
+ }
+ }
+ return null;
+ }
+ });
+ return metaRuleset;
+ }
+}
Copied: trunk/ui/input/ui/src/main/resources/META-INF/fileupload.faces-config.xml (from
rev 20386, trunk/ui/misc/ui/src/main/resources/META-INF/fileupload.faces-config.xml)
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/fileupload.faces-config.xml
(rev 0)
+++ trunk/ui/input/ui/src/main/resources/META-INF/fileupload.faces-config.xml 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+JBoss, Home of Professional Open Source
+Copyright ${year}, Red Hat, Inc. and individual contributors
+by the @authors tag. See the copyright.txt in the distribution for a
+full listing of individual contributors.
+
+
+This is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation; either version 2.1 of
+the License, or (at your option) any later version.
+
+
+This software is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+
+You should have received a copy of the GNU Lesser General Public
+License along with this software; if not, write to the Free
+Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+-->
+<faces-config version="2.0"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
+
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:cdk="http://jboss.org/schema/richfaces/cdk/extensions"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <factory>
+ <partial-view-context-factory>org.richfaces.context.FileUploadPartialViewContextFactory</partial-view-context-factory>
+ </factory>
+</faces-config>
Copied:
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.ecss
(from rev 20386,
trunk/ui/misc/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.ecss)
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.ecss
(rev 0)
+++
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.ecss 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,176 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+.rf-fu {
+ background: '#{richSkin.generalBackgroundColor}';
+ border-color: '#{richSkin.panelBorderColor}';
+ border-style: solid;
+ border-width: 1px;
+ width: 400px; /*TODO Remove it*/
+}
+
+.rf-fu-hdr {
+ background-color: '#{richSkin.headerBackgroundColor}';
+ background-image:
url("#{resource['org.richfaces.renderkit.html.GradientA']}");
+ border-color: '#{richSkin.headerBackgroundColor}';
+ border-style: solid;
+ border-width: 1px;
+ margin-left: 1px;
+ margin-top: 1px;
+ white-space: nowrap;
+}
+
+.rf-fu-lst {
+ height: 210px; /*TODO Remove it*/
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.rf-fu-cntr-hdn {
+ display: none;
+}
+
+.rf-fu-btns-lft, .rf-fu-btns-rgh, .rf-fu-itm-lft, .rf-fu-itm-rgh {
+ display: inline-block;
+ overflow: hidden;
+}
+
+.rf-fu-btns-lft {
+ width: 66%;
+}
+
+.rf-fu-btns-rgh {
+ text-align: right;
+ width: 34%;
+}
+
+.rf-fu-btn-add, .rf-fu-btn-add-dis, .rf-fu-btn-upl, .rf-fu-btn-clr {
+ background-position:left top;
+ background-repeat:repeat-x;
+ border-style: solid;
+ border-width: 1px;
+ cursor: default;
+ display: inline-block;
+ margin: 4px;
+ vertical-align: top;
+}
+
+.rf-fu-btn-add, .rf-fu-btn-upl, .rf-fu-btn-clr {
+ background-color: '#{richSkin.trimColor}';
+ background-image:
url("#{resource['org.richfaces.images:fuBtnGrad.png']}");
+ border-color: '#{richSkin.panelBorderColor}';
+}
+
+.rf-fu-btn-add-dis {
+ background-color: '#{richSkin.tableFooterBackgroundColor}';
+ background-image:
url("#{resource['org.richfaces.images:fuBtnDisGrad.png']}");
+ border-color: '#{richSkin.tableFooterBackgroundColor}';
+}
+
+.rf-fu-btn-upl, .rf-fu-btn-clr {
+ display: none;
+}
+
+.rf-fu-btn-cnt-add, .rf-fu-btn-cnt-add-dis, .rf-fu-btn-cnt-upl, .rf-fu-btn-cnt-clr,
.rf-fu-itm-lbl, .rf-fu-itm-st, .rf-fu-itm-lnk {
+ font-family: '#{richSkin.generalFamilyFont}';
+ font-size: '#{richSkin.generalSizeFont}';
+}
+
+.rf-fu-btn-cnt-add, .rf-fu-btn-cnt-upl, .rf-fu-btn-cnt-clr, .rf-fu-itm-lbl, .rf-fu-itm-st
{
+ color: '#{richSkin.generalTextColor}';
+}
+
+.rf-fu-btn-cnt-add, .rf-fu-btn-cnt-add-dis, .rf-fu-btn-cnt-upl, .rf-fu-btn-cnt-clr {
+ background-position: 2px 2px;
+ background-repeat: no-repeat;
+ display: inline-block;
+ padding: 3px 5px 3px 21px;
+}
+
+.rf-fu-btn-cnt-add {
+ background-image: url("#{resource['org.richfaces:fu-add.gif']}");
+ overflow: hidden;
+ position: relative;
+}
+
+.rf-fu-btn-cnt-add-dis {
+ background-image: url("#{resource['org.richfaces:fu-add-dis.gif']}");
+ color: '#{richSkin.tabDisabledTextColor}';
+}
+
+.rf-fu-btn-cnt-upl, .rf-fu-itm-st {
+ font-weight: bold;
+}
+
+.rf-fu-btn-cnt-upl {
+ background-image: url("#{resource['org.richfaces:fu-upl.gif']}");
+}
+
+.rf-fu-btn-cnt-clr {
+ background-image: url("#{resource['org.richfaces:fu-clr.gif']}");
+}
+
+.rf-fu-inp-cntr {
+ display: block;
+ height: 1px;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.rf-fu-inp {
+ filter: "alpha(opacity=0)";
+ font-size: 10em;
+ margin: 0;
+ opacity: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.rf-fu-itm {
+ border-bottom-color: '#{richSkin.panelBorderColor}';
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ padding: 12px;
+ white-space: nowrap;
+}
+
+.rf-fu-itm-lft, .rf-fu-itm-rgh {
+ vertical-align: middle;
+}
+
+.rf-fu-itm-lft {
+ width: 85%;
+}
+
+.rf-fu-itm-rgh {
+ width: 14%;
+}
+
+.rf-fu-itm-lnk {
+ color: '#{richSkin.generalLinkColor}';
+}
+
+.rf-fu-itm-st {
+ display: none;
+ margin-top: 5px;
+}
\ No newline at end of file
Copied:
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.js (from
rev 20386,
trunk/ui/misc/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.js)
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.js
(rev 0)
+++
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fileupload.js 2010-12-06
15:35:45 UTC (rev 20406)
@@ -0,0 +1,274 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+(function(richfaces, jQuery) {
+
+ var UID = "rf_fu_uid";
+
+ var ITEM_HTML = '<div class="rf-fu-itm">'
+ + '<span class="rf-fu-itm-lft"><span
class="rf-fu-itm-lbl"/><span
class="rf-fu-itm-st"/></span>'
+ + '<span class="rf-fu-itm-rgh"><a
href="javascript:void(0)"
class="rf-fu-itm-lnk"/></span></div>';
+
+ var ITEM_STATE = {
+ NEW: "new",
+ UPLOADING: "uploading",
+ DONE: "done",
+ SIZE_EXCEEDED: "sizeExceeded",
+ STOPPED: "stopped",
+ SERVER_ERROR: "serverError"
+ };
+
+ var pressButton = function(event) {
+ jQuery(this).children(":first").css("background-position",
"3px 3px").css("padding", "4px 4px 2px 22px");
+ };
+
+ var unpressButton = function(event) {
+ jQuery(this).children(":first").css("background-position",
"2px 2px").css("padding", "3px 5px 3px 21px");
+ };
+
+ richfaces.ui = richfaces.ui || {};
+
+ richfaces.ui.FileUpload = richfaces.BaseComponent.extendClass({
+
+ name: "FileUpload",
+
+ items: [],
+ submitedItems: [],
+
+ doneLabel: "Done",
+ sizeExceededLabel: "File size is exceeded",
+ stoppedLabel: "",
+ serverErrorLabel: "Server error",
+ clearLabel: "Clear",
+ deleteLabel: "Delete",
+
+ init: function(id, options) {
+ this.id = id;
+ jQuery.extend(this, options);
+ if (this.acceptedTypes) {
+ this.acceptedTypes = jQuery.trim(this.acceptedTypes).split(/\s*,\s*/);
+ }
+ this.element = jQuery(this.attachToDom());
+ this.form = this.element.parents("form:first");
+ var header = this.element.children(".rf-fu-hdr:first");
+ var leftButtons = header.children(".rf-fu-btns-lft:first");
+ this.addButton = leftButtons.children(".rf-fu-btn-add:first");
+ this.uploadButton = this.addButton.next();
+ this.clearButton =
leftButtons.next().children(".rf-fu-btn-clr:first");
+ this.inputContainer = this.addButton.find(".rf-fu-inp-cntr:first");
+ this.input = this.inputContainer.children("input");
+ this.list = header.next();
+ this.hiddenContainer = this.list.next();
+ this.iframe = this.hiddenContainer.children("iframe:first");
+ this.progressBarElement = this.iframe.next();
+ this.progressBar = richfaces.$(this.progressBarElement);
+ this.cleanInput = this.input.clone();
+ this.addProxy = jQuery.proxy(this.__addItem, this);
+ this.input.change(this.addProxy);
+
this.addButton.mousedown(pressButton).mouseup(unpressButton).mouseout(unpressButton);
+ this.uploadButton.click(jQuery.proxy(this.__startUpload,
this)).mousedown(pressButton)
+ .mouseup(unpressButton).mouseout(unpressButton);
+ this.clearButton.click(jQuery.proxy(this.__removeAllItems,
this)).mousedown(pressButton)
+ .mouseup(unpressButton).mouseout(unpressButton);
+ this.iframe.load(jQuery.proxy(this.__load, this));
+ if (this.onfilesubmit) {
+ richfaces.Event.bind(this.element, "onfilesubmit", new
Function("event", this.onfilesubmit));
+ }
+ if (this.onuploadcomplete) {
+ richfaces.Event.bind(this.element, "onuploadcomplete", new
Function("event", this.onuploadcomplete));
+ }
+ },
+
+ __addItem: function() {
+ var fileName = this.input.val();
+ if (this.__accept(fileName) && (!this.noDuplicate ||
!this.__isFileAlreadyAdded(fileName))) {
+ this.input.hide();
+ this.input.unbind("change", this.addProxy);
+ var item = new Item(this);
+ this.list.append(item.getJQuery());
+ this.items.push(item);
+ this.input = this.cleanInput.clone();
+ this.inputContainer.append(this.input);
+ this.input.change(this.addProxy);
+ this.__updateButtons();
+ }
+ },
+
+ __removeItem: function(item) {
+ this.items.splice(this.items.indexOf(item), 1);
+ this.submitedItems.splice(this.submitedItems.indexOf(item), 1);
+ this.__updateButtons();
+ },
+
+ __removeAllItems: function(item) {
+ this.inputContainer.children(":not(:visible)").remove();
+ this.list.empty();
+ this.items.splice(0);
+ this.submitedItems.splice(0);
+ this.__updateButtons();
+ },
+
+ __updateButtons: function() {
+ if (!this.loadableItem &&
this.list.children(".rf-fu-itm").size()) {
+ if (this.items.length) {
+ this.uploadButton.css("display", "inline-block");
+ } else {
+ this.uploadButton.hide();
+ }
+ this.clearButton.css("display", "inline-block");
+ } else {
+ this.uploadButton.hide();
+ this.clearButton.hide();
+ }
+ },
+
+ __startUpload: function() {
+ this.loadableItem = this.items.shift();
+ this.__updateButtons();
+ this.loadableItem.startUploading();
+ },
+
+ __submit: function() {
+ var originalAction = this.form.attr("action");
+ var originalEncoding = this.form.attr("encoding");
+ var originalEnctype = this.form.attr("enctype");
+ try {
+ this.form.attr("action", originalAction + "?" + UID +
"=" + this.loadableItem.uid);
+ this.form.attr("encoding", "multipart/form-data");
+ this.form.attr("enctype", "multipart/form-data");
+ richfaces.submitForm(this.form, {"org.richfaces.ajax.component":
this.id}, this.id);
+ richfaces.Event.fire(this.element, "onfilesubmit",
this.loadableItem.model);
+ } finally {
+ this.form.attr("action", originalAction);
+ this.form.attr("encoding", originalEncoding);
+ this.form.attr("enctype", originalEnctype);
+ this.loadableItem.input.removeAttr("name");
+ }
+ },
+
+ __load: function(event) {
+ if (this.loadableItem) {
+ var contentDocument = event.target.contentWindow.document;
+ contentDocument = contentDocument.XMLDocument || contentDocument;
+ var documentElement = contentDocument.documentElement;
+ var responseStatus, id;
+ if (documentElement.tagName.toUpperCase() == "PARTIAL-RESPONSE") {
+ responseStatus = ITEM_STATE.DONE;
+ } else if ((id = documentElement.id) && id.indexOf(UID +
this.loadableItem.uid + ":") == 0) {
+ responseStatus = id.split(":")[1];
+ }
+ if (responseStatus) {
+ responseStatus == ITEM_STATE.DONE && jsf.ajax.response({responseXML:
contentDocument}, {});
+ this.loadableItem.finishUploading(responseStatus);
+ this.submitedItems.push(this.loadableItem);
+ if (responseStatus == ITEM_STATE.DONE && this.items.length) {
+ this.__startUpload();
+ } else {
+ this.loadableItem = null;
+ this.__updateButtons();
+ var items = [];
+ for (var i in this.submitedItems) {
+ items.push(this.submitedItems[i].model);
+ }
+ for (var i in this.items) {
+ items.push(this.items[i].model);
+ }
+ richfaces.Event.fire(this.element, "onuploadcomplete", items);
+ }
+ }
+ }
+ },
+
+ __accept: function(fileName) {
+ var result = !this.acceptedTypes;
+ for (var i = 0; !result && i < this.acceptedTypes.length; i++) {
+ var extension = this.acceptedTypes[i];
+ result = fileName.indexOf(extension, fileName.length - extension.length) !== -1;
+ }
+ return result;
+ },
+
+ __isFileAlreadyAdded: function(fileName) {
+ var result = false;
+ for (var i = 0; !result && i < this.items.length; i++) {
+ result = this.items[i].model.name == fileName;
+ }
+ result = result || (this.loadableItem && this.loadableItem.model.name ==
fileName);
+ for (var i = 0; !result && i < this.submitedItems.length; i++) {
+ result = this.submitedItems[i].model.name == fileName;
+ }
+ return result;
+ }
+ });
+
+ var Item = function(fileUpload) {
+ this.fileUpload = fileUpload;
+ this.input = fileUpload.input;
+ this.model = {name: this.input.val(), state: ITEM_STATE.NEW};
+ };
+
+ jQuery.extend(Item.prototype, {
+ getJQuery: function() {
+ this.element = jQuery(ITEM_HTML);
+ var leftArea = this.element.children(".rf-fu-itm-lft:first");
+ this.label = leftArea.children(".rf-fu-itm-lbl:first");
+ this.state = this.label.nextAll(".rf-fu-itm-st:first");
+ this.link = leftArea.next().children("a");
+ this.label.html(this.model.name);
+ this.link.html(this.fileUpload["deleteLabel"]);
+ this.link.click(jQuery.proxy(this.removeOrStop, this));
+ return this.element;
+ },
+
+ removeOrStop: function() {
+ this.input.remove();
+ this.element.remove();
+ this.fileUpload.__removeItem(this);
+ },
+
+ startUploading: function() {
+ this.state.css("display", "block");
+ this.link.html("");
+ this.input.attr("name", this.fileUpload.id);
+ this.model.state = ITEM_STATE.UPLOADING;
+ this.uid = Math.random();
+ this.fileUpload.__submit();
+ var params = {};
+ params[UID] = this.uid;
+ if (this.fileUpload.progressBar) {
+ this.fileUpload.progressBar.setValue(0);
+ this.state.html(this.fileUpload.progressBarElement.detach());
+ this.fileUpload.progressBar.enable(params);
+ }
+ },
+
+ finishUploading: function(state) {
+ if (this.fileUpload.progressBar) {
+ this.fileUpload.progressBar.disable();
+
this.fileUpload.hiddenContainer.append(this.fileUpload.progressBarElement.detach());
+ }
+ this.input.remove();
+ this.state.html(this.fileUpload[state + "Label"]);
+ this.link.html(this.fileUpload["clearLabel"]);
+ this.model.state = state;
+ }
+ });
+}(window.RichFaces, jQuery));
Copied:
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-add-dis.gif (from
rev 20386,
trunk/ui/misc/ui/src/main/resources/META-INF/resources/org.richfaces/fu-add-dis.gif)
===================================================================
(Binary files differ)
Copied: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-add.gif
(from rev 20386,
trunk/ui/misc/ui/src/main/resources/META-INF/resources/org.richfaces/fu-add.gif)
===================================================================
(Binary files differ)
Copied: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-clr.gif
(from rev 20386,
trunk/ui/misc/ui/src/main/resources/META-INF/resources/org.richfaces/fu-clr.gif)
===================================================================
(Binary files differ)
Copied: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/fu-upl.gif
(from rev 20386,
trunk/ui/misc/ui/src/main/resources/META-INF/resources/org.richfaces/fu-upl.gif)
===================================================================
(Binary files differ)
Modified:
trunk/ui/input/ui/src/main/resources/META-INF/richfaces/resource-mappings.properties
===================================================================
---
trunk/ui/input/ui/src/main/resources/META-INF/richfaces/resource-mappings.properties 2010-12-06
15:27:17 UTC (rev 20405)
+++
trunk/ui/input/ui/src/main/resources/META-INF/richfaces/resource-mappings.properties 2010-12-06
15:35:45 UTC (rev 20406)
@@ -10,4 +10,8 @@
org.richfaces.images\:inplaceBtnPressGrad.png=org.richfaces.renderkit.html.BaseGradient\
{width=8, height=18, baseColorParam=tabBackgroundColor,
gradientColorParam=generalBackgroundColor}
org.richfaces.images\:insldrTrackGrad.png=org.richfaces.renderkit.html.BaseGradient\
- {width=7, height=10, gradientHeight=7, baseColorParam=tabBackgroundColor,
gradientColorParam=controlBackgroundColor}
\ No newline at end of file
+ {width=7, height=10, gradientHeight=7, baseColorParam=tabBackgroundColor,
gradientColorParam=controlBackgroundColor}
+org.richfaces.images\:fuBtnGrad.png=org.richfaces.renderkit.html.BaseGradient\
+ {baseColorParam=additionalBackgroundColor, gradientColorParam=trimColor, height=18,
width=1}
+org.richfaces.images\:fuBtnDisGrad.png=org.richfaces.renderkit.html.BaseGradient\
+ {baseColorParam=tableSubfooterBackgroundColor,
gradientColorParam=tableFooterBackgroundColor, height=18, width=1}
\ No newline at end of file
Copied: trunk/ui/input/ui/src/main/templates/fileupload.template.xml (from rev 20384,
trunk/ui/misc/ui/src/main/templates/fileupload.template.xml)
===================================================================
--- trunk/ui/input/ui/src/main/templates/fileupload.template.xml
(rev 0)
+++ trunk/ui/input/ui/src/main/templates/fileupload.template.xml 2010-12-06 15:35:45 UTC
(rev 20406)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+JBoss, Home of Professional Open Source
+Copyright ${year}, Red Hat, Inc. and individual contributors
+by the @authors tag. See the copyright.txt in the distribution for a
+full listing of individual contributors.
+
+
+This is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation; either version 2.1 of
+the License, or (at your option) any later version.
+
+
+This software is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+
+You should have received a copy of the GNU Lesser General Public
+License along with this software; if not, write to the Free
+Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+-->
+<cdk:root
xmlns="http://jboss.org/schema/richfaces/cdk/xhtml-el"
xmlns:cdk="http://jboss.org/schema/richfaces/cdk/core"
+
xmlns:cc="http://jboss.org/schema/richfaces/cdk/jsf/composite"
xmlns:c="http://jboss.org/schema/richfaces/cdk/jstl/core"
+
xmlns:xi="http://www.w3.org/2001/XInclude">
+ <cc:interface>
+ <cdk:class>org.richfaces.renderkit.html.FileUploadRenderer</cdk:class>
+ <cdk:superclass>org.richfaces.renderkit.FileUploadRendererBase</cdk:superclass>
+ <cdk:component-family>org.richfaces.FileUpload</cdk:component-family>
+ <cdk:renderer-type>org.richfaces.FileUploadRenderer</cdk:renderer-type>
+ <cdk:resource-dependency library="org.richfaces"
name="fileupload.ecss" />
+ <cdk:resource-dependency library="org.richfaces"
name="ajax.reslib" />
+ <cdk:resource-dependency library="org.richfaces"
name="base-component.reslib" />
+ <cdk:resource-dependency name="richfaces-event.js" />
+ <cdk:resource-dependency library="org.richfaces"
name="fileupload.js" />
+ </cc:interface>
+ <cc:implementation>
+ <cdk:object name="attributes"
value="#{component.attributes}"/>
+ <cdk:object name="enabled"
value="#{attributes['enabled']}"/>
+ <div id="#{clientId}" class="rf-fu
#{attributes['styleClass']}"
+ cdk:passThroughWithExclusions="">
+ <div class="rf-fu-hdr">
+ <span class="rf-fu-btns-lft">
+ <span class="rf-fu-btn-add#{enabled ? '' :
'-dis'}">
+ <span class="rf-fu-btn-cnt-add#{enabled ? '' :
'-dis'}">
+ <c:if test="#{enabled}">
+ <span class="rf-fu-inp-cntr"> <!-- This span is needed for IE7
only. -->
+ <input type="file" class="rf-fu-inp"/>
+ </span>
+ </c:if>
+ <cdk:object name="addLabel"
value="#{attributes['addLabel']}"/>
+ #{addLabel != null ? addLabel : 'Add...'}
+ </span>
+ </span>
+ <c:if test="#{enabled}">
+ <span class="rf-fu-btn-upl">
+ <cdk:object name="uploadLabel"
value="#{attributes['uploadLabel']}"/>
+ <span class="rf-fu-btn-cnt-upl">#{uploadLabel != null ?
uploadLabel : 'Upload'}</span>
+ </span>
+ </c:if>
+ </span>
+ <c:if test="#{enabled}">
+ <span class="rf-fu-btns-rgh">
+ <span class="rf-fu-btn-clr">
+ <cdk:object name="clearAllLabel"
value="#{attributes['clearAllLabel']}"/>
+ <span class="rf-fu-btn-cnt-clr">#{clearAllLabel != null ?
clearAllLabel : 'Clear All'}</span>
+ </span>
+ </span>
+ </c:if>
+ </div>
+ <div class="rf-fu-lst"/>
+ <c:if test="#{enabled}">
+ <div class="rf-fu-cntr-hdn">
+ <iframe name="#{clientId}"/>
+ <cdk:object name="progressBar"
value="#{component.facets['progress']}"/>
+ <c:if test="#{progressBar != null and progressBar.isRendered()}">
+ <cdk:call expression="progressBar.encodeAll(facesContext)" />
+ </c:if>
+ </div>
+ <cdk:scriptObject name="options">
+ <cdk:scriptOption attributes="acceptedTypes noDuplicate onfilesubmit
onuploadcomplete doneLabel
+ sizeExceededLabel stoppedLabel serverErrorLabel clearLabel deleteLabel"/>
+ </cdk:scriptObject>
+ <script type="text/javascript">new
RichFaces.ui.FileUpload(#{toScriptArgs(clientId, options)});</script>
+ </c:if>
+ </div>
+ </cc:implementation>
+</cdk:root>