package com.revolsys.ui.html.view;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import com.revolsys.record.io.format.html.Aria;
import com.revolsys.record.io.format.html.Data;
import com.revolsys.record.io.format.xml.XmlWriter;
import com.revolsys.ui.html.layout.DivLayout;
import com.revolsys.util.HtmlAttr;
import com.revolsys.util.HtmlElem;
public class TabElementContainer extends ElementContainer {
private final String id = "tab-" + UUID.randomUUID();
private final List<String> ids = new ArrayList<>();
private final List<String> labels = new ArrayList<>();
private int selectedIndex = 0;
public TabElementContainer() {
setLayout(new DivLayout());
}
public void add(final String label, final Element element) {
final String tabId = this.id + "-" + getElements().size();
add(tabId, label, element);
}
public void add(final String tabId, final String label, final Element element) {
add(element);
this.labels.add(label);
this.ids.add(tabId);
}
public Integer getSelectedIndex() {
return this.selectedIndex;
}
@Override
public void serializeElement(final XmlWriter out) {
out.startTag(HtmlElem.DIV);
out.attribute(HtmlAttr.ROLE, "tabpanel");
out.attribute(HtmlAttr.ID, this.id);
out.startTag(HtmlElem.UL);
out.attribute(HtmlAttr.CLASS, "nav nav-tabs");
out.attribute(HtmlAttr.ROLE, "tablist");
int i = 0;
for (final String label : this.labels) {
final String id = this.ids.get(i);
out.startTag(HtmlElem.LI);
out.attribute(HtmlAttr.ROLE, "presentation");
if (this.selectedIndex == i) {
out.attribute(HtmlAttr.CLASS, "active");
}
out.startTag(HtmlElem.A);
out.attribute(HtmlAttr.HREF, "#" + id);
Aria.controls(out, id);
out.attribute(HtmlAttr.ROLE, "tab");
Data.toggle(out, "tab");
out.text(label);
out.endTag(HtmlElem.A);
out.endTag(HtmlElem.LI);
i++;
}
out.endTag(HtmlElem.UL);
out.startTag(HtmlElem.DIV);
out.attribute(HtmlAttr.CLASS, "tab-content");
i = 0;
for (final Element element : getElements()) {
final String id = this.ids.get(i);
out.startTag(HtmlElem.DIV);
out.attribute(HtmlAttr.ROLE, "tabpanel");
if (this.selectedIndex == i) {
out.attribute(HtmlAttr.CLASS, "tab-pane active");
} else {
out.attribute(HtmlAttr.CLASS, "tab-pane");
}
out.attribute(HtmlAttr.ID, id);
element.serialize(out);
out.endTag(HtmlElem.DIV);
i++;
}
out.endTag(HtmlElem.DIV);
out.endTag(HtmlElem.DIV);
}
public void serializeElementOld(final XmlWriter out) {
out.startTag(HtmlElem.DIV);
out.attribute(HtmlAttr.CLASS, "jqueryTabs");
out.attribute(HtmlAttr.ID, this.id);
out.startTag(HtmlElem.UL);
int i = 0;
for (final String label : this.labels) {
final String id = this.ids.get(i++);
out.startTag(HtmlElem.LI);
out.startTag(HtmlElem.A);
out.attribute(HtmlAttr.HREF, "#" + id);
out.text(label);
out.endTag(HtmlElem.A);
out.endTag(HtmlElem.LI);
}
out.endTag(HtmlElem.UL);
i = 0;
for (final Element element : getElements()) {
final String id = this.ids.get(i++);
out.startTag(HtmlElem.DIV);
out.attribute(HtmlAttr.ID, id);
element.serialize(out);
out.endTag(HtmlElem.DIV);
}
out.endTag(HtmlElem.DIV);
if (this.selectedIndex != 0) {
out.startTag(HtmlElem.SCRIPT);
out.attribute(HtmlAttr.TYPE, "text/javascript");
out.text("$(document).ready(function() {$('#" + this.id + "').tabs('option', 'active', "
+ this.selectedIndex + ");});");
out.endTag(HtmlElem.SCRIPT);
}
}
public void setSelectedIndex(final int selectedIndex) {
this.selectedIndex = selectedIndex;
}
}