@@ -531,6 +531,7 @@ function getSearchElement() {
531
531
var OUTPUT_DATA = 1 ;
532
532
var NO_TYPE_FILTER = - 1 ;
533
533
var currentResults , index , searchIndex ;
534
+ var ALIASES = { } ;
534
535
var params = getQueryStringParams ( ) ;
535
536
536
537
// Populate search bar with query string search term when provided,
@@ -963,46 +964,60 @@ function getSearchElement() {
963
964
return itemTypes [ ty . ty ] + ty . path + ty . name ;
964
965
}
965
966
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
+
966
980
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 ] ] ) ) ;
981
989
}
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
+ }
987
998
}
988
- return - 1 ;
989
999
} ) ;
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 ( ) ;
1006
1021
}
1007
1022
}
1008
1023
}
@@ -1683,10 +1698,13 @@ function getSearchElement() {
1683
1698
searchIndex = [ ] ;
1684
1699
var searchWords = [ ] ;
1685
1700
var i ;
1701
+ var currentIndex = 0 ;
1686
1702
1687
1703
for ( var crate in rawSearchIndex ) {
1688
1704
if ( ! rawSearchIndex . hasOwnProperty ( crate ) ) { continue ; }
1689
1705
1706
+ var crateSize = 0 ;
1707
+
1690
1708
searchWords . push ( crate ) ;
1691
1709
searchIndex . push ( {
1692
1710
crate : crate ,
@@ -1696,6 +1714,7 @@ function getSearchElement() {
1696
1714
desc : rawSearchIndex [ crate ] . doc ,
1697
1715
type : null ,
1698
1716
} ) ;
1717
+ currentIndex += 1 ;
1699
1718
1700
1719
// an array of [(Number) item type,
1701
1720
// (String) name,
@@ -1707,6 +1726,9 @@ function getSearchElement() {
1707
1726
// an array of [(Number) item type,
1708
1727
// (String) name]
1709
1728
var paths = rawSearchIndex [ crate ] . p ;
1729
+ // a array of [(String) alias name
1730
+ // [Number] index to items]
1731
+ var aliases = rawSearchIndex [ crate ] . a ;
1710
1732
1711
1733
// convert `rawPaths` entries into object form
1712
1734
var len = paths . length ;
@@ -1725,9 +1747,18 @@ function getSearchElement() {
1725
1747
var lastPath = "" ;
1726
1748
for ( i = 0 ; i < len ; ++ i ) {
1727
1749
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
+ } ;
1731
1762
searchIndex . push ( row ) ;
1732
1763
if ( typeof row . name === "string" ) {
1733
1764
var word = row . name . toLowerCase ( ) ;
@@ -1736,7 +1767,24 @@ function getSearchElement() {
1736
1767
searchWords . push ( "" ) ;
1737
1768
}
1738
1769
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
+ }
1739
1786
}
1787
+ currentIndex += crateSize ;
1740
1788
}
1741
1789
return searchWords ;
1742
1790
}
0 commit comments