'use strict';
define(
function() {
return withSelect;
function withSelect() {
this.defaultAttrs({
selectedIds: []
});
this.initializeSelections = function() {
this.select('selectedItemSelector').toArray().forEach(function(el) {
this.attr.selectedIds.push(el.getAttribute('id'));
}, this);
};
this.getSelectedIds = function() {
return this.attr.selectedIds;
};
this.toggleItemSelect = function(ev, data) {
var $item = $(data.el), append;
if ($item.hasClass(this.attr.selectedClass)) {
this.unselectItem($item);
} else {
append = this.attr.allowMultiSelect && (ev.metaKey || ev.ctrlKey || ev.shiftKey);
this.selectItem($item, append);
}
};
this.selectItem = function($item, append) {
if (!append) {
this.select('selectedItemSelector').removeClass(this.attr.selectedClass);
this.attr.selectedIds = [];
}
$item.addClass(this.attr.selectedClass);
this.attr.selectedIds.push($item.attr('id'));
this.trigger(this.attr.selectionChangedEvent, {selectedIds: this.attr.selectedIds});
};
this.unselectItem = function($item) {
$item.removeClass(this.attr.selectedClass);
var thisIdIndex = this.attr.selectedIds.indexOf($item.attr('id'));
this.attr.selectedIds.splice(thisIdIndex, 1);
this.trigger(this.attr.selectionChangedEvent, {selectedIds: this.attr.selectedIds});
};
this.after("initialize", function() {
this.on('click', {
'itemSelector': this.toggleItemSelect
});
this.initializeSelections();
});
}
}
);