DALi Version 1.4.26
[platform/core/uifw/dali-toolkit.git] / plugins / dali-script-v8 / docs / dali-theme / assets / js / api-search.js
1 YUI.add('api-search', function (Y) {
2
3 var Lang   = Y.Lang,
4     Node   = Y.Node,
5     YArray = Y.Array;
6
7 Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], {
8     // -- Public Properties ----------------------------------------------------
9     RESULT_TEMPLATE:
10         '<li class="result {resultType}">' +
11             '<a href="{url}">' +
12                 '<h3 class="title">{name}</h3>' +
13                 '<span class="type">{resultType}</span>' +
14                 '<div class="description">{description}</div>' +
15                 '<span class="className">{class}</span>' +
16             '</a>' +
17         '</li>',
18
19     // -- Initializer ----------------------------------------------------------
20     initializer: function () {
21         this._bindUIACBase();
22         this._syncUIACBase();
23     },
24
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;
30         });
31     },
32
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 || '';
37
38             // Convert description to text and truncate it if necessary.
39             desc = Node.create('<div>' + desc + '</div>').get('text');
40
41             if (desc.length > 65) {
42                 desc = Y.Escape.html(desc.substr(0, 65)) + ' &hellip;';
43             } else {
44                 desc = Y.Escape.html(desc);
45             }
46
47             raw['class'] || (raw['class'] = '');
48             raw.description = desc;
49
50             // Use the highlighted result name.
51             raw.name = result.highlighted;
52
53             return Lang.sub(this.RESULT_TEMPLATE, raw);
54         }, this);
55     },
56
57     _apiTextLocator: function (result) {
58         return result.displayName || result.name;
59     }
60 }, {
61     // -- Attributes -----------------------------------------------------------
62     ATTRS: {
63         resultFormatter: {
64             valueFn: function () {
65                 return this._apiResultFormatter;
66             }
67         },
68
69         resultFilters: {
70             valueFn: function () {
71                 return this._apiResultFilter;
72             }
73         },
74
75         resultHighlighter: {
76             value: 'phraseMatch'
77         },
78
79         resultListLocator: {
80             value: 'data.results'
81         },
82
83         resultTextLocator: {
84             valueFn: function () {
85                 return this._apiTextLocator;
86             }
87         },
88
89         source: {
90             value: '/api/v1/search?q={query}&count={maxResults}'
91         }
92     }
93 });
94
95 }, '3.4.0', {requires: [
96     'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources',
97     'escape'
98 ]});