Skip to content
This repository was archived by the owner on Dec 30, 2018. It is now read-only.

Commit 70e6855

Browse files
committed
feat(app): remove dependency on jQuery
1 parent 8b18739 commit 70e6855

3 files changed

Lines changed: 158 additions & 134 deletions

File tree

karma.conf.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module.exports = function (config) {
55
basePath: '',
66
frameworks: ['jasmine'],
77
files: [
8+
'bower_components/masonry/dist/masonry.pkgd.js',
89
'bower_components/jquery/dist/jquery.js',
910
'bower_components/sinonjs/sinon.js',
1011
'bower_components/jasmine-sinon/lib/jasmine-sinon.js',

src/angular-masonry.js

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
/*!
2-
* angular-masonry <%= pkg.version %>
3-
* Pascal Hartig, https://passy.me/
4-
* License: MIT
1+
/**
2+
* angular-masonry
3+
*
4+
* @external 'angular.module'
5+
* @version <%= pkg.version %>
6+
* @author {@link https://passy.me/|Pascal Hartig}
7+
* @license: MIT
58
*/
69
(function () {
710
'use strict';
@@ -15,7 +18,7 @@
1518
var timeout = null;
1619

1720
this.preserveOrder = false;
18-
this.loadImages = true;
21+
this.loadImages = false;
1922

2023
this.scheduleMasonryOnce = function scheduleMasonryOnce() {
2124
var args = arguments;
@@ -42,7 +45,10 @@
4245
return;
4346
}
4447
schedule.forEach(function scheduleForEach(args) {
45-
$element.masonry.apply($element, args);
48+
var method = args[0];
49+
args = args.slice(1);
50+
51+
self.masonry[method].apply(self.masonry, args);
4652
});
4753
schedule = [];
4854
}, 30);
@@ -59,13 +65,13 @@
5965

6066
function _add() {
6167
if (Object.keys(bricks).length === 0) {
62-
$element.masonry('resize');
68+
self.masonry.resize();
6369
}
6470
if (bricks[id] === undefined) {
6571
// Keep track of added elements.
6672
bricks[id] = true;
6773
defaultLoaded(element);
68-
$element.masonry(method, element, true);
74+
self.masonry[method](element, true);
6975
}
7076
}
7177

@@ -97,7 +103,7 @@
97103
}
98104

99105
delete bricks[id];
100-
$element.masonry('remove', element);
106+
self.masonry.remove(element);
101107
this.scheduleMasonryOnce('layout');
102108
};
103109

@@ -106,15 +112,15 @@
106112

107113
if ($element.data('masonry')) {
108114
// Gently uninitialize if still present
109-
$element.masonry('destroy');
115+
self.masonry.destroy();
110116
}
111117
$scope.$emit('masonry.destroyed');
112118

113119
bricks = {};
114120
};
115121

116122
this.reload = function reload() {
117-
$element.masonry();
123+
self.masonry.reload();
118124
$scope.$emit('masonry.reloaded');
119125
};
120126

@@ -123,20 +129,26 @@
123129
return {
124130
restrict: 'AE',
125131
controller: 'MasonryCtrl',
132+
controllerAs: 'msnry',
126133
link: {
127134
pre: function preLink(scope, element, attrs, ctrl) {
128135
var attrOptions = scope.$eval(attrs.masonry || attrs.masonryOptions);
129136
var options = angular.extend({
130137
itemSelector: attrs.itemSelector || '.masonry-brick',
131138
columnWidth: parseInt(attrs.columnWidth, 10) || attrs.columnWidth
132139
}, attrOptions || {});
133-
element.masonry(options);
140+
134141
scope.masonryContainer = element[0];
142+
ctrl.masonry = new Masonry(scope.masonryContainer, options);
143+
135144
var loadImages = scope.$eval(attrs.loadImages);
136-
ctrl.loadImages = loadImages !== false;
145+
ctrl.loadImages = !!loadImages;
146+
137147
var preserveOrder = scope.$eval(attrs.preserveOrder);
138-
ctrl.preserveOrder = (preserveOrder !== false && attrs.preserveOrder !== undefined);
148+
ctrl.preserveOrder = (preserveOrder !== false && attrs.preserveOrder !== undefined);
149+
139150
var reloadOnShow = scope.$eval(attrs.reloadOnShow);
151+
140152
if (reloadOnShow !== false && attrs.reloadOnShow !== undefined) {
141153
scope.$watch(function () {
142154
return element.prop('offsetParent');
@@ -146,10 +158,11 @@
146158
}
147159
});
148160
}
161+
149162
var reloadOnResize = scope.$eval(attrs.reloadOnResize);
150163
if (reloadOnResize !== false && attrs.reloadOnResize !== undefined) {
151164
scope.$watch('masonryContainer.offsetWidth', function (newWidth, oldWidth) {
152-
if (newWidth != oldWidth) {
165+
if (newWidth !== oldWidth) {
153166
ctrl.reload();
154167
}
155168
});

0 commit comments

Comments
 (0)