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',