2014-10-24 14:50:54 +04:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2014
|
|
|
|
*
|
|
|
|
* This file is licensed under the Affero General Public License version 3
|
|
|
|
* or later.
|
|
|
|
*
|
|
|
|
* See the COPYING-README file.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
//translations for result type ids, can be extended by apps
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.resultTypes={
|
2014-10-24 14:50:54 +04:00
|
|
|
file: t('core','File'),
|
|
|
|
folder: t('core','Folder'),
|
|
|
|
image: t('core','Image'),
|
|
|
|
audio: t('core','Audio')
|
|
|
|
};
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.hide=function(){
|
2011-07-30 23:18:54 +04:00
|
|
|
$('#searchresults').hide();
|
|
|
|
if($('#searchbox').val().length>2){
|
|
|
|
$('#searchbox').val('');
|
2013-08-01 00:24:52 +04:00
|
|
|
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
|
|
|
|
FileList.unfilter();
|
|
|
|
}
|
2011-07-30 23:18:54 +04:00
|
|
|
};
|
2013-08-01 00:24:52 +04:00
|
|
|
if ($('#searchbox').val().length === 0) {
|
|
|
|
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
|
|
|
|
FileList.unfilter();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.showResults=function(results){
|
2013-08-01 00:24:52 +04:00
|
|
|
if(results.length === 0){
|
2011-07-31 04:05:07 +04:00
|
|
|
return;
|
|
|
|
}
|
2014-12-06 02:53:06 +03:00
|
|
|
if(!OC.Search.showResults.loaded){
|
2014-12-04 15:43:38 +03:00
|
|
|
var parent=$('<div class="searchresults-wrapper"/>');
|
|
|
|
$('#app-content').append(parent);
|
2011-07-30 23:18:54 +04:00
|
|
|
parent.load(OC.filePath('search','templates','part.results.php'),function(){
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.showResults.loaded=true;
|
2011-07-30 23:18:54 +04:00
|
|
|
$('#searchresults').click(function(event){
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.hide();
|
2011-07-30 23:18:54 +04:00
|
|
|
event.stopPropagation();
|
|
|
|
});
|
2013-02-21 20:38:25 +04:00
|
|
|
$(document).click(function(event){
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.hide();
|
2013-08-01 00:24:52 +04:00
|
|
|
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
|
|
|
|
FileList.unfilter();
|
|
|
|
}
|
2011-07-30 23:18:54 +04:00
|
|
|
});
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.lastResults=results;
|
|
|
|
OC.Search.showResults(results);
|
2011-07-30 23:18:54 +04:00
|
|
|
});
|
2014-12-06 02:53:06 +03:00
|
|
|
} else {
|
2011-07-30 23:18:54 +04:00
|
|
|
$('#searchresults tr.result').remove();
|
2014-12-06 02:53:06 +03:00
|
|
|
$('#searchresults').show();
|
|
|
|
jQuery.each(results, function(i, result) {
|
|
|
|
var $row = $('#searchresults tr.template').clone();
|
|
|
|
$row.removeClass('template');
|
|
|
|
$row.addClass('result');
|
2014-12-04 15:43:38 +03:00
|
|
|
|
2014-12-06 02:53:06 +03:00
|
|
|
$row.data('result', result);
|
2014-12-04 15:43:38 +03:00
|
|
|
|
2014-12-06 02:53:06 +03:00
|
|
|
// generic results only have four attributes
|
|
|
|
$row.find('td.info div.name').text(result.name);
|
|
|
|
$row.find('td.info a').attr('href', result.link);
|
2014-12-04 15:43:38 +03:00
|
|
|
|
2014-12-06 02:53:06 +03:00
|
|
|
$row.find('td.icon').css('background-image', 'url(' + OC.imagePath('core', 'places/link') + ')');
|
|
|
|
/**
|
|
|
|
* Give plugins the ability to customize the search results. For example:
|
|
|
|
* OC.search.customResults.file = function (row, item){
|
|
|
|
* if(item.name.search('.json') >= 0) ...
|
|
|
|
* };
|
|
|
|
*/
|
|
|
|
if(OC.Search.hasFormatter(result.type)){
|
|
|
|
OC.Search.getFormatter(result.type)($row, result);
|
|
|
|
} else
|
|
|
|
{
|
|
|
|
// for backward compatibility add text div
|
|
|
|
$row.find('td.info div.name').addClass('result')
|
|
|
|
$row.find('td.result div.name').after('<div class="text"></div>');
|
|
|
|
$row.find('td.result div.text').text(result.name);
|
|
|
|
if(OC.search.customResults[result.type]){
|
|
|
|
OC.search.customResults[result.type]($row, result);
|
2011-07-30 23:18:54 +04:00
|
|
|
}
|
|
|
|
}
|
2014-12-06 02:53:06 +03:00
|
|
|
$('#searchresults tbody').append($row);
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#searchresults').on('click', 'tr.result', function (event) {
|
|
|
|
var $row = $(this);
|
|
|
|
var result = $row.data('result');
|
|
|
|
if(OC.Search.hasHandler(result.type)){
|
|
|
|
var result = OC.Search.getHandler(result.type)($row, result, event);
|
|
|
|
OC.Search.hide();
|
|
|
|
event.stopPropagation();
|
|
|
|
return result;
|
2013-09-17 19:27:47 +04:00
|
|
|
}
|
|
|
|
});
|
2011-07-30 23:18:54 +04:00
|
|
|
}
|
2013-08-01 00:24:52 +04:00
|
|
|
};
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.showResults.loaded=false;
|
2011-07-31 06:03:48 +04:00
|
|
|
|
2014-12-06 02:53:06 +03:00
|
|
|
OC.Search.renderCurrent=function(){
|
2011-07-31 06:03:48 +04:00
|
|
|
if($('#searchresults tr.result')[OC.search.currentResult]){
|
|
|
|
var result=$('#searchresults tr.result')[OC.search.currentResult];
|
|
|
|
$('#searchresults tr.result').removeClass('current');
|
|
|
|
$(result).addClass('current');
|
|
|
|
}
|
2014-10-24 14:50:54 +04:00
|
|
|
};
|
2014-12-06 02:53:06 +03:00
|
|
|
|
|
|
|
OC.Search.setFormatter('file', function ($row, result) {
|
|
|
|
// backward compatibility:
|
|
|
|
if (typeof result.mime !== 'undefined') {
|
|
|
|
result.mime_type = result.mime;
|
|
|
|
} else if (typeof result.mime_type !== 'undefined') {
|
|
|
|
result.mime = result.mime_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
$pathDiv = $('<div class="path"></div>').text(result.path)
|
|
|
|
$row.find('td.info div.name').after($pathDiv).text(result.name);
|
|
|
|
|
|
|
|
$row.find('td.result a').attr('href', result.link);
|
|
|
|
|
|
|
|
if (OCA.Files) {
|
|
|
|
OCA.Files.App.fileList.lazyLoadPreview({
|
|
|
|
path: result.path,
|
|
|
|
mime: result.mime,
|
|
|
|
callback: function (url) {
|
|
|
|
$row.find('td.icon').css('background-image', 'url(' + url + ')');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
// FIXME how to get mime icon if not in files app
|
|
|
|
var mimeicon = result.mime.replace('/','-');
|
|
|
|
$row.find('td.icon').css('background-image', 'url(' + OC.imagePath('core', 'filetypes/'+mimeicon) + ')');
|
|
|
|
var dir = OC.dirname(result.path);
|
|
|
|
if (dir === '') {
|
|
|
|
dir = '/';
|
|
|
|
}
|
|
|
|
$row.find('td.info a').attr('href',
|
|
|
|
OC.generateUrl('/apps/files/?dir={dir}&scrollto={scrollto}', {dir:dir, scrollto:result.name})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
OC.Search.setHandler('file', function ($row, result, event) {
|
|
|
|
if (OCA.Files) {
|
|
|
|
OCA.Files.App.fileList.changeDirectory(OC.dirname(result.path));
|
|
|
|
OCA.Files.App.fileList.scrollTo(result.name);
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
OC.Search.setFormatter('folder', function ($row, result) {
|
|
|
|
// backward compatibility:
|
|
|
|
if (typeof result.mime !== 'undefined') {
|
|
|
|
result.mime_type = result.mime;
|
|
|
|
} else if (typeof result.mime_type !== 'undefined') {
|
|
|
|
result.mime = result.mime_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
var $pathDiv = $('<div class="path"></div>').text(result.path)
|
|
|
|
$row.find('td.info div.name').after($pathDiv).text(result.name);
|
|
|
|
|
|
|
|
$row.find('td.result a').attr('href', result.link);
|
|
|
|
$row.find('td.icon').css('background-image', 'url(' + OC.imagePath('core', 'filetypes/folder') + ')');
|
|
|
|
});
|
|
|
|
OC.Search.setHandler('folder', function ($row, result, event) {
|
|
|
|
if (OCA.Files) {
|
|
|
|
OCA.Files.App.fileList.changeDirectory(result.path);
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|