package org.rapidoid.gui;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.gui.base.AbstractWidget;
import org.rapidoid.html.Tag;
import org.rapidoid.u.U;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/*
* #%L
* rapidoid-gui
* %%
* Copyright (C) 2014 - 2017 Nikolche Mihajlovski and contributors
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
@Authors({"Marjan Ilievski", "Nikolche Mihajlovski"})
@Since("5.0.11")
public class BtnMenu extends AbstractWidget<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 = 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 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(li().role("separator").class_("divider"));
}
}
return GUI.ul().class_("dropdown-menu").contents(content);
} else {
return GUI.ul().class_("dropdown-menu");
}
}
private void generateMenuItems(List<Tag> content, Iterator<Map<Object, String>> subMenuIterator) {
for (Map.Entry<Object, String> menuItem : subMenuIterator.next().entrySet()) {
Tag a = a().href(menuItem.getValue()).contents(menuItem.getKey());
Tag li = li().contents(a);
content.add(li);
}
}
@Override
public String toString() {
return render();
}
public String render() {
List<Tag> content = U.list();
content.add(generateButtonHtmlContent());
Tag menuContent = generateMenuHtmlContent();
content.add(menuContent);
return 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;
}
}