|  | @@ -1,4 +1,10 @@
 | 
	
		
			
			| 1 | 1 |  $(document).ready(function() {
 | 
	
		
			
			|  | 2 | +    highlightResult('top')();
 | 
	
		
			
			|  | 3 | +
 | 
	
		
			
			|  | 4 | +    $('.result').on('click', function() {
 | 
	
		
			
			|  | 5 | +        highlightResult($(this))();
 | 
	
		
			
			|  | 6 | +    });
 | 
	
		
			
			|  | 7 | +
 | 
	
		
			
			| 2 | 8 |      var vimKeys = {
 | 
	
		
			
			| 3 | 9 |          27: {
 | 
	
		
			
			| 4 | 10 |              key: 'Escape',
 | 
	
	
		
			
			|  | @@ -50,13 +56,13 @@ $(document).ready(function() {
 | 
	
		
			
			| 50 | 56 |          },
 | 
	
		
			
			| 51 | 57 |          75: {
 | 
	
		
			
			| 52 | 58 |              key: 'k',
 | 
	
		
			
			| 53 |  | -            fun: previousResult,
 | 
	
		
			
			|  | 59 | +            fun: highlightResult('up'),
 | 
	
		
			
			| 54 | 60 |              des: 'select previous search result',
 | 
	
		
			
			| 55 | 61 |              cat: 'Results'
 | 
	
		
			
			| 56 | 62 |          },
 | 
	
		
			
			| 57 | 63 |          74: {
 | 
	
		
			
			| 58 | 64 |              key: 'j',
 | 
	
		
			
			| 59 |  | -            fun: nextResult,
 | 
	
		
			
			|  | 65 | +            fun: highlightResult('down'),
 | 
	
		
			
			| 60 | 66 |              des: 'select next search result',
 | 
	
		
			
			| 61 | 67 |              cat: 'Results'
 | 
	
		
			
			| 62 | 68 |          },
 | 
	
	
		
			
			|  | @@ -75,7 +81,7 @@ $(document).ready(function() {
 | 
	
		
			
			| 75 | 81 |          79: {
 | 
	
		
			
			| 76 | 82 |              key: 'o',
 | 
	
		
			
			| 77 | 83 |              fun: openResult(false),
 | 
	
		
			
			| 78 |  | -            des: 'open  search result',
 | 
	
		
			
			|  | 84 | +            des: 'open search result',
 | 
	
		
			
			| 79 | 85 |              cat: 'Results'
 | 
	
		
			
			| 80 | 86 |          },
 | 
	
		
			
			| 81 | 87 |          84: {
 | 
	
	
		
			
			|  | @@ -118,6 +124,50 @@ $(document).ready(function() {
 | 
	
		
			
			| 118 | 124 |          }
 | 
	
		
			
			| 119 | 125 |      });
 | 
	
		
			
			| 120 | 126 |  
 | 
	
		
			
			|  | 127 | +    function highlightResult(which) {
 | 
	
		
			
			|  | 128 | +        return function() {
 | 
	
		
			
			|  | 129 | +            var current = $('.result[data-vim-selected]');
 | 
	
		
			
			|  | 130 | +            if (current.length === 0) {
 | 
	
		
			
			|  | 131 | +                current = $('.result:first');
 | 
	
		
			
			|  | 132 | +                if (current.length === 0) {
 | 
	
		
			
			|  | 133 | +                    return;
 | 
	
		
			
			|  | 134 | +                }
 | 
	
		
			
			|  | 135 | +            }
 | 
	
		
			
			|  | 136 | +
 | 
	
		
			
			|  | 137 | +            var next;
 | 
	
		
			
			|  | 138 | +
 | 
	
		
			
			|  | 139 | +            if (typeof which !== 'string') {
 | 
	
		
			
			|  | 140 | +                next = which;
 | 
	
		
			
			|  | 141 | +            } else {
 | 
	
		
			
			|  | 142 | +                switch (which) {
 | 
	
		
			
			|  | 143 | +                    // case 'visible':
 | 
	
		
			
			|  | 144 | +                    // TODO
 | 
	
		
			
			|  | 145 | +                    case 'down':
 | 
	
		
			
			|  | 146 | +                        next = current.next('.result');
 | 
	
		
			
			|  | 147 | +                        if (next.length === 0) {
 | 
	
		
			
			|  | 148 | +                            next = $('.result:first');
 | 
	
		
			
			|  | 149 | +                        }
 | 
	
		
			
			|  | 150 | +                        break;
 | 
	
		
			
			|  | 151 | +                    case 'up':
 | 
	
		
			
			|  | 152 | +                        next = current.prev('.result');
 | 
	
		
			
			|  | 153 | +                        if (next.length === 0) {
 | 
	
		
			
			|  | 154 | +                            next = $('.result:last');
 | 
	
		
			
			|  | 155 | +                        }
 | 
	
		
			
			|  | 156 | +                        break;
 | 
	
		
			
			|  | 157 | +                    case 'bottom':
 | 
	
		
			
			|  | 158 | +                        next = $('.result:last');
 | 
	
		
			
			|  | 159 | +                        break;
 | 
	
		
			
			|  | 160 | +                    case 'top':
 | 
	
		
			
			|  | 161 | +                    default:
 | 
	
		
			
			|  | 162 | +                        next = $('.result:first');
 | 
	
		
			
			|  | 163 | +                }
 | 
	
		
			
			|  | 164 | +            }
 | 
	
		
			
			|  | 165 | +
 | 
	
		
			
			|  | 166 | +            current.removeAttr('data-vim-selected').removeClass('well well-sm');
 | 
	
		
			
			|  | 167 | +            next.attr('data-vim-selected', 'true').addClass('well well-sm');
 | 
	
		
			
			|  | 168 | +        }
 | 
	
		
			
			|  | 169 | +    }
 | 
	
		
			
			|  | 170 | +
 | 
	
		
			
			| 121 | 171 |      function reloadPage() {
 | 
	
		
			
			| 122 | 172 |          document.location.reload(false);
 | 
	
		
			
			| 123 | 173 |      }
 | 
	
	
		
			
			|  | @@ -146,12 +196,14 @@ $(document).ready(function() {
 | 
	
		
			
			| 146 | 196 |      function scrollPage(amount) {
 | 
	
		
			
			| 147 | 197 |          return function() {
 | 
	
		
			
			| 148 | 198 |              window.scrollBy(0, amount);
 | 
	
		
			
			|  | 199 | +            highlightResult('visible')();
 | 
	
		
			
			| 149 | 200 |          }
 | 
	
		
			
			| 150 | 201 |      }
 | 
	
		
			
			| 151 | 202 |  
 | 
	
		
			
			| 152 | 203 |      function scrollPageTo(position) {
 | 
	
		
			
			| 153 | 204 |          return function() {
 | 
	
		
			
			| 154 | 205 |              window.scrollTo(0, position);
 | 
	
		
			
			|  | 206 | +            highlightResult('visible')();
 | 
	
		
			
			| 155 | 207 |          }
 | 
	
		
			
			| 156 | 208 |      }
 | 
	
		
			
			| 157 | 209 |  
 | 
	
	
		
			
			|  | @@ -159,13 +211,18 @@ $(document).ready(function() {
 | 
	
		
			
			| 159 | 211 |          $('input#q').focus();
 | 
	
		
			
			| 160 | 212 |      }
 | 
	
		
			
			| 161 | 213 |  
 | 
	
		
			
			| 162 |  | -    function previousResult() {
 | 
	
		
			
			| 163 |  | -    }
 | 
	
		
			
			| 164 |  | -
 | 
	
		
			
			| 165 |  | -    function nextResult() {
 | 
	
		
			
			| 166 |  | -    }
 | 
	
		
			
			| 167 |  | -
 | 
	
		
			
			| 168 | 214 |      function openResult(newTab) {
 | 
	
		
			
			|  | 215 | +        return function() {
 | 
	
		
			
			|  | 216 | +            var link = $('.result[data-vim-selected] .result_header a');
 | 
	
		
			
			|  | 217 | +            if (link.length) {
 | 
	
		
			
			|  | 218 | +                var url = link.attr('href');
 | 
	
		
			
			|  | 219 | +                if (newTab) {
 | 
	
		
			
			|  | 220 | +                    window.open(url);
 | 
	
		
			
			|  | 221 | +                } else {
 | 
	
		
			
			|  | 222 | +                    window.location.href = url;
 | 
	
		
			
			|  | 223 | +                }
 | 
	
		
			
			|  | 224 | +            }
 | 
	
		
			
			|  | 225 | +        };
 | 
	
		
			
			| 169 | 226 |      }
 | 
	
		
			
			| 170 | 227 |  
 | 
	
		
			
			| 171 | 228 |      function toggleHelp() {
 |