@@ -531,6 +531,7 @@ function getSearchElement() {
531531 var OUTPUT_DATA = 1 ;
532532 var NO_TYPE_FILTER = - 1 ;
533533 var currentResults , index , searchIndex ;
534+ var ALIASES = { } ;
534535 var params = getQueryStringParams ( ) ;
535536
536537 // Populate search bar with query string search term when provided,
@@ -963,46 +964,60 @@ function getSearchElement() {
963964 return itemTypes [ ty . ty ] + ty . path + ty . name ;
964965 }
965966
967+ function createAliasFromItem ( item ) {
968+ return {
969+ crate : item . crate ,
970+ name : item . name ,
971+ path : item . path ,
972+ desc : item . desc ,
973+ ty : item . ty ,
974+ parent : item . parent ,
975+ type : item . parent ,
976+ is_alias : true ,
977+ } ;
978+ }
979+
966980 function handleAliases ( ret , query , filterCrates ) {
967- if ( ALIASES ) {
968- var aliases = [ ] ;
969- if ( filterCrates !== undefined &&
970- ALIASES [ filterCrates ] &&
971- ALIASES [ filterCrates ] [ query . search ] ) {
972- aliases = ALIASES [ filterCrates ] [ query . search ] ;
973- } else {
974- Object . keys ( ALIASES ) . forEach ( function ( crate ) {
975- if ( ALIASES [ crate ] [ query . search ] ) {
976- for ( var i = 0 ; i < ALIASES [ crate ] [ query . search ] . length ; ++ i ) {
977- aliases . push ( ALIASES [ crate ] [ query . search ] [ i ] ) ;
978- }
979- }
980- } ) ;
981+ var aliases = [ ] ;
982+ var i ;
983+ if ( filterCrates !== undefined &&
984+ ALIASES [ filterCrates ] &&
985+ ALIASES [ filterCrates ] [ query . search ] ) {
986+ for ( i = 0 ; i < ALIASES [ crate ] [ query . search ] . length ; ++ i ) {
987+ aliases . push (
988+ createAliasFromItem ( searchIndex [ ALIASES [ filterCrates ] [ query . search ] ] ) ) ;
981989 }
982- aliases . sort ( function ( aaa , bbb ) {
983- if ( aaa . path < bbb . path ) {
984- return 1 ;
985- } else if ( aaa . path === bbb . path ) {
986- return 0 ;
990+ } else {
991+ Object . keys ( ALIASES ) . forEach ( function ( crate ) {
992+ if ( ALIASES [ crate ] [ query . search ] ) {
993+ for ( i = 0 ; i < ALIASES [ crate ] [ query . search ] . length ; ++ i ) {
994+ aliases . push (
995+ createAliasFromItem (
996+ searchIndex [ ALIASES [ crate ] [ query . search ] [ i ] ] ) ) ;
997+ }
987998 }
988- return - 1 ;
989999 } ) ;
990- for ( var i = 0 ; i < aliases . length ; ++ i ) {
991- var alias = aliases [ i ] ;
992- alias . is_alias = true ;
993- if ( typeof alias . parent === "number" ) {
994- alias . parent = rawSearchIndex [ alias . crate ] . p [ alias . parent ] ;
995- }
996- alias . alias = query . raw ;
997- alias . path = alias . p || alias . crate ;
998- var res = buildHrefAndPath ( aliases [ i ] ) ;
999- alias . displayPath = pathSplitter ( res [ 0 ] ) ;
1000- alias . fullPath = alias . displayPath + alias . name ;
1001- alias . href = res [ 1 ] ;
1002- ret . others . unshift ( alias ) ;
1003- if ( ret . others . length > MAX_RESULTS ) {
1004- ret . others . pop ( ) ;
1005- }
1000+ }
1001+ aliases . sort ( function ( aaa , bbb ) {
1002+ if ( aaa . path < bbb . path ) {
1003+ return 1 ;
1004+ } else if ( aaa . path === bbb . path ) {
1005+ return 0 ;
1006+ }
1007+ return - 1 ;
1008+ } ) ;
1009+ for ( i = 0 ; i < aliases . length ; ++ i ) {
1010+ var alias = aliases [ i ] ;
1011+
1012+ alias . alias = query . raw ;
1013+ var res = buildHrefAndPath ( alias ) ;
1014+ alias . displayPath = pathSplitter ( res [ 0 ] ) ;
1015+ alias . fullPath = alias . displayPath + alias . name ;
1016+ alias . href = res [ 1 ] ;
1017+
1018+ ret . others . unshift ( alias ) ;
1019+ if ( ret . others . length > MAX_RESULTS ) {
1020+ ret . others . pop ( ) ;
10061021 }
10071022 }
10081023 }
@@ -1683,10 +1698,13 @@ function getSearchElement() {
16831698 searchIndex = [ ] ;
16841699 var searchWords = [ ] ;
16851700 var i ;
1701+ var currentIndex = 0 ;
16861702
16871703 for ( var crate in rawSearchIndex ) {
16881704 if ( ! rawSearchIndex . hasOwnProperty ( crate ) ) { continue ; }
16891705
1706+ var crateSize = 0 ;
1707+
16901708 searchWords . push ( crate ) ;
16911709 searchIndex . push ( {
16921710 crate : crate ,
@@ -1696,6 +1714,7 @@ function getSearchElement() {
16961714 desc : rawSearchIndex [ crate ] . doc ,
16971715 type : null ,
16981716 } ) ;
1717+ currentIndex += 1 ;
16991718
17001719 // an array of [(Number) item type,
17011720 // (String) name,
@@ -1707,6 +1726,9 @@ function getSearchElement() {
17071726 // an array of [(Number) item type,
17081727 // (String) name]
17091728 var paths = rawSearchIndex [ crate ] . p ;
1729+ // a array of [(String) alias name
1730+ // [Number] index to items]
1731+ var aliases = rawSearchIndex [ crate ] . a ;
17101732
17111733 // convert `rawPaths` entries into object form
17121734 var len = paths . length ;
@@ -1725,9 +1747,18 @@ function getSearchElement() {
17251747 var lastPath = "" ;
17261748 for ( i = 0 ; i < len ; ++ i ) {
17271749 var rawRow = items [ i ] ;
1728- var row = { crate : crate , ty : rawRow [ 0 ] , name : rawRow [ 1 ] ,
1729- path : rawRow [ 2 ] || lastPath , desc : rawRow [ 3 ] ,
1730- parent : paths [ rawRow [ 4 ] ] , type : rawRow [ 5 ] } ;
1750+ if ( ! rawRow [ 2 ] ) {
1751+ rawRow [ 2 ] = lastPath ;
1752+ }
1753+ var row = {
1754+ crate : crate ,
1755+ ty : rawRow [ 0 ] ,
1756+ name : rawRow [ 1 ] ,
1757+ path : rawRow [ 2 ] ,
1758+ desc : rawRow [ 3 ] ,
1759+ parent : paths [ rawRow [ 4 ] ] ,
1760+ type : rawRow [ 5 ] ,
1761+ } ;
17311762 searchIndex . push ( row ) ;
17321763 if ( typeof row . name === "string" ) {
17331764 var word = row . name . toLowerCase ( ) ;
@@ -1736,7 +1767,24 @@ function getSearchElement() {
17361767 searchWords . push ( "" ) ;
17371768 }
17381769 lastPath = row . path ;
1770+ crateSize += 1 ;
1771+ }
1772+
1773+ if ( aliases ) {
1774+ ALIASES [ crate ] = { } ;
1775+ var j , local_aliases ;
1776+ for ( i = 0 ; i < aliases . length ; ++ i ) {
1777+ var alias_name = aliases [ i ] [ 0 ] ;
1778+ if ( ! ALIASES [ crate ] . hasOwnProperty ( alias_name ) ) {
1779+ ALIASES [ crate ] [ alias_name ] = [ ] ;
1780+ }
1781+ local_aliases = aliases [ i ] [ 1 ] ;
1782+ for ( j = 0 ; j < local_aliases . length ; ++ j ) {
1783+ ALIASES [ crate ] [ alias_name ] . push ( local_aliases [ j ] + currentIndex ) ;
1784+ }
1785+ }
17391786 }
1787+ currentIndex += crateSize ;
17401788 }
17411789 return searchWords ;
17421790 }
0 commit comments