mirror of
https://github.com/Mibew/CanteenHTML5.git
synced 2025-03-13 12:54:09 +03:00
99 lines
2.9 KiB
JavaScript
99 lines
2.9 KiB
JavaScript
YUI.add('api-search', function (Y) {
|
|
|
|
var Lang = Y.Lang,
|
|
Node = Y.Node,
|
|
YArray = Y.Array;
|
|
|
|
Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], {
|
|
// -- Public Properties ----------------------------------------------------
|
|
RESULT_TEMPLATE:
|
|
'<li class="result {resultType}">' +
|
|
'<a href="{url}">' +
|
|
'<h3 class="title">{name}</h3>' +
|
|
'<span class="type">{resultType}</span>' +
|
|
'<div class="description">{description}</div>' +
|
|
'<span class="className">{class}</span>' +
|
|
'</a>' +
|
|
'</li>',
|
|
|
|
// -- Initializer ----------------------------------------------------------
|
|
initializer: function () {
|
|
this._bindUIACBase();
|
|
this._syncUIACBase();
|
|
},
|
|
|
|
// -- Protected Methods ----------------------------------------------------
|
|
_apiResultFilter: function (query, results) {
|
|
// Filter components out of the results.
|
|
return YArray.filter(results, function (result) {
|
|
return result.raw.resultType === 'component' ? false : result;
|
|
});
|
|
},
|
|
|
|
_apiResultFormatter: function (query, results) {
|
|
return YArray.map(results, function (result) {
|
|
var raw = Y.merge(result.raw), // create a copy
|
|
desc = raw.description || '';
|
|
|
|
// Convert description to text and truncate it if necessary.
|
|
desc = Node.create('<div>' + desc + '</div>').get('text');
|
|
|
|
if (desc.length > 65) {
|
|
desc = Y.Escape.html(desc.substr(0, 65)) + ' …';
|
|
} else {
|
|
desc = Y.Escape.html(desc);
|
|
}
|
|
|
|
raw['class'] || (raw['class'] = '');
|
|
raw.description = desc;
|
|
|
|
// Use the highlighted result name.
|
|
raw.name = result.highlighted;
|
|
|
|
return Lang.sub(this.RESULT_TEMPLATE, raw);
|
|
}, this);
|
|
},
|
|
|
|
_apiTextLocator: function (result) {
|
|
return result.displayName || result.name;
|
|
}
|
|
}, {
|
|
// -- Attributes -----------------------------------------------------------
|
|
ATTRS: {
|
|
resultFormatter: {
|
|
valueFn: function () {
|
|
return this._apiResultFormatter;
|
|
}
|
|
},
|
|
|
|
resultFilters: {
|
|
valueFn: function () {
|
|
return this._apiResultFilter;
|
|
}
|
|
},
|
|
|
|
resultHighlighter: {
|
|
value: 'phraseMatch'
|
|
},
|
|
|
|
resultListLocator: {
|
|
value: 'data.results'
|
|
},
|
|
|
|
resultTextLocator: {
|
|
valueFn: function () {
|
|
return this._apiTextLocator;
|
|
}
|
|
},
|
|
|
|
source: {
|
|
value: '/api/v1/search?q={query}&count={maxResults}'
|
|
}
|
|
}
|
|
});
|
|
|
|
}, '3.4.0', {requires: [
|
|
'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources',
|
|
'escape'
|
|
]});
|