You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by tm...@apache.org on 2006/07/29 08:58:25 UTC

svn commit: r426759 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/components/ main/java/org/apache/struts2/views/freemarker/tags/ main/java/org/apache/struts2/views/jsp/ui/ main/resources/org/apache/struts2/static/dojo/struts/widget...

Author: tmjee
Date: Fri Jul 28 23:58:23 2006
New Revision: 426759

URL: http://svn.apache.org/viewvc?rev=426759&view=rev
Log:
WW-1318 
WW-1397
WW-1398

- rework the datepicker javadoc 
- improvement on struts2 DropdownContainer widget such that it could be
  extended to support other dropdown components like TimePicker
- created a dropdown datepicker component using dojo's datepicker widget


Added:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java   (with props)
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java   (with props)
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java   (with props)
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js   (with props)
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js   (with props)
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js   (with props)
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.css   (with props)
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html   (with props)
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/timeIcon.gif   (with props)
    struts/struts2/trunk/core/src/main/resources/template/simple/timepicker.ftl
    struts/struts2/trunk/core/src/main/resources/template/xhtml/timepicker.ftl
Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js
    struts/struts2/trunk/core/src/main/resources/template/simple/datepicker.ftl
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java
    struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt
    struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DatePicker.java Fri Jul 28 23:58:23 2006
@@ -17,78 +17,80 @@
  */
 package org.apache.struts2.components;
 
-import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.util.OgnlValueStack;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.Locale;
 
 /**
  * <!-- START SNIPPET: javadoc -->
  *
  * Renders datepicker element.</p>
+ * Format supported by this component are:-
+ * <table border="1">
+ *   <tr>
+ *   	<td>Format</td>
+ *    	<td>Description</td>
+ *   </tr>
+ *   <tr>
+ *   	<td>#dd</td>
+ *   	<td>Display day in two digits format</td>
+ *   </tr>	
+ *   <tr>
+ *   	<td>#d</td>
+ *   	<td>Try to display day in one digit format, if cannot use 2 digit format</td>
+ *   </tr>
+ *   <tr>
+ *   	<td>#MM</td>
+ *      <td>Display month in two digits format</td>
+ *   </tr>
+ *   <tr>
+ *   	<td>#M</td>
+ *   	<td>Try to display month in one digits format, if cannot use 2 digit format</td>
+ *   </tr>
+ *   <tr>
+ *   	<td>#yyyy</td>
+ *      <td>Display year in four digits format</td>
+ *   </tr>
+ *   <tr>
+ *   	<td>#yy</td>
+ *      <td>Display the last two digits of the yaer</td>
+ *   </tr>
+ *   <tr>
+ *   	<td>#y</td>
+ *      <td>Display the last digits of the year</td>
+ *   </tr>
+ * </table>
  *
- * <b>Important:</b> Be sure to set the id attributes if not used within a &lt;a:form /&gt; tag, as it takes care of
- * setting the id for you, being required to copy selected date to text input element.</p>
- *
- * Following a reference for the format parameter (copied from jscalendar documentation):
- * <table border=0><tr><td valign=top ></td></tr>
- * <tr><td valign=top ><tt>%a</tt> </td><td valign=top >abbreviated weekday name </td></tr>
- * <tr><td valign=top ><tt>%A</tt> </td><td valign=top >full weekday name </td></tr>
- * <tr><td valign=top ><tt>%b</tt> </td><td valign=top >abbreviated month name </td></tr>
- * <tr><td valign=top ><tt>%B</tt> </td><td valign=top >full month name </td></tr>
- * <tr><td valign=top ><tt>%C</tt> </td><td valign=top >century number </td></tr>
- * <tr><td valign=top ><tt>%d</tt> </td><td valign=top >the day of the month ( 00 .. 31 ) </td></tr>
- * <tr><td valign=top ><tt>%e</tt> </td><td valign=top >the day of the month ( 0 .. 31 ) </td></tr>
- * <tr><td valign=top ><tt>%H</tt> </td><td valign=top >hour ( 00 .. 23 ) </td></tr>
- * <tr><td valign=top ><tt>%I</tt> </td><td valign=top >hour ( 01 .. 12 ) </td></tr>
- * <tr><td valign=top ><tt>%j</tt> </td><td valign=top >day of the year ( 000 .. 366 ) </td></tr>
- * <tr><td valign=top ><tt>%k</tt> </td><td valign=top >hour ( 0 .. 23 ) </td></tr>
- * <tr><td valign=top ><tt>%l</tt> </td><td valign=top >hour ( 1 .. 12 ) </td></tr>
- * <tr><td valign=top ><tt>%m</tt> </td><td valign=top >month ( 01 .. 12 ) </td></tr>
- * <tr><td valign=top ><tt>%M</tt> </td><td valign=top >minute ( 00 .. 59 ) </td></tr>
- * <tr><td valign=top ><tt>%n</tt> </td><td valign=top >a newline character </td></tr>
- * <tr><td valign=top ><tt>%p</tt> </td><td valign=top >``PM'' or ``AM'' </td></tr>
- * <tr><td valign=top ><tt>%P</tt> </td><td valign=top >``pm'' or ``am'' </td></tr>
- * <tr><td valign=top ><tt>%S</tt> </td><td valign=top >second ( 00 .. 59 ) </td></tr>
- * <tr><td valign=top ><tt>%s</tt> </td><td valign=top >number of seconds since Epoch (since Jan 01 1970 00:00:00 UTC) </td></tr>
- * <tr><td valign=top ><tt>%t</tt> </td><td valign=top >a tab character </td></tr>
- * <tr><td valign=top ><tt>%U, %W, %V</tt> </td><td valign=top >the week number</td></tr>
- * <tr><td valign=top ><tt>%u</tt> </td><td valign=top >the day of the week ( 1 .. 7, 1 = MON )</td></tr>
- * <tr><td valign=top ><tt>%w</tt> </td><td valign=top >the day of the week ( 0 .. 6, 0 = SUN )</td></tr>
- * <tr><td valign=top ><tt>%y</tt> </td><td valign=top >year without the century ( 00 .. 99 )</td></tr>
- * <tr><td valign=top ><tt>%Y</tt> </td><td valign=top >year including the century ( ex. 1979 )</td></tr>
- * <tr><td valign=top ><tt>%%</tt> </td><td valign=top >a literal <tt>%</tt> character
- * </td></tr></table><p>
+ * <p/>
  *
  * <!-- END SNIPPET: javadoc -->
  *
- * <p/> <b>Examples</b>
+ * <b>Examples</b>
  *
  * <pre>
  * <!-- START SNIPPET: expl1 -->
- * Date in application's locale format:
- *     &lt;a:datepicker name="order.date" id="order.date" /&gt;
- * Date in german locale, with german texts:
- *     &lt;a:datepicker name="delivery.date" id="delivery.date" template="datepicker_js.ftl" language="de" /&gt;
- * Date in german locale, with german texts and custom date format, including time:
- *     &lt;a:datepicker name="invoice.date" id="invoice.date" template="datepicker_js.ftl" language="de" format="%d. %b &Y %H:%M" showstime="true" /&gt;
+ *
+ * Example 1:
+ *     &lt;a:datepicker name="order.date" label="Order Date" /&gt;
+ * Example 2:
+ *     &lt;a:datepicker name="delivery.date" label="Delivery Date" format="#yyyy-#MM-#dd"  /&gt;
+ *     
  * <!-- END SNIPPET: expl1 -->
  * </pre>
  * <p/>
  *
  * <!-- START SNIPPET: expldesc2 -->
  *
- * If you use this jscalendar based datepicker widget, you might want to use one of the standard stylesheets provided
- * with jscalendar (all distribution stylesheets are included in struts jar). The easiest way to do so is to place the
- * &lt;a:head/&gt; tag in the head of your html page, as it takes care of including calendar css.
- * Otherwise, to manually activate the calendar-blue style, include the following in your stylesheet definition:
+ * The css could be changed by using the following :-
  *
  * <!-- END SNIPPET: expldesc2 -->
+ * 
  * <pre>
  * <!-- START SNIPPET: expl2 -->
- * &lt;link href="&lt;a:url value="/struts/jscalendar/calendar-blue.css" /&gt;" rel="stylesheet" type="text/css" media="all"/&gt;
+ * 
+ * &lt;a:datepicker name="birthday" label="Birthday" templateCss="...." /&gt;
+ * 
  * <!-- END SNIPPET: expl2 -->
  * </pre>
  *
@@ -99,10 +101,11 @@
 
     final public static String TEMPLATE = "datepicker";
 
-    protected String language;
     protected String format;
-    protected String showstime;
-    protected String singleclick;
+    protected String dateIconPath;
+    protected String templatePath;
+    protected String templateCssPath;
+    protected String size;
 
     public DatePicker(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) {
         super(stack, request, response);
@@ -115,38 +118,21 @@
     public void evaluateParams() {
         super.evaluateParams();
 
-        if (language != null) {
-            addParameter("language", findString(language));
-        } else {
-            final Locale locale = (Locale) getStack().getContext().get(ActionContext.LOCALE);
-            if (locale != null) {
-                addParameter("language", locale.getLanguage());
-            } else {
-                addParameter("language", Locale.getDefault().getLanguage());
-            }
-
-        }
-
         if (format != null) {
             addParameter("format", findString(format));
         }
-
-        if (showstime != null) {
-            addParameter("showstime", findString(showstime));
+        if (dateIconPath != null) {
+        	addParameter("dateIconPath", dateIconPath);
         }
-
-        if (singleclick != null) {
-            addParameter("singleclick", findString(singleclick));
+        if (templatePath != null) {
+        	addParameter("templatePath", templatePath);
+        }
+        if (templateCssPath != null) {
+        	addParameter("templateCssPath", templateCssPath);
+        }
+        if (size != null) {
+        	addParameter("size", findValue(size, Integer.class));
         }
-
-    }
-
-    /**
-     * The language to use for the widget texts and localization presets.
-     * @a2.tagattribute required="false" type="String" default="The language of the current Locale"
-     */
-    public void setLanguage(String language) {
-        this.language = language;
     }
 
     /**
@@ -156,21 +142,36 @@
     public void setFormat(String format) {
         this.format = format;
     }
-
+    
     /**
-     * Whether time selector is to be shown. Valid values are &quot;true&quot;, &quot;false&quot;, &quot;24&quot; and &quot;12&quot;.
-     * @a2.tagattribute required="false" type="String" default="false"
+     * The date picker icon path
+     * @a2.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif"
      */
-    public void setShowstime(String showstime) {
-        this.showstime = showstime;
+    public void setDateIconPath(String dateIconPath) {
+    	this.dateIconPath = dateIconPath;
     }
-
+    
     /**
-     * Whether to use selected value after single or double click.
-     * @a2.tagattribute required="false" type="Boolean" default="true"
+     * The datepicker template path.
+     * @a2.tagattribute required="false" type="String" 
      */
-    public void setSingleclick(String singleclick) {
-        this.singleclick = singleclick;
+    public void setTemplatePath(String templatePath) {
+    	this.templatePath = templatePath;
+    }
+    
+    /**
+     * The datepicker template css path.
+     * @a2.tagattribute required="false" type="String"
+     */
+    public void setTemplateCssPath(String templateCssPath) {
+    	this.templateCssPath = templateCssPath;
+    }
+    
+    /**
+     * The datepicker text field size.
+     * @a2.tagattribute required="false" type="String"
+     */
+    public void setSize(String size) {
+    	this.size = size;
     }
-
 }

Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java Fri Jul 28 23:58:23 2006
@@ -0,0 +1,106 @@
+/*
+ * $Id: DatePicker.java 424152 2006-07-21 01:04:41Z husted $
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.components;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.opensymphony.xwork2.util.OgnlValueStack;
+
+/**
+ * @version $Date$ $Id$
+ */
+public class TimePicker extends TextField {
+
+	final public static String TEMPLATE = "timepicker";
+	
+	protected String format;
+	protected String templatePath;
+	protected String templateCssPath;
+	protected String timeIconPath;
+	protected String size;
+	
+	public TimePicker(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) {
+		super(stack, request, response);
+	}
+
+	protected void evaluateExtraParams() {
+		super.evaluateExtraParams();
+		
+		if (format != null) {
+            addParameter("format", findString(format));
+        }
+        if (timeIconPath != null) {
+        	addParameter("timeIconPath", timeIconPath);
+        }
+        if (templatePath != null) {
+        	addParameter("templatePath", templatePath);
+        }
+        if (templateCssPath != null) {
+        	addParameter("templateCssPath", templateCssPath);
+        }
+        if (size != null) {
+        	addParameter("size", findValue(size, Integer.class));
+        }
+	}
+	
+	protected String getDefaultTemplate() {
+        return TEMPLATE;
+    }
+	
+	/**
+     * The format to use for time field.
+     * @a2.tagattribute required="false" type="String" default="Dateformat specified by language preset (%Y/%m/%d for en)"
+     */
+    public void setFormat(String format) {
+        this.format = format;
+    }
+    
+    /**
+     * The time picker icon path
+     * @a2.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif"
+     */
+    public void setTimeIconPath(String timeIconPath) {
+    	this.timeIconPath = timeIconPath;
+    }
+    
+    /**
+     * The time picker template path.
+     * @a2.tagattribute required="false" type="String" 
+     */
+    public void setTemplatePath(String templatePath) {
+    	this.templatePath = templatePath;
+    }
+    
+    /**
+     * The time picker template css path.
+     * @a2.tagattribute required="false" type="String"
+     */
+    public void setTemplateCssPath(String templateCssPath) {
+    	this.templateCssPath = templateCssPath;
+    }
+    
+    /**
+     * The time picker text field size.
+     * @a2.tagattribute required="false" type="String"
+     */
+    public void setSize(String size) {
+    	this.size = size;
+    }
+	
+}

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/TimePicker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java Fri Jul 28 23:58:23 2006
@@ -77,6 +77,7 @@
     protected IfModel ifModel;
     protected ElseModel elseModel;
     protected ElseIfModel elseIfModel;
+    protected TimePickerModel timePickerModel;
     
 
     public StrutsModels(OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res) {
@@ -451,5 +452,12 @@
     		elseIfModel = new ElseIfModel(stack, req, res);
     	}
     	return elseIfModel;
+    }
+    
+    public TimePickerModel getTimepicker() {
+    	if (timePickerModel == null) {
+    		timePickerModel = new TimePickerModel(stack, req, res);
+    	}
+    	return timePickerModel;
     }
 }

Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java Fri Jul 28 23:58:23 2006
@@ -0,0 +1,21 @@
+package org.apache.struts2.views.freemarker.tags;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts2.components.Component;
+import org.apache.struts2.components.TimePicker;
+
+import com.opensymphony.xwork2.util.OgnlValueStack;
+
+public class TimePickerModel extends TagModel {
+
+	public TimePickerModel(OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res) {
+		super(stack, req, res);
+	}
+
+	protected Component getBean() {
+		return new TimePicker(stack, req, res);
+	}
+
+}

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/TimePickerModel.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java Fri Jul 28 23:58:23 2006
@@ -31,10 +31,11 @@
 
 	private static final long serialVersionUID = 4054114507143447232L;
 	
-	protected String language;
     protected String format;
-    protected String showstime;
-    protected String singleclick;
+    protected String dateIconPath;
+    protected String templatePath;
+    protected String templateCssPath;
+    
 
     public Component getBean(OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res) {
         return new DatePicker(stack, req, res);
@@ -44,25 +45,26 @@
         super.populateParams();
 
         final DatePicker datePicker = (DatePicker) component;
-        datePicker.setLanguage(language);
         datePicker.setFormat(format);
-        datePicker.setShowstime(showstime);
-        datePicker.setSingleclick(singleclick);
-    }
-
-    public void setLanguage(String language) {
-        this.language = language;
+        datePicker.setDateIconPath(dateIconPath);
+        datePicker.setTemplatePath(templatePath);
+        datePicker.setTemplateCssPath(templateCssPath);
     }
 
     public void setFormat(String format) {
         this.format = format;
     }
-
-    public void setShowstime(String showstime) {
-        this.showstime = showstime;
+    
+    public void setDateIconPath(String dateIconPath) {
+    	this.dateIconPath = dateIconPath;
+    }
+    
+    public void setTemplatePath(String templatePath) {
+    	this.templatePath = templatePath;
+    }
+    
+    public void setTemplateCssPath(String templateCsspath) {
+    	this.templateCssPath = templateCssPath;
     }
 
-    public void setSingleclick(String singleclick) {
-        this.singleclick = singleclick;
-    }
 }

Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java Fri Jul 28 23:58:23 2006
@@ -0,0 +1,69 @@
+/*
+ * $Id: DatePicker.java 424152 2006-07-21 01:04:41Z husted $
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.views.jsp.ui;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts2.components.Component;
+import org.apache.struts2.components.TimePicker;
+
+import com.opensymphony.xwork2.util.OgnlValueStack;
+
+/**
+ * @version $Date$ $Id$
+ */
+public class TimePickerTag extends TextFieldTag {
+
+	private static final long serialVersionUID = 3527737048468381376L;
+	
+	protected String format;
+	protected String timeIconPath;
+	protected String templatePath;
+	protected String templateCssPath;
+
+	public Component getBean(OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res) {
+		return new TimePicker(stack, req, res);
+	}
+	
+	protected void populateParams() {
+		super.populateParams();
+		
+		final TimePicker timePicker = (TimePicker) component;
+		timePicker.setFormat(format);
+		timePicker.setTimeIconPath(timeIconPath);
+		timePicker.setTemplatePath(templatePath);
+		timePicker.setTemplateCssPath(templateCssPath);
+	}
+	
+	public void setFormat(String format) {
+        this.format = format;
+    }
+    
+    public void setTimeIconPath(String timeIconPath) {
+    	this.timeIconPath = timeIconPath;
+    }
+    
+    public void setTemplatePath(String templatePath) {
+    	this.templatePath = templatePath;
+    }
+    
+    public void setTemplateCssPath(String templateCssPath) {
+    	this.templateCssPath = templateCssPath;
+    }
+}

Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/TimePickerTag.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js (added)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js Fri Jul 28 23:58:23 2006
@@ -0,0 +1,249 @@
+/* 
+ * Struts2
+ * =======
+ * 
+ * This is a simple DateTimeUtil used by Struts2 DatePicker and TimePicker.
+ * Its a pretty crude one, and there's lots of room for improvement. Please 
+ * feel free to improve it if you like.
+ * 
+ * It's main methods are :-
+ * -  struts.widgets.DateTimeUtil.parseDate(date, format);
+ * -  struts.widgets.DateTimeUtil.parseTime(date, format);
+ * -  struts.widgets.DateTimeUtil.parseDateTime(date, format);
+ * 
+ * which parse the 'date' string using the 'format' specifed and return a
+ * js Date object. If not parsing is possible, it will just return the current
+ * date as a Date object.
+ * 
+ * version $Date$ $Id$
+ */
+dojo.provide("struts.widgets.DateTimeUtil");
+
+struts.widgets.DateTimeUtil.parseDate = function(date, format) {
+    var _d = new Date();
+    struts.widgets.DateTimeUtil.tryToParseForDay(_d, date, format);
+    struts.widgets.DateTimeUtil.tryToParseForMonth(_d, date, format);
+    struts.widgets.DateTimeUtil.tryToParseForYear(_d, date, format);
+    return _d;
+}
+
+struts.widgets.DateTimeUtil.parseTime = function(date, format) {
+    var _d = new Date();
+    struts.widgets.DateTimeUtil.tryToParseForHours(_d, date, format);
+    struts.widgets.DateTimeUtil.tryToParseForMinutes(_d, date, format);
+    return _d;
+}
+
+struts.widgets.DateTimeUtil.parseDateTime = function(date, format) {
+    var _d = new date();
+    struts.widgets.DateTimeUtil.tryToParseForDay(_d, date, format);
+    struts.widgets.DateTimeUtil.tryToParseForMonth(_d, date, format);
+    struts.widgets.DateTimeUtil.tryToParseForYear(_d, date, format);
+    struts.widgets.DateTimeUtil.tryToParseForHours(_d, date, format);
+    struts.widgets.DateTimeUtil.tryToPraseForMinutes(_d, date, format);
+    return _d;
+}
+
+
+struts.widgets.DateTimeUtil.tryToParseForDay = function(dateObj, date, format) {
+    var tmp = format;
+    var _function;
+
+	if (tmp.indexOf("#dd") > -1) {
+	    tmp = tmp.replace(/#dd/g, "(\\d+)");
+		_function = function(dateObject, day) {
+		    dateObject.setDate(day);
+		}
+	}
+	else if (tmp.indexOf("#d") > -1) {
+	    tmp = tmp.replace(/#d/g, "(\\d+)");
+	    _function = function(dateObject, day) {
+	        dateObject.setDate(day);
+	    }
+	}
+	
+    if (tmp.indexOf("#M") > -1) {
+		tmp = tmp.replace(/#MMMM/g, "\\w+");
+		tmp = tmp.replace(/#MMM/g, "\\w+");
+		tmp = tmp.replace(/#MM/g, "\\w+");
+		tmp = tmp.replace(/#M/g, "\\w+");
+	}
+
+	if (tmp.indexOf("#y") > -1) {
+		tmp = tmp.replace(/#yyyy/g, "\\w+");
+		tmp = tmp.replace(/#yy/g, "\\w+");
+		tmp = tmp.replace(/#y/g, "\\w+");
+	}
+
+	var regexp = tmp;
+	var rg = new RegExp("\\b"+regexp+"\\b", "g");
+	var r = rg.exec(date);
+	if (r && r.length >= 1 && _function) {
+	    _function(dateObj, r[1]);
+	}
+}
+
+
+struts.widgets.DateTimeUtil.tryToParseForMonth = function(dateObj, date, format) {
+    var tmp = format;
+    var _function;
+
+	if (tmp.indexOf("#MM") > -1) {
+	    tmp = tmp.replace(/#MM/g, "(\\d+)");
+		_function = function(dateObject, month) {
+		    dateObject.setMonth(month - 1);
+		}
+	}
+	else if (tmp.indexOf("#M") > -1) {
+	    tmp = tmp.replace(/#M/g, "(\\d+)");
+	    _function = function(dateObject, month) {
+	        dateObject.setDate(month - 1);
+	    }
+	}
+	
+	if (tmp.indexOf("#d") > -1) {
+		tmp = tmp.replace(/#dddd/g, "\\w+");
+		tmp = tmp.replace(/#ddd/g, "\\w+");
+		tmp = tmp.replace(/#dd/g, "\\w+");
+		tmp = tmp.replace(/#d/g, "\\w+");
+	}
+	
+	if (tmp.indexOf("#y") > -1) {
+		tmp = tmp.replace(/#yyyy/g, "\\w+");
+		tmp = tmp.replace(/#yy/g, "\\w+");
+		tmp = tmp.replace(/#y/g, "\\w+");
+	}
+
+	var regexp = tmp;
+	var rg = new RegExp("\\b"+regexp+"\\b", "g");
+	var r = rg.exec(date);
+	if (r && r.length >= 1 && _function) {
+	    _function(dateObj, r[1]);
+	}
+}
+
+
+struts.widgets.DateTimeUtil.tryToParseForYear = function(dateObj, date, format) {
+    var tmp = format;
+    var _function;
+
+	if (tmp.indexOf("#yyyy") > -1) {
+	    tmp = tmp.replace(/#yyyy/g, "(\\d+)");
+		_function = function(dateObject, year) {
+		    dateObject.setYear(year);
+		}
+	}
+	else if (tmp.indexOf("#yy") > -1) {
+	    tmp = tmp.replace(/#yy/g, "(\\d+)");
+	    _function = function(dateObject, year) {
+	        var _d = new Date();
+	        var _y = _d.getFullYear().substring(0, 2)+''+year;
+	        dateObject.setYear(_y);
+	    }
+	}
+	else if (tmp.indexOf("#y") > -1) {
+	    tmp = tmp.replace(/#y/g, "(\\d+)");
+	    _function = function(dateObject, year) {
+	        var _d = new Date();
+	        var _y = _d.getFullYear().substring(0, 3)+''+year;
+	        dateObject.setYear(_y);
+	    }
+	}
+	
+	if (tmp.indexOf("#d") > -1) {
+		tmp = tmp.replace(/#dddd/g, "\\w+");
+		tmp = tmp.replace(/#ddd/g, "\\w+");
+		tmp = tmp.replace(/#dd/g, "\\w+");
+		tmp = tmp.replace(/#d/g, "\\w+");
+	}
+	
+	if (tmp.indexOf("#M") > -1) {
+		tmp = tmp.replace(/#MMMM/g, "\\w+");
+		tmp = tmp.replace(/#MMM/g, "\\w+");
+		tmp = tmp.replace(/#MM/g, "\\w+");
+		tmp = tmp.replace(/#M/g, "\\w+");
+	}
+
+	var regexp = tmp;
+	var rg = new RegExp("\\b"+regexp+"\\b", "g");
+	var r = rg.exec(date);
+	if (r && r.length >= 1 && _function) {
+	    _function(dateObj, r[1]);
+	}
+}
+
+
+struts.widgets.DateTimeUtil.tryToParseForHours = function(dateObj, date, format) {
+    var tmp = format;
+    var _function;
+    
+    if (tmp.indexOf("#h") > -1) {
+        tmp = tmp.replace(/#hh/g, "(\\d+)");
+        tmp = tmp.replace(/#h/g, "(\\d+)");
+        _function = function(dateObj, hour) {
+            dateObj.setHours(hour);
+        }
+    }
+    if (tmp.indexOf("#H") > -1) {
+        tmp = tmp.replace(/#HH/g, "(\\d+)");
+        tmp = tmp.replace(/#H/g, "(\\d+)");
+        _function = function(dateObj, hour) {
+            dateObj.setHours(hour);
+        }
+    }
+    if (tmp.indexOf("#m") > -1) {
+		tmp = tmp.replace(/#mm/g, "\\w+");
+		tmp = tmp.replace(/#m/g, "\\w+");
+	}
+	if (tmp.indexOf("#T") > -1) {
+	    tmp = tmp.replace(/#TT/g, "\\w+");
+	    tmp = tmp.replace(/#T/g, "\\w+");
+	}
+	if (tmp.indexOf("#t") > -1) {
+	    tmp = tmp.replace(/#tt/g, "\\w+");
+	    tmp = tmp.replace(/#t/g, "\\w+");
+	}
+	var regexp = tmp;
+	var rg = new RegExp("\\b"+tmp+"\\b", "g");
+	var r = rg.exec(date);
+	if (r && r.length >= 1 && _function) {
+	    _function(dateObj, r[1]);
+	}
+}
+
+struts.widgets.DateTimeUtil.tryToParseForMinutes = function(dateObj, date, format) {
+    var tmp = format;
+    var _function;
+    
+    if (tmp.indexOf("#m") > -1) {
+        tmp = tmp.replace(/#mm/g, "(\\d+)");
+        tmp = tmp.replace(/#m/g, "(\\d+)");
+        _function = function(dateObj, minutes) {
+            dateObj.setMinutes(minutes);
+        }
+    }
+	if (tmp.indexOf("#H") > -1) {
+	    tmp = tmp.replace(/#HH/g, "\\w+");
+	    tmp = tmp.replace(/#H/g, "\\w+");
+	}
+	if (tmp.indexOf("#h") > -1) {
+	    tmp = tmp.replace(/#hh/g, "\\w+");
+	    tmp = tmp.replace(/#h/g, "\\w+");
+	}
+	if (tmp.indexOf("#T") > -1) {
+	    tmp = tmp.replace(/#TT/g, "\\w+");
+	    tmp = tmp.replace(/#T/g, "\\w+");
+	}
+	if (tmp.indexOf("#t") > -1) {
+	    tmp = tmp.replace(/#tt/g, "\\w+");
+	    tmp = tmp.replace(/#t/g, "\\w+");
+	}
+	var regexp = tmp;
+	var rg = new RegExp("\\b"+tmp+"\\b", "g");
+	var r = rg.exec(date);
+	if (r && r.length >= 1 && _function) {
+	    _function(dateObj, r[1]);
+	}
+}
+
+

Propchange: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DateTimeUtil.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js (added)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js Fri Jul 28 23:58:23 2006
@@ -0,0 +1,54 @@
+dojo.provide("struts.widgets.DropDownDatePicker");
+dojo.require("dojo.widget.*");
+dojo.require("dojo.widget.HtmlWidget");
+dojo.require("dojo.widget.DatePicker");
+dojo.require("dojo.event.*");
+dojo.require("dojo.html");
+dojo.require("struts.widgets.DropdownContainer");
+dojo.require("struts.widgets.DateTimeUtil");
+
+struts.widgets.DropDownDatePicker = function () {
+    struts.widgets.DropdownContainer.call(this);
+    this.widgetType = "DropDownDatePicker";
+    
+    this.initUI = function() {
+		var properties = {
+			widgetContainerId: this.widgetId
+		}
+
+		this.subWidgetRef = dojo.widget.createWidget("DatePicker", properties,   this.subWidgetNode);
+		dojo.event.connect(this.subWidgetRef, "onSetDate", this, "onPopulate");
+		dojo.event.connect(this.valueInputNode, "onkeyup", this, "onInputChange");
+		this.onUpdateDate = function(evt) {
+			this.storedDate = evt.storedDate;
+		}
+		this.onInputChange();
+	}
+	
+	this.onPopulate = function() {
+		this.valueInputNode.value = dojo.date.toString(this.subWidgetRef.date, this.dateFormat);
+	}
+
+	this.onInputChange = function(){
+		//var test = new Date(this.valueInputNode.value);
+		var test = struts.widgets.DateTimeUtil.parseDate(this.valueInputNode.value, this.dateFormat);
+		this.subWidgetRef.date = test;
+		this.subWidgetRef.setDate(dojo.widget.DatePicker.util.toRfcDate(test));
+		this.subWidgetRef.initUI();
+		//this.onPopulate();
+	}
+}
+
+dojo.inherits(struts.widgets.DropDownDatePicker, struts.widgets.DropdownContainer);
+dojo.widget.tags.addParseTreeHandler("dojo:dropdowndatepicker");
+dojo.lang.extend(struts.widgets.DropDownDatePicker, {
+	
+	//	default attributes
+	dateFormat: "#MM/#dd/#yyyy",
+	iconPath: "/struts/dojo/struts/widgets/dateIcon.gif",
+	iconAlt: "date",
+	iconTitle: "Select a date",
+	inputWidth:"7em"
+	
+});
+

Propchange: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownDatePicker.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js (added)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js Fri Jul 28 23:58:23 2006
@@ -0,0 +1,46 @@
+dojo.provide("struts.widgets.DropDownTimePicker");
+dojo.require("struts.widgets.DropdownContainer");
+dojo.require("dojo.widget.html.TimePicker");
+dojo.require("struts.widgets.DateTimeUtil");
+
+struts.widgets.DropDownTimePicker = function() {
+    struts.widgets.DropdownContainer.call(this);
+    this.widgetType = "DropDownTimePicker";
+    var timeFormat = "#hh:#mm #TT";
+    
+    this.initUI = function() {
+		var properties = {
+			widgetContainerId: this.widgetId
+		}
+		
+		this.subWidgetRef = dojo.widget.createWidget("TimePicker", properties,   this.subWidgetNode);
+		dojo.event.connect(this.subWidgetRef, "onSetTime", this, "onPopulate");
+		dojo.event.connect(this.valueInputNode, "onkeyup", this, "onInputChange");
+		this.onInputChange();
+    }
+    
+    this.onPopulate = function() {
+		this.valueInputNode.value = dojo.date.toString(this.subWidgetRef.time, this.timeFormat);
+	}
+
+	this.onInputChange = function(){
+	    if (this.valueInputNode.value && this.valueInputNode.value.toString().length > 0) {
+		  var test = struts.widgets.DateTimeUtil.parseTime(this.valueInputNode.value, this.timeFormat);
+		  // test.setTime(this.valueInputNode.value);
+		  this.subWidgetRef.time = test;
+		  this.subWidgetRef.setDateTime(dojo.widget.TimePicker.util.toRfcDateTime(test));
+	   	  this.subWidgetRef.initUI();
+		  //this.onPopulate();
+	    }
+	}
+}
+
+dojo.inherits(struts.widgets.DropDownTimePicker, struts.widgets.DropdownContainer);
+dojo.widget.tags.addParseTreeHandler("dojo:dropdowntimepicker");
+dojo.lang.extend(struts.widgets.DropDownTimePicker, {
+    timeFormat: "#hh:#mm #TT",
+	iconPath: "/struts/dojo/struts/widgets/timeIcon.gif",
+	iconAlt: "time",
+	iconTitle: "Select a time",
+	inputWidth:"7em"
+});

Propchange: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropDownTimePicker.js
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js (original)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/DropdownContainer.js Fri Jul 28 23:58:23 2006
@@ -4,13 +4,21 @@
 dojo.require("dojo.widget.DatePicker");
 dojo.require("dojo.event.*");
 dojo.require("dojo.html");
+
 struts.widgets.DropdownContainer = function(){
 	// this is just an interface that gets mixed in
 	dojo.widget.HtmlWidget.call(this);
 	this.widgetType = "DropdownContainer";
 	
-	this.templateString = '<div><input type="text" value="" style="vertical-align:middle;" dojoAttachPoint="valueInputNode" /><img src="" alt="" dojoAttachPoint="containerDropdownNode" dojoAttachEvent="onclick: onDropdown;" style="vertical-align:middle; cursor:pointer; cursor:hand;" /><div dojoAttachPoint="subWidgetContainerNode" style="display:none;position:absolute;width:12em;background-color:#fff;"><div dojoAttachPoint="subWidgetNode" class="subWidgetContainer"></div></div></div>';
-	this.templateCssPath = "";
+	this.iconPath;
+	this.iconAlt;
+	this.iconTitle;
+	this.value;
+	
+	this.templatePath = dojo.uri.dojoUri("struts/widgets/dropdowncontainer.html");
+	this.templateCssPath = dojo.uri.dojoUri("struts/widgets/dropdowncontainer.css");
+	//this.templateString = '<div><input type="text" value="" style="vertical-align:middle;" dojoAttachPoint="valueInputNode" /><img src="" alt="" dojoAttachPoint="containerDropdownNode" dojoAttachEvent="onclick: onDropdown;" style="vertical-align:middle; cursor:pointer; cursor:hand;" /><div dojoAttachPoint="subWidgetContainerNode" style="display:none;position:absolute;width:12em;background-color:#fff;"><div dojoAttachPoint="subWidgetNode" class="subWidgetContainer"></div></div></div>';
+	//this.templateCssPath = "";
 	
 	this.fillInTemplate = function(args, frag) {
         try {
@@ -20,27 +28,31 @@
             this.domNode.removeChild(this.valueInputNode);
             this.valueInputNode = txt
         } catch (e) {alert("ex:"+e);}
+        
+        
+        this.subWidgetContainerNode.style.left = "";
+		this.subWidgetContainerNode.style.top = "";
+        
+        this.valueInputNode.style.width = this.inputWidth;
+        if (this.value) {
+            this.valueInputNode.value = this.value;
+        }
+        
+        this.containerDropdownNode.src = this.iconPath;
+		this.containerDropdownNode.alt = this.iconAlt;
+		this.containerDropdownNode.title = this.iconTitle;
+        
 		this.initUI();
-
 	}
 	
 	this.initUI = function() {
-		this.subWidgetContainerNode.style.left = "";
-		this.subWidgetContainerNode.style.top = "";
-		var properties = {
-			widgetContainerId: this.widgetId
-		}
-
-		//this.valueInputNode.style.width = this.inputWidth;
-		this.containerDropdownNode.src = this.dateIconPath;
-		this.containerDropdownNode.alt = "date";
-		this.containerDropdownNode.title = "select a date";
-		this.subWidgetRef = dojo.widget.createWidget("DatePicker", properties,   this.subWidgetNode);
-		dojo.event.connect(this.subWidgetRef, "onSetDate", this, "onPopulate");
-		dojo.event.connect(this.valueInputNode, "onkeyup", this, "onInputChange");
-		this.onUpdateDate = function(evt) {
-			this.storedDate = evt.storedDate;
-		}
+	    // subclass should overrides this to init the UI in this container
+	}
+	
+	this.onPopulate = function() {
+	}
+	
+	this.onInputChange = function(){
 	}
 	
 	this.onDropdown = function(evt) {
@@ -54,26 +66,10 @@
 	this.onHide = function(evt) {
 		this.show(false);
 	}
-	
-	this.onPopulate = function() {
-		this.valueInputNode.value = dojo.date.toString(this.subWidgetRef.date, this.dateFormat);
-	}
-
-	this.onInputChange = function(){
-		var test = new Date(this.valueInputNode.value);
-		this.subWidgetRef.date = test;
-		this.subWidgetRef.setDate(dojo.widget.DatePicker.util.toRfcDate(test));
-		this.subWidgetRef.initUI();
-		//this.onPopulate();
-	}
 }
 
 dojo.inherits(struts.widgets.DropdownContainer, dojo.widget.HtmlWidget);
 dojo.widget.tags.addParseTreeHandler("dojo:dropdowncontainer");
 dojo.lang.extend(struts.widgets.DropdownContainer, {
-	
-	//	default attributes
-	dateFormat:"#MM/#dd/#yyyy",
-	dateIconPath:"/struts/dojo/struts/widgets/dateIcon.gif",
-	//inputWidth:"7em"
+
 });

Modified: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js (original)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/__package__.js Fri Jul 28 23:58:23 2006
@@ -4,6 +4,9 @@
 dojo.hostenv.conditionalLoadModule({
 	browser: [
 		"struts.widgets.DropdownContainer",
+		"struts.widgets.DropDownDatePicker",
+		"struts.widgets.DropDownTimePicker", 
+		"struts.widgets.DateTimeUtil"
 	]
 });
 dojo.hostenv.moduleLoaded("struts.widgets.*");

Added: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.css
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.css?rev=426759&view=auto
==============================================================================
    (empty)

Propchange: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.css
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html (added)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html Fri Jul 28 23:58:23 2006
@@ -0,0 +1,18 @@
+
+<div>
+	<input 	type="text" 
+			value="" 
+	 		style="vertical-align:middle;" 
+	 		dojoAttachPoint="valueInputNode" />
+	<img src="" 
+		 alt="" 
+ 		 dojoAttachPoint="containerDropdownNode" 
+		 dojoAttachEvent="onclick: onDropdown;" 
+		 style="vertical-align:middle; cursor:pointer; cursor:hand;" />
+	<div dojoAttachPoint="subWidgetContainerNode" 
+	 	 style="display:none;position:absolute;width:12em;background-color:#fff;">
+		 	<div dojoAttachPoint="subWidgetNode" 
+	 		  	 class="subWidgetContainer">
+	 		</div>
+	</div>
+</div>

Propchange: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/dropdowncontainer.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/timeIcon.gif
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/timeIcon.gif?rev=426759&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/dojo/struts/widgets/timeIcon.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: struts/struts2/trunk/core/src/main/resources/template/simple/datepicker.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/simple/datepicker.ftl?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/simple/datepicker.ftl (original)
+++ struts/struts2/trunk/core/src/main/resources/template/simple/datepicker.ftl Fri Jul 28 23:58:23 2006
@@ -6,6 +6,7 @@
 <#if parameters.readonly?exists>
     <#include "/${parameters.templateDir}/simple/text.ftl" />
 <#else>
+<#--
     <div dojoType="dropdowncontainer"
         dateIconPath="<@saf.url includeParams='none' value='/struts/dojo/struts/widgets/dateIcon.gif' encode='false'/>"
         <#if parameters.format?exists>
@@ -25,6 +26,31 @@
         </#if>
         <#if parameters.get("size")?exists>
              inputWidth="${parameters.get("size")?html}"
+        </#if>
+    >
+        <#include "/${parameters.templateDir}/simple/text.ftl" />
+    </div>
+-->
+	<div dojoType="dropdowndatepicker"
+        <#if parameters.format?exists>
+            dateFormat="${parameters.format}"
+        </#if>
+        <#if parameters.dateIconPath?exists>
+            iconPath="${parameters.dateIconPath}"
+        <#else>
+        	iconPath="<@saf.url includeParams='none' value='/struts/dojo/struts/widgets/dateIcon.gif' encode='false' includeParams="none" />"
+        </#if>
+        <#if parameters.nameValue?exists>
+        	value="${parameters.nameValue?html}"
+        </#if>
+        <#if parameters.templatePath?exists>
+            templatePath="${parameters.templatePath}"
+        </#if>
+        <#if parameters.templateCssPath?exists>
+            templateCssPath="${parameters.templateCssPath}"
+        </#if>
+        <#if parameters.get("size")?exists>
+             inputWidth="${parameters.get("size")?string?html}"
         </#if>
     >
         <#include "/${parameters.templateDir}/simple/text.ftl" />

Added: struts/struts2/trunk/core/src/main/resources/template/simple/timepicker.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/simple/timepicker.ftl?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/simple/timepicker.ftl (added)
+++ struts/struts2/trunk/core/src/main/resources/template/simple/timepicker.ftl Fri Jul 28 23:58:23 2006
@@ -0,0 +1,33 @@
+<script type="text/javascript">
+    dojo.require("struts.widgets.*");
+</script>
+
+<#if parameters.readonly?exists>
+    <#include "/${parameters.templateDir}/simple/text.ftl" />
+<#else>
+	<div dojoType="dropdowntimepicker"
+		useDefaultTime="false"
+        <#if parameters.format?exists>
+            timeFormat="${parameters.format}"
+        </#if>
+        <#if parameters.nameValue?exists>
+        	value="${parameters.nameValue?html}"
+        </#if>
+        <#if parameters.timeIconPath?exists>
+            iconPath="${parameters.timeIconPath}"
+        <#else>
+        	iconPath="<@saf.url includeParams='none' value='/struts/dojo/struts/widgets/timeIcon.gif' encode='false' includeParams="none" />"
+        </#if>
+        <#if parameters.templatePath?exists>
+            templatePath="${parameters.templatePath}"
+        </#if>
+        <#if parameters.templateCssPath?exists>
+            templateCssPath="${parameters.templateCssPath}"
+        </#if>
+        <#if parameters.get("size")?exists>
+             inputWidth="${parameters.get("size")?string?html}"
+        </#if>
+    >
+        <#include "/${parameters.templateDir}/simple/text.ftl" />
+    </div>
+</#if>
\ No newline at end of file

Added: struts/struts2/trunk/core/src/main/resources/template/xhtml/timepicker.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/xhtml/timepicker.ftl?rev=426759&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/xhtml/timepicker.ftl (added)
+++ struts/struts2/trunk/core/src/main/resources/template/xhtml/timepicker.ftl Fri Jul 28 23:58:23 2006
@@ -0,0 +1,3 @@
+<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/timepicker.ftl" />
+<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java Fri Jul 28 23:58:23 2006
@@ -40,7 +40,6 @@
     public void testLocaleInStack() throws Exception {
         stack.getContext().put(ActionContext.LOCALE, Locale.FRANCE);
 
-        tag.setLanguage(null);
         tag.doStartTag();
         tag.doEndTag();
 

Modified: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt (original)
+++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-1.txt Fri Jul 28 23:58:23 2006
@@ -6,8 +6,8 @@
     dojo.require("struts.widgets.*");
 </script>
 
-    <div dojoType="dropdowncontainer"
-        dateIconPath="/struts/dojo/struts/widgets/dateIcon.gif"
+    <div dojoType="dropdowndatepicker"
+        iconPath="/struts/dojo/struts/widgets/dateIcon.gif"
     >
 <input type="text" name="" id=""/>
     </div>

Modified: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt?rev=426759&r1=426758&r2=426759&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt (original)
+++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DatePickerTagTest-2.txt Fri Jul 28 23:58:23 2006
@@ -6,8 +6,8 @@
     dojo.require("struts.widgets.*");
 </script>
 
-    <div dojoType="dropdowncontainer"
-        dateIconPath="/struts/dojo/struts/widgets/dateIcon.gif"
+    <div dojoType="dropdowndatepicker"
+        iconPath="/struts/dojo/struts/widgets/dateIcon.gif"
     >
 <input type="text" name="" id=""/>
     </div>