Skip to content

Instantly share code, notes, and snippets.

@cortix
Created December 29, 2014 20:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cortix/7a5453cddac75b90f29a to your computer and use it in GitHub Desktop.
Save cortix/7a5453cddac75b90f29a to your computer and use it in GitHub Desktop.
import base.ApplicationJavaScript;
import base.DocsCssResourceReference;
import base.FixBootstrapStylesCssResourceReference;
import de.agilecoders.wicket.core.Bootstrap;
import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameAppender;
import de.agilecoders.wicket.core.markup.html.bootstrap.block.Code;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.DropDownButton;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.MenuBookmarkablePageLink;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.MenuDivider;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.MenuHeader;
import de.agilecoders.wicket.core.markup.html.bootstrap.html.HtmlTag;
import de.agilecoders.wicket.core.markup.html.bootstrap.image.GlyphIconType;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.*;
import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
import de.agilecoders.wicket.core.settings.IBootstrapSettings;
import de.agilecoders.wicket.core.settings.ITheme;
import org.apache.wicket.Component;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.filter.FilteredHeaderItem;
import org.apache.wicket.markup.head.filter.HeaderResponseContainer;
import org.apache.wicket.markup.html.GenericWebPage;
import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.http.WebResponse;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
import util.MultiLanguage;
import util.MultiLanguage2;
import web.WicketApplication;
import web.management.ManagementPage;
import javax.servlet.http.Cookie;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/**
* Created by HasanCelik on 22.09.2014.
*/
public abstract class BasePage<T> extends GenericWebPage<T>{
public BasePage2(final PageParameters parameters) {
super(parameters);
add(new HtmlTag("html"));
add(newNavbar("navbar"));
add(new Footer("footer"));
add(new Code("code-internal"));
}
protected Navbar newNavbar(String markupId) {
Navbar navbar = new Navbar(markupId) {
@Override
protected TransparentWebMarkupContainer newCollapseContainer(String componentId) {
TransparentWebMarkupContainer container = super.newCollapseContainer(componentId);
container.add(new CssClassNameAppender("bs-navbar-collapse"));
return container;
}
};
navbar.setPosition(Navbar.Position.TOP);
navbar.setInverted(true);
//navbar.setBrandName(Model.of("Berkadem"));
DropDownButton dropdown = new NavbarDropDownButton(new StringResourceModel("choose_language", this, null)) {
@Override
public boolean isActive(Component item) {
return false;
}
@Override
protected List<AbstractLink> newSubMenuButtons(String buttonMarkupId) {
List<AbstractLink> languages = new ArrayList<AbstractLink>();
languages.add(newLanguageOption(buttonMarkupId, "tr"));
languages.add(newLanguageOption(buttonMarkupId, "gb"));
return languages;
}
}.setIconType(GlyphIconType.globe);
navbar.addComponents(new ImmutableNavbarComponent(dropdown, Navbar.ComponentPosition.RIGHT));
navbar.addComponents(NavbarComponents.transform(Navbar.ComponentPosition.RIGHT,
new NavbarExternalLink(Model.of("/j_spring_security_logout"))
.setLabel(Model.of("Logout"))
.setIconType(GlyphIconType.logout)
)
);
return navbar;
}
/**
* sets the theme for the current user.
*
* @param pageParameters current page parameters
*/
private void configureTheme(PageParameters pageParameters) {
StringValue theme = pageParameters.get("theme");
if (!theme.isEmpty()) {
IBootstrapSettings settings = Bootstrap.getSettings(getApplication());
settings.getActiveThemeProvider().setActiveTheme(theme.toString(""));
}
}
protected ITheme activeTheme() {
IBootstrapSettings settings = Bootstrap.getSettings(getApplication());
return settings.getActiveThemeProvider().getActiveTheme();
}
@Override
protected void onConfigure() {
super.onConfigure();
configureTheme(getPageParameters());
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(CssHeaderItem.forReference(FixBootstrapStylesCssResourceReference.INSTANCE));
response.render(new FilteredHeaderItem(JavaScriptHeaderItem.forReference(ApplicationJavaScript.INSTANCE), "footer-container"));
if ("google".equalsIgnoreCase(activeTheme().name())) {
response.render(CssHeaderItem.forReference(DocsCssResourceReference.GOOGLE));
}
}
protected boolean hasNavigation() {
return false;
}
/**
* creates a new navigation component.
*
* @param markupId The component's markup id
* @return a new navigation component.
*/
private Component newNavigation(String markupId) {
WebMarkupContainer navigation = new WebMarkupContainer(markupId);
navigation.add(new AffixBehavior("200"));
navigation.setVisible(hasNavigation());
return navigation;
}
private Link<Void> newLanguageOption(final String buttonMarkupId, final String localeString) {
Link<Void> languageOptionLink = new Link<Void>(buttonMarkupId) {
private static final long serialVersionUID = -1704794810431937803L;
@Override
public void onClick() {
Cookie languageCookie = new Cookie(WicketApplication.LANGUAGE_COOKIE_NAME, localeString);
languageCookie.setMaxAge(WicketApplication.LANGUAGE_COOKIE_AGE);
((WebResponse)getResponse()).addCookie(languageCookie);
getSession().setLocale(new Locale(localeString));
}
@Override
public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
replaceComponentTagBody(markupStream, openTag, getString(localeString));
}
};
return languageOptionLink;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment