initial scrollto implementation:

use places/folder icon,
move link construction to JS,
only show icon on hover,
use 'searchresult' as css class name,
add filter/unfilter methods,
highlight searched files in current filelist
only filter when correct FileList is present
This commit is contained in:
Jörn Friedrich Dreyer 2013-07-31 22:24:52 +02:00
parent 9d18e16c77
commit b40925ae17
9 changed files with 116 additions and 16 deletions

View File

@ -76,6 +76,9 @@
#filestable tbody tr.selected { #filestable tbody tr.selected {
background-color: rgb(230,230,230); background-color: rgb(230,230,230);
} }
#filestable tbody tr.searchresult {
background-color: rgb(240,240,240);
}
tbody a { color:#000; } tbody a { color:#000; }
span.extension, span.uploading, td.date { color:#999; } span.extension, span.uploading, td.date { color:#999; }
span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; } span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }

View File

@ -643,6 +643,37 @@ var FileList={
if (FileList._maskTimeout){ if (FileList._maskTimeout){
window.clearTimeout(FileList._maskTimeout); window.clearTimeout(FileList._maskTimeout);
} }
},
scrollTo:function(file) {
//scroll to and highlight preselected file
var scrolltorow = $('tr[data-file="'+file+'"]');
if (scrolltorow.length > 0) {
scrolltorow.addClass('searchresult');
$(window).scrollTop(scrolltorow.position().top);
//remove highlight when hovered over
scrolltorow.one('hover', function(){
scrolltorow.removeClass('searchresult');
});
}
},
filter:function(query){
$('#fileList tr:not(.summary)').each(function(i,e){
if ($(e).data('file').toLowerCase().indexOf(query.toLowerCase()) !== -1) {
$(e).addClass("searchresult");
} else {
$(e).removeClass("searchresult");
}
});
//do not use scrollto to prevent removing searchresult css class
var first = $('#fileList tr.searchresult').first();
if (first.length !== 0) {
$(window).scrollTop(first.position().top);
}
},
unfilter:function(){
$('#fileList tr.searchresult').each(function(i,e){
$(e).removeClass("searchresult");
});
} }
}; };

View File

@ -384,6 +384,11 @@ $(document).ready(function() {
} }
}); });
} }
//scroll to and highlight preselected file
if (getURLParameter('scrollto')) {
FileList.scrollTo(getURLParameter('scrollto'));
}
}); });
function scanFiles(force, dir, users){ function scanFiles(force, dir, users){

View File

@ -723,11 +723,17 @@ $(document).ready(function(){
} }
}else if(event.keyCode===27){//esc }else if(event.keyCode===27){//esc
OC.search.hide(); OC.search.hide();
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
FileList.unfilter();
}
}else{ }else{
var query=$('#searchbox').val(); var query=$('#searchbox').val();
if(OC.search.lastQuery!==query){ if(OC.search.lastQuery!==query){
OC.search.lastQuery=query; OC.search.lastQuery=query;
OC.search.currentResult=-1; OC.search.currentResult=-1;
if (FileList && typeof FileList.filter === 'function') { //TODO add hook system
FileList.filter(query);
}
if(query.length>2){ if(query.length>2){
OC.search(query); OC.search(query);
}else{ }else{
@ -840,6 +846,13 @@ function formatDate(date){
return $.datepicker.formatDate(datepickerFormatDate, date)+' '+date.getHours()+':'+((date.getMinutes()<10)?'0':'')+date.getMinutes(); return $.datepicker.formatDate(datepickerFormatDate, date)+' '+date.getHours()+':'+((date.getMinutes()<10)?'0':'')+date.getMinutes();
} }
// taken from http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery
function getURLParameter(name) {
return decodeURI(
(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search) || [, null])[1]
);
}
/** /**
* takes an absolute timestamp and return a string with a human-friendly relative date * takes an absolute timestamp and return a string with a human-friendly relative date
* @param int a Unix timestamp * @param int a Unix timestamp

View File

@ -10,6 +10,7 @@ class OC_Search_Provider_File extends OC_Search_Provider{
$mime = $fileData['mimetype']; $mime = $fileData['mimetype'];
$name = basename($path); $name = basename($path);
$container = dirname($path);
$text = ''; $text = '';
$skip = false; $skip = false;
if($mime=='httpd/unix-directory') { if($mime=='httpd/unix-directory') {
@ -37,7 +38,7 @@ class OC_Search_Provider_File extends OC_Search_Provider{
} }
} }
if(!$skip) { if(!$skip) {
$results[] = new OC_Search_Result($name, $text, $link, $type); $results[] = new OC_Search_Result($name, $text, $link, $type, $container);
} }
} }
return $results; return $results;

View File

@ -7,6 +7,7 @@ class OC_Search_Result{
public $text; public $text;
public $link; public $link;
public $type; public $type;
public $container;
/** /**
* create a new search result * create a new search result
@ -15,10 +16,11 @@ class OC_Search_Result{
* @param string $link link for the result * @param string $link link for the result
* @param string $type the type of result as human readable string ('File', 'Music', etc) * @param string $type the type of result as human readable string ('File', 'Music', etc)
*/ */
public function __construct($name, $text, $link, $type) { public function __construct($name, $text, $link, $type, $container) {
$this->name=$name; $this->name=$name;
$this->text=$text; $this->text=$text;
$this->link=$link; $this->link=$link;
$this->type=$type; $this->type=$type;
$this->container=$container;
} }
} }

View File

@ -14,7 +14,7 @@
position:fixed; position:fixed;
right:0; right:0;
text-overflow:ellipsis; text-overflow:ellipsis;
top:20px; top:45px;
width:380px; width:380px;
z-index:75; z-index:75;
} }
@ -43,10 +43,16 @@
} }
#searchresults td { #searchresults td {
vertical-align:top;
padding:0 .3em; padding:0 .3em;
height: 32px;
}
#searchresults tr.template {
display: none;
} }
#searchresults td.result {
width:250px;
}
#searchresults td.result div.text { #searchresults td.result div.text {
padding-left:1em; padding-left:1em;
white-space:nowrap; white-space:nowrap;
@ -56,6 +62,18 @@
cursor:pointer; cursor:pointer;
} }
#searchresults td.container {
width:20px;
}
#searchresults td.container img {
vertical-align: middle;
display:none;
}
#searchresults tr:hover td.container img {
display:inline;
}
#searchresults td.type { #searchresults td.type {
border-bottom:none; border-bottom:none;
border-right:1px solid #aaa; border-right:1px solid #aaa;

View File

@ -8,15 +8,23 @@ OC.search.catagorizeResults=function(results){
types[type].push(results[i]); types[type].push(results[i]);
} }
return types; return types;
} };
OC.search.hide=function(){ OC.search.hide=function(){
$('#searchresults').hide(); $('#searchresults').hide();
if($('#searchbox').val().length>2){ if($('#searchbox').val().length>2){
$('#searchbox').val(''); $('#searchbox').val('');
}; if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
FileList.unfilter();
} }
};
if ($('#searchbox').val().length === 0) {
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
FileList.unfilter();
}
}
};
OC.search.showResults=function(results){ OC.search.showResults=function(results){
if(results.length==0){ if(results.length === 0){
return; return;
} }
if(!OC.search.showResults.loaded){ if(!OC.search.showResults.loaded){
@ -30,6 +38,9 @@ OC.search.showResults=function(results){
}); });
$(document).click(function(event){ $(document).click(function(event){
OC.search.hide(); OC.search.hide();
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
FileList.unfilter();
}
}); });
OC.search.lastResults=results; OC.search.lastResults=results;
OC.search.showResults(results); OC.search.showResults(results);
@ -46,12 +57,27 @@ OC.search.showResults=function(results){
var row=$('#searchresults tr.template').clone(); var row=$('#searchresults tr.template').clone();
row.removeClass('template'); row.removeClass('template');
row.addClass('result'); row.addClass('result');
if (i == 0){ if (i === 0){
row.children('td.type').text(name); row.children('td.type').text(name);
} }
row.find('td.result a').attr('href',type[i].link); 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.name').text(type[i].name);
row.find('td.result div.text').text(type[i].text); row.find('td.result div.text').text(type[i].text);
if (type[i].container) {
var td = row.find('td.container');
td.append('<a><img></img></a>');
td.find('img').attr('src',OC.imagePath('core','places/folder'));
var containerName = OC.basename(type[i].container);
if (containerName === '') {
containerName = '/';
}
var containerLink = OC.linkTo('files','index.php')
+'?dir='+encodeURIComponent(type[i].container)
+'&scrollto='+encodeURIComponent(type[i].name);
row.find('td.container a')
.attr('href',containerLink)
.attr('title',t('core','Show in {folder}',{folder: containerName}));
}
row.data('index',index); row.data('index',index);
index++; index++;
if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here
@ -62,7 +88,7 @@ OC.search.showResults=function(results){
} }
} }
} }
} };
OC.search.showResults.loaded=false; OC.search.showResults.loaded=false;
OC.search.renderCurrent=function(){ OC.search.renderCurrent=function(){
@ -71,4 +97,4 @@ OC.search.renderCurrent=function(){
$('#searchresults tr.result').removeClass('current'); $('#searchresults tr.result').removeClass('current');
$(result).addClass('current'); $(result).addClass('current');
} }
} };

View File

@ -9,6 +9,7 @@
<div class='text'></div> <div class='text'></div>
</a> </a>
</td> </td>
<td class='container'></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>