/
angular-images-loaded.js
executable file
·80 lines (68 loc) · 2.71 KB
/
angular-images-loaded.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
(function () {
'use strict';
angular.module('hj.imagesLoaded', [])
.directive('imagesLoaded', function () {
return {
restrict: 'AC',
scope: {
imagesLoaded: '=?',
imagesLoadedOptions: '=?',
imagesLoadedEvents: '=?',
imagesLoadedClass: '=?',
imagesLoadedWatch: '=?',
imagesLoadedAlways: '&?',
imagesLoadedDone: '&?',
imagesLoadedFail: '&?',
imagesLoadedSelector: '@?'
},
bindToController: true,
controllerAs: 'vm',
controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) {
var vm = this;
vm.$onInit = function () {
var eventNames = ['always', 'done', 'fail', 'progress'];
var events = vm.imagesLoaded || vm.imagesLoadedEvents;
var options = vm.imagesLoadedOptions || {};
var className = vm.imagesLoadedClass || 'images-loaded';
var classUsed = $element.hasClass(className);
var selector = vm.imagesLoadedSelector;
$element.addClass(className);
var init = function () {
$scope.$emit('imagesLoaded:started', $element);
if (classUsed) {
$element.addClass(className);
}
var elements = selector ? $element.find(selector) : $element[0];
var imgLoad = imagesLoaded(elements, options, function () {
$scope.$emit('imagesLoaded:loaded', $element);
$element.removeClass(className);
$scope.$apply(function () {
$scope.$parent.$imagesLoaded = true;
});
});
eventNames.forEach(function (eventName) {
imgLoad.on(eventName, function () {
var callbackArguments = [this, $element].concat(Array.prototype.slice.call(arguments));
if (events && typeof events[eventName] === 'function') {
events[eventName].apply(this, callbackArguments);
}
if (typeof vm['imagesLoaded' + (eventName[0].toUpperCase() + eventName.slice(1))] === 'function') {
vm['imagesLoaded' + (eventName[0].toUpperCase() + eventName.slice(1))].apply(this, callbackArguments);
}
});
});
};
if (vm.imagesLoadedWatch) {
$scope.$watch('vm.imagesLoadedWatch', function () {
init();
});
} else {
$timeout(init);
}
};
}]
};
}
);
angular.module('angular-images-loaded', ['hj.imagesLoaded']);
})();