@@ -161,7 +161,8 @@ define(function (require) {
161
161
162
162
return {
163
163
init : function ( ) {
164
- var projects ;
164
+ var allProjects ;
165
+ var visibleProjects ;
165
166
var page = 0 ;
166
167
var maxPage = 0 ;
167
168
var maxShowedItems = 10 ;
@@ -180,53 +181,83 @@ define(function (require) {
180
181
} ,
181
182
onResponse : function ( $elem , $dropdown , response ) {
182
183
var self = this ;
183
- projects = response . map ( function ( item ) {
184
+ allProjects = response . map ( function ( item ) {
184
185
return item . name ;
185
186
} ) ;
186
- maxPage = projects . length / maxShowedItems ;
187
+ maxPage = allProjects . length / maxShowedItems ;
187
188
var html = hb . projectListDropdown ( ) ;
188
- var projectList = hb . projectList ( { projects : projects } ) ;
189
+ var projectList = hb . projectList ( { projects : allProjects } ) ;
189
190
$dropdown . append ( html ) ;
190
191
$dropdown . append ( projectList ) ;
191
- $ ( 'body' ) . on ( 'keyup' , '#project-list' , function ( ) {
192
+
193
+ var $body = $ ( 'body' ) ;
194
+ $body . on ( 'keyup' , '#project-list' , function ( ) {
195
+ page = 0 ;
192
196
self . updateProject ( $ ( this ) . val ( ) ) ;
193
197
} ) ;
194
- $ ( 'body' ) . on ( 'click' , '#prev-projects' , function ( ) {
195
- console . log ( 'prev' ) ; // @TODO
198
+ $body . on ( 'click' , '#prev-projects' , function ( e ) {
199
+ e . preventDefault ( ) ;
200
+ page -- ;
201
+ self . updateProject ( $ ( '#project-list' ) . val ( ) ) ;
196
202
} ) ;
197
- $ ( 'body' ) . on ( 'click' , '#next-projects' , function ( ) {
198
- console . log ( 'next' ) ; // @TODO
203
+ $body . on ( 'click' , '#next-projects' , function ( e ) {
204
+ e . preventDefault ( ) ;
205
+ page ++ ;
206
+ self . updateProject ( $ ( '#project-list' ) . val ( ) ) ;
199
207
} ) ;
200
208
return true ;
201
209
} ,
202
210
onShow : function ( $elem , $dropdown ) {
203
211
if ( ! screenSize . isMediumScreen ( ) ) {
204
212
$dropdown . hide ( ) ;
205
213
}
206
- if ( page === 0 ) {
207
- $ ( '#prev-projects' ) . hide ( ) ;
208
- }
209
- if ( page === maxPage ) {
210
- $ ( '#next-projects' ) . show ( ) ;
211
- }
214
+ this . updatePagination ( ) ;
212
215
} ,
213
216
onHide : function ( $elem , $dropdown ) {
214
217
$ ( '#project-list' ) . val ( '' ) ;
218
+ page = 0 ;
219
+ visibleProjects = allProjects ;
215
220
} ,
216
221
beforeShow : function ( ) {
217
222
this . updateProject ( "" ) ;
218
223
} ,
219
224
animate : function ( ) {
220
225
return screenSize . isMediumScreen ( ) ;
221
226
} ,
227
+ updatePagination : function ( ) {
228
+ if ( page === 0 ) {
229
+ $ ( '#prev-projects' ) . hide ( ) ;
230
+ } else {
231
+ $ ( '#prev-projects' ) . show ( ) ;
232
+ }
233
+ if ( visibleProjects . length < maxShowedItems ) {
234
+ $ ( '#next-projects' ) . hide ( ) ;
235
+ } else {
236
+ $ ( '#next-projects' ) . show ( ) ;
237
+ }
238
+ } ,
222
239
updateProject : function ( text ) {
223
- var showedItems = 0 ;
224
240
text = text . toLowerCase ( ) ;
241
+ visibleProjects = allProjects
242
+ . map ( function ( project ) { return project . toLowerCase ( ) ; } )
243
+ . filter ( function ( project ) { return project . includes ( text ) ; } ) ;
244
+
245
+ if ( visibleProjects . length > maxShowedItems ) {
246
+ visibleProjects = visibleProjects . slice (
247
+ page * maxShowedItems , ( page + 1 ) * maxShowedItems
248
+ )
249
+
250
+ } else {
251
+ // there is only one page, no needed pagination
252
+ $ ( '#prev-projects' ) . hide ( ) ;
253
+ $ ( '#next-projects' ) . hide ( ) ;
254
+ }
255
+ this . updatePagination ( ) ;
256
+
225
257
$ ( '#dropdown-project-list .item' ) . each ( function ( ) {
226
258
var name = $ ( this ) . data ( 'name' ) . toLowerCase ( ) ;
227
- if ( name . includes ( text ) && showedItems < maxShowedItems ) {
259
+ if ( visibleProjects . includes ( name ) ) {
228
260
$ ( this ) . show ( ) ;
229
- showedItems ++ ;
230
261
} else {
231
262
$ ( this ) . hide ( ) ;
232
263
}
0 commit comments