twitter-typeahead-rails 0.10.2 → 0.10.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +1 -1
- data/lib/twitter-typeahead-rails/version.rb +1 -1
- data/vendor/assets/javascripts/twitter/typeahead/bloodhound.js +174 -131
- data/vendor/assets/javascripts/twitter/typeahead/typeahead.bundle.js +271 -205
- data/vendor/assets/javascripts/twitter/typeahead/typeahead.bundle.min.js +2 -2
- data/vendor/assets/javascripts/twitter/typeahead/typeahead.jquery.js +210 -181
- metadata +6 -15
@@ -1,127 +1,134 @@
|
|
1
1
|
/*!
|
2
|
-
* typeahead.js 0.10.
|
2
|
+
* typeahead.js 0.10.5
|
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
|
-
mixin: $.extend,
|
64
|
-
getUniqueId: function() {
|
65
|
-
var counter = 0;
|
66
|
-
return function() {
|
67
|
-
return counter++;
|
68
|
-
};
|
69
|
-
}(),
|
70
|
-
templatify: function templatify(obj) {
|
71
|
-
return $.isFunction(obj) ? obj : template;
|
72
|
-
function template() {
|
73
|
-
return String(obj);
|
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;
|
87
52
|
}
|
88
|
-
};
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
53
|
+
});
|
54
|
+
return !!result;
|
55
|
+
},
|
56
|
+
some: function(obj, test) {
|
57
|
+
var result = false;
|
58
|
+
if (!obj) {
|
59
|
+
return result;
|
94
60
|
}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
61
|
+
$.each(obj, function(key, val) {
|
62
|
+
if (result = test.call(null, val, key, obj)) {
|
63
|
+
return false;
|
64
|
+
}
|
65
|
+
});
|
66
|
+
return !!result;
|
67
|
+
},
|
68
|
+
mixin: $.extend,
|
69
|
+
getUniqueId: function() {
|
70
|
+
var counter = 0;
|
71
|
+
return function() {
|
72
|
+
return counter++;
|
73
|
+
};
|
74
|
+
}(),
|
75
|
+
templatify: function templatify(obj) {
|
76
|
+
return $.isFunction(obj) ? obj : template;
|
77
|
+
function template() {
|
78
|
+
return String(obj);
|
79
|
+
}
|
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.5";
|
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
|
}
|
@@ -681,71 +724,79 @@
|
|
681
724
|
return false;
|
682
725
|
}
|
683
726
|
})(this);
|
684
|
-
var html = {
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
727
|
+
var html = function() {
|
728
|
+
return {
|
729
|
+
wrapper: '<span class="twitter-typeahead"></span>',
|
730
|
+
dropdown: '<span class="tt-dropdown-menu"></span>',
|
731
|
+
dataset: '<div class="tt-dataset-%CLASS%"></div>',
|
732
|
+
suggestions: '<span class="tt-suggestions"></span>',
|
733
|
+
suggestion: '<div class="tt-suggestion"></div>'
|
734
|
+
};
|
735
|
+
}();
|
736
|
+
var css = function() {
|
737
|
+
"use strict";
|
738
|
+
var css = {
|
739
|
+
wrapper: {
|
740
|
+
position: "relative",
|
741
|
+
display: "inline-block"
|
742
|
+
},
|
743
|
+
hint: {
|
744
|
+
position: "absolute",
|
745
|
+
top: "0",
|
746
|
+
left: "0",
|
747
|
+
borderColor: "transparent",
|
748
|
+
boxShadow: "none",
|
749
|
+
opacity: "1"
|
750
|
+
},
|
751
|
+
input: {
|
752
|
+
position: "relative",
|
753
|
+
verticalAlign: "top",
|
754
|
+
backgroundColor: "transparent"
|
755
|
+
},
|
756
|
+
inputWithNoHint: {
|
757
|
+
position: "relative",
|
758
|
+
verticalAlign: "top"
|
759
|
+
},
|
760
|
+
dropdown: {
|
761
|
+
position: "absolute",
|
762
|
+
top: "100%",
|
763
|
+
left: "0",
|
764
|
+
zIndex: "100",
|
765
|
+
display: "none"
|
766
|
+
},
|
767
|
+
suggestions: {
|
768
|
+
display: "block"
|
769
|
+
},
|
770
|
+
suggestion: {
|
771
|
+
whiteSpace: "nowrap",
|
772
|
+
cursor: "pointer"
|
773
|
+
},
|
774
|
+
suggestionChild: {
|
775
|
+
whiteSpace: "normal"
|
776
|
+
},
|
777
|
+
ltr: {
|
778
|
+
left: "0",
|
779
|
+
right: "auto"
|
780
|
+
},
|
781
|
+
rtl: {
|
782
|
+
left: "auto",
|
783
|
+
right: " 0"
|
784
|
+
}
|
785
|
+
};
|
786
|
+
if (_.isMsie()) {
|
787
|
+
_.mixin(css.input, {
|
788
|
+
backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
|
789
|
+
});
|
736
790
|
}
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
}
|
742
|
-
|
743
|
-
|
744
|
-
_.mixin(css.input, {
|
745
|
-
marginTop: "-1px"
|
746
|
-
});
|
747
|
-
}
|
791
|
+
if (_.isMsie() && _.isMsie() <= 7) {
|
792
|
+
_.mixin(css.input, {
|
793
|
+
marginTop: "-1px"
|
794
|
+
});
|
795
|
+
}
|
796
|
+
return css;
|
797
|
+
}();
|
748
798
|
var EventBus = function() {
|
799
|
+
"use strict";
|
749
800
|
var namespace = "typeahead:";
|
750
801
|
function EventBus(o) {
|
751
802
|
if (!o || !o.el) {
|
@@ -762,6 +813,7 @@
|
|
762
813
|
return EventBus;
|
763
814
|
}();
|
764
815
|
var EventEmitter = function() {
|
816
|
+
"use strict";
|
765
817
|
var splitter = /\s+/, nextTick = getNextTick();
|
766
818
|
return {
|
767
819
|
onSync: onSync,
|
@@ -821,7 +873,7 @@
|
|
821
873
|
return flush;
|
822
874
|
function flush() {
|
823
875
|
var cancelled;
|
824
|
-
for (var i = 0; !cancelled && i <
|
876
|
+
for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
|
825
877
|
cancelled = callbacks[i].apply(context, args) === false;
|
826
878
|
}
|
827
879
|
return !cancelled;
|
@@ -851,6 +903,7 @@
|
|
851
903
|
}
|
852
904
|
}();
|
853
905
|
var highlight = function(doc) {
|
906
|
+
"use strict";
|
854
907
|
var defaults = {
|
855
908
|
node: null,
|
856
909
|
pattern: null,
|
@@ -869,7 +922,7 @@
|
|
869
922
|
regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);
|
870
923
|
traverse(o.node, hightlightTextNode);
|
871
924
|
function hightlightTextNode(textNode) {
|
872
|
-
var match, patternNode;
|
925
|
+
var match, patternNode, wrapperNode;
|
873
926
|
if (match = regex.exec(textNode.data)) {
|
874
927
|
wrapperNode = doc.createElement(o.tagName);
|
875
928
|
o.className && (wrapperNode.className = o.className);
|
@@ -894,7 +947,7 @@
|
|
894
947
|
};
|
895
948
|
function getRegex(patterns, caseSensitive, wordsOnly) {
|
896
949
|
var escapedPatterns = [], regexStr;
|
897
|
-
for (var i = 0
|
950
|
+
for (var i = 0, len = patterns.length; i < len; i++) {
|
898
951
|
escapedPatterns.push(_.escapeRegExChars(patterns[i]));
|
899
952
|
}
|
900
953
|
regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
|
@@ -902,6 +955,7 @@
|
|
902
955
|
}
|
903
956
|
}(window.document);
|
904
957
|
var Input = function() {
|
958
|
+
"use strict";
|
905
959
|
var specialKeyCodeMap;
|
906
960
|
specialKeyCodeMap = {
|
907
961
|
9: "tab",
|
@@ -997,8 +1051,9 @@
|
|
997
1051
|
inputValue = this.getInputValue();
|
998
1052
|
areEquivalent = areQueriesEquivalent(inputValue, this.query);
|
999
1053
|
hasDifferentWhitespace = areEquivalent ? this.query.length !== inputValue.length : false;
|
1054
|
+
this.query = inputValue;
|
1000
1055
|
if (!areEquivalent) {
|
1001
|
-
this.trigger("queryChanged", this.query
|
1056
|
+
this.trigger("queryChanged", this.query);
|
1002
1057
|
} else if (hasDifferentWhitespace) {
|
1003
1058
|
this.trigger("whitespaceChanged", this.query);
|
1004
1059
|
}
|
@@ -1095,6 +1150,7 @@
|
|
1095
1150
|
}
|
1096
1151
|
}();
|
1097
1152
|
var Dataset = function() {
|
1153
|
+
"use strict";
|
1098
1154
|
var datasetKey = "ttDataset", valueKey = "ttValue", datumKey = "ttDatum";
|
1099
1155
|
function Dataset(o) {
|
1100
1156
|
o = o || {};
|
@@ -1148,6 +1204,7 @@
|
|
1148
1204
|
nodes = _.map(suggestions, getSuggestionNode);
|
1149
1205
|
$suggestions.append.apply($suggestions, nodes);
|
1150
1206
|
that.highlight && highlight({
|
1207
|
+
className: "tt-highlight",
|
1151
1208
|
node: $suggestions[0],
|
1152
1209
|
pattern: query
|
1153
1210
|
});
|
@@ -1227,6 +1284,7 @@
|
|
1227
1284
|
}
|
1228
1285
|
}();
|
1229
1286
|
var Dropdown = function() {
|
1287
|
+
"use strict";
|
1230
1288
|
function Dropdown(o) {
|
1231
1289
|
var that = this, onSuggestionClick, onSuggestionMouseEnter, onSuggestionMouseLeave;
|
1232
1290
|
o = o || {};
|
@@ -1386,6 +1444,7 @@
|
|
1386
1444
|
}
|
1387
1445
|
}();
|
1388
1446
|
var Typeahead = function() {
|
1447
|
+
"use strict";
|
1389
1448
|
var attrsKey = "ttAttrs";
|
1390
1449
|
function Typeahead(o) {
|
1391
1450
|
var $menu, $input, $hint;
|
@@ -1396,7 +1455,7 @@
|
|
1396
1455
|
this.isActivated = false;
|
1397
1456
|
this.autoselect = !!o.autoselect;
|
1398
1457
|
this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
|
1399
|
-
this.$node =
|
1458
|
+
this.$node = buildDom(o.input, o.withHint);
|
1400
1459
|
$menu = this.$node.find(".tt-dropdown-menu");
|
1401
1460
|
$input = this.$node.find(".tt-input");
|
1402
1461
|
$hint = this.$node.find(".tt-hint");
|
@@ -1564,6 +1623,7 @@
|
|
1564
1623
|
this.dropdown.close();
|
1565
1624
|
},
|
1566
1625
|
setVal: function setVal(val) {
|
1626
|
+
val = _.toStr(val);
|
1567
1627
|
if (this.isActivated) {
|
1568
1628
|
this.input.setInputValue(val);
|
1569
1629
|
} else {
|
@@ -1583,15 +1643,16 @@
|
|
1583
1643
|
}
|
1584
1644
|
});
|
1585
1645
|
return Typeahead;
|
1586
|
-
function
|
1646
|
+
function buildDom(input, withHint) {
|
1587
1647
|
var $input, $wrapper, $dropdown, $hint;
|
1588
1648
|
$input = $(input);
|
1589
1649
|
$wrapper = $(html.wrapper).css(css.wrapper);
|
1590
1650
|
$dropdown = $(html.dropdown).css(css.dropdown);
|
1591
1651
|
$hint = $input.clone().css(css.hint).css(getBackgroundStyles($input));
|
1592
|
-
$hint.val("").removeData().addClass("tt-hint").removeAttr("id name placeholder").prop("
|
1652
|
+
$hint.val("").removeData().addClass("tt-hint").removeAttr("id name placeholder required").prop("readonly", true).attr({
|
1593
1653
|
autocomplete: "off",
|
1594
|
-
spellcheck: "false"
|
1654
|
+
spellcheck: "false",
|
1655
|
+
tabindex: -1
|
1595
1656
|
});
|
1596
1657
|
$input.data(attrsKey, {
|
1597
1658
|
dir: $input.attr("dir"),
|
@@ -1630,6 +1691,7 @@
|
|
1630
1691
|
}
|
1631
1692
|
}();
|
1632
1693
|
(function() {
|
1694
|
+
"use strict";
|
1633
1695
|
var old, typeaheadKey, methods;
|
1634
1696
|
old = $.fn.typeahead;
|
1635
1697
|
typeaheadKey = "ttTypeahead";
|
@@ -1702,8 +1764,12 @@
|
|
1702
1764
|
}
|
1703
1765
|
};
|
1704
1766
|
$.fn.typeahead = function(method) {
|
1705
|
-
|
1706
|
-
|
1767
|
+
var tts;
|
1768
|
+
if (methods[method] && method !== "initialize") {
|
1769
|
+
tts = this.filter(function() {
|
1770
|
+
return !!$(this).data(typeaheadKey);
|
1771
|
+
});
|
1772
|
+
return methods[method].apply(tts, [].slice.call(arguments, 1));
|
1707
1773
|
} else {
|
1708
1774
|
return methods.initialize.apply(this, arguments);
|
1709
1775
|
}
|