summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind1991@gmail.com>2011-07-31 04:03:48 +0200
committerRobin Appelman <icewind1991@gmail.com>2011-07-31 04:03:48 +0200
commit5ef407d1c97cecf932e2578da71362c0353b96c9 (patch)
tree18cc0a2843f394fe5a3166b1741b61adf76320bc
parenteb3526c9a6f8efab1b0fe3e5588b3ed1f43d2294 (diff)
downloadnextcloud-server-5ef407d1c97cecf932e2578da71362c0353b96c9.tar.gz
nextcloud-server-5ef407d1c97cecf932e2578da71362c0353b96c9.zip
keyboard shortcuts for search results
-rw-r--r--core/js/js.js49
-rw-r--r--core/templates/part.searchbox.php2
-rw-r--r--lib/base.php1
-rw-r--r--search/css/results.css1
-rw-r--r--search/js/result.js14
5 files changed, 56 insertions, 11 deletions
diff --git a/core/js/js.js b/core/js/js.js
index 99372c5f241..a83d6abb6a5 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -70,14 +70,18 @@ OC={
},
search:function(query){
if(query){
- OC.addScript('search','result',function(){
- OC.addStyle('search','results');
- $.getJSON(OC.filePath('search','ajax','search.php')+'?query='+encodeURIComponent(query), OC.search.showResults);
+ OC.addStyle('search','results');
+ $.getJSON(OC.filePath('search','ajax','search.php')+'?query='+encodeURIComponent(query), function(results){
+ OC.search.lastResults=results;
+ OC.search.showResults(results);
});
}
}
}
OC.search.customResults={};
+OC.search.currentResult=-1;
+OC.search.lastQuery='';
+OC.search.lastResults={};
OC.addStyle.loaded=[];
OC.addScript.loaded=[];
@@ -133,15 +137,40 @@ $(document).ready(function(){
element.attr('src',src.substr(0,src.length-3)+'png');
});
};
- $('#searchbox').keyup(function(){
- var query=$('#searchbox').val();
- if(query.length>2){
- OC.search(query);
+ $('form.searchbox').submit(function(event){
+ event.preventDefault();
+ })
+ $('#searchbox').keyup(function(event){
+ if(event.keyCode==13){//enter
+ if(OC.search.currentResult>-1){
+ var result=$('#searchresults tr.result a')[OC.search.currentResult];
+ $(result).click();
+ }
+ }else if(event.keyCode==38){//up
+ if(OC.search.currentResult>0){
+ OC.search.currentResult--;
+ OC.search.renderCurrent();
+ }
+ }else if(event.keyCode==40){//down
+ if(OC.search.lastResults.length>OC.search.currentResult+1){
+ OC.search.currentResult++;
+ OC.search.renderCurrent();
+ }
+ }else if(event.keyCode==27){//esc
+ OC.search.hide();
}else{
- if(OC.search.hide){
- OC.search.hide();
+ var query=$('#searchbox').val();
+ if(OC.search.lastQuery!=query){
+ OC.search.lastQuery=query;
+ OC.search.currentResult=-1;
+ if(query.length>2){
+ OC.search(query);
+ }else{
+ if(OC.search.hide){
+ OC.search.hide();
+ }
+ }
}
}
});
- $('#searchbox').click(function(){$('#searchbox').trigger('keyup')});
});
diff --git a/core/templates/part.searchbox.php b/core/templates/part.searchbox.php
index ddf184ed5b6..49b44c718ec 100644
--- a/core/templates/part.searchbox.php
+++ b/core/templates/part.searchbox.php
@@ -1,3 +1,3 @@
-<form class="searchbox" action="<?php echo $_['searchurl']?>" method="post">
+<form class="searchbox" action="#" method="post">
<input id='searchbox' type="search" name="query" value="<?php if(isset($_POST['query'])){echo $_POST['query'];};?>" class="prettybutton" />
</form>
diff --git a/lib/base.php b/lib/base.php
index 2c29d9c571d..98c6fbb8e33 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -96,6 +96,7 @@ OC_Group::setBackend( OC_Config::getValue( "groupbackend", "database" ));
OC_Util::addScript( "jquery-1.6.2.min" );
OC_Util::addScript( "jquery-ui-1.8.14.custom.min" );
OC_Util::addScript( "js" );
+OC_Util::addScript('search','result');
OC_Util::addStyle( "jquery-ui-1.8.14.custom" );
OC_Util::addStyle( "styles" );
diff --git a/search/css/results.css b/search/css/results.css
index 61b7cf541c5..e61bf419b35 100644
--- a/search/css/results.css
+++ b/search/css/results.css
@@ -6,3 +6,4 @@
#searchresults td.result{width:30em;}
#searchresults td.result *{cursor:pointer}
#searchresults td.type{width:7em;text-align:right; border-right:1px solid #aaa;border-bottom:none}
+#searchresults tr.current{background-color:#ddd}
diff --git a/search/js/result.js b/search/js/result.js
index 5ccc42252bf..1087f9684b2 100644
--- a/search/js/result.js
+++ b/search/js/result.js
@@ -30,12 +30,14 @@ OC.search.showResults=function(results){
$(window).click(function(event){
OC.search.hide();
});
+ OC.search.lastResults=results;
OC.search.showResults(results);
});
}else{
var types=OC.search.catagorizeResults(results);
$('#searchresults').show();
$('#searchresults tr.result').remove();
+ var index=0;
for(var name in types){
var type=types[name];
if(type.length>0){
@@ -46,6 +48,8 @@ OC.search.showResults=function(results){
row.find('td.result a').attr('href',type[0].link);
row.find('td.result div.name').text(type[0].name);
row.find('td.result div.text').text(type[0].text);
+ row.data('index',index);
+ index++;
if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here
OC.search.customResults[name](row,type[0]);
}
@@ -57,6 +61,8 @@ OC.search.showResults=function(results){
row.find('td.result a').attr('href',type[i].link);
row.find('td.result div.name').text(type[i].name);
row.find('td.result div.text').text(type[i].text);
+ row.data('index',index);
+ index++;
if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here
OC.search.customResults[name](row,type[i]);
}
@@ -67,3 +73,11 @@ OC.search.showResults=function(results){
}
}
OC.search.showResults.loaded=false;
+
+OC.search.renderCurrent=function(){
+ if($('#searchresults tr.result')[OC.search.currentResult]){
+ var result=$('#searchresults tr.result')[OC.search.currentResult];
+ $('#searchresults tr.result').removeClass('current');
+ $(result).addClass('current');
+ }
+}