11var Autocompleters = {
2+ formatResultWithHint : function ( suggestion , currentValue ) {
3+ var result = $ . Autocomplete . formatResult ( suggestion , currentValue ) ;
4+
5+ if ( suggestion . data && suggestion . data . hint ) {
6+ result += '<span class="autocomplete-hint">' + suggestion . data . hint + '</span>' ;
7+ }
8+
9+ return result ;
10+ } ,
211 transformFunctions : {
312 default : function ( response , config ) {
413 return {
514 suggestions : $ . map ( response , function ( item ) {
6- return { value : item [ config . labelField ] , data : item [ config . idField ] , item : item } ;
15+ return { value : item [ config . labelField ] , data : { id : item [ config . idField ] , item : item } } ;
16+ } )
17+ } ;
18+ } ,
19+ events : function ( response , config ) {
20+ var today = new Date ( ) ;
21+ return {
22+ suggestions : $ . map ( response , function ( item ) {
23+ var group ;
24+ if ( item . end && new Date ( item . end ) < today ) {
25+ group = 'Past' ;
26+ } else {
27+ group = 'Upcoming' ;
28+ }
29+ var hint = null ;
30+ if ( item . start ) {
31+ hint = item . start . substr ( 0 , 10 ) ;
32+ }
33+ return { value : item [ config . labelField ] , data : { id : item [ config . idField ] , group : group , item : item , hint : hint } } ;
734 } )
835 } ;
936 } ,
@@ -15,7 +42,7 @@ var Autocompleters = {
1542 name = name + " (" + item . firstname + " " + item . surname + ")" ;
1643 }
1744 item . name = name ;
18- return { value : name , data : item [ config . idField ] , item : item } ;
45+ return { value : name , data : { id : item [ config . idField ] , item : item } } ;
1946 } )
2047 } ;
2148 }
@@ -32,6 +59,7 @@ var Autocompleters = {
3259 var labelField = $ ( element ) . data ( "labelField" ) || "title" ;
3360 var idField = $ ( element ) . data ( "idField" ) || "id" ;
3461 var singleton = $ ( element ) . data ( "singleton" ) || false ;
62+ var groupBy = $ ( element ) . data ( "groupBy" ) || false ;
3563 var templateName = $ ( element ) . data ( "template" ) ||
3664 ( singleton ? "autocompleter/singleton_resource" : "autocompleter/resource" ) ;
3765 var transformFunction = Autocompleters . transformFunctions [ $ ( element ) . data ( "transformFunction" ) || "default" ] ;
@@ -52,13 +80,16 @@ var Autocompleters = {
5280 dataType : "json" ,
5381 deferRequestBy : 300 , // Wait 300ms before submitting to stop search being flooded
5482 paramName : "q" ,
83+ groupBy : groupBy ,
84+ formatResult : Autocompleters . formatResultWithHint ,
5585 transformResult : function ( response ) {
5686 return transformFunction ( response , { labelField : labelField , idField : idField } ) ;
5787 } ,
5888 onSelect : function ( suggestion ) {
5989 // Don't add duplicates
60- if ( ! $ ( "[data-id='" + suggestion . data + "']" , listElement ) . length ) {
61- var obj = { item : suggestion . item } ;
90+ var id = suggestion . data . id ;
91+ if ( ! $ ( "[data-id='" + id + "']" , listElement ) . length ) {
92+ var obj = { item : suggestion . data . item } ;
6293 if ( prefix ) {
6394 obj . prefix = prefix ;
6495 }
@@ -72,7 +103,6 @@ var Autocompleters = {
72103 $ ( this ) . val ( '' ) . focus ( ) ;
73104 } ,
74105 onSearchStart : function ( query ) {
75- query . q = query . q + "*" ;
76106 inputElement . addClass ( "loading" ) ;
77107 } ,
78108 onSearchComplete : function ( ) {
0 commit comments