2 // setInterval(function() {
3 // Ext.get('styleCss').dom.href = "/css/style.css?" + Math.ceil(Math.random() * 10000);
6 var searchResults = Ext.create('Ext.XTemplate',
7 '<table class="searchResults">',
18 '<td><div class="icn icon-{iconCls}"></div></td>',
19 '<td class="result"><a href="#">{member}</td>',
20 '<td class="result"><a href="#">{cls}</td>',
31 Ext.onReady(function() {
33 var searchStore = new Ext.data.Store({
34 fields: [ 'memberType', 'cls', 'member' ],
44 datachanged: function() {
45 panel.render('search-box');
50 var panel = Ext.create('Ext.view.View', {
52 tpl: new Ext.XTemplate(
54 '<div class="item {memberType}">',
55 '<div class="title">{member}</div>',
56 '<div class="class">{cls}</div>',
61 overItemCls:'x-view-over',
63 itemSelector:'div.item',
66 handleClick: function(curItem) {
67 curItem = curItem || panel.getSelectionModel().getLastSelected();
68 var classId = curItem.data.cls;
70 if (req.standAloneMode) {
71 if (window.location.href.match(/api/)) {
72 window.location = classId + '.html';
74 window.location = 'api/' + classId + '.html';
80 if (curItem.data.memberType != 'cls') {
81 cls += '#' + curItem.data.memberType + '-' + curItem.data.member;
87 itemclick: function(panel, item) {
88 this.handleClick(item);
93 Ext.get('search-field').on('blur', function(ev, el) {
94 setTimeout(function(){
98 Ext.get('search-field').on('focus', function(ev, el) {
102 var submitForm = false;
105 * When a key is pressed in the search field, search for classes, methods, properties, configs, etc
107 Ext.get('search-field').on('keyup', function(ev, el) {
110 if (ev.keyCode == 27 || el.value == '') {
118 var curItem = panel.store.indexOf(panel.getSelectionModel().getLastSelected()), //panel.getSelectedRecords()[0],
119 lastItem = panel.store.data.length - 1,
120 selModel = panel.getSelectionModel();
123 if (ev.keyCode == 38) {
124 if (curItem == undefined) {
127 selModel.select(curItem == 0 ? lastItem : (curItem - 1));
131 else if (ev.keyCode == 40) {
132 if (curItem == undefined) {
135 selModel.select(curItem == lastItem ? 0 : curItem + 1);
139 else if (ev.keyCode == 13) {
144 var html = searchResults.apply(filterClasses(Ext.get(el).getValue(), 100))
145 showContent('Search', html)
149 searchExt(Ext.get(el).getValue());
153 Ext.get(Ext.get('search-field').dom.parentNode).on('submit', function(ev, el) {
161 if (req.standAloneMode) {
162 if (window.location.href.match(/api/)) {
163 req.baseDocURL = '../';
164 } else if (window.location.href.match(/guide/)){
165 req.baseDocURL = '../';
169 Ext.data.JsonP.request({
170 callbackKey: 'docsCallback',
171 url: req.baseDocURL + '/class_search.json',
172 success: function(response) {
173 classSearch = response;
177 var searchExt = function(term) {
178 searchStore.loadData(filterClasses(term), false);
181 var filterClasses = function(term, maxResults) {
183 maxResults = maxResults || 10;
186 var termExpr = new RegExp(term, "i");
187 var members = ['method', 'config', 'property', 'event'];
189 for (var cls in classSearch) {
190 if (cls.match(termExpr)) {
191 result.push({cls: cls, memberType: 'cls', member: cls});
192 if (result.length >= maxResults) return result;
195 for (var cls in classSearch) {
196 for (var m=0; m< 4; m++) {
197 var member = members[m];
198 for (var i=0; i< classSearch[cls][member].length; i++) {
199 var curMember = classSearch[cls][member][i];
200 if (curMember && curMember.match(termExpr)) {
203 if (member == 'cls') iconCls = 'class';
204 if (member == 'properties') iconCls = 'property';
205 if (member == 'methods') iconCls = 'method';
206 if (member == 'cfgs') iconCls = 'config';
207 if (member == 'events') iconCls = 'event';
209 result.push({ cls: cls, memberType: member, member: curMember, iconCls: iconCls });
210 if (result.length >= maxResults) return result;