@@ -19,6 +19,7 @@ RED.typeSearch = (function() {
1919 function search ( val ) {
2020 activeFilter = val . toLowerCase ( ) ;
2121 var visible = searchResults . editableList ( 'filter' ) ;
22+ searchResults . editableList ( 'sort' ) ;
2223 setTimeout ( function ( ) {
2324 selected = 0 ;
2425 searchResults . children ( ) . removeClass ( 'selected' ) ;
@@ -101,6 +102,23 @@ RED.typeSearch = (function() {
101102 }
102103 return ( activeFilter === "" ) || ( data . index . indexOf ( activeFilter ) > - 1 ) ;
103104 } ,
105+ sort : function ( A , B ) {
106+ if ( activeFilter === "" ) {
107+ return A . i - B . i ;
108+ }
109+ var Ai = A . index . indexOf ( activeFilter ) ;
110+ var Bi = B . index . indexOf ( activeFilter ) ;
111+ if ( Ai === - 1 ) {
112+ return 1 ;
113+ }
114+ if ( Bi === - 1 ) {
115+ return - 1 ;
116+ }
117+ if ( Ai === Bi ) {
118+ return sortTypeLabels ( A , B ) ;
119+ }
120+ return Ai - Bi ;
121+ } ,
104122 addItem : function ( container , i , object ) {
105123 var def = object . def ;
106124 object . index = object . type . toLowerCase ( ) ;
@@ -225,7 +243,17 @@ RED.typeSearch = (function() {
225243 }
226244 return label ;
227245 }
228-
246+ function sortTypeLabels ( a , b ) {
247+ var al = a . label . toLowerCase ( ) ;
248+ var bl = b . label . toLowerCase ( ) ;
249+ if ( al < bl ) {
250+ return - 1 ;
251+ } else if ( al === bl ) {
252+ return 0 ;
253+ } else {
254+ return 1 ;
255+ }
256+ }
229257 function refreshTypeList ( ) {
230258 var i ;
231259 searchResults . editableList ( 'empty' ) ;
@@ -250,27 +278,19 @@ RED.typeSearch = (function() {
250278 items . push ( { type :t , def : def , label :getTypeLabel ( t , def ) } ) ;
251279 }
252280 } ) ;
253- items . sort ( function ( a , b ) {
254- var al = a . label . toLowerCase ( ) ;
255- var bl = b . label . toLowerCase ( ) ;
256- if ( al < bl ) {
257- return - 1 ;
258- } else if ( al === bl ) {
259- return 0 ;
260- } else {
261- return 1 ;
262- }
263- } )
281+ items . sort ( sortTypeLabels ) ;
264282
265283 var commonCount = 0 ;
266284 var item ;
285+ var index = 0 ;
267286 for ( i = 0 ; i < common . length ; i ++ ) {
268287 var itemDef = RED . nodes . getType ( common [ i ] ) ;
269288 if ( itemDef ) {
270289 item = {
271290 type : common [ i ] ,
272291 common : true ,
273- def : itemDef
292+ def : itemDef ,
293+ i : index ++
274294 } ;
275295 item . label = getTypeLabel ( item . type , item . def ) ;
276296 if ( i === common . length - 1 ) {
@@ -283,7 +303,8 @@ RED.typeSearch = (function() {
283303 item = {
284304 type :recentlyUsed [ i ] ,
285305 def : RED . nodes . getType ( recentlyUsed [ i ] ) ,
286- recent : true
306+ recent : true ,
307+ i : index ++
287308 } ;
288309 item . label = getTypeLabel ( item . type , item . def ) ;
289310 if ( i === recentlyUsed . length - 1 ) {
@@ -292,6 +313,7 @@ RED.typeSearch = (function() {
292313 searchResults . editableList ( 'addItem' , item ) ;
293314 }
294315 for ( i = 0 ; i < items . length ; i ++ ) {
316+ items [ i ] . i = index ++ ;
295317 searchResults . editableList ( 'addItem' , items [ i ] ) ;
296318 }
297319 setTimeout ( function ( ) {
0 commit comments