diff --git a/Gruntfile.js b/Gruntfile.js index d23ddf1..e6b2687 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -12,6 +12,37 @@ module.exports = function(grunt) { ' */\n', // Task configuration. + sass: { + options: { + sourceMap: false + }, + dist: { + files: { + 'build/loading-bar.css': 'src/loading-bar.scss' + } + } + }, + + postcss: { + options: { + map: false, + + processors: [ + require('autoprefixer')({browsers: 'last 2 versions'}), // add vendor prefixes + ] + }, + dist: { + src: 'build/loading-bar.css' + } + }, + + sasslint: { + options: { + configFile: 'sass-lint.yml' + }, + target: ['src/loading-bar.scss'] + }, + uglify: { options: { banner: '<%= banner %>', @@ -29,7 +60,7 @@ module.exports = function(grunt) { report: 'gzip' }, minify: { - src: 'src/loading-bar.css', + src: 'build/loading-bar.css', dest: 'build/loading-bar.min.css' } }, @@ -82,7 +113,7 @@ module.exports = function(grunt) { banner: '<%= banner %>' }, files: { - 'build/loading-bar.css': 'src/loading-bar.css', + // 'build/loading-bar.css': 'src/loading-bar.css', 'build/loading-bar.js': 'src/loading-bar.js', } } @@ -94,8 +125,11 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-karma'); + grunt.loadNpmTasks('grunt-sass'); + grunt.loadNpmTasks('grunt-postcss'); + grunt.loadNpmTasks('grunt-sass-lint'); - grunt.registerTask('default', ['jshint', 'karma:unit', 'karma:unit13', 'karma:unit14', 'uglify', 'cssmin', 'concat:build']); + grunt.registerTask('default', ['jshint', 'sasslint', 'karma:unit', 'karma:unit13', 'karma:unit14', 'uglify', 'sass', 'postcss', 'cssmin', 'concat:build']); grunt.registerTask('test', ['karma:watch']); grunt.registerTask('build', ['default']); diff --git a/build/loading-bar.css b/build/loading-bar.css index 72408d1..064a31d 100644 --- a/build/loading-bar.css +++ b/build/loading-bar.css @@ -1,110 +1,77 @@ -/*! - * 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 { +#loading-bar { 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%; -} + transition: 350ms linear all; } + #loading-bar.ng-enter { + opacity: 0; } + #loading-bar.ng-enter.ng-enter-active { + opacity: 1; } + #loading-bar.ng-leave { + opacity: 1; } + #loading-bar.ng-leave.ng-leave-active { + opacity: 0; } + #loading-bar .bar { + background: #29d; + border-bottom-right-radius: 1px; + border-top-right-radius: 1px; + height: 2px; + left: 0; + position: fixed; + top: 0; + -webkit-transition: width 350ms; + transition: width 350ms; + width: 100%; + z-index: 10002; } + #loading-bar .peg { + border-radius: 100%; + -webkit-box-shadow: #29d 1px 0 6px 1px; + box-shadow: #29d 1px 0 6px 1px; + height: 2px; + opacity: .45; + position: absolute; + right: 0; + top: 0; + width: 70px; } #loading-bar-spinner { display: block; + left: 10px; + pointer-events: none; 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-transition: 350ms linear all; + transition: 350ms linear all; + z-index: 10002; } + #loading-bar-spinner.ng-enter { + opacity: 0; } + #loading-bar-spinner.ng-enter.ng-enter-active { + opacity: 1; } + #loading-bar-spinner.ng-leave { + opacity: 1; } + #loading-bar-spinner.ng-leave.ng-leave-active { + opacity: 0; } + #loading-bar-spinner .spinner-icon { + -webkit-animation: loading-bar-spinner 400ms linear infinite; + animation: loading-bar-spinner 400ms linear infinite; + border: solid 2px transparent; + border-left-color: #29d; + border-radius: 50%; + border-top-color: #29d; + height: 14px; + width: 14px; } @-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); } -} + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + @keyframes loading-bar-spinner { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } diff --git a/build/loading-bar.js b/build/loading-bar.js index 01630c0..59b89f1 100644 --- a/build/loading-bar.js +++ b/build/loading-bar.js @@ -1,7 +1,7 @@ /*! * angular-loading-bar v0.9.0 * https://chieffancypants.github.io/angular-loading-bar - * Copyright (c) 2016 Wes Cruver + * Copyright (c) 2017 Wes Cruver * License: MIT */ /* diff --git a/build/loading-bar.min.css b/build/loading-bar.min.css index 0f9f106..923f372 100644 --- a/build/loading-bar.min.css +++ b/build/loading-bar.min.css @@ -1 +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 +#loading-bar{pointer-events:none;-webkit-transition:350ms linear all;transition:350ms linear all}#loading-bar.ng-enter{opacity:0}#loading-bar.ng-enter.ng-enter-active{opacity:1}#loading-bar.ng-leave{opacity:1}#loading-bar.ng-leave.ng-leave-active{opacity:0}#loading-bar .bar{background:#29d;border-bottom-right-radius:1px;border-top-right-radius:1px;height:2px;left:0;position:fixed;top:0;-webkit-transition:width 350ms;transition:width 350ms;width:100%;z-index:10002}#loading-bar .peg{border-radius:100%;-webkit-box-shadow:#29d 1px 0 6px 1px;box-shadow:#29d 1px 0 6px 1px;height:2px;opacity:.45;position:absolute;right:0;top:0;width:70px}#loading-bar-spinner{display:block;left:10px;pointer-events:none;position:fixed;top:10px;-webkit-transition:350ms linear all;transition:350ms linear all;z-index:10002}#loading-bar-spinner.ng-enter{opacity:0}#loading-bar-spinner.ng-enter.ng-enter-active{opacity:1}#loading-bar-spinner.ng-leave{opacity:1}#loading-bar-spinner.ng-leave.ng-leave-active{opacity:0}#loading-bar-spinner .spinner-icon{-webkit-animation:loading-bar-spinner .4s linear infinite;animation:loading-bar-spinner .4s linear infinite;border:solid 2px transparent;border-left-color:#29d;border-radius:50%;border-top-color:#29d;height:14px;width:14px}@-webkit-keyframes loading-bar-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-bar-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/build/loading-bar.min.js b/build/loading-bar.min.js index e4b18ad..feace86 100644 --- a/build/loading-bar.min.js +++ b/build/loading-bar.min.js @@ -1,7 +1,8 @@ /*! * angular-loading-bar v0.9.0 * https://chieffancypants.github.io/angular-loading-bar - * Copyright (c) 2016 Wes Cruver + * Copyright (c) 2017 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++,l>=k?(e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),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++,l>=k?(e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),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='