Skip to content

Instantly share code, notes, and snippets.

@kevzlou7979
Created April 6, 2017 14:20
Show Gist options
  • Save kevzlou7979/9eaae2d09d12c80bf15ec0bda95efbdc to your computer and use it in GitHub Desktop.
Save kevzlou7979/9eaae2d09d12c80bf15ec0bda95efbdc to your computer and use it in GitHub Desktop.
package gwt.material.design.client.ui;
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.HandlerRegistration;
import gwt.material.design.client.base.MaterialWidget;
import gwt.material.design.client.constants.SideNavType;
import static gwt.material.design.client.js.JsMaterialElement.$;
public class MaterialMiniSideNav extends MaterialSideNav {
private boolean expandable;
private HandlerRegistration miniWithOpeningExpandHandler;
private HandlerRegistration miniWithClosingExpandHandler;
@Override
protected void processType(SideNavType type) {
addStyleName("mini-with-expand");
applyMiniSideNav();
}
protected void applyMiniSideNav() {
applyBodyScroll();
applyTransition(getMain(), 400);
applyTransition(getFooter(), 400);
int originalWidth = getWidth();
int miniWidth = 64;
pushElement(getMain(), miniWidth);
pushElementMargin(getFooter(), miniWidth);
setShowOnAttach(false);
setWidth(miniWidth);
if (miniWithOpeningExpandHandler == null) {
miniWithOpeningExpandHandler = addOpeningHandler(event -> expand(originalWidth));
}
if (miniWithClosingExpandHandler == null) {
miniWithClosingExpandHandler = addClosingHandler(event -> collapse(miniWidth));
}
// Add Opening when sidenav link is clicked by default
for (Widget w : getChildren()) {
if (w instanceof MaterialWidget && expandable) {
$(w.getElement()).off("click").on("click", (e, param1) -> {
if (!getElement().hasClassName("expanded")) {
show();
}
return true;
});
}
}
}
public void setExpandable(boolean expandable) {
this.expandable = expandable;
}
public boolean isExpandable() {
return expandable;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment