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"