Skip to content

Commit 846874a

Browse files
committed
Merge pull request #1 from bsalex/v0.2
V0.2
2 parents c01534d + 93a3966 commit 846874a

20 files changed

+1466
-490
lines changed

Gruntfile.coffee

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,17 @@ module.exports = (grunt) ->
77

88
uglify:
99
dist:
10+
options:
11+
mangle: false
12+
beautify: true
13+
1014
src: [
11-
"source/js/module.js"
15+
"source/**/*module.js"
1216
"source/**/*.js"
17+
"!source/**/*spec.js"
1318
]
1419
dest: "dist/angular-loading-overlay.js"
1520

16-
17-
less:
18-
dev:
19-
files:
20-
"source/css/styles.css": "source/less/styles.less"
21-
dist:
22-
options:
23-
compress: true
24-
files:
25-
"dist/angular-loading-overlay.css": "source/less/styles.less"
26-
2721
jshint:
2822
options:
2923
jshintrc: true
@@ -33,20 +27,12 @@ module.exports = (grunt) ->
3327
scripts:
3428
files: ["source/**/*.js"]
3529
tasks: ["uglify:dist"]
36-
less:
37-
files: ["source/**/*.less"]
38-
tasks: ["less:dev"]
3930

4031
grunt.registerTask "build", [
4132
"clean:dist"
42-
"uglify:dist",
43-
"less:dist"
44-
]
45-
46-
grunt.registerTask "build-dev", [
47-
"less:dev"
33+
"uglify:dist"
4834
]
4935

5036
grunt.registerTask "check", [
5137
"jshint"
52-
]
38+
]

README.md

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,32 @@
22

33
#Angular loading overlay
44

5-
A directive and mixin to show "Loading..." overlay.
6-
7-
##How to use it?
8-
1. Specify the module in you app module dependencies ("angularLoadingOverlay");
9-
2. Inject "LoadingOverlay" into a controller;
10-
3. Add "LoadingOverlay.mixin(this);" or "LoadingOverlay.mixin($scope)" before you use any loading overlay function;
11-
4. Add 'loading-overlay[="id"]' attribute to the container where you want to show overlay;
12-
5. Use "$scope.showLoadingOverlay([id])" or "this.showLoadingOverlay([id])" to show overlay;
13-
6. Use "$scope.hideLoadingOverlay([id])" or "this.hideLoadingOverlay([id])" to hide overlay.
5+
A service and directive to show "Loading..." overlays on async operations.
6+
7+
##Installation
8+
`bower install --save angular-loading-overlay`
9+
10+
##Usage
11+
12+
###In javascript
13+
````javascript
14+
angular.module("your nodule name", [
15+
"bsLoadingOverlay"
16+
]);
17+
18+
19+
angular.module("your nodule name")
20+
.controller(function ($timeout, bsLoadingOverlayService) {
21+
22+
bsLoadingOverlayService.start();
23+
24+
$timeout(bsLoadingOverlayService.stop, 5000);
25+
26+
});
27+
````
28+
###In html
29+
````html
30+
<div bs-loading-overlay>
31+
loaded data usage here
32+
</div>
33+
````

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"authors": [
55
"Alexander Beshchuk <[email protected]>"
66
],
7-
"description": "Mixin and directive to manipulate overlays on async operations.",
7+
"description": "Service and directive to manipulate overlays on async operations.",
88
"main": "dist/angular-loading-overlay.js",
99
"keywords": [
1010
"angular",

dist/angular-loading-overlay.css

Lines changed: 0 additions & 1 deletion
This file was deleted.

dist/angular-loading-overlay.js

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,96 @@
1-
!function(){"use strict";angular.module("angularLoadingOverlay",[])}(),function(){"use strict";angular.module("angularLoadingOverlay").directive("loadingOverlay",["$templateCache","$compile",function(a,b){return{restrict:"A",transclude:!0,scope:{loadingOverlay:"@?"},link:function(c,d,e,f,g){c.showOverlay=function(){var a=c.loadingOverlay.split(","),b=!1;if(void 0!==c.$parent.isLoadingOverlay)for(var d=0;d<a.length;d++)if(c.$parent.isLoadingOverlay(a[d].trim()||void 0)){b=!0;break}return b},d.append(b(a.get("loadingOverlay.html"))(c)),g(function(a){d.append(a)})}}}])}(),function(){"use strict";angular.module("angularLoadingOverlay").factory("LoadingOverlay",[function(){return{mixin:function(a){var b=[];a.showLoadingOverlay=function(a){b.push(a)},a.hideLoadingOverlay=function(a){var c=b.indexOf(a);-1!==c&&b.splice(c,1)},a.isLoadingOverlay=function(a){return-1!==b.indexOf(a)}}}}])}(),function(){"use strict";angular.module("angularLoadingOverlay").run(["$templateCache",function(a){var b='<div class="loading-overlay" ng-hide="!showOverlay()"></div>';a.put("loadingOverlay.html",b)}])}();
1+
!function() {
2+
"use strict";
3+
angular.module("bsLoadingOverlay", []);
4+
}(), function() {
5+
"use strict";
6+
function bsLoadingOverlay($compile, $rootScope, $templateRequest, $q, $timeout, bsLoadingOverlayService) {
7+
function link(scope, $element, $attributes) {
8+
function activate() {
9+
var globalConfig = bsLoadingOverlayService.getGlobalConfig();
10+
referenceId = $attributes.bsLoadingOverlayReferenceId, delay = +$attributes.bsLoadingOverlayDelay || globalConfig.delay,
11+
activeClass = $attributes.bsLoadingOverlayActiveClass || globalConfig.activeClass;
12+
var templateUrl = $attributes.bsLoadingOverlayTemplateUrl || globalConfig.templateUrl;
13+
templatePromise = templateUrl ? $templateRequest(templateUrl) : $q.when(!1), templatePromise.then(function(loadedTemplate) {
14+
overlayElement = $compile(loadedTemplate)(scope), overlayElement.isAttached = !1,
15+
updateOverlayElement(referenceId);
16+
});
17+
var unsubscribe = $rootScope.$on("bsLoadingOverlayUpdateEvent", function(event, options) {
18+
options.referenceId === referenceId && updateOverlayElement(referenceId);
19+
});
20+
$element.on("$destroy", unsubscribe);
21+
}
22+
function updateOverlayElement(referenceId) {
23+
bsLoadingOverlayService.isActive(referenceId) ? overlayElement.isAttached || addOverlay() : overlayElement.isAttached && removeOverlay();
24+
}
25+
function addOverlay() {
26+
delay ? (delayPromise && $timeout.cancel(delayPromise), delayPromise = $timeout(angular.noop, delay)) : delayPromise = $q.when(),
27+
$element.append(overlayElement), overlayElement.isAttached = !0, $element.addClass(activeClass);
28+
}
29+
function removeOverlay() {
30+
overlayElement.isAttached = !1, delayPromise.then(function() {
31+
overlayElement.detach(), $element.removeClass(activeClass);
32+
});
33+
}
34+
var overlayElement, referenceId, activeClass, templatePromise, delay, delayPromise;
35+
activate();
36+
}
37+
var directive = {
38+
restrict: "EA",
39+
link: link
40+
};
41+
return directive;
42+
}
43+
angular.module("bsLoadingOverlay").directive("bsLoadingOverlay", bsLoadingOverlay),
44+
bsLoadingOverlay.$inject = [ "$compile", "$rootScope", "$templateRequest", "$q", "$timeout", "bsLoadingOverlayService" ];
45+
}(), function() {
46+
"use strict";
47+
function bsLoadingOverlayServiceFactory($rootScope, $q) {
48+
function start(options) {
49+
options = options || {}, activeOverlays[options.referenceId] = !0, notifyOverlays(options.referenceId);
50+
}
51+
function wrap(promiseFunction, options) {
52+
var promise = promiseFunction;
53+
return angular.isFunction(promiseFunction) || (promise = function() {
54+
return promiseFunction;
55+
}), $q.when(bsLoadingOverlayService.start(options)).then(promise)["finally"](bsLoadingOverlayService.stop.bind(bsLoadingOverlayService, options));
56+
}
57+
function createHandler(options) {
58+
return {
59+
start: start.bind(null, options),
60+
stop: stop.bind(null, options),
61+
wrap: function(promiseFunction) {
62+
return wrap(promiseFunction, options);
63+
}
64+
};
65+
}
66+
function notifyOverlays(referenceId) {
67+
$rootScope.$emit("bsLoadingOverlayUpdateEvent", {
68+
referenceId: referenceId
69+
});
70+
}
71+
function stop(options) {
72+
options = options || {}, delete activeOverlays[options.referenceId], notifyOverlays(options.referenceId);
73+
}
74+
function isActive(referenceId) {
75+
return activeOverlays[referenceId];
76+
}
77+
function setGlobalConfig(options) {
78+
globalConfig = angular.extend(globalConfig, options);
79+
}
80+
function getGlobalConfig() {
81+
return globalConfig;
82+
}
83+
var bsLoadingOverlayService = {
84+
start: start,
85+
stop: stop,
86+
isActive: isActive,
87+
createHandler: createHandler,
88+
wrap: wrap,
89+
setGlobalConfig: setGlobalConfig,
90+
getGlobalConfig: getGlobalConfig
91+
}, activeOverlays = {}, globalConfig = {};
92+
return bsLoadingOverlayService;
93+
}
94+
angular.module("bsLoadingOverlay").factory("bsLoadingOverlayService", bsLoadingOverlayServiceFactory),
95+
bsLoadingOverlayServiceFactory.$inject = [ "$rootScope", "$q" ];
96+
}();

karma.conf.js

Lines changed: 59 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,60 @@
11
// Karma configuration
2-
// Generated on Fri Dec 05 2014 18:22:16 GMT+0200 (EET)
3-
4-
module.exports = function (config) {
5-
"use strict";
6-
7-
config.set({
8-
9-
// base path that will be used to resolve all patterns (eg. files, exclude)
10-
basePath: '',
11-
12-
13-
// frameworks to use
14-
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
15-
frameworks: ['jasmine'],
16-
17-
18-
// list of files / patterns to load in the browser
19-
files: [
20-
'node_modules/angular/angular.js',
21-
'node_modules/angular-mocks/angular-mocks.js',
22-
'source/js/module.js',
23-
'source/**/*.js',
24-
'test/**/*.js'
25-
],
26-
27-
28-
// list of files to exclude
29-
exclude: [],
30-
31-
32-
// preprocess matching files before serving them to the browser
33-
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
34-
preprocessors: {},
35-
36-
37-
// test results reporter to use
38-
// possible values: 'dots', 'progress'
39-
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
40-
reporters: ['progress', 'growler'],
41-
42-
43-
// web server port
44-
port: 9876,
45-
46-
47-
// enable / disable colors in the output (reporters and logs)
48-
colors: true,
49-
50-
51-
// level of logging
52-
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
53-
logLevel: config.LOG_INFO,
54-
55-
56-
// enable / disable watching file and executing tests whenever any file changes
57-
autoWatch: true,
58-
59-
60-
// start these browsers
61-
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
62-
browsers: ['Firefox'],
63-
64-
65-
// Continuous Integration mode
66-
// if true, Karma captures browsers, runs the tests and exits
67-
singleRun: false
68-
});
69-
};
2+
// Generated on Tue Sep 22 2015 23:49:19 GMT+0300 (EEST)
3+
4+
module.exports = function(config) {
5+
config.set({
6+
7+
// base path that will be used to resolve all patterns (eg. files, exclude)
8+
basePath: '',
9+
10+
// frameworks to use
11+
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
12+
frameworks: ['jasmine', 'sinon'],
13+
14+
// list of files / patterns to load in the browser
15+
files: [
16+
'node_modules/angular/angular.js',
17+
'node_modules/angular-mocks/angular-mocks.js',
18+
'node_modules/ng-describe/dist/ng-describe.js',
19+
'source/*module.js',
20+
'source/*.js',
21+
'source/*.spec.js'
22+
],
23+
24+
// list of files to exclude
25+
exclude: [],
26+
27+
// preprocess matching files before serving them to the browser
28+
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
29+
preprocessors: {
30+
'source/!(*.spec).js': ['coverage']
31+
},
32+
33+
// test results reporter to use
34+
// possible values: 'dots', 'progress'
35+
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
36+
reporters: ['progress', 'coverage'],
37+
38+
// web server port
39+
port: 9876,
40+
41+
// enable / disable colors in the output (reporters and logs)
42+
colors: true,
43+
44+
// level of logging
45+
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
46+
logLevel: config.LOG_INFO,
47+
48+
// enable / disable watching file and executing tests whenever any file changes
49+
autoWatch: true,
50+
51+
// start these browsers
52+
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
53+
browsers: ['PhantomJS'],
54+
55+
coverageReporter: {
56+
type : 'html',
57+
dir : 'coverage/'
58+
}
59+
})
60+
}

package.json

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
{
22
"name": "angular-loading-overlay",
3-
"description": "Mixin and directive to manipulate overlays on async operations.",
4-
"directories": {
5-
"test": "test"
6-
},
3+
"description": "Service and directive to manipulate overlays on async operations.",
74
"repository": {
85
"type": "git",
96
"url": "https://github.com/bsalex/angular-loading-overlay.git"
107
},
118
"scripts": {
129
"test-watch": "node_modules/karma/bin/karma start",
1310
"test": "node_modules/karma/bin/karma start --single-run",
11+
"prepush": "npm test && npm build && git add -u",
1412
"watch": "node_modules/grunt-cli/bin/grunt watch",
1513
"build": "node_modules/grunt-cli/bin/grunt build",
1614
"build-dev": "node_modules/grunt-cli/bin/grunt build-dev",
@@ -29,11 +27,18 @@
2927
"grunt-contrib-less": "^1.0.1",
3028
"grunt-contrib-uglify": "^0.9.2",
3129
"grunt-contrib-watch": "^0.6.1",
30+
"husky": "^0.10.1",
3231
"jasmine-core": "^2.3.4",
3332
"karma": "^0.13.10",
33+
"karma-coverage": "^0.5.2",
3434
"karma-firefox-launcher": "^0.1.6",
3535
"karma-growler-reporter": "0.0.1",
3636
"karma-jasmine": "^0.3.6",
37-
"load-grunt-tasks": "^3.3.0"
37+
"karma-phantomjs-launcher": "^0.2.1",
38+
"karma-sinon": "^1.0.4",
39+
"load-grunt-tasks": "^3.3.0",
40+
"ng-describe": "^1.3.0",
41+
"phantomjs": "^1.9.18",
42+
"sinon": "^1.17.0"
3843
}
3944
}

source/css/styles.css

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)