87 lines
2.7 KiB
JavaScript
87 lines
2.7 KiB
JavaScript
jQuery.fn.extend({
|
|
createRepeater: function (options = {}) {
|
|
var hasOption = function (optionKey) {
|
|
return options.hasOwnProperty(optionKey);
|
|
};
|
|
|
|
var option = function (optionKey) {
|
|
return options[optionKey];
|
|
};
|
|
|
|
var generateId = function (string) {
|
|
return string
|
|
.replace(/\[/g, '_')
|
|
.replace(/\]/g, '')
|
|
.toLowerCase();
|
|
};
|
|
|
|
var addItem = function (items, key, fresh = true) {
|
|
var itemContent = items;
|
|
var group = itemContent.data("group");
|
|
var item = itemContent;
|
|
var input = item.find('input,select,textarea');
|
|
|
|
input.each(function (index, el) {
|
|
var attrName = $(el).data('name');
|
|
var skipName = $(el).data('skip-name');
|
|
if (skipName != true) {
|
|
$(el).attr("name", group + "[" + key + "]" + "[" + attrName + "]");
|
|
} else {
|
|
if (attrName != 'undefined') {
|
|
$(el).attr("name", attrName);
|
|
}
|
|
}
|
|
if (fresh == true) {
|
|
$(el).attr('value', '');
|
|
}
|
|
|
|
$(el).attr('id', generateId($(el).attr('name')));
|
|
$(el).parent().find('label').attr('for', generateId($(el).attr('name')));
|
|
})
|
|
|
|
var itemClone = items;
|
|
|
|
/* Handling remove btn */
|
|
var removeButton = itemClone.find('.remove-btn');
|
|
|
|
if (key == 0) {
|
|
removeButton.attr('disabled', true);
|
|
} else {
|
|
removeButton.attr('disabled', false);
|
|
}
|
|
|
|
removeButton.attr('onclick', '$(this).parents(\'.items\').remove()');
|
|
|
|
var newItem = $("<div class='items'>" + itemClone.html() + "<div/>");
|
|
newItem.attr('data-index', key)
|
|
|
|
newItem.appendTo(repeater);
|
|
};
|
|
|
|
/* find elements */
|
|
var repeater = this;
|
|
var items = repeater.find(".items");
|
|
var key = 0;
|
|
var addButton = repeater.find('.repeater-add-btn');
|
|
|
|
items.each(function (index, item) {
|
|
items.remove();
|
|
if (hasOption('showFirstItemToDefault') && option('showFirstItemToDefault') == true) {
|
|
addItem($(item), key);
|
|
key++;
|
|
} else {
|
|
if (items.length > 1) {
|
|
addItem($(item), key);
|
|
key++;
|
|
}
|
|
}
|
|
});
|
|
|
|
/* handle click and add items */
|
|
addButton.on("click", function () {
|
|
addItem($(items[0]), key);
|
|
key++;
|
|
});
|
|
}
|
|
});
|