define('jira/ajs/select/checkbox-multi-select', ['jira/util/formatter', 'jira/util/key-code', 'jira/ajs/select/queryable-dropdown-select', 'jira/ajs/select/select-helper', 'jira/ajs/select/select-model', 'jira/ajs/select/suggestions/checkbox-multi-select-suggest-handler', 'jira/ajs/list/list', 'jira/util/events', 'jira/util/events/types', 'jquery', 'underscore'], function (formatter, keyCodes, QueryableDropdownSelect, SelectHelper, SelectModel, SelectSuggestHandler, List, Events, Types, jQuery, _) { 'use strict'; /** * A multiselect list that can be queried, selected options appear as checkboxes below the queryfield. * https://extranet.atlassian.com/download/attachments/1991213117/Sparkler+-+Phased+Approach.png * * @class CheckboxMultiSelect * @extends QueryableDropdownSelect */ return QueryableDropdownSelect.extend({ /** * @param {Object} options * @constructs */ init: function init(options) { var instance = this; // mixin jQuery.extend(this, SelectHelper); // munge default options with user specified options. Will put result at this.options. this._setOptions(options); var element = jQuery(this.options.element); if (!element.attr("multiple")) { throw "Cannot create CheckboxMultiSelect without multiple-select select element."; } this.options.element = jQuery(this.options.element).hide(); // Gives a JSON interface to a <select list>. Allowing you to add elements via JSON descriptors. It also // provides utility methods to retrieve collections of elements as JSON, for example selected options. this.model = new SelectModel({ element: this.options.element, removeOnUnSelect: this.options.removeOnUnSelect }); var HandlerClass = this.options.suggestionsHandler ? this.options.suggestionsHandler : SelectSuggestHandler; this.suggestionsHandler = new HandlerClass(this.options, this.model); // Some convienience events for devs to add remove