-
Notifications
You must be signed in to change notification settings - Fork 164
/
BtnMenu.java
101 lines (76 loc) · 2.35 KB
/
BtnMenu.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package org.rapidoid.gui;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.html.Tag;
import org.rapidoid.u.U;
import java.util.*;
@Authors({"Marjan Ilievski", "Nikolche Mihajlovski"})
@Since("5.0.11")
public class BtnMenu {
private String title;
private List<Map<Object, String>> menuItems;
public BtnMenu() {
menuItems = U.list();
menuItems.add(new LinkedHashMap<Object, String>());
}
public void addMenuItem(String text, String url) {
menuItems.get(menuItems.size() - 1).put(text, url);
}
public void addSeparator() {
menuItems.add(new LinkedHashMap<Object, String>());
}
private Tag generateButtonHtmlContent() {
Tag span = GUI.span().class_("caret");
return GUI.button().type("button").class_("btn btn-default dropdown-toggle")
.attr("data-toggle", "dropdown")
.attr("aria-haspopup", "true")
.attr("aria-expanded", "false").contents(title + " ", span);
}
private Optional<Tag> generateMenuHtmlContent() {
if (!menuItems.get(0).isEmpty()) {
List<Tag> content = U.list();
for (Iterator<Map<Object, String>> iterator = menuItems.iterator(); iterator.hasNext(); ) {
generateMenuItems(content, iterator);
if (iterator.hasNext()) {
content.add(GUI.li().role("separator").class_("divider"));
}
}
return Optional.of(GUI.ul().class_("dropdown-menu").contents(content));
}
return Optional.empty();
}
private void generateMenuItems(List<Tag> content, Iterator<Map<Object, String>> subMenuIterator) {
for (Map.Entry<Object, String> menuItem : subMenuIterator.next().entrySet()) {
Tag a = GUI.a().href(menuItem.getValue()).contents(menuItem.getKey());
Tag li = GUI.li().contents(a);
content.add(li);
}
}
@Override
public String toString() {
return render();
}
public String render() {
List<Tag> content = U.list();
content.add(generateButtonHtmlContent());
Optional<Tag> menuContent = generateMenuHtmlContent();
if (menuContent.isPresent()) {
content.add(menuContent.get());
}
return GUI.div().class_("btn-group").contents(content).toString();
}
public String title() {
return title;
}
public BtnMenu title(String title) {
this.title = title;
return this;
}
public List<Map<Object, String>> items() {
return menuItems;
}
public BtnMenu items(Map<Object, String> items) {
this.menuItems.add(items);
return this;
}
}