// 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) { if (addressBook.hasOwnProperty(key)) { 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 = $("
  • "); var lbl = $("