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