You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Geoff Callender <ge...@gmail.com> on 2013/11/20 09:13:13 UTC

Re: [ANN] Tapestry 5.4 alternative datepicker

Very nice. But doesn't handle disabled. It's an easy fix:

Instead of this:

@InjectContainer

private ClientElement clientElement;

do this:

@InjectContainer

private TextField clientElement;

and replace this:

element.elementBefore("input", "value", formatedDate, "type", "hidden",
"class", "form-control", "id", clientID);

with this:

Element dateField = element.elementBefore("input", "value", formatedDate,
"type", "hidden", "class",

"form-control", "id", clientID);


 if (clientElement.isDisabled()) {

dateField.attribute("disabled", "disabled");

}

Cheers,

Geoff


On 9 October 2013 22:02, Barry Books <tr...@gmail.com> wrote:

> I pushed a new snapshot. What documentation there is here
>
> https://github.com/trsvax/tapestry-datepicker
>
> This version allows overriding the location of the javascript and css for
> the jquery date picker.
>
> The basic features are
>
> 1. Translators for textfield to validate date/calendar/timestamp entry
> 2. A mixin that adds jQuery Calendar support to the textfield
> 3. Native type="date" support (at least on the iPhone)
> 4. BeanEdit support
> 5. Ability to override css/javascript included by the jQuery mixin
>
> I think this makes it feature complete but at this point things are still
> subject to change. I'm going to create some better docs and tests then I'll
> push a version to maven central
>
> Thanks for the input so far
>
>
>
> On Tue, Oct 8, 2013 at 7:54 PM, Barry Books <tr...@gmail.com> wrote:
>
> > it's in the current one. I'll also be pushing up some fixes in the
> morning.
> >
> >
> > On Tue, Oct 8, 2013 at 5:53 PM, Lenny Primak <lprimak@hope.nyc.ny.us
> >wrote:
> >
> >> Let us know when the beaneditor support is there.  I'll try it then and
> >> give feedback
> >> Thank you!
> >>
> >> On Oct 8, 2013, at 6:39 AM, Barry Books wrote:
> >>
> >> > https://oss.sonatype.org/content/repositories/snapshots/
> >> >
> >> >
> >> >
> >> > <groupId>com.trsvax</groupId>
> >> >
> >> > <artifactId>tapestry-datepicker</artifactId>
> >> >
> >> > <version>0.0.1-SNAPSHOT</version>
> >> >
> >> >
> >> > It's still a work in progress but I think it's starting to come
> >> together.
> >> > Being able to pass attributes from the translator into the html stream
> >> is
> >> > proving useful. For example you can do things such as
> >> >
> >> > placeholder="mm-dd-yyyy"
> >> >
> >> >
> >> >
> >> >
> >> > On Tue, Oct 8, 2013 at 4:33 AM, Geoff Callender <
> >> > geoff.callender.jumpstart@gmail.com> wrote:
> >> >
> >> >> What's the artifact info?
> >> >>
> >> >> On 07/10/2013, at 10:26 PM, Barry Books wrote:
> >> >>
> >> >>> Snapshot 0.0.1-SNAPSHOT is available at
> >> >>>
> >> >>>
> >> >>> https://oss.sonatype.org/content/repositories/snapshots/
> >> >>>
> >> >>> I have a bit of cleanup and then I'll push a version to maven
> central
> >> >>>
> >> >>>
> >> >>>
> >> >>> On Fri, Oct 4, 2013 at 3:33 PM, Barry Books <tr...@gmail.com>
> wrote:
> >> >>>
> >> >>>> After much googling I think I've added iPhone type="date" support.
> I
> >> had
> >> >>>> to make a few assumptions to get it to work.
> >> >>>>
> >> >>>> 1. The format for type="date" support is yyyy-mm-dd. This is what
> the
> >> >>>> iPhone appears to use and seems a reasonable choice.
> >> >>>> 2. The best test I could find to indicate native support is
> >> >>>>
> >> >>>> *var* input = document.createElement('input');
> >> >>>>
> >> >>>> input.setAttribute('type', 'date');
> >> >>>>
> >> >>>> input.value = 'testing';
> >> >>>>
> >> >>>>
> >> >>>> If the type is date and the value is not testing I'm assuming
> native
> >> >> date
> >> >>>> support.
> >> >>>>
> >> >>>>
> >> >>>> What I ended up doing was adding a hidden element to support native
> >> date
> >> >>>> pickers. If I think there is support I hide the real one and turn
> the
> >> >>>> hidden one into a date. On a form submit I copy the data into the
> >> real
> >> >>>> element. This way I can support both date formats. It seems to work
> >> on
> >> >> my
> >> >>>> iPhone but that's not a large sample.
> >> >>>>
> >> >>>>
> >> >>>> There is still work to be done but I think I should be able to meet
> >> all
> >> >>>> the requirements I've seen so far.
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>> On Thu, Oct 3, 2013 at 9:15 PM, Barry Books <tr...@gmail.com>
> >> wrote:
> >> >>>>
> >> >>>>> Unfortunately modernizer does not really support that. From the
> docs
> >> >>>>>
> >> >>>>> Modernizr cannot detect that date inputs create a datepicker,
> >> >>>>>
> >> >>>>> It is possible to detect if a browser support type="date" but that
> >> does
> >> >>>>> not mean it has a datepicker. I suspect I'm going to add an option
> >> to
> >> >> give
> >> >>>>> it a try.
> >> >>>>>
> >> >>>>>
> >> >>>>> On Thu, Oct 3, 2013 at 8:12 PM, Geoff Callender <
> >> >>>>> geoff.callender.jumpstart@gmail.com> wrote:
> >> >>>>>
> >> >>>>>> Sounds good, Barry.
> >> >>>>>>
> >> >>>>>> You mentioned earlier that you were "planing on using modernizr
> to
> >> >> detect
> >> >>>>>> if type="date" is supported. " so that browsers with good HTML5
> >> date
> >> >>>>>> support (eg. iOS Safari, Chrome) are left alone. How did that go?
> >> >>>>>>
> >> >>>>>>
> >> >>>>>> On 3 October 2013 12:08, Barry Books <tr...@gmail.com> wrote:
> >> >>>>>>
> >> >>>>>>> I've uploaded the initial version to github
> >> >>>>>>>
> >> >>>>>>> https://github.com/trsvax/tapestry-datepicker
> >> >>>>>>>
> >> >>>>>>> I think I'm going to make this standalone project that only
> >> contains
> >> >>>>>> the
> >> >>>>>>> datepicker. This will make it easier for other project to just
> >> >> include
> >> >>>>>> it.
> >> >>>>>>> Currently to use it you will have to download and build it.
>  Here
> >> is
> >> >> an
> >> >>>>>>> example usage
> >> >>>>>>>
> >> >>>>>>> <t:form>
> >> >>>>>>>   <t:textfield value="date"
> t:mixins="datefield/JQueryDatePicker"
> >> >>>>>>> data-duration="slow"/>
> >> >>>>>>>   <input type="submit"/>
> >> >>>>>>> </t:form>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>> All that's required is the input type be a date which causes
> >> Tapestry
> >> >>>>>> to
> >> >>>>>>> use a Date Translator to convert the data to/from a string. This
> >> also
> >> >>>>>>> creates the client side validation. The mixin adds the client
> side
> >> >>>>>>> interface. In this case the JQuery UI calendar.
> >> >>>>>>>
> >> >>>>>>> If you prefer you can create your own component and override the
> >> >>>>>> Tapestry
> >> >>>>>>> one.
> >> >>>>>>>
> >> >>>>>>> public class DateField extends TextField {
> >> >>>>>>>
> >> >>>>>>>   @Mixin
> >> >>>>>>>   private JQueryDatePIcker mixin;
> >> >>>>>>>
> >> >>>>>>> }
> >> >>>>>>>
> >> >>>>>>> Questions, commets etc are welcome
> >> >>>>>>>
> >> >>>>>>> Barry
> >> >>>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>
> >> >>
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >> >> For additional commands, e-mail: users-help@tapestry.apache.org
> >> >>
> >> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >> For additional commands, e-mail: users-help@tapestry.apache.org
> >>
> >>
> >
>

Re: [ANN] Tapestry 5.4 alternative datepicker

Posted by Barry Books <tr...@gmail.com>.
It appears Geoff did by creating a type coercer between date and joda time.


On Sun, Dec 1, 2013 at 1:49 PM, Balázs Palcsó <pa...@gmail.com>wrote:

> Hi,
>
> I am trying to use this component with org.joda.time.DateTime and I get the
> following error:
> Parameter 'translate' of component job/Post:bidsdeadline is bound to null.
> This parameter is not allowed to be null.
>
> If I apply this solution
>
> http://programmerslounge.blogspot.co.uk/2013/07/error-parameter-translate-of-component.html
> Then the above error is gone, but tapestry-datepicker (JQueryDatePicker
> class) expects a TextField and not a DateField. So it fails there
>
> I have added a type coercer for DateTime Date and configured an
> EditBlockContribution for DateTime as per follows:
>
> *public* *static* *void* contributeTypeCoercer(*final* Configuration<
> *CoercionTuple*> configuration) {
>
> *final* Coercion<DateTime, Date> coercion = *new* Coercion<DateTime,
> Date>() {
>
> @Override
>
> *public* Date coerce(*final* DateTime input) {
>
> *return* input != *null* ? input.toDate() : *null*;
>
> }
>
> };
>
>
>  configuration.add(*new* CoercionTuple<DateTime, Date>(DateTime.*class*,
> Date.*class*, coercion));
>
>
>  *final* Coercion<Date, DateTime> coercion2 = *new* Coercion<Date,
> DateTime>() {
>
>
>  @Override
>
> *public* DateTime coerce(*final* Date input) {
>
> *return* *new* DateTime(input);
>
> }
>
> };
>
>
>  configuration.add(*new* CoercionTuple<Date, DateTime>(Date.*class*,
> DateTime.*class*, coercion2));
>
> }
>
>
>  *public* *static* *void* contributeDefaultDataTypeAnalyzer(
> @SuppressWarnings("rawtypes") *final* MappedConfiguration<Class, String>
> configuration) {
>
> configuration.add(DateTime.*class*, "dateTime");
>
> }
>
>
>  *public* *static* *void*
> contributeBeanBlockSource(*final*Configuration<BeanBlockContribution>
> configuration) {
>
> configuration.add(*new* EditBlockContribution("dateTime",
> "datefield/AppPropertyEditBlocks", "dateTime"));
>
> }
>
>
> Can somebody point what I am missing please?
> Has anybody used tapestry-datepicker successfully with Joda-Time?
>
> Thanks,
> Balazs
>
>
> On 25 November 2013 14:27, Barry Books <tr...@gmail.com> wrote:
>
> > Added this also, but now I wonder what would happen if you provide a
> > LocalDate translator but no TypeCoercers. I had assumed the type of value
> > was Date but it's really unknown. Not sure this can be solved in a
> > generalized way. The code is only needed to support native date pickers
> so
> > perhaps it should fail more gracefully and warn you to provide a
> > TypeCoercer.
> >
> >
> > On Sun, Nov 24, 2013 at 11:48 PM, Geoff Callender <
> > geoff.callender.jumpstart@gmail.com> wrote:
> >
> > > Cool.
> > >
> > > I tried to use date-picker with a LocalDate (from Joda Time) but got a
> > > class-cast exception. It was unaware that I had contributed
> TypeCoercers
> > > between LocalDate and Date (
> > >
> >
> http://jumpstart.doublenegative.com.au/jumpstart/examples/lang/typecoercers
> > ).
> > >
> > > It's an easy fix that will allow the date picker to work with any class
> > > that is coerced to, and from, Date.
> > >
> > > Add this:
> > >
> > >         @Inject
> > >         private TypeCoercer coercer;
> > >
> > > and replace this:
> > >
> > >                 Date date = (Date) value;
> > >
> > > with this:
> > >
> > >                 Date date = coercer.coerce(value, Date.class);
> > >
> > > Cheers,
> > >
> > > Geoff
> > >
> > >
> > > On 24/11/2013, at 1:32 AM, Barry Books wrote:
> > >
> > > > Thanks,
> > > >
> > > > I added this to the code
> > > >
> > > >
> > > > On Wed, Nov 20, 2013 at 2:13 AM, Geoff Callender <
> > > > geoff.callender.jumpstart@gmail.com> wrote:
> > > >
> > > >> Very nice. But doesn't handle disabled. It's an easy fix:
> > > >>
> > > >> Instead of this:
> > > >>
> > > >> @InjectContainer
> > > >>
> > > >> private ClientElement clientElement;
> > > >>
> > > >> do this:
> > > >>
> > > >> @InjectContainer
> > > >>
> > > >> private TextField clientElement;
> > > >>
> > > >> and replace this:
> > > >>
> > > >> element.elementBefore("input", "value", formatedDate, "type",
> > "hidden",
> > > >> "class", "form-control", "id", clientID);
> > > >>
> > > >> with this:
> > > >>
> > > >> Element dateField = element.elementBefore("input", "value",
> > > formatedDate,
> > > >> "type", "hidden", "class",
> > > >>
> > > >> "form-control", "id", clientID);
> > > >>
> > > >>
> > > >> if (clientElement.isDisabled()) {
> > > >>
> > > >> dateField.attribute("disabled", "disabled");
> > > >>
> > > >> }
> > > >>
> > > >> Cheers,
> > > >>
> > > >> Geoff
> > > >>
> > > >>
> > > >> On 9 October 2013 22:02, Barry Books <tr...@gmail.com> wrote:
> > > >>
> > > >>> I pushed a new snapshot. What documentation there is here
> > > >>>
> > > >>> https://github.com/trsvax/tapestry-datepicker
> > > >>>
> > > >>> This version allows overriding the location of the javascript and
> css
> > > for
> > > >>> the jquery date picker.
> > > >>>
> > > >>> The basic features are
> > > >>>
> > > >>> 1. Translators for textfield to validate date/calendar/timestamp
> > entry
> > > >>> 2. A mixin that adds jQuery Calendar support to the textfield
> > > >>> 3. Native type="date" support (at least on the iPhone)
> > > >>> 4. BeanEdit support
> > > >>> 5. Ability to override css/javascript included by the jQuery mixin
> > > >>>
> > > >>> I think this makes it feature complete but at this point things are
> > > still
> > > >>> subject to change. I'm going to create some better docs and tests
> > then
> > > >> I'll
> > > >>> push a version to maven central
> > > >>>
> > > >>> Thanks for the input so far
> > > >>>
> > > >>>
> > > >>>
> > > >>> On Tue, Oct 8, 2013 at 7:54 PM, Barry Books <tr...@gmail.com>
> > wrote:
> > > >>>
> > > >>>> it's in the current one. I'll also be pushing up some fixes in the
> > > >>> morning.
> > > >>>>
> > > >>>>
> > > >>>> On Tue, Oct 8, 2013 at 5:53 PM, Lenny Primak <
> > lprimak@hope.nyc.ny.us
> > > >>>> wrote:
> > > >>>>
> > > >>>>> Let us know when the beaneditor support is there.  I'll try it
> then
> > > >> and
> > > >>>>> give feedback
> > > >>>>> Thank you!
> > > >>>>>
> > > >>>>> On Oct 8, 2013, at 6:39 AM, Barry Books wrote:
> > > >>>>>
> > > >>>>>> https://oss.sonatype.org/content/repositories/snapshots/
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> <groupId>com.trsvax</groupId>
> > > >>>>>>
> > > >>>>>> <artifactId>tapestry-datepicker</artifactId>
> > > >>>>>>
> > > >>>>>> <version>0.0.1-SNAPSHOT</version>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> It's still a work in progress but I think it's starting to come
> > > >>>>> together.
> > > >>>>>> Being able to pass attributes from the translator into the html
> > > >> stream
> > > >>>>> is
> > > >>>>>> proving useful. For example you can do things such as
> > > >>>>>>
> > > >>>>>> placeholder="mm-dd-yyyy"
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> On Tue, Oct 8, 2013 at 4:33 AM, Geoff Callender <
> > > >>>>>> geoff.callender.jumpstart@gmail.com> wrote:
> > > >>>>>>
> > > >>>>>>> What's the artifact info?
> > > >>>>>>>
> > > >>>>>>> On 07/10/2013, at 10:26 PM, Barry Books wrote:
> > > >>>>>>>
> > > >>>>>>>> Snapshot 0.0.1-SNAPSHOT is available at
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> https://oss.sonatype.org/content/repositories/snapshots/
> > > >>>>>>>>
> > > >>>>>>>> I have a bit of cleanup and then I'll push a version to maven
> > > >>> central
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> On Fri, Oct 4, 2013 at 3:33 PM, Barry Books <trsvax@gmail.com
> >
> > > >>> wrote:
> > > >>>>>>>>
> > > >>>>>>>>> After much googling I think I've added iPhone type="date"
> > > >> support.
> > > >>> I
> > > >>>>> had
> > > >>>>>>>>> to make a few assumptions to get it to work.
> > > >>>>>>>>>
> > > >>>>>>>>> 1. The format for type="date" support is yyyy-mm-dd. This is
> > what
> > > >>> the
> > > >>>>>>>>> iPhone appears to use and seems a reasonable choice.
> > > >>>>>>>>> 2. The best test I could find to indicate native support is
> > > >>>>>>>>>
> > > >>>>>>>>> *var* input = document.createElement('input');
> > > >>>>>>>>>
> > > >>>>>>>>> input.setAttribute('type', 'date');
> > > >>>>>>>>>
> > > >>>>>>>>> input.value = 'testing';
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>> If the type is date and the value is not testing I'm assuming
> > > >>> native
> > > >>>>>>> date
> > > >>>>>>>>> support.
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>> What I ended up doing was adding a hidden element to support
> > > >> native
> > > >>>>> date
> > > >>>>>>>>> pickers. If I think there is support I hide the real one and
> > turn
> > > >>> the
> > > >>>>>>>>> hidden one into a date. On a form submit I copy the data into
> > the
> > > >>>>> real
> > > >>>>>>>>> element. This way I can support both date formats. It seems
> to
> > > >> work
> > > >>>>> on
> > > >>>>>>> my
> > > >>>>>>>>> iPhone but that's not a large sample.
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>> There is still work to be done but I think I should be able
> to
> > > >> meet
> > > >>>>> all
> > > >>>>>>>>> the requirements I've seen so far.
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>> On Thu, Oct 3, 2013 at 9:15 PM, Barry Books <
> trsvax@gmail.com>
> > > >>>>> wrote:
> > > >>>>>>>>>
> > > >>>>>>>>>> Unfortunately modernizer does not really support that. From
> > the
> > > >>> docs
> > > >>>>>>>>>>
> > > >>>>>>>>>> Modernizr cannot detect that date inputs create a
> datepicker,
> > > >>>>>>>>>>
> > > >>>>>>>>>> It is possible to detect if a browser support type="date"
> but
> > > >> that
> > > >>>>> does
> > > >>>>>>>>>> not mean it has a datepicker. I suspect I'm going to add an
> > > >> option
> > > >>>>> to
> > > >>>>>>> give
> > > >>>>>>>>>> it a try.
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>> On Thu, Oct 3, 2013 at 8:12 PM, Geoff Callender <
> > > >>>>>>>>>> geoff.callender.jumpstart@gmail.com> wrote:
> > > >>>>>>>>>>
> > > >>>>>>>>>>> Sounds good, Barry.
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> You mentioned earlier that you were "planing on using
> > modernizr
> > > >>> to
> > > >>>>>>> detect
> > > >>>>>>>>>>> if type="date" is supported. " so that browsers with good
> > HTML5
> > > >>>>> date
> > > >>>>>>>>>>> support (eg. iOS Safari, Chrome) are left alone. How did
> that
> > > >> go?
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> On 3 October 2013 12:08, Barry Books <tr...@gmail.com>
> > wrote:
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>> I've uploaded the initial version to github
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> https://github.com/trsvax/tapestry-datepicker
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> I think I'm going to make this standalone project that
> only
> > > >>>>> contains
> > > >>>>>>>>>>> the
> > > >>>>>>>>>>>> datepicker. This will make it easier for other project to
> > just
> > > >>>>>>> include
> > > >>>>>>>>>>> it.
> > > >>>>>>>>>>>> Currently to use it you will have to download and build
> it.
> > > >>> Here
> > > >>>>> is
> > > >>>>>>> an
> > > >>>>>>>>>>>> example usage
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> <t:form>
> > > >>>>>>>>>>>>  <t:textfield value="date"
> > > >>> t:mixins="datefield/JQueryDatePicker"
> > > >>>>>>>>>>>> data-duration="slow"/>
> > > >>>>>>>>>>>>  <input type="submit"/>
> > > >>>>>>>>>>>> </t:form>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> All that's required is the input type be a date which
> causes
> > > >>>>> Tapestry
> > > >>>>>>>>>>> to
> > > >>>>>>>>>>>> use a Date Translator to convert the data to/from a
> string.
> > > >> This
> > > >>>>> also
> > > >>>>>>>>>>>> creates the client side validation. The mixin adds the
> > client
> > > >>> side
> > > >>>>>>>>>>>> interface. In this case the JQuery UI calendar.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> If you prefer you can create your own component and
> override
> > > >> the
> > > >>>>>>>>>>> Tapestry
> > > >>>>>>>>>>>> one.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> public class DateField extends TextField {
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>  @Mixin
> > > >>>>>>>>>>>>  private JQueryDatePIcker mixin;
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> }
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> Questions, commets etc are welcome
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> Barry
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>
> ---------------------------------------------------------------------
> > > >>>>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > > >>>>>>> For additional commands, e-mail:
> users-help@tapestry.apache.org
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > ---------------------------------------------------------------------
> > > >>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > > >>>>> For additional commands, e-mail: users-help@tapestry.apache.org
> > > >>>>>
> > > >>>>>
> > > >>>>
> > > >>>
> > > >>
> > >
> > >
> >
>

Re: [ANN] Tapestry 5.4 alternative datepicker

Posted by Balázs Palcsó <pa...@gmail.com>.
Hi,

I am trying to use this component with org.joda.time.DateTime and I get the
following error:
Parameter 'translate' of component job/Post:bidsdeadline is bound to null.
This parameter is not allowed to be null.

If I apply this solution
http://programmerslounge.blogspot.co.uk/2013/07/error-parameter-translate-of-component.html
Then the above error is gone, but tapestry-datepicker (JQueryDatePicker
class) expects a TextField and not a DateField. So it fails there

I have added a type coercer for DateTime Date and configured an
EditBlockContribution for DateTime as per follows:

*public* *static* *void* contributeTypeCoercer(*final* Configuration<
*CoercionTuple*> configuration) {

*final* Coercion<DateTime, Date> coercion = *new* Coercion<DateTime,
Date>() {

@Override

*public* Date coerce(*final* DateTime input) {

*return* input != *null* ? input.toDate() : *null*;

}

};


 configuration.add(*new* CoercionTuple<DateTime, Date>(DateTime.*class*,
Date.*class*, coercion));


 *final* Coercion<Date, DateTime> coercion2 = *new* Coercion<Date,
DateTime>() {


 @Override

*public* DateTime coerce(*final* Date input) {

*return* *new* DateTime(input);

}

};


 configuration.add(*new* CoercionTuple<Date, DateTime>(Date.*class*,
DateTime.*class*, coercion2));

}


 *public* *static* *void* contributeDefaultDataTypeAnalyzer(
@SuppressWarnings("rawtypes") *final* MappedConfiguration<Class, String>
configuration) {

configuration.add(DateTime.*class*, "dateTime");

}


 *public* *static* *void*
contributeBeanBlockSource(*final*Configuration<BeanBlockContribution>
configuration) {

configuration.add(*new* EditBlockContribution("dateTime",
"datefield/AppPropertyEditBlocks", "dateTime"));

}


Can somebody point what I am missing please?
Has anybody used tapestry-datepicker successfully with Joda-Time?

Thanks,
Balazs


On 25 November 2013 14:27, Barry Books <tr...@gmail.com> wrote:

> Added this also, but now I wonder what would happen if you provide a
> LocalDate translator but no TypeCoercers. I had assumed the type of value
> was Date but it's really unknown. Not sure this can be solved in a
> generalized way. The code is only needed to support native date pickers so
> perhaps it should fail more gracefully and warn you to provide a
> TypeCoercer.
>
>
> On Sun, Nov 24, 2013 at 11:48 PM, Geoff Callender <
> geoff.callender.jumpstart@gmail.com> wrote:
>
> > Cool.
> >
> > I tried to use date-picker with a LocalDate (from Joda Time) but got a
> > class-cast exception. It was unaware that I had contributed TypeCoercers
> > between LocalDate and Date (
> >
> http://jumpstart.doublenegative.com.au/jumpstart/examples/lang/typecoercers
> ).
> >
> > It's an easy fix that will allow the date picker to work with any class
> > that is coerced to, and from, Date.
> >
> > Add this:
> >
> >         @Inject
> >         private TypeCoercer coercer;
> >
> > and replace this:
> >
> >                 Date date = (Date) value;
> >
> > with this:
> >
> >                 Date date = coercer.coerce(value, Date.class);
> >
> > Cheers,
> >
> > Geoff
> >
> >
> > On 24/11/2013, at 1:32 AM, Barry Books wrote:
> >
> > > Thanks,
> > >
> > > I added this to the code
> > >
> > >
> > > On Wed, Nov 20, 2013 at 2:13 AM, Geoff Callender <
> > > geoff.callender.jumpstart@gmail.com> wrote:
> > >
> > >> Very nice. But doesn't handle disabled. It's an easy fix:
> > >>
> > >> Instead of this:
> > >>
> > >> @InjectContainer
> > >>
> > >> private ClientElement clientElement;
> > >>
> > >> do this:
> > >>
> > >> @InjectContainer
> > >>
> > >> private TextField clientElement;
> > >>
> > >> and replace this:
> > >>
> > >> element.elementBefore("input", "value", formatedDate, "type",
> "hidden",
> > >> "class", "form-control", "id", clientID);
> > >>
> > >> with this:
> > >>
> > >> Element dateField = element.elementBefore("input", "value",
> > formatedDate,
> > >> "type", "hidden", "class",
> > >>
> > >> "form-control", "id", clientID);
> > >>
> > >>
> > >> if (clientElement.isDisabled()) {
> > >>
> > >> dateField.attribute("disabled", "disabled");
> > >>
> > >> }
> > >>
> > >> Cheers,
> > >>
> > >> Geoff
> > >>
> > >>
> > >> On 9 October 2013 22:02, Barry Books <tr...@gmail.com> wrote:
> > >>
> > >>> I pushed a new snapshot. What documentation there is here
> > >>>
> > >>> https://github.com/trsvax/tapestry-datepicker
> > >>>
> > >>> This version allows overriding the location of the javascript and css
> > for
> > >>> the jquery date picker.
> > >>>
> > >>> The basic features are
> > >>>
> > >>> 1. Translators for textfield to validate date/calendar/timestamp
> entry
> > >>> 2. A mixin that adds jQuery Calendar support to the textfield
> > >>> 3. Native type="date" support (at least on the iPhone)
> > >>> 4. BeanEdit support
> > >>> 5. Ability to override css/javascript included by the jQuery mixin
> > >>>
> > >>> I think this makes it feature complete but at this point things are
> > still
> > >>> subject to change. I'm going to create some better docs and tests
> then
> > >> I'll
> > >>> push a version to maven central
> > >>>
> > >>> Thanks for the input so far
> > >>>
> > >>>
> > >>>
> > >>> On Tue, Oct 8, 2013 at 7:54 PM, Barry Books <tr...@gmail.com>
> wrote:
> > >>>
> > >>>> it's in the current one. I'll also be pushing up some fixes in the
> > >>> morning.
> > >>>>
> > >>>>
> > >>>> On Tue, Oct 8, 2013 at 5:53 PM, Lenny Primak <
> lprimak@hope.nyc.ny.us
> > >>>> wrote:
> > >>>>
> > >>>>> Let us know when the beaneditor support is there.  I'll try it then
> > >> and
> > >>>>> give feedback
> > >>>>> Thank you!
> > >>>>>
> > >>>>> On Oct 8, 2013, at 6:39 AM, Barry Books wrote:
> > >>>>>
> > >>>>>> https://oss.sonatype.org/content/repositories/snapshots/
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>> <groupId>com.trsvax</groupId>
> > >>>>>>
> > >>>>>> <artifactId>tapestry-datepicker</artifactId>
> > >>>>>>
> > >>>>>> <version>0.0.1-SNAPSHOT</version>
> > >>>>>>
> > >>>>>>
> > >>>>>> It's still a work in progress but I think it's starting to come
> > >>>>> together.
> > >>>>>> Being able to pass attributes from the translator into the html
> > >> stream
> > >>>>> is
> > >>>>>> proving useful. For example you can do things such as
> > >>>>>>
> > >>>>>> placeholder="mm-dd-yyyy"
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>> On Tue, Oct 8, 2013 at 4:33 AM, Geoff Callender <
> > >>>>>> geoff.callender.jumpstart@gmail.com> wrote:
> > >>>>>>
> > >>>>>>> What's the artifact info?
> > >>>>>>>
> > >>>>>>> On 07/10/2013, at 10:26 PM, Barry Books wrote:
> > >>>>>>>
> > >>>>>>>> Snapshot 0.0.1-SNAPSHOT is available at
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> https://oss.sonatype.org/content/repositories/snapshots/
> > >>>>>>>>
> > >>>>>>>> I have a bit of cleanup and then I'll push a version to maven
> > >>> central
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> On Fri, Oct 4, 2013 at 3:33 PM, Barry Books <tr...@gmail.com>
> > >>> wrote:
> > >>>>>>>>
> > >>>>>>>>> After much googling I think I've added iPhone type="date"
> > >> support.
> > >>> I
> > >>>>> had
> > >>>>>>>>> to make a few assumptions to get it to work.
> > >>>>>>>>>
> > >>>>>>>>> 1. The format for type="date" support is yyyy-mm-dd. This is
> what
> > >>> the
> > >>>>>>>>> iPhone appears to use and seems a reasonable choice.
> > >>>>>>>>> 2. The best test I could find to indicate native support is
> > >>>>>>>>>
> > >>>>>>>>> *var* input = document.createElement('input');
> > >>>>>>>>>
> > >>>>>>>>> input.setAttribute('type', 'date');
> > >>>>>>>>>
> > >>>>>>>>> input.value = 'testing';
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> If the type is date and the value is not testing I'm assuming
> > >>> native
> > >>>>>>> date
> > >>>>>>>>> support.
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> What I ended up doing was adding a hidden element to support
> > >> native
> > >>>>> date
> > >>>>>>>>> pickers. If I think there is support I hide the real one and
> turn
> > >>> the
> > >>>>>>>>> hidden one into a date. On a form submit I copy the data into
> the
> > >>>>> real
> > >>>>>>>>> element. This way I can support both date formats. It seems to
> > >> work
> > >>>>> on
> > >>>>>>> my
> > >>>>>>>>> iPhone but that's not a large sample.
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> There is still work to be done but I think I should be able to
> > >> meet
> > >>>>> all
> > >>>>>>>>> the requirements I've seen so far.
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> On Thu, Oct 3, 2013 at 9:15 PM, Barry Books <tr...@gmail.com>
> > >>>>> wrote:
> > >>>>>>>>>
> > >>>>>>>>>> Unfortunately modernizer does not really support that. From
> the
> > >>> docs
> > >>>>>>>>>>
> > >>>>>>>>>> Modernizr cannot detect that date inputs create a datepicker,
> > >>>>>>>>>>
> > >>>>>>>>>> It is possible to detect if a browser support type="date" but
> > >> that
> > >>>>> does
> > >>>>>>>>>> not mean it has a datepicker. I suspect I'm going to add an
> > >> option
> > >>>>> to
> > >>>>>>> give
> > >>>>>>>>>> it a try.
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> On Thu, Oct 3, 2013 at 8:12 PM, Geoff Callender <
> > >>>>>>>>>> geoff.callender.jumpstart@gmail.com> wrote:
> > >>>>>>>>>>
> > >>>>>>>>>>> Sounds good, Barry.
> > >>>>>>>>>>>
> > >>>>>>>>>>> You mentioned earlier that you were "planing on using
> modernizr
> > >>> to
> > >>>>>>> detect
> > >>>>>>>>>>> if type="date" is supported. " so that browsers with good
> HTML5
> > >>>>> date
> > >>>>>>>>>>> support (eg. iOS Safari, Chrome) are left alone. How did that
> > >> go?
> > >>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>>> On 3 October 2013 12:08, Barry Books <tr...@gmail.com>
> wrote:
> > >>>>>>>>>>>
> > >>>>>>>>>>>> I've uploaded the initial version to github
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> https://github.com/trsvax/tapestry-datepicker
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> I think I'm going to make this standalone project that only
> > >>>>> contains
> > >>>>>>>>>>> the
> > >>>>>>>>>>>> datepicker. This will make it easier for other project to
> just
> > >>>>>>> include
> > >>>>>>>>>>> it.
> > >>>>>>>>>>>> Currently to use it you will have to download and build it.
> > >>> Here
> > >>>>> is
> > >>>>>>> an
> > >>>>>>>>>>>> example usage
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> <t:form>
> > >>>>>>>>>>>>  <t:textfield value="date"
> > >>> t:mixins="datefield/JQueryDatePicker"
> > >>>>>>>>>>>> data-duration="slow"/>
> > >>>>>>>>>>>>  <input type="submit"/>
> > >>>>>>>>>>>> </t:form>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> All that's required is the input type be a date which causes
> > >>>>> Tapestry
> > >>>>>>>>>>> to
> > >>>>>>>>>>>> use a Date Translator to convert the data to/from a string.
> > >> This
> > >>>>> also
> > >>>>>>>>>>>> creates the client side validation. The mixin adds the
> client
> > >>> side
> > >>>>>>>>>>>> interface. In this case the JQuery UI calendar.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> If you prefer you can create your own component and override
> > >> the
> > >>>>>>>>>>> Tapestry
> > >>>>>>>>>>>> one.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> public class DateField extends TextField {
> > >>>>>>>>>>>>
> > >>>>>>>>>>>>  @Mixin
> > >>>>>>>>>>>>  private JQueryDatePIcker mixin;
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> }
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> Questions, commets etc are welcome
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> Barry
> > >>>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >> ---------------------------------------------------------------------
> > >>>>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > >>>>>>> For additional commands, e-mail: users-help@tapestry.apache.org
> > >>>>>>>
> > >>>>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> ---------------------------------------------------------------------
> > >>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > >>>>> For additional commands, e-mail: users-help@tapestry.apache.org
> > >>>>>
> > >>>>>
> > >>>>
> > >>>
> > >>
> >
> >
>

Re: [ANN] Tapestry 5.4 alternative datepicker

Posted by Barry Books <tr...@gmail.com>.
Added this also, but now I wonder what would happen if you provide a
LocalDate translator but no TypeCoercers. I had assumed the type of value
was Date but it's really unknown. Not sure this can be solved in a
generalized way. The code is only needed to support native date pickers so
perhaps it should fail more gracefully and warn you to provide a
TypeCoercer.


On Sun, Nov 24, 2013 at 11:48 PM, Geoff Callender <
geoff.callender.jumpstart@gmail.com> wrote:

> Cool.
>
> I tried to use date-picker with a LocalDate (from Joda Time) but got a
> class-cast exception. It was unaware that I had contributed TypeCoercers
> between LocalDate and Date (
> http://jumpstart.doublenegative.com.au/jumpstart/examples/lang/typecoercers).
>
> It's an easy fix that will allow the date picker to work with any class
> that is coerced to, and from, Date.
>
> Add this:
>
>         @Inject
>         private TypeCoercer coercer;
>
> and replace this:
>
>                 Date date = (Date) value;
>
> with this:
>
>                 Date date = coercer.coerce(value, Date.class);
>
> Cheers,
>
> Geoff
>
>
> On 24/11/2013, at 1:32 AM, Barry Books wrote:
>
> > Thanks,
> >
> > I added this to the code
> >
> >
> > On Wed, Nov 20, 2013 at 2:13 AM, Geoff Callender <
> > geoff.callender.jumpstart@gmail.com> wrote:
> >
> >> Very nice. But doesn't handle disabled. It's an easy fix:
> >>
> >> Instead of this:
> >>
> >> @InjectContainer
> >>
> >> private ClientElement clientElement;
> >>
> >> do this:
> >>
> >> @InjectContainer
> >>
> >> private TextField clientElement;
> >>
> >> and replace this:
> >>
> >> element.elementBefore("input", "value", formatedDate, "type", "hidden",
> >> "class", "form-control", "id", clientID);
> >>
> >> with this:
> >>
> >> Element dateField = element.elementBefore("input", "value",
> formatedDate,
> >> "type", "hidden", "class",
> >>
> >> "form-control", "id", clientID);
> >>
> >>
> >> if (clientElement.isDisabled()) {
> >>
> >> dateField.attribute("disabled", "disabled");
> >>
> >> }
> >>
> >> Cheers,
> >>
> >> Geoff
> >>
> >>
> >> On 9 October 2013 22:02, Barry Books <tr...@gmail.com> wrote:
> >>
> >>> I pushed a new snapshot. What documentation there is here
> >>>
> >>> https://github.com/trsvax/tapestry-datepicker
> >>>
> >>> This version allows overriding the location of the javascript and css
> for
> >>> the jquery date picker.
> >>>
> >>> The basic features are
> >>>
> >>> 1. Translators for textfield to validate date/calendar/timestamp entry
> >>> 2. A mixin that adds jQuery Calendar support to the textfield
> >>> 3. Native type="date" support (at least on the iPhone)
> >>> 4. BeanEdit support
> >>> 5. Ability to override css/javascript included by the jQuery mixin
> >>>
> >>> I think this makes it feature complete but at this point things are
> still
> >>> subject to change. I'm going to create some better docs and tests then
> >> I'll
> >>> push a version to maven central
> >>>
> >>> Thanks for the input so far
> >>>
> >>>
> >>>
> >>> On Tue, Oct 8, 2013 at 7:54 PM, Barry Books <tr...@gmail.com> wrote:
> >>>
> >>>> it's in the current one. I'll also be pushing up some fixes in the
> >>> morning.
> >>>>
> >>>>
> >>>> On Tue, Oct 8, 2013 at 5:53 PM, Lenny Primak <lprimak@hope.nyc.ny.us
> >>>> wrote:
> >>>>
> >>>>> Let us know when the beaneditor support is there.  I'll try it then
> >> and
> >>>>> give feedback
> >>>>> Thank you!
> >>>>>
> >>>>> On Oct 8, 2013, at 6:39 AM, Barry Books wrote:
> >>>>>
> >>>>>> https://oss.sonatype.org/content/repositories/snapshots/
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> <groupId>com.trsvax</groupId>
> >>>>>>
> >>>>>> <artifactId>tapestry-datepicker</artifactId>
> >>>>>>
> >>>>>> <version>0.0.1-SNAPSHOT</version>
> >>>>>>
> >>>>>>
> >>>>>> It's still a work in progress but I think it's starting to come
> >>>>> together.
> >>>>>> Being able to pass attributes from the translator into the html
> >> stream
> >>>>> is
> >>>>>> proving useful. For example you can do things such as
> >>>>>>
> >>>>>> placeholder="mm-dd-yyyy"
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On Tue, Oct 8, 2013 at 4:33 AM, Geoff Callender <
> >>>>>> geoff.callender.jumpstart@gmail.com> wrote:
> >>>>>>
> >>>>>>> What's the artifact info?
> >>>>>>>
> >>>>>>> On 07/10/2013, at 10:26 PM, Barry Books wrote:
> >>>>>>>
> >>>>>>>> Snapshot 0.0.1-SNAPSHOT is available at
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> https://oss.sonatype.org/content/repositories/snapshots/
> >>>>>>>>
> >>>>>>>> I have a bit of cleanup and then I'll push a version to maven
> >>> central
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Fri, Oct 4, 2013 at 3:33 PM, Barry Books <tr...@gmail.com>
> >>> wrote:
> >>>>>>>>
> >>>>>>>>> After much googling I think I've added iPhone type="date"
> >> support.
> >>> I
> >>>>> had
> >>>>>>>>> to make a few assumptions to get it to work.
> >>>>>>>>>
> >>>>>>>>> 1. The format for type="date" support is yyyy-mm-dd. This is what
> >>> the
> >>>>>>>>> iPhone appears to use and seems a reasonable choice.
> >>>>>>>>> 2. The best test I could find to indicate native support is
> >>>>>>>>>
> >>>>>>>>> *var* input = document.createElement('input');
> >>>>>>>>>
> >>>>>>>>> input.setAttribute('type', 'date');
> >>>>>>>>>
> >>>>>>>>> input.value = 'testing';
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> If the type is date and the value is not testing I'm assuming
> >>> native
> >>>>>>> date
> >>>>>>>>> support.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> What I ended up doing was adding a hidden element to support
> >> native
> >>>>> date
> >>>>>>>>> pickers. If I think there is support I hide the real one and turn
> >>> the
> >>>>>>>>> hidden one into a date. On a form submit I copy the data into the
> >>>>> real
> >>>>>>>>> element. This way I can support both date formats. It seems to
> >> work
> >>>>> on
> >>>>>>> my
> >>>>>>>>> iPhone but that's not a large sample.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> There is still work to be done but I think I should be able to
> >> meet
> >>>>> all
> >>>>>>>>> the requirements I've seen so far.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Thu, Oct 3, 2013 at 9:15 PM, Barry Books <tr...@gmail.com>
> >>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Unfortunately modernizer does not really support that. From the
> >>> docs
> >>>>>>>>>>
> >>>>>>>>>> Modernizr cannot detect that date inputs create a datepicker,
> >>>>>>>>>>
> >>>>>>>>>> It is possible to detect if a browser support type="date" but
> >> that
> >>>>> does
> >>>>>>>>>> not mean it has a datepicker. I suspect I'm going to add an
> >> option
> >>>>> to
> >>>>>>> give
> >>>>>>>>>> it a try.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On Thu, Oct 3, 2013 at 8:12 PM, Geoff Callender <
> >>>>>>>>>> geoff.callender.jumpstart@gmail.com> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> Sounds good, Barry.
> >>>>>>>>>>>
> >>>>>>>>>>> You mentioned earlier that you were "planing on using modernizr
> >>> to
> >>>>>>> detect
> >>>>>>>>>>> if type="date" is supported. " so that browsers with good HTML5
> >>>>> date
> >>>>>>>>>>> support (eg. iOS Safari, Chrome) are left alone. How did that
> >> go?
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On 3 October 2013 12:08, Barry Books <tr...@gmail.com> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> I've uploaded the initial version to github
> >>>>>>>>>>>>
> >>>>>>>>>>>> https://github.com/trsvax/tapestry-datepicker
> >>>>>>>>>>>>
> >>>>>>>>>>>> I think I'm going to make this standalone project that only
> >>>>> contains
> >>>>>>>>>>> the
> >>>>>>>>>>>> datepicker. This will make it easier for other project to just
> >>>>>>> include
> >>>>>>>>>>> it.
> >>>>>>>>>>>> Currently to use it you will have to download and build it.
> >>> Here
> >>>>> is
> >>>>>>> an
> >>>>>>>>>>>> example usage
> >>>>>>>>>>>>
> >>>>>>>>>>>> <t:form>
> >>>>>>>>>>>>  <t:textfield value="date"
> >>> t:mixins="datefield/JQueryDatePicker"
> >>>>>>>>>>>> data-duration="slow"/>
> >>>>>>>>>>>>  <input type="submit"/>
> >>>>>>>>>>>> </t:form>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> All that's required is the input type be a date which causes
> >>>>> Tapestry
> >>>>>>>>>>> to
> >>>>>>>>>>>> use a Date Translator to convert the data to/from a string.
> >> This
> >>>>> also
> >>>>>>>>>>>> creates the client side validation. The mixin adds the client
> >>> side
> >>>>>>>>>>>> interface. In this case the JQuery UI calendar.
> >>>>>>>>>>>>
> >>>>>>>>>>>> If you prefer you can create your own component and override
> >> the
> >>>>>>>>>>> Tapestry
> >>>>>>>>>>>> one.
> >>>>>>>>>>>>
> >>>>>>>>>>>> public class DateField extends TextField {
> >>>>>>>>>>>>
> >>>>>>>>>>>>  @Mixin
> >>>>>>>>>>>>  private JQueryDatePIcker mixin;
> >>>>>>>>>>>>
> >>>>>>>>>>>> }
> >>>>>>>>>>>>
> >>>>>>>>>>>> Questions, commets etc are welcome
> >>>>>>>>>>>>
> >>>>>>>>>>>> Barry
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >> ---------------------------------------------------------------------
> >>>>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >>>>>>> For additional commands, e-mail: users-help@tapestry.apache.org
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >>>>> For additional commands, e-mail: users-help@tapestry.apache.org
> >>>>>
> >>>>>
> >>>>
> >>>
> >>
>
>

Re: [ANN] Tapestry 5.4 alternative datepicker

Posted by Geoff Callender <ge...@gmail.com>.
Cool. 

I tried to use date-picker with a LocalDate (from Joda Time) but got a class-cast exception. It was unaware that I had contributed TypeCoercers between LocalDate and Date ( http://jumpstart.doublenegative.com.au/jumpstart/examples/lang/typecoercers ).

It's an easy fix that will allow the date picker to work with any class that is coerced to, and from, Date. 

Add this:

	@Inject
	private TypeCoercer coercer;

and replace this:

		Date date = (Date) value;

with this:

		Date date = coercer.coerce(value, Date.class);

Cheers,

Geoff


On 24/11/2013, at 1:32 AM, Barry Books wrote:

> Thanks,
> 
> I added this to the code
> 
> 
> On Wed, Nov 20, 2013 at 2:13 AM, Geoff Callender <
> geoff.callender.jumpstart@gmail.com> wrote:
> 
>> Very nice. But doesn't handle disabled. It's an easy fix:
>> 
>> Instead of this:
>> 
>> @InjectContainer
>> 
>> private ClientElement clientElement;
>> 
>> do this:
>> 
>> @InjectContainer
>> 
>> private TextField clientElement;
>> 
>> and replace this:
>> 
>> element.elementBefore("input", "value", formatedDate, "type", "hidden",
>> "class", "form-control", "id", clientID);
>> 
>> with this:
>> 
>> Element dateField = element.elementBefore("input", "value", formatedDate,
>> "type", "hidden", "class",
>> 
>> "form-control", "id", clientID);
>> 
>> 
>> if (clientElement.isDisabled()) {
>> 
>> dateField.attribute("disabled", "disabled");
>> 
>> }
>> 
>> Cheers,
>> 
>> Geoff
>> 
>> 
>> On 9 October 2013 22:02, Barry Books <tr...@gmail.com> wrote:
>> 
>>> I pushed a new snapshot. What documentation there is here
>>> 
>>> https://github.com/trsvax/tapestry-datepicker
>>> 
>>> This version allows overriding the location of the javascript and css for
>>> the jquery date picker.
>>> 
>>> The basic features are
>>> 
>>> 1. Translators for textfield to validate date/calendar/timestamp entry
>>> 2. A mixin that adds jQuery Calendar support to the textfield
>>> 3. Native type="date" support (at least on the iPhone)
>>> 4. BeanEdit support
>>> 5. Ability to override css/javascript included by the jQuery mixin
>>> 
>>> I think this makes it feature complete but at this point things are still
>>> subject to change. I'm going to create some better docs and tests then
>> I'll
>>> push a version to maven central
>>> 
>>> Thanks for the input so far
>>> 
>>> 
>>> 
>>> On Tue, Oct 8, 2013 at 7:54 PM, Barry Books <tr...@gmail.com> wrote:
>>> 
>>>> it's in the current one. I'll also be pushing up some fixes in the
>>> morning.
>>>> 
>>>> 
>>>> On Tue, Oct 8, 2013 at 5:53 PM, Lenny Primak <lprimak@hope.nyc.ny.us
>>>> wrote:
>>>> 
>>>>> Let us know when the beaneditor support is there.  I'll try it then
>> and
>>>>> give feedback
>>>>> Thank you!
>>>>> 
>>>>> On Oct 8, 2013, at 6:39 AM, Barry Books wrote:
>>>>> 
>>>>>> https://oss.sonatype.org/content/repositories/snapshots/
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> <groupId>com.trsvax</groupId>
>>>>>> 
>>>>>> <artifactId>tapestry-datepicker</artifactId>
>>>>>> 
>>>>>> <version>0.0.1-SNAPSHOT</version>
>>>>>> 
>>>>>> 
>>>>>> It's still a work in progress but I think it's starting to come
>>>>> together.
>>>>>> Being able to pass attributes from the translator into the html
>> stream
>>>>> is
>>>>>> proving useful. For example you can do things such as
>>>>>> 
>>>>>> placeholder="mm-dd-yyyy"
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Tue, Oct 8, 2013 at 4:33 AM, Geoff Callender <
>>>>>> geoff.callender.jumpstart@gmail.com> wrote:
>>>>>> 
>>>>>>> What's the artifact info?
>>>>>>> 
>>>>>>> On 07/10/2013, at 10:26 PM, Barry Books wrote:
>>>>>>> 
>>>>>>>> Snapshot 0.0.1-SNAPSHOT is available at
>>>>>>>> 
>>>>>>>> 
>>>>>>>> https://oss.sonatype.org/content/repositories/snapshots/
>>>>>>>> 
>>>>>>>> I have a bit of cleanup and then I'll push a version to maven
>>> central
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Fri, Oct 4, 2013 at 3:33 PM, Barry Books <tr...@gmail.com>
>>> wrote:
>>>>>>>> 
>>>>>>>>> After much googling I think I've added iPhone type="date"
>> support.
>>> I
>>>>> had
>>>>>>>>> to make a few assumptions to get it to work.
>>>>>>>>> 
>>>>>>>>> 1. The format for type="date" support is yyyy-mm-dd. This is what
>>> the
>>>>>>>>> iPhone appears to use and seems a reasonable choice.
>>>>>>>>> 2. The best test I could find to indicate native support is
>>>>>>>>> 
>>>>>>>>> *var* input = document.createElement('input');
>>>>>>>>> 
>>>>>>>>> input.setAttribute('type', 'date');
>>>>>>>>> 
>>>>>>>>> input.value = 'testing';
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> If the type is date and the value is not testing I'm assuming
>>> native
>>>>>>> date
>>>>>>>>> support.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> What I ended up doing was adding a hidden element to support
>> native
>>>>> date
>>>>>>>>> pickers. If I think there is support I hide the real one and turn
>>> the
>>>>>>>>> hidden one into a date. On a form submit I copy the data into the
>>>>> real
>>>>>>>>> element. This way I can support both date formats. It seems to
>> work
>>>>> on
>>>>>>> my
>>>>>>>>> iPhone but that's not a large sample.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> There is still work to be done but I think I should be able to
>> meet
>>>>> all
>>>>>>>>> the requirements I've seen so far.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Thu, Oct 3, 2013 at 9:15 PM, Barry Books <tr...@gmail.com>
>>>>> wrote:
>>>>>>>>> 
>>>>>>>>>> Unfortunately modernizer does not really support that. From the
>>> docs
>>>>>>>>>> 
>>>>>>>>>> Modernizr cannot detect that date inputs create a datepicker,
>>>>>>>>>> 
>>>>>>>>>> It is possible to detect if a browser support type="date" but
>> that
>>>>> does
>>>>>>>>>> not mean it has a datepicker. I suspect I'm going to add an
>> option
>>>>> to
>>>>>>> give
>>>>>>>>>> it a try.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On Thu, Oct 3, 2013 at 8:12 PM, Geoff Callender <
>>>>>>>>>> geoff.callender.jumpstart@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Sounds good, Barry.
>>>>>>>>>>> 
>>>>>>>>>>> You mentioned earlier that you were "planing on using modernizr
>>> to
>>>>>>> detect
>>>>>>>>>>> if type="date" is supported. " so that browsers with good HTML5
>>>>> date
>>>>>>>>>>> support (eg. iOS Safari, Chrome) are left alone. How did that
>> go?
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On 3 October 2013 12:08, Barry Books <tr...@gmail.com> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> I've uploaded the initial version to github
>>>>>>>>>>>> 
>>>>>>>>>>>> https://github.com/trsvax/tapestry-datepicker
>>>>>>>>>>>> 
>>>>>>>>>>>> I think I'm going to make this standalone project that only
>>>>> contains
>>>>>>>>>>> the
>>>>>>>>>>>> datepicker. This will make it easier for other project to just
>>>>>>> include
>>>>>>>>>>> it.
>>>>>>>>>>>> Currently to use it you will have to download and build it.
>>> Here
>>>>> is
>>>>>>> an
>>>>>>>>>>>> example usage
>>>>>>>>>>>> 
>>>>>>>>>>>> <t:form>
>>>>>>>>>>>>  <t:textfield value="date"
>>> t:mixins="datefield/JQueryDatePicker"
>>>>>>>>>>>> data-duration="slow"/>
>>>>>>>>>>>>  <input type="submit"/>
>>>>>>>>>>>> </t:form>
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> All that's required is the input type be a date which causes
>>>>> Tapestry
>>>>>>>>>>> to
>>>>>>>>>>>> use a Date Translator to convert the data to/from a string.
>> This
>>>>> also
>>>>>>>>>>>> creates the client side validation. The mixin adds the client
>>> side
>>>>>>>>>>>> interface. In this case the JQuery UI calendar.
>>>>>>>>>>>> 
>>>>>>>>>>>> If you prefer you can create your own component and override
>> the
>>>>>>>>>>> Tapestry
>>>>>>>>>>>> one.
>>>>>>>>>>>> 
>>>>>>>>>>>> public class DateField extends TextField {
>>>>>>>>>>>> 
>>>>>>>>>>>>  @Mixin
>>>>>>>>>>>>  private JQueryDatePIcker mixin;
>>>>>>>>>>>> 
>>>>>>>>>>>> }
>>>>>>>>>>>> 
>>>>>>>>>>>> Questions, commets etc are welcome
>>>>>>>>>>>> 
>>>>>>>>>>>> Barry
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>>>>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>>> 
>>>>> 
>>>> 
>>> 
>> 


Re: [ANN] Tapestry 5.4 alternative datepicker

Posted by Barry Books <tr...@gmail.com>.
Thanks,

I added this to the code


On Wed, Nov 20, 2013 at 2:13 AM, Geoff Callender <
geoff.callender.jumpstart@gmail.com> wrote:

> Very nice. But doesn't handle disabled. It's an easy fix:
>
> Instead of this:
>
> @InjectContainer
>
> private ClientElement clientElement;
>
> do this:
>
> @InjectContainer
>
> private TextField clientElement;
>
> and replace this:
>
> element.elementBefore("input", "value", formatedDate, "type", "hidden",
> "class", "form-control", "id", clientID);
>
> with this:
>
> Element dateField = element.elementBefore("input", "value", formatedDate,
> "type", "hidden", "class",
>
> "form-control", "id", clientID);
>
>
>  if (clientElement.isDisabled()) {
>
> dateField.attribute("disabled", "disabled");
>
> }
>
> Cheers,
>
> Geoff
>
>
> On 9 October 2013 22:02, Barry Books <tr...@gmail.com> wrote:
>
> > I pushed a new snapshot. What documentation there is here
> >
> > https://github.com/trsvax/tapestry-datepicker
> >
> > This version allows overriding the location of the javascript and css for
> > the jquery date picker.
> >
> > The basic features are
> >
> > 1. Translators for textfield to validate date/calendar/timestamp entry
> > 2. A mixin that adds jQuery Calendar support to the textfield
> > 3. Native type="date" support (at least on the iPhone)
> > 4. BeanEdit support
> > 5. Ability to override css/javascript included by the jQuery mixin
> >
> > I think this makes it feature complete but at this point things are still
> > subject to change. I'm going to create some better docs and tests then
> I'll
> > push a version to maven central
> >
> > Thanks for the input so far
> >
> >
> >
> > On Tue, Oct 8, 2013 at 7:54 PM, Barry Books <tr...@gmail.com> wrote:
> >
> > > it's in the current one. I'll also be pushing up some fixes in the
> > morning.
> > >
> > >
> > > On Tue, Oct 8, 2013 at 5:53 PM, Lenny Primak <lprimak@hope.nyc.ny.us
> > >wrote:
> > >
> > >> Let us know when the beaneditor support is there.  I'll try it then
> and
> > >> give feedback
> > >> Thank you!
> > >>
> > >> On Oct 8, 2013, at 6:39 AM, Barry Books wrote:
> > >>
> > >> > https://oss.sonatype.org/content/repositories/snapshots/
> > >> >
> > >> >
> > >> >
> > >> > <groupId>com.trsvax</groupId>
> > >> >
> > >> > <artifactId>tapestry-datepicker</artifactId>
> > >> >
> > >> > <version>0.0.1-SNAPSHOT</version>
> > >> >
> > >> >
> > >> > It's still a work in progress but I think it's starting to come
> > >> together.
> > >> > Being able to pass attributes from the translator into the html
> stream
> > >> is
> > >> > proving useful. For example you can do things such as
> > >> >
> > >> > placeholder="mm-dd-yyyy"
> > >> >
> > >> >
> > >> >
> > >> >
> > >> > On Tue, Oct 8, 2013 at 4:33 AM, Geoff Callender <
> > >> > geoff.callender.jumpstart@gmail.com> wrote:
> > >> >
> > >> >> What's the artifact info?
> > >> >>
> > >> >> On 07/10/2013, at 10:26 PM, Barry Books wrote:
> > >> >>
> > >> >>> Snapshot 0.0.1-SNAPSHOT is available at
> > >> >>>
> > >> >>>
> > >> >>> https://oss.sonatype.org/content/repositories/snapshots/
> > >> >>>
> > >> >>> I have a bit of cleanup and then I'll push a version to maven
> > central
> > >> >>>
> > >> >>>
> > >> >>>
> > >> >>> On Fri, Oct 4, 2013 at 3:33 PM, Barry Books <tr...@gmail.com>
> > wrote:
> > >> >>>
> > >> >>>> After much googling I think I've added iPhone type="date"
> support.
> > I
> > >> had
> > >> >>>> to make a few assumptions to get it to work.
> > >> >>>>
> > >> >>>> 1. The format for type="date" support is yyyy-mm-dd. This is what
> > the
> > >> >>>> iPhone appears to use and seems a reasonable choice.
> > >> >>>> 2. The best test I could find to indicate native support is
> > >> >>>>
> > >> >>>> *var* input = document.createElement('input');
> > >> >>>>
> > >> >>>> input.setAttribute('type', 'date');
> > >> >>>>
> > >> >>>> input.value = 'testing';
> > >> >>>>
> > >> >>>>
> > >> >>>> If the type is date and the value is not testing I'm assuming
> > native
> > >> >> date
> > >> >>>> support.
> > >> >>>>
> > >> >>>>
> > >> >>>> What I ended up doing was adding a hidden element to support
> native
> > >> date
> > >> >>>> pickers. If I think there is support I hide the real one and turn
> > the
> > >> >>>> hidden one into a date. On a form submit I copy the data into the
> > >> real
> > >> >>>> element. This way I can support both date formats. It seems to
> work
> > >> on
> > >> >> my
> > >> >>>> iPhone but that's not a large sample.
> > >> >>>>
> > >> >>>>
> > >> >>>> There is still work to be done but I think I should be able to
> meet
> > >> all
> > >> >>>> the requirements I've seen so far.
> > >> >>>>
> > >> >>>>
> > >> >>>>
> > >> >>>>
> > >> >>>>
> > >> >>>> On Thu, Oct 3, 2013 at 9:15 PM, Barry Books <tr...@gmail.com>
> > >> wrote:
> > >> >>>>
> > >> >>>>> Unfortunately modernizer does not really support that. From the
> > docs
> > >> >>>>>
> > >> >>>>> Modernizr cannot detect that date inputs create a datepicker,
> > >> >>>>>
> > >> >>>>> It is possible to detect if a browser support type="date" but
> that
> > >> does
> > >> >>>>> not mean it has a datepicker. I suspect I'm going to add an
> option
> > >> to
> > >> >> give
> > >> >>>>> it a try.
> > >> >>>>>
> > >> >>>>>
> > >> >>>>> On Thu, Oct 3, 2013 at 8:12 PM, Geoff Callender <
> > >> >>>>> geoff.callender.jumpstart@gmail.com> wrote:
> > >> >>>>>
> > >> >>>>>> Sounds good, Barry.
> > >> >>>>>>
> > >> >>>>>> You mentioned earlier that you were "planing on using modernizr
> > to
> > >> >> detect
> > >> >>>>>> if type="date" is supported. " so that browsers with good HTML5
> > >> date
> > >> >>>>>> support (eg. iOS Safari, Chrome) are left alone. How did that
> go?
> > >> >>>>>>
> > >> >>>>>>
> > >> >>>>>> On 3 October 2013 12:08, Barry Books <tr...@gmail.com> wrote:
> > >> >>>>>>
> > >> >>>>>>> I've uploaded the initial version to github
> > >> >>>>>>>
> > >> >>>>>>> https://github.com/trsvax/tapestry-datepicker
> > >> >>>>>>>
> > >> >>>>>>> I think I'm going to make this standalone project that only
> > >> contains
> > >> >>>>>> the
> > >> >>>>>>> datepicker. This will make it easier for other project to just
> > >> >> include
> > >> >>>>>> it.
> > >> >>>>>>> Currently to use it you will have to download and build it.
> >  Here
> > >> is
> > >> >> an
> > >> >>>>>>> example usage
> > >> >>>>>>>
> > >> >>>>>>> <t:form>
> > >> >>>>>>>   <t:textfield value="date"
> > t:mixins="datefield/JQueryDatePicker"
> > >> >>>>>>> data-duration="slow"/>
> > >> >>>>>>>   <input type="submit"/>
> > >> >>>>>>> </t:form>
> > >> >>>>>>>
> > >> >>>>>>>
> > >> >>>>>>> All that's required is the input type be a date which causes
> > >> Tapestry
> > >> >>>>>> to
> > >> >>>>>>> use a Date Translator to convert the data to/from a string.
> This
> > >> also
> > >> >>>>>>> creates the client side validation. The mixin adds the client
> > side
> > >> >>>>>>> interface. In this case the JQuery UI calendar.
> > >> >>>>>>>
> > >> >>>>>>> If you prefer you can create your own component and override
> the
> > >> >>>>>> Tapestry
> > >> >>>>>>> one.
> > >> >>>>>>>
> > >> >>>>>>> public class DateField extends TextField {
> > >> >>>>>>>
> > >> >>>>>>>   @Mixin
> > >> >>>>>>>   private JQueryDatePIcker mixin;
> > >> >>>>>>>
> > >> >>>>>>> }
> > >> >>>>>>>
> > >> >>>>>>> Questions, commets etc are welcome
> > >> >>>>>>>
> > >> >>>>>>> Barry
> > >> >>>>>>>
> > >> >>>>>>
> > >> >>>>>
> > >> >>>>>
> > >> >>>>
> > >> >>
> > >> >>
> > >> >>
> ---------------------------------------------------------------------
> > >> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > >> >> For additional commands, e-mail: users-help@tapestry.apache.org
> > >> >>
> > >> >>
> > >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > >> For additional commands, e-mail: users-help@tapestry.apache.org
> > >>
> > >>
> > >
> >
>