automatic project update
This commit is contained in:
parent
5b284c72d2
commit
603bc077be
9
.gitignore
vendored
9
.gitignore
vendored
@ -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/
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
"en"
|
||||
],
|
||||
"serverPort": 8080,
|
||||
"jhipsterVersion": "4.0.2",
|
||||
"jhipsterVersion": "4.0.3",
|
||||
"enableSocialSignIn": false,
|
||||
"useSass": false,
|
||||
"jhiPrefix": "jhi",
|
||||
|
15
README.md
15
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/
|
||||
|
@ -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'),
|
||||
|
@ -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",
|
||||
|
13
pom.xml
13
pom.xml
@ -31,10 +31,10 @@
|
||||
<hibernate-validator.version>5.3.3.Final</hibernate-validator.version>
|
||||
<hibernate.version>5.2.4.Final</hibernate.version>
|
||||
<hikaricp.version>2.4.6</hikaricp.version>
|
||||
<jacoco-maven-plugin.version>0.7.7.201606060606</jacoco-maven-plugin.version>
|
||||
<jacoco-maven-plugin.version>0.7.9</jacoco-maven-plugin.version>
|
||||
<java.version>1.8</java.version>
|
||||
<jcache.version>1.0.0</jcache.version>
|
||||
<jhipster.server.version>1.0.0</jhipster.server.version>
|
||||
<jhipster.server.version>1.0.1</jhipster.server.version>
|
||||
<liquibase-hibernate5.version>3.6</liquibase-hibernate5.version>
|
||||
<liquibase-slf4j.version>2.0.0</liquibase-slf4j.version>
|
||||
<liquibase.version>3.5.3</liquibase.version>
|
||||
@ -697,15 +697,6 @@
|
||||
<profile.swagger>,swagger</profile.swagger>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>shell</id>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-remote-shell</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>dev</id>
|
||||
<activation>
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -7,7 +7,7 @@
|
||||
<expiry>
|
||||
<ttl unit="seconds">3600</ttl>
|
||||
</expiry>
|
||||
<heap>100</heap>
|
||||
<heap unit="entries">100</heap>
|
||||
</cache-template>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.User" uses-template="simple"/>
|
36
src/main/resources/config/ehcache/ehcache-prod.xml
Normal file
36
src/main/resources/config/ehcache/ehcache-prod.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns='http://www.ehcache.org/v3'
|
||||
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd">
|
||||
|
||||
<cache-template name="simple">
|
||||
<expiry>
|
||||
<ttl unit="seconds">3600</ttl>
|
||||
</expiry>
|
||||
<heap unit="entries">1000</heap>
|
||||
</cache-template>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.User" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.Authority" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.User.authorities" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.PersistentToken" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.User.persistentTokens" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.BankAccount" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.BankAccount.operations" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.Label" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.Label.operations" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.Operation" uses-template="simple"/>
|
||||
|
||||
<cache alias="io.github.jhipster.sample.domain.Operation.labels" uses-template="simple"/>
|
||||
|
||||
<!-- jhipster-needle-ehcache-add-entry -->
|
||||
</config>
|
@ -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';
|
||||
}
|
||||
}
|
||||
|
@ -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 = [];
|
||||
|
@ -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 = [];
|
||||
|
@ -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 = [];
|
||||
|
110
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.css
vendored
Normal file
110
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.css
vendored
Normal file
@ -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); }
|
||||
}
|
341
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.js
vendored
Normal file
341
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.js
vendored
Normal file
@ -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 = '<div id="loading-bar-spinner"><div class="spinner-icon"></div></div>';
|
||||
this.loadingBarTemplate = '<div id="loading-bar"><div class="bar"><div class="peg"></div></div></div>';
|
||||
|
||||
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
|
||||
})(); //
|
1
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.css
vendored
Normal file
1
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.css
vendored
Normal file
@ -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)}}
|
7
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.js
vendored
Normal file
7
src/main/webapp/bower_components/angular-loading-bar/build/loading-bar.min.js
vendored
Normal file
@ -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='<div id="loading-bar-spinner"><div class="spinner-icon"></div></div>',this.loadingBarTemplate='<div id="loading-bar"><div class="bar"><div class="peg"></div></div></div>',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}}]})}();
|
153
src/main/webapp/bower_components/modernizr/test/node/lib/build.js
vendored
Normal file
153
src/main/webapp/bower_components/modernizr/test/node/lib/build.js
vendored
Normal file
@ -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__');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
21
src/main/webapp/bower_components/modernizr/test/node/lib/cli.js
vendored
Normal file
21
src/main/webapp/bower_components/modernizr/test/node/lib/cli.js
vendored
Normal file
@ -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);
|
||||
});
|
||||
|
||||
});
|
212
src/main/webapp/bower_components/modernizr/test/node/lib/metadata.js
vendored
Normal file
212
src/main/webapp/bower_components/modernizr/test/node/lib/metadata.js
vendored
Normal file
@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
34
src/main/webapp/bower_components/modernizr/test/node/lib/options.js
vendored
Normal file
34
src/main/webapp/bower_components/modernizr/test/node/lib/options.js
vendored
Normal file
@ -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);
|
||||
});
|
||||
});
|
189
src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.js
vendored
Normal file
189
src/main/webapp/bower_components/ngInfiniteScroll/build/ng-infinite-scroll.js
vendored
Normal file
@ -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 |