1 YUI.add('api-search', function (Y) {
7 Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], {
8 // -- Public Properties ----------------------------------------------------
10 '<li class="result {resultType}">' +
12 '<h3 class="title">{name}</h3>' +
13 '<span class="type">{resultType}</span>' +
14 '<div class="description">{description}</div>' +
15 '<span class="className">{class}</span>' +
19 // -- Initializer ----------------------------------------------------------
20 initializer: function () {
25 // -- Protected Methods ----------------------------------------------------
26 _apiResultFilter: function (query, results) {
27 // Filter components out of the results.
28 return YArray.filter(results, function (result) {
29 return result.raw.resultType === 'component' ? false : result;
33 _apiResultFormatter: function (query, results) {
34 return YArray.map(results, function (result) {
35 var raw = Y.merge(result.raw), // create a copy
36 desc = raw.description || '';
38 // Convert description to text and truncate it if necessary.
39 desc = Node.create('<div>' + desc + '</div>').get('text');
41 if (desc.length > 65) {
42 desc = Y.Escape.html(desc.substr(0, 65)) + ' …';
44 desc = Y.Escape.html(desc);
47 raw['class'] || (raw['class'] = '');
48 raw.description = desc;
50 // Use the highlighted result name.
51 raw.name = result.highlighted;
53 return Lang.sub(this.RESULT_TEMPLATE, raw);
57 _apiTextLocator: function (result) {
58 return result.displayName || result.name;
61 // -- Attributes -----------------------------------------------------------
64 valueFn: function () {
65 return this._apiResultFormatter;
70 valueFn: function () {
71 return this._apiResultFilter;
84 valueFn: function () {
85 return this._apiTextLocator;
90 value: '/api/v1/search?q={query}&count={maxResults}'
95 }, '3.4.0', {requires: [
96 'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources',