You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Yoshinori Uzumasa <uz...@mars.co.jp> on 2005/05/31 11:24:48 UTC

[PATCH] DatePicker

Hi. I made a patch for the DatePicker component for better
performance, When many DatePicker is used.

Would someone evaluate and apply it?
Regards.

-- 
Yoshinori Uzumasa

Re: [PATCH] DatePicker

Posted by Howard Lewis Ship <hl...@gmail.com>.
How does this handle the fact that different DatePickers on the same
page could, potentially, have different values for includeWeek, icon
and format? (It may be in there, I just skimmed the patch).

On 5/31/05, Yoshinori Uzumasa <uz...@mars.co.jp> wrote:
> Hi. I made a patch for the DatePicker component for better
> performance, When many DatePicker is used.
> 
> Would someone evaluate and apply it?
> Regards.
> 
> --
> Yoshinori Uzumasa
> 
> 
> Index: src/java/org/apache/tapestry/form/DatePicker.java
> ===================================================================
> RCS file: /home/cvspublic/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/DatePicker.java,v
> retrieving revision 1.8
> diff -u -r1.8 DatePicker.java
> --- src/java/org/apache/tapestry/form/DatePicker.java   3 May 2005 17:41:27 -0000       1.8
> +++ src/java/org/apache/tapestry/form/DatePicker.java   31 May 2005 09:10:52 -0000
> @@ -45,6 +45,13 @@
> 
>  public abstract class DatePicker extends AbstractFormComponent
>  {
> +    /**
> +     * The name of an {@link org.apache.tapestry.IRequestCycle} attribute in which
> +     * the DatePicker component that generates the javascript function is stored.
> +     * The function is only required once per page.
> +     */
> +    public static final String ATTRIBUTE_FUNCTION_NAME = "org.apache.tapestry.form.DatePicker_function";
> +
>      public abstract String getFormat();
> 
>      public abstract Date getValue();
> @@ -133,22 +140,28 @@
> 
>              Date value = getValue();
> 
> -            Map symbols = new HashMap();
> +            // make sure the DatePicker handler is on the page (once)
> +            if (cycle.getAttribute(ATTRIBUTE_FUNCTION_NAME) == null)
> +            {
> +                cycle.setAttribute(ATTRIBUTE_FUNCTION_NAME, this);
> +
> +                Map symbols = new HashMap();
> 
> -            symbols.put(SYM_NAME, name);
> -            symbols.put(SYM_FORMAT, format);
> -            symbols.put(SYM_INCL_WEEK, getIncludeWeek() ? Boolean.TRUE : Boolean.FALSE);
> -
> -            symbols.put(SYM_MONTHNAMES, makeStringList(dfs.getMonths(), 0, 12));
> -            symbols.put(SYM_SHORT_MONTHNAMES, makeStringList(dfs.getShortMonths(), 0, 12));
> -            symbols.put(SYM_WEEKDAYNAMES, makeStringList(dfs.getWeekdays(), 1, 8));
> -            symbols.put(SYM_SHORT_WEEKDAYNAMES, makeStringList(dfs.getShortWeekdays(), 1, 8));
> -            symbols.put(SYM_FIRSTDAYINWEEK, new Integer(cal.getFirstDayOfWeek() - 1));
> -            symbols.put(SYM_MINDAYSINFIRSTWEEK, new Integer(cal.getMinimalDaysInFirstWeek()));
> -            symbols.put(SYM_FORMNAME, form.getName());
> -            symbols.put(SYM_VALUE, value);
> +                symbols.put(SYM_NAME, name);
> +                symbols.put(SYM_FORMAT, format);
> +                symbols.put(SYM_INCL_WEEK, getIncludeWeek() ? Boolean.TRUE : Boolean.FALSE);
> +
> +                symbols.put(SYM_MONTHNAMES, makeStringList(dfs.getMonths(), 0, 12));
> +                symbols.put(SYM_SHORT_MONTHNAMES, makeStringList(dfs.getShortMonths(), 0, 12));
> +                symbols.put(SYM_WEEKDAYNAMES, makeStringList(dfs.getWeekdays(), 1, 8));
> +                symbols.put(SYM_SHORT_WEEKDAYNAMES, makeStringList(dfs.getShortWeekdays(), 1, 8));
> +                symbols.put(SYM_FIRSTDAYINWEEK, new Integer(cal.getFirstDayOfWeek() - 1));
> +                symbols.put(SYM_MINDAYSINFIRSTWEEK, new Integer(cal.getMinimalDaysInFirstWeek()));
> +                symbols.put(SYM_FORMNAME, form.getName());
> +                symbols.put(SYM_VALUE, value);
> 
> -            _script.execute(cycle, pageRenderSupport, symbols);
> +                _script.execute(cycle, pageRenderSupport, symbols);
> +            }
> 
>              writer.beginEmpty("input");
>              writer.attribute("type", "text");
> @@ -168,7 +181,7 @@
>              if (!disabled)
>              {
>                  writer.begin("a");
> -                writer.attribute("href", (String) symbols.get(SYM_BUTTONONCLICKHANDLER));
> +                writer.attribute("href", "javascript:datePickerCalendar.toggle(document." + form.getName() + "." + name + ");");
>              }
> 
>              IAsset icon = getIcon();
> Index: src/java/org/apache/tapestry/form/DatePicker.js
> ===================================================================
> RCS file: /home/cvspublic/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/DatePicker.js,v
> retrieving revision 1.1
> diff -u -r1.1 DatePicker.js
> --- src/java/org/apache/tapestry/form/DatePicker.js     3 Sep 2004 17:46:00 -0000       1.1
> +++ src/java/org/apache/tapestry/form/DatePicker.js     31 May 2005 09:10:53 -0000
> @@ -92,7 +92,7 @@
> 
>         this._calDiv = null;
> 
> -
> +       this._element = null;
>  }
> 
>  /**
> @@ -636,6 +636,9 @@
> 
>  Calendar.prototype.clearSelectedDate = function() {
>         this._selectedDate = null;
> +       if (this._element)
> +               this._element.value = "";
> +
>         if (typeof this.onchange == "function") {
>                 this.onchange();
>         }
> @@ -780,6 +783,9 @@
>        frm = eval("frm.replace(/\\b" + sect + "\\b/,'" + bits[sect] + "');");
>      }
> 
> +    if (this._element)
> +        this._element.value = frm;
> +
>      return frm;
>  }
> 
> Index: src/java/org/apache/tapestry/form/DatePicker.script
> ===================================================================
> RCS file: /home/cvspublic/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/DatePicker.script,v
> retrieving revision 1.2
> diff -u -r1.2 DatePicker.script
> --- src/java/org/apache/tapestry/form/DatePicker.script 5 Jan 2005 23:17:13 -0000       1.2
> +++ src/java/org/apache/tapestry/form/DatePicker.script 31 May 2005 09:10:53 -0000
> @@ -36,39 +36,39 @@
>  <input-symbol key="value" required="no"/>
> 
>  <let key="calendarObject" unique="yes">
> -       calendar_${name}
> +       datePickerCalendar
>  </let>
> 
>  <let key="buttonOnclickHandler">
> -  javascript:${calendarObject}.toggle(document.${formName}.${name});
> +       javascript:datePickerCalendar.toggle(document.${formName}.${name});
>  </let>
> 
>  <body>
> -var ${calendarObject};
> +var datePickerCalendar;
>  </body>
> 
>  <initialization>
> -
> +
>  <if expression="value == null">
> -${calendarObject} = new Calendar();
> +datePickerCalendar = new Calendar();
>  </if>
>  <if expression="value != null">
> -${calendarObject} = new Calendar(${value.time});
> +datePickerCalendar = new Calendar(${value.time});
>  </if>
> -
> -${calendarObject}.setMonthNames(new Array(${monthNames}));
> -${calendarObject}.setShortMonthNames(new Array(${shortMonthNames}));
> -${calendarObject}.setWeekDayNames(new Array(${weekDayNames}));
> -${calendarObject}.setShortWeekDayNames(new Array(${shortWeekDayNames}));
> -${calendarObject}.setFormat("${format}");
> -${calendarObject}.setFirstDayOfWeek(${firstDayInWeek});
> -${calendarObject}.setMinimalDaysInFirstWeek(${minimalDaysInFirstWeek});
> -${calendarObject}.setIncludeWeek(${includeWeek});
> 
> -${calendarObject}.create();
> +datePickerCalendar.setMonthNames(new Array(${monthNames}));
> +datePickerCalendar.setShortMonthNames(new Array(${shortMonthNames}));
> +datePickerCalendar.setWeekDayNames(new Array(${weekDayNames}));
> +datePickerCalendar.setShortWeekDayNames(new Array(${shortWeekDayNames}));
> +datePickerCalendar.setFormat("${format}");
> +datePickerCalendar.setFirstDayOfWeek(${firstDayInWeek});
> +datePickerCalendar.setMinimalDaysInFirstWeek(${minimalDaysInFirstWeek});
> +datePickerCalendar.setIncludeWeek(${includeWeek});
> +
> +datePickerCalendar.create();
> 
> -${calendarObject}.onchange = function() {
> -       document.${formName}.${name}.value  = ${calendarObject}.formatDate();
> +datePickerCalendar.onchange = function() {
> +       datePickerCalendar.formatDate();
>  }
> 
>  </initialization>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org
> 
> 


-- 
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Jakarta Tapestry
Creator, Jakarta HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org