view src/DML/MainVisBundle/Resources/assets/lib/jquery.ui/combobox.js @ 1:f38015048f48 tip

Added GPL
author Daniel Wolff
date Sat, 13 Feb 2016 20:43:38 +0100
parents 493bcb69166c
children
line wrap: on
line source
(function($) {
$.widget( "custom.combobox", {
    _create : function() {
        this.wrapper = $("<span>").addClass(
                "custom-combobox")
                .insertAfter(this.element);
        this.element.hide();
        this._createAutocomplete();
        this._createShowAllButton();
    },

    _createAutocomplete : function() {
        var selected = this.element.children(":selected"), value = selected
                .val() ? selected.text() : "";
        this.input = $("<input>")
                .appendTo(this.wrapper)
                .val(value)
                .attr("title", "")
                .addClass("custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left")
                .autocomplete({
                    delay : 0,
                    minLength : 0,
                    source : $.proxy(this, "_source")
                });
        this._on(this.input, {
            autocompleteselect : function(event, ui) {
                ui.item.option.selected = true;
                this._trigger("select", event, {
                    item : ui.item.option
                });
            },
            autocompletechange : "_applyChange"
        });
    },

    _createShowAllButton : function() {
        var input = this.input, wasOpen = false;
        $("<a>").attr("tabIndex", -1).attr("title",
                "Show All Items").tooltip().appendTo(
                this.wrapper).button({
            icons : {
                primary : "ui-icon-triangle-1-s"
            },
            text : false
        }).removeClass("ui-corner-all").addClass(
                "custom-combobox-toggle ui-corner-right")
                .mousedown(
                        function() {
                            wasOpen = input.autocomplete(
                                    "widget")
                                    .is(":visible");
                        }).click(function() {
                    input.focus();
                    // Close if already visible
                    if (wasOpen) {
                        return;
                    }
                    // Pass empty string as value to search
                    // for, displaying all results
                    input.autocomplete("search", "");
                });
    },
    _source : function(request, response) {
        var matcher = new RegExp($.ui.autocomplete
                .escapeRegex(request.term), "i");
        response(this.element.children("option").map(
                function() {
                    var text = $(this).text();
                    if (this.value
                            && (!request.term || matcher
                                    .test(text)))
                        return {
                            label : text,
                            value : text,
                            option : this
                        };
                }));
    },

    _applyChange : function(event, ui) {
        // Selected an item, nothing to do
        if (ui.item) {
            return;
        }
        // Search for a match (case-insensitive)
        var value = this.input.val(), valueLowerCase = value
                .toLowerCase(), valid = false;
        this.element
                .children("option")
                .each(
                        function() {
                            if ($(this).text()
                                    .toLowerCase() === valueLowerCase) {
                                this.selected = valid = true;
                                return false;
                            }
                        });
        // Found a match, nothing to do
        this.element.val(value);
        if (valid) {
            return;
        }
    },
    _destroy : function() {
        this.wrapper.remove();
        this.element.show();
    }
});
})(jQuery);