2 Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3 Code licensed under the BSD License:
4 http://developer.yahoo.com/yui/license.html
8 YUI.add('autocomplete-filters-accentfold', function(Y) {
12 * Provides pre-built accent-folding result matching filters for AutoComplete.
16 * These filters are similar to the ones provided by the
17 * <code>autocomplete-filters</code> module, but use accent-aware comparisons.
18 * For example, "resume" and "résumé" will be considered equal when using the
19 * accent-folding filters.
22 * @module autocomplete
23 * @submodule autocomplete-filters-accentfold
27 * @class AutoCompleteFilters
31 var AccentFold = Y.Text.AccentFold,
32 WordBreak = Y.Text.WordBreak,
36 Y.mix(Y.namespace('AutoCompleteFilters'), {
38 * Accent folding version of <code>charMatch()</code>.
40 * @method charMatchFold
41 * @param {String} query Query to match
42 * @param {Array} results Results to filter
43 * @return {Array} Filtered results
46 charMatchFold: function (query, results) {
47 var queryChars = YArray.unique(AccentFold.fold(query).split(''));
49 return YArray.filter(results, function (result) {
50 var text = AccentFold.fold(result.text);
52 return YArray.every(queryChars, function (chr) {
53 return text.indexOf(chr) !== -1;
59 * Accent folding version of <code>phraseMatch()</code>.
61 * @method phraseMatchFold
62 * @param {String} query Query to match
63 * @param {Array} results Results to filter
64 * @return {Array} Filtered results
67 phraseMatchFold: function (query, results) {
68 query = AccentFold.fold(query);
70 return YArray.filter(results, function (result) {
71 return AccentFold.fold(result.text).indexOf(query) !== -1;
76 * Accent folding version of <code>startsWithFold()</code>.
78 * @method startsWithFold
79 * @param {String} query Query to match
80 * @param {Array} results Results to filter
81 * @return {Array} Filtered results
84 startsWithFold: function (query, 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 <code>wordMatchFold()</code>.
95 * @method wordMatchFold
96 * @param {String} query Query to match
97 * @param {Array} results Results to filter
98 * @return {Array} Filtered results
101 wordMatchFold: function (query, results) {
102 var queryWords = WordBreak.getUniqueWords(AccentFold.fold(query));
104 return YArray.filter(results, function (result) {
105 // Convert resultWords array to a hash for fast lookup.
106 var resultWords = YArray.hash(WordBreak.getUniqueWords(
107 AccentFold.fold(result.text)));
109 return YArray.every(queryWords, function (word) {
110 return YObject.owns(resultWords, word);
117 }, '3.3.0' ,{requires:['array-extras', 'text-accentfold', 'text-wordbreak']});