diff --git a/lib/private/search.php b/lib/private/search.php index 4629d52b40e..22f92534cbd 100644 --- a/lib/private/search.php +++ b/lib/private/search.php @@ -64,8 +64,10 @@ class Search implements ISearch { $providerResults = $provider->search($query); if ($size > 0) { $slicedResults = array_slice($providerResults, $page * $size, $size); + $results = array_merge($results, $slicedResults); + } else { + $results = array_merge($results, $providerResults); } - $results = array_merge($results, $slicedResults); } else { \OC::$server->getLogger()->warning('Ignoring Unknown search provider', array('provider' => $provider)); } diff --git a/search/ajax/search.php b/search/ajax/search.php index 90771084659..e26432d1eb2 100644 --- a/search/ajax/search.php +++ b/search/ajax/search.php @@ -46,7 +46,7 @@ if (isset($_GET['page'])) { if (isset($_GET['size'])) { $size = (int)$_GET['size']; } else { - $size = 0; + $size = 30; } if($query) { $result = \OC::$server->getSearch()->search($query, $inApps, $page, $size); diff --git a/search/css/results.css b/search/css/results.css index 78b60e65e45..5dbfa2bd50e 100644 --- a/search/css/results.css +++ b/search/css/results.css @@ -14,6 +14,9 @@ box-sizing: border-box; z-index:75; } +#searchresults * { + box-sizing: content-box; +} #searchresults table { border-spacing:0; @@ -23,6 +26,9 @@ } #searchresults td { + padding: 0 15px; + font-style: normal; + vertical-align: middle; border-top: 20px solid white; border-bottom: none; } diff --git a/search/js/result.js b/search/js/result.js index 95526749c53..217d66dc1e3 100644 --- a/search/js/result.js +++ b/search/js/result.js @@ -8,171 +8,76 @@ * */ -OC.Search.hide = function(){ - $('#searchresults').hide(); - if($('#searchbox').val().length>2){ - $('#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){ - if(results.length === 0){ - return; - } - if (!OC.Search.showResults.loaded){ - var parent = $('
'); - $('#app-content').append(parent); - parent.load(OC.filePath('search','templates','part.results.php'),function(){ - OC.Search.showResults.loaded = true; - $('#searchresults').click(function(event){ - OC.Search.hide(); - event.stopPropagation(); - }); - $(document).click(function(event){ - OC.Search.hide(); - if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system - FileList.unfilter(); - } - }); - OC.Search.lastResults=results; - OC.Search.showResults(results); - }); - } else { - $('#searchresults tr.result').remove(); - $('#searchresults').show(); - jQuery.each(results, function(i, result) { - var $row = $('#searchresults tr.template').clone(); - $row.removeClass('template'); - $row.addClass('result'); +//FIXME move to files? +$(document).ready(function() { + // wait for other apps/extensions to register their event handlers and file actions + // in the "ready" clause + _.defer(function() { + 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; + } - $row.data('result', result); + $pathDiv = $('').text(result.path); + $row.find('td.info div.name').after($pathDiv).text(result.name); - // generic results only have four attributes - $row.find('td.info div.name').text(result.name); - $row.find('td.info a').attr('href', result.link); + $row.find('td.result a').attr('href', result.link); - $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){ FIXME - * if(item.name.search('.json') >= 0) ... - * }; - */ - if (OC.Search.hasFormatter(result.type)) { - OC.Search.getFormatter(result.type)($row, result); + 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 { - // for backward compatibility add text div - $row.find('td.info div.name').addClass('result') - $row.find('td.result div.name').after(''); - $row.find('td.result div.text').text(result.name); - if(OC.search.customResults && OC.search.customResults[result.type]) { - OC.search.customResults[result.type]($row, result); + // 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}) + ); } - $('#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; + 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.showResults.loaded = false; -OC.Search.renderCurrent = function(){ - var $resultsContainer = $('#searchresults'); - var result = $resultsContainer.find('tr.result')[OC.Search.currentResult] - if (result) { - var $result = $(result); - var currentOffset = $resultsContainer.scrollTop(); - $resultsContainer.animate({ - // Scrolling to the top of the new result - scrollTop: currentOffset + $result.offset().top - $result.height() * 2 - }, { - duration: 100 - }); - $resultsContainer.find('tr.result.current').removeClass('current'); - $result.addClass('current'); - } -}; - -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 = $('').text(result.path); - $row.find('td.info div.name').after($pathDiv).text(result.name); + 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; + } - $row.find('td.result a').attr('href', result.link); + var $pathDiv = $('').text(result.path) + $row.find('td.info div.name').after($pathDiv).text(result.name); - 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 + ')'); + $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; } }); - } 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 = $('').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; - } + }); }); diff --git a/search/js/search.js b/search/js/search.js index 06a96fd582b..7a6428bce33 100644 --- a/search/js/search.js +++ b/search/js/search.js @@ -4,113 +4,257 @@ * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * - * @author Bernhard Posselt