2222
2323import java .util .Date ;
2424
25+ import com .google .gwt .core .client .JavaScriptObject ;
2526import com .google .gwt .i18n .client .DateTimeFormat ;
2627import com .google .gwt .user .client .ui .FocusPanel ;
2728import com .google .gwt .user .client .ui .HTMLPanel ;
@@ -45,7 +46,8 @@ public interface MaterialDatePickerDelegate {
4546 private String placeholder ;
4647 private String id ;
4748 private MaterialDatePickerDelegate delegate ;
48-
49+ private MaterialDatePickerType selectionType = MaterialDatePickerType .DAY ;
50+ JavaScriptObject input ;
4951 public MaterialDatePicker () {
5052
5153 }
@@ -58,27 +60,58 @@ protected void onAttach() {
5860 this .clear ();
5961 panel = new HTMLPanel ("<input placeholder='" +placeholder +"' type='date' id='" +id +"' class='datepicker'>" );
6062 this .add (panel );
61- initDatePicker (id );
63+ initDatePicker (id , selectionType . name (), this );
6264 initClickHandler (id , this );
6365 }
66+
67+ public static native void initDatePicker (String id , String typeName , MaterialDatePicker parent )/*-{
68+ var input;
69+ if(typeName === "MONTH_DAY") {
70+ input = $wnd.jQuery('#' + id).pickadate({
71+ selectYears: false,
72+ selectMonths: true
73+ });
74+ } else if(typeName === "YEAR_MONTH_DAY") {
75+ input = $wnd.jQuery('#' + id).pickadate({
76+ selectYears: true,
77+ selectMonths: true
78+ });
79+ } else {
80+ input = $wnd.jQuery('#' + id).pickadate();
81+ }
82+
83+ 84+
85+ }-*/ ;
86+
87+ /**
88+ * Sets the type of selection options (date, month, year,...).
89+ * @param type if <code>null</code>, {@link MaterialDatePickerType#DAY} will be used as fallback.
90+ */
91+ public void setDateSelectionType (MaterialDatePickerType type ) {
92+ if (type == null ) {
93+ type = MaterialDatePickerType .DAY ;
94+ }
95+ this .selectionType = type ;
96+ }
6497
6598 public static native String getDatePickerValue (String id )/*-{
66- var color = $wnd.jQuery('#' + id).val();
99+ var color = $wnd.jQuery('#' + id).val();
67100 return color;
68101 }-*/ ;
69102
70103 private static native void setDatePickerValue (String value , String id )/*-{
71104 $wnd.jQuery('#' + id).val(value);
72105 }-*/ ;
73106
74- public static native void initDatePicker (String id ) /*-{
75- $wnd.jQuery('#' + id).pickadate() ;
76- }-*/ ;
77-
78- native void initClickHandler ( String id , MaterialDatePicker picker ) /*- {
79- $wnd.jQuery('.picker__wrap').bind('click',function(){
80- [email protected] ::notifyDelegate()(); 81- });
107+ native void initClickHandler (String id , MaterialDatePicker parent ) /*-{
108+ var input = [email protected] ::input ;109+ var picker = input.pickadate('picker') ;
110+ picker.on({
111+ close: function() {
112+ [email protected] ::notifyDelegate()(); 113+ }
114+ });
82115 }-*/ ;
83116
84117 /**
@@ -123,14 +156,15 @@ public void setDate(Date date) {
123156 this .date = date ;
124157 DateTimeFormat sdf = DateTimeFormat .getFormat ("d MMM, yyyy" );
125158 setDatePickerValue (sdf .format (date ), id );
126- selectDate (sdf .format (date ), id );
159+ DateTimeFormat sdfSetter = DateTimeFormat .getFormat ("yyyy-MM-dd" );
160+ selectDate (sdfSetter .format (date ), id , this );
127161 }
128162
129- private native void selectDate (String date , String id ) /*-{
130- var $ input = $wnd.jQuery('#' + id).pickadate() ;
131- var picker = $ input.pickadate('picker');
163+ private native void selectDate (String date , String id , MaterialDatePicker parent ) /*-{
164+ var input = [email protected] ::input ; 165+ var picker = input.pickadate('picker');
132166 if(picker) {
133- picker.set('select', date);
167+ picker.set('select', date, { format: 'yyyy-mm-dd' } );
134168 }
135169 }-*/ ;
136170
@@ -142,4 +176,14 @@ public void setPlaceholder(String placeholder) {
142176 this .placeholder = placeholder ;
143177 }
144178
179+ /**
180+ * Enum for identifying various selection types for the picker.
181+ *
182+ */
183+ public enum MaterialDatePickerType {
184+ DAY ,
185+ MONTH_DAY ,
186+ YEAR_MONTH_DAY
187+ }
188+
145189}
0 commit comments