Client side enforcement of repeater maxitems
Adds client side enforcement of the max items property of the repeater form widget
This commit is contained in:
parent
5c56c9579d
commit
3aa251db4e
|
|
@ -33,25 +33,28 @@
|
|||
Repeater.DEFAULTS = {
|
||||
sortableHandle: '.repeater-item-handle',
|
||||
sortableContainer: 'ul.field-repeater-items',
|
||||
titleFrom: null
|
||||
titleFrom: null,
|
||||
maxItems: null
|
||||
}
|
||||
|
||||
Repeater.prototype.init = function() {
|
||||
this.bindSorting()
|
||||
|
||||
this.$el.on('ajaxDone', '[data-repeater-remove]', this.proxy(this.onRemoveItemSuccess))
|
||||
this.$el.on('ajaxDone', '[data-repeater-add]', this.proxy(this.onAddItemSuccess))
|
||||
this.$el.on('ajaxDone', '> .field-repeater-items > .field-repeater-item > .repeater-item-remove > [data-repeater-remove]', this.proxy(this.onRemoveItemSuccess))
|
||||
this.$el.on('ajaxDone', '> .field-repeater-add-item > [data-repeater-add]', this.proxy(this.onAddItemSuccess))
|
||||
this.$el.on('click', '> ul > li > .repeater-item-collapse .repeater-item-collapse-one', this.proxy(this.toggleCollapse))
|
||||
|
||||
this.$el.one('dispose-control', this.proxy(this.dispose))
|
||||
|
||||
this.togglePrompt()
|
||||
}
|
||||
|
||||
Repeater.prototype.dispose = function() {
|
||||
this.$sortable.sortable('destroy')
|
||||
|
||||
this.$el.off('ajaxDone', '[data-repeater-remove]', this.proxy(this.onRemoveItemSuccess))
|
||||
this.$el.off('ajaxDone', '[data-repeater-add]', this.proxy(this.onAddItemSuccess))
|
||||
this.$el.off('click', '> ul > li > .repeater-item-collapse .repeater-item-collapse-one', this.proxy(this.toggleCollapse))
|
||||
|
||||
this.$el.off('ajaxDone', '> .field-repeater-items > .field-repeater-item > .repeater-item-remove > [data-repeater-remove]', this.proxy(this.onRemoveItemSuccess))
|
||||
this.$el.off('ajaxDone', '> .field-repeater-add-item > [data-repeater-add]', this.proxy(this.onAddItemSuccess))
|
||||
this.$el.off('click', '> .field-repeater-items > .field-repeater-item > .repeater-item-collapse .repeater-item-collapse-one', this.proxy(this.toggleCollapse))
|
||||
|
||||
this.$el.off('dispose-control', this.proxy(this.dispose))
|
||||
this.$el.removeData('oc.repeater')
|
||||
|
|
@ -76,13 +79,27 @@
|
|||
|
||||
this.$sortable.sortable(sortableOptions)
|
||||
}
|
||||
|
||||
|
||||
Repeater.prototype.onRemoveItemSuccess = function(ev) {
|
||||
$(ev.target).closest('.field-repeater-item').remove()
|
||||
this.togglePrompt()
|
||||
}
|
||||
|
||||
// This fires twice, not sure why
|
||||
Repeater.prototype.onAddItemSuccess = function(ev) {
|
||||
this.togglePrompt()
|
||||
}
|
||||
|
||||
Repeater.prototype.togglePrompt = function () {
|
||||
if (this.options.maxItems != 0) {
|
||||
var repeatedItems = this.$el.find('> .field-repeater-items > .field-repeater-item').length,
|
||||
$addItemBtn = this.$el.find('> .field-repeater-add-item')
|
||||
|
||||
if (repeatedItems >= this.options.maxItems) {
|
||||
$addItemBtn.hide()
|
||||
} else if (repeatedItems < this.options.maxItems) {
|
||||
$addItemBtn.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Repeater.prototype.toggleCollapse = function(ev) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue