package org.nocket.component.header.lesscss;
import java.text.MessageFormat;
import org.apache.wicket.RuntimeConfigurationType;
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.StringHeaderItem;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.IRequestCycle;
import org.apache.wicket.request.UrlUtils;
import org.apache.wicket.request.resource.PackageResourceReference;
public class LessCSSHelper {
private static final String LESS_JS = "less-1.7.3.min.js";
private static final String STYLESHEET_LESS = "<link rel=\"stylesheet/less\" href=\"{0}\" type=\"text/css}\">\n";
public static class PathTupel {
private final String lessPath;
private final String cssPath;
private final Class<? extends WebPage> pageClass;
public PathTupel(Class<? extends WebPage> pageClass, String lessPath, String cssPath) {
super();
this.lessPath = lessPath;
this.cssPath = cssPath;
this.pageClass = pageClass;
}
}
/**
* Includes the Bootstrap stylesheet in the page header. Checks if the
* WebApplication is running in DEV or in PROD mode and uses bootstrap.less
* for DEV or the compiled bootstrap.css for PROD mode.
*
* @param response
*/
public static void initBootstrapLessCSS(Class<? extends WebPage> appClass, IHeaderResponse response,
IRequestCycle requestCycle, PathTupel... pathTupels) {
// addStylesheetLessCSS(response, requestCycle, new PathTupel(appClass, BOOTSTRAP_LESS, BOOTSTRAP_CSS));
// initLessCSS(appClass, response, requestCycle, pathTupels);
}
public static void initLessCSS(Class<? extends WebPage> appClass, IHeaderResponse response,
IRequestCycle requestCycle, PathTupel... pathTupels) {
for (int i = 0; pathTupels != null && i < pathTupels.length; i++) {
PathTupel pathTupel = pathTupels[i];
addStylesheetLessCSS(response, requestCycle, pathTupel);
}
if (isDevelopement()) {
response.render(JavaScriptHeaderItem
.forReference(new PackageResourceReference(LessCSSHelper.class, LESS_JS)));
}
}
public static void addStylesheetLessCSS(IHeaderResponse response, IRequestCycle requestCycle, PathTupel pathTupel) {
if (isDevelopement()) {
// dev mode
response.render(StringHeaderItem.forString(MessageFormat.format(STYLESHEET_LESS,
UrlUtils.rewriteToContextRelative(pathTupel.lessPath, requestCycle))));
} else {
//prod mode
response.render(CssHeaderItem.forUrl(pathTupel.cssPath));
}
}
private static boolean isDevelopement() {
return WebApplication.get().getConfigurationType() == RuntimeConfigurationType.DEVELOPMENT;
}
}