use webjars

This commit is contained in:
Athou
2013-03-27 20:56:45 +01:00
parent 5c759ad496
commit e0925e8c50
41 changed files with 2445 additions and 853 deletions

View File

@@ -1,5 +1,9 @@
package com.commafeed.frontend;
import java.io.IOException;
import java.net.URL;
import java.util.jar.JarFile;
import javax.enterprise.inject.spi.BeanManager;
import javax.naming.InitialContext;
import javax.naming.NamingException;
@@ -24,6 +28,11 @@ import org.apache.wicket.request.Request;
import org.apache.wicket.request.Response;
import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
import org.apache.wicket.request.cycle.RequestCycle;
import org.jboss.vfs.VirtualFile;
import org.reflections.ReflectionsException;
import org.reflections.vfs.SystemDir;
import org.reflections.vfs.Vfs;
import org.reflections.vfs.ZipDir;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,6 +42,9 @@ import com.commafeed.frontend.pages.LogoutPage;
import com.commafeed.frontend.pages.SettingsPage;
import com.commafeed.frontend.utils.exception.DisplayExceptionPage;
import de.agilecoders.wicket.Bootstrap;
import de.agilecoders.wicket.settings.BootstrapSettings;
public class CommaFeedApplication extends AuthenticatedWebApplication {
private Logger log = LoggerFactory.getLogger(CommaFeedApplication.class);
@@ -74,7 +86,7 @@ public class CommaFeedApplication extends AuthenticatedWebApplication {
new DisplayExceptionPage(ex)), policy);
}
});
Bootstrap.install(Application.get(), new BootstrapSettings());
}
@Override
@@ -113,4 +125,54 @@ public class CommaFeedApplication extends AuthenticatedWebApplication {
return (CommaFeedApplication) Application.get();
}
/**
* Reflections fix for JbossAS7
*
* https://code.google.com/p/reflections/wiki/JBossIntegration
*/
static {
Vfs.addDefaultURLTypes(new Vfs.UrlType() {
public boolean matches(URL url) {
return url.getProtocol().equals("vfs");
}
public Vfs.Dir createDir(URL url) {
VirtualFile content;
try {
content = (VirtualFile) url.openConnection().getContent();
} catch (Throwable e) {
throw new ReflectionsException(
"could not open url connection as VirtualFile ["
+ url + "]", e);
}
Vfs.Dir dir = null;
try {
dir = createDir(new java.io.File(content.getPhysicalFile()
.getParentFile(), content.getName()));
} catch (IOException e) { /* continue */
}
if (dir == null) {
try {
dir = createDir(content.getPhysicalFile());
} catch (IOException e) { /* continue */
}
}
return dir;
}
Vfs.Dir createDir(java.io.File file) {
try {
return file.exists() && file.canRead() ? file.isDirectory() ? new SystemDir(
file) : new ZipDir(new JarFile(file))
: null;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
});
}
}

View File

@@ -0,0 +1,16 @@
package com.commafeed.frontend.pages;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.html.WebPage;
import de.agilecoders.wicket.Bootstrap;
@SuppressWarnings("serial")
public class BasePage extends WebPage {
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
Bootstrap.renderHead(response);
}
}

View File

@@ -2,12 +2,6 @@
<html xmlns:wicket="http://wicket.apache.org">
<head>
<title>CommaFeed</title>
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="vendor/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
<link href="vendor/angular-ui/angular-ui.min.css" rel="stylesheet">
<link href="vendor/csstreeview/css3-treeview.css" rel="stylesheet">
<link href="vendor/select2/select2.css" rel="stylesheet">
<link href="css/app.css" rel="stylesheet">
</head>
<body>
<div ng-app="commafeed" id="main" class="main">
@@ -34,21 +28,5 @@
</div>
</div>
</div>
<script src="vendor/jquery/jquery-1.9.1.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.min.js"></script>
<script src="vendor/select2/select2.min.js"></script>
<script src="vendor/angular/angular.min.js"></script>
<script src="vendor/angular/angular-resource.min.js"></script>
<script src="vendor/angular/angular-sanitize.min.js"></script>
<script src="vendor/angular-upload/ng-upload.min.js"></script>
<script src="vendor/angular-infinite-scroll/ng-infinite-scroll.min.js"></script>
<script src="vendor/angular-ui/angular-ui.min.js"></script>
<script src="vendor/angular-ui-bootstrap/ui-bootstrap-tpls-0.2.0.min.js"></script>
<script src="vendor/spin.js/spin.min.js"></script>
<script src="js/main.js"></script>
<script src="js/controllers.js"></script>
<script src="js/directives.js"></script>
<script src="js/services.js"></script>
</body>
</html>

View File

@@ -1,12 +1,46 @@
package com.commafeed.frontend.pages;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import com.commafeed.frontend.pages.auth.Role;
import com.commafeed.frontend.references.angular.AngularReference;
import com.commafeed.frontend.references.angular.AngularResourceReference;
import com.commafeed.frontend.references.angular.AngularSanitizeReference;
import com.commafeed.frontend.references.angularui.AngularUIReference;
import com.commafeed.frontend.references.angularuibootstrap.AngularUIBootstrapReference;
import com.commafeed.frontend.references.csstreeview.CssTreeViewReference;
import com.commafeed.frontend.references.nginfinitescroll.NGInfiniteScrollReference;
import com.commafeed.frontend.references.ngupload.NGUploadReference;
import com.commafeed.frontend.references.select2.Select2Reference;
import com.commafeed.frontend.references.spinjs.SpinJSReference;
@SuppressWarnings("serial")
@AuthorizeInstantiation(Role.USER)
public class HomePage extends WebPage {
public class HomePage extends BasePage {
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
AngularReference.renderHead(response);
AngularResourceReference.renderHead(response);
AngularSanitizeReference.renderHead(response);
AngularUIReference.renderHead(response);
AngularUIBootstrapReference.renderHead(response);
NGUploadReference.renderHead(response);
NGInfiniteScrollReference.renderHead(response);
Select2Reference.renderHead(response);
SpinJSReference.renderHead(response);
CssTreeViewReference.renderHead(response);
response.render(JavaScriptHeaderItem.forUrl("js/main.js"));
response.render(JavaScriptHeaderItem.forUrl("js/controllers.js"));
response.render(JavaScriptHeaderItem.forUrl("js/directives.js"));
response.render(JavaScriptHeaderItem.forUrl("js/services.js"));
response.render(CssHeaderItem.forUrl("css/app.css"));
}
}

View File

@@ -0,0 +1,20 @@
package com.commafeed.frontend.references.angular;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
public class AngularReference extends WebjarsJavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final AngularReference INSTANCE = new AngularReference();
private AngularReference() {
super("/angularjs/current/angular.js");
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,31 @@
package com.commafeed.frontend.references.angular;
import java.util.Arrays;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
public class AngularResourceReference extends
WebjarsJavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final AngularResourceReference INSTANCE = new AngularResourceReference();
private AngularResourceReference() {
super("/angularjs/current/angular-resource.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(JavaScriptHeaderItem
.forReference(AngularReference.INSTANCE));
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,30 @@
package com.commafeed.frontend.references.angular;
import java.util.Arrays;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
public class AngularSanitizeReference extends
WebjarsJavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final AngularSanitizeReference INSTANCE = new AngularSanitizeReference();
private AngularSanitizeReference() {
super("/angularjs/current/angular-sanitize.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(JavaScriptHeaderItem
.forReference(AngularReference.INSTANCE));
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,32 @@
package com.commafeed.frontend.references.angularui;
import java.util.Arrays;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import com.commafeed.frontend.utils.WicketUtils;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
public class AngularUIReference extends WebjarsJavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final AngularUIReference INSTANCE = new AngularUIReference();
private AngularUIReference() {
super("/angular-ui/current/angular-ui.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays
.asList(WicketUtils
.buildCssWebJarHeaderItem("/angular-ui/current/angular-ui.css"));
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,30 @@
package com.commafeed.frontend.references.angularuibootstrap;
import java.util.Arrays;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.commafeed.frontend.references.angular.AngularReference;
public class AngularUIBootstrapReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final AngularUIBootstrapReference INSTANCE = new AngularUIBootstrapReference();
private AngularUIBootstrapReference() {
super(AngularUIBootstrapReference.class, "ui-bootstrap-tpls-0.2.0.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(JavaScriptHeaderItem
.forReference(AngularReference.INSTANCE));
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,19 @@
package com.commafeed.frontend.references.csstreeview;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.request.resource.CssResourceReference;
public class CssTreeViewReference extends CssResourceReference {
private static final long serialVersionUID = 1L;
public static final CssTreeViewReference INSTANCE = new CssTreeViewReference();
private CssTreeViewReference() {
super(CssTreeViewReference.class, "css3-treeview.css");
}
public static void renderHead(final IHeaderResponse response) {
response.render(CssHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,115 @@
.css-treeview ul,
.css-treeview li
{
padding: 0;
margin: 0;
list-style: none;
}
.css-treeview input
{
position: absolute;
opacity: 0;
}
.css-treeview
{
font: normal 11px "Segoe UI", Arial, Sans-serif;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
.css-treeview a
{
color: #00f;
text-decoration: none;
}
.css-treeview a:hover
{
text-decoration: underline;
}
.css-treeview input + label + ul
{
margin: 0 0 0 22px;
}
.css-treeview input ~ ul
{
display: none;
}
.css-treeview label,
.css-treeview label::before
{
cursor: pointer;
}
.css-treeview input:disabled + label
{
cursor: default;
opacity: .6;
}
.css-treeview input:checked:not(:disabled) ~ ul
{
display: block;
}
.css-treeview label,
.css-treeview label::before
{
background: url("icons.png") no-repeat;
}
.css-treeview label,
.css-treeview a,
.css-treeview label::before
{
display: inline-block;
height: 16px;
line-height: 16px;,
vertical-align: middle;
}
.css-treeview label
{
background-position: 18px 0;
}
.css-treeview label::before
{
content: "";
width: 16px;
margin: 0 22px 0 0;
vertical-align: middle;
background-position: 0 -32px;
}
.css-treeview input:checked + label::before
{
background-position: 0 -16px;
}
/* webkit adjacent element selector bugfix */
@media screen and (-webkit-min-device-pixel-ratio:0)
{
.css-treeview
{
-webkit-animation: webkit-adjacent-element-selector-bugfix infinite 1s;
}
@-webkit-keyframes webkit-adjacent-element-selector-bugfix
{
from
{
padding: 0;
}
to
{
padding: 0;
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

View File

@@ -0,0 +1,30 @@
package com.commafeed.frontend.references.nginfinitescroll;
import java.util.Arrays;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.commafeed.frontend.references.angular.AngularReference;
public class NGInfiniteScrollReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final NGInfiniteScrollReference INSTANCE = new NGInfiniteScrollReference();
private NGInfiniteScrollReference() {
super(NGInfiniteScrollReference.class, "ng-infinite-scroll.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(JavaScriptHeaderItem
.forReference(AngularReference.INSTANCE));
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,61 @@
/* ng-infinite-scroll - v1.0.0 - 2013-02-23 */
var mod;
mod = angular.module('infinite-scroll', []);
mod.directive('infiniteScroll', [
'$rootScope', '$window', '$timeout', function($rootScope, $window, $timeout) {
return {
link: function(scope, elem, attrs) {
var checkWhenEnabled, handler, scrollDistance, scrollEnabled;
$window = angular.element($window);
scrollDistance = 0;
if (attrs.infiniteScrollDistance != null) {
scope.$watch(attrs.infiniteScrollDistance, function(value) {
return scrollDistance = parseInt(value, 10);
});
}
scrollEnabled = true;
checkWhenEnabled = false;
if (attrs.infiniteScrollDisabled != null) {
scope.$watch(attrs.infiniteScrollDisabled, function(value) {
scrollEnabled = !value;
if (scrollEnabled && checkWhenEnabled) {
checkWhenEnabled = false;
return handler();
}
});
}
handler = function() {
var elementBottom, remaining, shouldScroll, windowBottom;
windowBottom = $window.height() + $window.scrollTop();
elementBottom = elem.offset().top + elem.height();
remaining = elementBottom - windowBottom;
shouldScroll = remaining <= $window.height() * scrollDistance;
if (shouldScroll && scrollEnabled) {
if ($rootScope.$$phase) {
return scope.$eval(attrs.infiniteScroll);
} else {
return scope.$apply(attrs.infiniteScroll);
}
} else if (shouldScroll) {
return checkWhenEnabled = true;
}
};
$window.on('scroll', handler);
scope.$on('$destroy', function() {
return $window.off('scroll', handler);
});
return $timeout((function() {
if (attrs.infiniteScrollImmediateCheck) {
if (scope.$eval(attrs.infiniteScrollImmediateCheck)) {
return handler();
}
} else {
return handler();
}
}), 0);
}
};
}
]);

View File

@@ -0,0 +1,2 @@
/* ng-infinite-scroll - v1.0.0 - 2013-02-23 */
var mod;mod=angular.module("infinite-scroll",[]),mod.directive("infiniteScroll",["$rootScope","$window","$timeout",function(i,n,e){return{link:function(t,l,o){var r,c,f,a;return n=angular.element(n),f=0,null!=o.infiniteScrollDistance&&t.$watch(o.infiniteScrollDistance,function(i){return f=parseInt(i,10)}),a=!0,r=!1,null!=o.infiniteScrollDisabled&&t.$watch(o.infiniteScrollDisabled,function(i){return a=!i,a&&r?(r=!1,c()):void 0}),c=function(){var e,c,u,d;return d=n.height()+n.scrollTop(),e=l.offset().top+l.height(),c=e-d,u=n.height()*f>=c,u&&a?i.$$phase?t.$eval(o.infiniteScroll):t.$apply(o.infiniteScroll):u?r=!0:void 0},n.on("scroll",c),t.$on("$destroy",function(){return n.off("scroll",c)}),e(function(){return o.infiniteScrollImmediateCheck?t.$eval(o.infiniteScrollImmediateCheck)?c():void 0:c()},0)}}}]);

View File

@@ -0,0 +1,30 @@
package com.commafeed.frontend.references.ngupload;
import java.util.Arrays;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.commafeed.frontend.references.angular.AngularReference;
public class NGUploadReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final NGUploadReference INSTANCE = new NGUploadReference();
private NGUploadReference() {
super(NGUploadReference.class, "ng-upload.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(JavaScriptHeaderItem
.forReference(AngularReference.INSTANCE));
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,107 @@
// Version 0.3.2
// AngularJS simple file upload directive
// this directive uses an iframe as a target
// to enable the uploading of files without
// losing focus in the ng-app.
//
// <div ng-app="app">
// <div ng-controller="mainCtrl">
// <form action="/uploads" ng-upload>
// <input type="file" name="avatar"></input>
// <input type="submit" value="Upload"
// upload-submit="submited(content, completed)"></input>
// </form>
// </div>
// </div>
//
// angular.module('app', ['ngUpload'])
// .controller('mainCtrl', function($scope) {
// $scope.submited = function(content, completed) {
// if (completed) {
// console.log(content);
// }
// }
// });
//
angular.module('ngUpload', [])
.directive('uploadSubmit', ['$parse', function($parse) {
return {
restrict: 'AC',
link: function(scope, element, attrs) {
// Options (just 1 for now)
// Each option should be prefixed with 'upload-options-' or 'uploadOptions'
// {
// // specify whether to enable the submit button when uploading forms
// enableControls: bool
// }
var options = {};
options.enableControls = attrs.uploadOptionsEnableControls;
// submit the form - requires jQuery
var form = element.parents('form[ng-upload]') || element.parents('form.ng-upload');
// Retrieve the callback function
var fn = $parse(attrs.uploadSubmit);
if (!angular.isFunction(fn)) {
var message = "The expression on the ngUpload directive does not point to a valid function.";
throw message + "\n";
}
element.bind('click', function($event) {
// prevent default behavior of click
$event.preventDefault = true;
// create a new iframe
var iframe = angular.element("<iframe id='upload_iframe' name='upload_iframe' border='0' width='0' height='0' style='width: 0px; height: 0px; border: none; display: none' />");
// attach function to load event of the iframe
iframe.bind('load', function () {
// get content - requires jQuery
var content = iframe.contents().find('body').text();
// execute the upload response function in the active scope
scope.$apply(function () {
fn(scope, { content: content, completed: true});
});
// remove iframe
if (content !== "") { // Fixes a bug in Google Chrome that dispose the iframe before content is ready.
setTimeout(function () { iframe.remove(); }, 250);
}
element.attr('disabled', null);
element.attr('title', 'Click to start upload.');
});
// add the new iframe to application
form.parent().append(iframe);
scope.$apply(function () {
fn(scope, {content: "Please wait...", completed: false });
});
var enabled = true;
if (!options.enableControls) {
// disable the submit control on click
element.attr('disabled', 'disabled');
enabled = false;
}
// why do we need this???
element.attr('title', (enabled ? '[ENABLED]: ' : '[DISABLED]: ') + 'Uploading, please wait...');
form.submit();
}).attr('title', 'Click to start upload.');
}
};
}])
.directive('ngUpload', ['$parse', function ($parse) {
return {
restrict: 'AC',
link: function (scope, element, attrs) {
element.attr("target", "upload_iframe");
element.attr("method", "post");
// Append a timestamp field to the url to prevent browser caching results
element.attr("action", element.attr("action") + "?_t=" + new Date().getTime());
element.attr("enctype", "multipart/form-data");
element.attr("encoding", "multipart/form-data");
}
};
}]);

View File

@@ -0,0 +1 @@
angular.module("ngUpload",[]).directive("uploadSubmit",["$parse",function(t){return{restrict:"AC",link:function(a,e,n){var o={};o.enableControls=n.uploadOptionsEnableControls;var i=e.parents("form[ng-upload]")||e.parents("form.ng-upload"),r=t(n.uploadSubmit);if(!angular.isFunction(r)){var l="The expression on the ngUpload directive does not point to a valid function.";throw l+"\n"}e.bind("click",function(t){t.preventDefault=!0;var n=angular.element("<iframe id='upload_iframe' name='upload_iframe' border='0' width='0' height='0' style='width: 0px; height: 0px; border: none; display: none' />");n.bind("load",function(){var t=n.contents().find("body").text();a.$apply(function(){r(a,{content:t,completed:!0})}),""!==t&&setTimeout(function(){n.remove()},250),e.attr("disabled",null),e.attr("title","Click to start upload.")}),i.parent().append(n),a.$apply(function(){r(a,{content:"Please wait...",completed:!1})});var l=!0;o.enableControls||(e.attr("disabled","disabled"),l=!1),e.attr("title",(l?"[ENABLED]: ":"[DISABLED]: ")+"Uploading, please wait..."),i.submit()}).attr("title","Click to start upload.")}}}]).directive("ngUpload",["$parse",function(){return{restrict:"AC",link:function(t,a){a.attr("target","upload_iframe"),a.attr("method","post"),a.attr("action",a.attr("action")+"?_t="+(new Date).getTime()),a.attr("enctype","multipart/form-data"),a.attr("encoding","multipart/form-data")}}}]);

View File

@@ -0,0 +1,31 @@
package com.commafeed.frontend.references.select2;
import java.util.Arrays;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import com.commafeed.frontend.utils.WicketUtils;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
public class Select2Reference extends WebjarsJavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final Select2Reference INSTANCE = new Select2Reference();
private Select2Reference() {
super("/select2/current/select2.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(WicketUtils
.buildCssWebJarHeaderItem("/select2/current/select2.css"));
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -0,0 +1,20 @@
package com.commafeed.frontend.references.spinjs;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
public class SpinJSReference extends WebjarsJavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public static final SpinJSReference INSTANCE = new SpinJSReference();
private SpinJSReference() {
super("/spin-js/current/spin.js");
}
public static void renderHead(final IHeaderResponse response) {
response.render(JavaScriptHeaderItem.forReference(INSTANCE));
}
}

View File

@@ -18,6 +18,9 @@ import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.util.io.IOUtils;
import org.apache.wicket.util.template.PackageTextTemplate;
import de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
public class WicketUtils {
public static void loadJQuery(IHeaderResponse response) {
@@ -31,6 +34,12 @@ public class WicketUtils {
.getSimpleName() + ".js"));
}
public static JavaScriptHeaderItem buildJavaScriptWebJarHeaderItem(
String name) {
return JavaScriptHeaderItem
.forReference(new WebjarsJavaScriptResourceReference(name));
}
public static void loadJS(IHeaderResponse response, Class<?> klass) {
response.render(buildJavaScriptHeaderItem(klass));
}
@@ -50,11 +59,20 @@ public class WicketUtils {
response.render(result);
}
public static void loadWebJarJS(IHeaderResponse response, String name) {
response.render(buildJavaScriptWebJarHeaderItem(name));
}
public static CssHeaderItem buildCssHeaderItem(Class<?> klass) {
return CssHeaderItem.forReference(new CssResourceReference(klass, klass
.getSimpleName() + ".css"));
}
public static CssHeaderItem buildCssWebJarHeaderItem(String name) {
return CssHeaderItem
.forReference(new WebjarsCssResourceReference(name));
}
public static void loadCSS(IHeaderResponse response, Class<?> klass) {
response.render(buildCssHeaderItem(klass));
}
@@ -74,6 +92,10 @@ public class WicketUtils {
response.render(result);
}
public static void loadWebJarCSS(IHeaderResponse response, String name) {
response.render(buildCssWebJarHeaderItem(name));
}
public static HttpServletRequest getHttpServletRequest() {
ServletWebRequest servletWebRequest = (ServletWebRequest) RequestCycle
.get().getRequest();