diff --git a/.gitignore b/.gitignore
index 7fbf5e45..74b29e20 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,7 @@
######################
# Node
######################
-node/
+/node/
node_tmp/
node_modules/
npm-debug.log.*
@@ -67,14 +67,14 @@ local.properties
######################
# Maven
######################
-log/
-target/
+/log/
+/target/
######################
# Gradle
######################
.gradle/
-build/
+/build/
######################
# Package Files
@@ -109,7 +109,6 @@ Desktop.ini
######################
# Directories
######################
-/build/
/bin/
/deploy/
diff --git a/.yo-rc.json b/.yo-rc.json
index 3a1d1b72..5e031172 100644
--- a/.yo-rc.json
+++ b/.yo-rc.json
@@ -24,7 +24,7 @@
"en"
],
"serverPort": 8080,
- "jhipsterVersion": "4.0.2",
+ "jhipsterVersion": "4.0.3",
"enableSocialSignIn": false,
"useSass": false,
"jhiPrefix": "jhi",
diff --git a/README.md b/README.md
index 3301f5ec..5f6c0d89 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,10 @@
# jhipsterSampleApplication
-This application was generated using JHipster 4.0.1, you can find documentation and help at [https://jhipster.github.io/documentation-archive/v4.0.1](https://jhipster.github.io/documentation-archive/v4.0.1).
+This application was generated using JHipster 4.0.2, you can find documentation and help at [https://jhipster.github.io/documentation-archive/v4.0.2](https://jhipster.github.io/documentation-archive/v4.0.2).
## Development
Before you can build this project, you must install and configure the following dependencies on your machine:
+
1. [Node.js][]: We use Node to run a development web server and build the project.
Depending on your system, you can install Node either from source or as a pre-packaged bundle.
2. [Yarn][]: We use Yarn to manage Node dependencies.
@@ -95,13 +96,13 @@ For more information refer to [Using Docker and Docker-Compose][], this page als
To set up a CI environment, consult the [Setting up Continuous Integration][] page.
[JHipster Homepage and latest documentation]: https://jhipster.github.io
-[JHipster 4.0.1 archive]: https://jhipster.github.io/documentation-archive/v4.0.1
+[JHipster 4.0.2 archive]: https://jhipster.github.io/documentation-archive/v4.0.2
-[Using JHipster in development]: https://jhipster.github.io/documentation-archive/v4.0.1/development/
-[Using Docker and Docker-Compose]: https://jhipster.github.io/documentation-archive/v4.0.1/docker-compose
-[Using JHipster in production]: https://jhipster.github.io/documentation-archive/v4.0.1/production/
-[Running tests page]: https://jhipster.github.io/documentation-archive/v4.0.1/running-tests/
-[Setting up Continuous Integration]: https://jhipster.github.io/documentation-archive/v4.0.1/setting-up-ci/
+[Using JHipster in development]: https://jhipster.github.io/documentation-archive/v4.0.2/development/
+[Using Docker and Docker-Compose]: https://jhipster.github.io/documentation-archive/v4.0.2/docker-compose
+[Using JHipster in production]: https://jhipster.github.io/documentation-archive/v4.0.2/production/
+[Running tests page]: https://jhipster.github.io/documentation-archive/v4.0.2/running-tests/
+[Setting up Continuous Integration]: https://jhipster.github.io/documentation-archive/v4.0.2/setting-up-ci/
[Gatling]: http://gatling.io/
[Node.js]: https://nodejs.org/
diff --git a/gulpfile.js b/gulpfile.js
index eab30985..5c12a44e 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -1,4 +1,4 @@
-// Generated on 2017-02-06 using generator-jhipster 4.0.2
+// Generated on 2017-02-13 using generator-jhipster 4.0.3
'use strict';
var gulp = require('gulp'),
diff --git a/package.json b/package.json
index 2c001ce8..2890d968 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,7 @@
"eslint-config-angular": "0.5.0",
"eslint-plugin-angular": "1.3.1",
"event-stream": "3.3.4",
- "generator-jhipster": "4.0.2",
+ "generator-jhipster": "4.0.3",
"gulp": "3.9.1",
"gulp-angular-filesort": "1.1.1",
"gulp-angular-templatecache": "2.0.0",
diff --git a/pom.xml b/pom.xml
index 703c5a7b..21611fff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,10 +31,10 @@
5.3.3.Final
5.2.4.Final
2.4.6
- 0.7.7.201606060606
+ 0.7.9
1.8
1.0.0
- 1.0.0
+ 1.0.1
3.6
2.0.0
3.5.3
@@ -697,15 +697,6 @@
,swagger
-
- shell
-
-
- org.springframework.boot
- spring-boot-starter-remote-shell
-
-
-
dev
diff --git a/src/main/java/io/github/jhipster/sample/config/CacheConfiguration.java b/src/main/java/io/github/jhipster/sample/config/CacheConfiguration.java
index f8976bb3..bc8066f3 100644
--- a/src/main/java/io/github/jhipster/sample/config/CacheConfiguration.java
+++ b/src/main/java/io/github/jhipster/sample/config/CacheConfiguration.java
@@ -1,25 +1,13 @@
package io.github.jhipster.sample.config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.*;
-import javax.cache.CacheManager;
-
@Configuration
@EnableCaching
@AutoConfigureAfter(value = { MetricsConfiguration.class })
@AutoConfigureBefore(value = { WebConfigurer.class, DatabaseConfiguration.class })
public class CacheConfiguration {
-
- private final Logger log = LoggerFactory.getLogger(CacheConfiguration.class);
-
- private CacheManager cacheManager;
-
- public CacheConfiguration(CacheManager cacheManager) {
- this.cacheManager = cacheManager;
- }
}
diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml
index e34fb5cc..54d861b0 100644
--- a/src/main/resources/config/application-dev.yml
+++ b/src/main/resources/config/application-dev.yml
@@ -46,7 +46,7 @@ spring:
hibernate.cache.region.factory_class: io.github.jhipster.config.jcache.SpringCacheRegionFactory
cache:
jcache:
- config: ehcache.xml
+ config: config/ehcache/ehcache-dev.xml
mail:
host: localhost
port: 25
@@ -70,9 +70,6 @@ server:
# ===================================================================
jhipster:
- cache: # Cache configuration
- ehcache: # Hibernate 2nd level cache
- max-bytes-local-heap: 16M
security:
remember-me:
# security key (this key should be unique for your application, and kept secret)
diff --git a/src/main/resources/config/application-prod.yml b/src/main/resources/config/application-prod.yml
index 5444f181..4a55e5d0 100644
--- a/src/main/resources/config/application-prod.yml
+++ b/src/main/resources/config/application-prod.yml
@@ -44,7 +44,7 @@ spring:
hibernate.cache.region.factory_class: io.github.jhipster.config.jcache.SpringCacheRegionFactory
cache:
jcache:
- config: ehcache.xml
+ config: config/ehcache/ehcache-dev.xml
mail:
host: localhost
port: 25
@@ -73,9 +73,6 @@ jhipster:
http:
cache: # Used by the CachingHttpHeadersFilter
timeToLiveInDays: 1461
- cache: # Cache configuration
- ehcache: # Hibernate 2nd level cache
- max-bytes-local-heap: 256M
security:
remember-me:
# security key (this key should be unique for your application, and kept secret)
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/config/ehcache/ehcache-dev.xml
similarity index 97%
rename from src/main/resources/ehcache.xml
rename to src/main/resources/config/ehcache/ehcache-dev.xml
index afcc51eb..4557ce74 100644
--- a/src/main/resources/ehcache.xml
+++ b/src/main/resources/config/ehcache/ehcache-dev.xml
@@ -7,7 +7,7 @@
3600
- 100
+ 100
diff --git a/src/main/resources/config/ehcache/ehcache-prod.xml b/src/main/resources/config/ehcache/ehcache-prod.xml
new file mode 100644
index 00000000..22ff46c9
--- /dev/null
+++ b/src/main/resources/config/ehcache/ehcache-prod.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ 3600
+
+ 1000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/app/components/util/date-util.service.js b/src/main/webapp/app/components/util/date-util.service.js
index be61292f..1489474d 100644
--- a/src/main/webapp/app/components/util/date-util.service.js
+++ b/src/main/webapp/app/components/util/date-util.service.js
@@ -7,18 +7,18 @@
DateUtils.$inject = ['$filter'];
- function DateUtils ($filter) {
+ function DateUtils($filter) {
var service = {
- convertDateTimeFromServer : convertDateTimeFromServer,
- convertLocalDateFromServer : convertLocalDateFromServer,
- convertLocalDateToServer : convertLocalDateToServer,
- dateformat : dateformat
+ convertDateTimeFromServer: convertDateTimeFromServer,
+ convertLocalDateFromServer: convertLocalDateFromServer,
+ convertLocalDateToServer: convertLocalDateToServer,
+ dateformat: dateformat
};
return service;
- function convertDateTimeFromServer (date) {
+ function convertDateTimeFromServer(date) {
if (date) {
return new Date(date);
} else {
@@ -26,7 +26,7 @@
}
}
- function convertLocalDateFromServer (date) {
+ function convertLocalDateFromServer(date) {
if (date) {
var dateString = date.split('-');
return new Date(dateString[0], dateString[1] - 1, dateString[2]);
@@ -34,7 +34,7 @@
return null;
}
- function convertLocalDateToServer (date) {
+ function convertLocalDateToServer(date) {
if (date) {
return $filter('date')(date, 'yyyy-MM-dd');
} else {
@@ -42,7 +42,7 @@
}
}
- function dateformat () {
+ function dateformat() {
return 'yyyy-MM-dd';
}
}
diff --git a/src/main/webapp/app/entities/bank-account/bank-account.controller.js b/src/main/webapp/app/entities/bank-account/bank-account.controller.js
index 62754a97..d5a45a10 100644
--- a/src/main/webapp/app/entities/bank-account/bank-account.controller.js
+++ b/src/main/webapp/app/entities/bank-account/bank-account.controller.js
@@ -5,9 +5,9 @@
.module('jhipsterSampleApplicationApp')
.controller('BankAccountController', BankAccountController);
- BankAccountController.$inject = ['$scope', '$state', 'BankAccount'];
+ BankAccountController.$inject = ['BankAccount'];
- function BankAccountController ($scope, $state, BankAccount) {
+ function BankAccountController(BankAccount) {
var vm = this;
vm.bankAccounts = [];
diff --git a/src/main/webapp/app/entities/label/label.controller.js b/src/main/webapp/app/entities/label/label.controller.js
index a446a08c..b563691d 100644
--- a/src/main/webapp/app/entities/label/label.controller.js
+++ b/src/main/webapp/app/entities/label/label.controller.js
@@ -5,9 +5,9 @@
.module('jhipsterSampleApplicationApp')
.controller('LabelController', LabelController);
- LabelController.$inject = ['$scope', '$state', 'Label'];
+ LabelController.$inject = ['Label'];
- function LabelController ($scope, $state, Label) {
+ function LabelController(Label) {
var vm = this;
vm.labels = [];
diff --git a/src/main/webapp/app/entities/operation/operation.controller.js b/src/main/webapp/app/entities/operation/operation.controller.js
index 72053f32..bf3ab2a2 100644
--- a/src/main/webapp/app/entities/operation/operation.controller.js
+++ b/src/main/webapp/app/entities/operation/operation.controller.js
@@ -5,9 +5,9 @@
.module('jhipsterSampleApplicationApp')
.controller('OperationController', OperationController);
- OperationController.$inject = ['$scope', '$state', 'Operation', 'ParseLinks', 'AlertService', 'paginationConstants'];
+ OperationController.$inject = ['Operation', 'ParseLinks', 'AlertService', 'paginationConstants'];
- function OperationController ($scope, $state, Operation, ParseLinks, AlertService, paginationConstants) {
+ function OperationController(Operation, ParseLinks, AlertService, paginationConstants) {
var vm = this;
vm.operations = [];
diff --git a/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.css b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.css
new file mode 100644
index 00000000..72408d1a
--- /dev/null
+++ b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.css
@@ -0,0 +1,110 @@
+/*!
+ * angular-loading-bar v0.9.0
+ * https://chieffancypants.github.io/angular-loading-bar
+ * Copyright (c) 2016 Wes Cruver
+ * License: MIT
+ */
+
+/* Make clicks pass-through */
+#loading-bar,
+#loading-bar-spinner {
+ pointer-events: none;
+ -webkit-pointer-events: none;
+ -webkit-transition: 350ms linear all;
+ -moz-transition: 350ms linear all;
+ -o-transition: 350ms linear all;
+ transition: 350ms linear all;
+}
+
+#loading-bar.ng-enter,
+#loading-bar.ng-leave.ng-leave-active,
+#loading-bar-spinner.ng-enter,
+#loading-bar-spinner.ng-leave.ng-leave-active {
+ opacity: 0;
+}
+
+#loading-bar.ng-enter.ng-enter-active,
+#loading-bar.ng-leave,
+#loading-bar-spinner.ng-enter.ng-enter-active,
+#loading-bar-spinner.ng-leave {
+ opacity: 1;
+}
+
+#loading-bar .bar {
+ -webkit-transition: width 350ms;
+ -moz-transition: width 350ms;
+ -o-transition: width 350ms;
+ transition: width 350ms;
+
+ background: #29d;
+ position: fixed;
+ z-index: 10002;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ border-bottom-right-radius: 1px;
+ border-top-right-radius: 1px;
+}
+
+/* Fancy blur effect */
+#loading-bar .peg {
+ position: absolute;
+ width: 70px;
+ right: 0;
+ top: 0;
+ height: 2px;
+ opacity: .45;
+ -moz-box-shadow: #29d 1px 0 6px 1px;
+ -ms-box-shadow: #29d 1px 0 6px 1px;
+ -webkit-box-shadow: #29d 1px 0 6px 1px;
+ box-shadow: #29d 1px 0 6px 1px;
+ -moz-border-radius: 100%;
+ -webkit-border-radius: 100%;
+ border-radius: 100%;
+}
+
+#loading-bar-spinner {
+ display: block;
+ position: fixed;
+ z-index: 10002;
+ top: 10px;
+ left: 10px;
+}
+
+#loading-bar-spinner .spinner-icon {
+ width: 14px;
+ height: 14px;
+
+ border: solid 2px transparent;
+ border-top-color: #29d;
+ border-left-color: #29d;
+ border-radius: 50%;
+
+ -webkit-animation: loading-bar-spinner 400ms linear infinite;
+ -moz-animation: loading-bar-spinner 400ms linear infinite;
+ -ms-animation: loading-bar-spinner 400ms linear infinite;
+ -o-animation: loading-bar-spinner 400ms linear infinite;
+ animation: loading-bar-spinner 400ms linear infinite;
+}
+
+@-webkit-keyframes loading-bar-spinner {
+ 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
+}
+@-moz-keyframes loading-bar-spinner {
+ 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }
+ 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }
+}
+@-o-keyframes loading-bar-spinner {
+ 0% { -o-transform: rotate(0deg); transform: rotate(0deg); }
+ 100% { -o-transform: rotate(360deg); transform: rotate(360deg); }
+}
+@-ms-keyframes loading-bar-spinner {
+ 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }
+ 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }
+}
+@keyframes loading-bar-spinner {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
diff --git a/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.js b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.js
new file mode 100644
index 00000000..358a3687
--- /dev/null
+++ b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.js
@@ -0,0 +1,341 @@
+/*!
+ * angular-loading-bar v0.9.0
+ * https://chieffancypants.github.io/angular-loading-bar
+ * Copyright (c) 2016 Wes Cruver
+ * License: MIT
+ */
+/*
+ * angular-loading-bar
+ *
+ * intercepts XHR requests and creates a loading bar.
+ * Based on the excellent nprogress work by rstacruz (more info in readme)
+ *
+ * (c) 2013 Wes Cruver
+ * License: MIT
+ */
+
+
+(function() {
+
+'use strict';
+
+// Alias the loading bar for various backwards compatibilities since the project has matured:
+angular.module('angular-loading-bar', ['cfp.loadingBarInterceptor']);
+angular.module('chieffancypants.loadingBar', ['cfp.loadingBarInterceptor']);
+
+
+/**
+ * loadingBarInterceptor service
+ *
+ * Registers itself as an Angular interceptor and listens for XHR requests.
+ */
+angular.module('cfp.loadingBarInterceptor', ['cfp.loadingBar'])
+ .config(['$httpProvider', function ($httpProvider) {
+
+ var interceptor = ['$q', '$cacheFactory', '$timeout', '$rootScope', '$log', 'cfpLoadingBar', function ($q, $cacheFactory, $timeout, $rootScope, $log, cfpLoadingBar) {
+
+ /**
+ * The total number of requests made
+ */
+ var reqsTotal = 0;
+
+ /**
+ * The number of requests completed (either successfully or not)
+ */
+ var reqsCompleted = 0;
+
+ /**
+ * The amount of time spent fetching before showing the loading bar
+ */
+ var latencyThreshold = cfpLoadingBar.latencyThreshold;
+
+ /**
+ * $timeout handle for latencyThreshold
+ */
+ var startTimeout;
+
+
+ /**
+ * calls cfpLoadingBar.complete() which removes the
+ * loading bar from the DOM.
+ */
+ function setComplete() {
+ $timeout.cancel(startTimeout);
+ cfpLoadingBar.complete();
+ reqsCompleted = 0;
+ reqsTotal = 0;
+ }
+
+ /**
+ * Determine if the response has already been cached
+ * @param {Object} config the config option from the request
+ * @return {Boolean} retrns true if cached, otherwise false
+ */
+ function isCached(config) {
+ var cache;
+ var defaultCache = $cacheFactory.get('$http');
+ var defaults = $httpProvider.defaults;
+
+ // Choose the proper cache source. Borrowed from angular: $http service
+ if ((config.cache || defaults.cache) && config.cache !== false &&
+ (config.method === 'GET' || config.method === 'JSONP')) {
+ cache = angular.isObject(config.cache) ? config.cache
+ : angular.isObject(defaults.cache) ? defaults.cache
+ : defaultCache;
+ }
+
+ var cached = cache !== undefined ?
+ cache.get(config.url) !== undefined : false;
+
+ if (config.cached !== undefined && cached !== config.cached) {
+ return config.cached;
+ }
+ config.cached = cached;
+ return cached;
+ }
+
+
+ return {
+ 'request': function(config) {
+ // Check to make sure this request hasn't already been cached and that
+ // the requester didn't explicitly ask us to ignore this request:
+ if (!config.ignoreLoadingBar && !isCached(config)) {
+ $rootScope.$broadcast('cfpLoadingBar:loading', {url: config.url});
+ if (reqsTotal === 0) {
+ startTimeout = $timeout(function() {
+ cfpLoadingBar.start();
+ }, latencyThreshold);
+ }
+ reqsTotal++;
+ cfpLoadingBar.set(reqsCompleted / reqsTotal);
+ }
+ return config;
+ },
+
+ 'response': function(response) {
+ if (!response || !response.config) {
+ $log.error('Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50');
+ return response;
+ }
+
+ if (!response.config.ignoreLoadingBar && !isCached(response.config)) {
+ reqsCompleted++;
+ $rootScope.$broadcast('cfpLoadingBar:loaded', {url: response.config.url, result: response});
+ if (reqsCompleted >= reqsTotal) {
+ setComplete();
+ } else {
+ cfpLoadingBar.set(reqsCompleted / reqsTotal);
+ }
+ }
+ return response;
+ },
+
+ 'responseError': function(rejection) {
+ if (!rejection || !rejection.config) {
+ $log.error('Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50');
+ return $q.reject(rejection);
+ }
+
+ if (!rejection.config.ignoreLoadingBar && !isCached(rejection.config)) {
+ reqsCompleted++;
+ $rootScope.$broadcast('cfpLoadingBar:loaded', {url: rejection.config.url, result: rejection});
+ if (reqsCompleted >= reqsTotal) {
+ setComplete();
+ } else {
+ cfpLoadingBar.set(reqsCompleted / reqsTotal);
+ }
+ }
+ return $q.reject(rejection);
+ }
+ };
+ }];
+
+ $httpProvider.interceptors.push(interceptor);
+ }]);
+
+
+/**
+ * Loading Bar
+ *
+ * This service handles adding and removing the actual element in the DOM.
+ * Generally, best practices for DOM manipulation is to take place in a
+ * directive, but because the element itself is injected in the DOM only upon
+ * XHR requests, and it's likely needed on every view, the best option is to
+ * use a service.
+ */
+angular.module('cfp.loadingBar', [])
+ .provider('cfpLoadingBar', function() {
+
+ this.autoIncrement = true;
+ this.includeSpinner = true;
+ this.includeBar = true;
+ this.latencyThreshold = 100;
+ this.startSize = 0.02;
+ this.parentSelector = 'body';
+ this.spinnerTemplate = '';
+ this.loadingBarTemplate = '';
+
+ this.$get = ['$injector', '$document', '$timeout', '$rootScope', function ($injector, $document, $timeout, $rootScope) {
+ var $animate;
+ var $parentSelector = this.parentSelector,
+ loadingBarContainer = angular.element(this.loadingBarTemplate),
+ loadingBar = loadingBarContainer.find('div').eq(0),
+ spinner = angular.element(this.spinnerTemplate);
+
+ var incTimeout,
+ completeTimeout,
+ started = false,
+ status = 0;
+
+ var autoIncrement = this.autoIncrement;
+ var includeSpinner = this.includeSpinner;
+ var includeBar = this.includeBar;
+ var startSize = this.startSize;
+
+ /**
+ * Inserts the loading bar element into the dom, and sets it to 2%
+ */
+ function _start() {
+ if (!$animate) {
+ $animate = $injector.get('$animate');
+ }
+
+ $timeout.cancel(completeTimeout);
+
+ // do not continually broadcast the started event:
+ if (started) {
+ return;
+ }
+
+ var document = $document[0];
+ var parent = document.querySelector ?
+ document.querySelector($parentSelector)
+ : $document.find($parentSelector)[0]
+ ;
+
+ if (! parent) {
+ parent = document.getElementsByTagName('body')[0];
+ }
+
+ var $parent = angular.element(parent);
+ var $after = parent.lastChild && angular.element(parent.lastChild);
+
+ $rootScope.$broadcast('cfpLoadingBar:started');
+ started = true;
+
+ if (includeBar) {
+ $animate.enter(loadingBarContainer, $parent, $after);
+ }
+
+ if (includeSpinner) {
+ $animate.enter(spinner, $parent, loadingBarContainer);
+ }
+
+ _set(startSize);
+ }
+
+ /**
+ * Set the loading bar's width to a certain percent.
+ *
+ * @param n any value between 0 and 1
+ */
+ function _set(n) {
+ if (!started) {
+ return;
+ }
+ var pct = (n * 100) + '%';
+ loadingBar.css('width', pct);
+ status = n;
+
+ // increment loadingbar to give the illusion that there is always
+ // progress but make sure to cancel the previous timeouts so we don't
+ // have multiple incs running at the same time.
+ if (autoIncrement) {
+ $timeout.cancel(incTimeout);
+ incTimeout = $timeout(function() {
+ _inc();
+ }, 250);
+ }
+ }
+
+ /**
+ * Increments the loading bar by a random amount
+ * but slows down as it progresses
+ */
+ function _inc() {
+ if (_status() >= 1) {
+ return;
+ }
+
+ var rnd = 0;
+
+ // TODO: do this mathmatically instead of through conditions
+
+ var stat = _status();
+ if (stat >= 0 && stat < 0.25) {
+ // Start out between 3 - 6% increments
+ rnd = (Math.random() * (5 - 3 + 1) + 3) / 100;
+ } else if (stat >= 0.25 && stat < 0.65) {
+ // increment between 0 - 3%
+ rnd = (Math.random() * 3) / 100;
+ } else if (stat >= 0.65 && stat < 0.9) {
+ // increment between 0 - 2%
+ rnd = (Math.random() * 2) / 100;
+ } else if (stat >= 0.9 && stat < 0.99) {
+ // finally, increment it .5 %
+ rnd = 0.005;
+ } else {
+ // after 99%, don't increment:
+ rnd = 0;
+ }
+
+ var pct = _status() + rnd;
+ _set(pct);
+ }
+
+ function _status() {
+ return status;
+ }
+
+ function _completeAnimation() {
+ status = 0;
+ started = false;
+ }
+
+ function _complete() {
+ if (!$animate) {
+ $animate = $injector.get('$animate');
+ }
+
+ $rootScope.$broadcast('cfpLoadingBar:completed');
+ _set(1);
+
+ $timeout.cancel(completeTimeout);
+
+ // Attempt to aggregate any start/complete calls within 500ms:
+ completeTimeout = $timeout(function() {
+ var promise = $animate.leave(loadingBarContainer, _completeAnimation);
+ if (promise && promise.then) {
+ promise.then(_completeAnimation);
+ }
+ $animate.leave(spinner);
+ }, 500);
+ }
+
+ return {
+ start : _start,
+ set : _set,
+ status : _status,
+ inc : _inc,
+ complete : _complete,
+ autoIncrement : this.autoIncrement,
+ includeSpinner : this.includeSpinner,
+ latencyThreshold : this.latencyThreshold,
+ parentSelector : this.parentSelector,
+ startSize : this.startSize
+ };
+
+
+ }]; //
+ }); // wtf javascript. srsly
+})(); //
diff --git a/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.css b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.css
new file mode 100644
index 00000000..0f9f1067
--- /dev/null
+++ b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.css
@@ -0,0 +1 @@
+#loading-bar,#loading-bar-spinner{pointer-events:none;-webkit-pointer-events:none;-webkit-transition:350ms linear all;-moz-transition:350ms linear all;-o-transition:350ms linear all;transition:350ms linear all}#loading-bar-spinner.ng-enter,#loading-bar-spinner.ng-leave.ng-leave-active,#loading-bar.ng-enter,#loading-bar.ng-leave.ng-leave-active{opacity:0}#loading-bar-spinner.ng-enter.ng-enter-active,#loading-bar-spinner.ng-leave,#loading-bar.ng-enter.ng-enter-active,#loading-bar.ng-leave{opacity:1}#loading-bar .bar{-webkit-transition:width 350ms;-moz-transition:width 350ms;-o-transition:width 350ms;transition:width 350ms;background:#29d;position:fixed;z-index:10002;top:0;left:0;width:100%;height:2px;border-bottom-right-radius:1px;border-top-right-radius:1px}#loading-bar .peg{position:absolute;width:70px;right:0;top:0;height:2px;opacity:.45;-moz-box-shadow:#29d 1px 0 6px 1px;-ms-box-shadow:#29d 1px 0 6px 1px;-webkit-box-shadow:#29d 1px 0 6px 1px;box-shadow:#29d 1px 0 6px 1px;-moz-border-radius:100%;-webkit-border-radius:100%;border-radius:100%}#loading-bar-spinner{display:block;position:fixed;z-index:10002;top:10px;left:10px}#loading-bar-spinner .spinner-icon{width:14px;height:14px;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:loading-bar-spinner 400ms linear infinite;-moz-animation:loading-bar-spinner 400ms linear infinite;-ms-animation:loading-bar-spinner 400ms linear infinite;-o-animation:loading-bar-spinner 400ms linear infinite;animation:loading-bar-spinner 400ms linear infinite}@-webkit-keyframes loading-bar-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes loading-bar-spinner{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes loading-bar-spinner{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes loading-bar-spinner{0%{-ms-transform:rotate(0);transform:rotate(0)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-bar-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
\ No newline at end of file
diff --git a/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.js b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.js
new file mode 100644
index 00000000..b6628f4a
--- /dev/null
+++ b/src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.js
@@ -0,0 +1,7 @@
+/*!
+ * angular-loading-bar v0.9.0
+ * https://chieffancypants.github.io/angular-loading-bar
+ * Copyright (c) 2016 Wes Cruver
+ * License: MIT
+ */
+!function(){"use strict";angular.module("angular-loading-bar",["cfp.loadingBarInterceptor"]),angular.module("chieffancypants.loadingBar",["cfp.loadingBarInterceptor"]),angular.module("cfp.loadingBarInterceptor",["cfp.loadingBar"]).config(["$httpProvider",function(a){var b=["$q","$cacheFactory","$timeout","$rootScope","$log","cfpLoadingBar",function(b,c,d,e,f,g){function h(){d.cancel(j),g.complete(),l=0,k=0}function i(b){var d,e=c.get("$http"),f=a.defaults;!b.cache&&!f.cache||b.cache===!1||"GET"!==b.method&&"JSONP"!==b.method||(d=angular.isObject(b.cache)?b.cache:angular.isObject(f.cache)?f.cache:e);var g=void 0!==d?void 0!==d.get(b.url):!1;return void 0!==b.cached&&g!==b.cached?b.cached:(b.cached=g,g)}var j,k=0,l=0,m=g.latencyThreshold;return{request:function(a){return a.ignoreLoadingBar||i(a)||(e.$broadcast("cfpLoadingBar:loading",{url:a.url}),0===k&&(j=d(function(){g.start()},m)),k++,g.set(l/k)),a},response:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),a):(f.error("Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),a)},responseError:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),b.reject(a)):(f.error("Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),b.reject(a))}}}];a.interceptors.push(b)}]),angular.module("cfp.loadingBar",[]).provider("cfpLoadingBar",function(){this.autoIncrement=!0,this.includeSpinner=!0,this.includeBar=!0,this.latencyThreshold=100,this.startSize=.02,this.parentSelector="body",this.spinnerTemplate='',this.loadingBarTemplate='',this.$get=["$injector","$document","$timeout","$rootScope",function(a,b,c,d){function e(){if(k||(k=a.get("$animate")),c.cancel(m),!r){var e=b[0],g=e.querySelector?e.querySelector(n):b.find(n)[0];g||(g=e.getElementsByTagName("body")[0]);var h=angular.element(g),i=g.lastChild&&angular.element(g.lastChild);d.$broadcast("cfpLoadingBar:started"),r=!0,v&&k.enter(o,h,i),u&&k.enter(q,h,o),f(w)}}function f(a){if(r){var b=100*a+"%";p.css("width",b),s=a,t&&(c.cancel(l),l=c(function(){g()},250))}}function g(){if(!(h()>=1)){var a=0,b=h();a=b>=0&&.25>b?(3*Math.random()+3)/100:b>=.25&&.65>b?3*Math.random()/100:b>=.65&&.9>b?2*Math.random()/100:b>=.9&&.99>b?.005:0;var c=h()+a;f(c)}}function h(){return s}function i(){s=0,r=!1}function j(){k||(k=a.get("$animate")),d.$broadcast("cfpLoadingBar:completed"),f(1),c.cancel(m),m=c(function(){var a=k.leave(o,i);a&&a.then&&a.then(i),k.leave(q)},500)}var k,l,m,n=this.parentSelector,o=angular.element(this.loadingBarTemplate),p=o.find("div").eq(0),q=angular.element(this.spinnerTemplate),r=!1,s=0,t=this.autoIncrement,u=this.includeSpinner,v=this.includeBar,w=this.startSize;return{start:e,set:f,status:h,inc:g,complete:j,autoIncrement:this.autoIncrement,includeSpinner:this.includeSpinner,latencyThreshold:this.latencyThreshold,parentSelector:this.parentSelector,startSize:this.startSize}}]})}();
\ No newline at end of file
diff --git a/src/main/webapp/bower_components/modernizr/test/node/lib/build.js b/src/main/webapp/bower_components/modernizr/test/node/lib/build.js
new file mode 100644
index 00000000..e50ddd87
--- /dev/null
+++ b/src/main/webapp/bower_components/modernizr/test/node/lib/build.js
@@ -0,0 +1,153 @@
+var root = require('find-parent-dir').sync(__dirname, 'package.json');
+var build = require(root + 'lib/build');
+var expect = require('expect.js');
+
+describe('cli/build', function() {
+
+ it('should build without error', function() {
+ expect(function() {build();}).to.not.throwError();
+ });
+
+ describe('custom builds', function(done) {
+
+ it('should build without errors when using a custom build', function() {
+ expect(function() {
+ build({'feature-detects': ['css/boxsizing']}, done);
+ }).to.not.throwError();
+ });
+
+ it('should include the requested options', function(done) {
+ build({'feature-detects': ['css/boxsizing']}, function(file) {
+ expect(file).to.contain('boxsizing');
+ done();
+ });
+ });
+
+ it('should exclude options that are not requested', function(done) {
+ build({'feature-detects': ['dom/classlist']}, function(file) {
+ expect(file).to.contain('classlist');
+ expect(file).to.not.contain('boxsizing');
+ done();
+ });
+ });
+
+ it('should strip out DOC comments when `uglify`ing', function(done) {
+ var config = {
+ minify: true,
+ 'feature-detects': ['css/boxsizing']
+ };
+
+ build(config, function(file) {
+ expect(file).to.not.contain('Box Sizing');
+ done();
+ });
+ });
+
+ it('should inject the proper classPath when configured', function(done) {
+ var prefix = 'TEST_PREFIX';
+ var config = {
+ classPrefix: prefix,
+ setClasses: true
+ };
+ var configRE = /_config:\s*?({[^}]*})/m;
+
+ build(config, function(file) {
+ var parsedConfig = file.match(configRE);
+ parsedConfig = JSON.parse(parsedConfig[1].replace(/'/g, '"'));
+ expect(parsedConfig.classPrefix).to.be(prefix);
+ done();
+ });
+ });
+
+ it('should inject the proper classPath when configured and minified', function(done) {
+ var prefix = 'TEST_PREFIX';
+ var config = {
+ classPrefix: prefix,
+ setClasses: true,
+ minify: true
+ };
+ var configRE = /_config:\s*?({[^}]*})/m;
+
+ build(config, function(file) {
+ var parsedConfig = file.match(configRE);
+ //use eval becuase the minified code creates non valid JSON.
+ parsedConfig = eval('(' + parsedConfig[1].replace(/'/g, '"') + ')');
+ expect(parsedConfig.classPrefix).to.be(prefix);
+ done();
+ });
+ });
+
+ describe('unminified', function() {
+ var output;
+
+ before(function(done) {
+ var config = {
+ 'feature-detects': ['css/boxsizing']
+ };
+
+ build(config, function(file) {
+ output = file;
+ done();
+ });
+ });
+
+ it('strips out the modernizr-init/build `define` section', function() {
+ var defineRe = /define\("modernizr-(init|build)"\)/m;
+ expect(defineRe.test(output)).to.be(false);
+ });
+
+ it('strips out the `define` section', function() {
+ var docRe = /define\(.*?\{/;
+ expect(docRe.test(output)).to.be(false);
+ });
+
+ it('strips out the `require` section', function() {
+ var requireRe = /require[^\{\r\n]+\{/;
+ expect(requireRe.test(output)).to.be(false);
+ });
+
+ it('replaces __VERSION__ ', function() {
+ expect(output).to.not.contain('__VERSION__');
+ });
+
+ });
+
+ describe('minified', function() {
+ var output;
+
+ before(function(done) {
+ var config = {
+ 'feature-detects': ['css/boxsizing'],
+ minify: true
+ };
+
+ build(config, function(file) {
+ output = file;
+ done();
+ });
+ });
+
+ it('strips out the modernizr-init/build `define` section', function() {
+ var defineRe = /define\("modernizr-(init|build)"\)/m;
+ expect(defineRe.test(output)).to.be(false);
+ });
+
+ it('strips out the `define` section', function() {
+ var docRe = /define\(.*?\{/;
+ expect(docRe.test(output)).to.be(false);
+ });
+
+ it('strips out the `require` section', function() {
+ var requireRe = /require[^\{\r\n]+\{/;
+ expect(requireRe.test(output)).to.be(false);
+ });
+
+ it('replaces __VERSION__ ', function() {
+ expect(output).to.not.contain('__VERSION__');
+ });
+
+ });
+
+ });
+
+});
diff --git a/src/main/webapp/bower_components/modernizr/test/node/lib/cli.js b/src/main/webapp/bower_components/modernizr/test/node/lib/cli.js
new file mode 100644
index 00000000..cea46367
--- /dev/null
+++ b/src/main/webapp/bower_components/modernizr/test/node/lib/cli.js
@@ -0,0 +1,21 @@
+var root = require('find-parent-dir').sync(__dirname, 'package.json');
+var expect = require('expect.js');
+var cp = require('child_process');
+var Modernizr = require(root + 'lib/cli');
+
+
+describe('cli', function() {
+
+ it('exposes a build function', function() {
+ expect(Modernizr.build).to.be.a('function');
+ });
+
+ it('exposes a metadata function', function() {
+ expect(Modernizr.metadata).to.be.a('function');
+ });
+
+ it('does not throw when being executed', function(done) {
+ cp.exec('node ' + root + '/bin/modernizr -f adownload', done);
+ });
+
+});
diff --git a/src/main/webapp/bower_components/modernizr/test/node/lib/metadata.js b/src/main/webapp/bower_components/modernizr/test/node/lib/metadata.js
new file mode 100644
index 00000000..5cb9cf65
--- /dev/null
+++ b/src/main/webapp/bower_components/modernizr/test/node/lib/metadata.js
@@ -0,0 +1,212 @@
+var root = require('find-parent-dir').sync(__dirname, 'package.json');
+var proxyquire = require('proxyquire').noPreserveCache();
+var metadata = require(root + 'lib/metadata');
+var expect = require('expect.js');
+var Joi = require('joi');
+
+describe('cli/metadata', function() {
+
+ it('should ignore .DS_STORE files', function(done) {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'file': {
+ 'walkSync': function(dir, cb) {
+ cb('/', [], ['.DS_Store']);
+ }
+ }
+ });
+
+ metadata(function(data) {
+ expect(data).to.be.an('array');
+ expect(data).to.have.length(0);
+ done();
+ });
+ });
+
+ it('should throw on malformed metadata', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'fs': {
+ 'readFileSync': function() {
+ return '/*! { !*/';
+ }
+ }
+ });
+
+ expect(metadata).to.throwException(/Error Parsing Metadata/);
+ });
+
+ it('should not throw when metadata is missing', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'fs': {
+ 'readFileSync': function() {
+ return 'sup dude';
+ }
+ }
+ });
+
+ expect(metadata).to.not.throwException(/Error Parsing Metadata/);
+ });
+
+ it('should throw on malformed deps', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'fs': {
+ 'readFileSync': function() {
+ return 'define([[],';
+ }
+ }
+ });
+
+ expect(metadata).to.throwException(/Couldn't parse dependencies/);
+ });
+
+ it('should throw if we can\'t find the define', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'fs': {
+ 'readFileSync': function() {
+ return 'defin([]),';
+ }
+ }
+ });
+
+ expect(metadata).to.throwException(/Couldn't find the define/);
+ });
+
+ it('should use amdPath as a fallback for name', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'file': {
+ 'walkSync': function(dir, cb) {
+ cb('/', [], ['fakeDetect.js']);
+ }
+ },
+ 'fs': {
+ 'readFileSync': function() {
+ return '/*! { "property": "fake"}!*/ define([],';
+ }
+ }
+ });
+ var result = metadata();
+
+ expect(result.name).to.equal(result.amdPath);
+ });
+
+ it('should throw if we can\'t find the define', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'fs': {
+ 'readFileSync': function() {
+ return '/*! { "polyfills": ["fake"]}!*/ define([],';
+ }
+ }
+ });
+
+ expect(metadata).to.throwException(/Polyfill not found/);
+ });
+
+ it('should throw if we can\'t find the define', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'fs': {
+ 'readFileSync': function() {
+ return '/*! { "property": "fake", "cssclass": "realFake"}!*/ define([],';
+ }
+ }
+ });
+
+ var firstResult = metadata()[0];
+
+ expect(firstResult.cssclass).to.be(null);
+ });
+
+ it('should rename `docs` to `doc` when found', function() {
+
+ var metadata = proxyquire(root + 'lib/metadata', {
+ 'fs': {
+ 'readFileSync': function() {
+ return '/*! { "docs": "originally docs" }!*/ define([],';
+ }
+ }
+ });
+
+ var firstResult = metadata()[0];
+
+ expect(firstResult.docs).to.be(undefined);
+ expect(firstResult.doc).to.match(/originally docs/);
+ });
+
+ it('returns a json blob when invoked without callback', function() {
+ expect(metadata()).to.be.an('array');
+ });
+
+ it('return nothing when given a callback', function() {
+ expect(metadata(function noop() {})).to.be(undefined);
+ });
+
+ it('pass the json blob when given a callback', function(done) {
+ metadata(function(data) {
+ expect(data).to.be.an('array');
+ done();
+ });
+ });
+
+ describe('returns an array of valid objects', function() {
+ var schema = Joi.object().keys({
+ amdPath: Joi.string().required(),
+ name: Joi.string().required(),
+ path: Joi.string().required(),
+ doc: Joi.alternatives().try(Joi.string(), null),
+
+ caniuse: Joi.alternatives().try(Joi.string(), null),
+
+ async: Joi.boolean(),
+
+ aliases: Joi.array().items(Joi.string()),
+ builderAliases: Joi.array().items(Joi.string()),
+ knownBugs: Joi.array().items(Joi.string()),
+ warnings: Joi.array().items(Joi.string()),
+ authors: Joi.array().items(Joi.string()),
+ tags: Joi.array().items(Joi.string()),
+ deps: Joi.array().items(Joi.string()),
+
+ notes: Joi.array().items(
+ Joi.object().keys({
+ name: Joi.string().required(),
+ href: Joi.string().required()
+ })
+ ).unique(),
+
+ cssclass: Joi.alternatives().try(
+ Joi.string().lowercase(),
+ Joi.array().items(Joi.string().lowercase())
+ ).required(),
+
+ property: Joi.alternatives().try(
+ Joi.string().lowercase(),
+ Joi.array().items(Joi.string().lowercase())
+ ).required(),
+
+ polyfills: Joi.array().items(
+ Joi.object().keys({
+ name: Joi.string().required(),
+ authors: Joi.array().items(Joi.string()),
+ notes: Joi.array().items(Joi.string()),
+ href: Joi.string().required(),
+ licenses: Joi.array().items(Joi.string()).required()
+ })
+ ).unique()
+ });
+
+ metadata(function(data) {
+ data.forEach(function(obj) {
+ var err = schema.validate(obj).error;
+ it('for ' + obj.name, function() {
+ expect(err).to.be(null);
+ });
+ });
+ });
+ });
+});
diff --git a/src/main/webapp/bower_components/modernizr/test/node/lib/options.js b/src/main/webapp/bower_components/modernizr/test/node/lib/options.js
new file mode 100644
index 00000000..ecfe0f03
--- /dev/null
+++ b/src/main/webapp/bower_components/modernizr/test/node/lib/options.js
@@ -0,0 +1,34 @@
+var root = require('find-parent-dir').sync(__dirname, 'package.json');
+var options = require(root + 'lib/options');
+var expect = require('expect.js');
+var Joi = require('joi');
+
+var schema = Joi.array().items(
+ Joi.object().keys({
+ name: Joi.string(),
+ property: Joi.string()
+ })
+);
+
+
+describe('cli/options', function() {
+ this.timeout(20000);
+
+ it('should return an array of objects in a callback', function(done) {
+ options(function(opts) {
+ var err = schema.validate(opts).error;
+ expect(err).to.be(null);
+ done(err);
+ });
+ });
+
+ it('should return the array of objects immediately after the first run', function() {
+ var err = schema.validate(options()).error;
+ expect(err).to.be(null);
+ });
+
+ it('should return all jsdoc info when the second arg is true', function() {
+ expect(options(null, true) !== options(null)).to.be(true);
+ expect(options(null, true)[0].description).to.not.be(undefined);
+ });
+});
diff --git a/src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.js b/src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.js
new file mode 100644
index 00000000..be1b3a61
--- /dev/null
+++ b/src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.js
@@ -0,0 +1,189 @@
+/* ng-infinite-scroll - v1.3.0 - 2016-06-30 */
+angular.module('infinite-scroll', []).value('THROTTLE_MILLISECONDS', null).directive('infiniteScroll', [
+ '$rootScope', '$window', '$interval', 'THROTTLE_MILLISECONDS', function($rootScope, $window, $interval, THROTTLE_MILLISECONDS) {
+ return {
+ scope: {
+ infiniteScroll: '&',
+ infiniteScrollContainer: '=',
+ infiniteScrollDistance: '=',
+ infiniteScrollDisabled: '=',
+ infiniteScrollUseDocumentBottom: '=',
+ infiniteScrollListenForEvent: '@'
+ },
+ link: function(scope, elem, attrs) {
+ var changeContainer, checkInterval, checkWhenEnabled, container, handleInfiniteScrollContainer, handleInfiniteScrollDisabled, handleInfiniteScrollDistance, handleInfiniteScrollUseDocumentBottom, handler, height, immediateCheck, offsetTop, pageYOffset, scrollDistance, scrollEnabled, throttle, unregisterEventListener, useDocumentBottom, windowElement;
+ windowElement = angular.element($window);
+ scrollDistance = null;
+ scrollEnabled = null;
+ checkWhenEnabled = null;
+ container = null;
+ immediateCheck = true;
+ useDocumentBottom = false;
+ unregisterEventListener = null;
+ checkInterval = false;
+ height = function(elem) {
+ elem = elem[0] || elem;
+ if (isNaN(elem.offsetHeight)) {
+ return elem.document.documentElement.clientHeight;
+ } else {
+ return elem.offsetHeight;
+ }
+ };
+ offsetTop = function(elem) {
+ if (!elem[0].getBoundingClientRect || elem.css('none')) {
+ return;
+ }
+ return elem[0].getBoundingClientRect().top + pageYOffset(elem);
+ };
+ pageYOffset = function(elem) {
+ elem = elem[0] || elem;
+ if (isNaN(window.pageYOffset)) {
+ return elem.document.documentElement.scrollTop;
+ } else {
+ return elem.ownerDocument.defaultView.pageYOffset;
+ }
+ };
+ handler = function() {
+ var containerBottom, containerTopOffset, elementBottom, remaining, shouldScroll;
+ if (container === windowElement) {
+ containerBottom = height(container) + pageYOffset(container[0].document.documentElement);
+ elementBottom = offsetTop(elem) + height(elem);
+ } else {
+ containerBottom = height(container);
+ containerTopOffset = 0;
+ if (offsetTop(container) !== void 0) {
+ containerTopOffset = offsetTop(container);
+ }
+ elementBottom = offsetTop(elem) - containerTopOffset + height(elem);
+ }
+ if (useDocumentBottom) {
+ elementBottom = height((elem[0].ownerDocument || elem[0].document).documentElement);
+ }
+ remaining = elementBottom - containerBottom;
+ shouldScroll = remaining <= height(container) * scrollDistance + 1;
+ if (shouldScroll) {
+ checkWhenEnabled = true;
+ if (scrollEnabled) {
+ if (scope.$$phase || $rootScope.$$phase) {
+ return scope.infiniteScroll();
+ } else {
+ return scope.$apply(scope.infiniteScroll);
+ }
+ }
+ } else {
+ if (checkInterval) {
+ $interval.cancel(checkInterval);
+ }
+ return checkWhenEnabled = false;
+ }
+ };
+ throttle = function(func, wait) {
+ var later, previous, timeout;
+ timeout = null;
+ previous = 0;
+ later = function() {
+ previous = new Date().getTime();
+ $interval.cancel(timeout);
+ timeout = null;
+ return func.call();
+ };
+ return function() {
+ var now, remaining;
+ now = new Date().getTime();
+ remaining = wait - (now - previous);
+ if (remaining <= 0) {
+ $interval.cancel(timeout);
+ timeout = null;
+ previous = now;
+ return func.call();
+ } else {
+ if (!timeout) {
+ return timeout = $interval(later, remaining, 1);
+ }
+ }
+ };
+ };
+ if (THROTTLE_MILLISECONDS != null) {
+ handler = throttle(handler, THROTTLE_MILLISECONDS);
+ }
+ scope.$on('$destroy', function() {
+ container.unbind('scroll', handler);
+ if (unregisterEventListener != null) {
+ unregisterEventListener();
+ unregisterEventListener = null;
+ }
+ if (checkInterval) {
+ return $interval.cancel(checkInterval);
+ }
+ });
+ handleInfiniteScrollDistance = function(v) {
+ return scrollDistance = parseFloat(v) || 0;
+ };
+ scope.$watch('infiniteScrollDistance', handleInfiniteScrollDistance);
+ handleInfiniteScrollDistance(scope.infiniteScrollDistance);
+ handleInfiniteScrollDisabled = function(v) {
+ scrollEnabled = !v;
+ if (scrollEnabled && checkWhenEnabled) {
+ checkWhenEnabled = false;
+ return handler();
+ }
+ };
+ scope.$watch('infiniteScrollDisabled', handleInfiniteScrollDisabled);
+ handleInfiniteScrollDisabled(scope.infiniteScrollDisabled);
+ handleInfiniteScrollUseDocumentBottom = function(v) {
+ return useDocumentBottom = v;
+ };
+ scope.$watch('infiniteScrollUseDocumentBottom', handleInfiniteScrollUseDocumentBottom);
+ handleInfiniteScrollUseDocumentBottom(scope.infiniteScrollUseDocumentBottom);
+ changeContainer = function(newContainer) {
+ if (container != null) {
+ container.unbind('scroll', handler);
+ }
+ container = newContainer;
+ if (newContainer != null) {
+ return container.bind('scroll', handler);
+ }
+ };
+ changeContainer(windowElement);
+ if (scope.infiniteScrollListenForEvent) {
+ unregisterEventListener = $rootScope.$on(scope.infiniteScrollListenForEvent, handler);
+ }
+ handleInfiniteScrollContainer = function(newContainer) {
+ if ((newContainer == null) || newContainer.length === 0) {
+ return;
+ }
+ if (newContainer.nodeType && newContainer.nodeType === 1) {
+ newContainer = angular.element(newContainer);
+ } else if (typeof newContainer.append === 'function') {
+ newContainer = angular.element(newContainer[newContainer.length - 1]);
+ } else if (typeof newContainer === 'string') {
+ newContainer = angular.element(document.querySelector(newContainer));
+ }
+ if (newContainer != null) {
+ return changeContainer(newContainer);
+ } else {
+ throw new Error("invalid infinite-scroll-container attribute.");
+ }
+ };
+ scope.$watch('infiniteScrollContainer', handleInfiniteScrollContainer);
+ handleInfiniteScrollContainer(scope.infiniteScrollContainer || []);
+ if (attrs.infiniteScrollParent != null) {
+ changeContainer(angular.element(elem.parent()));
+ }
+ if (attrs.infiniteScrollImmediateCheck != null) {
+ immediateCheck = scope.$eval(attrs.infiniteScrollImmediateCheck);
+ }
+ return checkInterval = $interval((function() {
+ if (immediateCheck) {
+ handler();
+ }
+ return $interval.cancel(checkInterval);
+ }));
+ }
+ };
+ }
+]);
+
+if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports) {
+ module.exports = 'infinite-scroll';
+}
diff --git a/src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.min.js b/src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.min.js
new file mode 100644
index 00000000..885c0300
--- /dev/null
+++ b/src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.min.js
@@ -0,0 +1,2 @@
+/* ng-infinite-scroll - v1.3.0 - 2016-06-30 */
+angular.module("infinite-scroll",[]).value("THROTTLE_MILLISECONDS",null).directive("infiniteScroll",["$rootScope","$window","$interval","THROTTLE_MILLISECONDS",function(a,b,c,d){return{scope:{infiniteScroll:"&",infiniteScrollContainer:"=",infiniteScrollDistance:"=",infiniteScrollDisabled:"=",infiniteScrollUseDocumentBottom:"=",infiniteScrollListenForEvent:"@"},link:function(e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;return z=angular.element(b),u=null,v=null,j=null,k=null,r=!0,y=!1,x=null,i=!1,q=function(a){return a=a[0]||a,isNaN(a.offsetHeight)?a.document.documentElement.clientHeight:a.offsetHeight},s=function(a){if(a[0].getBoundingClientRect&&!a.css("none"))return a[0].getBoundingClientRect().top+t(a)},t=function(a){return a=a[0]||a,isNaN(window.pageYOffset)?a.document.documentElement.scrollTop:a.ownerDocument.defaultView.pageYOffset},p=function(){var b,d,g,h,l;return k===z?(b=q(k)+t(k[0].document.documentElement),g=s(f)+q(f)):(b=q(k),d=0,void 0!==s(k)&&(d=s(k)),g=s(f)-d+q(f)),y&&(g=q((f[0].ownerDocument||f[0].document).documentElement)),h=g-b,l=h<=q(k)*u+1,l?(j=!0,v?e.$$phase||a.$$phase?e.infiniteScroll():e.$apply(e.infiniteScroll):void 0):(i&&c.cancel(i),j=!1)},w=function(a,b){var d,e,f;return f=null,e=0,d=function(){return e=(new Date).getTime(),c.cancel(f),f=null,a.call()},function(){var g,h;return g=(new Date).getTime(),h=b-(g-e),h<=0?(c.cancel(f),f=null,e=g,a.call()):f?void 0:f=c(d,h,1)}},null!=d&&(p=w(p,d)),e.$on("$destroy",function(){if(k.unbind("scroll",p),null!=x&&(x(),x=null),i)return c.cancel(i)}),n=function(a){return u=parseFloat(a)||0},e.$watch("infiniteScrollDistance",n),n(e.infiniteScrollDistance),m=function(a){if(v=!a,v&&j)return j=!1,p()},e.$watch("infiniteScrollDisabled",m),m(e.infiniteScrollDisabled),o=function(a){return y=a},e.$watch("infiniteScrollUseDocumentBottom",o),o(e.infiniteScrollUseDocumentBottom),h=function(a){if(null!=k&&k.unbind("scroll",p),k=a,null!=a)return k.bind("scroll",p)},h(z),e.infiniteScrollListenForEvent&&(x=a.$on(e.infiniteScrollListenForEvent,p)),l=function(a){if(null!=a&&0!==a.length){if(a.nodeType&&1===a.nodeType?a=angular.element(a):"function"==typeof a.append?a=angular.element(a[a.length-1]):"string"==typeof a&&(a=angular.element(document.querySelector(a))),null!=a)return h(a);throw new Error("invalid infinite-scroll-container attribute.")}},e.$watch("infiniteScrollContainer",l),l(e.infiniteScrollContainer||[]),null!=g.infiniteScrollParent&&h(angular.element(f.parent())),null!=g.infiniteScrollImmediateCheck&&(r=e.$eval(g.infiniteScrollImmediateCheck)),i=c(function(){return r&&p(),c.cancel(i)})}}}]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="infinite-scroll");
\ No newline at end of file
diff --git a/src/main/webapp/i18n/en/bankAccount.json b/src/main/webapp/i18n/en/bankAccount.json
index 971feaad..bf9d9e16 100644
--- a/src/main/webapp/i18n/en/bankAccount.json
+++ b/src/main/webapp/i18n/en/bankAccount.json
@@ -4,8 +4,7 @@
"home": {
"title": "Bank Accounts",
"createLabel": "Create a new Bank Account",
- "createOrEditLabel": "Create or edit a Bank Account",
- "search": "Search for Bank Account"
+ "createOrEditLabel": "Create or edit a Bank Account"
},
"created": "A new Bank Account is created with identifier {{ param }}",
"updated": "A Bank Account is updated with identifier {{ param }}",
diff --git a/src/main/webapp/i18n/en/global.json b/src/main/webapp/i18n/en/global.json
index 46f50d01..2b279c36 100644
--- a/src/main/webapp/i18n/en/global.json
+++ b/src/main/webapp/i18n/en/global.json
@@ -114,6 +114,7 @@
}
},
"error": {
+ "internalServerError": "Internal server error",
"server.not.reachable": "Server not reachable",
"url.not.found": "Not found",
"NotNull": "Field {{ fieldName }} cannot be empty!",
diff --git a/src/main/webapp/i18n/en/label.json b/src/main/webapp/i18n/en/label.json
index 326e271b..393ba200 100644
--- a/src/main/webapp/i18n/en/label.json
+++ b/src/main/webapp/i18n/en/label.json
@@ -4,8 +4,7 @@
"home": {
"title": "Labels",
"createLabel": "Create a new Label",
- "createOrEditLabel": "Create or edit a Label",
- "search": "Search for Label"
+ "createOrEditLabel": "Create or edit a Label"
},
"created": "A new Label is created with identifier {{ param }}",
"updated": "A Label is updated with identifier {{ param }}",
diff --git a/src/main/webapp/i18n/en/operation.json b/src/main/webapp/i18n/en/operation.json
index a278dfaf..531befb3 100644
--- a/src/main/webapp/i18n/en/operation.json
+++ b/src/main/webapp/i18n/en/operation.json
@@ -4,8 +4,7 @@
"home": {
"title": "Operations",
"createLabel": "Create a new Operation",
- "createOrEditLabel": "Create or edit a Operation",
- "search": "Search for Operation"
+ "createOrEditLabel": "Create or edit a Operation"
},
"created": "A new Operation is created with identifier {{ param }}",
"updated": "A Operation is updated with identifier {{ param }}",
diff --git a/src/test/java/io/github/jhipster/sample/web/rest/BankAccountResourceIntTest.java b/src/test/java/io/github/jhipster/sample/web/rest/BankAccountResourceIntTest.java
index b2dd52de..24f155d6 100644
--- a/src/test/java/io/github/jhipster/sample/web/rest/BankAccountResourceIntTest.java
+++ b/src/test/java/io/github/jhipster/sample/web/rest/BankAccountResourceIntTest.java
@@ -4,6 +4,7 @@ import io.github.jhipster.sample.JhipsterSampleApplicationApp;
import io.github.jhipster.sample.domain.BankAccount;
import io.github.jhipster.sample.repository.BankAccountRepository;
+import io.github.jhipster.sample.web.rest.errors.ExceptionTranslator;
import org.junit.Before;
import org.junit.Test;
@@ -52,6 +53,9 @@ public class BankAccountResourceIntTest {
@Autowired
private PageableHandlerMethodArgumentResolver pageableArgumentResolver;
+ @Autowired
+ private ExceptionTranslator exceptionTranslator;
+
@Autowired
private EntityManager em;
@@ -65,6 +69,7 @@ public class BankAccountResourceIntTest {
BankAccountResource bankAccountResource = new BankAccountResource(bankAccountRepository);
this.restBankAccountMockMvc = MockMvcBuilders.standaloneSetup(bankAccountResource)
.setCustomArgumentResolvers(pageableArgumentResolver)
+ .setControllerAdvice(exceptionTranslator)
.setMessageConverters(jacksonMessageConverter).build();
}
diff --git a/src/test/java/io/github/jhipster/sample/web/rest/LabelResourceIntTest.java b/src/test/java/io/github/jhipster/sample/web/rest/LabelResourceIntTest.java
index 62879015..5f783b4d 100644
--- a/src/test/java/io/github/jhipster/sample/web/rest/LabelResourceIntTest.java
+++ b/src/test/java/io/github/jhipster/sample/web/rest/LabelResourceIntTest.java
@@ -4,6 +4,7 @@ import io.github.jhipster.sample.JhipsterSampleApplicationApp;
import io.github.jhipster.sample.domain.Label;
import io.github.jhipster.sample.repository.LabelRepository;
+import io.github.jhipster.sample.web.rest.errors.ExceptionTranslator;
import org.junit.Before;
import org.junit.Test;
@@ -48,6 +49,9 @@ public class LabelResourceIntTest {
@Autowired
private PageableHandlerMethodArgumentResolver pageableArgumentResolver;
+ @Autowired
+ private ExceptionTranslator exceptionTranslator;
+
@Autowired
private EntityManager em;
@@ -61,6 +65,7 @@ public class LabelResourceIntTest {
LabelResource labelResource = new LabelResource(labelRepository);
this.restLabelMockMvc = MockMvcBuilders.standaloneSetup(labelResource)
.setCustomArgumentResolvers(pageableArgumentResolver)
+ .setControllerAdvice(exceptionTranslator)
.setMessageConverters(jacksonMessageConverter).build();
}
diff --git a/src/test/java/io/github/jhipster/sample/web/rest/OperationResourceIntTest.java b/src/test/java/io/github/jhipster/sample/web/rest/OperationResourceIntTest.java
index c78e9a71..34ca7b06 100644
--- a/src/test/java/io/github/jhipster/sample/web/rest/OperationResourceIntTest.java
+++ b/src/test/java/io/github/jhipster/sample/web/rest/OperationResourceIntTest.java
@@ -4,6 +4,7 @@ import io.github.jhipster.sample.JhipsterSampleApplicationApp;
import io.github.jhipster.sample.domain.Operation;
import io.github.jhipster.sample.repository.OperationRepository;
+import io.github.jhipster.sample.web.rest.errors.ExceptionTranslator;
import org.junit.Before;
import org.junit.Test;
@@ -60,6 +61,9 @@ public class OperationResourceIntTest {
@Autowired
private PageableHandlerMethodArgumentResolver pageableArgumentResolver;
+ @Autowired
+ private ExceptionTranslator exceptionTranslator;
+
@Autowired
private EntityManager em;
@@ -73,6 +77,7 @@ public class OperationResourceIntTest {
OperationResource operationResource = new OperationResource(operationRepository);
this.restOperationMockMvc = MockMvcBuilders.standaloneSetup(operationResource)
.setCustomArgumentResolvers(pageableArgumentResolver)
+ .setControllerAdvice(exceptionTranslator)
.setMessageConverters(jacksonMessageConverter).build();
}
diff --git a/src/test/resources/config/application.yml b/src/test/resources/config/application.yml
index c2a0713f..509f4e23 100644
--- a/src/test/resources/config/application.yml
+++ b/src/test/resources/config/application.yml
@@ -41,6 +41,9 @@ spring:
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: true
hibernate.hbm2ddl.auto: validate
+ cache:
+ jcache:
+ config: config/ehcache/ehcache-dev.xml
mail:
host: localhost
mvc:
diff --git a/src/test/resources/ehcache.xml b/src/test/resources/config/ehcache/ehcache-test.xml
similarity index 95%
rename from src/test/resources/ehcache.xml
rename to src/test/resources/config/ehcache/ehcache-test.xml
index faa6b82a..dda35aed 100644
--- a/src/test/resources/ehcache.xml
+++ b/src/test/resources/config/ehcache/ehcache-test.xml
@@ -7,7 +7,7 @@
3600
- 100
+ 100
diff --git a/yarn.lock b/yarn.lock
index d25fdcd0..a5665854 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2248,9 +2248,9 @@ generate-object-property@^1.1.0:
dependencies:
is-property "^1.0.0"
-generator-jhipster@4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/generator-jhipster/-/generator-jhipster-4.0.2.tgz#9dc2a4cf83ace133a2e25e877e963e92b8cedcfa"
+generator-jhipster@4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/generator-jhipster/-/generator-jhipster-4.0.3.tgz#acf3d1a776f3eea06c8396c51fd582ab6fbcb5f6"
dependencies:
chalk "1.1.3"
cheerio "0.22.0"