Skip to content
This repository was archived by the owner on Aug 5, 2020. It is now read-only.

Commit 562ab9b

Browse files
committed
Merge pull request #52 from mobify/destroy
Destroy
2 parents 1606c6d + 6c136c4 commit 562ab9b

File tree

9 files changed

+89
-58
lines changed

9 files changed

+89
-58
lines changed

CHANGELOG

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
5.0.0
2+
- Adding `destroy` method
3+
- Removing `event` option in favour of internalizing a namespaced event
14
4.1.2
25
- Moved gremlins.js dependency to devDependencies
36
4.1.1

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bellows",
3-
"version": "4.1.3",
3+
"version": "5.0.0",
44
"homepage": "https://github.com/mobify/bellows",
55
"authors": [
66
"Mobify <jobs@mobify.com>"

dist/bellows.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,18 @@
2525
ITEM_CONTENT: '> .bellows__item > .bellows__content'
2626
};
2727

28+
var events = {
29+
CLICK: 'click.bellows'
30+
};
31+
2832
function Bellows(element, options) {
2933
Bellows.__super__.call(this, element, options, Bellows.DEFAULTS);
3034
}
3135

32-
Bellows.VERSION = '4.1.3';
36+
Bellows.VERSION = '5.0.0';
3337

3438
Bellows.DEFAULTS = {
3539
singleItemOpen: false,
36-
event: 'click',
3740
duration: 200,
3841
easing: 'swing',
3942
open: $.noop,
@@ -52,6 +55,12 @@
5255
this._bindEvents();
5356
},
5457

58+
destroy: function() {
59+
this.$bellows
60+
.removeData(this.name)
61+
.off(events.CLICK);
62+
},
63+
5564
_bindEvents: function() {
5665
var plugin = this;
5766

@@ -63,7 +72,7 @@
6372
the event from a direct child, not a bellows child from a nested bellows.
6473
*/
6574
this.$bellows
66-
.on(this.options.event, function(e) {
75+
.on(events.CLICK, function(e) {
6776
var $target = $(e.target);
6877
var $closestBellows = $target.closest('.bellows');
6978

dist/bellows.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"type" : "git",
55
"url" : "https://github.com/mobify/bellows.git"
66
},
7-
"version": "4.1.3",
7+
"version": "5.0.0",
88
"description": "A mobile first accordion UI plugin",
99
"devDependencies": {
1010
"grunt": "~0.4.x",

src/js/bellows.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
ITEM_CONTENT: '> .bellows__item > .bellows__content'
2626
};
2727

28+
var events = {
29+
CLICK: 'click.bellows'
30+
};
31+
2832
function Bellows(element, options) {
2933
Bellows.__super__.call(this, element, options, Bellows.DEFAULTS);
3034
}
@@ -33,7 +37,6 @@
3337

3438
Bellows.DEFAULTS = {
3539
singleItemOpen: false,
36-
event: 'click',
3740
duration: 200,
3841
easing: 'swing',
3942
open: $.noop,
@@ -52,6 +55,12 @@
5255
this._bindEvents();
5356
},
5457

58+
destroy: function() {
59+
this.$bellows
60+
.removeData(this.name)
61+
.off(events.CLICK);
62+
},
63+
5564
_bindEvents: function() {
5665
var plugin = this;
5766

@@ -63,7 +72,7 @@
6372
the event from a direct child, not a bellows child from a nested bellows.
6473
*/
6574
this.$bellows
66-
.on(this.options.event, function(e) {
75+
.on(events.CLICK, function(e) {
6776
var $target = $(e.target);
6877
var $closestBellows = $target.closest('.bellows');
6978

tests/unit/constructor.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,20 @@ define([
55
'bellows'
66
], function(fixture, $) {
77
var Bellows;
8-
var element;
8+
var $element;
99

1010
describe('Bellows constructor', function() {
1111
beforeEach(function() {
1212
Bellows = $.fn.bellows.Constructor;
13-
element = $(fixture);
13+
$element = $(fixture);
1414
});
1515

1616
it('creates a bellows instance', function() {
17-
var bellows = new Bellows(element);
17+
var bellows = new Bellows($element);
1818

1919
assert.isDefined(bellows);
20+
21+
bellows.destroy();
2022
});
2123
});
2224
});

tests/unit/events.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ define([
44
'velocity',
55
'bellows'
66
], function(fixture, $) {
7-
var element;
7+
var $element;
88

99
describe('Bellows events', function() {
1010
var stringify = JSON.stringify;
@@ -28,35 +28,35 @@ define([
2828
});
2929

3030
beforeEach(function() {
31-
element = $(fixture).appendTo('#container');
31+
$element = $(fixture).appendTo('#container');
3232
});
3333

3434
afterEach(function() {
35-
element = null;
35+
$element.bellows('destroy');
3636
});
3737

3838
it('fires the open event when the header is clicked', function(done) {
39-
element.bellows({
39+
$element.bellows({
4040
open: function() {
4141
done();
4242
}
4343
});
4444

45-
element.find('.bellows__header').first().trigger('click');
45+
$element.find('.bellows__header').first().trigger('click');
4646
});
4747

4848
it('fires the opened event when the header is clicked', function(done) {
49-
element.bellows({
49+
$element.bellows({
5050
opened: function() {
5151
done();
5252
}
5353
});
5454

55-
element.find('.bellows__header').first().trigger('click');
55+
$element.find('.bellows__header').first().trigger('click');
5656
});
5757

5858
it('fires the close event when the header is clicked', function(done) {
59-
element.bellows({
59+
$element.bellows({
6060
opened: function(e, ui) {
6161
ui.item.find('.bellows__header').trigger('click');
6262
},
@@ -65,11 +65,11 @@ define([
6565
}
6666
});
6767

68-
element.find('.bellows__header').first().trigger('click');
68+
$element.find('.bellows__header').first().trigger('click');
6969
});
7070

7171
it('fires the closed event when the header is clicked', function(done) {
72-
element.bellows({
72+
$element.bellows({
7373
opened: function(e, ui) {
7474
ui.item.find('.bellows__header').trigger('click');
7575
},
@@ -78,7 +78,7 @@ define([
7878
}
7979
});
8080

81-
element.find('.bellows__header').first().trigger('click');
81+
$element.find('.bellows__header').first().trigger('click');
8282
});
8383
});
8484
});

tests/unit/plugin.js

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,11 @@ define([
77
'velocity',
88
'bellows'
99
], function(fixture, items, item, disabledItem, $) {
10-
var element;
10+
var $element;
1111

1212
describe('Bellows plugin', function() {
1313
beforeEach(function() {
14-
element = $(fixture).appendTo('#container');
15-
});
16-
17-
afterEach(function() {
18-
element = null;
14+
$element = $(fixture).appendTo('#container');
1915
});
2016

2117
describe('binding to Zepto\'s fn', function() {
@@ -33,123 +29,135 @@ define([
3329
});
3430

3531
describe('invoking bellows', function() {
36-
it('creates bellows instance on element', function() {
37-
element.bellows();
32+
afterEach(function() {
33+
$element.bellows('destroy');
34+
});
35+
36+
it('creates bellows instance on $element', function() {
37+
$element.bellows();
3838

39-
assert.isDefined(element.data('bellows'));
39+
assert.isDefined($element.data('bellows'));
4040
});
4141

42-
it('stores element inside instance', function() {
43-
element.bellows();
42+
it('stores $element inside instance', function() {
43+
$element.bellows();
4444

45-
assert.isDefined(element.data('bellows').$bellows);
45+
assert.isDefined($element.data('bellows').$bellows);
4646
});
4747

4848
it('wraps each content section with correct CSS class', function() {
49-
element.bellows();
49+
$element.bellows();
5050

51-
assert.lengthOf(element.find('.bellows__content-wrapper'), 2);
51+
assert.lengthOf($element.find('.bellows__content-wrapper'), 2);
5252
});
5353
});
5454

5555
describe('invoking bellows methods before plugin is initialized', function() {
5656
it('throws when not initialized', function() {
57-
assert.throws(function() { element.bellows('open'); });
57+
assert.throws(function() { $element.bellows('open'); });
5858
});
5959
});
6060

6161
describe('invoking bellows methods using the plugin interface', function() {
62+
afterEach(function() {
63+
$element.bellows('destroy');
64+
});
65+
6266
it('opens a bellows item using the open method', function(done) {
63-
element.bellows({
67+
$element.bellows({
6468
opened: function(e, ui) {
6569
assert.isTrue(ui.item.hasClass('bellows--is-open'));
6670
done();
6771
}
6872
});
6973

70-
element.bellows('open', 0);
74+
$element.bellows('open', 0);
7175
});
7276

7377
it('closes a bellows item using the close method', function(done) {
74-
element.bellows({
78+
$element.bellows({
7579
opened: function() {
76-
element.bellows('close', 0);
80+
$element.bellows('close', 0);
7781
},
7882
closed: function(e, ui) {
7983
assert.isFalse(ui.item.hasClass('bellows--is-open'));
8084
done();
8185
}
8286
});
8387

84-
element.bellows('open', 0);
88+
$element.bellows('open', 0);
8589
});
8690

8791
it('removes aria-hidden attribute when open', function(done) {
88-
element.bellows({
92+
$element.bellows({
8993
opened: function(e, ui) {
9094
assert.isFalse(!!ui.item.find('.bellows__content-wrapper').attr('aria-hidden'));
9195
done();
9296
}
9397
});
9498

95-
element.bellows('open', 0);
99+
$element.bellows('open', 0);
96100
});
97101

98102
it('adds aria-hidden attribute when closed', function(done) {
99-
element.bellows({
103+
$element.bellows({
100104
opened: function() {
101-
element.bellows('close', 0);
105+
$element.bellows('close', 0);
102106
},
103107
closed: function(e, ui) {
104108
assert.isTrue(!!ui.item.find('.bellows__content-wrapper').attr('aria-hidden'));
105109
done();
106110
}
107111
});
108112

109-
element.bellows('open', 0);
113+
$element.bellows('open', 0);
110114
});
111115

112116
it('enables handlers for dynamically added items', function(done) {
113-
element.bellows({
117+
$element.bellows({
114118
open: function() {
115119
done();
116120
}
117121
});
118122

119-
element
123+
$element
120124
.bellows('add', items)
121125
.find('.bellows__header:eq(3)')
122126
.trigger('click');
123127
});
124128

125129
it('replaces items when adding with replace', function() {
126-
element.bellows();
130+
$element.bellows();
127131

128-
element.bellows('add', item, true);
132+
$element.bellows('add', item, true);
129133

130-
assert.equal(element.find('.bellows__item').length, 1);
134+
assert.equal($element.find('.bellows__item').length, 1);
131135
});
132136

133137
it('throws for method calls that don\'t exist', function() {
134-
assert.throws(function() { element.bellows().bellows('noMethod'); });
138+
assert.throws(function() { $element.bellows().bellows('noMethod'); });
135139
});
136140

137141
it('throws when attempting to invoke private methods', function() {
138-
assert.throws(function() { element.bellows().bellows('_init'); });
142+
assert.throws(function() { $element.bellows().bellows('_init'); });
139143
});
140144

141145
it('throws when attempting to invoke methods that aren\'t functions', function() {
142-
assert.throws(function() { element.bellows().bellows('singleItemOpen'); });
146+
assert.throws(function() { $element.bellows().bellows('singleItemOpen'); });
143147
});
144148
});
145149

146150
describe('disabling a bellows item', function() {
151+
afterEach(function() {
152+
$element.bellows('destroy');
153+
});
154+
147155
it('does not open item when header clicked', function(done) {
148-
element.bellows();
156+
$element.bellows();
149157

150158
var $disabledItem = $(disabledItem);
151159

152-
element.bellows('add', $disabledItem);
160+
$element.bellows('add', $disabledItem);
153161

154162
$disabledItem
155163
.find('.bellows__header')

0 commit comments

Comments
 (0)