// Licensed to Cloudera, Inc. under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. Cloudera, Inc. licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/*
* jHue selector plugin
* it tranforms a select multiple into a searchable/selectable alphabetical list
*/
;
(function ($, window, document, undefined) {
var pluginName = "jHueSelector",
defaults = {
selectAllLabel: "Select all",
searchPlaceholder: "Search",
noChoicesFound: "No choices found for this element",
width: 300,
height: 200,
onChange: function () {
}
};
function Plugin(element, options) {
this.element = element;
this.options = $.extend({}, defaults, options);
this._defaults = defaults;
this._name = pluginName;
this.init();
}
Plugin.prototype.setOptions = function (options) {
this.options = $.extend({}, defaults, options);
};
Plugin.prototype.init = function () {
var _this = this;
var addressBook = [];
var selectorContainer = $("
");
if (this.options.width != 300) {
selectorContainer.width(this.options.width);
}
$(_this.element).hide();
$(_this.element).find("option").each(function (cnt, opt) {
var initial = $(opt).text().substr(0, 1).toLowerCase();
if (addressBook[initial] == null) {
addressBook[initial] = [];
}
addressBook[initial].push($(opt));
});
var sortedKeys = [];
for (var key in addressBook) {
sortedKeys.push(key);
}
sortedKeys.sort();
if (sortedKeys.length == 0) {
$(_this.element).after($("
").addClass("alert").css("margin-top", "-2px").css("float", "left").html(this.options.noChoicesFound));
}
else {
selectorContainer.addClass("jHueSelector");
var body = $("
").addClass("jHueSelectorBody");
body.appendTo(selectorContainer);
for (var i = 0; i < sortedKeys.length; i++) {
var key = sortedKeys[i];
var ul = $("
");
var dividerLi = $("
").addClass("selectorDivider");
dividerLi.html("" + key.toUpperCase() + "");
dividerLi.appendTo(ul);
$.each(addressBook[key], function (cnt, opt) {
var li = $("