package org.appfuse.webapp.client.ui.navigation; import org.appfuse.webapp.client.application.utils.menu.MenuItem; import com.github.gwtbootstrap.client.ui.constants.Constants; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.LIElement; import com.google.gwt.dom.client.UListElement; import com.google.gwt.place.shared.PlaceChangeEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Widget; public class SideNavigationBar extends BaseNavigationBar { private static SideNavigationBarUiBinder uiBinder = GWT.create(SideNavigationBarUiBinder.class); interface SideNavigationBarUiBinder extends UiBinder<Widget, SideNavigationBar> { } @UiField UListElement sideBar; public SideNavigationBar() { initWidget(uiBinder.createAndBindUi(this)); } @Override public void onPlaceChange(final PlaceChangeEvent event) { sideBar.setInnerHTML(""); final MenuItem currentMenuItem = findCurrentMenuItem(event.getNewPlace()); if (currentMenuItem != null && currentMenuItem.getParent() != null && currentMenuItem.getParent().getTitle() != null) { drawMenu(currentMenuItem); sideBar.removeClassName("hide"); } else { // do not draw root menu on the side sideBar.addClassName("hide"); } } private void drawMenu(final MenuItem currentMenuItem) { final LIElement navHeader = Document.get().createLIElement(); navHeader.setInnerText(currentMenuItem.getParent().getTitle()); navHeader.addClassName("nav-header"); sideBar.appendChild(navHeader); for (final MenuItem menuItem : currentMenuItem.getParent()) { final LIElement li = Document.get().createLIElement(); final AnchorElement anchor = Document.get().createAnchorElement(); anchor.setTitle(menuItem.getTitle()); anchor.setInnerText(menuItem.getTitle()); anchor.setHref("#" + application.getPlaceHistoryMapper().getToken(menuItem.getPlace())); li.appendChild(anchor); menuItem.setElement(li); sideBar.appendChild(li); if (menuItem == currentMenuItem) { li.addClassName(Constants.ACTIVE); } } } }