move code from js.js to search.js in the search app
This commit is contained in:
parent
d3662722f6
commit
088323aad5
4 changed files with 145 additions and 82 deletions
|
@ -308,22 +308,9 @@ var OC={
|
|||
* Do a search query and display the results
|
||||
* @param {string} query the search query
|
||||
*/
|
||||
search: _.debounce(function(query){
|
||||
if(query){
|
||||
OC.addStyle('search','results');
|
||||
var classList = document.getElementById('content').className.split(/\s+/);
|
||||
var inApps = [];
|
||||
for (var i = 0; i < classList.length; i++) {
|
||||
if (classList[i].indexOf('app-') === 0) {
|
||||
var inApps = [classList[i].substr(4)];
|
||||
}
|
||||
}
|
||||
$.getJSON(OC.generateUrl('search/ajax/search.php'), {inApps:inApps, query:query}, function(results){
|
||||
OC.Search.lastResults=results;
|
||||
OC.Search.showResults(results);
|
||||
});
|
||||
}
|
||||
}, 500),
|
||||
search: function (query) {
|
||||
OC.Search.search(query)
|
||||
},
|
||||
/**
|
||||
* Dialog helper for jquery dialogs.
|
||||
*
|
||||
|
@ -1075,48 +1062,6 @@ function initCore() {
|
|||
}else{
|
||||
SVGSupport.checkMimeType();
|
||||
}
|
||||
$('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];
|
||||
window.location = $(result).attr('href');
|
||||
}
|
||||
}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();
|
||||
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
|
||||
FileList.unfilter();
|
||||
}
|
||||
}else{
|
||||
var query=$('#searchbox').val();
|
||||
if(OC.Search.lastQuery!==query){
|
||||
OC.Search.lastQuery=query;
|
||||
OC.Search.currentResult=-1;
|
||||
if (FileList && typeof FileList.filter === 'function') { //TODO add hook system
|
||||
FileList.filter(query);
|
||||
}
|
||||
if(query.length>2){
|
||||
OC.search(query);
|
||||
}else{
|
||||
if(OC.Search.hide){
|
||||
OC.Search.hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// user menu
|
||||
$('#settings #expand').keydown(function(event) {
|
||||
|
|
|
@ -362,6 +362,7 @@ class OC {
|
|||
OC_Util::addScript("eventsource");
|
||||
OC_Util::addScript("config");
|
||||
//OC_Util::addScript( "multiselect" );
|
||||
OC_Util::addScript('search', 'search');
|
||||
OC_Util::addScript('search', 'result');
|
||||
OC_Util::addScript("oc-requesttoken");
|
||||
OC_Util::addScript("apps");
|
||||
|
|
|
@ -8,14 +8,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
//translations for result type ids, can be extended by apps
|
||||
OC.Search.resultTypes={
|
||||
file: t('core','File'),
|
||||
folder: t('core','Folder'),
|
||||
image: t('core','Image'),
|
||||
audio: t('core','Audio')
|
||||
};
|
||||
OC.Search.hide=function(){
|
||||
OC.Search.hide = function(){
|
||||
$('#searchresults').hide();
|
||||
if($('#searchbox').val().length>2){
|
||||
$('#searchbox').val('');
|
||||
|
@ -29,15 +22,15 @@ OC.Search.hide=function(){
|
|||
}
|
||||
}
|
||||
};
|
||||
OC.Search.showResults=function(results){
|
||||
OC.Search.showResults = function(results){
|
||||
if(results.length === 0){
|
||||
return;
|
||||
}
|
||||
if(!OC.Search.showResults.loaded){
|
||||
var parent=$('<div class="searchresults-wrapper"/>');
|
||||
if (!OC.Search.showResults.loaded){
|
||||
var parent = $('<div class="searchresults-wrapper"/>');
|
||||
$('#app-content').append(parent);
|
||||
parent.load(OC.filePath('search','templates','part.results.php'),function(){
|
||||
OC.Search.showResults.loaded=true;
|
||||
OC.Search.showResults.loaded = true;
|
||||
$('#searchresults').click(function(event){
|
||||
OC.Search.hide();
|
||||
event.stopPropagation();
|
||||
|
@ -68,19 +61,18 @@ OC.Search.showResults=function(results){
|
|||
$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){
|
||||
* OC.search.customResults.file = function (row, item){ FIXME
|
||||
* if(item.name.search('.json') >= 0) ...
|
||||
* };
|
||||
*/
|
||||
if(OC.Search.hasFormatter(result.type)){
|
||||
if (OC.Search.hasFormatter(result.type)) {
|
||||
OC.Search.getFormatter(result.type)($row, result);
|
||||
} else
|
||||
{
|
||||
} 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]){
|
||||
if(OC.search.customResults && OC.search.customResults[result.type]) {
|
||||
OC.search.customResults[result.type]($row, result);
|
||||
}
|
||||
}
|
||||
|
@ -99,13 +91,22 @@ OC.Search.showResults=function(results){
|
|||
});
|
||||
}
|
||||
};
|
||||
OC.Search.showResults.loaded=false;
|
||||
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');
|
||||
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');
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -117,7 +118,7 @@ OC.Search.setFormatter('file', function ($row, result) {
|
|||
result.mime = result.mime_type;
|
||||
}
|
||||
|
||||
$pathDiv = $('<div class="path"></div>').text(result.path)
|
||||
$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);
|
||||
|
|
116
search/js/search.js
Normal file
116
search/js/search.js
Normal file
|
@ -0,0 +1,116 @@
|
|||
/**
|
||||
* ownCloud - core
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Bernhard Posselt <dev@bernhard-posselt.com>
|
||||
* @copyright Bernhard Posselt 2014
|
||||
*/
|
||||
|
||||
(function (exports) {
|
||||
|
||||
'use strict';
|
||||
|
||||
exports.Search = {
|
||||
/**
|
||||
* contains closures that are called to format search results
|
||||
*/
|
||||
formatter:{},
|
||||
setFormatter: function(type, formatter) {
|
||||
this.formatter[type] = formatter;
|
||||
},
|
||||
hasFormatter: function(type) {
|
||||
return typeof this.formatter[type] !== 'undefined';
|
||||
},
|
||||
getFormatter: function(type) {
|
||||
return this.formatter[type];
|
||||
},
|
||||
/**
|
||||
* contains closures that are called when a search result has been clicked
|
||||
*/
|
||||
handler:{},
|
||||
setHandler: function(type, handler) {
|
||||
this.handler[type] = handler;
|
||||
},
|
||||
hasHandler: function(type) {
|
||||
return typeof this.handler[type] !== 'undefined';
|
||||
},
|
||||
getHandler: function(type) {
|
||||
return this.handler[type];
|
||||
},
|
||||
currentResult:-1,
|
||||
lastQuery:'',
|
||||
lastResults:{},
|
||||
/**
|
||||
* Do a search query and display the results
|
||||
* @param {string} query the search query
|
||||
*/
|
||||
search: _.debounce(function(query) {
|
||||
if(query) {
|
||||
exports.addStyle('search','results');
|
||||
$.getJSON(exports.filePath('search','ajax','search.php')+'?query=' + encodeURIComponent(query), function(results) {
|
||||
exports.Search.lastResults = results;
|
||||
exports.Search.showResults(results);
|
||||
});
|
||||
}
|
||||
}, 500)
|
||||
};
|
||||
|
||||
|
||||
$(document).ready(function () {
|
||||
$('form.searchbox').submit(function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
$('#searchbox').keyup(function(event) {
|
||||
if (event.keyCode === 13) { //enter
|
||||
if(exports.Search.currentResult > -1) {
|
||||
var result = $('#searchresults tr.result a')[exports.Search.currentResult];
|
||||
window.location = $(result).attr('href');
|
||||
}
|
||||
} else if(event.keyCode === 38) { //up
|
||||
if(exports.Search.currentResult > 0) {
|
||||
exports.Search.currentResult--;
|
||||
exports.Search.renderCurrent();
|
||||
|
||||
}
|
||||
} else if(event.keyCode === 40) { //down
|
||||
if(exports.Search.lastResults.length > exports.Search.currentResult + 1){
|
||||
exports.Search.currentResult++;
|
||||
exports.Search.renderCurrent();
|
||||
}
|
||||
} else if(event.keyCode === 27) { //esc
|
||||
exports.Search.hide();
|
||||
if (FileList && typeof FileList.unfilter === 'function') { //TODO add hook system
|
||||
FileList.unfilter();
|
||||
}
|
||||
} else {
|
||||
var query = $('#searchbox').val();
|
||||
if (exports.Search.lastQuery !== query) {
|
||||
exports.Search.lastQuery = query;
|
||||
exports.Search.currentResult = -1;
|
||||
if (FileList && typeof FileList.filter === 'function') { //TODO add hook system
|
||||
FileList.filter(query);
|
||||
}
|
||||
if (query.length > 2) {
|
||||
exports.Search.search(query);
|
||||
} else {
|
||||
if (exports.Search.hide) {
|
||||
exports.Search.hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
}(OC));
|
||||
|
||||
/**
|
||||
* @deprecated use get/setFormatter() instead
|
||||
*/
|
||||
OC.search.customResults = {};
|
||||
/**
|
||||
* @deprecated use get/setFormatter() instead
|
||||
*/
|
||||
OC.search.resultTypes = {};
|
Loading…
Reference in a new issue