Project

General

Profile

1
package eu.dnetlib.client.widgets;
2

    
3
import com.google.gwt.dom.client.Document;
4
import com.google.gwt.dom.client.Element;
5
import com.google.gwt.dom.client.InputElement;
6
import com.google.gwt.dom.client.NodeList;
7
import com.google.gwt.query.client.Function;
8
import com.google.gwt.user.client.Event;
9
import com.google.gwt.user.client.Window;
10
import com.google.gwt.user.client.ui.HTML;
11
import com.google.gwt.user.client.ui.IsWidget;
12
import com.google.gwt.user.client.ui.Widget;
13
import com.sencha.gxt.widget.core.client.info.Info;
14
import eu.dnetlib.goldoa.domain.Vocabulary;
15

    
16
import java.util.ArrayList;
17
import java.util.HashMap;
18
import java.util.List;
19
import java.util.Map;
20

    
21
import static com.google.gwt.query.client.GQuery.$;
22

    
23
/**
24
 * Created by stefania on 9/25/15.
25
 */
26
public class DropdownCheckbox implements IsWidget {
27

    
28
    private HTML dropdownCheckboxElement = new HTML();
29
    private String contents;
30

    
31
    private List<Vocabulary> options = new ArrayList<>();
32
    private Map<String, Vocabulary> optionsMap = new HashMap<>();
33

    
34
    private OptionSelectedListener optionSelectedListener;
35

    
36
    public DropdownCheckbox(List<Vocabulary> options) {
37

    
38
        this.options.addAll(options);
39
        for(Vocabulary option : options)
40
            optionsMap.put(option.getId(), option);
41

    
42
        contents = "<div class=\"btn-group\">" +
43
                "<button id=\"dropdownCheckboxButton\" data-toggle=\"dropdown\" class=\"btn dropdown-toggle\"  data-placeholder=\"Please select\">" +
44
                "None selected <span class=\"caret\"></span></button>" +
45
                "<ul class=\"dropdown-menu noclose\">";
46

    
47
        for(Vocabulary option : options)
48
                contents += "<li><input class=\"dropdownCheckbox\" type=\"checkbox\" id=\"" + option.getId() +
49
                        "\"><label for=\"" + option.getId() + "\" name=\"NAME\" value=\"VALUE\">" + option.getName() + "</label></li>";
50

    
51
        contents +="</ul></div>";
52

    
53
        dropdownCheckboxElement.setHTML(contents);
54
    }
55

    
56
    @Override
57
    public Widget asWidget() {
58
        return dropdownCheckboxElement;
59
    }
60

    
61
    public void addStyleName(String styleName) {
62
        dropdownCheckboxElement.addStyleName(styleName);
63
    }
64

    
65
    public void addFunctionality() {
66

    
67
        $(".dropdown-menu > li > input[type=\"checkbox\"] ~ label, .dropdown-menu > li > input[type=\"checkbox\"], .dropdown-menu.noclose > li").
68
                click(new Function() {
69

    
70
            public boolean f(Event e) {
71

    
72
                fireSelectedEvent();
73
                e.stopPropagation();
74
                return true;
75
            }
76
        });
77
    }
78

    
79
    public void fireSelectedEvent() {
80

    
81
        List<String> selectedOptions = getSelectedStatuses();
82
        if(selectedOptions.isEmpty()) {
83
            Document.get().getElementById("dropdownCheckboxButton").setInnerHTML("None selected <span class=\"caret\"></span>");
84
        } else if(selectedOptions.size()==options.size()) {
85
            Document.get().getElementById("dropdownCheckboxButton").setInnerHTML("All selected (" + selectedOptions.size() + ") <span class=\"caret\"></span>");
86
        } else if(selectedOptions.size()>3) {
87
            Document.get().getElementById("dropdownCheckboxButton").setInnerHTML(selectedOptions.size() + " selected <span class=\"caret\"></span>");
88
        } else {
89
            String statuses = "";
90
            for(String selectedOption : selectedOptions)
91
                statuses += optionsMap.get(selectedOption).getName() + ", ";
92

    
93
            statuses = statuses.substring(0, statuses.length()-2);
94
            Document.get().getElementById("dropdownCheckboxButton").setInnerHTML(statuses + " <span class=\"caret\"></span>");
95
        }
96

    
97
        if(optionSelectedListener!=null)
98
            optionSelectedListener.onSelect();
99
    }
100

    
101
    public List<String> getSelectedStatuses() {
102

    
103
        List<String> ids = new ArrayList<String>();
104

    
105
        NodeList<Element> checkBoxes = $(".dropdownCheckbox").get();
106
        for(int i=0; i<checkBoxes.getLength(); i++) {
107
            InputElement checkBox = (InputElement) checkBoxes.getItem(i);
108
            if(checkBox.isChecked()) {
109
                ids.add(checkBox.getId());
110
            }
111
        }
112

    
113
        return ids;
114
    }
115

    
116
    public interface OptionSelectedListener {
117
        void onSelect();
118
    }
119

    
120
    public void setOptionSelectedListener(OptionSelectedListener optionSelectedListener) {
121
        this.optionSelectedListener = optionSelectedListener;
122
    }
123
}
(10-10/21)