%PDF- %PDF-
Direktori : /home/opti/workflow/src/public/app-assets/js/scripts/ui/jquery-ui/ |
Current File : /home/opti/workflow/src/public/app-assets/js/scripts/ui/jquery-ui/autocomplete.js |
/*========================================================================================= File Name: autocomplete.js Description: jQuery UI autocomplete ---------------------------------------------------------------------------------------- Item Name: Modern Admin - Clean Bootstrap 4 Dashboard HTML Template Version: 1.0 Author: PIXINVENT Author URL: http://www.themeforest.net/user/pixinvent ==========================================================================================*/ $(document).ready(function(){ /************************************ * Auto Complete * ************************************/ var peopleTags = [ "Aaron", "Abel", "Bacon", "Barry", "Clancy", "Cornstalk", "Daniel", "David", "Edison", "Frank", "George", "Hamilton", "Irvine", "Jackson", "Kelly", "Lumb", "Magee", "Newton", "Olson", "Paul", "Quine", "Roy", "Smith", "Tony", "Young", "Zampa" ]; $( ".ac-default" ).autocomplete({ source: peopleTags }); // Accent Folding var names = ["Jörn Zaefferer", "Scott González", "John Resig"]; var accentMap = { "á": "a", "ö": "o" }; var normalize = function(term) { var ret = ""; for (var i = 0; i < term.length; i++) { ret += accentMap[term.charAt(i)] || term.charAt(i); } return ret; }; $(".ac-accent-folding").autocomplete({ source: function(request, response) { var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); response($.grep(names, function(value) { value = value.label || value.value || value; return matcher.test(value) || matcher.test(normalize(value)); })); } }); // Categories $.widget("custom.catcomplete", $.ui.autocomplete, { _create: function() { this._super(); this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); }, _renderMenu: function(ul, items) { var that = this, currentCategory = ""; $.each(items, function(index, item) { var li; if (item.category != currentCategory) { ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); currentCategory = item.category; } li = that._renderItemData(ul, item); if (item.category) { li.attr("aria-label", item.category + " : " + item.label); } }); } }); var data = [{ label: "anders", category: "" }, { label: "andreas", category: "" }, { label: "antal", category: "" }, { label: "annhhx10", category: "Products" }, { label: "annk K12", category: "Products" }, { label: "annttop C13", category: "Products" }, { label: "anders andersson", category: "People" }, { label: "andreas andersson", category: "People" }, { label: "andreas johnson", category: "People" }]; $(".ac-category").catcomplete({ delay: 0, source: data }); // Combobox $.widget("custom.combobox", { _create: function() { this.wrapper = $("<div>") .addClass("custom-combobox input-group") .insertAfter(this.element); // Add Search Icon and Toggel Button $('<div class="input-group-prepend"><span class="input-group-text"><i class="ft-search"></i></span></div>') .appendTo(this.wrapper); 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 form-control ui-widget ui-widget-content ui-state-default ui-corner-left") .autocomplete({ delay: 0, minLength: 0, source: $.proxy(this, "_source") }) .tooltip({ classes: { "ui-tooltip": "ui-state-highlight" } }); this._on(this.input, { autocompleteselect: function(event, ui) { ui.item.option.selected = true; this._trigger("select", event, { item: ui.item.option }); }, autocompletechange: "_removeIfInvalid" }); }, _createShowAllButton: function() { var input = this.input, wasOpen = false; $('<div class="input-group-prepend"><span class="input-group-text ac-toggle"><i class="ft-chevron-down"></i></span></div>') .attr("tabIndex", -1) .appendTo(this.wrapper) .removeClass("ui-corner-all") .addClass("custom-combobox-toggle ui-corner-right") .on("mousedown", function() { wasOpen = input.autocomplete("widget").is(":visible"); }) .on("click", function() { input.trigger("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 }; })); }, _removeIfInvalid: 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 if (valid) { return; } // Remove invalid value this.input .val("") .attr("title", value + " didn't match any item") .tooltip("open"); this.element.val(""); this._delay(function() { this.input.tooltip("close").attr("title", ""); }, 2500); this.input.autocomplete("instance").term = ""; }, _destroy: function() { this.wrapper.remove(); this.element.show(); } }); $(".ac-combobox").combobox(); // Custom Data & Display var projects = [{ value: "jquery", label: "jQuery", desc: "the write less, do more, JavaScript library", icon: "jquery_32x32.png" }, { value: "jquery-ui", label: "jQuery UI", desc: "the official user interface library for jQuery", icon: "jqueryui_32x32.png" }, { value: "sizzlejs", label: "Sizzle JS", desc: "a pure-JavaScript CSS selector engine", icon: "sizzlejs_32x32.png" }]; $(".ac-project").autocomplete({ minLength: 0, source: projects, focus: function(event, ui) { $(".ac-project").val(ui.item.label); return false; }, select: function(event, ui) { $(".ac-project").val(ui.item.label); $(".ac-project-id").val(ui.item.value); $(".ac-project-description").html(ui.item.desc); return false; } }) .autocomplete("instance")._renderItem = function(ul, item) { return $("<li>") .append("<div>" + item.label + "<br>" + item.desc + "</div>") .appendTo(ul); }; // Multiple Values function split(val) { return val.split(/,\s*/); } function extractLast(term) { return split(term).pop(); } $(".ac-multiple-values") // don't navigate away from the field on tab when selecting an item .on("keydown", function(event) { if (event.keyCode === $.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active) { event.preventDefault(); } }) .autocomplete({ minLength: 0, source: function(request, response) { // delegate back to autocomplete, but extract the last term response($.ui.autocomplete.filter( peopleTags, extractLast(request.term))); }, focus: function() { // prevent value inserted on focus return false; }, select: function(event, ui) { var terms = split(this.value); // remove the current input terms.pop(); // add the selected item terms.push(ui.item.value); // add placeholder to get the comma-and-space at the end terms.push(""); this.value = terms.join(", "); return false; } }); // Remote Datasource $(".ac-remote-datasource").autocomplete({ source: "../../../app-assets/data/jquery-ui/search.php", minLength: 2 }); // Remote with caching var cache = {}; $(".ac-remote-caching").autocomplete({ minLength: 2, source: function(request, response) { var term = request.term; if (term in cache) { response(cache[term]); return; } $.getJSON("../../../app-assets/data/jquery-ui/search.php", request, function(data, status, xhr) { cache[term] = data; response(data); }); } }); // Multiple Remote function split_r(val) { return val.split(/,\s*/); } function extractLast_r(term) { return split_r(term).pop(); } $(".ac-multiple-remote") // don't navigate away from the field on tab when selecting an item .on("keydown", function(event) { if (event.keyCode === $.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active) { event.preventDefault(); } }) .autocomplete({ source: function(request, response) { $.getJSON("../../../app-assets/data/jquery-ui/search.php", { term: extractLast_r(request.term) }, response); }, search: function() { // custom minLength var term = extractLast_r(this.value); if (term.length < 2) { return false; } }, focus: function() { // prevent value inserted on focus return false; }, select: function(event, ui) { var terms = split_r(this.value); // remove the current input terms.pop(); // add the selected item terms.push(ui.item.value); // add placeholder to get the comma-and-space at the end terms.push(""); this.value = terms.join(", "); return false; } }); // XML Data Pasing $.ajax({ url: "../../../app-assets/data/jquery-ui/london.xml", dataType: "xml", success: function(xmlResponse) { var data = $("geoname", xmlResponse).map(function() { return { value: $("name", this).text() + ", " + ($.trim($("countryName", this).text()) || "(unknown country)"), id: $("geonameId", this).text() }; }).get(); $(".ac-xml-data-parse").autocomplete({ source: data, minLength: 0, }); } }); });