/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.web.wicket;
import org.apache.wicket.markup.head.CssReferenceHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.projectforge.web.WebConfiguration;
import de.micromata.less.LessWicketApplicationInstantiator;
public class WicketRenderHeadUtils
{
private static final String[][] JAVASCRIPT_FILES_DEF = { //
// { "scripts/jquery/1.8.2/jquery-1.8.2", ".min"}, // Wicket delivers jQuery version
// Needed: core, widget, mouse, position, draggable, droppable, resizable, selectable, sortable, datepicker (smoothness):
{ "scripts/jqueryui/jquery-ui-1.10.4.custom", ".min"}, //
{ "include/bootstrap/js/bootstrap", ""}, // ".min" bootstrap.js is modified!
{ "scripts/contextmenu/jquery.contextmenu", ""} //
};
private static final String[] JAVASCRIPT_FILES;
private static final String[][] JAVASCRIPT_FILES_JAVA_DEF = { //
{ "scripts/projectforge", ""} //
};
private static final String[] JAVASCRIPT_FILES_JAVA;
private static final String[][] CSS_FILES_DEF = { //
{ "styles/google-fonts/google-fonts", ""}, //
// "http://fonts.googleapis.com/css?family=Droid+Sans:regular&subset=latin", //
{ "styles/jqueryui/1.10.4/smoothness/jquery-ui-1.10.4.custom", ".min"} //
};
private static final String[] CSS_FILES;
private static final String[][] AUTOGROW_JAVASCRIPT_FILES_DEF = { //
{ "scripts/autogrow/jquery.autogrowtextarea", ""}};
private static final String[] AUTOGROW_JAVASCRIPT_FILES;
static {
JAVASCRIPT_FILES = new String[JAVASCRIPT_FILES_DEF.length];
JAVASCRIPT_FILES_JAVA = new String[JAVASCRIPT_FILES_JAVA_DEF.length];
CSS_FILES = new String[CSS_FILES_DEF.length];
AUTOGROW_JAVASCRIPT_FILES = new String[AUTOGROW_JAVASCRIPT_FILES_DEF.length];
if (WebConfiguration.isDevelopmentMode() == true) {
for (int i = 0; i < JAVASCRIPT_FILES_DEF.length; i++) {
JAVASCRIPT_FILES[i] = JAVASCRIPT_FILES_DEF[i][0] + ".js";
}
handleWicketResourceHandledJavascript();
for (int i = 0; i < CSS_FILES_DEF.length; i++) {
CSS_FILES[i] = CSS_FILES_DEF[i][0] + ".css";
}
for (int i = 0; i < AUTOGROW_JAVASCRIPT_FILES_DEF.length; i++) {
AUTOGROW_JAVASCRIPT_FILES[i] = AUTOGROW_JAVASCRIPT_FILES_DEF[i][0] + ".js";
}
} else {
for (int i = 0; i < JAVASCRIPT_FILES_DEF.length; i++) {
JAVASCRIPT_FILES[i] = JAVASCRIPT_FILES_DEF[i][0] + JAVASCRIPT_FILES_DEF[i][1] + ".js";
}
handleWicketResourceHandledJavascript();
for (int i = 0; i < CSS_FILES_DEF.length; i++) {
CSS_FILES[i] = CSS_FILES_DEF[i][0] + CSS_FILES_DEF[i][1] + ".css";
}
for (int i = 0; i < AUTOGROW_JAVASCRIPT_FILES_DEF.length; i++) {
AUTOGROW_JAVASCRIPT_FILES[i] = AUTOGROW_JAVASCRIPT_FILES_DEF[i][0] + AUTOGROW_JAVASCRIPT_FILES_DEF[i][1] + ".js";
}
}
}
private static void handleWicketResourceHandledJavascript() {
// handle wicket resource handled javascript files
final long startTime = WicketApplication.getStartTime();
String name = null;
String versionName = null;
for (int i = 0; i < JAVASCRIPT_FILES_JAVA_DEF.length; i++) {
name = JAVASCRIPT_FILES_JAVA_DEF[i][0] + ".js";
versionName = JAVASCRIPT_FILES_JAVA_DEF[i][0] + "-version-" + startTime + ".js";
WicketApplication.get().mountResource(versionName,
new PackageResourceReference(WicketApplication.class, name));
JAVASCRIPT_FILES_JAVA[i] = "wa/" + versionName;
}
}
/**
* Bbootstrap, jqueryui and uquery.contextmenu.js.
*/
public static void renderMainJavaScriptIncludes(final IHeaderResponse response)
{
for (final String url : JAVASCRIPT_FILES) {
response.render(JavaScriptReferenceHeaderItem.forUrl(url));
}
for (final String url : JAVASCRIPT_FILES_JAVA) {
response.render(JavaScriptReferenceHeaderItem.forUrl(url));
}
}
/**
* Bootstrap, jqueryui and uquery.contextmenu.js.
*/
public static void renderMainCSSIncludes(final IHeaderResponse response)
{
for (final String url : CSS_FILES) {
response.render(CssReferenceHeaderItem.forUrl(url));
}
LessWicketApplicationInstantiator.renderCompiledCssResource(response);
}
/**
* Renders all main JavaScript files and "select2.js".
*/
public static void renderSelect2JavaScriptIncludes(final IHeaderResponse response)
{
renderMainJavaScriptIncludes(response);
// for (final String url : SELECT2_JAVASCRIPT_FILES) {
// response.render(JavaScriptReferenceHeaderItem.forUrl(url));
// }
}
/**
* Bootstrap, jqueryui and uquery.contextmenu.js.
*/
public static void renderAutogrowJavaScriptIncludes(final IHeaderResponse response)
{
renderMainJavaScriptIncludes(response);
for (final String url : AUTOGROW_JAVASCRIPT_FILES) {
response.render(JavaScriptReferenceHeaderItem.forUrl(url));
}
}
}