Package com.mysticcoders.mysticpaste.web.pages

Source Code of com.mysticcoders.mysticpaste.web.pages.BasePage

package com.mysticcoders.mysticpaste.web.pages;

import com.mysticcoders.mysticpaste.web.components.FixBootstrapStylesCssResourceReference;
import com.mysticcoders.mysticpaste.web.components.HelpModal;
import com.mysticcoders.mysticpaste.web.components.google.GoogleAnalyticsSnippet;
import com.mysticcoders.mysticpaste.web.pages.history.HistoryPage;
import com.mysticcoders.mysticpaste.web.pages.paste.PasteItemPage;
import com.mysticcoders.mysticpaste.web.pages.plugin.PluginPage;
import com.mysticcoders.wicket.mousetrap.KeyBinding;
import com.mysticcoders.wicket.mousetrap.Mousetrap;
import de.agilecoders.wicket.core.Bootstrap;
import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.BootstrapBaseBehavior;
import de.agilecoders.wicket.core.markup.html.bootstrap.html.ChromeFrameMetaTag;
import de.agilecoders.wicket.core.markup.html.bootstrap.html.HtmlTag;
import de.agilecoders.wicket.core.markup.html.bootstrap.html.MetaTag;
import de.agilecoders.wicket.core.markup.html.bootstrap.html.OptimizedMobileViewportMetaTag;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.Navbar;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.NavbarButton;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.NavbarComponents;
import de.agilecoders.wicket.core.markup.html.references.BootstrapJavaScriptReference;
import de.agilecoders.wicket.core.settings.IBootstrapSettings;
import org.apache.wicket.Application;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
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.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
import org.apache.wicket.util.tester.WicketTesterHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;

/**
* Base Page for the application.
* Extend this page to pull in the application header/footer.
*
* @author Steve Forsyth
*         Date: Mar 8, 2009
*/
public class BasePage extends WebPage {

    Class activePage;
    Mousetrap mousetrap;

    private static final Logger logger = LoggerFactory.getLogger(BasePage.class);

    public BasePage() {
        init();
    }

    public BasePage(Class activePage) {
        this.activePage = activePage;
        init();
    }

    public BasePage(PageParameters params) {
        super(params);
        init();
    }

    protected String getTitle() {
        return "Mystic Paste";
    }

    protected Mousetrap mousetrap() {
        return mousetrap;
    }

    private void init() {

        add(new HtmlTag("html"));

        add(new OptimizedMobileViewportMetaTag("viewport"));
        add(new ChromeFrameMetaTag("chrome-frame"));
        add(new MetaTag("description", Model.of("description"), Model.of("Mystic Paste")));
        add(new MetaTag("author", Model.of("author"), Model.of("Andrew Lombardi")));

        add(newNavbar("navbar"));
        add(new Footer("footer"));

        add(mousetrap = new Mousetrap());
        add(new HelpModal("helpModal", "Help"));

        add(new GoogleAnalyticsSnippet("ga-js") {
            public String getTracker() {
                return "UA-254925-6";
            }

            public boolean isVisible() {
                return true;
            }
        });

        final AbstractDefaultAjaxBehavior newNav = new AbstractDefaultAjaxBehavior() {
            @Override
            protected void respond(AjaxRequestTarget target) {
                System.out.println("newNav");
                throw new RestartResponseException(PasteItemPage.class);
            }
        };
        add(newNav);

        final AbstractDefaultAjaxBehavior historyNav = new AbstractDefaultAjaxBehavior() {
            @Override
            protected void respond(AjaxRequestTarget target) {
                System.out.println("historyNav");
                throw new RestartResponseException(HistoryPage.class);
            }
        };
        add(historyNav);

//        mousetrap.addBind(new KeyBinding().addKeyCombo("n").addKeyCombo("N"), newNav);

        String newPasteStr = "Wicket.Ajax.get({'u': '" + newNav.getCallbackUrl() + "'})";
        mousetrap.addBindJs(new KeyBinding().addKeyCombo("n"), newPasteStr);
        mousetrap.addBind(new KeyBinding(KeyBinding.EVENT_KEYUP).addKeyCombo("h").addKeyCombo("H"),
                historyNav);
        mousetrap.addBindJs(new KeyBinding().addKeyCombo("?"),
                "$('#helpModal').modal();"
                );

        add(new BootstrapBaseBehavior());
    }

    /**
     * creates a new {@link Navbar} instance
     *
     * @param markupId The components markup id.
     * @return a new {@link Navbar} instance
     */
    protected Navbar newNavbar(String markupId) {
        Navbar navbar = new Navbar(markupId);
        navbar.setPosition(Navbar.Position.TOP);
        navbar.setInverted(false);

        // show brand name and logo
        navbar.brandName(Model.of("Mystic Paste"));

        navbar.addComponents(NavbarComponents.transform(Navbar.ComponentPosition.LEFT,
                new NavbarButton<PasteItemPage>(PasteItemPage.class, Model.of("New")),
                new NavbarButton<HistoryPage>(HistoryPage.class, Model.of("History")),
//                new NavbarButton<PopularPage>(PopularPage.class, Model.of("Popular")),
                new NavbarButton<PluginPage>(PluginPage.class, Model.of("Plugins")),
                new NavbarButton<HelpPage>(HelpPage.class, Model.of("Help"))
        ));

        return navbar;
    }

    @Override
    protected void onBeforeRender() {
        addOrReplace(new Label("title", getTitle()));

        super.onBeforeRender();
    }

    @Override
    public void renderHead(IHeaderResponse response) {
        super.renderHead(response);

        response.render(CssHeaderItem.forReference(FixBootstrapStylesCssResourceReference.INSTANCE));
        response.render(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()));
        response.render(JavaScriptHeaderItem.forReference(BootstrapJavaScriptReference.instance()));
    }

    /**
     * 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(""));
        }
    }

    @Override
    protected void onConfigure() {
        super.onConfigure();

        configureTheme(getPageParameters());
    }

    /**
     * Returns the X-Forwarded-For header
     *
     * @return
     */
    protected String getClientIpAddress() {
        ServletWebRequest request = ((ServletWebRequest) RequestCycle.get().getRequest());
        String ipAddress = request.getHeader("X-Forwarded-For");
        if (ipAddress == null) {
            ipAddress = request.getContainerRequest().getRemoteHost();
        }
        return ipAddress;
    }

    protected String getReferrer() {
        ServletWebRequest request = ((ServletWebRequest) RequestCycle.get().getRequest());

        return request.getHeader("referer");
    }

    private String serverName;

    protected String getServerName() {
        return serverName;
    }

}
TOP

Related Classes of com.mysticcoders.mysticpaste.web.pages.BasePage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.