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

Commit a5e73aa

Browse files
committed
feat(directive): allow to prepend bricks
provide method to add a brick document readme
1 parent 92a77c9 commit a5e73aa

3 files changed

Lines changed: 39 additions & 12 deletions

File tree

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,19 @@ Equivalent to:
195195
</div>
196196
```
197197

198+
### `prepend`
199+
200+
Bricks are appended by default. This behavior can be specified for each brick by
201+
providing the `prepend` attribute.
202+
203+
*Example:*
204+
205+
```html
206+
<div masonry>
207+
<div class="masonry-brick" prepend="isPrepended()">...</div>
208+
</div>
209+
```
210+
198211
## Credits
199212

200213
The directive is based on

src/angular-masonry.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,20 @@
5252
$element.addClass('loaded');
5353
}
5454

55-
this.appendBrick = function appendBrick(element, id) {
55+
this.addBrick = function addBrick(method, element, id) {
5656
if (destroyed) {
5757
return;
5858
}
5959

60-
function _append() {
60+
function _add() {
6161
if (Object.keys(bricks).length === 0) {
6262
$element.masonry('resize');
6363
}
6464
if (bricks[id] === undefined) {
6565
// Keep track of added elements.
6666
bricks[id] = true;
6767
defaultLoaded(element);
68-
$element.masonry('appended', element, true);
68+
$element.masonry(method, element, true);
6969
}
7070
}
7171

@@ -78,14 +78,14 @@
7878
}
7979

8080
if (!self.loadImages){
81-
_append();
81+
_add();
8282
_layout();
8383
} else if (self.preserveOrder) {
84-
_append();
84+
_add();
8585
element.imagesLoaded(_layout);
8686
} else {
8787
element.imagesLoaded(function imagesLoaded() {
88-
_append();
88+
_add();
8989
_layout();
9090
});
9191
}
@@ -168,8 +168,10 @@
168168
link: {
169169
pre: function preLink(scope, element, attrs, ctrl) {
170170
var id = scope.$id, index;
171+
var prependBrick = scope.$eval(attrs.prepend);
172+
var method = prependBrick ? 'prepended' : 'appended';
171173

172-
ctrl.appendBrick(element, id);
174+
ctrl.addBrick(method, element, id);
173175
element.on('$destroy', function () {
174176
ctrl.removeBrick(id, element);
175177
});

test/spec/directive.coffee

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,21 +110,21 @@ describe 'angular-masonry', ->
110110

111111
it 'should not add after destruction', =>
112112
@ctrl.destroy()
113-
@ctrl.appendBrick()
113+
@ctrl.addBrick()
114114

115115
expect($.fn.masonry).not.toHaveBeenCalled()
116116

117117

118118
describe 'masonry-brick', =>
119119
beforeEach =>
120120
self = this
121-
@appendBrick = sinon.spy()
121+
@addBrick = sinon.spy()
122122
@removeBrick = sinon.spy()
123123
@scheduleMasonry = sinon.spy()
124124
@scheduleMasonryOnce = sinon.spy()
125125

126126
controllerProvider.register('MasonryCtrl', ->
127-
@appendBrick = self.appendBrick
127+
@addBrick = self.addBrick
128128
@removeBrick = self.removeBrick
129129
@scheduleMasonry = self.scheduleMasonry
130130
@scheduleMasonryOnce = self.scheduleMasonryOnce
@@ -139,7 +139,7 @@ describe 'angular-masonry', ->
139139
'''
140140
element = $compile(element)(@scope)
141141

142-
expect(@appendBrick).toHaveBeenCalledOnce()
142+
expect(@addBrick).toHaveBeenCalledOnce()
143143
)
144144

145145
it 'should remove an element in the parent controller if destroyed', inject(($compile) =>
@@ -156,7 +156,7 @@ describe 'angular-masonry', ->
156156
@scope.bricks.splice(0, 1)
157157
)
158158

159-
expect(@appendBrick).toHaveBeenCalledThrice()
159+
expect(@addBrick).toHaveBeenCalledThrice()
160160
expect(@removeBrick).toHaveBeenCalledOnce()
161161
)
162162

@@ -181,6 +181,18 @@ describe 'angular-masonry', ->
181181
expect($.fn.masonry.callCount).toBe(2 + 3)
182182
)
183183

184+
it 'should prepend elements when specified by attribute', inject(($compile) =>
185+
element = angular.element '''
186+
<masonry>
187+
<div class="masonry-brick" prepend="{{true}}"></div>
188+
</masonry>
189+
'''
190+
element = $compile(element)(@scope)
191+
@scope.$digest()
192+
193+
expect($.fn.masonry.calledWith('prepended', sinon.match.any, sinon.match.any)).toBe(true)
194+
)
195+
184196
it 'should append before imagesLoaded when preserve-order is set', inject(($compile) =>
185197
element = angular.element '''
186198
<masonry preserve-order>

0 commit comments

Comments
 (0)