algoliasearch-rails 1.11.4 → 1.11.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ChangeLog +4 -0
- data/VERSION +1 -1
- data/algoliasearch-rails.gemspec +2 -2
- data/vendor/assets/javascripts/algolia/algoliasearch.js +342 -118
- data/vendor/assets/javascripts/algolia/algoliasearch.min.js +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6245c8a49433f26ba9c8547fc92d47e3284a642a
|
4
|
+
data.tar.gz: 11434652966ca83862e092c7afce9054f7fea1d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2c3c09294f74f171f15b9685eb0f944c166a12c3d53c7f7f7de81982c45f39d97b78037ed9cea989285e6403c6afb3a7315aab67bb09cd06ae0a498e92fa157
|
7
|
+
data.tar.gz: 53297000b075c8a3d5e49b3f5fb4916c1cecfaec4abc7b600000bbe99f2d755f9c11519b754dbd171cd53cd59589014b51db948b8e8c2060fc358ded13d33e0e
|
data/ChangeLog
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.11.
|
1
|
+
1.11.5
|
data/algoliasearch-rails.gemspec
CHANGED
@@ -6,11 +6,11 @@
|
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "algoliasearch-rails"
|
9
|
-
s.version = "1.11.
|
9
|
+
s.version = "1.11.5"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.authors = ["Algolia"]
|
13
|
-
s.date = "2014-10-
|
13
|
+
s.date = "2014-10-15"
|
14
14
|
s.description = "AlgoliaSearch integration to your favorite ORM"
|
15
15
|
s.email = "contact@algolia.com"
|
16
16
|
s.extra_rdoc_files = [
|
@@ -21,7 +21,7 @@
|
|
21
21
|
* THE SOFTWARE.
|
22
22
|
*/
|
23
23
|
|
24
|
-
var ALGOLIA_VERSION = '2.
|
24
|
+
var ALGOLIA_VERSION = '2.7.0';
|
25
25
|
|
26
26
|
/*
|
27
27
|
* Copyright (c) 2013 Algolia
|
@@ -50,40 +50,77 @@ var ALGOLIA_VERSION = '2.5.3';
|
|
50
50
|
* Algolia Search library initialization
|
51
51
|
* @param applicationID the application ID you have in your admin interface
|
52
52
|
* @param apiKey a valid API key for the service
|
53
|
-
* @param
|
54
|
-
*
|
55
|
-
*
|
56
|
-
*
|
53
|
+
* @param methodOrOptions the hash of parameters for initialization. It can contains:
|
54
|
+
* - method (optional) specify if the protocol used is http or https (http by default to make the first search query faster).
|
55
|
+
* You need to use https is you are doing something else than just search queries.
|
56
|
+
* - hosts (optional) the list of hosts that you have received for the service
|
57
|
+
* - dsn (optional) set to true if your account has the Distributed Search Option
|
58
|
+
* - dsnHost (optional) override the automatic computation of dsn hostname
|
57
59
|
*/
|
58
|
-
var AlgoliaSearch = function(applicationID, apiKey,
|
60
|
+
var AlgoliaSearch = function(applicationID, apiKey, methodOrOptions, resolveDNS, hosts) {
|
59
61
|
var self = this;
|
60
62
|
this.applicationID = applicationID;
|
61
63
|
this.apiKey = apiKey;
|
64
|
+
this.dsn = false;
|
65
|
+
this.dsnHost = null;
|
66
|
+
this.hosts = [];
|
62
67
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
68
|
+
var method;
|
69
|
+
if (typeof methodOrOptions === 'string') { // Old initialization
|
70
|
+
method = methodOrOptions;
|
71
|
+
} else {
|
72
|
+
// Take all option from the hash
|
73
|
+
var options = methodOrOptions;
|
74
|
+
if (!this._isUndefined(options.method)) {
|
75
|
+
method = options.method;
|
76
|
+
}
|
77
|
+
if (!this._isUndefined(options.dsn)) {
|
78
|
+
this.dsn = options.dsn;
|
79
|
+
}
|
80
|
+
if (!this._isUndefined(options.hosts)) {
|
81
|
+
hosts = options.hosts;
|
82
|
+
}
|
83
|
+
if (!this._isUndefined(options.dsnHost)) {
|
84
|
+
this.dsnHost = options.dsnHost;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
// If hosts is undefined, initialize it with applicationID
|
88
|
+
if (this._isUndefined(hosts)) {
|
89
|
+
hosts = [
|
90
|
+
this.applicationID + '-1.algolia.io',
|
91
|
+
this.applicationID + '-2.algolia.io',
|
92
|
+
this.applicationID + '-3.algolia.io'
|
93
|
+
];
|
94
|
+
}
|
95
|
+
// detect is we use http or https
|
96
|
+
this.host_protocol = 'http://';
|
97
|
+
if (this._isUndefined(method) || method === null) {
|
98
|
+
this.host_protocol = ('https:' == document.location.protocol ? 'https' : 'http') + '://';
|
99
|
+
} else if (method === 'https' || method === 'HTTPS') {
|
100
|
+
this.host_protocol = 'https://';
|
67
101
|
}
|
68
|
-
this.hosts = [];
|
69
102
|
// Add hosts in random order
|
70
|
-
for (var i = 0; i <
|
103
|
+
for (var i = 0; i < hosts.length; ++i) {
|
71
104
|
if (Math.random() > 0.5) {
|
72
105
|
this.hosts.reverse();
|
73
106
|
}
|
74
|
-
|
75
|
-
this.hosts.push(('https:' == document.location.protocol ? 'https' : 'http') + '://' + hostsArray[i]);
|
76
|
-
} else if (method === 'https' || method === 'HTTPS') {
|
77
|
-
this.hosts.push('https://' + hostsArray[i]);
|
78
|
-
} else {
|
79
|
-
this.hosts.push('http://' + hostsArray[i]);
|
80
|
-
}
|
107
|
+
this.hosts.push(this.host_protocol + hosts[i]);
|
81
108
|
}
|
82
109
|
if (Math.random() > 0.5) {
|
83
110
|
this.hosts.reverse();
|
84
111
|
}
|
112
|
+
// then add Distributed Search Network host if there is one
|
113
|
+
if (this.dsn || this.dsnHost != null) {
|
114
|
+
if (this.dsnHost) {
|
115
|
+
this.hosts.unshift(this.host_protocol + this.dsnHost);
|
116
|
+
} else {
|
117
|
+
this.hosts.unshift(this.host_protocol + this.applicationID + '-dsn.algolia.io');
|
118
|
+
}
|
119
|
+
}
|
85
120
|
|
86
121
|
// resolve DNS + check CORS support (JSONP fallback)
|
122
|
+
this.requestTimeoutInMs = 2000;
|
123
|
+
this.currentHostIndex = 0;
|
87
124
|
this.jsonp = null;
|
88
125
|
this.jsonpWait = 0;
|
89
126
|
this._jsonRequest({
|
@@ -91,7 +128,8 @@ var AlgoliaSearch = function(applicationID, apiKey, method, resolveDNS, hostsArr
|
|
91
128
|
url: '/1/isalive',
|
92
129
|
callback: function(success, content) {
|
93
130
|
self.jsonp = !success;
|
94
|
-
}
|
131
|
+
},
|
132
|
+
removeCustomHTTPHeaders: true
|
95
133
|
});
|
96
134
|
this.extraHeaders = [];
|
97
135
|
};
|
@@ -408,7 +446,7 @@ AlgoliaSearch.prototype = {
|
|
408
446
|
*/
|
409
447
|
addQueryInBatch: function(indexName, query, args) {
|
410
448
|
var params = 'query=' + encodeURIComponent(query);
|
411
|
-
if (!this._isUndefined(args) && args
|
449
|
+
if (!this._isUndefined(args) && args !== null) {
|
412
450
|
params = this._getSearchParams(args, params);
|
413
451
|
}
|
414
452
|
this.batch.push({ indexName: indexName, params: params });
|
@@ -439,7 +477,7 @@ AlgoliaSearch.prototype = {
|
|
439
477
|
params.requests.push(as.batch[i]);
|
440
478
|
}
|
441
479
|
window.clearTimeout(as.onDelayTrigger);
|
442
|
-
if (!this._isUndefined(delay) && delay
|
480
|
+
if (!this._isUndefined(delay) && delay !== null && delay > 0) {
|
443
481
|
var onDelayTrigger = window.setTimeout( function() {
|
444
482
|
as._sendQueriesBatch(params, callback);
|
445
483
|
}, delay);
|
@@ -448,6 +486,19 @@ AlgoliaSearch.prototype = {
|
|
448
486
|
this._sendQueriesBatch(params, callback);
|
449
487
|
}
|
450
488
|
},
|
489
|
+
|
490
|
+
/**
|
491
|
+
* Set the number of milliseconds a request can take before automatically being terminated.
|
492
|
+
*
|
493
|
+
* @param {Number} milliseconds
|
494
|
+
*/
|
495
|
+
setRequestTimeout: function(milliseconds)
|
496
|
+
{
|
497
|
+
if (milliseconds) {
|
498
|
+
this.requestTimeoutInMs = parseInt(milliseconds, 10);
|
499
|
+
}
|
500
|
+
},
|
501
|
+
|
451
502
|
/*
|
452
503
|
* Index class constructor.
|
453
504
|
* You should not use this method directly but use initIndex() function
|
@@ -458,13 +509,18 @@ AlgoliaSearch.prototype = {
|
|
458
509
|
this.typeAheadArgs = null;
|
459
510
|
this.typeAheadValueOption = null;
|
460
511
|
},
|
461
|
-
|
512
|
+
/**
|
513
|
+
* Add an extra field to the HTTP request
|
514
|
+
*
|
515
|
+
* @param key the header field name
|
516
|
+
* @param value the header field value
|
517
|
+
*/
|
462
518
|
setExtraHeader: function(key, value) {
|
463
519
|
this.extraHeaders.push({ key: key, value: value});
|
464
520
|
},
|
465
521
|
|
466
522
|
_sendQueriesBatch: function(params, callback) {
|
467
|
-
if (this.jsonp
|
523
|
+
if (this.jsonp === null) {
|
468
524
|
var self = this;
|
469
525
|
this._waitReady(function() { self._sendQueriesBatch(params, callback); });
|
470
526
|
return;
|
@@ -485,13 +541,15 @@ AlgoliaSearch.prototype = {
|
|
485
541
|
method: 'POST',
|
486
542
|
url: '/1/indexes/*/queries',
|
487
543
|
body: params,
|
488
|
-
|
544
|
+
callback: callback,
|
545
|
+
removeCustomHTTPHeaders: true});
|
489
546
|
}
|
490
547
|
},
|
491
548
|
/*
|
492
549
|
* Wrapper that try all hosts to maximize the quality of service
|
493
550
|
*/
|
494
551
|
_jsonRequest: function(opts) {
|
552
|
+
var successiveRetryCount = 0;
|
495
553
|
var self = this;
|
496
554
|
var callback = opts.callback;
|
497
555
|
var cache = null;
|
@@ -509,33 +567,33 @@ AlgoliaSearch.prototype = {
|
|
509
567
|
}
|
510
568
|
}
|
511
569
|
|
512
|
-
var impl = function(
|
513
|
-
|
514
|
-
if (!self._isUndefined(position)) {
|
515
|
-
idx = position;
|
516
|
-
}
|
517
|
-
if (self.hosts.length <= idx) {
|
570
|
+
var impl = function() {
|
571
|
+
if (successiveRetryCount >= self.hosts.length) {
|
518
572
|
if (!self._isUndefined(callback)) {
|
519
|
-
|
573
|
+
successiveRetryCount = 0;
|
574
|
+
callback(false, { message: 'Cannot connect the Algolia\'s Search API. Please send an email to support@algolia.com to report the issue.' });
|
520
575
|
}
|
521
576
|
return;
|
522
577
|
}
|
523
578
|
opts.callback = function(retry, success, res, body) {
|
524
579
|
if (!success && !self._isUndefined(body)) {
|
525
|
-
|
580
|
+
console && console.log('Error: ' + body.message);
|
526
581
|
}
|
527
582
|
if (success && !self._isUndefined(opts.cache)) {
|
528
583
|
cache[cacheID] = body;
|
529
584
|
}
|
530
|
-
if (!success && retry
|
531
|
-
|
585
|
+
if (!success && retry) {
|
586
|
+
self.currentHostIndex = ++self.currentHostIndex % self.hosts.length;
|
587
|
+
successiveRetryCount += 1;
|
588
|
+
impl();
|
532
589
|
} else {
|
590
|
+
successiveRetryCount = 0;
|
533
591
|
if (!self._isUndefined(callback)) {
|
534
592
|
callback(success, body);
|
535
593
|
}
|
536
594
|
}
|
537
595
|
};
|
538
|
-
opts.hostname = self.hosts[
|
596
|
+
opts.hostname = self.hosts[self.currentHostIndex];
|
539
597
|
self._jsonRequestByHost(opts);
|
540
598
|
};
|
541
599
|
impl();
|
@@ -546,98 +604,191 @@ AlgoliaSearch.prototype = {
|
|
546
604
|
var url = opts.hostname + opts.url;
|
547
605
|
|
548
606
|
if (this.jsonp) {
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
607
|
+
this._makeJsonpRequestByHost(url, opts);
|
608
|
+
} else {
|
609
|
+
this._makeXmlHttpRequestByHost(url, opts);
|
610
|
+
}
|
611
|
+
},
|
612
|
+
|
613
|
+
/**
|
614
|
+
* Make a JSONP request
|
615
|
+
*
|
616
|
+
* @param url request url (includes endpoint and path)
|
617
|
+
* @param opts all request options
|
618
|
+
*/
|
619
|
+
_makeJsonpRequestByHost: function(url, opts) {
|
620
|
+
if (!opts.jsonp) {
|
621
|
+
opts.callback(true, false, null, { 'message': 'Method ' + opts.method + ' ' + url + ' is not supported by JSONP.' });
|
622
|
+
return;
|
623
|
+
}
|
624
|
+
|
625
|
+
this.jsonpCounter = this.jsonpCounter || 0;
|
626
|
+
this.jsonpCounter += 1;
|
627
|
+
var head = document.getElementsByTagName('head')[0];
|
628
|
+
var script = document.createElement('script');
|
629
|
+
var cb = 'algoliaJSONP_' + this.jsonpCounter;
|
630
|
+
var done = false;
|
631
|
+
var ontimeout = null;
|
632
|
+
|
633
|
+
window[cb] = function(data) {
|
634
|
+
opts.callback(false, true, null, data);
|
635
|
+
try { delete window[cb]; } catch (e) { window[cb] = undefined; }
|
636
|
+
};
|
637
|
+
|
638
|
+
script.type = 'text/javascript';
|
639
|
+
script.src = url + '?callback=' + cb + ',' + this.applicationID + ',' + this.apiKey;
|
640
|
+
|
641
|
+
if (opts.body['X-Algolia-TagFilters']) {
|
642
|
+
script.src += '&X-Algolia-TagFilters=' + encodeURIComponent(opts.body['X-Algolia-TagFilters']);
|
643
|
+
}
|
644
|
+
|
645
|
+
if (opts.body['X-Algolia-UserToken']) {
|
646
|
+
script.src += '&X-Algolia-UserToken=' + encodeURIComponent(opts.body['X-Algolia-UserToken']);
|
647
|
+
}
|
648
|
+
|
649
|
+
if (opts.body && opts.body.params) {
|
650
|
+
script.src += '&' + opts.body.params;
|
651
|
+
}
|
652
|
+
|
653
|
+
ontimeout = setTimeout(function() {
|
654
|
+
script.onload = script.onreadystatechange = script.onerror = null;
|
556
655
|
window[cb] = function(data) {
|
557
|
-
opts.callback(false, true, null, data);
|
558
656
|
try { delete window[cb]; } catch (e) { window[cb] = undefined; }
|
559
657
|
};
|
560
|
-
|
561
|
-
|
562
|
-
script
|
563
|
-
|
564
|
-
|
658
|
+
|
659
|
+
opts.callback(true, false, null, { 'message': 'Timeout - Failed to load JSONP script.' });
|
660
|
+
head.removeChild(script);
|
661
|
+
|
662
|
+
clearTimeout(ontimeout);
|
663
|
+
ontimeout = null;
|
664
|
+
|
665
|
+
}, this.requestTimeoutInMs);
|
666
|
+
|
667
|
+
script.onload = script.onreadystatechange = function() {
|
668
|
+
clearTimeout(ontimeout);
|
669
|
+
ontimeout = null;
|
670
|
+
|
671
|
+
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
|
672
|
+
done = true;
|
673
|
+
|
674
|
+
if (typeof window[cb + '_loaded'] === 'undefined') {
|
675
|
+
opts.callback(true, false, null, { 'message': 'Failed to load JSONP script.' });
|
676
|
+
try { delete window[cb]; } catch (e) { window[cb] = undefined; }
|
677
|
+
} else {
|
678
|
+
try { delete window[cb + '_loaded']; } catch (e) { window[cb + '_loaded'] = undefined; }
|
679
|
+
}
|
680
|
+
script.onload = script.onreadystatechange = null; // Handle memory leak in IE
|
681
|
+
head.removeChild(script);
|
565
682
|
}
|
566
|
-
|
567
|
-
|
683
|
+
};
|
684
|
+
|
685
|
+
script.onerror = function() {
|
686
|
+
clearTimeout(ontimeout);
|
687
|
+
ontimeout = null;
|
688
|
+
|
689
|
+
opts.callback(true, false, null, { 'message': 'Failed to load JSONP script.' });
|
690
|
+
head.removeChild(script);
|
691
|
+
try { delete window[cb]; } catch (e) { window[cb] = undefined; }
|
692
|
+
};
|
693
|
+
|
694
|
+
head.appendChild(script);
|
695
|
+
},
|
696
|
+
|
697
|
+
/**
|
698
|
+
* Make a XmlHttpRequest
|
699
|
+
*
|
700
|
+
* @param url request url (includes endpoint and path)
|
701
|
+
* @param opts all request opts
|
702
|
+
*/
|
703
|
+
_makeXmlHttpRequestByHost: function(url, opts) {
|
704
|
+
var self = this;
|
705
|
+
var xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest() : {};
|
706
|
+
var body = null;
|
707
|
+
var ontimeout = null;
|
708
|
+
|
709
|
+
if (!this._isUndefined(opts.body)) {
|
710
|
+
body = JSON.stringify(opts.body);
|
711
|
+
}
|
712
|
+
|
713
|
+
if ('withCredentials' in xmlHttp) {
|
714
|
+
xmlHttp.open(opts.method, url , true);
|
715
|
+
if (this._isUndefined(opts.removeCustomHTTPHeaders) || !opts.removeCustomHTTPHeaders) {
|
716
|
+
xmlHttp.setRequestHeader('X-Algolia-API-Key', this.apiKey);
|
717
|
+
xmlHttp.setRequestHeader('X-Algolia-Application-Id', this.applicationID);
|
568
718
|
}
|
569
|
-
|
570
|
-
|
719
|
+
xmlHttp.timeout = this.requestTimeoutInMs;
|
720
|
+
for (var i = 0; i < this.extraHeaders.length; ++i) {
|
721
|
+
xmlHttp.setRequestHeader(this.extraHeaders[i].key, this.extraHeaders[i].value);
|
571
722
|
}
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
|
581
|
-
done = true;
|
582
|
-
if (typeof window[cb + '_loaded'] === 'undefined') {
|
583
|
-
opts.callback(true, false, null, { 'message': 'Failed to load JSONP script.' });
|
584
|
-
try { delete window[cb]; } catch (e) { window[cb] = undefined; }
|
585
|
-
} else {
|
586
|
-
try { delete window[cb + '_loaded']; } catch (e) { window[cb + '_loaded'] = undefined; }
|
587
|
-
}
|
588
|
-
script.onload = script.onreadystatechange = null; // Handle memory leak in IE
|
589
|
-
head.removeChild(script);
|
590
|
-
}
|
591
|
-
};
|
592
|
-
head.appendChild(script);
|
723
|
+
if (body !== null) {
|
724
|
+
xmlHttp.setRequestHeader('Content-type', 'application/json');
|
725
|
+
}
|
726
|
+
} else if (typeof XDomainRequest !== 'undefined') {
|
727
|
+
// Handle IE8/IE9
|
728
|
+
// XDomainRequest only exists in IE, and is IE's way of making CORS requests.
|
729
|
+
xmlHttp = new XDomainRequest();
|
730
|
+
xmlHttp.open(opts.method, url);
|
593
731
|
} else {
|
594
|
-
|
595
|
-
|
596
|
-
|
732
|
+
// very old browser, not supported
|
733
|
+
console && console.log('Your browser is too old to support CORS requests');
|
734
|
+
opts.callback(false, false, null, { 'message': 'CORS not supported' });
|
735
|
+
return;
|
736
|
+
}
|
737
|
+
|
738
|
+
ontimeout = setTimeout(function() {
|
739
|
+
xmlHttp.abort();
|
740
|
+
// Prevent Internet Explorer 9, JScript Error c00c023f
|
741
|
+
if (xmlHttp.aborted === true) {
|
742
|
+
stopLoadAnimation();
|
743
|
+
return;
|
597
744
|
}
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
745
|
+
opts.callback(true, false, null, { 'message': 'Timeout - Could not connect to endpoint ' + url } );
|
746
|
+
|
747
|
+
clearTimeout(ontimeout);
|
748
|
+
ontimeout = null;
|
749
|
+
|
750
|
+
}, this.requestTimeoutInMs);
|
751
|
+
|
752
|
+
xmlHttp.onload = function(event) {
|
753
|
+
clearTimeout(ontimeout);
|
754
|
+
ontimeout = null;
|
755
|
+
|
756
|
+
if (!self._isUndefined(event) && event.target !== null) {
|
757
|
+
var retry = (event.target.status === 0 || event.target.status === 503);
|
758
|
+
var success = false;
|
759
|
+
var response = null;
|
760
|
+
|
761
|
+
if (typeof XDomainRequest !== 'undefined') {
|
762
|
+
// Handle CORS requests IE8/IE9
|
763
|
+
response = event.target.responseText;
|
764
|
+
success = (response && response.length > 0);
|
605
765
|
}
|
606
|
-
|
607
|
-
|
766
|
+
else {
|
767
|
+
response = event.target.response;
|
768
|
+
success = (event.target.status === 200 || event.target.status === 201);
|
608
769
|
}
|
609
|
-
|
610
|
-
|
611
|
-
// XDomainRequest only exists in IE, and is IE's way of making CORS requests.
|
612
|
-
xmlHttp = new XDomainRequest();
|
613
|
-
xmlHttp.open(opts.method, url);
|
770
|
+
|
771
|
+
opts.callback(retry, success, event.target, response ? JSON.parse(response) : null);
|
614
772
|
} else {
|
615
|
-
|
616
|
-
if (window.console) { console.log('Your browser is too old to support CORS requests'); }
|
617
|
-
opts.callback(false, false, null, { 'message': 'CORS not supported' });
|
618
|
-
return;
|
773
|
+
opts.callback(false, true, event, JSON.parse(xmlHttp.responseText));
|
619
774
|
}
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
xmlHttp.onerror = function(event) {
|
631
|
-
opts.callback(true, false, null, { 'message': 'Could not connect to host', 'error': event } );
|
632
|
-
};
|
633
|
-
}
|
775
|
+
};
|
776
|
+
xmlHttp.ontimeout = function(event) { // stop the network call but rely on ontimeout to call opt.callback
|
777
|
+
};
|
778
|
+
xmlHttp.onerror = function(event) {
|
779
|
+
clearTimeout(ontimeout);
|
780
|
+
ontimeout = null;
|
781
|
+
opts.callback(true, false, null, { 'message': 'Could not connect to host', 'error': event } );
|
782
|
+
};
|
783
|
+
|
784
|
+
xmlHttp.send(body);
|
634
785
|
},
|
635
786
|
|
636
787
|
/**
|
637
788
|
* Wait until JSONP flag has been set to perform the first query
|
638
789
|
*/
|
639
790
|
_waitReady: function(cb) {
|
640
|
-
if (this.jsonp
|
791
|
+
if (this.jsonp === null) {
|
641
792
|
this.jsonpWait += 100;
|
642
793
|
if (this.jsonpWait > 2000) {
|
643
794
|
this.jsonp = true;
|
@@ -650,11 +801,11 @@ AlgoliaSearch.prototype = {
|
|
650
801
|
* Transform search param object in query string
|
651
802
|
*/
|
652
803
|
_getSearchParams: function(args, params) {
|
653
|
-
if (this._isUndefined(args) || args
|
804
|
+
if (this._isUndefined(args) || args === null) {
|
654
805
|
return params;
|
655
806
|
}
|
656
807
|
for (var key in args) {
|
657
|
-
if (key
|
808
|
+
if (key !== null && args.hasOwnProperty(key)) {
|
658
809
|
params += (params.length === 0) ? '?' : '&';
|
659
810
|
params += key + '=' + encodeURIComponent(Object.prototype.toString.call(args[key]) === '[object Array]' ? JSON.stringify(args[key]) : args[key]);
|
660
811
|
}
|
@@ -742,7 +893,7 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
742
893
|
* @param attributes (optional) if set, contains the array of attribute names to retrieve
|
743
894
|
*/
|
744
895
|
getObject: function(objectID, callback, attributes) {
|
745
|
-
if (this.as.jsonp
|
896
|
+
if (this.as.jsonp === null) {
|
746
897
|
var self = this;
|
747
898
|
this.as._waitReady(function() { self.getObject(objectID, callback, attributes); });
|
748
899
|
return;
|
@@ -847,7 +998,7 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
847
998
|
* content: the server answer that contains 3 elements: createAt, taskId and objectID
|
848
999
|
*/
|
849
1000
|
deleteObject: function(objectID, callback) {
|
850
|
-
if (objectID
|
1001
|
+
if (objectID === null || objectID.length === 0) {
|
851
1002
|
callback(false, { message: 'empty objectID'});
|
852
1003
|
return;
|
853
1004
|
}
|
@@ -927,11 +1078,11 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
927
1078
|
search: function(query, callback, args, delay) {
|
928
1079
|
var indexObj = this;
|
929
1080
|
var params = 'query=' + encodeURIComponent(query);
|
930
|
-
if (!this.as._isUndefined(args) && args
|
1081
|
+
if (!this.as._isUndefined(args) && args !== null) {
|
931
1082
|
params = this.as._getSearchParams(args, params);
|
932
1083
|
}
|
933
1084
|
window.clearTimeout(indexObj.onDelayTrigger);
|
934
|
-
if (!this.as._isUndefined(delay) && delay
|
1085
|
+
if (!this.as._isUndefined(delay) && delay !== null && delay > 0) {
|
935
1086
|
var onDelayTrigger = window.setTimeout( function() {
|
936
1087
|
indexObj._search(params, callback);
|
937
1088
|
}, delay);
|
@@ -1185,7 +1336,7 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1185
1336
|
/// Internal methods only after this line
|
1186
1337
|
///
|
1187
1338
|
_search: function(params, callback) {
|
1188
|
-
if (this.as.jsonp
|
1339
|
+
if (this.as.jsonp === null) {
|
1189
1340
|
var self = this;
|
1190
1341
|
this.as._waitReady(function() { self._search(params, callback); });
|
1191
1342
|
return;
|
@@ -1208,7 +1359,8 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1208
1359
|
method: 'POST',
|
1209
1360
|
url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/query',
|
1210
1361
|
body: pObj,
|
1211
|
-
callback: callback
|
1362
|
+
callback: callback,
|
1363
|
+
removeCustomHTTPHeaders: true});
|
1212
1364
|
}
|
1213
1365
|
},
|
1214
1366
|
|
@@ -1530,6 +1682,9 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1530
1682
|
return extend({}, this.searchParams, {
|
1531
1683
|
hitsPerPage: 1,
|
1532
1684
|
page: 0,
|
1685
|
+
attributesToRetrieve: [],
|
1686
|
+
attributesToHighlight: [],
|
1687
|
+
attributesToSnippet: [],
|
1533
1688
|
facets: facet,
|
1534
1689
|
facetFilters: this._getFacetFilters(facet)
|
1535
1690
|
});
|
@@ -1565,6 +1720,75 @@ AlgoliaSearch.prototype.Index.prototype = {
|
|
1565
1720
|
};
|
1566
1721
|
})();
|
1567
1722
|
|
1723
|
+
/*
|
1724
|
+
* Copyright (c) 2014 Algolia
|
1725
|
+
* http://www.algolia.com/
|
1726
|
+
*
|
1727
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
1728
|
+
* of this software and associated documentation files (the "Software"), to deal
|
1729
|
+
* in the Software without restriction, including without limitation the rights
|
1730
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
1731
|
+
* copies of the Software, and to permit persons to whom the Software is
|
1732
|
+
* furnished to do so, subject to the following conditions:
|
1733
|
+
*
|
1734
|
+
* The above copyright notice and this permission notice shall be included in
|
1735
|
+
* all copies or substantial portions of the Software.
|
1736
|
+
*
|
1737
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1738
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1739
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1740
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
1741
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
1742
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
1743
|
+
* THE SOFTWARE.
|
1744
|
+
*/
|
1745
|
+
|
1746
|
+
(function($) {
|
1747
|
+
|
1748
|
+
/**
|
1749
|
+
* Algolia Places API
|
1750
|
+
* @param {string} Your application ID
|
1751
|
+
* @param {string} Your API Key
|
1752
|
+
*/
|
1753
|
+
window.AlgoliaPlaces = function(applicationID, apiKey) {
|
1754
|
+
this.init(applicationID, apiKey);
|
1755
|
+
};
|
1756
|
+
|
1757
|
+
AlgoliaPlaces.prototype = {
|
1758
|
+
/**
|
1759
|
+
* @param {string} Your application ID
|
1760
|
+
* @param {string} Your API Key
|
1761
|
+
*/
|
1762
|
+
init: function(applicationID, apiKey) {
|
1763
|
+
this.client = new AlgoliaSearch(applicationID, apiKey, 'http', true, ['places-1.algolia.io', 'places-2.algolia.io', 'places-3.algolia.io']);
|
1764
|
+
this.cache = {};
|
1765
|
+
},
|
1766
|
+
|
1767
|
+
/**
|
1768
|
+
* Perform a query
|
1769
|
+
* @param {string} q the user query
|
1770
|
+
* @param {function} searchCallback the result callback called with two arguments:
|
1771
|
+
* success: boolean set to true if the request was successfull
|
1772
|
+
* content: the query answer with an extra 'disjunctiveFacets' attribute
|
1773
|
+
* @param {hash} the list of search parameters
|
1774
|
+
*/
|
1775
|
+
search: function(q, searchCallback, searchParams) {
|
1776
|
+
var indexObj = this;
|
1777
|
+
var params = 'query=' + encodeURIComponent(q);
|
1778
|
+
if (!this.client._isUndefined(searchParams) && searchParams != null) {
|
1779
|
+
params = this.client._getSearchParams(searchParams, params);
|
1780
|
+
}
|
1781
|
+
var pObj = {params: params, apiKey: this.client.apiKey, appID: this.client.applicationID};
|
1782
|
+
this.client._jsonRequest({ cache: this.cache,
|
1783
|
+
method: 'POST',
|
1784
|
+
url: '/1/places/query',
|
1785
|
+
body: pObj,
|
1786
|
+
callback: searchCallback,
|
1787
|
+
removeCustomHTTPHeaders: true });
|
1788
|
+
}
|
1789
|
+
};
|
1790
|
+
})();
|
1791
|
+
|
1568
1792
|
/*
|
1569
1793
|
json2.js
|
1570
1794
|
2014-02-04
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/*!
|
2
|
-
* algoliasearch 2.
|
2
|
+
* algoliasearch 2.7.0
|
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.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")})}();
|
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.7.0",AlgoliaSearch=function(a,b,c,d,e){var f=this;this.applicationID=a,this.apiKey=b,this.dsn=!1,this.dsnHost=null,this.hosts=[];var g;if("string"==typeof c)g=c;else{var h=c;this._isUndefined(h.method)||(g=h.method),this._isUndefined(h.dsn)||(this.dsn=h.dsn),this._isUndefined(h.hosts)||(e=h.hosts),this._isUndefined(h.dsnHost)||(this.dsnHost=h.dsnHost)}this._isUndefined(e)&&(e=[this.applicationID+"-1.algolia.io",this.applicationID+"-2.algolia.io",this.applicationID+"-3.algolia.io"]),this.host_protocol="http://",this._isUndefined(g)||null===g?this.host_protocol=("https:"==document.location.protocol?"https":"http")+"://":("https"===g||"HTTPS"===g)&&(this.host_protocol="https://");for(var i=0;i<e.length;++i)Math.random()>.5&&this.hosts.reverse(),this.hosts.push(this.host_protocol+e[i]);Math.random()>.5&&this.hosts.reverse(),(this.dsn||null!=this.dsnHost)&&this.hosts.unshift(this.dsnHost?this.host_protocol+this.dsnHost:this.host_protocol+this.applicationID+"-dsn.algolia.io"),this.requestTimeoutInMs=2e3,this.currentHostIndex=0,this.jsonp=null,this.jsonpWait=0,this._jsonRequest({method:"GET",url:"/1/isalive",callback:function(a){f.jsonp=!a},removeCustomHTTPHeaders:!0}),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)},setRequestTimeout:function(a){a&&(this.requestTimeoutInMs=parseInt(a,10))},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,removeCustomHTTPHeaders:!0})},_jsonRequest:function(a){var b=0,c=this,d=a.callback,e=null,f=a.url;if(this._isUndefined(a.body)||(f=a.url+"_body_"+JSON.stringify(a.body)),!this._isUndefined(a.cache)&&(e=a.cache,!this._isUndefined(e[f])))return void(this._isUndefined(d)||setTimeout(function(){d(!0,e[f])},1));var g=function(){return b>=c.hosts.length?void(c._isUndefined(d)||(b=0,d(!1,{message:"Cannot connect the Algolia's Search API. Please send an email to support@algolia.com to report the issue."}))):(a.callback=function(h,i,j,k){i||c._isUndefined(k)||console&&console.log("Error: "+k.message),i&&!c._isUndefined(a.cache)&&(e[f]=k),!i&&h?(c.currentHostIndex=++c.currentHostIndex%c.hosts.length,b+=1,g()):(b=0,c._isUndefined(d)||d(i,k))},a.hostname=c.hosts[c.currentHostIndex],void c._jsonRequestByHost(a))};g()},_jsonRequestByHost:function(a){var b=a.hostname+a.url;this.jsonp?this._makeJsonpRequestByHost(b,a):this._makeXmlHttpRequestByHost(b,a)},_makeJsonpRequestByHost:function(a,b){if(!b.jsonp)return void b.callback(!0,!1,null,{message:"Method "+b.method+" "+a+" is not supported by JSONP."});this.jsonpCounter=this.jsonpCounter||0,this.jsonpCounter+=1;var c=document.getElementsByTagName("head")[0],d=document.createElement("script"),e="algoliaJSONP_"+this.jsonpCounter,f=!1,g=null;window[e]=function(a){b.callback(!1,!0,null,a);try{delete window[e]}catch(c){window[e]=void 0}},d.type="text/javascript",d.src=a+"?callback="+e+","+this.applicationID+","+this.apiKey,b.body["X-Algolia-TagFilters"]&&(d.src+="&X-Algolia-TagFilters="+encodeURIComponent(b.body["X-Algolia-TagFilters"])),b.body["X-Algolia-UserToken"]&&(d.src+="&X-Algolia-UserToken="+encodeURIComponent(b.body["X-Algolia-UserToken"])),b.body&&b.body.params&&(d.src+="&"+b.body.params),g=setTimeout(function(){d.onload=d.onreadystatechange=d.onerror=null,window[e]=function(){try{delete window[e]}catch(a){window[e]=void 0}},b.callback(!0,!1,null,{message:"Timeout - Failed to load JSONP script."}),c.removeChild(d),clearTimeout(g),g=null},this.requestTimeoutInMs),d.onload=d.onreadystatechange=function(){if(clearTimeout(g),g=null,!(f||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState)){if(f=!0,"undefined"==typeof window[e+"_loaded"]){b.callback(!0,!1,null,{message:"Failed to load JSONP script."});try{delete window[e]}catch(a){window[e]=void 0}}else try{delete window[e+"_loaded"]}catch(a){window[e+"_loaded"]=void 0}d.onload=d.onreadystatechange=null,c.removeChild(d)}},d.onerror=function(){clearTimeout(g),g=null,b.callback(!0,!1,null,{message:"Failed to load JSONP script."}),c.removeChild(d);try{delete window[e]}catch(a){window[e]=void 0}},c.appendChild(d)},_makeXmlHttpRequestByHost:function(a,b){var c=this,d=window.XMLHttpRequest?new XMLHttpRequest:{},e=null,f=null;if(this._isUndefined(b.body)||(e=JSON.stringify(b.body)),"withCredentials"in d){d.open(b.method,a,!0),(this._isUndefined(b.removeCustomHTTPHeaders)||!b.removeCustomHTTPHeaders)&&(d.setRequestHeader("X-Algolia-API-Key",this.apiKey),d.setRequestHeader("X-Algolia-Application-Id",this.applicationID)),d.timeout=this.requestTimeoutInMs;for(var g=0;g<this.extraHeaders.length;++g)d.setRequestHeader(this.extraHeaders[g].key,this.extraHeaders[g].value);null!==e&&d.setRequestHeader("Content-type","application/json")}else{if("undefined"==typeof XDomainRequest)return console&&console.log("Your browser is too old to support CORS requests"),void b.callback(!1,!1,null,{message:"CORS not supported"});d=new XDomainRequest,d.open(b.method,a)}f=setTimeout(function(){return d.abort(),d.aborted===!0?void stopLoadAnimation():(b.callback(!0,!1,null,{message:"Timeout - Could not connect to endpoint "+a}),clearTimeout(f),void(f=null))},this.requestTimeoutInMs),d.onload=function(a){if(clearTimeout(f),f=null,c._isUndefined(a)||null===a.target)b.callback(!1,!0,a,JSON.parse(d.responseText));else{var e=0===a.target.status||503===a.target.status,g=!1,h=null;"undefined"!=typeof XDomainRequest?(h=a.target.responseText,g=h&&h.length>0):(h=a.target.response,g=200===a.target.status||201===a.target.status),b.callback(e,g,a.target,h?JSON.parse(h):null)}},d.ontimeout=function(){},d.onerror=function(a){clearTimeout(f),f=null,b.callback(!0,!1,null,{message:"Could not connect to host",error:a})},d.send(e)},_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,removeCustomHTTPHeaders:!0})},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,attributesToRetrieve:[],attributesToHighlight:[],attributesToSnippet:[],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}}}(),function(){window.AlgoliaPlaces=function(a,b){this.init(a,b)},AlgoliaPlaces.prototype={init:function(a,b){this.client=new AlgoliaSearch(a,b,"http",!0,["places-1.algolia.io","places-2.algolia.io","places-3.algolia.io"]),this.cache={}},search:function(a,b,c){var d="query="+encodeURIComponent(a);this.client._isUndefined(c)||null==c||(d=this.client._getSearchParams(c,d));var e={params:d,apiKey:this.client.apiKey,appID:this.client.applicationID};this.client._jsonRequest({cache:this.cache,method:"POST",url:"/1/places/query",body:e,callback:b,removeCustomHTTPHeaders:!0})}}}(),"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")})}();
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: algoliasearch-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.11.
|
4
|
+
version: 1.11.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Algolia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|