@@ -77,36 +77,45 @@ <h2>Email Contacts</h2>
77
77
< p > An example showing how you might go about creating contact selector like those used in Email apps.</ p >
78
78
< div class ="control-group ">
79
79
< label for ="select-to "> To:</ label >
80
- < select id ="select-to " placeholder ="Pick some people... "> </ select >
80
+ < select id ="select-to " class =" contacts " placeholder ="Pick some people... "> </ select >
81
81
</ div >
82
82
< script >
83
83
// <select id="select-to"></select>
84
84
85
85
var REGEX_EMAIL = '([a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*@' +
86
86
'(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)' ;
87
87
88
+ var formatName = function ( item ) {
89
+ return $ . trim ( ( item . first_name || '' ) + ' ' + ( item . last_name || '' ) ) ;
90
+ } ;
91
+
88
92
$ ( '#select-to' ) . selectize ( {
89
- theme : 'contacts' ,
90
93
persist : false ,
91
94
maxItems : null ,
92
95
valueField : 'email' ,
93
96
labelField : 'name' ,
94
- searchField : [ 'name' , 'email' ] ,
97
+ searchField : [ 'first_name' , 'last_name' , 'email' ] ,
98
+ sortField : [
99
+ { field : 'first_name' , direction : 'asc' } ,
100
+ { field : 'last_name' , direction : 'asc' }
101
+ ] ,
95
102
options : [
96
- { email : 'brian@thirdroute .com' , name : 'Brian Reavis ' } ,
97
- { email : 'nikola@tesla .com' , name : 'Nikola Tesla ' } ,
103
+ { email : 'nikola@tesla .com' , first_name : 'Nikola' , last_name : 'Tesla '} ,
104
+ { email : 'brian@thirdroute .com' , first_name : 'Brian' , last_name : 'Reavis '} ,
98
105
99
106
] ,
100
107
render : {
101
108
item : function ( item , escape ) {
109
+ var name = formatName ( item ) ;
102
110
return '<div>' +
103
- ( item . name ? '<span class="name">' + escape ( item . name ) + '</span>' : '' ) +
111
+ ( name ? '<span class="name">' + escape ( name ) + '</span>' : '' ) +
104
112
( item . email ? '<span class="email">' + escape ( item . email ) + '</span>' : '' ) +
105
113
'</div>' ;
106
114
} ,
107
115
option : function ( item , escape ) {
108
- var label = item . name || item . email ;
109
- var caption = item . name ? item . email : null ;
116
+ var name = formatName ( item ) ;
117
+ var label = name || item . email ;
118
+ var caption = name ? item . email : null ;
110
119
return '<div>' +
111
120
'<span class="label">' + escape ( label ) + '</span>' +
112
121
( caption ? '<span class="caption">' + escape ( caption ) + '</span>' : '' ) +
@@ -119,9 +128,15 @@ <h2>Email Contacts</h2>
119
128
}
120
129
var match = input . match ( new RegExp ( '^([^<]*)\<' + REGEX_EMAIL + '\>$' , 'i' ) ) ;
121
130
if ( match ) {
131
+ var name = $ . trim ( match [ 1 ] ) ;
132
+ var pos_space = name . indexOf ( ' ' ) ;
133
+ var first_name = name . substring ( 0 , pos_space ) ;
134
+ var last_name = name . substring ( pos_space + 1 ) ;
135
+
122
136
return {
123
- email : match [ 2 ] ,
124
- name : $ . trim ( match [ 1 ] )
137
+ email : match [ 2 ] ,
138
+ first_name : first_name ,
139
+ last_name : last_name
125
140
} ;
126
141
}
127
142
alert ( 'Invalid email address.' ) ;
0 commit comments