'use strict' ;
define (
[
'marionette' ,
'AddSeries/Collection' ,
'AddSeries/SearchResultCollectionView' ,
'Shared/SpinnerView'
] , function ( Marionette , AddSeriesCollection , SearchResultCollectionView , SpinnerView ) {
return Marionette . Layout . extend ( {
template : 'AddSeries/AddSeriesTemplate' ,
ui : {
seriesSearch : '.x-series-search' ,
searchBar : '.x-search-bar' ,
loadMore : '.x-load-more'
} ,
regions : {
searchResult : '#search-result'
} ,
initialize : function ( options ) {
this . collection = new AddSeriesCollection ( ) ;
this . isExisting = options . isExisting ;
} ,
onRender : function ( ) {
var self = this ;
this . ui . seriesSearch . data ( 'timeout' , null ) . keyup ( function ( ) {
window . clearTimeout ( self . $el . data ( 'timeout' ) ) ;
self . $el . data ( 'timeout' , window . setTimeout ( function ( ) {
self . search . call ( self , {
term : self . ui . seriesSearch . val ( )
} ) ;
} , 500 ) ) ;
} ) ;
if ( this . isExisting ) {
this . ui . searchBar . hide ( ) ;
}
this . resultView = new SearchResultCollectionView ( {
fullResult : this . collection ,
isExisting : this . isExisting
} ) ;
} ,
search : function ( options ) {
var self = this ;
this . abortExistingRequest ( ) ;
this . collection . reset ( ) ;
if ( ! options || options . term === '' ) {
this . searchResult . close ( ) ;
}
else {
this . searchResult . show ( new SpinnerView ( ) ) ;
this . currentSearchRequest = this . collection . fetch ( {
data : { term : options . term }
} ) . done ( function ( ) {
self . searchResult . show ( self . resultView ) ;
if ( ! self . showingAll && self . isExisting ) {
self . ui . loadMore . show ( ) ;
}
} ) ;
}
} ,
abortExistingRequest : function ( ) {
if ( this . currentSearchRequest && this . currentSearchRequest . readyState > 0 && this . currentSearchRequest . readyState < 4 ) {
console . log ( 'aborting previous pending search request.' ) ;
this . currentSearchRequest . abort ( ) ;
}
}
} ) ;
} ) ;