3
Copyright 2012 Yahoo! Inc. All rights reserved.
4
Licensed under the BSD License.
5
http://yuilibrary.com/license/
7
YUI.add('autocomplete-filters-accentfold', function (Y, NAME) {
10
Provides pre-built accent-folding result matching filters for AutoComplete.
12
These filters are similar to the ones provided by the `autocomplete-filters`
13
module, but use accent-aware comparisons. For example, "resume" and "résumé"
14
will be considered equal when using the accent-folding filters.
17
@submodule autocomplete-filters-accentfold
21
@class AutoCompleteFilters
25
var AccentFold = Y.Text.AccentFold,
26
WordBreak = Y.Text.WordBreak,
30
Y.mix(Y.namespace('AutoCompleteFilters'), {
32
Accent folding version of `charMatch()`.
35
@param {String} query Query to match
36
@param {Array} results Results to filter
37
@return {Array} Filtered results
40
charMatchFold: function (query, results) {
41
if (!query) { return results; }
43
var queryChars = YArray.unique(AccentFold.fold(query).split(''));
45
return YArray.filter(results, function (result) {
46
var text = AccentFold.fold(result.text);
48
return YArray.every(queryChars, function (chr) {
49
return text.indexOf(chr) !== -1;
55
Accent folding version of `phraseMatch()`.
57
@method phraseMatchFold
58
@param {String} query Query to match
59
@param {Array} results Results to filter
60
@return {Array} Filtered results
63
phraseMatchFold: function (query, results) {
64
if (!query) { return results; }
66
query = AccentFold.fold(query);
68
return YArray.filter(results, function (result) {
69
return AccentFold.fold(result.text).indexOf(query) !== -1;
74
Accent folding version of `startsWith()`.
76
@method startsWithFold
77
@param {String} query Query to match
78
@param {Array} results Results to filter
79
@return {Array} Filtered results
82
startsWithFold: function (query, results) {
83
if (!query) { return results; }
85
query = AccentFold.fold(query);
87
return YArray.filter(results, function (result) {
88
return AccentFold.fold(result.text).indexOf(query) === 0;
93
Accent folding version of `subWordMatch()`.
95
@method subWordMatchFold
96
@param {String} query Query to match
97
@param {Array} results Results to filter
98
@return {Array} Filtered results
101
subWordMatchFold: function (query, results) {
102
if (!query) { return results; }
104
var queryWords = WordBreak.getUniqueWords(AccentFold.fold(query));
106
return YArray.filter(results, function (result) {
107
var resultText = AccentFold.fold(result.text);
109
return YArray.every(queryWords, function (queryWord) {
110
return resultText.indexOf(queryWord) !== -1;
116
Accent folding version of `wordMatch()`.
118
@method wordMatchFold
119
@param {String} query Query to match
120
@param {Array} results Results to filter
121
@return {Array} Filtered results
124
wordMatchFold: function (query, results) {
125
if (!query) { return results; }
127
var queryWords = WordBreak.getUniqueWords(AccentFold.fold(query));
129
return YArray.filter(results, function (result) {
130
// Convert resultWords array to a hash for fast lookup.
131
var resultWords = YArray.hash(WordBreak.getUniqueWords(
132
AccentFold.fold(result.text)));
134
return YArray.every(queryWords, function (word) {
135
return YObject.owns(resultWords, word);
142
}, '3.7.1', {"requires": ["array-extras", "text-accentfold", "text-wordbreak"]});