| '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(); |
| }); |
| } |
| } |
| ); |