Skip to content

Commit

Permalink
improved data-repeater-create init
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Detering authored and Brian Detering committed Oct 1, 2016
1 parent abd1acf commit d94abd2
Show file tree
Hide file tree
Showing 9 changed files with 102 additions and 33 deletions.
19 changes: 19 additions & 0 deletions complex-repeater.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<div class="complex-repeater">
<div>
<div>
<button data-repeater-create>create</button>
</div>
<div>
<div data-repeater-list="complex-repeater">
<div data-repeater-item>
<div>
<input type="text" name="text-input" value="A"/>
</div>
<div>
<button data-repeater-delete></button>
</div>
</div>
</div>
</div>
</div>
</div>
18 changes: 3 additions & 15 deletions jquery.repeater.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// jquery.repeater version 1.1.3
// jquery.repeater version 1.1.4
// https://github.com/DubFriend/jquery.repeater
// (MIT) 06-12-2015
// (MIT) 01-10-2016
// Brian Detering <[email protected]> (http://www.briandetering.net/)
(function ($) {
'use strict';
Expand Down Expand Up @@ -960,19 +960,7 @@ $.fn.repeater = function (fig) {
show.call($item.get(0));
};

$self.children().each(function () {
if(
!$(this).is('[data-repeater-list]') &&
$(this).find('[data-repeater-list]').length === 0
) {
if($(this).is('[data-repeater-create]')) {
$(this).click(addItem);
}
else if($(this).find('[data-repeater-create]').length !== 0) {
$(this).find('[data-repeater-create]').click(addItem);
}
}
});
$filterNested($self.find('[data-repeater-create]'), fig.repeaters).click(addItem);

$list.on('click', '[data-repeater-delete]', function () {
var self = $(this).closest('[data-repeater-item]').get(0);
Expand Down
6 changes: 3 additions & 3 deletions jquery.repeater.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "jquery.repeater",
"version": "1.1.3",
"version": "1.1.4",
"description": "repeatable form input interface",
"main": "jquery.repeater.js",
"directories": {
Expand Down
2 changes: 1 addition & 1 deletion repeater.jquery.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "repeater",
"version": "1.1.0",
"version": "1.1.4",
"title": "Repeater",
"author": {
"name": "Brian Detering",
Expand Down
14 changes: 1 addition & 13 deletions src/repeater.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,19 +235,7 @@ $.fn.repeater = function (fig) {
show.call($item.get(0));
};

$self.children().each(function () {
if(
!$(this).is('[data-repeater-list]') &&
$(this).find('[data-repeater-list]').length === 0
) {
if($(this).is('[data-repeater-create]')) {
$(this).click(addItem);
}
else if($(this).find('[data-repeater-create]').length !== 0) {
$(this).find('[data-repeater-create]').click(addItem);
}
}
});
$filterNested($self.find('[data-repeater-create]'), fig.repeaters).click(addItem);

$list.on('click', '[data-repeater-delete]', function () {
var self = $(this).closest('[data-repeater-item]').get(0);
Expand Down
51 changes: 51 additions & 0 deletions test/complex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
QUnit.module('complex-repeater', {
setup: function () {
this.$fixture = $('#qunit-fixture');
this.$fixture.html($('#template').html());
this.$repeater = this.$fixture.find('.complex-repeater');
this.$addButton = this.$repeater.find('[data-repeater-create]');
this.$fixture.append($('#template').html());
}
});

QUnit.test('add item', function (assert) {
this.$repeater.repeater();
this.$addButton.click();
var $items = this.$repeater.find('[data-repeater-item]');
assert.strictEqual($items.length, 2, 'adds a second item to list');

assert.deepEqual(
getNamedInputValues($items.last()),
{ 'complex-repeater[1][text-input]': '' },
'added items inputs are clear'
);

assert.deepEqual(
getNamedInputValues($items.first()),
{ 'complex-repeater[0][text-input]': 'A' },
'does not clear other inputs'
);
});

QUnit.test('delete item', function (assert) {
this.$repeater.repeater();
this.$repeater.find('[data-repeater-delete]').first().click();
assert.strictEqual(
this.$repeater.find('[data-repeater-item]').length, 0,
'deletes item'
);
});

QUnit.test('delete item that has been added', function (assert) {
this.$repeater.repeater();
this.$addButton.click();
assert.strictEqual(
this.$repeater.find('[data-repeater-item]').length, 2,
'item added'
);
this.$repeater.find('[data-repeater-delete]').last().click();
assert.strictEqual(
this.$repeater.find('[data-repeater-item]').length, 1,
'item deleted'
);
});
21 changes: 21 additions & 0 deletions test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,26 @@
<input data-repeater-create type="button" value="Add"/>
</form>

<div class="complex-repeater">
<div>
<div>
<button data-repeater-create>create</button>
</div>
<div>
<div data-repeater-list="complex-repeater">
<div data-repeater-item>
<div>
<input type="text" name="text-input" value="A"/>
</div>
<div>
<button data-repeater-delete></button>
</div>
</div>
</div>
</div>
</div>
</div>

</script>

<script src="../jquery-1.11.1.js"></script>
Expand All @@ -101,5 +121,6 @@
<script src="test-lib.js"></script>
<script src="test.js"></script>
<script src="nested.js"></script>
<script src="complex.js"></script>
</body>
</html>
2 changes: 2 additions & 0 deletions test/index.pre.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<script type="text/x-template" id="template">
<!-- @include ../repeater.html -->
<!-- @include ../nested-repeater.html -->
<!-- @include ../complex-repeater.html -->
</script>

<script src="../jquery-1.11.1.js"></script>
Expand All @@ -22,5 +23,6 @@
<script src="test-lib.js"></script>
<script src="test.js"></script>
<script src="nested.js"></script>
<script src="complex.js"></script>
</body>
</html>

0 comments on commit d94abd2

Please sign in to comment.