algoliasearch-rails 1.10.8 → 1.10.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +5 -0
- data/VERSION +1 -1
- data/algoliasearch-rails.gemspec +1 -1
- data/vendor/assets/javascripts/algolia/algoliasearch.js +109 -11
- data/vendor/assets/javascripts/algolia/algoliasearch.min.js +2 -2
- data/vendor/assets/javascripts/algolia/bloodhound.js +174 -131
- data/vendor/assets/javascripts/algolia/typeahead.bundle.js +271 -205
- data/vendor/assets/javascripts/algolia/typeahead.bundle.min.js +2 -2
- data/vendor/assets/javascripts/algolia/typeahead.jquery.js +210 -181
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5260f93c9b184b1ef9aba9eed21e5e19d9f09ec
|
4
|
+
data.tar.gz: e11ef1aa7a762ba4b3a5233a6f2a3bce16529267
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a87ae86c16239949462e96b9238fe243735c28f65de9266846df025ea3c77df2655260139a4f4f39675bd117dbd6158bcc41f1baed4666dff626c0a930a69d6
|
7
|
+
data.tar.gz: 080482e94c7469d023085f1d227d7485475cd49f7a7df0d7614b558a7bc0155a967806bf9ab003fb75570ddbabcb9b6b6b425bc135aabc9535fe0a050b81f156
|
data/ChangeLog
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.10.
|
1
|
+
1.10.9
|
data/algoliasearch-rails.gemspec
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
* THE SOFTWARE.
|
22
22
|
*/
|
23
23
|
|
24
|
-
var ALGOLIA_VERSION = '2.5.
|
24
|
+
var ALGOLIA_VERSION = '2.5.3';
|
25
25
|
|
26
26
|
/*
|
27
27
|
* Copyright (c) 2013 Algolia
|
@@ -238,15 +238,17 @@ AlgoliaSearch.prototype = {
|
|
238
238
|
callback: callback });
|
239
239
|
},
|
240
240
|
/*
|
241
|
-
* List all existing indexes
|
241
|
+
* List all existing indexes (paginated)
|
242
242
|
*
|
243
243
|
* @param callback the result callback with two arguments
|
244
244
|
* success: boolean set to true if the request was successfull
|
245
245
|
* content: the server answer with index list or error description if success is false.
|
246
|
+
* @param page The page to retrieve, starting at 0.
|
246
247
|
*/
|
247
|
-
listIndexes: function(callback) {
|
248
|
+
listIndexes: function(callback, page) {
|
249
|
+
var params = page ? '?page=' + page : '';
|
248
250
|
this._jsonRequest({ method: 'GET',
|
249
|
-
url: '/1/indexes
|
251
|
+
url: '/1/indexes' + params,
|
250
252
|
callback: callback });
|
251
253
|
},
|
252
254
|
|
@@ -427,10 +429,12 @@ AlgoliaSearch.prototype = {
|
|
427
429
|
sendQueriesBatch: function(callback, delay) {
|
428
430
|
var as = this;
|
429
431
|
var params = {requests: [], apiKey: this.apiKey, appID: this.applicationID};
|
430
|
-
if (this.userToken)
|
432
|
+
if (this.userToken) {
|
431
433
|
params['X-Algolia-UserToken'] = this.userToken;
|
432
|
-
|
434
|
+
}
|
435
|
+
if (this.tagFilters) {
|
433
436
|
params['X-Algolia-TagFilters'] = this.tagFilters;
|
437
|
+
}
|
434
438
|
for (var i = 0; i < as.batch.length; ++i) {
|
435
439
|
params.requests.push(as.batch[i]);
|
436
440
|
}
|
@@ -499,7 +503,7 @@ AlgoliaSearch.prototype = {
|
|
499
503
|
cache = opts.cache;
|
500
504
|
if (!this._isUndefined(cache[cacheID])) {
|
501
505
|
if (!this._isUndefined(callback)) {
|
502
|
-
callback(true, cache[cacheID]);
|
506
|
+
setTimeout(function () { callback(true, cache[cacheID]); }, 1);
|
503
507
|
}
|
504
508
|
return;
|
505
509
|
}
|
@@ -1187,10 +1191,12 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1187
1191
|
return;
|
1188
1192
|
}
|
1189
1193
|
var pObj = {params: params, apiKey: this.as.apiKey, appID: this.as.applicationID};
|
1190
|
-
if (this.as.tagFilters)
|
1194
|
+
if (this.as.tagFilters) {
|
1191
1195
|
pObj['X-Algolia-TagFilters'] = this.as.tagFilters;
|
1192
|
-
|
1196
|
+
}
|
1197
|
+
if (this.as.userToken) {
|
1193
1198
|
pObj['X-Algolia-UserToken'] = this.as.userToken;
|
1199
|
+
}
|
1194
1200
|
if (this.as.jsonp) {
|
1195
1201
|
this.as._jsonRequest({ cache: this.cache,
|
1196
1202
|
method: 'GET', jsonp: true,
|
@@ -1304,6 +1310,62 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1304
1310
|
this.disjunctiveRefinements = this.disjunctiveRefinements || {};
|
1305
1311
|
this._search();
|
1306
1312
|
},
|
1313
|
+
|
1314
|
+
/**
|
1315
|
+
* Remove all refinements (disjunctive + conjunctive)
|
1316
|
+
*/
|
1317
|
+
clearRefinements: function() {
|
1318
|
+
this.disjunctiveRefinements = {};
|
1319
|
+
this.refinements = {};
|
1320
|
+
},
|
1321
|
+
|
1322
|
+
/**
|
1323
|
+
* Ensure a facet refinement exists
|
1324
|
+
* @param {string} facet the facet to refine
|
1325
|
+
* @param {string} value the associated value
|
1326
|
+
*/
|
1327
|
+
addDisjunctiveRefine: function(facet, value) {
|
1328
|
+
this.disjunctiveRefinements = this.disjunctiveRefinements || {};
|
1329
|
+
this.disjunctiveRefinements[facet] = this.disjunctiveRefinements[facet] || {};
|
1330
|
+
this.disjunctiveRefinements[facet][value] = true;
|
1331
|
+
},
|
1332
|
+
|
1333
|
+
/**
|
1334
|
+
* Ensure a facet refinement does not exist
|
1335
|
+
* @param {string} facet the facet to refine
|
1336
|
+
* @param {string} value the associated value
|
1337
|
+
*/
|
1338
|
+
removeDisjunctiveRefine: function(facet, value) {
|
1339
|
+
this.disjunctiveRefinements = this.disjunctiveRefinements || {};
|
1340
|
+
this.disjunctiveRefinements[facet] = this.disjunctiveRefinements[facet] || {};
|
1341
|
+
try {
|
1342
|
+
delete this.disjunctiveRefinements[facet][value];
|
1343
|
+
} catch (e) {
|
1344
|
+
this.disjunctiveRefinements[facet][value] = undefined; // IE compat
|
1345
|
+
}
|
1346
|
+
},
|
1347
|
+
|
1348
|
+
/**
|
1349
|
+
* Ensure a facet refinement exists
|
1350
|
+
* @param {string} facet the facet to refine
|
1351
|
+
* @param {string} value the associated value
|
1352
|
+
*/
|
1353
|
+
addRefine: function(facet, value) {
|
1354
|
+
var refinement = facet + ':' + value;
|
1355
|
+
this.refinements = this.refinements || {};
|
1356
|
+
this.refinements[refinement] = true;
|
1357
|
+
},
|
1358
|
+
|
1359
|
+
/**
|
1360
|
+
* Ensure a facet refinement does not exist
|
1361
|
+
* @param {string} facet the facet to refine
|
1362
|
+
* @param {string} value the associated value
|
1363
|
+
*/
|
1364
|
+
removeRefine: function(facet, value) {
|
1365
|
+
var refinement = facet + ':' + value;
|
1366
|
+
this.refinements = this.refinements || {};
|
1367
|
+
this.refinements[refinement] = false;
|
1368
|
+
},
|
1307
1369
|
|
1308
1370
|
/**
|
1309
1371
|
* Toggle refinement state of a facet
|
@@ -1366,6 +1428,37 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1366
1428
|
}
|
1367
1429
|
},
|
1368
1430
|
|
1431
|
+
/**
|
1432
|
+
* Goto a page
|
1433
|
+
* @param {integer} page The page number
|
1434
|
+
*/
|
1435
|
+
gotoPage: function(page) {
|
1436
|
+
this._gotoPage(page);
|
1437
|
+
},
|
1438
|
+
|
1439
|
+
/**
|
1440
|
+
* Configure the page but do not trigger a reload
|
1441
|
+
* @param {integer} page The page number
|
1442
|
+
*/
|
1443
|
+
setPage: function(page) {
|
1444
|
+
this.page = page;
|
1445
|
+
},
|
1446
|
+
|
1447
|
+
/**
|
1448
|
+
* Configure the underlying index name
|
1449
|
+
* @param {string} name the index name
|
1450
|
+
*/
|
1451
|
+
setIndex: function(name) {
|
1452
|
+
this.index = name;
|
1453
|
+
},
|
1454
|
+
|
1455
|
+
/**
|
1456
|
+
* Get the underlying configured index name
|
1457
|
+
*/
|
1458
|
+
getIndex: function() {
|
1459
|
+
return this.index;
|
1460
|
+
},
|
1461
|
+
|
1369
1462
|
///////////// PRIVATE
|
1370
1463
|
|
1371
1464
|
/**
|
@@ -1394,6 +1487,7 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1394
1487
|
}
|
1395
1488
|
var aggregatedAnswer = content.results[0];
|
1396
1489
|
aggregatedAnswer.disjunctiveFacets = {};
|
1490
|
+
aggregatedAnswer.facetStats = {};
|
1397
1491
|
for (var i = 1; i < content.results.length; ++i) {
|
1398
1492
|
for (var facet in content.results[i].facets) {
|
1399
1493
|
aggregatedAnswer.disjunctiveFacets[facet] = content.results[i].facets[facet];
|
@@ -1405,6 +1499,10 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1405
1499
|
}
|
1406
1500
|
}
|
1407
1501
|
}
|
1502
|
+
for (var stats in content.results[i].facets_stats)
|
1503
|
+
{
|
1504
|
+
aggregatedAnswer.facetStats[stats] = content.results[i].facets_stats[stats];
|
1505
|
+
}
|
1408
1506
|
}
|
1409
1507
|
self.searchCallback(true, aggregatedAnswer);
|
1410
1508
|
});
|
@@ -1415,12 +1513,12 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1415
1513
|
* @return {hash}
|
1416
1514
|
*/
|
1417
1515
|
_getHitsSearchParams: function() {
|
1418
|
-
return extend({},
|
1516
|
+
return extend({}, {
|
1419
1517
|
hitsPerPage: this.options.hitsPerPage,
|
1420
1518
|
page: this.page,
|
1421
1519
|
facets: this.options.facets,
|
1422
1520
|
facetFilters: this._getFacetFilters()
|
1423
|
-
});
|
1521
|
+
}, this.searchParams);
|
1424
1522
|
},
|
1425
1523
|
|
1426
1524
|
/**
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/*!
|
2
|
-
* algoliasearch 2.5.
|
2
|
+
* algoliasearch 2.5.3
|
3
3
|
* https://github.com/algolia/algoliasearch-client-js
|
4
4
|
* Copyright 2014 Algolia SAS; Licensed MIT
|
5
5
|
*/
|
6
6
|
|
7
|
-
function AlgoliaExplainResults(a,b,c){function d(a,b){var c=[];if("object"==typeof a&&"matchedWords"in a&&"value"in a){for(var e=!1,f=0;f<a.matchedWords.length;++f){var g=a.matchedWords[f];g in b||(b[g]=1,e=!0)}e&&c.push(a.value)}else if("[object Array]"===Object.prototype.toString.call(a))for(var h=0;h<a.length;++h){var i=d(a[h],b);c=c.concat(i)}else if("object"==typeof a)for(var j in a)a.hasOwnProperty(j)&&(c=c.concat(d(a[j],b)));return c}function e(a,b,c){var f=a._highlightResult||a;if(-1===c.indexOf("."))return c in f?d(f[c],b):[];for(var g=c.split("."),h=f,i=0;i<g.length;++i){if("[object Array]"===Object.prototype.toString.call(h)){for(var j=[],k=0;k<h.length;++k)j=j.concat(e(h[k],b,g.slice(i).join(".")));return j}if(!(g[i]in h))return[];h=h[g[i]]}return d(h,b)}var f={},g={},h=e(a,g,b);if(f.title=h.length>0?h[0]:"",f.subtitles=[],"undefined"!=typeof c)for(var i=0;i<c.length;++i)for(var j=e(a,g,c[i]),k=0;k<j.length;++k)f.subtitles.push({attr:c[i],value:j[k]});return f}var ALGOLIA_VERSION="2.5.0",AlgoliaSearch=function(a,b,c,d,e){var f=this;this.applicationID=a,this.apiKey=b,this._isUndefined(e)&&(e=[a+"-1.algolia.io",a+"-2.algolia.io",a+"-3.algolia.io"]),this.hosts=[];for(var g=0;g<e.length;++g)Math.random()>.5&&this.hosts.reverse(),this._isUndefined(c)||null==c?this.hosts.push(("https:"==document.location.protocol?"https":"http")+"://"+e[g]):"https"===c||"HTTPS"===c?this.hosts.push("https://"+e[g]):this.hosts.push("http://"+e[g]);Math.random()>.5&&this.hosts.reverse(),this.jsonp=null,this.jsonpWait=0,this._jsonRequest({method:"GET",url:"/1/isalive",callback:function(a){f.jsonp=!a}}),this.extraHeaders=[]};AlgoliaSearch.prototype={deleteIndex:function(a,b){this._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(a),callback:b})},moveIndex:function(a,b,c){var d={operation:"move",destination:b};this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/operation",body:d,callback:c})},copyIndex:function(a,b,c){var d={operation:"copy",destination:b};this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/operation",body:d,callback:c})},getLogs:function(a,b,c){this._isUndefined(b)&&(b=0),this._isUndefined(c)&&(c=10),this._jsonRequest({method:"GET",url:"/1/logs?offset="+b+"&length="+c,callback:a})},listIndexes:function(a){this._jsonRequest({method:"GET",url:"/1/indexes/",callback:a})},initIndex:function(a){return new this.Index(this,a)},listUserKeys:function(a){this._jsonRequest({method:"GET",url:"/1/keys",callback:a})},getUserKeyACL:function(a,b){this._jsonRequest({method:"GET",url:"/1/keys/"+a,callback:b})},deleteUserKey:function(a,b){this._jsonRequest({method:"DELETE",url:"/1/keys/"+a,callback:b})},addUserKey:function(a,b){var c={};c.acl=a,this._jsonRequest({method:"POST",url:"/1/keys",body:c,callback:b})},addUserKeyWithValidity:function(a,b,c,d,e){var f=this,g={};g.acl=a,g.validity=b,g.maxQueriesPerIPPerHour=c,g.maxHitsPerQuery=d,this._jsonRequest({method:"POST",url:"/1/indexes/"+f.indexName+"/keys",body:g,callback:e})},setSecurityTags:function(a){if("[object Array]"===Object.prototype.toString.call(a)){for(var b=[],c=0;c<a.length;++c)if("[object Array]"===Object.prototype.toString.call(a[c])){for(var d=[],e=0;e<a[c].length;++e)d.push(a[c][e]);b.push("("+d.join(",")+")")}else b.push(a[c]);a=b.join(",")}this.tagFilters=a},setUserToken:function(a){this.userToken=a},startQueriesBatch:function(){this.batch=[]},addQueryInBatch:function(a,b,c){var d="query="+encodeURIComponent(b);this._isUndefined(c)||null==c||(d=this._getSearchParams(c,d)),this.batch.push({indexName:a,params:d})},clearCache:function(){this.cache={}},sendQueriesBatch:function(a,b){var c=this,d={requests:[],apiKey:this.apiKey,appID:this.applicationID};this.userToken&&(d["X-Algolia-UserToken"]=this.userToken),this.tagFilters&&(d["X-Algolia-TagFilters"]=this.tagFilters);for(var e=0;e<c.batch.length;++e)d.requests.push(c.batch[e]);if(window.clearTimeout(c.onDelayTrigger),!this._isUndefined(b)&&null!=b&&b>0){var f=window.setTimeout(function(){c._sendQueriesBatch(d,a)},b);c.onDelayTrigger=f}else this._sendQueriesBatch(d,a)},Index:function(a,b){this.indexName=b,this.as=a,this.typeAheadArgs=null,this.typeAheadValueOption=null},setExtraHeader:function(a,b){this.extraHeaders.push({key:a,value:b})},_sendQueriesBatch:function(a,b){if(null==this.jsonp){var c=this;return this._waitReady(function(){c._sendQueriesBatch(a,b)}),void 0}if(this.jsonp){for(var d="",e=0;e<a.requests.length;++e){var f="/1/indexes/"+encodeURIComponent(a.requests[e].indexName)+"?"+a.requests[e].params;d+=e+"="+encodeURIComponent(f)+"&"}this._jsonRequest({cache:this.cache,method:"GET",jsonp:!0,url:"/1/indexes/*",body:{params:d},callback:b})}else this._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/*/queries",body:a,callback:b})},_jsonRequest:function(a){var b=this,c=a.callback,d=null,e=a.url;if(this._isUndefined(a.body)||(e=a.url+"_body_"+JSON.stringify(a.body)),!this._isUndefined(a.cache)&&(d=a.cache,!this._isUndefined(d[e])))return this._isUndefined(c)||c(!0,d[e]),void 0;var f=function(g){var h=0;return b._isUndefined(g)||(h=g),b.hosts.length<=h?(b._isUndefined(c)||c(!1,{message:"Cannot contact server"}),void 0):(a.callback=function(g,i,j,k){i||b._isUndefined(k)||window.console&&console.log("Error: "+k.message),i&&!b._isUndefined(a.cache)&&(d[e]=k),!i&&g&&h+1<b.hosts.length?f(h+1):b._isUndefined(c)||c(i,k)},a.hostname=b.hosts[h],b._jsonRequestByHost(a),void 0)};f()},_jsonRequestByHost:function(a){var b=this,c=a.hostname+a.url;if(this.jsonp){if(!a.jsonp)return a.callback(!0,!1,null,{message:"Method "+a.method+" "+c+" is not supported by JSONP."}),void 0;this.jsonpCounter=this.jsonpCounter||0,this.jsonpCounter+=1;var d="algoliaJSONP_"+this.jsonpCounter;window[d]=function(b){a.callback(!1,!0,null,b);try{delete window[d]}catch(c){window[d]=void 0}};var e=document.createElement("script");e.type="text/javascript",e.src=c+"?callback="+d+","+this.applicationID+","+this.apiKey,a["X-Algolia-TagFilters"]&&(e.src+="&X-Algolia-TagFilters="+a["X-Algolia-TagFilters"]),a["X-Algolia-UserToken"]&&(e.src+="&X-Algolia-UserToken="+a["X-Algolia-UserToken"]),a.body&&a.body.params&&(e.src+="&"+a.body.params);var f=document.getElementsByTagName("head")[0];e.onerror=function(){a.callback(!0,!1,null,{message:"Failed to load JSONP script."}),f.removeChild(e);try{delete window[d]}catch(b){window[d]=void 0}};var g=!1;e.onload=e.onreadystatechange=function(){if(!(g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState)){if(g=!0,"undefined"==typeof window[d+"_loaded"]){a.callback(!0,!1,null,{message:"Failed to load JSONP script."});try{delete window[d]}catch(b){window[d]=void 0}}else try{delete window[d+"_loaded"]}catch(b){window[d+"_loaded"]=void 0}e.onload=e.onreadystatechange=null,f.removeChild(e)}},f.appendChild(e)}else{var h=null;this._isUndefined(a.body)||(h=JSON.stringify(a.body));var i=window.XMLHttpRequest?new XMLHttpRequest:{};if("withCredentials"in i){i.open(a.method,c,!0),i.setRequestHeader("X-Algolia-API-Key",this.apiKey),i.setRequestHeader("X-Algolia-Application-Id",this.applicationID);for(var j=0;j<this.extraHeaders.length;++j)i.setRequestHeader(this.extraHeaders[j].key,this.extraHeaders[j].value);null!=h&&i.setRequestHeader("Content-type","application/json")}else{if("undefined"==typeof XDomainRequest)return window.console&&console.log("Your browser is too old to support CORS requests"),a.callback(!1,!1,null,{message:"CORS not supported"}),void 0;i=new XDomainRequest,i.open(a.method,c)}i.send(h),i.onload=function(c){if(b._isUndefined(c)||null==c.target)a.callback(!1,!0,c,JSON.parse(i.responseText));else{var d=0===c.target.status||503===c.target.status,e=200===c.target.status||201===c.target.status;a.callback(d,e,c.target,null!=c.target.response?JSON.parse(c.target.response):null)}},i.onerror=function(b){a.callback(!0,!1,null,{message:"Could not connect to host",error:b})}}},_waitReady:function(a){null==this.jsonp&&(this.jsonpWait+=100,this.jsonpWait>2e3&&(this.jsonp=!0),setTimeout(a,100))},_getSearchParams:function(a,b){if(this._isUndefined(a)||null==a)return b;for(var c in a)null!=c&&a.hasOwnProperty(c)&&(b+=0===b.length?"?":"&",b+=c+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(a[c])?JSON.stringify(a[c]):a[c]));return b},_isUndefined:function(a){return void 0===a},applicationID:null,apiKey:null,tagFilters:null,userToken:null,hosts:[],cache:{},extraHeaders:[]},AlgoliaSearch.prototype.Index.prototype={clearCache:function(){this.cache={}},addObject:function(a,b,c){var d=this;this.as._isUndefined(c)?this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(d.indexName),body:a,callback:b}):this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(d.indexName)+"/"+encodeURIComponent(c),body:a,callback:b})},addObjects:function(a,b){for(var c=this,d={requests:[]},e=0;e<a.length;++e){var f={action:"addObject",body:a[e]};d.requests.push(f)}this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/batch",body:d,callback:b})},getObject:function(a,b,c){if(null==this.as.jsonp){var d=this;return this.as._waitReady(function(){d.getObject(a,b,c)}),void 0}var e=this,f="";if(!this.as._isUndefined(c)){f="?attributes=";for(var g=0;g<c.length;++g)0!==g&&(f+=","),f+=c[g]}this.as._jsonRequest({method:"GET",jsonp:!0,url:"/1/indexes/"+encodeURIComponent(e.indexName)+"/"+encodeURIComponent(a)+f,callback:b})},partialUpdateObject:function(a,b){var c=this;this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/"+encodeURIComponent(a.objectID)+"/partial",body:a,callback:b})},partialUpdateObjects:function(a,b){for(var c=this,d={requests:[]},e=0;e<a.length;++e){var f={action:"partialUpdateObject",objectID:a[e].objectID,body:a[e]};d.requests.push(f)}this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/batch",body:d,callback:b})},saveObject:function(a,b){var c=this;this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/"+encodeURIComponent(a.objectID),body:a,callback:b})},saveObjects:function(a,b){for(var c=this,d={requests:[]},e=0;e<a.length;++e){var f={action:"updateObject",objectID:a[e].objectID,body:a[e]};d.requests.push(f)}this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/batch",body:d,callback:b})},deleteObject:function(a,b){if(null==a||0===a.length)return b(!1,{message:"empty objectID"}),void 0;var c=this;this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/"+encodeURIComponent(a),callback:b})},search:function(a,b,c,d){var e=this,f="query="+encodeURIComponent(a);if(this.as._isUndefined(c)||null==c||(f=this.as._getSearchParams(c,f)),window.clearTimeout(e.onDelayTrigger),!this.as._isUndefined(d)&&null!=d&&d>0){var g=window.setTimeout(function(){e._search(f,b)},d);e.onDelayTrigger=g}else this._search(f,b)},browse:function(a,b,c){var d=this,e="?page="+a;_.isUndefined(c)||(e+="&hitsPerPage="+c),this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(d.indexName)+"/browse"+e,callback:b})},ttAdapter:function(a){var b=this;return function(c,d){b.search(c,function(a,b){a&&d(b.hits)},a)}},waitTask:function(a,b){var c=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/task/"+a,callback:function(d,e){d?"published"===e.status?b(!0,e):setTimeout(function(){c.waitTask(a,b)},100):b(!1,e)}})},clearIndex:function(a){var b=this;this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/clear",callback:a})},getSettings:function(a){var b=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/settings",callback:a})},setSettings:function(a,b){var c=this;this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/settings",body:a,callback:b})},listUserKeys:function(a){var b=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/keys",callback:a})},getUserKeyACL:function(a,b){var c=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys/"+a,callback:b})},deleteUserKey:function(a,b){var c=this;this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys/"+a,callback:b})},addUserKey:function(a,b){var c=this,d={};d.acl=a,this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys",body:d,callback:b})},addUserKeyWithValidity:function(a,b,c,d,e){var f=this,g={};g.acl=a,g.validity=b,g.maxQueriesPerIPPerHour=c,g.maxHitsPerQuery=d,this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(f.indexName)+"/keys",body:g,callback:e})},_search:function(a,b){if(null==this.as.jsonp){var c=this;return this.as._waitReady(function(){c._search(a,b)}),void 0}var d={params:a,apiKey:this.as.apiKey,appID:this.as.applicationID};this.as.tagFilters&&(d["X-Algolia-TagFilters"]=this.as.tagFilters),this.as.userToken&&(d["X-Algolia-UserToken"]=this.as.userToken),this.as.jsonp?this.as._jsonRequest({cache:this.cache,method:"GET",jsonp:!0,url:"/1/indexes/"+encodeURIComponent(this.indexName),body:d,callback:b}):this.as._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:d,callback:b})},as:null,indexName:null,cache:{},typeAheadArgs:null,typeAheadValueOption:null,emptyConstructor:function(){}},function(){var a=function(a){a=a||{};for(var b=1;b<arguments.length;b++)if(arguments[b])for(var c in arguments[b])arguments[b].hasOwnProperty(c)&&(a[c]=arguments[b][c]);return a};window.AlgoliaSearchHelper=function(b,c,d){var e={facets:[],disjunctiveFacets:[],hitsPerPage:20};this.init(b,c,a({},e,d))},AlgoliaSearchHelper.prototype={init:function(a,b,c){this.client=a,this.index=b,this.options=c,this.page=0,this.refinements={},this.disjunctiveRefinements={}},search:function(a,b,c){this.q=a,this.searchCallback=b,this.searchParams=c||{},this.page=this.page||0,this.refinements=this.refinements||{},this.disjunctiveRefinements=this.disjunctiveRefinements||{},this._search()},toggleRefine:function(a,b){for(var c=0;c<this.options.facets.length;++c)if(this.options.facets[c]==a){var d=a+":"+b;return this.refinements[d]=!this.refinements[d],this.page=0,this._search(),!0}this.disjunctiveRefinements[a]=this.disjunctiveRefinements[a]||{};for(var e=0;e<this.options.disjunctiveFacets.length;++e)if(this.options.disjunctiveFacets[e]==a)return this.disjunctiveRefinements[a][b]=!this.disjunctiveRefinements[a][b],this.page=0,this._search(),!0;return!1},isRefined:function(a,b){var c=a+":"+b;return this.refinements[c]?!0:this.disjunctiveRefinements[a]&&this.disjunctiveRefinements[a][b]?!0:!1},nextPage:function(){this._gotoPage(this.page+1)},previousPage:function(){this.page>0&&this._gotoPage(this.page-1)},_gotoPage:function(a){this.page=a,this._search()},_search:function(){this.client.startQueriesBatch(),this.client.addQueryInBatch(this.index,this.q,this._getHitsSearchParams());for(var a=0;a<this.options.disjunctiveFacets.length;++a)this.client.addQueryInBatch(this.index,this.q,this._getDisjunctiveFacetSearchParams(this.options.disjunctiveFacets[a]));var b=this;this.client.sendQueriesBatch(function(a,c){if(!a)return b.searchCallback(!1,c),void 0;var d=c.results[0];d.disjunctiveFacets={};for(var e=1;e<c.results.length;++e)for(var f in c.results[e].facets)if(d.disjunctiveFacets[f]=c.results[e].facets[f],b.disjunctiveRefinements[f])for(var g in b.disjunctiveRefinements[f])!d.disjunctiveFacets[f][g]&&b.disjunctiveRefinements[f][g]&&(d.disjunctiveFacets[f][g]=0);b.searchCallback(!0,d)})},_getHitsSearchParams:function(){return a({},this.searchParams,{hitsPerPage:this.options.hitsPerPage,page:this.page,facets:this.options.facets,facetFilters:this._getFacetFilters()})},_getDisjunctiveFacetSearchParams:function(b){return a({},this.searchParams,{hitsPerPage:1,page:0,facets:b,facetFilters:this._getFacetFilters(b)})},_getFacetFilters:function(a){var b=[];for(var c in this.refinements)this.refinements[c]&&b.push(c);for(var d in this.disjunctiveRefinements)if(d!=a){var e=[];for(var f in this.disjunctiveRefinements[d])this.disjunctiveRefinements[d][f]&&e.push(d+":"+f);e.length>0&&b.push(e)}return b}}}(),"object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(a){return 10>a?"0"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,g,h=gap,i=b[a];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(a)),"function"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,g=[],"[object Array]"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)g[c]=str(c,i)||"null";return e=0===g.length?"[]":gap?"[\n"+gap+g.join(",\n"+gap)+"\n"+h+"]":"["+g.join(",")+"]",gap=h,e}if(rep&&"object"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)"string"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));return e=0===g.length?"{}":gap?"{\n"+gap+g.join(",\n"+gap)+"\n"+h+"}":"{"+g.join(",")+"}",gap=h,e}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var cx,escapable,gap,indent,meta,rep;"function"!=typeof JSON.stringify&&(escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(a,b,c){var d;if(gap="",indent="","number"==typeof c)for(d=0;c>d;d+=1)indent+=" ";else"string"==typeof c&&(indent=c);if(rep=b,b&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw new Error("JSON.stringify");return str("",{"":a})}),"function"!=typeof JSON.parse&&(cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&"object"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),void 0!==d?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}();
|
7
|
+
function AlgoliaExplainResults(a,b,c){function d(a,b){var c=[];if("object"==typeof a&&"matchedWords"in a&&"value"in a){for(var e=!1,f=0;f<a.matchedWords.length;++f){var g=a.matchedWords[f];g in b||(b[g]=1,e=!0)}e&&c.push(a.value)}else if("[object Array]"===Object.prototype.toString.call(a))for(var h=0;h<a.length;++h){var i=d(a[h],b);c=c.concat(i)}else if("object"==typeof a)for(var j in a)a.hasOwnProperty(j)&&(c=c.concat(d(a[j],b)));return c}function e(a,b,c){var f=a._highlightResult||a;if(-1===c.indexOf("."))return c in f?d(f[c],b):[];for(var g=c.split("."),h=f,i=0;i<g.length;++i){if("[object Array]"===Object.prototype.toString.call(h)){for(var j=[],k=0;k<h.length;++k)j=j.concat(e(h[k],b,g.slice(i).join(".")));return j}if(!(g[i]in h))return[];h=h[g[i]]}return d(h,b)}var f={},g={},h=e(a,g,b);if(f.title=h.length>0?h[0]:"",f.subtitles=[],"undefined"!=typeof c)for(var i=0;i<c.length;++i)for(var j=e(a,g,c[i]),k=0;k<j.length;++k)f.subtitles.push({attr:c[i],value:j[k]});return f}var ALGOLIA_VERSION="2.5.3",AlgoliaSearch=function(a,b,c,d,e){var f=this;this.applicationID=a,this.apiKey=b,this._isUndefined(e)&&(e=[a+"-1.algolia.io",a+"-2.algolia.io",a+"-3.algolia.io"]),this.hosts=[];for(var g=0;g<e.length;++g)Math.random()>.5&&this.hosts.reverse(),this.hosts.push(this._isUndefined(c)||null==c?("https:"==document.location.protocol?"https":"http")+"://"+e[g]:"https"===c||"HTTPS"===c?"https://"+e[g]:"http://"+e[g]);Math.random()>.5&&this.hosts.reverse(),this.jsonp=null,this.jsonpWait=0,this._jsonRequest({method:"GET",url:"/1/isalive",callback:function(a){f.jsonp=!a}}),this.extraHeaders=[]};AlgoliaSearch.prototype={deleteIndex:function(a,b){this._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(a),callback:b})},moveIndex:function(a,b,c){var d={operation:"move",destination:b};this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/operation",body:d,callback:c})},copyIndex:function(a,b,c){var d={operation:"copy",destination:b};this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/operation",body:d,callback:c})},getLogs:function(a,b,c){this._isUndefined(b)&&(b=0),this._isUndefined(c)&&(c=10),this._jsonRequest({method:"GET",url:"/1/logs?offset="+b+"&length="+c,callback:a})},listIndexes:function(a,b){var c=b?"?page="+b:"";this._jsonRequest({method:"GET",url:"/1/indexes"+c,callback:a})},initIndex:function(a){return new this.Index(this,a)},listUserKeys:function(a){this._jsonRequest({method:"GET",url:"/1/keys",callback:a})},getUserKeyACL:function(a,b){this._jsonRequest({method:"GET",url:"/1/keys/"+a,callback:b})},deleteUserKey:function(a,b){this._jsonRequest({method:"DELETE",url:"/1/keys/"+a,callback:b})},addUserKey:function(a,b){var c={};c.acl=a,this._jsonRequest({method:"POST",url:"/1/keys",body:c,callback:b})},addUserKeyWithValidity:function(a,b,c,d,e){var f=this,g={};g.acl=a,g.validity=b,g.maxQueriesPerIPPerHour=c,g.maxHitsPerQuery=d,this._jsonRequest({method:"POST",url:"/1/indexes/"+f.indexName+"/keys",body:g,callback:e})},setSecurityTags:function(a){if("[object Array]"===Object.prototype.toString.call(a)){for(var b=[],c=0;c<a.length;++c)if("[object Array]"===Object.prototype.toString.call(a[c])){for(var d=[],e=0;e<a[c].length;++e)d.push(a[c][e]);b.push("("+d.join(",")+")")}else b.push(a[c]);a=b.join(",")}this.tagFilters=a},setUserToken:function(a){this.userToken=a},startQueriesBatch:function(){this.batch=[]},addQueryInBatch:function(a,b,c){var d="query="+encodeURIComponent(b);this._isUndefined(c)||null==c||(d=this._getSearchParams(c,d)),this.batch.push({indexName:a,params:d})},clearCache:function(){this.cache={}},sendQueriesBatch:function(a,b){var c=this,d={requests:[],apiKey:this.apiKey,appID:this.applicationID};this.userToken&&(d["X-Algolia-UserToken"]=this.userToken),this.tagFilters&&(d["X-Algolia-TagFilters"]=this.tagFilters);for(var e=0;e<c.batch.length;++e)d.requests.push(c.batch[e]);if(window.clearTimeout(c.onDelayTrigger),!this._isUndefined(b)&&null!=b&&b>0){var f=window.setTimeout(function(){c._sendQueriesBatch(d,a)},b);c.onDelayTrigger=f}else this._sendQueriesBatch(d,a)},Index:function(a,b){this.indexName=b,this.as=a,this.typeAheadArgs=null,this.typeAheadValueOption=null},setExtraHeader:function(a,b){this.extraHeaders.push({key:a,value:b})},_sendQueriesBatch:function(a,b){if(null==this.jsonp){var c=this;return void this._waitReady(function(){c._sendQueriesBatch(a,b)})}if(this.jsonp){for(var d="",e=0;e<a.requests.length;++e){var f="/1/indexes/"+encodeURIComponent(a.requests[e].indexName)+"?"+a.requests[e].params;d+=e+"="+encodeURIComponent(f)+"&"}this._jsonRequest({cache:this.cache,method:"GET",jsonp:!0,url:"/1/indexes/*",body:{params:d},callback:b})}else this._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/*/queries",body:a,callback:b})},_jsonRequest:function(a){var b=this,c=a.callback,d=null,e=a.url;if(this._isUndefined(a.body)||(e=a.url+"_body_"+JSON.stringify(a.body)),!this._isUndefined(a.cache)&&(d=a.cache,!this._isUndefined(d[e])))return void(this._isUndefined(c)||setTimeout(function(){c(!0,d[e])},1));var f=function(g){var h=0;return b._isUndefined(g)||(h=g),b.hosts.length<=h?void(b._isUndefined(c)||c(!1,{message:"Cannot contact server"})):(a.callback=function(g,i,j,k){i||b._isUndefined(k)||window.console&&console.log("Error: "+k.message),i&&!b._isUndefined(a.cache)&&(d[e]=k),!i&&g&&h+1<b.hosts.length?f(h+1):b._isUndefined(c)||c(i,k)},a.hostname=b.hosts[h],void b._jsonRequestByHost(a))};f()},_jsonRequestByHost:function(a){var b=this,c=a.hostname+a.url;if(this.jsonp){if(!a.jsonp)return void a.callback(!0,!1,null,{message:"Method "+a.method+" "+c+" is not supported by JSONP."});this.jsonpCounter=this.jsonpCounter||0,this.jsonpCounter+=1;var d="algoliaJSONP_"+this.jsonpCounter;window[d]=function(b){a.callback(!1,!0,null,b);try{delete window[d]}catch(c){window[d]=void 0}};var e=document.createElement("script");e.type="text/javascript",e.src=c+"?callback="+d+","+this.applicationID+","+this.apiKey,a["X-Algolia-TagFilters"]&&(e.src+="&X-Algolia-TagFilters="+a["X-Algolia-TagFilters"]),a["X-Algolia-UserToken"]&&(e.src+="&X-Algolia-UserToken="+a["X-Algolia-UserToken"]),a.body&&a.body.params&&(e.src+="&"+a.body.params);var f=document.getElementsByTagName("head")[0];e.onerror=function(){a.callback(!0,!1,null,{message:"Failed to load JSONP script."}),f.removeChild(e);try{delete window[d]}catch(b){window[d]=void 0}};var g=!1;e.onload=e.onreadystatechange=function(){if(!(g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState)){if(g=!0,"undefined"==typeof window[d+"_loaded"]){a.callback(!0,!1,null,{message:"Failed to load JSONP script."});try{delete window[d]}catch(b){window[d]=void 0}}else try{delete window[d+"_loaded"]}catch(b){window[d+"_loaded"]=void 0}e.onload=e.onreadystatechange=null,f.removeChild(e)}},f.appendChild(e)}else{var h=null;this._isUndefined(a.body)||(h=JSON.stringify(a.body));var i=window.XMLHttpRequest?new XMLHttpRequest:{};if("withCredentials"in i){i.open(a.method,c,!0),i.setRequestHeader("X-Algolia-API-Key",this.apiKey),i.setRequestHeader("X-Algolia-Application-Id",this.applicationID);for(var j=0;j<this.extraHeaders.length;++j)i.setRequestHeader(this.extraHeaders[j].key,this.extraHeaders[j].value);null!=h&&i.setRequestHeader("Content-type","application/json")}else{if("undefined"==typeof XDomainRequest)return window.console&&console.log("Your browser is too old to support CORS requests"),void a.callback(!1,!1,null,{message:"CORS not supported"});i=new XDomainRequest,i.open(a.method,c)}i.send(h),i.onload=function(c){if(b._isUndefined(c)||null==c.target)a.callback(!1,!0,c,JSON.parse(i.responseText));else{var d=0===c.target.status||503===c.target.status,e=200===c.target.status||201===c.target.status;a.callback(d,e,c.target,null!=c.target.response?JSON.parse(c.target.response):null)}},i.onerror=function(b){a.callback(!0,!1,null,{message:"Could not connect to host",error:b})}}},_waitReady:function(a){null==this.jsonp&&(this.jsonpWait+=100,this.jsonpWait>2e3&&(this.jsonp=!0),setTimeout(a,100))},_getSearchParams:function(a,b){if(this._isUndefined(a)||null==a)return b;for(var c in a)null!=c&&a.hasOwnProperty(c)&&(b+=0===b.length?"?":"&",b+=c+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(a[c])?JSON.stringify(a[c]):a[c]));return b},_isUndefined:function(a){return void 0===a},applicationID:null,apiKey:null,tagFilters:null,userToken:null,hosts:[],cache:{},extraHeaders:[]},AlgoliaSearch.prototype.Index.prototype={clearCache:function(){this.cache={}},addObject:function(a,b,c){var d=this;this.as._jsonRequest(this.as._isUndefined(c)?{method:"POST",url:"/1/indexes/"+encodeURIComponent(d.indexName),body:a,callback:b}:{method:"PUT",url:"/1/indexes/"+encodeURIComponent(d.indexName)+"/"+encodeURIComponent(c),body:a,callback:b})},addObjects:function(a,b){for(var c=this,d={requests:[]},e=0;e<a.length;++e){var f={action:"addObject",body:a[e]};d.requests.push(f)}this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/batch",body:d,callback:b})},getObject:function(a,b,c){if(null==this.as.jsonp){var d=this;return void this.as._waitReady(function(){d.getObject(a,b,c)})}var e=this,f="";if(!this.as._isUndefined(c)){f="?attributes=";for(var g=0;g<c.length;++g)0!==g&&(f+=","),f+=c[g]}this.as._jsonRequest({method:"GET",jsonp:!0,url:"/1/indexes/"+encodeURIComponent(e.indexName)+"/"+encodeURIComponent(a)+f,callback:b})},partialUpdateObject:function(a,b){var c=this;this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/"+encodeURIComponent(a.objectID)+"/partial",body:a,callback:b})},partialUpdateObjects:function(a,b){for(var c=this,d={requests:[]},e=0;e<a.length;++e){var f={action:"partialUpdateObject",objectID:a[e].objectID,body:a[e]};d.requests.push(f)}this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/batch",body:d,callback:b})},saveObject:function(a,b){var c=this;this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/"+encodeURIComponent(a.objectID),body:a,callback:b})},saveObjects:function(a,b){for(var c=this,d={requests:[]},e=0;e<a.length;++e){var f={action:"updateObject",objectID:a[e].objectID,body:a[e]};d.requests.push(f)}this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/batch",body:d,callback:b})},deleteObject:function(a,b){if(null==a||0===a.length)return void b(!1,{message:"empty objectID"});var c=this;this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/"+encodeURIComponent(a),callback:b})},search:function(a,b,c,d){var e=this,f="query="+encodeURIComponent(a);if(this.as._isUndefined(c)||null==c||(f=this.as._getSearchParams(c,f)),window.clearTimeout(e.onDelayTrigger),!this.as._isUndefined(d)&&null!=d&&d>0){var g=window.setTimeout(function(){e._search(f,b)},d);e.onDelayTrigger=g}else this._search(f,b)},browse:function(a,b,c){var d=this,e="?page="+a;_.isUndefined(c)||(e+="&hitsPerPage="+c),this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(d.indexName)+"/browse"+e,callback:b})},ttAdapter:function(a){var b=this;return function(c,d){b.search(c,function(a,b){a&&d(b.hits)},a)}},waitTask:function(a,b){var c=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/task/"+a,callback:function(d,e){d?"published"===e.status?b(!0,e):setTimeout(function(){c.waitTask(a,b)},100):b(!1,e)}})},clearIndex:function(a){var b=this;this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/clear",callback:a})},getSettings:function(a){var b=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/settings",callback:a})},setSettings:function(a,b){var c=this;this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/settings",body:a,callback:b})},listUserKeys:function(a){var b=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/keys",callback:a})},getUserKeyACL:function(a,b){var c=this;this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys/"+a,callback:b})},deleteUserKey:function(a,b){var c=this;this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys/"+a,callback:b})},addUserKey:function(a,b){var c=this,d={};d.acl=a,this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys",body:d,callback:b})},addUserKeyWithValidity:function(a,b,c,d,e){var f=this,g={};g.acl=a,g.validity=b,g.maxQueriesPerIPPerHour=c,g.maxHitsPerQuery=d,this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(f.indexName)+"/keys",body:g,callback:e})},_search:function(a,b){if(null==this.as.jsonp){var c=this;return void this.as._waitReady(function(){c._search(a,b)})}var d={params:a,apiKey:this.as.apiKey,appID:this.as.applicationID};this.as.tagFilters&&(d["X-Algolia-TagFilters"]=this.as.tagFilters),this.as.userToken&&(d["X-Algolia-UserToken"]=this.as.userToken),this.as._jsonRequest(this.as.jsonp?{cache:this.cache,method:"GET",jsonp:!0,url:"/1/indexes/"+encodeURIComponent(this.indexName),body:d,callback:b}:{cache:this.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:d,callback:b})},as:null,indexName:null,cache:{},typeAheadArgs:null,typeAheadValueOption:null,emptyConstructor:function(){}},function(){var a=function(a){a=a||{};for(var b=1;b<arguments.length;b++)if(arguments[b])for(var c in arguments[b])arguments[b].hasOwnProperty(c)&&(a[c]=arguments[b][c]);return a};window.AlgoliaSearchHelper=function(b,c,d){var e={facets:[],disjunctiveFacets:[],hitsPerPage:20};this.init(b,c,a({},e,d))},AlgoliaSearchHelper.prototype={init:function(a,b,c){this.client=a,this.index=b,this.options=c,this.page=0,this.refinements={},this.disjunctiveRefinements={}},search:function(a,b,c){this.q=a,this.searchCallback=b,this.searchParams=c||{},this.page=this.page||0,this.refinements=this.refinements||{},this.disjunctiveRefinements=this.disjunctiveRefinements||{},this._search()},clearRefinements:function(){this.disjunctiveRefinements={},this.refinements={}},addDisjunctiveRefine:function(a,b){this.disjunctiveRefinements=this.disjunctiveRefinements||{},this.disjunctiveRefinements[a]=this.disjunctiveRefinements[a]||{},this.disjunctiveRefinements[a][b]=!0},removeDisjunctiveRefine:function(a,b){this.disjunctiveRefinements=this.disjunctiveRefinements||{},this.disjunctiveRefinements[a]=this.disjunctiveRefinements[a]||{};try{delete this.disjunctiveRefinements[a][b]}catch(c){this.disjunctiveRefinements[a][b]=void 0}},addRefine:function(a,b){var c=a+":"+b;this.refinements=this.refinements||{},this.refinements[c]=!0},removeRefine:function(a,b){var c=a+":"+b;this.refinements=this.refinements||{},this.refinements[c]=!1},toggleRefine:function(a,b){for(var c=0;c<this.options.facets.length;++c)if(this.options.facets[c]==a){var d=a+":"+b;return this.refinements[d]=!this.refinements[d],this.page=0,this._search(),!0}this.disjunctiveRefinements[a]=this.disjunctiveRefinements[a]||{};for(var e=0;e<this.options.disjunctiveFacets.length;++e)if(this.options.disjunctiveFacets[e]==a)return this.disjunctiveRefinements[a][b]=!this.disjunctiveRefinements[a][b],this.page=0,this._search(),!0;return!1},isRefined:function(a,b){var c=a+":"+b;return this.refinements[c]?!0:this.disjunctiveRefinements[a]&&this.disjunctiveRefinements[a][b]?!0:!1},nextPage:function(){this._gotoPage(this.page+1)},previousPage:function(){this.page>0&&this._gotoPage(this.page-1)},gotoPage:function(a){this._gotoPage(a)},setPage:function(a){this.page=a},setIndex:function(a){this.index=a},getIndex:function(){return this.index},_gotoPage:function(a){this.page=a,this._search()},_search:function(){this.client.startQueriesBatch(),this.client.addQueryInBatch(this.index,this.q,this._getHitsSearchParams());for(var a=0;a<this.options.disjunctiveFacets.length;++a)this.client.addQueryInBatch(this.index,this.q,this._getDisjunctiveFacetSearchParams(this.options.disjunctiveFacets[a]));var b=this;this.client.sendQueriesBatch(function(a,c){if(!a)return void b.searchCallback(!1,c);var d=c.results[0];d.disjunctiveFacets={},d.facetStats={};for(var e=1;e<c.results.length;++e){for(var f in c.results[e].facets)if(d.disjunctiveFacets[f]=c.results[e].facets[f],b.disjunctiveRefinements[f])for(var g in b.disjunctiveRefinements[f])!d.disjunctiveFacets[f][g]&&b.disjunctiveRefinements[f][g]&&(d.disjunctiveFacets[f][g]=0);for(var h in c.results[e].facets_stats)d.facetStats[h]=c.results[e].facets_stats[h]}b.searchCallback(!0,d)})},_getHitsSearchParams:function(){return a({},{hitsPerPage:this.options.hitsPerPage,page:this.page,facets:this.options.facets,facetFilters:this._getFacetFilters()},this.searchParams)},_getDisjunctiveFacetSearchParams:function(b){return a({},this.searchParams,{hitsPerPage:1,page:0,facets:b,facetFilters:this._getFacetFilters(b)})},_getFacetFilters:function(a){var b=[];for(var c in this.refinements)this.refinements[c]&&b.push(c);for(var d in this.disjunctiveRefinements)if(d!=a){var e=[];for(var f in this.disjunctiveRefinements[d])this.disjunctiveRefinements[d][f]&&e.push(d+":"+f);e.length>0&&b.push(e)}return b}}}(),"object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(a){return 10>a?"0"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,g,h=gap,i=b[a];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(a)),"function"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,g=[],"[object Array]"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)g[c]=str(c,i)||"null";return e=0===g.length?"[]":gap?"[\n"+gap+g.join(",\n"+gap)+"\n"+h+"]":"["+g.join(",")+"]",gap=h,e}if(rep&&"object"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)"string"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&g.push(quote(d)+(gap?": ":":")+e));return e=0===g.length?"{}":gap?"{\n"+gap+g.join(",\n"+gap)+"\n"+h+"}":"{"+g.join(",")+"}",gap=h,e}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var cx,escapable,gap,indent,meta,rep;"function"!=typeof JSON.stringify&&(escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(a,b,c){var d;if(gap="",indent="","number"==typeof c)for(d=0;c>d;d+=1)indent+=" ";else"string"==typeof c&&(indent=c);if(rep=b,b&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw new Error("JSON.stringify");return str("",{"":a})}),"function"!=typeof JSON.parse&&(cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&"object"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),void 0!==d?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}();
|
@@ -1,127 +1,134 @@
|
|
1
1
|
/*!
|
2
|
-
* typeahead.js 0.10.
|
2
|
+
* typeahead.js 0.10.4
|
3
3
|
* https://github.com/twitter/typeahead.js
|
4
4
|
* Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT
|
5
5
|
*/
|
6
6
|
|
7
7
|
(function($) {
|
8
|
-
var _ = {
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
var result = true;
|
41
|
-
if (!obj) {
|
42
|
-
return result;
|
43
|
-
}
|
44
|
-
$.each(obj, function(key, val) {
|
45
|
-
if (!(result = test.call(null, val, key, obj))) {
|
46
|
-
return false;
|
8
|
+
var _ = function() {
|
9
|
+
"use strict";
|
10
|
+
return {
|
11
|
+
isMsie: function() {
|
12
|
+
return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
|
13
|
+
},
|
14
|
+
isBlankString: function(str) {
|
15
|
+
return !str || /^\s*$/.test(str);
|
16
|
+
},
|
17
|
+
escapeRegExChars: function(str) {
|
18
|
+
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
|
19
|
+
},
|
20
|
+
isString: function(obj) {
|
21
|
+
return typeof obj === "string";
|
22
|
+
},
|
23
|
+
isNumber: function(obj) {
|
24
|
+
return typeof obj === "number";
|
25
|
+
},
|
26
|
+
isArray: $.isArray,
|
27
|
+
isFunction: $.isFunction,
|
28
|
+
isObject: $.isPlainObject,
|
29
|
+
isUndefined: function(obj) {
|
30
|
+
return typeof obj === "undefined";
|
31
|
+
},
|
32
|
+
toStr: function toStr(s) {
|
33
|
+
return _.isUndefined(s) || s === null ? "" : s + "";
|
34
|
+
},
|
35
|
+
bind: $.proxy,
|
36
|
+
each: function(collection, cb) {
|
37
|
+
$.each(collection, reverseArgs);
|
38
|
+
function reverseArgs(index, value) {
|
39
|
+
return cb(value, index);
|
47
40
|
}
|
48
|
-
}
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
}
|
56
|
-
$.each(obj, function(key, val) {
|
57
|
-
if (result = test.call(null, val, key, obj)) {
|
58
|
-
return false;
|
41
|
+
},
|
42
|
+
map: $.map,
|
43
|
+
filter: $.grep,
|
44
|
+
every: function(obj, test) {
|
45
|
+
var result = true;
|
46
|
+
if (!obj) {
|
47
|
+
return result;
|
59
48
|
}
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
},
|
76
|
-
defer: function(fn) {
|
77
|
-
setTimeout(fn, 0);
|
78
|
-
},
|
79
|
-
debounce: function(func, wait, immediate) {
|
80
|
-
var timeout, result;
|
81
|
-
return function() {
|
82
|
-
var context = this, args = arguments, later, callNow;
|
83
|
-
later = function() {
|
84
|
-
timeout = null;
|
85
|
-
if (!immediate) {
|
86
|
-
result = func.apply(context, args);
|
49
|
+
$.each(obj, function(key, val) {
|
50
|
+
if (!(result = test.call(null, val, key, obj))) {
|
51
|
+
return false;
|
52
|
+
}
|
53
|
+
});
|
54
|
+
return !!result;
|
55
|
+
},
|
56
|
+
some: function(obj, test) {
|
57
|
+
var result = false;
|
58
|
+
if (!obj) {
|
59
|
+
return result;
|
60
|
+
}
|
61
|
+
$.each(obj, function(key, val) {
|
62
|
+
if (result = test.call(null, val, key, obj)) {
|
63
|
+
return false;
|
87
64
|
}
|
65
|
+
});
|
66
|
+
return !!result;
|
67
|
+
},
|
68
|
+
mixin: $.extend,
|
69
|
+
getUniqueId: function() {
|
70
|
+
var counter = 0;
|
71
|
+
return function() {
|
72
|
+
return counter++;
|
88
73
|
};
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
74
|
+
}(),
|
75
|
+
templatify: function templatify(obj) {
|
76
|
+
return $.isFunction(obj) ? obj : template;
|
77
|
+
function template() {
|
78
|
+
return String(obj);
|
94
79
|
}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
if (remaining <= 0) {
|
80
|
+
},
|
81
|
+
defer: function(fn) {
|
82
|
+
setTimeout(fn, 0);
|
83
|
+
},
|
84
|
+
debounce: function(func, wait, immediate) {
|
85
|
+
var timeout, result;
|
86
|
+
return function() {
|
87
|
+
var context = this, args = arguments, later, callNow;
|
88
|
+
later = function() {
|
89
|
+
timeout = null;
|
90
|
+
if (!immediate) {
|
91
|
+
result = func.apply(context, args);
|
92
|
+
}
|
93
|
+
};
|
94
|
+
callNow = immediate && !timeout;
|
111
95
|
clearTimeout(timeout);
|
96
|
+
timeout = setTimeout(later, wait);
|
97
|
+
if (callNow) {
|
98
|
+
result = func.apply(context, args);
|
99
|
+
}
|
100
|
+
return result;
|
101
|
+
};
|
102
|
+
},
|
103
|
+
throttle: function(func, wait) {
|
104
|
+
var context, args, timeout, result, previous, later;
|
105
|
+
previous = 0;
|
106
|
+
later = function() {
|
107
|
+
previous = new Date();
|
112
108
|
timeout = null;
|
113
|
-
previous = now;
|
114
109
|
result = func.apply(context, args);
|
115
|
-
}
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
110
|
+
};
|
111
|
+
return function() {
|
112
|
+
var now = new Date(), remaining = wait - (now - previous);
|
113
|
+
context = this;
|
114
|
+
args = arguments;
|
115
|
+
if (remaining <= 0) {
|
116
|
+
clearTimeout(timeout);
|
117
|
+
timeout = null;
|
118
|
+
previous = now;
|
119
|
+
result = func.apply(context, args);
|
120
|
+
} else if (!timeout) {
|
121
|
+
timeout = setTimeout(later, remaining);
|
122
|
+
}
|
123
|
+
return result;
|
124
|
+
};
|
125
|
+
},
|
126
|
+
noop: function() {}
|
127
|
+
};
|
128
|
+
}();
|
129
|
+
var VERSION = "0.10.4";
|
130
|
+
var tokenizers = function() {
|
131
|
+
"use strict";
|
125
132
|
return {
|
126
133
|
nonword: nonword,
|
127
134
|
whitespace: whitespace,
|
@@ -130,26 +137,35 @@
|
|
130
137
|
whitespace: getObjTokenizer(whitespace)
|
131
138
|
}
|
132
139
|
};
|
133
|
-
function whitespace(
|
134
|
-
|
140
|
+
function whitespace(str) {
|
141
|
+
str = _.toStr(str);
|
142
|
+
return str ? str.split(/\s+/) : [];
|
135
143
|
}
|
136
|
-
function nonword(
|
137
|
-
|
144
|
+
function nonword(str) {
|
145
|
+
str = _.toStr(str);
|
146
|
+
return str ? str.split(/\W+/) : [];
|
138
147
|
}
|
139
148
|
function getObjTokenizer(tokenizer) {
|
140
|
-
return function setKey(
|
149
|
+
return function setKey() {
|
150
|
+
var args = [].slice.call(arguments, 0);
|
141
151
|
return function tokenize(o) {
|
142
|
-
|
152
|
+
var tokens = [];
|
153
|
+
_.each(args, function(k) {
|
154
|
+
tokens = tokens.concat(tokenizer(_.toStr(o[k])));
|
155
|
+
});
|
156
|
+
return tokens;
|
143
157
|
};
|
144
158
|
};
|
145
159
|
}
|
146
160
|
}();
|
147
161
|
var LruCache = function() {
|
162
|
+
"use strict";
|
148
163
|
function LruCache(maxSize) {
|
149
|
-
this.maxSize = maxSize
|
150
|
-
this.
|
151
|
-
this.
|
152
|
-
|
164
|
+
this.maxSize = _.isNumber(maxSize) ? maxSize : 100;
|
165
|
+
this.reset();
|
166
|
+
if (this.maxSize <= 0) {
|
167
|
+
this.set = this.get = $.noop;
|
168
|
+
}
|
153
169
|
}
|
154
170
|
_.mixin(LruCache.prototype, {
|
155
171
|
set: function set(key, val) {
|
@@ -174,6 +190,11 @@
|
|
174
190
|
this.list.moveToFront(node);
|
175
191
|
return node.val;
|
176
192
|
}
|
193
|
+
},
|
194
|
+
reset: function reset() {
|
195
|
+
this.size = 0;
|
196
|
+
this.hash = {};
|
197
|
+
this.list = new List();
|
177
198
|
}
|
178
199
|
});
|
179
200
|
function List() {
|
@@ -205,6 +226,7 @@
|
|
205
226
|
return LruCache;
|
206
227
|
}();
|
207
228
|
var PersistentStorage = function() {
|
229
|
+
"use strict";
|
208
230
|
var ls, methods;
|
209
231
|
try {
|
210
232
|
ls = window.localStorage;
|
@@ -216,7 +238,7 @@
|
|
216
238
|
function PersistentStorage(namespace) {
|
217
239
|
this.prefix = [ "__", namespace, "__" ].join("");
|
218
240
|
this.ttlKey = "__ttl__";
|
219
|
-
this.keyMatcher = new RegExp("^" + this.prefix);
|
241
|
+
this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));
|
220
242
|
}
|
221
243
|
if (ls && window.JSON) {
|
222
244
|
methods = {
|
@@ -284,21 +306,28 @@
|
|
284
306
|
}
|
285
307
|
}();
|
286
308
|
var Transport = function() {
|
287
|
-
|
309
|
+
"use strict";
|
310
|
+
var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);
|
288
311
|
function Transport(o) {
|
289
312
|
o = o || {};
|
313
|
+
this.cancelled = false;
|
314
|
+
this.lastUrl = null;
|
290
315
|
this._send = o.transport ? callbackToDeferred(o.transport) : $.ajax;
|
291
316
|
this._get = o.rateLimiter ? o.rateLimiter(this._get) : this._get;
|
317
|
+
this._cache = o.cache === false ? new LruCache(0) : sharedCache;
|
292
318
|
}
|
293
319
|
Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {
|
294
320
|
maxPendingRequests = num;
|
295
321
|
};
|
296
|
-
Transport.resetCache = function
|
297
|
-
|
322
|
+
Transport.resetCache = function resetCache() {
|
323
|
+
sharedCache.reset();
|
298
324
|
};
|
299
325
|
_.mixin(Transport.prototype, {
|
300
326
|
_get: function(url, o, cb) {
|
301
327
|
var that = this, jqXhr;
|
328
|
+
if (this.cancelled || url !== this.lastUrl) {
|
329
|
+
return;
|
330
|
+
}
|
302
331
|
if (jqXhr = pendingRequests[url]) {
|
303
332
|
jqXhr.done(done).fail(fail);
|
304
333
|
} else if (pendingRequestsCount < maxPendingRequests) {
|
@@ -309,7 +338,7 @@
|
|
309
338
|
}
|
310
339
|
function done(resp) {
|
311
340
|
cb && cb(null, resp);
|
312
|
-
|
341
|
+
that._cache.set(url, resp);
|
313
342
|
}
|
314
343
|
function fail() {
|
315
344
|
cb && cb(true);
|
@@ -329,7 +358,9 @@
|
|
329
358
|
cb = o;
|
330
359
|
o = {};
|
331
360
|
}
|
332
|
-
|
361
|
+
this.cancelled = false;
|
362
|
+
this.lastUrl = url;
|
363
|
+
if (resp = this._cache.get(url)) {
|
333
364
|
_.defer(function() {
|
334
365
|
cb && cb(null, resp);
|
335
366
|
});
|
@@ -337,6 +368,9 @@
|
|
337
368
|
this._get(url, o, cb);
|
338
369
|
}
|
339
370
|
return !!resp;
|
371
|
+
},
|
372
|
+
cancel: function() {
|
373
|
+
this.cancelled = true;
|
340
374
|
}
|
341
375
|
});
|
342
376
|
return Transport;
|
@@ -359,6 +393,7 @@
|
|
359
393
|
}
|
360
394
|
}();
|
361
395
|
var SearchIndex = function() {
|
396
|
+
"use strict";
|
362
397
|
function SearchIndex(o) {
|
363
398
|
o = o || {};
|
364
399
|
if (!o.datumTokenizer || !o.queryTokenizer) {
|
@@ -445,7 +480,7 @@
|
|
445
480
|
}
|
446
481
|
function unique(array) {
|
447
482
|
var seen = {}, uniques = [];
|
448
|
-
for (var i = 0
|
483
|
+
for (var i = 0, len = array.length; i < len; i++) {
|
449
484
|
if (!seen[array[i]]) {
|
450
485
|
seen[array[i]] = true;
|
451
486
|
uniques.push(array[i]);
|
@@ -457,7 +492,8 @@
|
|
457
492
|
var ai = 0, bi = 0, intersection = [];
|
458
493
|
arrayA = arrayA.sort(compare);
|
459
494
|
arrayB = arrayB.sort(compare);
|
460
|
-
|
495
|
+
var lenArrayA = arrayA.length, lenArrayB = arrayB.length;
|
496
|
+
while (ai < lenArrayA && bi < lenArrayB) {
|
461
497
|
if (arrayA[ai] < arrayB[bi]) {
|
462
498
|
ai++;
|
463
499
|
} else if (arrayA[ai] > arrayB[bi]) {
|
@@ -475,6 +511,7 @@
|
|
475
511
|
}
|
476
512
|
}();
|
477
513
|
var oParser = function() {
|
514
|
+
"use strict";
|
478
515
|
return {
|
479
516
|
local: getLocal,
|
480
517
|
prefetch: getPrefetch,
|
@@ -508,6 +545,7 @@
|
|
508
545
|
var remote, defaults;
|
509
546
|
defaults = {
|
510
547
|
url: null,
|
548
|
+
cache: true,
|
511
549
|
wildcard: "%QUERY",
|
512
550
|
replace: null,
|
513
551
|
rateLimitBy: "debounce",
|
@@ -542,6 +580,7 @@
|
|
542
580
|
}
|
543
581
|
}();
|
544
582
|
(function(root) {
|
583
|
+
"use strict";
|
545
584
|
var old, keys;
|
546
585
|
old = root.Bloodhound;
|
547
586
|
keys = {
|
@@ -590,6 +629,9 @@
|
|
590
629
|
},
|
591
630
|
_getFromRemote: function getFromRemote(query, cb) {
|
592
631
|
var that = this, url, uriEncodedQuery;
|
632
|
+
if (!this.transport) {
|
633
|
+
return;
|
634
|
+
}
|
593
635
|
query = query || "";
|
594
636
|
uriEncodedQuery = encodeURIComponent(query);
|
595
637
|
url = this.remote.replace ? this.remote.replace(this.remote.url, query) : this.remote.url.replace(this.remote.wildcard, uriEncodedQuery);
|
@@ -598,6 +640,9 @@
|
|
598
640
|
err ? cb([]) : cb(that.remote.filter ? that.remote.filter(resp) : resp);
|
599
641
|
}
|
600
642
|
},
|
643
|
+
_cancelLastRemoteRequest: function cancelLastRemoteRequest() {
|
644
|
+
this.transport && this.transport.cancel();
|
645
|
+
},
|
601
646
|
_saveToStorage: function saveToStorage(data, thumbprint, ttl) {
|
602
647
|
if (this.storage) {
|
603
648
|
this.storage.set(keys.data, data, ttl);
|
@@ -635,9 +680,7 @@
|
|
635
680
|
var that = this, matches = [], cacheHit = false;
|
636
681
|
matches = this.index.get(query);
|
637
682
|
matches = this.sorter(matches).slice(0, this.limit);
|
638
|
-
|
639
|
-
cacheHit = this._getFromRemote(query, returnRemoteMatches);
|
640
|
-
}
|
683
|
+
matches.length < this.limit ? cacheHit = this._getFromRemote(query, returnRemoteMatches) : this._cancelLastRemoteRequest();
|
641
684
|
if (!cacheHit) {
|
642
685
|
(matches.length > 0 || !this.transport) && cb && cb(matches);
|
643
686
|
}
|