@@ -1715,14 +1715,14 @@ function domReadyMast() {
1715
1715
function pageReadyMast ( ) {
1716
1716
}
1717
1717
1718
- function domReadyMenu ( ) {
1718
+ function domReadyMenu ( minisearch ) {
1719
1719
$ . ajax ( {
1720
1720
// cannot use "/api/v1/configuration/suggester" because of security
1721
1721
url : window . contextPath + "/suggest/config" ,
1722
1722
dataType : "json" ,
1723
1723
success : function ( config ) {
1724
1724
if ( config . enabled ) {
1725
- initAutocomplete ( config ) ;
1725
+ initAutocomplete ( config , minisearch ) ;
1726
1726
}
1727
1727
} ,
1728
1728
error : function ( xhr , ajaxOptions , error ) {
@@ -1731,23 +1731,9 @@ function domReadyMenu() {
1731
1731
} ) ;
1732
1732
}
1733
1733
1734
- function initAutocomplete ( config ) {
1735
- if ( config . allowedFields ) {
1736
- if ( config . allowedFields . includes ( 'full' ) ) {
1737
- initAutocompleteForField ( "q" , "full" , config ) ;
1738
- }
1739
- if ( config . allowedFields . includes ( 'defs' ) ) {
1740
- initAutocompleteForField ( "defs" , "defs" , config ) ;
1741
- }
1742
- if ( config . allowedFields . includes ( 'refs' ) ) {
1743
- initAutocompleteForField ( "refs" , "refs" , config ) ;
1744
- }
1745
- if ( config . allowedFields . includes ( 'path' ) ) {
1746
- initAutocompleteForField ( "path" , "path" , config ) ;
1747
- }
1748
- if ( config . allowedFields . includes ( 'hist' ) ) {
1749
- initAutocompleteForField ( "hist" , "hist" , config ) ;
1750
- }
1734
+ function initAutocomplete ( config , minisearch ) {
1735
+ if ( minisearch ) {
1736
+ initMinisearchAutocomplete ( config ) ;
1751
1737
} else {
1752
1738
initAutocompleteForField ( "q" , "full" , config ) ;
1753
1739
initAutocompleteForField ( "defs" , "defs" , config ) ;
@@ -1757,38 +1743,63 @@ function initAutocomplete(config) {
1757
1743
}
1758
1744
}
1759
1745
1760
- function initAutocompleteForField ( inputId , field , config ) {
1746
+ function initMinisearchAutocomplete ( config ) {
1747
+ if ( config . allowedFields && ! config . allowedFields . contains ( 'full' ) ) {
1748
+ return ;
1749
+ }
1750
+
1751
+ var project = '' ;
1752
+
1753
+ var projectElem = $ ( '#minisearch-project' ) ;
1754
+ if ( projectElem ) {
1755
+ project = projectElem . val ( ) ;
1756
+ }
1757
+
1758
+ var pathElem = $ ( '#minisearch-path' ) ;
1759
+
1760
+ initAutocompleteForField ( 'search' , 'full' , config , function ( input , field ) {
1761
+ var caretPos = input . caret ( ) ;
1762
+ if ( ! Number . isInteger ( caretPos ) ) {
1763
+ console . error ( "Suggest: could not get caret position" ) ;
1764
+ return ;
1765
+ }
1766
+ return {
1767
+ projects : [ project ] ,
1768
+ field : field ,
1769
+ full : input . val ( ) ,
1770
+ path : pathElem . is ( ':checked' ) ? pathElem . val ( ) : '' ,
1771
+ caret : caretPos
1772
+ }
1773
+ } , 'search' ) ;
1774
+ }
1775
+
1776
+ function initAutocompleteForField ( inputId , field , config , dataFunction , errorElemId ) {
1777
+ if ( config . allowedFields && ! config . allowedFields . contains ( field ) ) {
1778
+ return ;
1779
+ }
1780
+
1761
1781
var text ;
1762
1782
var identifier ;
1763
1783
var time ;
1764
1784
1765
1785
var input = $ ( "#" + inputId ) ;
1766
1786
1787
+ if ( ! dataFunction ) {
1788
+ dataFunction = getAutocompleteMenuData ;
1789
+ }
1790
+ if ( ! errorElemId ) {
1791
+ errorElemId = 'q' ;
1792
+ }
1793
+ var errorElem = $ ( '#' + errorElemId ) ;
1794
+
1767
1795
input . autocomplete ( {
1768
1796
source : function ( request , response ) {
1769
-
1770
- var caretPos = $ ( '#' + inputId ) . caret ( ) ;
1771
- if ( ! Number . isInteger ( caretPos ) ) {
1772
- console . error ( "Suggest: could not get caret position" ) ;
1773
- return ;
1774
- }
1775
-
1776
1797
$ . ajax ( {
1777
1798
url : window . contextPath + "/suggest" ,
1778
1799
dataType : "json" ,
1779
- data : {
1780
- projects : getSelectedProjectNames ( ) ,
1781
- field : field ,
1782
- full : $ ( '#q' ) . val ( ) ,
1783
- defs : $ ( '#defs' ) . val ( ) ,
1784
- refs : $ ( '#refs' ) . val ( ) ,
1785
- path : $ ( '#path' ) . val ( ) ,
1786
- hist : $ ( '#hist' ) . val ( ) ,
1787
- type : $ ( '#type' ) . val ( ) ,
1788
- caret : caretPos
1789
- } ,
1800
+ data : dataFunction ( input , field ) ,
1790
1801
success : function ( data ) {
1791
- hideError ( ) ;
1802
+ hideError ( errorElem ) ;
1792
1803
1793
1804
text = data . queryText ;
1794
1805
identifier = data . identifier ;
@@ -1800,7 +1811,7 @@ function initAutocompleteForField(inputId, field, config) {
1800
1811
input . autocomplete ( "close" ) ;
1801
1812
response ( undefined ) ; // to remove loading indicator
1802
1813
1803
- showError ( xhr . responseJSON . message )
1814
+ showError ( xhr . responseJSON . message , errorElem )
1804
1815
} ,
1805
1816
statusCode : {
1806
1817
404 : function ( ) {
@@ -1872,12 +1883,31 @@ function initAutocompleteForField(inputId, field, config) {
1872
1883
} ) ;
1873
1884
}
1874
1885
1875
- function showError ( errorText ) {
1876
- var topInputParent = $ ( '#q' ) . parent ( ) ;
1886
+ function getAutocompleteMenuData ( input , field ) {
1887
+ var caretPos = input . caret ( ) ;
1888
+ if ( ! Number . isInteger ( caretPos ) ) {
1889
+ console . error ( "Suggest: could not get caret position" ) ;
1890
+ return ;
1891
+ }
1892
+ return {
1893
+ projects : getSelectedProjectNames ( ) ,
1894
+ field : field ,
1895
+ full : $ ( '#q' ) . val ( ) ,
1896
+ defs : $ ( '#defs' ) . val ( ) ,
1897
+ refs : $ ( '#refs' ) . val ( ) ,
1898
+ path : $ ( '#path' ) . val ( ) ,
1899
+ hist : $ ( '#hist' ) . val ( ) ,
1900
+ type : $ ( '#type' ) . val ( ) ,
1901
+ caret : caretPos
1902
+ }
1903
+ }
1904
+
1905
+ function showError ( errorText , errorElem ) {
1906
+ var parent = errorElem . parent ( ) ;
1877
1907
1878
- topInputParent . css ( 'position' , 'relative' ) ;
1908
+ parent . css ( 'position' , 'relative' ) ;
1879
1909
1880
- var span = topInputParent . find ( '#autocomplete-error' ) [ 0 ] ;
1910
+ var span = parent . find ( '#autocomplete-error' ) [ 0 ] ;
1881
1911
if ( ! span ) {
1882
1912
span = $ ( "<span>" , {
1883
1913
class : "important-note important-note-rounded" ,
@@ -1886,7 +1916,7 @@ function showError(errorText) {
1886
1916
id : 'autocomplete-error'
1887
1917
} ) ;
1888
1918
1889
- span . appendTo ( topInputParent ) ;
1919
+ span . appendTo ( parent ) ;
1890
1920
} else {
1891
1921
span = $ ( span ) ;
1892
1922
span . off ( "mouseenter mouseleave" ) ;
@@ -1901,9 +1931,9 @@ function showError(errorText) {
1901
1931
} ) ;
1902
1932
}
1903
1933
1904
- function hideError ( ) {
1905
- var topInputParent = $ ( '#q' ) . parent ( ) ;
1906
- var span = topInputParent . find ( '#autocomplete-error' ) [ 0 ] ;
1934
+ function hideError ( errorElem ) {
1935
+ var parent = errorElem . parent ( ) ;
1936
+ var span = parent . find ( '#autocomplete-error' ) [ 0 ] ;
1907
1937
if ( span ) {
1908
1938
span . remove ( ) ;
1909
1939
}
0 commit comments