|
| 1 | +<!doctype html> |
| 2 | + |
| 3 | +<html lang="en"> |
| 4 | +<head> |
| 5 | + <meta charset="utf-8"> |
| 6 | + |
| 7 | + <title></title> |
| 8 | + <meta name="description" content=""> |
| 9 | + <meta name="author" content=""> |
| 10 | + |
| 11 | + <link rel="stylesheet" href="../src/jquery.typeahead.css"> |
| 12 | + |
| 13 | + <script src="http://code.jquery.com/jquery-2.1.0.min.js"></script> |
| 14 | + <!--script src="../dist/jquery.typeahead.min.js"></script--> |
| 15 | + <script src="../src/jquery.typeahead.js"></script> |
| 16 | + |
| 17 | +</head> |
| 18 | +<body> |
| 19 | + |
| 20 | +<div style="width: 100%; max-width: 800px; margin: 0 auto;"> |
| 21 | + |
| 22 | + <h1>AsyncResult_v1 Demo</h1> |
| 23 | + |
| 24 | + <ul> |
| 25 | + <li> |
| 26 | + <a href="http://www.runningcoder.org/jquerytypeahead/documentation/">Documentation</a> |
| 27 | + </li> |
| 28 | + <li> |
| 29 | + <a href="http://www.runningcoder.org/jquerytypeahead/demo/">Demos</a> |
| 30 | + </li> |
| 31 | + </ul> |
| 32 | + |
| 33 | + <div class="js-result-container"></div> |
| 34 | + |
| 35 | + <form> |
| 36 | + <div class="typeahead__container"> |
| 37 | + <div class="typeahead__field"> |
| 38 | + <div class="typeahead__query"> |
| 39 | + <input class="js-typeahead" |
| 40 | + name="q" |
| 41 | + autofocus |
| 42 | + autocomplete="off"> |
| 43 | + </div> |
| 44 | + <div class="typeahead__button"> |
| 45 | + <button type="submit"> |
| 46 | + <span class="typeahead__search-icon"></span> |
| 47 | + </button> |
| 48 | + </div> |
| 49 | + </div> |
| 50 | + </div> |
| 51 | + </form> |
| 52 | + |
| 53 | + <script> |
| 54 | + |
| 55 | + var data = { |
| 56 | + countries: ["Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antigua and Barbuda", |
| 57 | + "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", |
| 58 | + "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", |
| 59 | + "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", "Bulgaria", "Burkina Faso", "Burma", |
| 60 | + "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Central African Republic", "Chad", |
| 61 | + "Chile", "China", "Colombia", "Comoros", "Congo, Democratic Republic", "Congo, Republic of the", |
| 62 | + "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", |
| 63 | + "Dominica", "Dominican Republic", "East Timor", "Ecuador", "Egypt", "El Salvador", |
| 64 | + "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Fiji", "Finland", "France", "Gabon", |
| 65 | + "Gambia", "Georgia", "Germany", "Ghana", "Greece", "Greenland", "Grenada", "Guatemala", "Guinea", |
| 66 | + "Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", |
| 67 | + "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", |
| 68 | + "Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait", "Kyrgyzstan", "Laos", |
| 69 | + "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", |
| 70 | + "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", |
| 71 | + "Mauritania", "Mauritius", "Mexico", "Micronesia", "Moldova", "Mongolia", "Morocco", "Monaco", |
| 72 | + "Mozambique", "Namibia", "Nauru", "Nepal", "Netherlands", "New Zealand", "Nicaragua", "Niger", |
| 73 | + "Nigeria", "Norway", "Oman", "Pakistan", "Panama", "Papua New Guinea", "Paraguay", "Peru", |
| 74 | + "Philippines", "Poland", "Portugal", "Romania", "Russia", "Rwanda", "Samoa", "San Marino", |
| 75 | + "Sao Tome", "Saudi Arabia", "Senegal", "Serbia and Montenegro", "Seychelles", "Sierra Leone", |
| 76 | + "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "Spain", |
| 77 | + "Sri Lanka", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", |
| 78 | + "Tajikistan", "Tanzania", "Thailand", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", |
| 79 | + "Turkmenistan", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", |
| 80 | + "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela", "Vietnam", "Yemen", "Zambia", "Zimbabwe"], |
| 81 | + capitals: ["Abu Dhabi", "Abuja", "Accra", "Adamstown", "Addis Ababa", "Algiers", "Alofi", "Amman", "Amsterdam", |
| 82 | + "Andorra la Vella", "Ankara", "Antananarivo", "Apia", "Ashgabat", "Asmara", "Astana", "Asunción", "Athens", |
| 83 | + "Avarua", "Baghdad", "Baku", "Bamako", "Bandar Seri Begawan", "Bangkok", "Bangui", "Banjul", "Basseterre", |
| 84 | + "Beijing", "Beirut", "Belgrade", "Belmopan", "Berlin", "Bern", "Bishkek", "Bissau", "Bogotá", "Brasília", |
| 85 | + "Bratislava", "Brazzaville", "Bridgetown", "Brussels", "Bucharest", "Budapest", "Buenos Aires", "Bujumbura", |
| 86 | + "Cairo", "Canberra", "Caracas", "Castries", "Cayenne", "Charlotte Amalie", "Chisinau", "Cockburn Town", |
| 87 | + "Conakry", "Copenhagen", "Dakar", "Damascus", "Dhaka", "Dili", "Djibouti", "Dodoma", "Doha", "Douglas", |
| 88 | + "Dublin", "Dushanbe", "Edinburgh of the Seven Seas", "El Aaiún", "Episkopi Cantonment", "Flying Fish Cove", |
| 89 | + "Freetown", "Funafuti", "Gaborone", "George Town", "Georgetown", "Georgetown", "Gibraltar", "King Edward Point", |
| 90 | + "Guatemala City", "Gustavia", "Hagåtña", "Hamilton", "Hanga Roa", "Hanoi", "Harare", "Hargeisa", "Havana", |
| 91 | + "Helsinki", "Honiara", "Islamabad", "Jakarta", "Jamestown", "Jerusalem", "Juba", "Kabul", "Kampala", |
| 92 | + "Kathmandu", "Khartoum", "Kiev", "Kigali", "Kingston", "Kingston", "Kingstown", "Kinshasa", "Kuala Lumpur", |
| 93 | + "Kuwait City", "Libreville", "Lilongwe", "Lima", "Lisbon", "Ljubljana", "Lomé", "London", "Luanda", "Lusaka", |
| 94 | + "Luxembourg", "Madrid", "Majuro", "Malabo", "Malé", "Managua", "Manama", "Manila", "Maputo", "Marigot", |
| 95 | + "Maseru", "Mata-Utu", "Mbabane Lobamba", "Melekeok Ngerulmud", "Mexico City", "Minsk", "Mogadishu", "Monaco", |
| 96 | + "Monrovia", "Montevideo", "Moroni", "Moscow", "Muscat", "Nairobi", "Nassau", "Naypyidaw", "N'Djamena", |
| 97 | + "New Delhi", "Niamey", "Nicosia", "Nicosia", "Nouakchott", "Nouméa", "Nukuʻalofa", "Nuuk", "Oranjestad", |
| 98 | + "Oslo", "Ottawa", "Ouagadougou", "Pago Pago", "Palikir", "Panama City", "Papeete", "Paramaribo", "Paris", |
| 99 | + "Philipsburg", "Phnom Penh", "Plymouth Brades Estate", "Podgorica Cetinje", "Port Louis", "Port Moresby", |
| 100 | + "Port Vila", "Port-au-Prince", "Port of Spain", "Porto-Novo Cotonou", "Prague", "Praia", "Cape Town", |
| 101 | + "Pristina", "Pyongyang", "Quito", "Rabat", "Reykjavík", "Riga", "Riyadh", "Road Town", "Rome", "Roseau", |
| 102 | + "Saipan", "San José", "San Juan", "San Marino", "San Salvador", "Sana'a", "Santiago", "Santo Domingo", |
| 103 | + "São Tomé", "Sarajevo", "Seoul", "Singapore", "Skopje", "Sofia", "Sri Jayawardenepura Kotte", "St. George's", |
| 104 | + "St. Helier", "St. John's", "St. Peter Port", "St. Pierre", "Stanley", "Stepanakert", "Stockholm", "Sucre", |
| 105 | + "Sukhumi", "Suva", "Taipei", "Tallinn", "Tarawa Atoll", "Tashkent", "Tbilisi", "Tegucigalpa", "Tehran", |
| 106 | + "Thimphu", "Tirana", "Tiraspol", "Tokyo", "Tórshavn", "Tripoli", "Tskhinvali", "Tunis", "Ulan Bator", "Vaduz", |
| 107 | + "Valletta", "The Valley", "Vatican City", "Victoria", "Vienna", "Vientiane", "Vilnius", "Warsaw", |
| 108 | + "Washington, D.C.", "Wellington", "West Island", "Willemstad", "Windhoek", "Yamoussoukro", "Yaoundé", "Yaren", |
| 109 | + "Yerevan", "Zagreb"] |
| 110 | + }; |
| 111 | + |
| 112 | + typeof $.typeahead === 'function' && $.typeahead({ |
| 113 | + input: ".js-typeahead", |
| 114 | + minLength: 1, |
| 115 | + order: "asc", |
| 116 | + group: true, |
| 117 | + maxItemPerGroup: 3, |
| 118 | + asyncResult: true, |
| 119 | + groupOrder: function (node, query, result, resultCount, resultCountPerGroup) { |
| 120 | + |
| 121 | + var scope = this, |
| 122 | + sortGroup = []; |
| 123 | + |
| 124 | + for (var i in result) { |
| 125 | + sortGroup.push({ |
| 126 | + group: i, |
| 127 | + length: result[i].length |
| 128 | + }); |
| 129 | + } |
| 130 | + |
| 131 | + sortGroup.sort( |
| 132 | + scope.helper.sort( |
| 133 | + ["length"], |
| 134 | + false, // false = desc, the most results on top |
| 135 | + function (a) { |
| 136 | + return a.toString().toUpperCase() |
| 137 | + } |
| 138 | + ) |
| 139 | + ); |
| 140 | + |
| 141 | + return $.map(sortGroup, function (val, i) { |
| 142 | + return val.group |
| 143 | + }); |
| 144 | + }, |
| 145 | + hint: true, |
| 146 | + dropdownFilter: "All", |
| 147 | + href: "https://en.wikipedia.org/?title={{display}}", |
| 148 | + template: "{{display}}, <small><em>{{group}}</em></small>", |
| 149 | + emptyTemplate: "no result for {{query}}", |
| 150 | + source: { |
| 151 | + user: { |
| 152 | + dynamic: true, |
| 153 | + template: "{{login}}, <small><em>{{group}}</em></small>", |
| 154 | + href: "https://www.github.com/{{username}}", |
| 155 | + data: [{ |
| 156 | + "id": 415849, |
| 157 | + "username": "an inserted user that is not inside the database", |
| 158 | + "avatar": "https://avatars3.githubusercontent.com/u/415849" |
| 159 | + }], |
| 160 | + display: ['login'], |
| 161 | + ajax: { |
| 162 | + url: "https://api.github.com/repos/running-coder/jquery-typeahead/contributors", |
| 163 | + } |
| 164 | + }, |
| 165 | + country: { |
| 166 | + data: data.countries |
| 167 | + }, |
| 168 | + capital: { |
| 169 | + data: function() { |
| 170 | + var deferred = $.Deferred(); |
| 171 | + // Gather your data, and resolve the deferred object with an array of objects |
| 172 | + // setTimeout is used only to show that the data is async |
| 173 | + setTimeout(function() { |
| 174 | + deferred.resolve(data.capitals); |
| 175 | + }, 3000); |
| 176 | + deferred.always(function() { |
| 177 | + console.log("yay! :D"); |
| 178 | + }); |
| 179 | + return deferred; |
| 180 | + } |
| 181 | + } |
| 182 | + }, |
| 183 | + callback: { |
| 184 | + onClickAfter: function (node, a, item, event) { |
| 185 | + event.preventDefault(); |
| 186 | + |
| 187 | + var r = confirm("You will be redirected to:\n" + item.href + "\n\nContinue?"); |
| 188 | + if (r == true) { |
| 189 | + window.open(item.href); |
| 190 | + } |
| 191 | + |
| 192 | + $('.js-result-container').text(''); |
| 193 | + |
| 194 | + }, |
| 195 | + onResult: function (node, query, obj, objCount) { |
| 196 | + |
| 197 | + console.log(objCount) |
| 198 | + |
| 199 | + var text = ""; |
| 200 | + if (query !== "") { |
| 201 | + text = objCount + ' elements matching "' + query + '"'; |
| 202 | + } |
| 203 | + $('.js-result-container').text(text); |
| 204 | + |
| 205 | + }, |
| 206 | + onLayoutBuiltBefore: function (node, query, result, resultHtmlList) { |
| 207 | + if (!resultHtmlList |
| 208 | + || !this.generateGroups.length |
| 209 | + || this.displayEmptyTemplate |
| 210 | + || this.generatedGroupCount === this.generateGroups.length |
| 211 | + ) return; |
| 212 | + |
| 213 | + |
| 214 | + this.generateGroups.forEach(function (group) { |
| 215 | + if (!resultHtmlList.find('[data-search-group="' + group + '"]').length) { |
| 216 | + resultHtmlList.append('<li class="typeahead__group" data-search-group="' + group + '">\ |
| 217 | + <a href="javascript:;" tabindex="-1">' + group + '</a>\ |
| 218 | + </li>\ |
| 219 | + <li class="typeahead__item" data-group="" data-index="-1">\ |
| 220 | + <span style="padding: 0.5rem 0.75rem;display: block;">Loading...</span>\ |
| 221 | + </li>' |
| 222 | + ); |
| 223 | + } |
| 224 | + }); |
| 225 | + |
| 226 | + return resultHtmlList; |
| 227 | + |
| 228 | + } |
| 229 | + }, |
| 230 | + debug: true |
| 231 | + }); |
| 232 | + |
| 233 | + </script> |
| 234 | + |
| 235 | +</div> |
| 236 | + |
| 237 | +</body> |
| 238 | +</html> |
0 commit comments