@@ -40,7 +40,6 @@ var app = function app() {
40
40
critical ( 'There is no any available provider to search' ) ;
41
41
return ;
42
42
}
43
-
44
43
providersPrepare ( ) ;
45
44
listen ( ) ;
46
45
urlQueryHandler ( ) ;
@@ -108,16 +107,18 @@ var app = function app() {
108
107
109
108
// providersPrepare prepares UI for providers
110
109
function providersPrepare ( ) {
111
- // Iterate providers
110
+ // Iterate providers and prepare DOM elements
112
111
providerList . forEach ( function ( provider ) {
113
- // Prepare navigation bar tabs
114
- var content = '<li id="searchNavbarTabs-' + provider . name + '" role="presentation">' ;
115
- content += '<a href="javascript:void(0)" onclick="$.scrollTo(\'#' + provider . name + '\', 500, {offset: {top: -110}})">' + provider . title + '</a>' ;
116
- content += '</li>' ;
117
- $ ( '#searchNavbarTabs' ) . append ( content ) ;
118
-
119
- // Prepare search result divs
120
- $ ( '#searchResults' ) . append ( '<div id="searchResults-' + provider . name + '">' ) ;
112
+ // Navigations
113
+ $ ( '#searchResultsNavs' ) . append ( '<li id="searchResultsNavs-' + provider . name + '" class="disabled" role="presentation"><a href="#' + provider . name + '" aria-controls="' + provider . name + '" role="tab" data-toggle="tab">' + provider . title + '</a></li>' ) ;
114
+ // Tabs
115
+ $ ( '#searchResultsTabs' ) . append ( '<div id="' + provider . name + '" role="tabpanel" class="tab-pane">' ) ;
116
+ } ) ;
117
+
118
+ // Initialize navigation clicks
119
+ $ ( '#searchResultsNavs a' ) . click ( function ( e ) {
120
+ e . preventDefault ( ) ;
121
+ $ ( this ) . tab ( 'show' ) ;
121
122
} ) ;
122
123
}
123
124
@@ -138,20 +139,22 @@ var app = function app() {
138
139
139
140
// searchReset resets UI for search
140
141
function searchReset ( ) {
142
+ providerList . forEach ( function ( provider ) { $ ( '#' + provider . name ) . empty ( ) ; } ) ;
143
+
141
144
$ ( '#searchInput' ) . val ( '' ) ;
142
- $ ( 'div[id^=searchResults-]' ) . empty ( ) ;
143
- $ ( '#searchNavbar' ) . addClass ( 'search-navbar-hide' ) ;
145
+ $ ( '#searchResultsNavs' ) . addClass ( 'search-result-navs-hide' ) ;
144
146
$ ( '#logoMain' ) . detach ( ) . appendTo ( $ ( '#logoMiddleHolder' ) ) . removeClass ( 'logo-navbar' ) ;
145
147
$ ( '#searchMain' ) . detach ( ) . appendTo ( $ ( "#searchMiddleHolder" ) ) . removeClass ( 'input-group-search-navbar' ) ;
146
148
$ ( '#searchInput' ) . focus ( ) ;
147
149
}
148
150
149
151
// searchPrepare prepares UI for search
150
152
function searchPrepare ( ) {
153
+ providerList . forEach ( function ( provider ) { $ ( '#' + provider . name ) . empty ( ) ; } ) ;
154
+
151
155
$ ( '#logoMain' ) . detach ( ) . appendTo ( $ ( '#logoNavbarHolder' ) ) . addClass ( 'logo-navbar' ) ;
152
156
$ ( '#searchMain' ) . detach ( ) . appendTo ( $ ( "#searchNavbarHolder" ) ) . addClass ( 'input-group-search-navbar' ) ;
153
- $ ( '#searchNavbar' ) . removeClass ( 'search-navbar-hide' ) ;
154
- $ ( 'div[id^=searchResults-]' ) . empty ( ) ;
157
+ $ ( '#searchResultsNavs' ) . removeClass ( 'search-result-navs-hide' ) ;
155
158
156
159
// If the current search input value is different than previous value then
157
160
var sivc = $ ( '#searchInput' ) . val ( ) ;
@@ -163,7 +166,6 @@ var app = function app() {
163
166
$ ( document ) . prop ( 'title' , 'Ferret - ' + sivc ) ;
164
167
}
165
168
$ ( '#searchInput' ) . attr ( 'data-prev-value' , sivc ) ;
166
- $ ( '#searchInput' ) . focus ( ) ;
167
169
}
168
170
169
171
// searchResults renders search results
@@ -172,8 +174,6 @@ var app = function app() {
172
174
// Prepare result content
173
175
var content = '' ;
174
176
if ( provider && typeof provider === 'object' ) {
175
- content += '<h3 id="' + provider . name + '">' + provider . title + '</h3>' ;
176
-
177
177
// Iterate results
178
178
$ . map ( data , function ( v ) {
179
179
content += '<li class="search-results-li">' ;
@@ -184,22 +184,30 @@ var app = function app() {
184
184
content += '</p>' ;
185
185
content += '</li>' ;
186
186
} ) ;
187
- content += '<hr>' ;
188
187
}
189
- $ ( "#searchResults-" + provider . name ) . html ( content ) ;
190
- $ ( "#searchNavbarTabs-" + provider . name ) . removeClass ( "disabled" ) ;
188
+ $ ( '#' + provider . name ) . html ( content ) ;
189
+ $ ( '#' + provider . name ) . attr ( 'data-result' , true ) ;
190
+ $ ( '#searchResultsNavs-' + provider . name ) . removeClass ( "disabled" ) ;
191
191
} else {
192
- $ ( "#searchNavbarTabs-" + provider . name ) . addClass ( "disabled" ) ;
192
+ $ ( '#' + provider . name ) . html ( 'No results' ) ;
193
+ $ ( '#' + provider . name ) . attr ( 'data-result' , false ) ;
194
+ $ ( '#searchResultsNavs-' + provider . name ) . addClass ( "disabled" ) ;
195
+ }
196
+
197
+ var tId = $ ( '#searchResultsTabs [data-result=true]:first' ) . attr ( "id" ) ;
198
+ if ( tId ) {
199
+ $ ( 'a[role=tab][aria-controls=' + tId + ']' ) . tab ( 'show' ) ;
193
200
}
194
201
}
195
202
196
203
// searchError shows a search error
197
204
function searchError ( err , provider ) {
198
205
var e = parseError ( err ) ;
199
206
if ( provider && typeof provider === 'object' ) {
200
- $ ( '#searchResults' ) . append ( $ ( '<h3 id="' + provider . name + '">' ) . text ( provider . title ) ) ;
207
+ $ ( '#' + provider . name ) . append ( $ ( '<div class="alert alert-danger" role="alert">' ) . text ( e . message ) ) ;
208
+ } else {
209
+ $ ( '#searchResultsTabs' ) . append ( $ ( '<div class="alert alert-danger" role="alert">' ) . text ( e . message ) ) ;
201
210
}
202
- $ ( '#searchResults' ) . append ( $ ( '<div class="alert alert-danger" role="alert">' ) . text ( e . message ) ) ;
203
211
}
204
212
205
213
// warning shows a warning message
0 commit comments