]> source.dussan.org Git - gwtquery.git/blob
006f4e90d7c3826f0d7e4ed74759839dd804c7a3
[gwtquery.git] /
1 /*
2  * Copyright 2011, The gwtquery team.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  * 
8  * http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 package com.google.gwt.query.client.plugins.widgets;
17
18 import static com.google.gwt.query.client.GQuery.$;
19
20 import com.google.gwt.dom.client.Element;
21 import com.google.gwt.query.client.GQuery;
22 import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
23 import com.google.gwt.user.client.ui.SuggestBox;
24 import com.google.gwt.user.client.ui.SuggestOracle;
25
26 /**
27  * Factory used to create a {@link SuggestBox} widget.
28  * 
29  */
30 public class SuggestBoxWidgetFactory implements WidgetFactory<SuggestBox> {
31
32   /**
33    * Options used to create a {@link SuggestBox}
34    * 
35    */
36   public static class SuggestBoxOptions {
37
38     private String suggestionsSelector;
39     private SuggestOracle suggestOracle;
40
41     public SuggestBoxOptions() {
42       initDefault();
43     }
44
45     public SuggestBoxOptions(String suggestionsSelector) {
46       this.suggestionsSelector = suggestionsSelector;
47     }
48
49     public SuggestBoxOptions(SuggestOracle suggestOracle) {
50       this.suggestOracle = suggestOracle;
51     }
52
53     public SuggestOracle getSuggestOracle() {
54       return suggestOracle;
55     }
56
57     public String getSuggestionsSelector() {
58       return suggestionsSelector;
59     }
60
61     /**
62      * Set the css selector to use for selecting elements playing roles of the
63      * list items. The value of the items will be the inner texts of the
64      * selected elements
65      * 
66      * If this options is null, the inner text of the direct children of the
67      * element will be used as suggestions list.
68      * 
69      * This options is used if the element is not a <i>select</i> element.
70      * 
71      * @param optionsSelector
72      */
73     public void setSuggestionsSelector(String suggestionsSelector) {
74       this.suggestionsSelector = suggestionsSelector;
75     }
76
77     public void setSuggestOracle(SuggestOracle suggestOracle) {
78       this.suggestOracle = suggestOracle;
79     }
80
81     private void initDefault() {
82       suggestionsSelector = null;
83       suggestOracle = null;
84     }
85   }
86
87   private SuggestBoxOptions options;
88
89   public SuggestBoxWidgetFactory(SuggestBoxOptions options) {
90     this.options = options;
91   }
92
93   public SuggestBox create(Element e) {
94
95     SuggestOracle suggestOracle = createOracle(e);
96  
97     if ($(e).filter("input[type='text']").length() > 0) {
98       return SuggestBox.wrap(suggestOracle, e);
99     }
100
101     SuggestBox sbox = new SuggestBox(suggestOracle);
102     WidgetsUtils.replaceOrAppend(e, sbox);
103
104     return sbox;
105   }
106
107   private SuggestOracle createOracle(Element e) {
108     if (options.getSuggestOracle() != null) {
109       return options.getSuggestOracle();
110     }
111
112     MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
113
114     if (options.getSuggestionsSelector() != null) {
115       GQuery suggestions = $(options.getSuggestionsSelector(), e);
116       for (Element suggestion : suggestions.elements()) {
117         oracle.add(suggestion.getInnerText());
118       }
119     }
120
121     return oracle;
122   }
123
124 }